{"version":3,"file":"index-CLSBoA2B.cjs","sources":["../../../node_modules/tslib/tslib.es6.mjs","../../../node_modules/ts-invariant/lib/invariant.js","../node_modules/@apollo/client/version.js","../node_modules/@apollo/client/utilities/globals/maybe.js","../node_modules/@apollo/client/utilities/globals/global.js","../node_modules/@apollo/client/utilities/common/makeUniqueId.js","../node_modules/@apollo/client/utilities/common/stringifyForDisplay.js","../node_modules/@apollo/client/utilities/globals/invariantWrappers.js","../../../node_modules/graphql/jsutils/devAssert.mjs","../../../node_modules/graphql/jsutils/isObjectLike.mjs","../../../node_modules/graphql/jsutils/invariant.mjs","../../../node_modules/graphql/language/location.mjs","../../../node_modules/graphql/language/printLocation.mjs","../../../node_modules/graphql/error/GraphQLError.mjs","../../../node_modules/graphql/error/syntaxError.mjs","../../../node_modules/graphql/language/ast.mjs","../../../node_modules/graphql/language/directiveLocation.mjs","../../../node_modules/graphql/language/kinds.mjs","../../../node_modules/graphql/language/characterClasses.mjs","../../../node_modules/graphql/language/blockString.mjs","../../../node_modules/graphql/language/tokenKind.mjs","../../../node_modules/graphql/language/lexer.mjs","../../../node_modules/graphql/jsutils/inspect.mjs","../../../node_modules/graphql/jsutils/instanceOf.mjs","../../../node_modules/graphql/language/source.mjs","../../../node_modules/graphql/language/parser.mjs","../../../node_modules/graphql/language/printString.mjs","../../../node_modules/graphql/language/visitor.mjs","../../../node_modules/graphql/language/printer.mjs","../../../node_modules/graphql/language/predicates.mjs","../node_modules/@apollo/client/utilities/graphql/directives.js","../../../node_modules/@wry/trie/lib/index.js","../node_modules/@apollo/client/utilities/common/canUse.js","../node_modules/@apollo/client/utilities/common/objects.js","../node_modules/@apollo/client/utilities/graphql/fragments.js","../../../node_modules/@wry/caches/lib/strong.js","../../../node_modules/@wry/caches/lib/weak.js","../node_modules/@apollo/client/utilities/caching/caches.js","../node_modules/@apollo/client/utilities/caching/sizes.js","../node_modules/@apollo/client/utilities/common/canonicalStringify.js","../node_modules/@apollo/client/utilities/graphql/storeUtils.js","../node_modules/@apollo/client/utilities/graphql/getFromAST.js","../../../node_modules/@wry/context/lib/slot.js","../../../node_modules/@wry/context/lib/index.js","../../../node_modules/optimism/lib/context.js","../../../node_modules/optimism/lib/helpers.js","../../../node_modules/optimism/lib/entry.js","../../../node_modules/optimism/lib/dep.js","../../../node_modules/optimism/lib/index.js","../node_modules/@apollo/client/utilities/graphql/DocumentTransform.js","../node_modules/@apollo/client/utilities/graphql/print.js","../node_modules/@apollo/client/utilities/common/arrays.js","../node_modules/@apollo/client/utilities/graphql/transform.js","../node_modules/@apollo/client/utilities/common/mergeDeep.js","../../../node_modules/zen-observable-ts/module.js","../../../node_modules/symbol-observable/es/ponyfill.js","../../../node_modules/symbol-observable/es/index.js","../node_modules/@apollo/client/utilities/observables/Observable.js","../node_modules/@apollo/client/utilities/promises/preventUnhandledRejection.js","../node_modules/@apollo/client/utilities/common/cloneDeep.js","../node_modules/@apollo/client/utilities/observables/iteration.js","../node_modules/@apollo/client/utilities/observables/asyncMap.js","../node_modules/@apollo/client/utilities/observables/subclassing.js","../node_modules/@apollo/client/utilities/observables/Concast.js","../node_modules/@apollo/client/utilities/common/incrementalResult.js","../node_modules/@apollo/client/utilities/common/errorHandling.js","../node_modules/@apollo/client/utilities/common/compact.js","../node_modules/@apollo/client/utilities/common/mergeOptions.js","../node_modules/@apollo/client/utilities/common/omitDeep.js","../node_modules/@apollo/client/utilities/common/stripTypename.js","../node_modules/@apollo/client/utilities/deprecation/index.js","../node_modules/@apollo/client/link/utils/fromError.js","../node_modules/@apollo/client/link/utils/throwServerError.js","../node_modules/@apollo/client/link/utils/validateOperation.js","../node_modules/@apollo/client/link/utils/createOperation.js","../node_modules/@apollo/client/link/utils/transformOperation.js","../node_modules/@apollo/client/link/utils/filterOperationVariables.js","../node_modules/@apollo/client/link/core/ApolloLink.js","../node_modules/@apollo/client/link/core/from.js","../node_modules/@apollo/client/link/core/execute.js","../node_modules/@apollo/client/link/http/iterators/async.js","../node_modules/@apollo/client/link/http/iterators/nodeStream.js","../node_modules/@apollo/client/link/http/iterators/promise.js","../node_modules/@apollo/client/link/http/iterators/reader.js","../node_modules/@apollo/client/link/http/responseIterator.js","../node_modules/@apollo/client/errors/index.js","../node_modules/@apollo/client/link/http/parseAndCheckHttpResponse.js","../node_modules/@apollo/client/link/http/serializeFetchParameter.js","../node_modules/@apollo/client/link/http/selectHttpOptionsAndBody.js","../node_modules/@apollo/client/link/http/selectURI.js","../node_modules/@apollo/client/link/http/rewriteURIForGET.js","../node_modules/@apollo/client/link/http/createHttpLink.js","../node_modules/@apollo/client/link/http/HttpLink.js","../../../node_modules/@wry/equality/lib/index.js","../node_modules/@apollo/client/core/equalByQuery.js","../node_modules/@apollo/client/masking/utils.js","../node_modules/@apollo/client/masking/maskDefinition.js","../node_modules/@apollo/client/masking/maskFragment.js","../node_modules/@apollo/client/masking/maskOperation.js","../node_modules/@apollo/client/cache/core/cache.js","../node_modules/@apollo/client/cache/core/types/common.js","../node_modules/@apollo/client/cache/inmemory/helpers.js","../node_modules/@apollo/client/cache/inmemory/entityStore.js","../node_modules/@apollo/client/cache/inmemory/object-canon.js","../node_modules/@apollo/client/cache/inmemory/readFromStore.js","../node_modules/@apollo/client/cache/inmemory/reactiveVars.js","../node_modules/@apollo/client/cache/inmemory/key-extractor.js","../node_modules/@apollo/client/cache/inmemory/policies.js","../node_modules/@apollo/client/cache/inmemory/writeToStore.js","../node_modules/@apollo/client/cache/inmemory/inMemoryCache.js","../node_modules/@apollo/client/core/networkStatus.js","../node_modules/@apollo/client/core/ObservableQuery.js","../node_modules/@apollo/client/core/QueryInfo.js","../node_modules/@apollo/client/core/QueryManager.js","../node_modules/@apollo/client/core/LocalState.js","../node_modules/@apollo/client/core/ApolloClient.js","../../../node_modules/graphql-tag/lib/index.js","../src/types.ts","../src/util/exception.ts","../src/services/persistence.ts","../node_modules/@apollo/client/link/context/index.js","../node_modules/@apollo/client/link/error/index.js","../src/Configuration.ts","../node_modules/react/cjs/react.production.min.js","../node_modules/react/cjs/react.development.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../node_modules/react-dom/server.browser.js","../src/util/crossplatform.ts","../node_modules/@apollo/client/link/remove-typename/removeTypenameFromVariables.js","../node_modules/@apollo/client/link/retry/delayFunction.js","../node_modules/@apollo/client/link/retry/retryFunction.js","../node_modules/@apollo/client/link/retry/retryLink.js","../src/services/server.ts","../src/customCanvas.ts","../../../node_modules/exifr/dist/mini.umd.cjs","../src/util/image.ts","../../../node_modules/css/lib/parse/index.js","../../../node_modules/css/index.js","../../../node_modules/fuse.js/dist/fuse.mjs","../src/util/color.ts","../src/util/illustration.ts","../src/services/asset.ts","../src/services/promiseCache.ts","../src/util/asset.ts","../src/services/option.ts","../src/query.ts","../../../node_modules/performance-now/lib/performance-now.js","../../../node_modules/raf/index.js","../../../node_modules/rgbcolor/index.js","../../../node_modules/svg-pathdata/lib/SVGPathData.module.js","../../../node_modules/stackblur-canvas/dist/stackblur-es.js","../../../node_modules/pith/dist/index.mjs","../src/WorkflowManager/scenes/index.ts","../src/util/PromiseQueue/index.ts","../../../node_modules/lodash.clonedeep/index.js","../../../node_modules/lodash.isequal/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/util/guid.ts","../src/Elements/SVGLayout.tsx","../src/util/math.ts","../src/Elements/Image.tsx","../src/Elements/Group.tsx","../src/Elements/Frame.tsx","../../../node_modules/opentype.js/dist/opentype.module.js","../../../node_modules/html-entities/dist/esm/named-references.js","../../../node_modules/html-entities/dist/esm/numeric-unicode-map.js","../../../node_modules/html-entities/dist/esm/surrogate-pairs.js","../../../node_modules/html-entities/dist/esm/index.js","../src/util/font.ts","../src/text/algorithm/traditional.ts","../src/text/shared.ts","../../../node_modules/handlebars/dist/cjs/handlebars/utils.js","../../../node_modules/handlebars/dist/cjs/handlebars/exception.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","../../../node_modules/handlebars/dist/cjs/handlebars/helpers.js","../../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","../../../node_modules/handlebars/dist/cjs/handlebars/decorators.js","../../../node_modules/handlebars/dist/cjs/handlebars/logger.js","../../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","../../../node_modules/handlebars/dist/cjs/handlebars/base.js","../../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js","../../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","../../../node_modules/handlebars/dist/cjs/handlebars/runtime.js","../../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","../../../node_modules/handlebars/dist/cjs/handlebars.runtime.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js","../../../node_modules/source-map/lib/base64.js","../../../node_modules/source-map/lib/base64-vlq.js","../../../node_modules/source-map/lib/util.js","../../../node_modules/source-map/lib/array-set.js","../../../node_modules/source-map/lib/mapping-list.js","../../../node_modules/source-map/lib/source-map-generator.js","../../../node_modules/source-map/lib/binary-search.js","../../../node_modules/source-map/lib/quick-sort.js","../../../node_modules/source-map/lib/source-map-consumer.js","../../../node_modules/source-map/lib/source-node.js","../../../node_modules/source-map/source-map.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js","../../../node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","../../../node_modules/handlebars/dist/cjs/handlebars.js","../src/util/text.ts","../src/Elements/Textbox.tsx","../src/Elements/Illustration.tsx","../src/CommandContext.tsx","../../../node_modules/data-uri-to-buffer/dist/common.js","../../../node_modules/data-uri-to-buffer/dist/index.js","../src/util/frame.ts","../src/Elements/factory.ts","../src/LayoutsState.ts","../src/command.ts","../src/services/SilentStepHandler/index.ts","../../../node_modules/qrcode/lib/can-promise.js","../../../node_modules/qrcode/lib/core/utils.js","../../../node_modules/qrcode/lib/core/error-correction-level.js","../../../node_modules/qrcode/lib/core/bit-buffer.js","../../../node_modules/qrcode/lib/core/bit-matrix.js","../../../node_modules/qrcode/lib/core/alignment-pattern.js","../../../node_modules/qrcode/lib/core/finder-pattern.js","../../../node_modules/qrcode/lib/core/mask-pattern.js","../../../node_modules/qrcode/lib/core/error-correction-code.js","../../../node_modules/qrcode/lib/core/galois-field.js","../../../node_modules/qrcode/lib/core/polynomial.js","../../../node_modules/qrcode/lib/core/reed-solomon-encoder.js","../../../node_modules/qrcode/lib/core/version-check.js","../../../node_modules/qrcode/lib/core/regex.js","../../../node_modules/qrcode/lib/core/mode.js","../../../node_modules/qrcode/lib/core/version.js","../../../node_modules/qrcode/lib/core/format-info.js","../../../node_modules/qrcode/lib/core/numeric-data.js","../../../node_modules/qrcode/lib/core/alphanumeric-data.js","../../../node_modules/qrcode/lib/core/byte-data.js","../../../node_modules/qrcode/lib/core/kanji-data.js","../../../node_modules/dijkstrajs/dijkstra.js","../../../node_modules/qrcode/lib/core/segments.js","../../../node_modules/qrcode/lib/core/qrcode.js","../../../node_modules/qrcode/lib/renderer/utils.js","../../../node_modules/qrcode/lib/renderer/canvas.js","../../../node_modules/qrcode/lib/renderer/svg-tag.js","../../../node_modules/qrcode/lib/browser.js","../src/services/shortener.ts","../src/util/Poller.ts","../src/services/steps/digitalContent.ts","../src/services/steps/frame/index.ts","../src/services/steps/illustration.ts","../src/services/steps/material.ts","../src/services/steps/model.ts","../../../node_modules/unicode-default-word-boundary/lib/gen/WordBreakProperty.js","../../../node_modules/unicode-default-word-boundary/lib/findBoundaries.js","../../../node_modules/unicode-default-word-boundary/lib/index.js","../src/services/steps/module.ts","../src/services/steps/picture.ts","../src/services/steps/question.ts","../src/services/steps/shape.ts","../src/services/toast.ts","../src/text/algorithm/autosize.ts","../src/services/steps/text/index.ts","../src/module/ModuleProduct.ts","../src/module/products/Vegemite/font.ts","../src/module/svg/elements.ts","../src/module/svg/modify.ts","../src/module/svg/Warp.ts","../../../node_modules/svgpath/lib/path_parse.js","../../../node_modules/svgpath/lib/matrix.js","../../../node_modules/svgpath/lib/transform_parse.js","../../../node_modules/svgpath/lib/a2c.js","../../../node_modules/svgpath/lib/ellipse.js","../../../node_modules/svgpath/lib/svgpath.js","../../../node_modules/svgpath/index.js","../../../node_modules/svg-path-bbox/dist/index.js","../src/module/products/Vegemite/index.ts","../src/module/resolver.ts","../src/generation/index.ts","../src/WorkflowManager/LayoutPreviewService/index.ts","../src/GlobalPropertyStateManager/query.ts","../src/Bundle/query.ts","../src/util/object.ts","../src/WorkflowManager/index.ts","../src/stepHandles/resource/variant.ts","../src/stepHandles/index.ts","../src/stepHandles/steps/illustration.ts","../src/stepHandles/steps/material.ts","../src/stepHandles/steps/model.ts","../src/stepHandles/steps/picture.ts","../src/stepHandles/steps/question.ts","../src/stepHandles/steps/shape.ts","../src/stepHandles/steps/text.ts","../src/stepHandles/steps/information.ts","../src/stepHandles/steps/digitalContent.ts","../src/stepHandles/steps/module.ts","../src/stepHandles/factory.ts","../../../node_modules/lodash.chunk/index.js","../src/services/design.ts","../../../node_modules/lodash.debounce/index.js","../src/WorkflowExperience/index.ts","../src/GlobalPropertyConfiguration/index.ts","../../../node_modules/lodash.omit/index.js","../src/util/omitDeep.ts","../src/GlobalPropertyStateManager/index.ts","../src/Bundle/stateManager.ts","../src/services/metafield.ts","../src/productCollection.ts","../src/util/event.ts","../src/Bundle/index.ts","../src/flowService.ts","../src/integration.ts","../src/customer.ts","../src/services/graphql.ts","../../../node_modules/@smithy/protocol-http/dist-es/extensions/httpExtensionConfiguration.js","../../../node_modules/@smithy/types/dist-es/endpoint.js","../../../node_modules/@smithy/types/dist-es/extensions/checksum.js","../../../node_modules/@smithy/types/dist-es/middleware.js","../../../node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../../../node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../../../node_modules/@aws-sdk/middleware-host-header/dist-es/index.js","../../../node_modules/@aws-sdk/middleware-logger/dist-es/loggerMiddleware.js","../../../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/configuration.js","../../../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/recursionDetectionMiddleware.browser.js","../../../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/getRecursionDetectionPlugin.js","../../../node_modules/@smithy/util-middleware/dist-es/getSmithyContext.js","../../../node_modules/@smithy/util-middleware/dist-es/normalizeProvider.js","../../../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/resolveAuthOptions.js","../../../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/httpAuthSchemeMiddleware.js","../../../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemeEndpointRuleSetPlugin.js","../../../node_modules/@smithy/core/dist-es/middleware-http-signing/httpSigningMiddleware.js","../../../node_modules/@smithy/core/dist-es/middleware-http-signing/getHttpSigningMiddleware.js","../../../node_modules/@smithy/core/dist-es/normalizeProvider.js","../../../node_modules/@smithy/util-base64/dist-es/constants.browser.js","../../../node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js","../../../node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../../../node_modules/@smithy/util-utf8/dist-es/toUint8Array.js","../../../node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../../../node_modules/@smithy/util-base64/dist-es/toBase64.browser.js","../../../node_modules/@smithy/core/node_modules/@smithy/util-stream/dist-es/blob/Uint8ArrayBlobAdapter.js","../../../node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../../../node_modules/@smithy/querystring-builder/dist-es/index.js","../../../node_modules/@smithy/fetch-http-handler/dist-es/create-request.js","../../../node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../../../node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../../../node_modules/@smithy/fetch-http-handler/dist-es/stream-collector.js","../../../node_modules/@smithy/util-hex-encoding/dist-es/index.js","../../../node_modules/@smithy/core/dist-es/submodules/protocols/collect-stream-body.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/deref.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/schemas/operation.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaDeserializationMiddleware.js","../../../node_modules/@smithy/querystring-parser/dist-es/index.js","../../../node_modules/@smithy/url-parser/dist-es/index.js","../../../node_modules/@smithy/core/dist-es/submodules/endpoints/toEndpointV1.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaSerializationMiddleware.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/middleware/getSchemaSerdePlugin.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/schemas/translateTraits.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/schemas/NormalizedSchema.js","../../../node_modules/@smithy/core/dist-es/submodules/schema/TypeRegistry.js","../../../node_modules/@smithy/core/dist-es/submodules/serde/parse-utils.js","../../../node_modules/@smithy/core/dist-es/submodules/serde/date-utils.js","../../../node_modules/@smithy/uuid/dist-es/randomUUID.browser.js","../../../node_modules/@smithy/uuid/dist-es/v4.js","../../../node_modules/@smithy/core/dist-es/submodules/serde/lazy-json.js","../../../node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js","../../../node_modules/@smithy/core/dist-es/submodules/protocols/SerdeContext.js","../../../node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js","../../../node_modules/@smithy/core/dist-es/submodules/protocols/RpcProtocol.js","../../../node_modules/@smithy/core/dist-es/submodules/protocols/serde/determineTimestampFormat.js","../../../node_modules/@smithy/core/dist-es/setFeature.js","../../../node_modules/@smithy/core/dist-es/util-identity-and-auth/DefaultIdentityProviderConfig.js","../../../node_modules/@smithy/core/dist-es/util-identity-and-auth/httpAuthSchemes/noAuth.js","../../../node_modules/@smithy/core/dist-es/util-identity-and-auth/memoizeIdentityProvider.js","../../../node_modules/@aws-sdk/middleware-user-agent/dist-es/configurations.js","../../../node_modules/@smithy/util-endpoints/dist-es/cache/EndpointCache.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/isIpAddress.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/isValidHostLabel.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/customEndpointFunctions.js","../../../node_modules/@smithy/util-endpoints/dist-es/debug/debugId.js","../../../node_modules/@smithy/util-endpoints/dist-es/debug/toDebugString.js","../../../node_modules/@smithy/util-endpoints/dist-es/types/EndpointError.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/booleanEquals.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/getAttrPathList.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/getAttr.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/isSet.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/not.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/parseURL.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/stringEquals.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/substring.js","../../../node_modules/@smithy/util-endpoints/dist-es/lib/uriEncode.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/endpointFunctions.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTemplate.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/getReferenceValue.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateExpression.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateCondition.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateConditions.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointHeaders.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperties.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointUrl.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateEndpointRule.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateErrorRule.js","../../../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateRules.js","../../../node_modules/@smithy/util-endpoints/dist-es/resolveEndpoint.js","../../../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../../../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../../../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../../../node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/client/setCredentialFeature.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/client/setFeature.js","../../../node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/util-retry/dist-es/config.js","../../../node_modules/@smithy/service-error-classification/dist-es/constants.js","../../../node_modules/@smithy/service-error-classification/dist-es/index.js","../../../node_modules/@aws-sdk/middleware-user-agent/dist-es/check-features.js","../../../node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js","../../../node_modules/@aws-sdk/middleware-user-agent/dist-es/encode-features.js","../../../node_modules/@aws-sdk/middleware-user-agent/dist-es/user-agent-middleware.js","../../../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseDualstackEndpointConfigOptions.js","../../../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseFipsEndpointConfigOptions.js","../../../node_modules/@smithy/config-resolver/dist-es/regionConfig/checkRegion.js","../../../node_modules/@smithy/config-resolver/dist-es/regionConfig/isFipsRegion.js","../../../node_modules/@smithy/config-resolver/dist-es/regionConfig/getRealRegion.js","../../../node_modules/@smithy/config-resolver/dist-es/regionConfig/resolveRegionConfig.js","../../../node_modules/@smithy/middleware-content-length/dist-es/index.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/service-customizations/s3.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/createConfigValueProvider.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromConfig.browser.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/toEndpointV1.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/endpointMiddleware.js","../../../node_modules/@smithy/middleware-serde/dist-es/serdePlugin.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/getEndpointPlugin.js","../../../node_modules/@smithy/middleware-endpoint/dist-es/resolveEndpointConfig.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/config.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/constants.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/retries-2026-config.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/DefaultRetryBackoffStrategy.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/DefaultRetryToken.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/middleware-retry/dist-es/util.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/middleware-retry/dist-es/configurations.js","../../../node_modules/@smithy/middleware-stack/dist-es/MiddlewareStack.js","../../../node_modules/@smithy/smithy-client/dist-es/client.js","../../../node_modules/@smithy/smithy-client/dist-es/schemaLogFilter.js","../../../node_modules/@smithy/smithy-client/dist-es/command.js","../../../node_modules/@smithy/smithy-client/dist-es/exceptions.js","../../../node_modules/@smithy/smithy-client/dist-es/defaults-mode.js","../../../node_modules/@smithy/smithy-client/dist-es/extensions/checksum.js","../../../node_modules/@smithy/smithy-client/dist-es/extensions/retry.js","../../../node_modules/@smithy/smithy-client/dist-es/extensions/defaultExtensionConfiguration.js","../../../node_modules/@smithy/smithy-client/dist-es/NoOpLogger.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/middleware-retry/dist-es/isStreamingPayload/isStreamingPayload.browser.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/middleware-retry/dist-es/parseRetryAfterHeader.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@smithy/middleware-retry/dist-es/retryMiddleware.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js","../../../node_modules/@smithy/property-provider/dist-es/memoize.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/constants.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/credentialDerivation.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js","../../../node_modules/@smithy/is-array-buffer/dist-es/index.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/HeaderFormatter.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/headerUtil.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/prepareRequest.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/utilDate.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/SignatureV4Base.js","../../../node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4/dist-es/SignatureV4.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/auth/httpAuthSchemeProvider.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/endpoint/EndpointParameters.js","../../../node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../../../node_modules/@aws-crypto/util/build/module/convertToBuffer.js","../../../node_modules/@aws-crypto/util/build/module/isEmptyData.js","../../../node_modules/@aws-crypto/sha256-browser/build/module/constants.js","../../../node_modules/@aws-sdk/util-locate-window/dist-es/index.js","../../../node_modules/@aws-crypto/sha256-browser/build/module/webCryptoSha256.js","../../../node_modules/@aws-crypto/sha256-js/build/module/constants.js","../../../node_modules/@aws-crypto/sha256-js/build/module/RawSha256.js","../../../node_modules/@aws-crypto/sha256-js/build/module/jsSha256.js","../../../node_modules/@aws-crypto/supports-web-crypto/build/module/supportsWebCrypto.js","../../../node_modules/@aws-crypto/sha256-browser/build/module/crossPlatformSha256.js","../../../node_modules/@aws-sdk/util-user-agent-browser/dist-es/index.js","../../../node_modules/@smithy/invalid-dependency/dist-es/invalidProvider.js","../../../node_modules/@smithy/util-body-length-browser/dist-es/calculateBodyLength.js","../../../node_modules/@smithy/util-defaults-mode-browser/dist-es/constants.js","../../../node_modules/@smithy/util-defaults-mode-browser/dist-es/resolveDefaultsModeConfig.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/ProtocolLib.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/ConfigurableSerdeContext.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/UnionSerde.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/common.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReplacer.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonCodec.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJsonRpcProtocol.js","../../../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJson1_1Protocol.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/endpoint/ruleset.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/endpoint/endpointResolver.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/models/CognitoIdentityProviderServiceException.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/models/errors.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/schemas/schemas_0.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/runtimeConfig.shared.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/runtimeConfig.browser.js","../../../node_modules/@aws-sdk/region-config-resolver/dist-es/extensions/index.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/auth/httpAuthExtensionConfiguration.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/runtimeExtensions.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/CognitoIdentityProviderClient.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/commands/InitiateAuthCommand.js","../../../node_modules/@aws-sdk/client-cognito-identity-provider/dist-es/commands/RespondToAuthChallengeCommand.js","../src/services/userPool.ts","../../../node_modules/dinero.js/build/esm/dinero.js","../../../node_modules/first-match/index.js","../../../node_modules/nub/index.js","../../../node_modules/currency-codes/data.js","../../../node_modules/currency-codes/iso-4217-publish-date.js","../../../node_modules/currency-codes/index.js","../src/currency.ts","../src/client.ts","../src/services/steps/frame/Service.ts","../src/WorkflowManager/mock.ts","../src/stepHandles/steps/frame.ts","../src/customerPortal/queries.ts","../src/customerPortal/functions.ts","../src/addressValidation.ts","../src/util/integrationProduct.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nvar genericMessage = \"Invariant Violation\";\nvar _a = Object.setPrototypeOf, setPrototypeOf = _a === void 0 ? function (obj, proto) {\n    obj.__proto__ = proto;\n    return obj;\n} : _a;\nvar InvariantError = /** @class */ (function (_super) {\n    __extends(InvariantError, _super);\n    function InvariantError(message) {\n        if (message === void 0) { message = genericMessage; }\n        var _this = _super.call(this, typeof message === \"number\"\n            ? genericMessage + \": \" + message + \" (see https://github.com/apollographql/invariant-packages)\"\n            : message) || this;\n        _this.framesToPop = 1;\n        _this.name = genericMessage;\n        setPrototypeOf(_this, InvariantError.prototype);\n        return _this;\n    }\n    return InvariantError;\n}(Error));\nexport { InvariantError };\nexport function invariant(condition, message) {\n    if (!condition) {\n        throw new InvariantError(message);\n    }\n}\nvar verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"];\nvar verbosityLevel = verbosityLevels.indexOf(\"log\");\nfunction wrapConsoleMethod(name) {\n    return function () {\n        if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n            // Default to console.log if this host environment happens not to provide\n            // all the console.* methods we need.\n            var method = console[name] || console.log;\n            return method.apply(console, arguments);\n        }\n    };\n}\n(function (invariant) {\n    invariant.debug = wrapConsoleMethod(\"debug\");\n    invariant.log = wrapConsoleMethod(\"log\");\n    invariant.warn = wrapConsoleMethod(\"warn\");\n    invariant.error = wrapConsoleMethod(\"error\");\n})(invariant || (invariant = {}));\nexport function setVerbosity(level) {\n    var old = verbosityLevels[verbosityLevel];\n    verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n    return old;\n}\nexport default invariant;\n//# sourceMappingURL=invariant.js.map","export var version = \"3.14.1\";\n//# sourceMappingURL=version.js.map","export function maybe(thunk) {\n    try {\n        return thunk();\n    }\n    catch (_a) { }\n}\n//# sourceMappingURL=maybe.js.map","import { maybe } from \"./maybe.js\";\nexport default (maybe(function () { return globalThis; }) ||\n    maybe(function () { return window; }) ||\n    maybe(function () { return self; }) ||\n    maybe(function () { return global; }) || // We don't expect the Function constructor ever to be invoked at runtime, as\n// long as at least one of globalThis, window, self, or global is defined, so\n// we are under no obligation to make it easy for static analysis tools to\n// detect syntactic usage of the Function constructor. If you think you can\n// improve your static analysis to detect this obfuscation, think again. This\n// is an arms race you cannot win, at least not in JavaScript.\nmaybe(function () {\n    return maybe.constructor(\"return this\")();\n}));\n//# sourceMappingURL=global.js.map","var prefixCounts = new Map();\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix) {\n    var count = prefixCounts.get(prefix) || 1;\n    prefixCounts.set(prefix, count + 1);\n    return \"\".concat(prefix, \":\").concat(count, \":\").concat(Math.random().toString(36).slice(2));\n}\n//# sourceMappingURL=makeUniqueId.js.map","import { makeUniqueId } from \"./makeUniqueId.js\";\nexport function stringifyForDisplay(value, space) {\n    if (space === void 0) { space = 0; }\n    var undefId = makeUniqueId(\"stringifyForDisplay\");\n    return JSON.stringify(value, function (key, value) {\n        return value === void 0 ? undefId : value;\n    }, space)\n        .split(JSON.stringify(undefId))\n        .join(\"<undefined>\");\n}\n//# sourceMappingURL=stringifyForDisplay.js.map","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\nfunction wrap(fn) {\n    return function (message) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (typeof message === \"number\") {\n            var arg0 = message;\n            message = getHandledErrorMsg(arg0);\n            if (!message) {\n                message = getFallbackErrorMsg(arg0, args);\n                args = [];\n            }\n        }\n        fn.apply(void 0, [message].concat(args));\n    };\n}\nvar invariant = Object.assign(function invariant(condition, message) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        args[_i - 2] = arguments[_i];\n    }\n    if (!condition) {\n        originalInvariant(condition, getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args));\n    }\n}, {\n    debug: wrap(originalInvariant.debug),\n    log: wrap(originalInvariant.log),\n    warn: wrap(originalInvariant.warn),\n    error: wrap(originalInvariant.error),\n});\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(message) {\n    var optionalParams = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        optionalParams[_i - 1] = arguments[_i];\n    }\n    return new InvariantError(getHandledErrorMsg(message, optionalParams) ||\n        getFallbackErrorMsg(message, optionalParams));\n}\nvar ApolloErrorMessageHandler = Symbol.for(\"ApolloErrorMessageHandler_\" + version);\nfunction stringify(arg) {\n    if (typeof arg == \"string\") {\n        return arg;\n    }\n    try {\n        return stringifyForDisplay(arg, 2).slice(0, 1000);\n    }\n    catch (_a) {\n        return \"<non-serializable>\";\n    }\n}\nfunction getHandledErrorMsg(message, messageArgs) {\n    if (messageArgs === void 0) { messageArgs = []; }\n    if (!message)\n        return;\n    return (global[ApolloErrorMessageHandler] &&\n        global[ApolloErrorMessageHandler](message, messageArgs.map(stringify)));\n}\nfunction getFallbackErrorMsg(message, messageArgs) {\n    if (messageArgs === void 0) { messageArgs = []; }\n    if (!message)\n        return;\n    return \"An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#\".concat(encodeURIComponent(JSON.stringify({\n        version: version,\n        message: message,\n        args: messageArgs.map(stringify),\n    })));\n}\nexport { invariant, InvariantError, newInvariantError, ApolloErrorMessageHandler, };\n//# sourceMappingURL=invariantWrappers.js.map","export function devAssert(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(message);\n  }\n}\n","/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport function isObjectLike(value) {\n  return typeof value == 'object' && value !== null;\n}\n","export function invariant(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(\n      message != null ? message : 'Unexpected invariant triggered.',\n    );\n  }\n}\n","import { invariant } from '../jsutils/invariant.mjs';\nconst LineRegExp = /\\r\\n|[\\n\\r]/g;\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n  let lastLineStart = 0;\n  let line = 1;\n\n  for (const match of source.body.matchAll(LineRegExp)) {\n    typeof match.index === 'number' || invariant(false);\n\n    if (match.index >= position) {\n      break;\n    }\n\n    lastLineStart = match.index + match[0].length;\n    line += 1;\n  }\n\n  return {\n    line,\n    column: position + 1 - lastLineStart,\n  };\n}\n","import { getLocation } from './location.mjs';\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport function printLocation(location) {\n  return printSourceLocation(\n    location.source,\n    getLocation(location.source, location.start),\n  );\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n  const firstLineColumnOffset = source.locationOffset.column - 1;\n  const body = ''.padStart(firstLineColumnOffset) + source.body;\n  const lineIndex = sourceLocation.line - 1;\n  const lineOffset = source.locationOffset.line - 1;\n  const lineNum = sourceLocation.line + lineOffset;\n  const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n  const columnNum = sourceLocation.column + columnOffset;\n  const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n  const lines = body.split(/\\r\\n|[\\n\\r]/g);\n  const locationLine = lines[lineIndex]; // Special case for minified documents\n\n  if (locationLine.length > 120) {\n    const subLineIndex = Math.floor(columnNum / 80);\n    const subLineColumnNum = columnNum % 80;\n    const subLines = [];\n\n    for (let i = 0; i < locationLine.length; i += 80) {\n      subLines.push(locationLine.slice(i, i + 80));\n    }\n\n    return (\n      locationStr +\n      printPrefixedLines([\n        [`${lineNum} |`, subLines[0]],\n        ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]),\n        ['|', '^'.padStart(subLineColumnNum)],\n        ['|', subLines[subLineIndex + 1]],\n      ])\n    );\n  }\n\n  return (\n    locationStr +\n    printPrefixedLines([\n      // Lines specified like this: [\"prefix\", \"string\"],\n      [`${lineNum - 1} |`, lines[lineIndex - 1]],\n      [`${lineNum} |`, locationLine],\n      ['|', '^'.padStart(columnNum)],\n      [`${lineNum + 1} |`, lines[lineIndex + 1]],\n    ])\n  );\n}\n\nfunction printPrefixedLines(lines) {\n  const existingLines = lines.filter(([_, line]) => line !== undefined);\n  const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n  return existingLines\n    .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n    .join('\\n');\n}\n","import { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { getLocation } from '../language/location.mjs';\nimport {\n  printLocation,\n  printSourceLocation,\n} from '../language/printLocation.mjs';\n\nfunction toNormalizedOptions(args) {\n  const firstArg = args[0];\n\n  if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) {\n    return {\n      nodes: firstArg,\n      source: args[1],\n      positions: args[2],\n      path: args[3],\n      originalError: args[4],\n      extensions: args[5],\n    };\n  }\n\n  return firstArg;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport class GraphQLError extends Error {\n  /**\n   * An array of `{ line, column }` locations within the source GraphQL document\n   * which correspond to this error.\n   *\n   * Errors during validation often contain multiple locations, for example to\n   * point out two things with the same name. Errors during execution include a\n   * single location, the field which produced the error.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array describing the JSON-path into the execution response which\n   * corresponds to this error. Only included for errors during execution.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array of GraphQL AST Nodes corresponding to this error.\n   */\n\n  /**\n   * The source GraphQL document for the first location of this error.\n   *\n   * Note that if this Error represents more than one node, the source may not\n   * represent nodes after the first node.\n   */\n\n  /**\n   * An array of character offsets within the source GraphQL document\n   * which correspond to this error.\n   */\n\n  /**\n   * The original error thrown from a field resolver during execution.\n   */\n\n  /**\n   * Extension fields to add to the formatted error.\n   */\n\n  /**\n   * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n   */\n  constructor(message, ...rawArgs) {\n    var _this$nodes, _nodeLocations$, _ref;\n\n    const { nodes, source, positions, path, originalError, extensions } =\n      toNormalizedOptions(rawArgs);\n    super(message);\n    this.name = 'GraphQLError';\n    this.path = path !== null && path !== void 0 ? path : undefined;\n    this.originalError =\n      originalError !== null && originalError !== void 0\n        ? originalError\n        : undefined; // Compute list of blame nodes.\n\n    this.nodes = undefinedIfEmpty(\n      Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined,\n    );\n    const nodeLocations = undefinedIfEmpty(\n      (_this$nodes = this.nodes) === null || _this$nodes === void 0\n        ? void 0\n        : _this$nodes.map((node) => node.loc).filter((loc) => loc != null),\n    ); // Compute locations in the source for the given nodes/positions.\n\n    this.source =\n      source !== null && source !== void 0\n        ? source\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : (_nodeLocations$ = nodeLocations[0]) === null ||\n          _nodeLocations$ === void 0\n        ? void 0\n        : _nodeLocations$.source;\n    this.positions =\n      positions !== null && positions !== void 0\n        ? positions\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) => loc.start);\n    this.locations =\n      positions && source\n        ? positions.map((pos) => getLocation(source, pos))\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) => getLocation(loc.source, loc.start));\n    const originalExtensions = isObjectLike(\n      originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions,\n    )\n      ? originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions\n      : undefined;\n    this.extensions =\n      (_ref =\n        extensions !== null && extensions !== void 0\n          ? extensions\n          : originalExtensions) !== null && _ref !== void 0\n        ? _ref\n        : Object.create(null); // Only properties prescribed by the spec should be enumerable.\n    // Keep the rest as non-enumerable.\n\n    Object.defineProperties(this, {\n      message: {\n        writable: true,\n        enumerable: true,\n      },\n      name: {\n        enumerable: false,\n      },\n      nodes: {\n        enumerable: false,\n      },\n      source: {\n        enumerable: false,\n      },\n      positions: {\n        enumerable: false,\n      },\n      originalError: {\n        enumerable: false,\n      },\n    }); // Include (non-enumerable) stack trace.\n\n    /* c8 ignore start */\n    // FIXME: https://github.com/graphql/graphql-js/issues/2317\n\n    if (\n      originalError !== null &&\n      originalError !== void 0 &&\n      originalError.stack\n    ) {\n      Object.defineProperty(this, 'stack', {\n        value: originalError.stack,\n        writable: true,\n        configurable: true,\n      });\n    } else if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, GraphQLError);\n    } else {\n      Object.defineProperty(this, 'stack', {\n        value: Error().stack,\n        writable: true,\n        configurable: true,\n      });\n    }\n    /* c8 ignore stop */\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLError';\n  }\n\n  toString() {\n    let output = this.message;\n\n    if (this.nodes) {\n      for (const node of this.nodes) {\n        if (node.loc) {\n          output += '\\n\\n' + printLocation(node.loc);\n        }\n      }\n    } else if (this.source && this.locations) {\n      for (const location of this.locations) {\n        output += '\\n\\n' + printSourceLocation(this.source, location);\n      }\n    }\n\n    return output;\n  }\n\n  toJSON() {\n    const formattedError = {\n      message: this.message,\n    };\n\n    if (this.locations != null) {\n      formattedError.locations = this.locations;\n    }\n\n    if (this.path != null) {\n      formattedError.path = this.path;\n    }\n\n    if (this.extensions != null && Object.keys(this.extensions).length > 0) {\n      formattedError.extensions = this.extensions;\n    }\n\n    return formattedError;\n  }\n}\n\nfunction undefinedIfEmpty(array) {\n  return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nexport function printError(error) {\n  return error.toString();\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\n\nexport function formatError(error) {\n  return error.toJSON();\n}\n","import { GraphQLError } from './GraphQLError.mjs';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n  return new GraphQLError(`Syntax Error: ${description}`, {\n    source,\n    positions: [position],\n  });\n}\n","/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport class Location {\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The Token at which this Node begins.\n   */\n\n  /**\n   * The Token at which this Node ends.\n   */\n\n  /**\n   * The Source document the AST represents.\n   */\n  constructor(startToken, endToken, source) {\n    this.start = startToken.start;\n    this.end = endToken.end;\n    this.startToken = startToken;\n    this.endToken = endToken;\n    this.source = source;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Location';\n  }\n\n  toJSON() {\n    return {\n      start: this.start,\n      end: this.end,\n    };\n  }\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport class Token {\n  /**\n   * The kind of Token.\n   */\n\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The 1-indexed line number on which this Token appears.\n   */\n\n  /**\n   * The 1-indexed column number at which this Token begins.\n   */\n\n  /**\n   * For non-punctuation tokens, represents the interpreted value of the token.\n   *\n   * Note: is undefined for punctuation tokens, but typed as string for\n   * convenience in the parser.\n   */\n\n  /**\n   * Tokens exist as nodes in a double-linked-list amongst all tokens\n   * including ignored tokens. <SOF> is always the first node and <EOF>\n   * the last.\n   */\n  constructor(kind, start, end, line, column, value) {\n    this.kind = kind;\n    this.start = start;\n    this.end = end;\n    this.line = line;\n    this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n    this.value = value;\n    this.prev = null;\n    this.next = null;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Token';\n  }\n\n  toJSON() {\n    return {\n      kind: this.kind,\n      value: this.value,\n      line: this.line,\n      column: this.column,\n    };\n  }\n}\n/**\n * The list of all possible AST node types.\n */\n\n/**\n * @internal\n */\nexport const QueryDocumentKeys = {\n  Name: [],\n  Document: ['definitions'],\n  OperationDefinition: [\n    'description',\n    'name',\n    'variableDefinitions',\n    'directives',\n    'selectionSet',\n  ],\n  VariableDefinition: [\n    'description',\n    'variable',\n    'type',\n    'defaultValue',\n    'directives',\n  ],\n  Variable: ['name'],\n  SelectionSet: ['selections'],\n  Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n  Argument: ['name', 'value'],\n  FragmentSpread: ['name', 'directives'],\n  InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n  FragmentDefinition: [\n    'description',\n    'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0\n    'variableDefinitions',\n    'typeCondition',\n    'directives',\n    'selectionSet',\n  ],\n  IntValue: [],\n  FloatValue: [],\n  StringValue: [],\n  BooleanValue: [],\n  NullValue: [],\n  EnumValue: [],\n  ListValue: ['values'],\n  ObjectValue: ['fields'],\n  ObjectField: ['name', 'value'],\n  Directive: ['name', 'arguments'],\n  NamedType: ['name'],\n  ListType: ['type'],\n  NonNullType: ['type'],\n  SchemaDefinition: ['description', 'directives', 'operationTypes'],\n  OperationTypeDefinition: ['type'],\n  ScalarTypeDefinition: ['description', 'name', 'directives'],\n  ObjectTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n  InputValueDefinition: [\n    'description',\n    'name',\n    'type',\n    'defaultValue',\n    'directives',\n  ],\n  InterfaceTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n  EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n  EnumValueDefinition: ['description', 'name', 'directives'],\n  InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n  DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n  SchemaExtension: ['directives', 'operationTypes'],\n  ScalarTypeExtension: ['name', 'directives'],\n  ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  UnionTypeExtension: ['name', 'directives', 'types'],\n  EnumTypeExtension: ['name', 'directives', 'values'],\n  InputObjectTypeExtension: ['name', 'directives', 'fields'],\n  TypeCoordinate: ['name'],\n  MemberCoordinate: ['name', 'memberName'],\n  ArgumentCoordinate: ['name', 'fieldName', 'argumentName'],\n  DirectiveCoordinate: ['name'],\n  DirectiveArgumentCoordinate: ['name', 'argumentName'],\n};\nconst kindValues = new Set(Object.keys(QueryDocumentKeys));\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n  const maybeKind =\n    maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;\n  return typeof maybeKind === 'string' && kindValues.has(maybeKind);\n}\n/** Name */\n\nvar OperationTypeNode;\n\n(function (OperationTypeNode) {\n  OperationTypeNode['QUERY'] = 'query';\n  OperationTypeNode['MUTATION'] = 'mutation';\n  OperationTypeNode['SUBSCRIPTION'] = 'subscription';\n})(OperationTypeNode || (OperationTypeNode = {}));\n\nexport { OperationTypeNode };\n","/**\n * The set of allowed directive location values.\n */\nvar DirectiveLocation;\n\n(function (DirectiveLocation) {\n  DirectiveLocation['QUERY'] = 'QUERY';\n  DirectiveLocation['MUTATION'] = 'MUTATION';\n  DirectiveLocation['SUBSCRIPTION'] = 'SUBSCRIPTION';\n  DirectiveLocation['FIELD'] = 'FIELD';\n  DirectiveLocation['FRAGMENT_DEFINITION'] = 'FRAGMENT_DEFINITION';\n  DirectiveLocation['FRAGMENT_SPREAD'] = 'FRAGMENT_SPREAD';\n  DirectiveLocation['INLINE_FRAGMENT'] = 'INLINE_FRAGMENT';\n  DirectiveLocation['VARIABLE_DEFINITION'] = 'VARIABLE_DEFINITION';\n  DirectiveLocation['SCHEMA'] = 'SCHEMA';\n  DirectiveLocation['SCALAR'] = 'SCALAR';\n  DirectiveLocation['OBJECT'] = 'OBJECT';\n  DirectiveLocation['FIELD_DEFINITION'] = 'FIELD_DEFINITION';\n  DirectiveLocation['ARGUMENT_DEFINITION'] = 'ARGUMENT_DEFINITION';\n  DirectiveLocation['INTERFACE'] = 'INTERFACE';\n  DirectiveLocation['UNION'] = 'UNION';\n  DirectiveLocation['ENUM'] = 'ENUM';\n  DirectiveLocation['ENUM_VALUE'] = 'ENUM_VALUE';\n  DirectiveLocation['INPUT_OBJECT'] = 'INPUT_OBJECT';\n  DirectiveLocation['INPUT_FIELD_DEFINITION'] = 'INPUT_FIELD_DEFINITION';\n})(DirectiveLocation || (DirectiveLocation = {}));\n\nexport { DirectiveLocation };\n/**\n * The enum type representing the directive location values.\n *\n * @deprecated Please use `DirectiveLocation`. Will be remove in v17.\n */\n","/**\n * The set of allowed kind values for AST nodes.\n */\nvar Kind;\n\n(function (Kind) {\n  Kind['NAME'] = 'Name';\n  Kind['DOCUMENT'] = 'Document';\n  Kind['OPERATION_DEFINITION'] = 'OperationDefinition';\n  Kind['VARIABLE_DEFINITION'] = 'VariableDefinition';\n  Kind['SELECTION_SET'] = 'SelectionSet';\n  Kind['FIELD'] = 'Field';\n  Kind['ARGUMENT'] = 'Argument';\n  Kind['FRAGMENT_SPREAD'] = 'FragmentSpread';\n  Kind['INLINE_FRAGMENT'] = 'InlineFragment';\n  Kind['FRAGMENT_DEFINITION'] = 'FragmentDefinition';\n  Kind['VARIABLE'] = 'Variable';\n  Kind['INT'] = 'IntValue';\n  Kind['FLOAT'] = 'FloatValue';\n  Kind['STRING'] = 'StringValue';\n  Kind['BOOLEAN'] = 'BooleanValue';\n  Kind['NULL'] = 'NullValue';\n  Kind['ENUM'] = 'EnumValue';\n  Kind['LIST'] = 'ListValue';\n  Kind['OBJECT'] = 'ObjectValue';\n  Kind['OBJECT_FIELD'] = 'ObjectField';\n  Kind['DIRECTIVE'] = 'Directive';\n  Kind['NAMED_TYPE'] = 'NamedType';\n  Kind['LIST_TYPE'] = 'ListType';\n  Kind['NON_NULL_TYPE'] = 'NonNullType';\n  Kind['SCHEMA_DEFINITION'] = 'SchemaDefinition';\n  Kind['OPERATION_TYPE_DEFINITION'] = 'OperationTypeDefinition';\n  Kind['SCALAR_TYPE_DEFINITION'] = 'ScalarTypeDefinition';\n  Kind['OBJECT_TYPE_DEFINITION'] = 'ObjectTypeDefinition';\n  Kind['FIELD_DEFINITION'] = 'FieldDefinition';\n  Kind['INPUT_VALUE_DEFINITION'] = 'InputValueDefinition';\n  Kind['INTERFACE_TYPE_DEFINITION'] = 'InterfaceTypeDefinition';\n  Kind['UNION_TYPE_DEFINITION'] = 'UnionTypeDefinition';\n  Kind['ENUM_TYPE_DEFINITION'] = 'EnumTypeDefinition';\n  Kind['ENUM_VALUE_DEFINITION'] = 'EnumValueDefinition';\n  Kind['INPUT_OBJECT_TYPE_DEFINITION'] = 'InputObjectTypeDefinition';\n  Kind['DIRECTIVE_DEFINITION'] = 'DirectiveDefinition';\n  Kind['SCHEMA_EXTENSION'] = 'SchemaExtension';\n  Kind['SCALAR_TYPE_EXTENSION'] = 'ScalarTypeExtension';\n  Kind['OBJECT_TYPE_EXTENSION'] = 'ObjectTypeExtension';\n  Kind['INTERFACE_TYPE_EXTENSION'] = 'InterfaceTypeExtension';\n  Kind['UNION_TYPE_EXTENSION'] = 'UnionTypeExtension';\n  Kind['ENUM_TYPE_EXTENSION'] = 'EnumTypeExtension';\n  Kind['INPUT_OBJECT_TYPE_EXTENSION'] = 'InputObjectTypeExtension';\n  Kind['TYPE_COORDINATE'] = 'TypeCoordinate';\n  Kind['MEMBER_COORDINATE'] = 'MemberCoordinate';\n  Kind['ARGUMENT_COORDINATE'] = 'ArgumentCoordinate';\n  Kind['DIRECTIVE_COORDINATE'] = 'DirectiveCoordinate';\n  Kind['DIRECTIVE_ARGUMENT_COORDINATE'] = 'DirectiveArgumentCoordinate';\n})(Kind || (Kind = {}));\n\nexport { Kind };\n/**\n * The enum type representing the possible kind values of AST nodes.\n *\n * @deprecated Please use `Kind`. Will be remove in v17.\n */\n","/**\n * ```\n * WhiteSpace ::\n *   - \"Horizontal Tab (U+0009)\"\n *   - \"Space (U+0020)\"\n * ```\n * @internal\n */\nexport function isWhiteSpace(code) {\n  return code === 0x0009 || code === 0x0020;\n}\n/**\n * ```\n * Digit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\n\nexport function isDigit(code) {\n  return code >= 0x0030 && code <= 0x0039;\n}\n/**\n * ```\n * Letter :: one of\n *   - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n *   - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n *   - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n *   - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\n\nexport function isLetter(code) {\n  return (\n    (code >= 0x0061 && code <= 0x007a) || // A-Z\n    (code >= 0x0041 && code <= 0x005a) // a-z\n  );\n}\n/**\n * ```\n * NameStart ::\n *   - Letter\n *   - `_`\n * ```\n * @internal\n */\n\nexport function isNameStart(code) {\n  return isLetter(code) || code === 0x005f;\n}\n/**\n * ```\n * NameContinue ::\n *   - Letter\n *   - Digit\n *   - `_`\n * ```\n * @internal\n */\n\nexport function isNameContinue(code) {\n  return isLetter(code) || isDigit(code) || code === 0x005f;\n}\n","import { isWhiteSpace } from './characterClasses.mjs';\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\n\nexport function dedentBlockStringLines(lines) {\n  var _firstNonEmptyLine2;\n\n  let commonIndent = Number.MAX_SAFE_INTEGER;\n  let firstNonEmptyLine = null;\n  let lastNonEmptyLine = -1;\n\n  for (let i = 0; i < lines.length; ++i) {\n    var _firstNonEmptyLine;\n\n    const line = lines[i];\n    const indent = leadingWhitespace(line);\n\n    if (indent === line.length) {\n      continue; // skip empty lines\n    }\n\n    firstNonEmptyLine =\n      (_firstNonEmptyLine = firstNonEmptyLine) !== null &&\n      _firstNonEmptyLine !== void 0\n        ? _firstNonEmptyLine\n        : i;\n    lastNonEmptyLine = i;\n\n    if (i !== 0 && indent < commonIndent) {\n      commonIndent = indent;\n    }\n  }\n\n  return lines // Remove common indentation from all lines but first.\n    .map((line, i) => (i === 0 ? line : line.slice(commonIndent))) // Remove leading and trailing blank lines.\n    .slice(\n      (_firstNonEmptyLine2 = firstNonEmptyLine) !== null &&\n        _firstNonEmptyLine2 !== void 0\n        ? _firstNonEmptyLine2\n        : 0,\n      lastNonEmptyLine + 1,\n    );\n}\n\nfunction leadingWhitespace(str) {\n  let i = 0;\n\n  while (i < str.length && isWhiteSpace(str.charCodeAt(i))) {\n    ++i;\n  }\n\n  return i;\n}\n/**\n * @internal\n */\n\nexport function isPrintableAsBlockString(value) {\n  if (value === '') {\n    return true; // empty string is printable\n  }\n\n  let isEmptyLine = true;\n  let hasIndent = false;\n  let hasCommonIndent = true;\n  let seenNonEmptyLine = false;\n\n  for (let i = 0; i < value.length; ++i) {\n    switch (value.codePointAt(i)) {\n      case 0x0000:\n      case 0x0001:\n      case 0x0002:\n      case 0x0003:\n      case 0x0004:\n      case 0x0005:\n      case 0x0006:\n      case 0x0007:\n      case 0x0008:\n      case 0x000b:\n      case 0x000c:\n      case 0x000e:\n      case 0x000f:\n        return false;\n      // Has non-printable characters\n\n      case 0x000d:\n        //  \\r\n        return false;\n      // Has \\r or \\r\\n which will be replaced as \\n\n\n      case 10:\n        //  \\n\n        if (isEmptyLine && !seenNonEmptyLine) {\n          return false; // Has leading new line\n        }\n\n        seenNonEmptyLine = true;\n        isEmptyLine = true;\n        hasIndent = false;\n        break;\n\n      case 9: //   \\t\n\n      case 32:\n        //  <space>\n        hasIndent || (hasIndent = isEmptyLine);\n        break;\n\n      default:\n        hasCommonIndent && (hasCommonIndent = hasIndent);\n        isEmptyLine = false;\n    }\n  }\n\n  if (isEmptyLine) {\n    return false; // Has trailing empty lines\n  }\n\n  if (hasCommonIndent && seenNonEmptyLine) {\n    return false; // Has internal indent\n  }\n\n  return true;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value, options) {\n  const escapedValue = value.replace(/\"\"\"/g, '\\\\\"\"\"'); // Expand a block string's raw value into independent lines.\n\n  const lines = escapedValue.split(/\\r\\n|[\\n\\r]/g);\n  const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line\n\n  const forceLeadingNewLine =\n    lines.length > 1 &&\n    lines\n      .slice(1)\n      .every((line) => line.length === 0 || isWhiteSpace(line.charCodeAt(0))); // Trailing triple quotes just looks confusing but doesn't force trailing new line\n\n  const hasTrailingTripleQuotes = escapedValue.endsWith('\\\\\"\"\"'); // Trailing quote (single or double) or slash forces trailing new line\n\n  const hasTrailingQuote = value.endsWith('\"') && !hasTrailingTripleQuotes;\n  const hasTrailingSlash = value.endsWith('\\\\');\n  const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash;\n  const printAsMultipleLines =\n    !(options !== null && options !== void 0 && options.minimize) && // add leading and trailing new lines only if it improves readability\n    (!isSingleLine ||\n      value.length > 70 ||\n      forceTrailingNewline ||\n      forceLeadingNewLine ||\n      hasTrailingTripleQuotes);\n  let result = ''; // Format a multi-line block quote to account for leading space.\n\n  const skipLeadingNewLine = isSingleLine && isWhiteSpace(value.charCodeAt(0));\n\n  if ((printAsMultipleLines && !skipLeadingNewLine) || forceLeadingNewLine) {\n    result += '\\n';\n  }\n\n  result += escapedValue;\n\n  if (printAsMultipleLines || forceTrailingNewline) {\n    result += '\\n';\n  }\n\n  return '\"\"\"' + result + '\"\"\"';\n}\n","/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind;\n\n(function (TokenKind) {\n  TokenKind['SOF'] = '<SOF>';\n  TokenKind['EOF'] = '<EOF>';\n  TokenKind['BANG'] = '!';\n  TokenKind['DOLLAR'] = '$';\n  TokenKind['AMP'] = '&';\n  TokenKind['PAREN_L'] = '(';\n  TokenKind['PAREN_R'] = ')';\n  TokenKind['DOT'] = '.';\n  TokenKind['SPREAD'] = '...';\n  TokenKind['COLON'] = ':';\n  TokenKind['EQUALS'] = '=';\n  TokenKind['AT'] = '@';\n  TokenKind['BRACKET_L'] = '[';\n  TokenKind['BRACKET_R'] = ']';\n  TokenKind['BRACE_L'] = '{';\n  TokenKind['PIPE'] = '|';\n  TokenKind['BRACE_R'] = '}';\n  TokenKind['NAME'] = 'Name';\n  TokenKind['INT'] = 'Int';\n  TokenKind['FLOAT'] = 'Float';\n  TokenKind['STRING'] = 'String';\n  TokenKind['BLOCK_STRING'] = 'BlockString';\n  TokenKind['COMMENT'] = 'Comment';\n})(TokenKind || (TokenKind = {}));\n\nexport { TokenKind };\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\n","import { syntaxError } from '../error/syntaxError.mjs';\nimport { Token } from './ast.mjs';\nimport { dedentBlockStringLines } from './blockString.mjs';\nimport { isDigit, isNameContinue, isNameStart } from './characterClasses.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * A Lexer interface which provides common properties and methods required for\n * lexing GraphQL source.\n *\n * @internal\n */\n\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nexport class Lexer {\n  /**\n   * The previously focused non-ignored token.\n   */\n\n  /**\n   * The currently focused non-ignored token.\n   */\n\n  /**\n   * The (1-indexed) line containing the current token.\n   */\n\n  /**\n   * The character offset at which the current line begins.\n   */\n  constructor(source) {\n    const startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0);\n    this.source = source;\n    this.lastToken = startOfFileToken;\n    this.token = startOfFileToken;\n    this.line = 1;\n    this.lineStart = 0;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Lexer';\n  }\n  /**\n   * Advances the token stream to the next non-ignored token.\n   */\n\n  advance() {\n    this.lastToken = this.token;\n    const token = (this.token = this.lookahead());\n    return token;\n  }\n  /**\n   * Looks ahead and returns the next non-ignored token, but does not change\n   * the state of Lexer.\n   */\n\n  lookahead() {\n    let token = this.token;\n\n    if (token.kind !== TokenKind.EOF) {\n      do {\n        if (token.next) {\n          token = token.next;\n        } else {\n          // Read the next token and form a link in the token linked-list.\n          const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing.\n\n          token.next = nextToken; // @ts-expect-error prev is only mutable during parsing.\n\n          nextToken.prev = token;\n          token = nextToken;\n        }\n      } while (token.kind === TokenKind.COMMENT);\n    }\n\n    return token;\n  }\n}\n/**\n * @internal\n */\n\nexport function isPunctuatorTokenKind(kind) {\n  return (\n    kind === TokenKind.BANG ||\n    kind === TokenKind.DOLLAR ||\n    kind === TokenKind.AMP ||\n    kind === TokenKind.PAREN_L ||\n    kind === TokenKind.PAREN_R ||\n    kind === TokenKind.DOT ||\n    kind === TokenKind.SPREAD ||\n    kind === TokenKind.COLON ||\n    kind === TokenKind.EQUALS ||\n    kind === TokenKind.AT ||\n    kind === TokenKind.BRACKET_L ||\n    kind === TokenKind.BRACKET_R ||\n    kind === TokenKind.BRACE_L ||\n    kind === TokenKind.PIPE ||\n    kind === TokenKind.BRACE_R\n  );\n}\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n *   - \"Any Unicode scalar value\"\n */\n\nfunction isUnicodeScalarValue(code) {\n  return (\n    (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n  );\n}\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n */\n\nfunction isSupplementaryCodePoint(body, location) {\n  return (\n    isLeadingSurrogate(body.charCodeAt(location)) &&\n    isTrailingSurrogate(body.charCodeAt(location + 1))\n  );\n}\n\nfunction isLeadingSurrogate(code) {\n  return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code) {\n  return code >= 0xdc00 && code <= 0xdfff;\n}\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n *\n * @internal\n */\n\nexport function printCodePointAt(lexer, location) {\n  const code = lexer.source.body.codePointAt(location);\n\n  if (code === undefined) {\n    return TokenKind.EOF;\n  } else if (code >= 0x0020 && code <= 0x007e) {\n    // Printable ASCII\n    const char = String.fromCodePoint(code);\n    return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n  } // Unicode code point\n\n  return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n/**\n * Create a token with line and column location information.\n *\n * @internal\n */\n\nexport function createToken(lexer, kind, start, end, value) {\n  const line = lexer.line;\n  const col = 1 + start - lexer.lineStart;\n  return new Token(kind, start, end, line, col, value);\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\nfunction readNextToken(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // SourceCharacter\n\n    switch (code) {\n      // Ignored ::\n      //   - UnicodeBOM\n      //   - WhiteSpace\n      //   - LineTerminator\n      //   - Comment\n      //   - Comma\n      //\n      // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n      //\n      // WhiteSpace ::\n      //   - \"Horizontal Tab (U+0009)\"\n      //   - \"Space (U+0020)\"\n      //\n      // Comma :: ,\n      case 0xfeff: // <BOM>\n\n      case 0x0009: // \\t\n\n      case 0x0020: // <space>\n\n      case 0x002c:\n        // ,\n        ++position;\n        continue;\n      // LineTerminator ::\n      //   - \"New Line (U+000A)\"\n      //   - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n      //   - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n\n      case 0x000a:\n        // \\n\n        ++position;\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n\n      case 0x000d:\n        // \\r\n        if (body.charCodeAt(position + 1) === 0x000a) {\n          position += 2;\n        } else {\n          ++position;\n        }\n\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n      // Comment\n\n      case 0x0023:\n        // #\n        return readComment(lexer, position);\n      // Token ::\n      //   - Punctuator\n      //   - Name\n      //   - IntValue\n      //   - FloatValue\n      //   - StringValue\n      //\n      // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n\n      case 0x0021:\n        // !\n        return createToken(lexer, TokenKind.BANG, position, position + 1);\n\n      case 0x0024:\n        // $\n        return createToken(lexer, TokenKind.DOLLAR, position, position + 1);\n\n      case 0x0026:\n        // &\n        return createToken(lexer, TokenKind.AMP, position, position + 1);\n\n      case 0x0028:\n        // (\n        return createToken(lexer, TokenKind.PAREN_L, position, position + 1);\n\n      case 0x0029:\n        // )\n        return createToken(lexer, TokenKind.PAREN_R, position, position + 1);\n\n      case 0x002e:\n        // .\n        if (\n          body.charCodeAt(position + 1) === 0x002e &&\n          body.charCodeAt(position + 2) === 0x002e\n        ) {\n          return createToken(lexer, TokenKind.SPREAD, position, position + 3);\n        }\n\n        break;\n\n      case 0x003a:\n        // :\n        return createToken(lexer, TokenKind.COLON, position, position + 1);\n\n      case 0x003d:\n        // =\n        return createToken(lexer, TokenKind.EQUALS, position, position + 1);\n\n      case 0x0040:\n        // @\n        return createToken(lexer, TokenKind.AT, position, position + 1);\n\n      case 0x005b:\n        // [\n        return createToken(lexer, TokenKind.BRACKET_L, position, position + 1);\n\n      case 0x005d:\n        // ]\n        return createToken(lexer, TokenKind.BRACKET_R, position, position + 1);\n\n      case 0x007b:\n        // {\n        return createToken(lexer, TokenKind.BRACE_L, position, position + 1);\n\n      case 0x007c:\n        // |\n        return createToken(lexer, TokenKind.PIPE, position, position + 1);\n\n      case 0x007d:\n        // }\n        return createToken(lexer, TokenKind.BRACE_R, position, position + 1);\n      // StringValue\n\n      case 0x0022:\n        // \"\n        if (\n          body.charCodeAt(position + 1) === 0x0022 &&\n          body.charCodeAt(position + 2) === 0x0022\n        ) {\n          return readBlockString(lexer, position);\n        }\n\n        return readString(lexer, position);\n    } // IntValue | FloatValue (Digit | -)\n\n    if (isDigit(code) || code === 0x002d) {\n      return readNumber(lexer, position, code);\n    } // Name\n\n    if (isNameStart(code)) {\n      return readName(lexer, position);\n    }\n\n    throw syntaxError(\n      lexer.source,\n      position,\n      code === 0x0027\n        ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n        : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n        ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n        : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n    );\n  }\n\n  return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n */\n\nfunction readComment(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    TokenKind.COMMENT,\n    start,\n    position,\n    body.slice(start + 1, position),\n  );\n}\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n *   - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n */\n\nfunction readNumber(lexer, start, firstCode) {\n  const body = lexer.source.body;\n  let position = start;\n  let code = firstCode;\n  let isFloat = false; // NegativeSign (-)\n\n  if (code === 0x002d) {\n    code = body.charCodeAt(++position);\n  } // Zero (0)\n\n  if (code === 0x0030) {\n    code = body.charCodeAt(++position);\n\n    if (isDigit(code)) {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid number, unexpected digit after 0: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  } else {\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Full stop (.)\n\n  if (code === 0x002e) {\n    isFloat = true;\n    code = body.charCodeAt(++position);\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // E e\n\n  if (code === 0x0045 || code === 0x0065) {\n    isFloat = true;\n    code = body.charCodeAt(++position); // + -\n\n    if (code === 0x002b || code === 0x002d) {\n      code = body.charCodeAt(++position);\n    }\n\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Numbers cannot be followed by . or NameStart\n\n  if (code === 0x002e || isNameStart(code)) {\n    throw syntaxError(\n      lexer.source,\n      position,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        position,\n      )}.`,\n    );\n  }\n\n  return createToken(\n    lexer,\n    isFloat ? TokenKind.FLOAT : TokenKind.INT,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n/**\n * Returns the new position in the source after reading one or more digits.\n */\n\nfunction readDigits(lexer, start, firstCode) {\n  if (!isDigit(firstCode)) {\n    throw syntaxError(\n      lexer.source,\n      start,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        start,\n      )}.`,\n    );\n  }\n\n  const body = lexer.source.body;\n  let position = start + 1; // +1 to skip first firstCode\n\n  while (isDigit(body.charCodeAt(position))) {\n    ++position;\n  }\n\n  return position;\n}\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"` [lookahead != `\"`]\n *   - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n *   - SourceCharacter but not `\"` or `\\` or LineTerminator\n *   - `\\u` EscapedUnicode\n *   - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n *   - `{` HexDigit+ `}`\n *   - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n */\n\nfunction readString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n  let chunkStart = position;\n  let value = '';\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Quote (\")\n\n    if (code === 0x0022) {\n      value += body.slice(chunkStart, position);\n      return createToken(lexer, TokenKind.STRING, start, position + 1, value);\n    } // Escape Sequence (\\)\n\n    if (code === 0x005c) {\n      value += body.slice(chunkStart, position);\n      const escape =\n        body.charCodeAt(position + 1) === 0x0075 // u\n          ? body.charCodeAt(position + 2) === 0x007b // {\n            ? readEscapedUnicodeVariableWidth(lexer, position)\n            : readEscapedUnicodeFixedWidth(lexer, position)\n          : readEscapedCharacter(lexer, position);\n      value += escape.value;\n      position += escape.size;\n      chunkStart = position;\n      continue;\n    } // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw syntaxError(lexer.source, position, 'Unterminated string.');\n} // The string value and lexed size of an escape sequence.\n\nfunction readEscapedUnicodeVariableWidth(lexer, position) {\n  const body = lexer.source.body;\n  let point = 0;\n  let size = 3; // Cannot be larger than 12 chars (\\u{00000000}).\n\n  while (size < 12) {\n    const code = body.charCodeAt(position + size++); // Closing Brace (})\n\n    if (code === 0x007d) {\n      // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n      if (size < 5 || !isUnicodeScalarValue(point)) {\n        break;\n      }\n\n      return {\n        value: String.fromCodePoint(point),\n        size,\n      };\n    } // Append this hex digit to the code point.\n\n    point = (point << 4) | readHexDigit(code);\n\n    if (point < 0) {\n      break;\n    }\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(\n      position,\n      position + size,\n    )}\".`,\n  );\n}\n\nfunction readEscapedUnicodeFixedWidth(lexer, position) {\n  const body = lexer.source.body;\n  const code = read16BitHexCode(body, position + 2);\n\n  if (isUnicodeScalarValue(code)) {\n    return {\n      value: String.fromCodePoint(code),\n      size: 6,\n    };\n  } // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n  // a valid pair is formed.\n\n  if (isLeadingSurrogate(code)) {\n    // \\u\n    if (\n      body.charCodeAt(position + 6) === 0x005c &&\n      body.charCodeAt(position + 7) === 0x0075\n    ) {\n      const trailingCode = read16BitHexCode(body, position + 8);\n\n      if (isTrailingSurrogate(trailingCode)) {\n        // JavaScript defines strings as a sequence of UTF-16 code units and\n        // encodes Unicode code points above U+FFFF using a surrogate pair of\n        // code units. Since this is a surrogate pair escape sequence, just\n        // include both codes into the JavaScript string value. Had JavaScript\n        // not been internally based on UTF-16, then this surrogate pair would\n        // be decoded to retrieve the supplementary code point.\n        return {\n          value: String.fromCodePoint(code, trailingCode),\n          size: 12,\n        };\n      }\n    }\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n  );\n}\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n */\n\nfunction read16BitHexCode(body, position) {\n  // readHexDigit() returns -1 on error. ORing a negative value with any other\n  // value always produces a negative value.\n  return (\n    (readHexDigit(body.charCodeAt(position)) << 12) |\n    (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n    (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n    readHexDigit(body.charCodeAt(position + 3))\n  );\n}\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n *   - `A` `B` `C` `D` `E` `F`\n *   - `a` `b` `c` `d` `e` `f`\n */\n\nfunction readHexDigit(code) {\n  return code >= 0x0030 && code <= 0x0039 // 0-9\n    ? code - 0x0030\n    : code >= 0x0041 && code <= 0x0046 // A-F\n    ? code - 0x0037\n    : code >= 0x0061 && code <= 0x0066 // a-f\n    ? code - 0x0057\n    : -1;\n}\n/**\n * | Escaped Character | Code Point | Character Name               |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"`               | U+0022     | double quote                 |\n * | `\\`               | U+005C     | reverse solidus (back slash) |\n * | `/`               | U+002F     | solidus (forward slash)      |\n * | `b`               | U+0008     | backspace                    |\n * | `f`               | U+000C     | form feed                    |\n * | `n`               | U+000A     | line feed (new line)         |\n * | `r`               | U+000D     | carriage return              |\n * | `t`               | U+0009     | horizontal tab               |\n */\n\nfunction readEscapedCharacter(lexer, position) {\n  const body = lexer.source.body;\n  const code = body.charCodeAt(position + 1);\n\n  switch (code) {\n    case 0x0022:\n      // \"\n      return {\n        value: '\\u0022',\n        size: 2,\n      };\n\n    case 0x005c:\n      // \\\n      return {\n        value: '\\u005c',\n        size: 2,\n      };\n\n    case 0x002f:\n      // /\n      return {\n        value: '\\u002f',\n        size: 2,\n      };\n\n    case 0x0062:\n      // b\n      return {\n        value: '\\u0008',\n        size: 2,\n      };\n\n    case 0x0066:\n      // f\n      return {\n        value: '\\u000c',\n        size: 2,\n      };\n\n    case 0x006e:\n      // n\n      return {\n        value: '\\u000a',\n        size: 2,\n      };\n\n    case 0x0072:\n      // r\n      return {\n        value: '\\u000d',\n        size: 2,\n      };\n\n    case 0x0074:\n      // t\n      return {\n        value: '\\u0009',\n        size: 2,\n      };\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid character escape sequence: \"${body.slice(\n      position,\n      position + 2,\n    )}\".`,\n  );\n}\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n *   - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n *   - `\\\"\"\"`\n * ```\n */\n\nfunction readBlockString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let lineStart = lexer.lineStart;\n  let position = start + 3;\n  let chunkStart = position;\n  let currentLine = '';\n  const blockLines = [];\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Triple-Quote (\"\"\")\n\n    if (\n      code === 0x0022 &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n      const token = createToken(\n        lexer,\n        TokenKind.BLOCK_STRING,\n        start,\n        position + 3, // Return a string of the lines joined with U+000A.\n        dedentBlockStringLines(blockLines).join('\\n'),\n      );\n      lexer.line += blockLines.length - 1;\n      lexer.lineStart = lineStart;\n      return token;\n    } // Escaped Triple-Quote (\\\"\"\")\n\n    if (\n      code === 0x005c &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022 &&\n      body.charCodeAt(position + 3) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      chunkStart = position + 1; // skip only slash\n\n      position += 4;\n      continue;\n    } // LineTerminator\n\n    if (code === 0x000a || code === 0x000d) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n\n      if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n        position += 2;\n      } else {\n        ++position;\n      }\n\n      currentLine = '';\n      chunkStart = position;\n      lineStart = position;\n      continue;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n *   - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n *\n * @internal\n */\n\nexport function readName(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position);\n\n    if (isNameContinue(code)) {\n      ++position;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    TokenKind.NAME,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n","const MAX_ARRAY_LENGTH = 10;\nconst MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport function inspect(value) {\n  return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n  switch (typeof value) {\n    case 'string':\n      return JSON.stringify(value);\n\n    case 'function':\n      return value.name ? `[function ${value.name}]` : '[function]';\n\n    case 'object':\n      return formatObjectValue(value, seenValues);\n\n    default:\n      return String(value);\n  }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n  if (value === null) {\n    return 'null';\n  }\n\n  if (previouslySeenValues.includes(value)) {\n    return '[Circular]';\n  }\n\n  const seenValues = [...previouslySeenValues, value];\n\n  if (isJSONable(value)) {\n    const jsonValue = value.toJSON(); // check for infinite recursion\n\n    if (jsonValue !== value) {\n      return typeof jsonValue === 'string'\n        ? jsonValue\n        : formatValue(jsonValue, seenValues);\n    }\n  } else if (Array.isArray(value)) {\n    return formatArray(value, seenValues);\n  }\n\n  return formatObject(value, seenValues);\n}\n\nfunction isJSONable(value) {\n  return typeof value.toJSON === 'function';\n}\n\nfunction formatObject(object, seenValues) {\n  const entries = Object.entries(object);\n\n  if (entries.length === 0) {\n    return '{}';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[' + getObjectTag(object) + ']';\n  }\n\n  const properties = entries.map(\n    ([key, value]) => key + ': ' + formatValue(value, seenValues),\n  );\n  return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n  if (array.length === 0) {\n    return '[]';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[Array]';\n  }\n\n  const len = Math.min(MAX_ARRAY_LENGTH, array.length);\n  const remaining = array.length - len;\n  const items = [];\n\n  for (let i = 0; i < len; ++i) {\n    items.push(formatValue(array[i], seenValues));\n  }\n\n  if (remaining === 1) {\n    items.push('... 1 more item');\n  } else if (remaining > 1) {\n    items.push(`... ${remaining} more items`);\n  }\n\n  return '[' + items.join(', ') + ']';\n}\n\nfunction getObjectTag(object) {\n  const tag = Object.prototype.toString\n    .call(object)\n    .replace(/^\\[object /, '')\n    .replace(/]$/, '');\n\n  if (tag === 'Object' && typeof object.constructor === 'function') {\n    const name = object.constructor.name;\n\n    if (typeof name === 'string' && name !== '') {\n      return name;\n    }\n  }\n\n  return tag;\n}\n","import { inspect } from './inspect.mjs';\n/* c8 ignore next 3 */\n\nconst isProduction =\n  globalThis.process && // eslint-disable-next-line no-undef\n  process.env.NODE_ENV === 'production';\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\n\nexport const instanceOf =\n  /* c8 ignore next 6 */\n  // FIXME: https://github.com/graphql/graphql-js/issues/2317\n  isProduction\n    ? function instanceOf(value, constructor) {\n        return value instanceof constructor;\n      }\n    : function instanceOf(value, constructor) {\n        if (value instanceof constructor) {\n          return true;\n        }\n\n        if (typeof value === 'object' && value !== null) {\n          var _value$constructor;\n\n          // Prefer Symbol.toStringTag since it is immune to minification.\n          const className = constructor.prototype[Symbol.toStringTag];\n          const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n            Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009\n              ? value[Symbol.toStringTag]\n              : (_value$constructor = value.constructor) === null ||\n                _value$constructor === void 0\n              ? void 0\n              : _value$constructor.name;\n\n          if (className === valueClassName) {\n            const stringifiedValue = inspect(value);\n            throw new Error(`Cannot use ${className} \"${stringifiedValue}\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`);\n          }\n        }\n\n        return false;\n      };\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport class Source {\n  constructor(\n    body,\n    name = 'GraphQL request',\n    locationOffset = {\n      line: 1,\n      column: 1,\n    },\n  ) {\n    typeof body === 'string' ||\n      devAssert(false, `Body must be a string. Received: ${inspect(body)}.`);\n    this.body = body;\n    this.name = name;\n    this.locationOffset = locationOffset;\n    this.locationOffset.line > 0 ||\n      devAssert(\n        false,\n        'line in locationOffset is 1-indexed and must be positive.',\n      );\n    this.locationOffset.column > 0 ||\n      devAssert(\n        false,\n        'column in locationOffset is 1-indexed and must be positive.',\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Source';\n  }\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\nexport function isSource(source) {\n  return instanceOf(source, Source);\n}\n","import { syntaxError } from '../error/syntaxError.mjs';\nimport { Location, OperationTypeNode } from './ast.mjs';\nimport { DirectiveLocation } from './directiveLocation.mjs';\nimport { Kind } from './kinds.mjs';\nimport { isPunctuatorTokenKind, Lexer } from './lexer.mjs';\nimport { SchemaCoordinateLexer } from './schemaCoordinateLexer.mjs';\nimport { isSource, Source } from './source.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * Configuration options to control parser behavior\n */\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport function parse(source, options) {\n  const parser = new Parser(source, options);\n  const document = parser.parseDocument();\n  Object.defineProperty(document, 'tokenCount', {\n    enumerable: false,\n    value: parser.tokenCount,\n  });\n  return document;\n}\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n\nexport function parseValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const value = parser.parseValueLiteral(false);\n  parser.expectToken(TokenKind.EOF);\n  return value;\n}\n/**\n * Similar to parseValue(), but raises a parse error if it encounters a\n * variable. The return type will be a constant value.\n */\n\nexport function parseConstValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const value = parser.parseConstValueLiteral();\n  parser.expectToken(TokenKind.EOF);\n  return value;\n}\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\n\nexport function parseType(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const type = parser.parseTypeReference();\n  parser.expectToken(TokenKind.EOF);\n  return type;\n}\n/**\n * Given a string containing a GraphQL Schema Coordinate (ex. `Type.field`),\n * parse the AST for that schema coordinate.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * Consider providing the results to the utility function:\n * resolveASTSchemaCoordinate(). Or calling resolveSchemaCoordinate() directly\n * with an unparsed source.\n */\n\nexport function parseSchemaCoordinate(source) {\n  const sourceObj = isSource(source) ? source : new Source(source);\n  const lexer = new SchemaCoordinateLexer(sourceObj);\n  const parser = new Parser(source, {\n    lexer,\n  });\n  parser.expectToken(TokenKind.SOF);\n  const coordinate = parser.parseSchemaCoordinate();\n  parser.expectToken(TokenKind.EOF);\n  return coordinate;\n}\n/**\n * This class is exported only to assist people in implementing their own parsers\n * without duplicating too much code and should be used only as last resort for cases\n * such as experimental syntax or if certain features could not be contributed upstream.\n *\n * It is still part of the internal API and is versioned, so any changes to it are never\n * considered breaking changes. If you still need to support multiple versions of the\n * library, please use the `versionInfo` variable for version detection.\n *\n * @internal\n */\n\nexport class Parser {\n  constructor(source, options = {}) {\n    const { lexer, ..._options } = options;\n\n    if (lexer) {\n      this._lexer = lexer;\n    } else {\n      const sourceObj = isSource(source) ? source : new Source(source);\n      this._lexer = new Lexer(sourceObj);\n    }\n\n    this._options = _options;\n    this._tokenCounter = 0;\n  }\n\n  get tokenCount() {\n    return this._tokenCounter;\n  }\n  /**\n   * Converts a name lex token into a name parse node.\n   */\n\n  parseName() {\n    const token = this.expectToken(TokenKind.NAME);\n    return this.node(token, {\n      kind: Kind.NAME,\n      value: token.value,\n    });\n  } // Implements the parsing rules in the Document section.\n\n  /**\n   * Document : Definition+\n   */\n\n  parseDocument() {\n    return this.node(this._lexer.token, {\n      kind: Kind.DOCUMENT,\n      definitions: this.many(\n        TokenKind.SOF,\n        this.parseDefinition,\n        TokenKind.EOF,\n      ),\n    });\n  }\n  /**\n   * Definition :\n   *   - ExecutableDefinition\n   *   - TypeSystemDefinition\n   *   - TypeSystemExtension\n   *\n   * ExecutableDefinition :\n   *   - OperationDefinition\n   *   - FragmentDefinition\n   *\n   * TypeSystemDefinition :\n   *   - SchemaDefinition\n   *   - TypeDefinition\n   *   - DirectiveDefinition\n   *\n   * TypeDefinition :\n   *   - ScalarTypeDefinition\n   *   - ObjectTypeDefinition\n   *   - InterfaceTypeDefinition\n   *   - UnionTypeDefinition\n   *   - EnumTypeDefinition\n   *   - InputObjectTypeDefinition\n   */\n\n  parseDefinition() {\n    if (this.peek(TokenKind.BRACE_L)) {\n      return this.parseOperationDefinition();\n    } // Many definitions begin with a description and require a lookahead.\n\n    const hasDescription = this.peekDescription();\n    const keywordToken = hasDescription\n      ? this._lexer.lookahead()\n      : this._lexer.token;\n\n    if (hasDescription && keywordToken.kind === TokenKind.BRACE_L) {\n      throw syntaxError(\n        this._lexer.source,\n        this._lexer.token.start,\n        'Unexpected description, descriptions are not supported on shorthand queries.',\n      );\n    }\n\n    if (keywordToken.kind === TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaDefinition();\n\n        case 'scalar':\n          return this.parseScalarTypeDefinition();\n\n        case 'type':\n          return this.parseObjectTypeDefinition();\n\n        case 'interface':\n          return this.parseInterfaceTypeDefinition();\n\n        case 'union':\n          return this.parseUnionTypeDefinition();\n\n        case 'enum':\n          return this.parseEnumTypeDefinition();\n\n        case 'input':\n          return this.parseInputObjectTypeDefinition();\n\n        case 'directive':\n          return this.parseDirectiveDefinition();\n      }\n\n      switch (keywordToken.value) {\n        case 'query':\n        case 'mutation':\n        case 'subscription':\n          return this.parseOperationDefinition();\n\n        case 'fragment':\n          return this.parseFragmentDefinition();\n      }\n\n      if (hasDescription) {\n        throw syntaxError(\n          this._lexer.source,\n          this._lexer.token.start,\n          'Unexpected description, only GraphQL definitions support descriptions.',\n        );\n      }\n\n      switch (keywordToken.value) {\n        case 'extend':\n          return this.parseTypeSystemExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  } // Implements the parsing rules in the Operations section.\n\n  /**\n   * OperationDefinition :\n   *  - SelectionSet\n   *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n   */\n\n  parseOperationDefinition() {\n    const start = this._lexer.token;\n\n    if (this.peek(TokenKind.BRACE_L)) {\n      return this.node(start, {\n        kind: Kind.OPERATION_DEFINITION,\n        operation: OperationTypeNode.QUERY,\n        description: undefined,\n        name: undefined,\n        variableDefinitions: [],\n        directives: [],\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    const description = this.parseDescription();\n    const operation = this.parseOperationType();\n    let name;\n\n    if (this.peek(TokenKind.NAME)) {\n      name = this.parseName();\n    }\n\n    return this.node(start, {\n      kind: Kind.OPERATION_DEFINITION,\n      operation,\n      description,\n      name,\n      variableDefinitions: this.parseVariableDefinitions(),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * OperationType : one of query mutation subscription\n   */\n\n  parseOperationType() {\n    const operationToken = this.expectToken(TokenKind.NAME);\n\n    switch (operationToken.value) {\n      case 'query':\n        return OperationTypeNode.QUERY;\n\n      case 'mutation':\n        return OperationTypeNode.MUTATION;\n\n      case 'subscription':\n        return OperationTypeNode.SUBSCRIPTION;\n    }\n\n    throw this.unexpected(operationToken);\n  }\n  /**\n   * VariableDefinitions : ( VariableDefinition+ )\n   */\n\n  parseVariableDefinitions() {\n    return this.optionalMany(\n      TokenKind.PAREN_L,\n      this.parseVariableDefinition,\n      TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n   */\n\n  parseVariableDefinition() {\n    return this.node(this._lexer.token, {\n      kind: Kind.VARIABLE_DEFINITION,\n      description: this.parseDescription(),\n      variable: this.parseVariable(),\n      type: (this.expectToken(TokenKind.COLON), this.parseTypeReference()),\n      defaultValue: this.expectOptionalToken(TokenKind.EQUALS)\n        ? this.parseConstValueLiteral()\n        : undefined,\n      directives: this.parseConstDirectives(),\n    });\n  }\n  /**\n   * Variable : $ Name\n   */\n\n  parseVariable() {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.DOLLAR);\n    return this.node(start, {\n      kind: Kind.VARIABLE,\n      name: this.parseName(),\n    });\n  }\n  /**\n   * ```\n   * SelectionSet : { Selection+ }\n   * ```\n   */\n\n  parseSelectionSet() {\n    return this.node(this._lexer.token, {\n      kind: Kind.SELECTION_SET,\n      selections: this.many(\n        TokenKind.BRACE_L,\n        this.parseSelection,\n        TokenKind.BRACE_R,\n      ),\n    });\n  }\n  /**\n   * Selection :\n   *   - Field\n   *   - FragmentSpread\n   *   - InlineFragment\n   */\n\n  parseSelection() {\n    return this.peek(TokenKind.SPREAD)\n      ? this.parseFragment()\n      : this.parseField();\n  }\n  /**\n   * Field : Alias? Name Arguments? Directives? SelectionSet?\n   *\n   * Alias : Name :\n   */\n\n  parseField() {\n    const start = this._lexer.token;\n    const nameOrAlias = this.parseName();\n    let alias;\n    let name;\n\n    if (this.expectOptionalToken(TokenKind.COLON)) {\n      alias = nameOrAlias;\n      name = this.parseName();\n    } else {\n      name = nameOrAlias;\n    }\n\n    return this.node(start, {\n      kind: Kind.FIELD,\n      alias,\n      name,\n      arguments: this.parseArguments(false),\n      directives: this.parseDirectives(false),\n      selectionSet: this.peek(TokenKind.BRACE_L)\n        ? this.parseSelectionSet()\n        : undefined,\n    });\n  }\n  /**\n   * Arguments[Const] : ( Argument[?Const]+ )\n   */\n\n  parseArguments(isConst) {\n    const item = isConst ? this.parseConstArgument : this.parseArgument;\n    return this.optionalMany(TokenKind.PAREN_L, item, TokenKind.PAREN_R);\n  }\n  /**\n   * Argument[Const] : Name : Value[?Const]\n   */\n\n  parseArgument(isConst = false) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    return this.node(start, {\n      kind: Kind.ARGUMENT,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  }\n\n  parseConstArgument() {\n    return this.parseArgument(true);\n  } // Implements the parsing rules in the Fragments section.\n\n  /**\n   * Corresponds to both FragmentSpread and InlineFragment in the spec.\n   *\n   * FragmentSpread : ... FragmentName Directives?\n   *\n   * InlineFragment : ... TypeCondition? Directives? SelectionSet\n   */\n\n  parseFragment() {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.SPREAD);\n    const hasTypeCondition = this.expectOptionalKeyword('on');\n\n    if (!hasTypeCondition && this.peek(TokenKind.NAME)) {\n      return this.node(start, {\n        kind: Kind.FRAGMENT_SPREAD,\n        name: this.parseFragmentName(),\n        directives: this.parseDirectives(false),\n      });\n    }\n\n    return this.node(start, {\n      kind: Kind.INLINE_FRAGMENT,\n      typeCondition: hasTypeCondition ? this.parseNamedType() : undefined,\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentDefinition :\n   *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n   *\n   * TypeCondition : NamedType\n   */\n\n  parseFragmentDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('fragment'); // Legacy support for defining variables within fragments changes\n    // the grammar of FragmentDefinition:\n    //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n\n    if (this._options.allowLegacyFragmentVariables === true) {\n      return this.node(start, {\n        kind: Kind.FRAGMENT_DEFINITION,\n        description,\n        name: this.parseFragmentName(),\n        variableDefinitions: this.parseVariableDefinitions(),\n        typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n        directives: this.parseDirectives(false),\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    return this.node(start, {\n      kind: Kind.FRAGMENT_DEFINITION,\n      description,\n      name: this.parseFragmentName(),\n      typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentName : Name but not `on`\n   */\n\n  parseFragmentName() {\n    if (this._lexer.token.value === 'on') {\n      throw this.unexpected();\n    }\n\n    return this.parseName();\n  } // Implements the parsing rules in the Values section.\n\n  /**\n   * Value[Const] :\n   *   - [~Const] Variable\n   *   - IntValue\n   *   - FloatValue\n   *   - StringValue\n   *   - BooleanValue\n   *   - NullValue\n   *   - EnumValue\n   *   - ListValue[?Const]\n   *   - ObjectValue[?Const]\n   *\n   * BooleanValue : one of `true` `false`\n   *\n   * NullValue : `null`\n   *\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseValueLiteral(isConst) {\n    const token = this._lexer.token;\n\n    switch (token.kind) {\n      case TokenKind.BRACKET_L:\n        return this.parseList(isConst);\n\n      case TokenKind.BRACE_L:\n        return this.parseObject(isConst);\n\n      case TokenKind.INT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: Kind.INT,\n          value: token.value,\n        });\n\n      case TokenKind.FLOAT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: Kind.FLOAT,\n          value: token.value,\n        });\n\n      case TokenKind.STRING:\n      case TokenKind.BLOCK_STRING:\n        return this.parseStringLiteral();\n\n      case TokenKind.NAME:\n        this.advanceLexer();\n\n        switch (token.value) {\n          case 'true':\n            return this.node(token, {\n              kind: Kind.BOOLEAN,\n              value: true,\n            });\n\n          case 'false':\n            return this.node(token, {\n              kind: Kind.BOOLEAN,\n              value: false,\n            });\n\n          case 'null':\n            return this.node(token, {\n              kind: Kind.NULL,\n            });\n\n          default:\n            return this.node(token, {\n              kind: Kind.ENUM,\n              value: token.value,\n            });\n        }\n\n      case TokenKind.DOLLAR:\n        if (isConst) {\n          this.expectToken(TokenKind.DOLLAR);\n\n          if (this._lexer.token.kind === TokenKind.NAME) {\n            const varName = this._lexer.token.value;\n            throw syntaxError(\n              this._lexer.source,\n              token.start,\n              `Unexpected variable \"$${varName}\" in constant value.`,\n            );\n          } else {\n            throw this.unexpected(token);\n          }\n        }\n\n        return this.parseVariable();\n\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  parseConstValueLiteral() {\n    return this.parseValueLiteral(true);\n  }\n\n  parseStringLiteral() {\n    const token = this._lexer.token;\n    this.advanceLexer();\n    return this.node(token, {\n      kind: Kind.STRING,\n      value: token.value,\n      block: token.kind === TokenKind.BLOCK_STRING,\n    });\n  }\n  /**\n   * ListValue[Const] :\n   *   - [ ]\n   *   - [ Value[?Const]+ ]\n   */\n\n  parseList(isConst) {\n    const item = () => this.parseValueLiteral(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: Kind.LIST,\n      values: this.any(TokenKind.BRACKET_L, item, TokenKind.BRACKET_R),\n    });\n  }\n  /**\n   * ```\n   * ObjectValue[Const] :\n   *   - { }\n   *   - { ObjectField[?Const]+ }\n   * ```\n   */\n\n  parseObject(isConst) {\n    const item = () => this.parseObjectField(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: Kind.OBJECT,\n      fields: this.any(TokenKind.BRACE_L, item, TokenKind.BRACE_R),\n    });\n  }\n  /**\n   * ObjectField[Const] : Name : Value[?Const]\n   */\n\n  parseObjectField(isConst) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    return this.node(start, {\n      kind: Kind.OBJECT_FIELD,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  } // Implements the parsing rules in the Directives section.\n\n  /**\n   * Directives[Const] : Directive[?Const]+\n   */\n\n  parseDirectives(isConst) {\n    const directives = [];\n\n    while (this.peek(TokenKind.AT)) {\n      directives.push(this.parseDirective(isConst));\n    }\n\n    return directives;\n  }\n\n  parseConstDirectives() {\n    return this.parseDirectives(true);\n  }\n  /**\n   * ```\n   * Directive[Const] : @ Name Arguments[?Const]?\n   * ```\n   */\n\n  parseDirective(isConst) {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.AT);\n    return this.node(start, {\n      kind: Kind.DIRECTIVE,\n      name: this.parseName(),\n      arguments: this.parseArguments(isConst),\n    });\n  } // Implements the parsing rules in the Types section.\n\n  /**\n   * Type :\n   *   - NamedType\n   *   - ListType\n   *   - NonNullType\n   */\n\n  parseTypeReference() {\n    const start = this._lexer.token;\n    let type;\n\n    if (this.expectOptionalToken(TokenKind.BRACKET_L)) {\n      const innerType = this.parseTypeReference();\n      this.expectToken(TokenKind.BRACKET_R);\n      type = this.node(start, {\n        kind: Kind.LIST_TYPE,\n        type: innerType,\n      });\n    } else {\n      type = this.parseNamedType();\n    }\n\n    if (this.expectOptionalToken(TokenKind.BANG)) {\n      return this.node(start, {\n        kind: Kind.NON_NULL_TYPE,\n        type,\n      });\n    }\n\n    return type;\n  }\n  /**\n   * NamedType : Name\n   */\n\n  parseNamedType() {\n    return this.node(this._lexer.token, {\n      kind: Kind.NAMED_TYPE,\n      name: this.parseName(),\n    });\n  } // Implements the parsing rules in the Type Definition section.\n\n  peekDescription() {\n    return this.peek(TokenKind.STRING) || this.peek(TokenKind.BLOCK_STRING);\n  }\n  /**\n   * Description : StringValue\n   */\n\n  parseDescription() {\n    if (this.peekDescription()) {\n      return this.parseStringLiteral();\n    }\n  }\n  /**\n   * ```\n   * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ }\n   * ```\n   */\n\n  parseSchemaDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.many(\n      TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      TokenKind.BRACE_R,\n    );\n    return this.node(start, {\n      kind: Kind.SCHEMA_DEFINITION,\n      description,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * OperationTypeDefinition : OperationType : NamedType\n   */\n\n  parseOperationTypeDefinition() {\n    const start = this._lexer.token;\n    const operation = this.parseOperationType();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseNamedType();\n    return this.node(start, {\n      kind: Kind.OPERATION_TYPE_DEFINITION,\n      operation,\n      type,\n    });\n  }\n  /**\n   * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n   */\n\n  parseScalarTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.SCALAR_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeDefinition :\n   *   Description?\n   *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n   */\n\n  parseObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ImplementsInterfaces :\n   *   - implements `&`? NamedType\n   *   - ImplementsInterfaces & NamedType\n   */\n\n  parseImplementsInterfaces() {\n    return this.expectOptionalKeyword('implements')\n      ? this.delimitedMany(TokenKind.AMP, this.parseNamedType)\n      : [];\n  }\n  /**\n   * ```\n   * FieldsDefinition : { FieldDefinition+ }\n   * ```\n   */\n\n  parseFieldsDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseFieldDefinition,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * FieldDefinition :\n   *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n   */\n\n  parseFieldDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseTypeReference();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.FIELD_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      type,\n      directives,\n    });\n  }\n  /**\n   * ArgumentsDefinition : ( InputValueDefinition+ )\n   */\n\n  parseArgumentDefs() {\n    return this.optionalMany(\n      TokenKind.PAREN_L,\n      this.parseInputValueDef,\n      TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * InputValueDefinition :\n   *   - Description? Name : Type DefaultValue? Directives[Const]?\n   */\n\n  parseInputValueDef() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseTypeReference();\n    let defaultValue;\n\n    if (this.expectOptionalToken(TokenKind.EQUALS)) {\n      defaultValue = this.parseConstValueLiteral();\n    }\n\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.INPUT_VALUE_DEFINITION,\n      description,\n      name,\n      type,\n      defaultValue,\n      directives,\n    });\n  }\n  /**\n   * InterfaceTypeDefinition :\n   *   - Description? interface Name Directives[Const]? FieldsDefinition?\n   */\n\n  parseInterfaceTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.INTERFACE_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeDefinition :\n   *   - Description? union Name Directives[Const]? UnionMemberTypes?\n   */\n\n  parseUnionTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n    return this.node(start, {\n      kind: Kind.UNION_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * UnionMemberTypes :\n   *   - = `|`? NamedType\n   *   - UnionMemberTypes | NamedType\n   */\n\n  parseUnionMemberTypes() {\n    return this.expectOptionalToken(TokenKind.EQUALS)\n      ? this.delimitedMany(TokenKind.PIPE, this.parseNamedType)\n      : [];\n  }\n  /**\n   * EnumTypeDefinition :\n   *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n   */\n\n  parseEnumTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n    return this.node(start, {\n      kind: Kind.ENUM_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * ```\n   * EnumValuesDefinition : { EnumValueDefinition+ }\n   * ```\n   */\n\n  parseEnumValuesDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseEnumValueDefinition,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * EnumValueDefinition : Description? EnumValue Directives[Const]?\n   */\n\n  parseEnumValueDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseEnumValueName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.ENUM_VALUE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseEnumValueName() {\n    if (\n      this._lexer.token.value === 'true' ||\n      this._lexer.token.value === 'false' ||\n      this._lexer.token.value === 'null'\n    ) {\n      throw syntaxError(\n        this._lexer.source,\n        this._lexer.token.start,\n        `${getTokenDesc(\n          this._lexer.token,\n        )} is reserved and cannot be used for an enum value.`,\n      );\n    }\n\n    return this.parseName();\n  }\n  /**\n   * InputObjectTypeDefinition :\n   *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n   */\n\n  parseInputObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * InputFieldsDefinition : { InputValueDefinition+ }\n   * ```\n   */\n\n  parseInputFieldsDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseInputValueDef,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * TypeSystemExtension :\n   *   - SchemaExtension\n   *   - TypeExtension\n   *\n   * TypeExtension :\n   *   - ScalarTypeExtension\n   *   - ObjectTypeExtension\n   *   - InterfaceTypeExtension\n   *   - UnionTypeExtension\n   *   - EnumTypeExtension\n   *   - InputObjectTypeDefinition\n   */\n\n  parseTypeSystemExtension() {\n    const keywordToken = this._lexer.lookahead();\n\n    if (keywordToken.kind === TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaExtension();\n\n        case 'scalar':\n          return this.parseScalarTypeExtension();\n\n        case 'type':\n          return this.parseObjectTypeExtension();\n\n        case 'interface':\n          return this.parseInterfaceTypeExtension();\n\n        case 'union':\n          return this.parseUnionTypeExtension();\n\n        case 'enum':\n          return this.parseEnumTypeExtension();\n\n        case 'input':\n          return this.parseInputObjectTypeExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  }\n  /**\n   * ```\n   * SchemaExtension :\n   *  - extend schema Directives[Const]? { OperationTypeDefinition+ }\n   *  - extend schema Directives[Const]\n   * ```\n   */\n\n  parseSchemaExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      TokenKind.BRACE_R,\n    );\n\n    if (directives.length === 0 && operationTypes.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.SCHEMA_EXTENSION,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * ScalarTypeExtension :\n   *   - extend scalar Name Directives[Const]\n   */\n\n  parseScalarTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n\n    if (directives.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.SCALAR_TYPE_EXTENSION,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeExtension :\n   *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend type Name ImplementsInterfaces? Directives[Const]\n   *  - extend type Name ImplementsInterfaces\n   */\n\n  parseObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.OBJECT_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * InterfaceTypeExtension :\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]\n   *  - extend interface Name ImplementsInterfaces\n   */\n\n  parseInterfaceTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.INTERFACE_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeExtension :\n   *   - extend union Name Directives[Const]? UnionMemberTypes\n   *   - extend union Name Directives[Const]\n   */\n\n  parseUnionTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n\n    if (directives.length === 0 && types.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.UNION_TYPE_EXTENSION,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * EnumTypeExtension :\n   *   - extend enum Name Directives[Const]? EnumValuesDefinition\n   *   - extend enum Name Directives[Const]\n   */\n\n  parseEnumTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n\n    if (directives.length === 0 && values.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.ENUM_TYPE_EXTENSION,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * InputObjectTypeExtension :\n   *   - extend input Name Directives[Const]? InputFieldsDefinition\n   *   - extend input Name Directives[Const]\n   */\n\n  parseInputObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n\n    if (directives.length === 0 && fields.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * DirectiveDefinition :\n   *   - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations\n   * ```\n   */\n\n  parseDirectiveDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('directive');\n    this.expectToken(TokenKind.AT);\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    const repeatable = this.expectOptionalKeyword('repeatable');\n    this.expectKeyword('on');\n    const locations = this.parseDirectiveLocations();\n    return this.node(start, {\n      kind: Kind.DIRECTIVE_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      repeatable,\n      locations,\n    });\n  }\n  /**\n   * DirectiveLocations :\n   *   - `|`? DirectiveLocation\n   *   - DirectiveLocations | DirectiveLocation\n   */\n\n  parseDirectiveLocations() {\n    return this.delimitedMany(TokenKind.PIPE, this.parseDirectiveLocation);\n  }\n  /*\n   * DirectiveLocation :\n   *   - ExecutableDirectiveLocation\n   *   - TypeSystemDirectiveLocation\n   *\n   * ExecutableDirectiveLocation : one of\n   *   `QUERY`\n   *   `MUTATION`\n   *   `SUBSCRIPTION`\n   *   `FIELD`\n   *   `FRAGMENT_DEFINITION`\n   *   `FRAGMENT_SPREAD`\n   *   `INLINE_FRAGMENT`\n   *\n   * TypeSystemDirectiveLocation : one of\n   *   `SCHEMA`\n   *   `SCALAR`\n   *   `OBJECT`\n   *   `FIELD_DEFINITION`\n   *   `ARGUMENT_DEFINITION`\n   *   `INTERFACE`\n   *   `UNION`\n   *   `ENUM`\n   *   `ENUM_VALUE`\n   *   `INPUT_OBJECT`\n   *   `INPUT_FIELD_DEFINITION`\n   */\n\n  parseDirectiveLocation() {\n    const start = this._lexer.token;\n    const name = this.parseName();\n\n    if (Object.prototype.hasOwnProperty.call(DirectiveLocation, name.value)) {\n      return name;\n    }\n\n    throw this.unexpected(start);\n  } // Schema Coordinates\n\n  /**\n   * SchemaCoordinate :\n   *   - Name\n   *   - Name . Name\n   *   - Name . Name ( Name : )\n   *   - \\@ Name\n   *   - \\@ Name ( Name : )\n   */\n\n  parseSchemaCoordinate() {\n    const start = this._lexer.token;\n    const ofDirective = this.expectOptionalToken(TokenKind.AT);\n    const name = this.parseName();\n    let memberName;\n\n    if (!ofDirective && this.expectOptionalToken(TokenKind.DOT)) {\n      memberName = this.parseName();\n    }\n\n    let argumentName;\n\n    if (\n      (ofDirective || memberName) &&\n      this.expectOptionalToken(TokenKind.PAREN_L)\n    ) {\n      argumentName = this.parseName();\n      this.expectToken(TokenKind.COLON);\n      this.expectToken(TokenKind.PAREN_R);\n    }\n\n    if (ofDirective) {\n      if (argumentName) {\n        return this.node(start, {\n          kind: Kind.DIRECTIVE_ARGUMENT_COORDINATE,\n          name,\n          argumentName,\n        });\n      }\n\n      return this.node(start, {\n        kind: Kind.DIRECTIVE_COORDINATE,\n        name,\n      });\n    } else if (memberName) {\n      if (argumentName) {\n        return this.node(start, {\n          kind: Kind.ARGUMENT_COORDINATE,\n          name,\n          fieldName: memberName,\n          argumentName,\n        });\n      }\n\n      return this.node(start, {\n        kind: Kind.MEMBER_COORDINATE,\n        name,\n        memberName,\n      });\n    }\n\n    return this.node(start, {\n      kind: Kind.TYPE_COORDINATE,\n      name,\n    });\n  } // Core parsing utility functions\n\n  /**\n   * Returns a node that, if configured to do so, sets a \"loc\" field as a\n   * location object, used to identify the place in the source that created a\n   * given parsed object.\n   */\n\n  node(startToken, node) {\n    if (this._options.noLocation !== true) {\n      node.loc = new Location(\n        startToken,\n        this._lexer.lastToken,\n        this._lexer.source,\n      );\n    }\n\n    return node;\n  }\n  /**\n   * Determines if the next token is of a given kind\n   */\n\n  peek(kind) {\n    return this._lexer.token.kind === kind;\n  }\n  /**\n   * If the next token is of the given kind, return that token after advancing the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return token;\n    }\n\n    throw syntaxError(\n      this._lexer.source,\n      token.start,\n      `Expected ${getTokenKindDesc(kind)}, found ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * If the next token is of the given kind, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * If the next token is a given keyword, advance the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n    } else {\n      throw syntaxError(\n        this._lexer.source,\n        token.start,\n        `Expected \"${value}\", found ${getTokenDesc(token)}.`,\n      );\n    }\n  }\n  /**\n   * If the next token is a given keyword, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * Helper function for creating an error when an unexpected lexed token is encountered.\n   */\n\n  unexpected(atToken) {\n    const token =\n      atToken !== null && atToken !== void 0 ? atToken : this._lexer.token;\n    return syntaxError(\n      this._lexer.source,\n      token.start,\n      `Unexpected ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * Returns a possibly empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  any(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    while (!this.expectOptionalToken(closeKind)) {\n      nodes.push(parseFn.call(this));\n    }\n\n    return nodes;\n  }\n  /**\n   * Returns a list of parse nodes, determined by the parseFn.\n   * It can be empty only if open token is missing otherwise it will always return non-empty list\n   * that begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  optionalMany(openKind, parseFn, closeKind) {\n    if (this.expectOptionalToken(openKind)) {\n      const nodes = [];\n\n      do {\n        nodes.push(parseFn.call(this));\n      } while (!this.expectOptionalToken(closeKind));\n\n      return nodes;\n    }\n\n    return [];\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  many(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (!this.expectOptionalToken(closeKind));\n\n    return nodes;\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind.\n   * Advances the parser to the next lex token after last item in the list.\n   */\n\n  delimitedMany(delimiterKind, parseFn) {\n    this.expectOptionalToken(delimiterKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (this.expectOptionalToken(delimiterKind));\n\n    return nodes;\n  }\n\n  advanceLexer() {\n    const { maxTokens } = this._options;\n\n    const token = this._lexer.advance();\n\n    if (token.kind !== TokenKind.EOF) {\n      ++this._tokenCounter;\n\n      if (maxTokens !== undefined && this._tokenCounter > maxTokens) {\n        throw syntaxError(\n          this._lexer.source,\n          token.start,\n          `Document contains more that ${maxTokens} tokens. Parsing aborted.`,\n        );\n      }\n    }\n  }\n}\n/**\n * A helper function to describe a token as a string for debugging.\n */\n\nfunction getTokenDesc(token) {\n  const value = token.value;\n  return getTokenKindDesc(token.kind) + (value != null ? ` \"${value}\"` : '');\n}\n/**\n * A helper function to describe a token kind as a string for debugging.\n */\n\nfunction getTokenKindDesc(kind) {\n  return isPunctuatorTokenKind(kind) ? `\"${kind}\"` : kind;\n}\n","/**\n * Prints a string as a GraphQL StringValue literal. Replaces control characters\n * and excluded characters (\" U+0022 and \\\\ U+005C) with escape sequences.\n */\nexport function printString(str) {\n  return `\"${str.replace(escapedRegExp, escapedReplacer)}\"`;\n} // eslint-disable-next-line no-control-regex\n\nconst escapedRegExp = /[\\x00-\\x1f\\x22\\x5c\\x7f-\\x9f]/g;\n\nfunction escapedReplacer(str) {\n  return escapeSequences[str.charCodeAt(0)];\n} // prettier-ignore\n\nconst escapeSequences = [\n  '\\\\u0000',\n  '\\\\u0001',\n  '\\\\u0002',\n  '\\\\u0003',\n  '\\\\u0004',\n  '\\\\u0005',\n  '\\\\u0006',\n  '\\\\u0007',\n  '\\\\b',\n  '\\\\t',\n  '\\\\n',\n  '\\\\u000B',\n  '\\\\f',\n  '\\\\r',\n  '\\\\u000E',\n  '\\\\u000F',\n  '\\\\u0010',\n  '\\\\u0011',\n  '\\\\u0012',\n  '\\\\u0013',\n  '\\\\u0014',\n  '\\\\u0015',\n  '\\\\u0016',\n  '\\\\u0017',\n  '\\\\u0018',\n  '\\\\u0019',\n  '\\\\u001A',\n  '\\\\u001B',\n  '\\\\u001C',\n  '\\\\u001D',\n  '\\\\u001E',\n  '\\\\u001F',\n  '',\n  '',\n  '\\\\\"',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 2F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 3F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 4F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\\\\\',\n  '',\n  '',\n  '', // 5F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 6F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\u007F',\n  '\\\\u0080',\n  '\\\\u0081',\n  '\\\\u0082',\n  '\\\\u0083',\n  '\\\\u0084',\n  '\\\\u0085',\n  '\\\\u0086',\n  '\\\\u0087',\n  '\\\\u0088',\n  '\\\\u0089',\n  '\\\\u008A',\n  '\\\\u008B',\n  '\\\\u008C',\n  '\\\\u008D',\n  '\\\\u008E',\n  '\\\\u008F',\n  '\\\\u0090',\n  '\\\\u0091',\n  '\\\\u0092',\n  '\\\\u0093',\n  '\\\\u0094',\n  '\\\\u0095',\n  '\\\\u0096',\n  '\\\\u0097',\n  '\\\\u0098',\n  '\\\\u0099',\n  '\\\\u009A',\n  '\\\\u009B',\n  '\\\\u009C',\n  '\\\\u009D',\n  '\\\\u009E',\n  '\\\\u009F',\n];\n","import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { isNode, QueryDocumentKeys } from './ast.mjs';\nimport { Kind } from './kinds.mjs';\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport const BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * ```ts\n * const editedAST = visit(ast, {\n *   enter(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: skip visiting this node\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   },\n *   leave(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: no action\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   }\n * });\n * ```\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to three permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind(node) {\n *     // enter the \"Kind\" node\n *   }\n * })\n * ```\n *\n * 2) Named visitors that trigger upon entering and leaving a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind: {\n *     enter(node) {\n *       // enter the \"Kind\" node\n *     }\n *     leave(node) {\n *       // leave the \"Kind\" node\n *     }\n *   }\n * })\n * ```\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * ```ts\n * visit(ast, {\n *   enter(node) {\n *     // enter any node\n *   },\n *   leave(node) {\n *     // leave any node\n *   }\n * })\n * ```\n */\n\nexport function visit(root, visitor, visitorKeys = QueryDocumentKeys) {\n  const enterLeaveMap = new Map();\n\n  for (const kind of Object.values(Kind)) {\n    enterLeaveMap.set(kind, getEnterLeaveForKind(visitor, kind));\n  }\n  /* eslint-disable no-undef-init */\n\n  let stack = undefined;\n  let inArray = Array.isArray(root);\n  let keys = [root];\n  let index = -1;\n  let edits = [];\n  let node = root;\n  let key = undefined;\n  let parent = undefined;\n  const path = [];\n  const ancestors = [];\n  /* eslint-enable no-undef-init */\n\n  do {\n    index++;\n    const isLeaving = index === keys.length;\n    const isEdited = isLeaving && edits.length !== 0;\n\n    if (isLeaving) {\n      key = ancestors.length === 0 ? undefined : path[path.length - 1];\n      node = parent;\n      parent = ancestors.pop();\n\n      if (isEdited) {\n        if (inArray) {\n          node = node.slice();\n          let editOffset = 0;\n\n          for (const [editKey, editValue] of edits) {\n            const arrayKey = editKey - editOffset;\n\n            if (editValue === null) {\n              node.splice(arrayKey, 1);\n              editOffset++;\n            } else {\n              node[arrayKey] = editValue;\n            }\n          }\n        } else {\n          node = { ...node };\n\n          for (const [editKey, editValue] of edits) {\n            node[editKey] = editValue;\n          }\n        }\n      }\n\n      index = stack.index;\n      keys = stack.keys;\n      edits = stack.edits;\n      inArray = stack.inArray;\n      stack = stack.prev;\n    } else if (parent) {\n      key = inArray ? index : keys[index];\n      node = parent[key];\n\n      if (node === null || node === undefined) {\n        continue;\n      }\n\n      path.push(key);\n    }\n\n    let result;\n\n    if (!Array.isArray(node)) {\n      var _enterLeaveMap$get, _enterLeaveMap$get2;\n\n      isNode(node) || devAssert(false, `Invalid AST Node: ${inspect(node)}.`);\n      const visitFn = isLeaving\n        ? (_enterLeaveMap$get = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get === void 0\n          ? void 0\n          : _enterLeaveMap$get.leave\n        : (_enterLeaveMap$get2 = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get2 === void 0\n        ? void 0\n        : _enterLeaveMap$get2.enter;\n      result =\n        visitFn === null || visitFn === void 0\n          ? void 0\n          : visitFn.call(visitor, node, key, parent, path, ancestors);\n\n      if (result === BREAK) {\n        break;\n      }\n\n      if (result === false) {\n        if (!isLeaving) {\n          path.pop();\n          continue;\n        }\n      } else if (result !== undefined) {\n        edits.push([key, result]);\n\n        if (!isLeaving) {\n          if (isNode(result)) {\n            node = result;\n          } else {\n            path.pop();\n            continue;\n          }\n        }\n      }\n    }\n\n    if (result === undefined && isEdited) {\n      edits.push([key, node]);\n    }\n\n    if (isLeaving) {\n      path.pop();\n    } else {\n      var _node$kind;\n\n      stack = {\n        inArray,\n        index,\n        keys,\n        edits,\n        prev: stack,\n      };\n      inArray = Array.isArray(node);\n      keys = inArray\n        ? node\n        : (_node$kind = visitorKeys[node.kind]) !== null &&\n          _node$kind !== void 0\n        ? _node$kind\n        : [];\n      index = -1;\n      edits = [];\n\n      if (parent) {\n        ancestors.push(parent);\n      }\n\n      parent = node;\n    }\n  } while (stack !== undefined);\n\n  if (edits.length !== 0) {\n    // New root\n    return edits[edits.length - 1][1];\n  }\n\n  return root;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n  const skipping = new Array(visitors.length).fill(null);\n  const mergedVisitor = Object.create(null);\n\n  for (const kind of Object.values(Kind)) {\n    let hasVisitor = false;\n    const enterList = new Array(visitors.length).fill(undefined);\n    const leaveList = new Array(visitors.length).fill(undefined);\n\n    for (let i = 0; i < visitors.length; ++i) {\n      const { enter, leave } = getEnterLeaveForKind(visitors[i], kind);\n      hasVisitor || (hasVisitor = enter != null || leave != null);\n      enterList[i] = enter;\n      leaveList[i] = leave;\n    }\n\n    if (!hasVisitor) {\n      continue;\n    }\n\n    const mergedEnterLeave = {\n      enter(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _enterList$i;\n\n            const result =\n              (_enterList$i = enterList[i]) === null || _enterList$i === void 0\n                ? void 0\n                : _enterList$i.apply(visitors[i], args);\n\n            if (result === false) {\n              skipping[i] = node;\n            } else if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined) {\n              return result;\n            }\n          }\n        }\n      },\n\n      leave(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _leaveList$i;\n\n            const result =\n              (_leaveList$i = leaveList[i]) === null || _leaveList$i === void 0\n                ? void 0\n                : _leaveList$i.apply(visitors[i], args);\n\n            if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined && result !== false) {\n              return result;\n            }\n          } else if (skipping[i] === node) {\n            skipping[i] = null;\n          }\n        }\n      },\n    };\n    mergedVisitor[kind] = mergedEnterLeave;\n  }\n\n  return mergedVisitor;\n}\n/**\n * Given a visitor instance and a node kind, return EnterLeaveVisitor for that kind.\n */\n\nexport function getEnterLeaveForKind(visitor, kind) {\n  const kindVisitor = visitor[kind];\n\n  if (typeof kindVisitor === 'object') {\n    // { Kind: { enter() {}, leave() {} } }\n    return kindVisitor;\n  } else if (typeof kindVisitor === 'function') {\n    // { Kind() {} }\n    return {\n      enter: kindVisitor,\n      leave: undefined,\n    };\n  } // { enter() {}, leave() {} }\n\n  return {\n    enter: visitor.enter,\n    leave: visitor.leave,\n  };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n *\n * @deprecated Please use `getEnterLeaveForKind` instead. Will be removed in v17\n */\n\n/* c8 ignore next 8 */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n  const { enter, leave } = getEnterLeaveForKind(visitor, kind);\n  return isLeaving ? leave : enter;\n}\n","import { printBlockString } from './blockString.mjs';\nimport { printString } from './printString.mjs';\nimport { visit } from './visitor.mjs';\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n  return visit(ast, printDocASTReducer);\n}\nconst MAX_LINE_LENGTH = 80;\nconst printDocASTReducer = {\n  Name: {\n    leave: (node) => node.value,\n  },\n  Variable: {\n    leave: (node) => '$' + node.name,\n  },\n  // Document\n  Document: {\n    leave: (node) => join(node.definitions, '\\n\\n'),\n  },\n  OperationDefinition: {\n    leave(node) {\n      const varDefs = hasMultilineItems(node.variableDefinitions)\n        ? wrap('(\\n', join(node.variableDefinitions, '\\n'), '\\n)')\n        : wrap('(', join(node.variableDefinitions, ', '), ')');\n      const prefix =\n        wrap('', node.description, '\\n') +\n        join(\n          [\n            node.operation,\n            join([node.name, varDefs]),\n            join(node.directives, ' '),\n          ],\n          ' ',\n        ); // Anonymous queries with no directives or variable definitions can use\n      // the query short form.\n\n      return (prefix === 'query' ? '' : prefix + ' ') + node.selectionSet;\n    },\n  },\n  VariableDefinition: {\n    leave: ({ variable, type, defaultValue, directives, description }) =>\n      wrap('', description, '\\n') +\n      variable +\n      ': ' +\n      type +\n      wrap(' = ', defaultValue) +\n      wrap(' ', join(directives, ' ')),\n  },\n  SelectionSet: {\n    leave: ({ selections }) => block(selections),\n  },\n  Field: {\n    leave({ alias, name, arguments: args, directives, selectionSet }) {\n      const prefix = wrap('', alias, ': ') + name;\n      let argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n      if (argsLine.length > MAX_LINE_LENGTH) {\n        argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n      }\n\n      return join([argsLine, join(directives, ' '), selectionSet], ' ');\n    },\n  },\n  Argument: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Fragments\n  FragmentSpread: {\n    leave: ({ name, directives }) =>\n      '...' + name + wrap(' ', join(directives, ' ')),\n  },\n  InlineFragment: {\n    leave: ({ typeCondition, directives, selectionSet }) =>\n      join(\n        [\n          '...',\n          wrap('on ', typeCondition),\n          join(directives, ' '),\n          selectionSet,\n        ],\n        ' ',\n      ),\n  },\n  FragmentDefinition: {\n    leave: ({\n      name,\n      typeCondition,\n      variableDefinitions,\n      directives,\n      selectionSet,\n      description,\n    }) =>\n      wrap('', description, '\\n') + // Note: fragment variable definitions are experimental and may be changed\n      // or removed in the future.\n      `fragment ${name}${wrap('(', join(variableDefinitions, ', '), ')')} ` +\n      `on ${typeCondition} ${wrap('', join(directives, ' '), ' ')}` +\n      selectionSet,\n  },\n  // Value\n  IntValue: {\n    leave: ({ value }) => value,\n  },\n  FloatValue: {\n    leave: ({ value }) => value,\n  },\n  StringValue: {\n    leave: ({ value, block: isBlockString }) =>\n      isBlockString ? printBlockString(value) : printString(value),\n  },\n  BooleanValue: {\n    leave: ({ value }) => (value ? 'true' : 'false'),\n  },\n  NullValue: {\n    leave: () => 'null',\n  },\n  EnumValue: {\n    leave: ({ value }) => value,\n  },\n  ListValue: {\n    leave: ({ values }) => '[' + join(values, ', ') + ']',\n  },\n  ObjectValue: {\n    leave: ({ fields }) => '{' + join(fields, ', ') + '}',\n  },\n  ObjectField: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Directive\n  Directive: {\n    leave: ({ name, arguments: args }) =>\n      '@' + name + wrap('(', join(args, ', '), ')'),\n  },\n  // Type\n  NamedType: {\n    leave: ({ name }) => name,\n  },\n  ListType: {\n    leave: ({ type }) => '[' + type + ']',\n  },\n  NonNullType: {\n    leave: ({ type }) => type + '!',\n  },\n  // Type System Definitions\n  SchemaDefinition: {\n    leave: ({ description, directives, operationTypes }) =>\n      wrap('', description, '\\n') +\n      join(['schema', join(directives, ' '), block(operationTypes)], ' '),\n  },\n  OperationTypeDefinition: {\n    leave: ({ operation, type }) => operation + ': ' + type,\n  },\n  ScalarTypeDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') +\n      join(['scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  FieldDefinition: {\n    leave: ({ description, name, arguments: args, type, directives }) =>\n      wrap('', description, '\\n') +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      ': ' +\n      type +\n      wrap(' ', join(directives, ' ')),\n  },\n  InputValueDefinition: {\n    leave: ({ description, name, type, defaultValue, directives }) =>\n      wrap('', description, '\\n') +\n      join(\n        [name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')],\n        ' ',\n      ),\n  },\n  InterfaceTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeDefinition: {\n    leave: ({ description, name, directives, types }) =>\n      wrap('', description, '\\n') +\n      join(\n        ['union', name, join(directives, ' '), wrap('= ', join(types, ' | '))],\n        ' ',\n      ),\n  },\n  EnumTypeDefinition: {\n    leave: ({ description, name, directives, values }) =>\n      wrap('', description, '\\n') +\n      join(['enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  EnumValueDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') + join([name, join(directives, ' ')], ' '),\n  },\n  InputObjectTypeDefinition: {\n    leave: ({ description, name, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(['input', name, join(directives, ' '), block(fields)], ' '),\n  },\n  DirectiveDefinition: {\n    leave: ({ description, name, arguments: args, repeatable, locations }) =>\n      wrap('', description, '\\n') +\n      'directive @' +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      (repeatable ? ' repeatable' : '') +\n      ' on ' +\n      join(locations, ' | '),\n  },\n  SchemaExtension: {\n    leave: ({ directives, operationTypes }) =>\n      join(\n        ['extend schema', join(directives, ' '), block(operationTypes)],\n        ' ',\n      ),\n  },\n  ScalarTypeExtension: {\n    leave: ({ name, directives }) =>\n      join(['extend scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  InterfaceTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeExtension: {\n    leave: ({ name, directives, types }) =>\n      join(\n        [\n          'extend union',\n          name,\n          join(directives, ' '),\n          wrap('= ', join(types, ' | ')),\n        ],\n        ' ',\n      ),\n  },\n  EnumTypeExtension: {\n    leave: ({ name, directives, values }) =>\n      join(['extend enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  InputObjectTypeExtension: {\n    leave: ({ name, directives, fields }) =>\n      join(['extend input', name, join(directives, ' '), block(fields)], ' '),\n  },\n  // Schema Coordinates\n  TypeCoordinate: {\n    leave: ({ name }) => name,\n  },\n  MemberCoordinate: {\n    leave: ({ name, memberName }) => join([name, wrap('.', memberName)]),\n  },\n  ArgumentCoordinate: {\n    leave: ({ name, fieldName, argumentName }) =>\n      join([name, wrap('.', fieldName), wrap('(', argumentName, ':)')]),\n  },\n  DirectiveCoordinate: {\n    leave: ({ name }) => join(['@', name]),\n  },\n  DirectiveArgumentCoordinate: {\n    leave: ({ name, argumentName }) =>\n      join(['@', name, wrap('(', argumentName, ':)')]),\n  },\n};\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\nfunction join(maybeArray, separator = '') {\n  var _maybeArray$filter$jo;\n\n  return (_maybeArray$filter$jo =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.filter((x) => x).join(separator)) !== null &&\n    _maybeArray$filter$jo !== void 0\n    ? _maybeArray$filter$jo\n    : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an indented `{ }` block.\n */\n\nfunction block(array) {\n  return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\nfunction wrap(start, maybeString, end = '') {\n  return maybeString != null && maybeString !== ''\n    ? start + maybeString + end\n    : '';\n}\n\nfunction indent(str) {\n  return wrap('  ', str.replace(/\\n/g, '\\n  '));\n}\n\nfunction hasMultilineItems(maybeArray) {\n  var _maybeArray$some;\n\n  // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n  return (_maybeArray$some =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.some((str) => str.includes('\\n'))) !== null &&\n    _maybeArray$some !== void 0\n    ? _maybeArray$some\n    : false;\n}\n","import { Kind } from './kinds.mjs';\nexport function isDefinitionNode(node) {\n  return (\n    isExecutableDefinitionNode(node) ||\n    isTypeSystemDefinitionNode(node) ||\n    isTypeSystemExtensionNode(node)\n  );\n}\nexport function isExecutableDefinitionNode(node) {\n  return (\n    node.kind === Kind.OPERATION_DEFINITION ||\n    node.kind === Kind.FRAGMENT_DEFINITION\n  );\n}\nexport function isSelectionNode(node) {\n  return (\n    node.kind === Kind.FIELD ||\n    node.kind === Kind.FRAGMENT_SPREAD ||\n    node.kind === Kind.INLINE_FRAGMENT\n  );\n}\nexport function isValueNode(node) {\n  return (\n    node.kind === Kind.VARIABLE ||\n    node.kind === Kind.INT ||\n    node.kind === Kind.FLOAT ||\n    node.kind === Kind.STRING ||\n    node.kind === Kind.BOOLEAN ||\n    node.kind === Kind.NULL ||\n    node.kind === Kind.ENUM ||\n    node.kind === Kind.LIST ||\n    node.kind === Kind.OBJECT\n  );\n}\nexport function isConstValueNode(node) {\n  return (\n    isValueNode(node) &&\n    (node.kind === Kind.LIST\n      ? node.values.some(isConstValueNode)\n      : node.kind === Kind.OBJECT\n      ? node.fields.some((field) => isConstValueNode(field.value))\n      : node.kind !== Kind.VARIABLE)\n  );\n}\nexport function isTypeNode(node) {\n  return (\n    node.kind === Kind.NAMED_TYPE ||\n    node.kind === Kind.LIST_TYPE ||\n    node.kind === Kind.NON_NULL_TYPE\n  );\n}\nexport function isTypeSystemDefinitionNode(node) {\n  return (\n    node.kind === Kind.SCHEMA_DEFINITION ||\n    isTypeDefinitionNode(node) ||\n    node.kind === Kind.DIRECTIVE_DEFINITION\n  );\n}\nexport function isTypeDefinitionNode(node) {\n  return (\n    node.kind === Kind.SCALAR_TYPE_DEFINITION ||\n    node.kind === Kind.OBJECT_TYPE_DEFINITION ||\n    node.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n    node.kind === Kind.UNION_TYPE_DEFINITION ||\n    node.kind === Kind.ENUM_TYPE_DEFINITION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n  );\n}\nexport function isTypeSystemExtensionNode(node) {\n  return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);\n}\nexport function isTypeExtensionNode(node) {\n  return (\n    node.kind === Kind.SCALAR_TYPE_EXTENSION ||\n    node.kind === Kind.OBJECT_TYPE_EXTENSION ||\n    node.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n    node.kind === Kind.UNION_TYPE_EXTENSION ||\n    node.kind === Kind.ENUM_TYPE_EXTENSION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n  );\n}\nexport function isSchemaCoordinateNode(node) {\n  return (\n    node.kind === Kind.TYPE_COORDINATE ||\n    node.kind === Kind.MEMBER_COORDINATE ||\n    node.kind === Kind.ARGUMENT_COORDINATE ||\n    node.kind === Kind.DIRECTIVE_COORDINATE ||\n    node.kind === Kind.DIRECTIVE_ARGUMENT_COORDINATE\n  );\n}\n","import { invariant } from \"../globals/index.js\";\nimport { visit, BREAK, Kind } from \"graphql\";\nexport function shouldInclude(_a, variables) {\n    var directives = _a.directives;\n    if (!directives || !directives.length) {\n        return true;\n    }\n    return getInclusionDirectives(directives).every(function (_a) {\n        var directive = _a.directive, ifArgument = _a.ifArgument;\n        var evaledValue = false;\n        if (ifArgument.value.kind === \"Variable\") {\n            evaledValue =\n                variables && variables[ifArgument.value.name.value];\n            invariant(evaledValue !== void 0, 105, directive.name.value);\n        }\n        else {\n            evaledValue = ifArgument.value.value;\n        }\n        return directive.name.value === \"skip\" ? !evaledValue : evaledValue;\n    });\n}\nexport function getDirectiveNames(root) {\n    var names = [];\n    visit(root, {\n        Directive: function (node) {\n            names.push(node.name.value);\n        },\n    });\n    return names;\n}\nexport var hasAnyDirectives = function (names, root) {\n    return hasDirectives(names, root, false);\n};\nexport var hasAllDirectives = function (names, root) {\n    return hasDirectives(names, root, true);\n};\nexport function hasDirectives(names, root, all) {\n    var nameSet = new Set(names);\n    var uniqueCount = nameSet.size;\n    visit(root, {\n        Directive: function (node) {\n            if (nameSet.delete(node.name.value) && (!all || !nameSet.size)) {\n                return BREAK;\n            }\n        },\n    });\n    // If we found all the names, nameSet will be empty. If we only care about\n    // finding some of them, the < condition is sufficient.\n    return all ? !nameSet.size : nameSet.size < uniqueCount;\n}\nexport function hasClientExports(document) {\n    return document && hasDirectives([\"client\", \"export\"], document, true);\n}\nfunction isInclusionDirective(_a) {\n    var value = _a.name.value;\n    return value === \"skip\" || value === \"include\";\n}\nexport function getInclusionDirectives(directives) {\n    var result = [];\n    if (directives && directives.length) {\n        directives.forEach(function (directive) {\n            if (!isInclusionDirective(directive))\n                return;\n            var directiveArguments = directive.arguments;\n            var directiveName = directive.name.value;\n            invariant(directiveArguments && directiveArguments.length === 1, 106, directiveName);\n            var ifArgument = directiveArguments[0];\n            invariant(ifArgument.name && ifArgument.name.value === \"if\", 107, directiveName);\n            var ifValue = ifArgument.value;\n            // means it has to be a variable value if this is a valid @skip or @include directive\n            invariant(ifValue &&\n                (ifValue.kind === \"Variable\" || ifValue.kind === \"BooleanValue\"), 108, directiveName);\n            result.push({ directive: directive, ifArgument: ifArgument });\n        });\n    }\n    return result;\n}\n/** @internal */\nexport function getFragmentMaskMode(fragment) {\n    var _a, _b;\n    var directive = (_a = fragment.directives) === null || _a === void 0 ? void 0 : _a.find(function (_a) {\n        var name = _a.name;\n        return name.value === \"unmask\";\n    });\n    if (!directive) {\n        return \"mask\";\n    }\n    var modeArg = (_b = directive.arguments) === null || _b === void 0 ? void 0 : _b.find(function (_a) {\n        var name = _a.name;\n        return name.value === \"mode\";\n    });\n    if (globalThis.__DEV__ !== false) {\n        if (modeArg) {\n            if (modeArg.value.kind === Kind.VARIABLE) {\n                globalThis.__DEV__ !== false && invariant.warn(109);\n            }\n            else if (modeArg.value.kind !== Kind.STRING) {\n                globalThis.__DEV__ !== false && invariant.warn(110);\n            }\n            else if (modeArg.value.value !== \"migrate\") {\n                globalThis.__DEV__ !== false && invariant.warn(111, modeArg.value.value);\n            }\n        }\n    }\n    if (modeArg &&\n        \"value\" in modeArg.value &&\n        modeArg.value.value === \"migrate\") {\n        return \"migrate\";\n    }\n    return \"unmask\";\n}\n//# sourceMappingURL=directives.js.map","// A [trie](https://en.wikipedia.org/wiki/Trie) data structure that holds\n// object keys weakly, yet can also hold non-object keys, unlike the\n// native `WeakMap`.\n// If no makeData function is supplied, the looked-up data will be an empty,\n// null-prototype Object.\nconst defaultMakeData = () => Object.create(null);\n// Useful for processing arguments objects as well as arrays.\nconst { forEach, slice } = Array.prototype;\nconst { hasOwnProperty } = Object.prototype;\nexport class Trie {\n    constructor(weakness = true, makeData = defaultMakeData) {\n        this.weakness = weakness;\n        this.makeData = makeData;\n    }\n    lookup() {\n        return this.lookupArray(arguments);\n    }\n    lookupArray(array) {\n        let node = this;\n        forEach.call(array, key => node = node.getChildTrie(key));\n        return hasOwnProperty.call(node, \"data\")\n            ? node.data\n            : node.data = this.makeData(slice.call(array));\n    }\n    peek() {\n        return this.peekArray(arguments);\n    }\n    peekArray(array) {\n        let node = this;\n        for (let i = 0, len = array.length; node && i < len; ++i) {\n            const map = node.mapFor(array[i], false);\n            node = map && map.get(array[i]);\n        }\n        return node && node.data;\n    }\n    remove() {\n        return this.removeArray(arguments);\n    }\n    removeArray(array) {\n        let data;\n        if (array.length) {\n            const head = array[0];\n            const map = this.mapFor(head, false);\n            const child = map && map.get(head);\n            if (child) {\n                data = child.removeArray(slice.call(array, 1));\n                if (!child.data && !child.weak && !(child.strong && child.strong.size)) {\n                    map.delete(head);\n                }\n            }\n        }\n        else {\n            data = this.data;\n            delete this.data;\n        }\n        return data;\n    }\n    getChildTrie(key) {\n        const map = this.mapFor(key, true);\n        let child = map.get(key);\n        if (!child)\n            map.set(key, child = new Trie(this.weakness, this.makeData));\n        return child;\n    }\n    mapFor(key, create) {\n        return this.weakness && isObjRef(key)\n            ? this.weak || (create ? this.weak = new WeakMap : void 0)\n            : this.strong || (create ? this.strong = new Map : void 0);\n    }\n}\nfunction isObjRef(value) {\n    switch (typeof value) {\n        case \"object\":\n            if (value === null)\n                break;\n        // Fall through to return true...\n        case \"function\":\n            return true;\n    }\n    return false;\n}\n//# sourceMappingURL=index.js.map","import { maybe } from \"../globals/index.js\";\nvar isReactNative = maybe(function () { return navigator.product; }) == \"ReactNative\";\nexport var canUseWeakMap = typeof WeakMap === \"function\" &&\n    !(isReactNative && !global.HermesInternal);\nexport var canUseWeakSet = typeof WeakSet === \"function\";\nexport var canUseSymbol = typeof Symbol === \"function\" && typeof Symbol.for === \"function\";\nexport var canUseAsyncIteratorSymbol = canUseSymbol && Symbol.asyncIterator;\nexport var canUseDOM = typeof maybe(function () { return window.document.createElement; }) === \"function\";\nvar usingJSDOM = \n// Following advice found in this comment from @domenic (maintainer of jsdom):\n// https://github.com/jsdom/jsdom/issues/1537#issuecomment-229405327\n//\n// Since we control the version of Jest and jsdom used when running Apollo\n// Client tests, and that version is recent enought to include \" jsdom/x.y.z\"\n// at the end of the user agent string, I believe this case is all we need to\n// check. Testing for \"Node.js\" was recommended for backwards compatibility\n// with older version of jsdom, but we don't have that problem.\nmaybe(function () { return navigator.userAgent.indexOf(\"jsdom\") >= 0; }) || false;\n// Our tests should all continue to pass if we remove this !usingJSDOM\n// condition, thereby allowing useLayoutEffect when using jsdom. Unfortunately,\n// if we allow useLayoutEffect, then useSyncExternalStore generates many\n// warnings about useLayoutEffect doing nothing on the server. While these\n// warnings are harmless, this !usingJSDOM condition seems to be the best way to\n// prevent them (i.e. skipping useLayoutEffect when using jsdom).\nexport var canUseLayoutEffect = (canUseDOM || isReactNative) && !usingJSDOM;\n//# sourceMappingURL=canUse.js.map","export function isNonNullObject(obj) {\n    return obj !== null && typeof obj === \"object\";\n}\nexport function isPlainObject(obj) {\n    return (obj !== null &&\n        typeof obj === \"object\" &&\n        (Object.getPrototypeOf(obj) === Object.prototype ||\n            Object.getPrototypeOf(obj) === null));\n}\n//# sourceMappingURL=objects.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { invariant, newInvariantError } from \"../globals/index.js\";\nimport { BREAK, visit } from \"graphql\";\n/**\n * Returns a query document which adds a single query operation that only\n * spreads the target fragment inside of it.\n *\n * So for example a document of:\n *\n * ```graphql\n * fragment foo on Foo { a b c }\n * ```\n *\n * Turns into:\n *\n * ```graphql\n * { ...foo }\n *\n * fragment foo on Foo { a b c }\n * ```\n *\n * The target fragment will either be the only fragment in the document, or a\n * fragment specified by the provided `fragmentName`. If there is more than one\n * fragment, but a `fragmentName` was not defined then an error will be thrown.\n */\nexport function getFragmentQueryDocument(document, fragmentName) {\n    var actualFragmentName = fragmentName;\n    // Build an array of all our fragment definitions that will be used for\n    // validations. We also do some validations on the other definitions in the\n    // document while building this list.\n    var fragments = [];\n    document.definitions.forEach(function (definition) {\n        // Throw an error if we encounter an operation definition because we will\n        // define our own operation definition later on.\n        if (definition.kind === \"OperationDefinition\") {\n            throw newInvariantError(\n                112,\n                definition.operation,\n                definition.name ? \" named '\".concat(definition.name.value, \"'\") : \"\"\n            );\n        }\n        // Add our definition to the fragments array if it is a fragment\n        // definition.\n        if (definition.kind === \"FragmentDefinition\") {\n            fragments.push(definition);\n        }\n    });\n    // If the user did not give us a fragment name then let us try to get a\n    // name from a single fragment in the definition.\n    if (typeof actualFragmentName === \"undefined\") {\n        invariant(fragments.length === 1, 113, fragments.length);\n        actualFragmentName = fragments[0].name.value;\n    }\n    // Generate a query document with an operation that simply spreads the\n    // fragment inside of it.\n    var query = __assign(__assign({}, document), { definitions: __spreadArray([\n            {\n                kind: \"OperationDefinition\",\n                // OperationTypeNode is an enum\n                operation: \"query\",\n                selectionSet: {\n                    kind: \"SelectionSet\",\n                    selections: [\n                        {\n                            kind: \"FragmentSpread\",\n                            name: {\n                                kind: \"Name\",\n                                value: actualFragmentName,\n                            },\n                        },\n                    ],\n                },\n            }\n        ], document.definitions, true) });\n    return query;\n}\n// Utility function that takes a list of fragment definitions and makes a hash out of them\n// that maps the name of the fragment to the fragment definition.\nexport function createFragmentMap(fragments) {\n    if (fragments === void 0) { fragments = []; }\n    var symTable = {};\n    fragments.forEach(function (fragment) {\n        symTable[fragment.name.value] = fragment;\n    });\n    return symTable;\n}\nexport function getFragmentFromSelection(selection, fragmentMap) {\n    switch (selection.kind) {\n        case \"InlineFragment\":\n            return selection;\n        case \"FragmentSpread\": {\n            var fragmentName = selection.name.value;\n            if (typeof fragmentMap === \"function\") {\n                return fragmentMap(fragmentName);\n            }\n            var fragment = fragmentMap && fragmentMap[fragmentName];\n            invariant(fragment, 114, fragmentName);\n            return fragment || null;\n        }\n        default:\n            return null;\n    }\n}\nexport function isFullyUnmaskedOperation(document) {\n    var isUnmasked = true;\n    visit(document, {\n        FragmentSpread: function (node) {\n            isUnmasked =\n                !!node.directives &&\n                    node.directives.some(function (directive) { return directive.name.value === \"unmask\"; });\n            if (!isUnmasked) {\n                return BREAK;\n            }\n        },\n    });\n    return isUnmasked;\n}\n//# sourceMappingURL=fragments.js.map","function defaultDispose() { }\nexport class StrongCache {\n    constructor(max = Infinity, dispose = defaultDispose) {\n        this.max = max;\n        this.dispose = dispose;\n        this.map = new Map();\n        this.newest = null;\n        this.oldest = null;\n    }\n    has(key) {\n        return this.map.has(key);\n    }\n    get(key) {\n        const node = this.getNode(key);\n        return node && node.value;\n    }\n    get size() {\n        return this.map.size;\n    }\n    getNode(key) {\n        const node = this.map.get(key);\n        if (node && node !== this.newest) {\n            const { older, newer } = node;\n            if (newer) {\n                newer.older = older;\n            }\n            if (older) {\n                older.newer = newer;\n            }\n            node.older = this.newest;\n            node.older.newer = node;\n            node.newer = null;\n            this.newest = node;\n            if (node === this.oldest) {\n                this.oldest = newer;\n            }\n        }\n        return node;\n    }\n    set(key, value) {\n        let node = this.getNode(key);\n        if (node) {\n            return node.value = value;\n        }\n        node = {\n            key,\n            value,\n            newer: null,\n            older: this.newest\n        };\n        if (this.newest) {\n            this.newest.newer = node;\n        }\n        this.newest = node;\n        this.oldest = this.oldest || node;\n        this.map.set(key, node);\n        return node.value;\n    }\n    clean() {\n        while (this.oldest && this.map.size > this.max) {\n            this.delete(this.oldest.key);\n        }\n    }\n    delete(key) {\n        const node = this.map.get(key);\n        if (node) {\n            if (node === this.newest) {\n                this.newest = node.older;\n            }\n            if (node === this.oldest) {\n                this.oldest = node.newer;\n            }\n            if (node.newer) {\n                node.newer.older = node.older;\n            }\n            if (node.older) {\n                node.older.newer = node.newer;\n            }\n            this.map.delete(key);\n            this.dispose(node.value, key);\n            return true;\n        }\n        return false;\n    }\n}\n//# sourceMappingURL=strong.js.map","function noop() { }\nconst defaultDispose = noop;\nconst _WeakRef = typeof WeakRef !== \"undefined\"\n    ? WeakRef\n    : function (value) {\n        return { deref: () => value };\n    };\nconst _WeakMap = typeof WeakMap !== \"undefined\" ? WeakMap : Map;\nconst _FinalizationRegistry = typeof FinalizationRegistry !== \"undefined\"\n    ? FinalizationRegistry\n    : function () {\n        return {\n            register: noop,\n            unregister: noop,\n        };\n    };\nconst finalizationBatchSize = 10024;\nexport class WeakCache {\n    constructor(max = Infinity, dispose = defaultDispose) {\n        this.max = max;\n        this.dispose = dispose;\n        this.map = new _WeakMap();\n        this.newest = null;\n        this.oldest = null;\n        this.unfinalizedNodes = new Set();\n        this.finalizationScheduled = false;\n        this.size = 0;\n        this.finalize = () => {\n            const iterator = this.unfinalizedNodes.values();\n            for (let i = 0; i < finalizationBatchSize; i++) {\n                const node = iterator.next().value;\n                if (!node)\n                    break;\n                this.unfinalizedNodes.delete(node);\n                const key = node.key;\n                delete node.key;\n                node.keyRef = new _WeakRef(key);\n                this.registry.register(key, node, node);\n            }\n            if (this.unfinalizedNodes.size > 0) {\n                queueMicrotask(this.finalize);\n            }\n            else {\n                this.finalizationScheduled = false;\n            }\n        };\n        this.registry = new _FinalizationRegistry(this.deleteNode.bind(this));\n    }\n    has(key) {\n        return this.map.has(key);\n    }\n    get(key) {\n        const node = this.getNode(key);\n        return node && node.value;\n    }\n    getNode(key) {\n        const node = this.map.get(key);\n        if (node && node !== this.newest) {\n            const { older, newer } = node;\n            if (newer) {\n                newer.older = older;\n            }\n            if (older) {\n                older.newer = newer;\n            }\n            node.older = this.newest;\n            node.older.newer = node;\n            node.newer = null;\n            this.newest = node;\n            if (node === this.oldest) {\n                this.oldest = newer;\n            }\n        }\n        return node;\n    }\n    set(key, value) {\n        let node = this.getNode(key);\n        if (node) {\n            return (node.value = value);\n        }\n        node = {\n            key,\n            value,\n            newer: null,\n            older: this.newest,\n        };\n        if (this.newest) {\n            this.newest.newer = node;\n        }\n        this.newest = node;\n        this.oldest = this.oldest || node;\n        this.scheduleFinalization(node);\n        this.map.set(key, node);\n        this.size++;\n        return node.value;\n    }\n    clean() {\n        while (this.oldest && this.size > this.max) {\n            this.deleteNode(this.oldest);\n        }\n    }\n    deleteNode(node) {\n        if (node === this.newest) {\n            this.newest = node.older;\n        }\n        if (node === this.oldest) {\n            this.oldest = node.newer;\n        }\n        if (node.newer) {\n            node.newer.older = node.older;\n        }\n        if (node.older) {\n            node.older.newer = node.newer;\n        }\n        this.size--;\n        const key = node.key || (node.keyRef && node.keyRef.deref());\n        this.dispose(node.value, key);\n        if (!node.keyRef) {\n            this.unfinalizedNodes.delete(node);\n        }\n        else {\n            this.registry.unregister(node);\n        }\n        if (key)\n            this.map.delete(key);\n    }\n    delete(key) {\n        const node = this.map.get(key);\n        if (node) {\n            this.deleteNode(node);\n            return true;\n        }\n        return false;\n    }\n    scheduleFinalization(node) {\n        this.unfinalizedNodes.add(node);\n        if (!this.finalizationScheduled) {\n            this.finalizationScheduled = true;\n            queueMicrotask(this.finalize);\n        }\n    }\n}\n//# sourceMappingURL=weak.js.map","import { WeakCache, StrongCache } from \"@wry/caches\";\nvar scheduledCleanup = new WeakSet();\nfunction schedule(cache) {\n    if (cache.size <= (cache.max || -1)) {\n        return;\n    }\n    if (!scheduledCleanup.has(cache)) {\n        scheduledCleanup.add(cache);\n        setTimeout(function () {\n            cache.clean();\n            scheduledCleanup.delete(cache);\n        }, 100);\n    }\n}\n/**\n * @internal\n * A version of WeakCache that will auto-schedule a cleanup of the cache when\n * a new item is added and the cache reached maximum size.\n * Throttled to once per 100ms.\n *\n * @privateRemarks\n * Should be used throughout the rest of the codebase instead of WeakCache,\n * with the notable exception of usage in `wrap` from `optimism` - that one\n * already handles cleanup and should remain a `WeakCache`.\n */\nexport var AutoCleanedWeakCache = function (max, dispose) {\n    /*\n    Some builds of `WeakCache` are function prototypes, some are classes.\n    This library still builds with an ES5 target, so we can't extend the\n    real classes.\n    Instead, we have to use this workaround until we switch to a newer build\n    target.\n    */\n    var cache = new WeakCache(max, dispose);\n    cache.set = function (key, value) {\n        var ret = WeakCache.prototype.set.call(this, key, value);\n        schedule(this);\n        return ret;\n    };\n    return cache;\n};\n/**\n * @internal\n * A version of StrongCache that will auto-schedule a cleanup of the cache when\n * a new item is added and the cache reached maximum size.\n * Throttled to once per 100ms.\n *\n * @privateRemarks\n * Should be used throughout the rest of the codebase instead of StrongCache,\n * with the notable exception of usage in `wrap` from `optimism` - that one\n * already handles cleanup and should remain a `StrongCache`.\n */\nexport var AutoCleanedStrongCache = function (max, dispose) {\n    /*\n    Some builds of `StrongCache` are function prototypes, some are classes.\n    This library still builds with an ES5 target, so we can't extend the\n    real classes.\n    Instead, we have to use this workaround until we switch to a newer build\n    target.\n    */\n    var cache = new StrongCache(max, dispose);\n    cache.set = function (key, value) {\n        var ret = StrongCache.prototype.set.call(this, key, value);\n        schedule(this);\n        return ret;\n    };\n    return cache;\n};\n//# sourceMappingURL=caches.js.map","import { __assign } from \"tslib\";\nimport { global } from \"../globals/index.js\";\nvar cacheSizeSymbol = Symbol.for(\"apollo.cacheSize\");\n/**\n *\n * The global cache size configuration for Apollo Client.\n *\n * @remarks\n *\n * You can directly modify this object, but any modification will\n * only have an effect on caches that are created after the modification.\n *\n * So for global caches, such as `parser`, `canonicalStringify` and `print`,\n * you might need to call `.reset` on them, which will essentially re-create them.\n *\n * Alternatively, you can set `globalThis[Symbol.for(\"apollo.cacheSize\")]` before\n * you load the Apollo Client package:\n *\n * @example\n * ```ts\n * globalThis[Symbol.for(\"apollo.cacheSize\")] = {\n *   parser: 100\n * } satisfies Partial<CacheSizes> // the `satisfies` is optional if using TypeScript\n * ```\n */\nexport var cacheSizes = __assign({}, global[cacheSizeSymbol]);\n//# sourceMappingURL=sizes.js.map","import { AutoCleanedStrongCache, cacheSizes, } from \"../../utilities/caching/index.js\";\nimport { registerGlobalCache } from \"../caching/getMemoryInternals.js\";\n/**\n * Like JSON.stringify, but with object keys always sorted in the same order.\n *\n * To achieve performant sorting, this function uses a Map from JSON-serialized\n * arrays of keys (in any order) to sorted arrays of the same keys, with a\n * single sorted array reference shared by all permutations of the keys.\n *\n * As a drawback, this function will add a little bit more memory for every\n * object encountered that has different (more, less, a different order of) keys\n * than in the past.\n *\n * In a typical application, this extra memory usage should not play a\n * significant role, as `canonicalStringify` will be called for only a limited\n * number of object shapes, and the cache will not grow beyond a certain point.\n * But in some edge cases, this could be a problem, so we provide\n * canonicalStringify.reset() as a way of clearing the cache.\n * */\nexport var canonicalStringify = Object.assign(function canonicalStringify(value) {\n    return JSON.stringify(value, stableObjectReplacer);\n}, {\n    reset: function () {\n        // Clearing the sortingMap will reclaim all cached memory, without\n        // affecting the logical results of canonicalStringify, but potentially\n        // sacrificing performance until the cache is refilled.\n        sortingMap = new AutoCleanedStrongCache(cacheSizes.canonicalStringify || 1000 /* defaultCacheSizes.canonicalStringify */);\n    },\n});\nif (globalThis.__DEV__ !== false) {\n    registerGlobalCache(\"canonicalStringify\", function () { return sortingMap.size; });\n}\n// Values are JSON-serialized arrays of object keys (in any order), and values\n// are sorted arrays of the same keys.\nvar sortingMap;\ncanonicalStringify.reset();\n// The JSON.stringify function takes an optional second argument called a\n// replacer function. This function is called for each key-value pair in the\n// object being stringified, and its return value is used instead of the\n// original value. If the replacer function returns a new value, that value is\n// stringified as JSON instead of the original value of the property.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#the_replacer_parameter\nfunction stableObjectReplacer(key, value) {\n    if (value && typeof value === \"object\") {\n        var proto = Object.getPrototypeOf(value);\n        // We don't want to mess with objects that are not \"plain\" objects, which\n        // means their prototype is either Object.prototype or null. This check also\n        // prevents needlessly rearranging the indices of arrays.\n        if (proto === Object.prototype || proto === null) {\n            var keys = Object.keys(value);\n            // If keys is already sorted, let JSON.stringify serialize the original\n            // value instead of creating a new object with keys in the same order.\n            if (keys.every(everyKeyInOrder))\n                return value;\n            var unsortedKey = JSON.stringify(keys);\n            var sortedKeys = sortingMap.get(unsortedKey);\n            if (!sortedKeys) {\n                keys.sort();\n                var sortedKey = JSON.stringify(keys);\n                // Checking for sortedKey in the sortingMap allows us to share the same\n                // sorted array reference for all permutations of the same set of keys.\n                sortedKeys = sortingMap.get(sortedKey) || keys;\n                sortingMap.set(unsortedKey, sortedKeys);\n                sortingMap.set(sortedKey, sortedKeys);\n            }\n            var sortedObject_1 = Object.create(proto);\n            // Reassigning the keys in sorted order will cause JSON.stringify to\n            // serialize them in sorted order.\n            sortedKeys.forEach(function (key) {\n                sortedObject_1[key] = value[key];\n            });\n            return sortedObject_1;\n        }\n    }\n    return value;\n}\n// Since everything that happens in stableObjectReplacer benefits from being as\n// efficient as possible, we use a static function as the callback for\n// keys.every in order to test if the provided keys are already sorted without\n// allocating extra memory for a callback.\nfunction everyKeyInOrder(key, i, keys) {\n    return i === 0 || keys[i - 1] <= key;\n}\n//# sourceMappingURL=canonicalStringify.js.map","import { newInvariantError } from \"../globals/index.js\";\nimport { isNonNullObject } from \"../common/objects.js\";\nimport { getFragmentFromSelection } from \"./fragments.js\";\nimport { canonicalStringify } from \"../common/canonicalStringify.js\";\nexport function makeReference(id) {\n    return { __ref: String(id) };\n}\nexport function isReference(obj) {\n    return Boolean(obj && typeof obj === \"object\" && typeof obj.__ref === \"string\");\n}\nexport function isDocumentNode(value) {\n    return (isNonNullObject(value) &&\n        value.kind === \"Document\" &&\n        Array.isArray(value.definitions));\n}\nfunction isStringValue(value) {\n    return value.kind === \"StringValue\";\n}\nfunction isBooleanValue(value) {\n    return value.kind === \"BooleanValue\";\n}\nfunction isIntValue(value) {\n    return value.kind === \"IntValue\";\n}\nfunction isFloatValue(value) {\n    return value.kind === \"FloatValue\";\n}\nfunction isVariable(value) {\n    return value.kind === \"Variable\";\n}\nfunction isObjectValue(value) {\n    return value.kind === \"ObjectValue\";\n}\nfunction isListValue(value) {\n    return value.kind === \"ListValue\";\n}\nfunction isEnumValue(value) {\n    return value.kind === \"EnumValue\";\n}\nfunction isNullValue(value) {\n    return value.kind === \"NullValue\";\n}\nexport function valueToObjectRepresentation(argObj, name, value, variables) {\n    if (isIntValue(value) || isFloatValue(value)) {\n        argObj[name.value] = Number(value.value);\n    }\n    else if (isBooleanValue(value) || isStringValue(value)) {\n        argObj[name.value] = value.value;\n    }\n    else if (isObjectValue(value)) {\n        var nestedArgObj_1 = {};\n        value.fields.map(function (obj) {\n            return valueToObjectRepresentation(nestedArgObj_1, obj.name, obj.value, variables);\n        });\n        argObj[name.value] = nestedArgObj_1;\n    }\n    else if (isVariable(value)) {\n        var variableValue = (variables || {})[value.name.value];\n        argObj[name.value] = variableValue;\n    }\n    else if (isListValue(value)) {\n        argObj[name.value] = value.values.map(function (listValue) {\n            var nestedArgArrayObj = {};\n            valueToObjectRepresentation(nestedArgArrayObj, name, listValue, variables);\n            return nestedArgArrayObj[name.value];\n        });\n    }\n    else if (isEnumValue(value)) {\n        argObj[name.value] = value.value;\n    }\n    else if (isNullValue(value)) {\n        argObj[name.value] = null;\n    }\n    else {\n        throw newInvariantError(123, name.value, value.kind);\n    }\n}\nexport function storeKeyNameFromField(field, variables) {\n    var directivesObj = null;\n    if (field.directives) {\n        directivesObj = {};\n        field.directives.forEach(function (directive) {\n            directivesObj[directive.name.value] = {};\n            if (directive.arguments) {\n                directive.arguments.forEach(function (_a) {\n                    var name = _a.name, value = _a.value;\n                    return valueToObjectRepresentation(directivesObj[directive.name.value], name, value, variables);\n                });\n            }\n        });\n    }\n    var argObj = null;\n    if (field.arguments && field.arguments.length) {\n        argObj = {};\n        field.arguments.forEach(function (_a) {\n            var name = _a.name, value = _a.value;\n            return valueToObjectRepresentation(argObj, name, value, variables);\n        });\n    }\n    return getStoreKeyName(field.name.value, argObj, directivesObj);\n}\nvar KNOWN_DIRECTIVES = [\n    \"connection\",\n    \"include\",\n    \"skip\",\n    \"client\",\n    \"rest\",\n    \"export\",\n    \"nonreactive\",\n];\n// Default stable JSON.stringify implementation used by getStoreKeyName. Can be\n// updated/replaced with something better by calling\n// getStoreKeyName.setStringify(newStringifyFunction).\nvar storeKeyNameStringify = canonicalStringify;\nexport var getStoreKeyName = Object.assign(function (fieldName, args, directives) {\n    if (args &&\n        directives &&\n        directives[\"connection\"] &&\n        directives[\"connection\"][\"key\"]) {\n        if (directives[\"connection\"][\"filter\"] &&\n            directives[\"connection\"][\"filter\"].length > 0) {\n            var filterKeys = directives[\"connection\"][\"filter\"] ?\n                directives[\"connection\"][\"filter\"]\n                : [];\n            filterKeys.sort();\n            var filteredArgs_1 = {};\n            filterKeys.forEach(function (key) {\n                filteredArgs_1[key] = args[key];\n            });\n            return \"\".concat(directives[\"connection\"][\"key\"], \"(\").concat(storeKeyNameStringify(filteredArgs_1), \")\");\n        }\n        else {\n            return directives[\"connection\"][\"key\"];\n        }\n    }\n    var completeFieldName = fieldName;\n    if (args) {\n        // We can't use `JSON.stringify` here since it's non-deterministic,\n        // and can lead to different store key names being created even though\n        // the `args` object used during creation has the same properties/values.\n        var stringifiedArgs = storeKeyNameStringify(args);\n        completeFieldName += \"(\".concat(stringifiedArgs, \")\");\n    }\n    if (directives) {\n        Object.keys(directives).forEach(function (key) {\n            if (KNOWN_DIRECTIVES.indexOf(key) !== -1)\n                return;\n            if (directives[key] && Object.keys(directives[key]).length) {\n                completeFieldName += \"@\".concat(key, \"(\").concat(storeKeyNameStringify(directives[key]), \")\");\n            }\n            else {\n                completeFieldName += \"@\".concat(key);\n            }\n        });\n    }\n    return completeFieldName;\n}, {\n    setStringify: function (s) {\n        var previous = storeKeyNameStringify;\n        storeKeyNameStringify = s;\n        return previous;\n    },\n});\nexport function argumentsObjectFromField(field, variables) {\n    if (field.arguments && field.arguments.length) {\n        var argObj_1 = {};\n        field.arguments.forEach(function (_a) {\n            var name = _a.name, value = _a.value;\n            return valueToObjectRepresentation(argObj_1, name, value, variables);\n        });\n        return argObj_1;\n    }\n    return null;\n}\nexport function resultKeyNameFromField(field) {\n    return field.alias ? field.alias.value : field.name.value;\n}\nexport function getTypenameFromResult(result, selectionSet, fragmentMap) {\n    var fragments;\n    for (var _i = 0, _a = selectionSet.selections; _i < _a.length; _i++) {\n        var selection = _a[_i];\n        if (isField(selection)) {\n            if (selection.name.value === \"__typename\") {\n                return result[resultKeyNameFromField(selection)];\n            }\n        }\n        else if (fragments) {\n            fragments.push(selection);\n        }\n        else {\n            fragments = [selection];\n        }\n    }\n    if (typeof result.__typename === \"string\") {\n        return result.__typename;\n    }\n    if (fragments) {\n        for (var _b = 0, fragments_1 = fragments; _b < fragments_1.length; _b++) {\n            var selection = fragments_1[_b];\n            var typename = getTypenameFromResult(result, getFragmentFromSelection(selection, fragmentMap).selectionSet, fragmentMap);\n            if (typeof typename === \"string\") {\n                return typename;\n            }\n        }\n    }\n}\nexport function isField(selection) {\n    return selection.kind === \"Field\";\n}\nexport function isInlineFragment(selection) {\n    return selection.kind === \"InlineFragment\";\n}\n//# sourceMappingURL=storeUtils.js.map","import { invariant, newInvariantError } from \"../globals/index.js\";\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc) {\n    invariant(doc && doc.kind === \"Document\", 115);\n    var operations = doc.definitions\n        .filter(function (d) { return d.kind !== \"FragmentDefinition\"; })\n        .map(function (definition) {\n        if (definition.kind !== \"OperationDefinition\") {\n            throw newInvariantError(116, definition.kind);\n        }\n        return definition;\n    });\n    invariant(operations.length <= 1, 117, operations.length);\n    return doc;\n}\nexport function getOperationDefinition(doc) {\n    checkDocument(doc);\n    return doc.definitions.filter(function (definition) {\n        return definition.kind === \"OperationDefinition\";\n    })[0];\n}\nexport function getOperationName(doc) {\n    return (doc.definitions\n        .filter(function (definition) {\n        return definition.kind === \"OperationDefinition\" && !!definition.name;\n    })\n        .map(function (x) { return x.name.value; })[0] || null);\n}\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(doc) {\n    return doc.definitions.filter(function (definition) {\n        return definition.kind === \"FragmentDefinition\";\n    });\n}\nexport function getQueryDefinition(doc) {\n    var queryDef = getOperationDefinition(doc);\n    invariant(queryDef && queryDef.operation === \"query\", 118);\n    return queryDef;\n}\nexport function getFragmentDefinition(doc) {\n    invariant(doc.kind === \"Document\", 119);\n    invariant(doc.definitions.length <= 1, 120);\n    var fragmentDef = doc.definitions[0];\n    invariant(fragmentDef.kind === \"FragmentDefinition\", 121);\n    return fragmentDef;\n}\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(queryDoc) {\n    checkDocument(queryDoc);\n    var fragmentDefinition;\n    for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {\n        var definition = _a[_i];\n        if (definition.kind === \"OperationDefinition\") {\n            var operation = definition.operation;\n            if (operation === \"query\" ||\n                operation === \"mutation\" ||\n                operation === \"subscription\") {\n                return definition;\n            }\n        }\n        if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n            // we do this because we want to allow multiple fragment definitions\n            // to precede an operation definition.\n            fragmentDefinition = definition;\n        }\n    }\n    if (fragmentDefinition) {\n        return fragmentDefinition;\n    }\n    throw newInvariantError(122);\n}\nexport function getDefaultValues(definition) {\n    var defaultValues = Object.create(null);\n    var defs = definition && definition.variableDefinitions;\n    if (defs && defs.length) {\n        defs.forEach(function (def) {\n            if (def.defaultValue) {\n                valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);\n            }\n        });\n    }\n    return defaultValues;\n}\n//# sourceMappingURL=getFromAST.js.map","// This currentContext variable will only be used if the makeSlotClass\n// function is called, which happens only if this is the first copy of the\n// @wry/context package to be imported.\nlet currentContext = null;\n// This unique internal object is used to denote the absence of a value\n// for a given Slot, and is never exposed to outside code.\nconst MISSING_VALUE = {};\nlet idCounter = 1;\n// Although we can't do anything about the cost of duplicated code from\n// accidentally bundling multiple copies of the @wry/context package, we can\n// avoid creating the Slot class more than once using makeSlotClass.\nconst makeSlotClass = () => class Slot {\n    constructor() {\n        // If you have a Slot object, you can find out its slot.id, but you cannot\n        // guess the slot.id of a Slot you don't have access to, thanks to the\n        // randomized suffix.\n        this.id = [\n            \"slot\",\n            idCounter++,\n            Date.now(),\n            Math.random().toString(36).slice(2),\n        ].join(\":\");\n    }\n    hasValue() {\n        for (let context = currentContext; context; context = context.parent) {\n            // We use the Slot object iself as a key to its value, which means the\n            // value cannot be obtained without a reference to the Slot object.\n            if (this.id in context.slots) {\n                const value = context.slots[this.id];\n                if (value === MISSING_VALUE)\n                    break;\n                if (context !== currentContext) {\n                    // Cache the value in currentContext.slots so the next lookup will\n                    // be faster. This caching is safe because the tree of contexts and\n                    // the values of the slots are logically immutable.\n                    currentContext.slots[this.id] = value;\n                }\n                return true;\n            }\n        }\n        if (currentContext) {\n            // If a value was not found for this Slot, it's never going to be found\n            // no matter how many times we look it up, so we might as well cache\n            // the absence of the value, too.\n            currentContext.slots[this.id] = MISSING_VALUE;\n        }\n        return false;\n    }\n    getValue() {\n        if (this.hasValue()) {\n            return currentContext.slots[this.id];\n        }\n    }\n    withValue(value, callback, \n    // Given the prevalence of arrow functions, specifying arguments is likely\n    // to be much more common than specifying `this`, hence this ordering:\n    args, thisArg) {\n        const slots = {\n            __proto__: null,\n            [this.id]: value,\n        };\n        const parent = currentContext;\n        currentContext = { parent, slots };\n        try {\n            // Function.prototype.apply allows the arguments array argument to be\n            // omitted or undefined, so args! is fine here.\n            return callback.apply(thisArg, args);\n        }\n        finally {\n            currentContext = parent;\n        }\n    }\n    // Capture the current context and wrap a callback function so that it\n    // reestablishes the captured context when called.\n    static bind(callback) {\n        const context = currentContext;\n        return function () {\n            const saved = currentContext;\n            try {\n                currentContext = context;\n                return callback.apply(this, arguments);\n            }\n            finally {\n                currentContext = saved;\n            }\n        };\n    }\n    // Immediately run a callback function without any captured context.\n    static noContext(callback, \n    // Given the prevalence of arrow functions, specifying arguments is likely\n    // to be much more common than specifying `this`, hence this ordering:\n    args, thisArg) {\n        if (currentContext) {\n            const saved = currentContext;\n            try {\n                currentContext = null;\n                // Function.prototype.apply allows the arguments array argument to be\n                // omitted or undefined, so args! is fine here.\n                return callback.apply(thisArg, args);\n            }\n            finally {\n                currentContext = saved;\n            }\n        }\n        else {\n            return callback.apply(thisArg, args);\n        }\n    }\n};\nfunction maybe(fn) {\n    try {\n        return fn();\n    }\n    catch (ignored) { }\n}\n// We store a single global implementation of the Slot class as a permanent\n// non-enumerable property of the globalThis object. This obfuscation does\n// nothing to prevent access to the Slot class, but at least it ensures the\n// implementation (i.e. currentContext) cannot be tampered with, and all copies\n// of the @wry/context package (hopefully just one) will share the same Slot\n// implementation. Since the first copy of the @wry/context package to be\n// imported wins, this technique imposes a steep cost for any future breaking\n// changes to the Slot class.\nconst globalKey = \"@wry/context:Slot\";\nconst host = \n// Prefer globalThis when available.\n// https://github.com/benjamn/wryware/issues/347\nmaybe(() => globalThis) ||\n    // Fall back to global, which works in Node.js and may be converted by some\n    // bundlers to the appropriate identifier (window, self, ...) depending on the\n    // bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224\n    maybe(() => global) ||\n    // Otherwise, use a dummy host that's local to this module. We used to fall\n    // back to using the Array constructor as a namespace, but that was flagged in\n    // https://github.com/benjamn/wryware/issues/347, and can be avoided.\n    Object.create(null);\n// Whichever globalHost we're using, make TypeScript happy about the additional\n// globalKey property.\nconst globalHost = host;\nexport const Slot = globalHost[globalKey] ||\n    // Earlier versions of this package stored the globalKey property on the Array\n    // constructor, so we check there as well, to prevent Slot class duplication.\n    Array[globalKey] ||\n    (function (Slot) {\n        try {\n            Object.defineProperty(globalHost, globalKey, {\n                value: Slot,\n                enumerable: false,\n                writable: false,\n                // When it was possible for globalHost to be the Array constructor (a\n                // legacy Slot dedup strategy), it was important for the property to be\n                // configurable:true so it could be deleted. That does not seem to be as\n                // important when globalHost is the global object, but I don't want to\n                // cause similar problems again, and configurable:true seems safest.\n                // https://github.com/endojs/endo/issues/576#issuecomment-1178274008\n                configurable: true\n            });\n        }\n        finally {\n            return Slot;\n        }\n    })(makeSlotClass());\n//# sourceMappingURL=slot.js.map","import { Slot } from \"./slot.js\";\nexport { Slot };\nexport const { bind, noContext } = Slot;\n// Like global.setTimeout, except the callback runs with captured context.\nexport { setTimeoutWithContext as setTimeout };\nfunction setTimeoutWithContext(callback, delay) {\n    return setTimeout(bind(callback), delay);\n}\n// Turn any generator function into an async function (using yield instead\n// of await), with context automatically preserved across yields.\nexport function asyncFromGen(genFn) {\n    return function () {\n        const gen = genFn.apply(this, arguments);\n        const boundNext = bind(gen.next);\n        const boundThrow = bind(gen.throw);\n        return new Promise((resolve, reject) => {\n            function invoke(method, argument) {\n                try {\n                    var result = method.call(gen, argument);\n                }\n                catch (error) {\n                    return reject(error);\n                }\n                const next = result.done ? resolve : invokeNext;\n                if (isPromiseLike(result.value)) {\n                    result.value.then(next, result.done ? reject : invokeThrow);\n                }\n                else {\n                    next(result.value);\n                }\n            }\n            const invokeNext = (value) => invoke(boundNext, value);\n            const invokeThrow = (error) => invoke(boundThrow, error);\n            invokeNext();\n        });\n    };\n}\nfunction isPromiseLike(value) {\n    return value && typeof value.then === \"function\";\n}\n// If you use the fibers npm package to implement coroutines in Node.js,\n// you should call this function at least once to ensure context management\n// remains coherent across any yields.\nconst wrappedFibers = [];\nexport function wrapYieldingFiberMethods(Fiber) {\n    // There can be only one implementation of Fiber per process, so this array\n    // should never grow longer than one element.\n    if (wrappedFibers.indexOf(Fiber) < 0) {\n        const wrap = (obj, method) => {\n            const fn = obj[method];\n            obj[method] = function () {\n                return noContext(fn, arguments, this);\n            };\n        };\n        // These methods can yield, according to\n        // https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100\n        wrap(Fiber, \"yield\");\n        wrap(Fiber.prototype, \"run\");\n        wrap(Fiber.prototype, \"throwInto\");\n        wrappedFibers.push(Fiber);\n    }\n    return Fiber;\n}\n//# sourceMappingURL=index.js.map","import { Slot } from \"@wry/context\";\nexport const parentEntrySlot = new Slot();\nexport function nonReactive(fn) {\n    return parentEntrySlot.withValue(void 0, fn);\n}\nexport { Slot };\nexport { bind as bindContext, noContext, setTimeout, asyncFromGen, } from \"@wry/context\";\n//# sourceMappingURL=context.js.map","export const { hasOwnProperty, } = Object.prototype;\nexport const arrayFromSet = Array.from ||\n    function (set) {\n        const array = [];\n        set.forEach(item => array.push(item));\n        return array;\n    };\nexport function maybeUnsubscribe(entryOrDep) {\n    const { unsubscribe } = entryOrDep;\n    if (typeof unsubscribe === \"function\") {\n        entryOrDep.unsubscribe = void 0;\n        unsubscribe();\n    }\n}\n//# sourceMappingURL=helpers.js.map","import { parentEntrySlot } from \"./context.js\";\nimport { maybeUnsubscribe, arrayFromSet } from \"./helpers.js\";\nconst emptySetPool = [];\nconst POOL_TARGET_SIZE = 100;\n// Since this package might be used browsers, we should avoid using the\n// Node built-in assert module.\nfunction assert(condition, optionalMessage) {\n    if (!condition) {\n        throw new Error(optionalMessage || \"assertion failure\");\n    }\n}\nfunction valueIs(a, b) {\n    const len = a.length;\n    return (\n    // Unknown values are not equal to each other.\n    len > 0 &&\n        // Both values must be ordinary (or both exceptional) to be equal.\n        len === b.length &&\n        // The underlying value or exception must be the same.\n        a[len - 1] === b[len - 1]);\n}\nfunction valueGet(value) {\n    switch (value.length) {\n        case 0: throw new Error(\"unknown value\");\n        case 1: return value[0];\n        case 2: throw value[1];\n    }\n}\nfunction valueCopy(value) {\n    return value.slice(0);\n}\nexport class Entry {\n    constructor(fn) {\n        this.fn = fn;\n        this.parents = new Set();\n        this.childValues = new Map();\n        // When this Entry has children that are dirty, this property becomes\n        // a Set containing other Entry objects, borrowed from emptySetPool.\n        // When the set becomes empty, it gets recycled back to emptySetPool.\n        this.dirtyChildren = null;\n        this.dirty = true;\n        this.recomputing = false;\n        this.value = [];\n        this.deps = null;\n        ++Entry.count;\n    }\n    peek() {\n        if (this.value.length === 1 && !mightBeDirty(this)) {\n            rememberParent(this);\n            return this.value[0];\n        }\n    }\n    // This is the most important method of the Entry API, because it\n    // determines whether the cached this.value can be returned immediately,\n    // or must be recomputed. The overall performance of the caching system\n    // depends on the truth of the following observations: (1) this.dirty is\n    // usually false, (2) this.dirtyChildren is usually null/empty, and thus\n    // (3) valueGet(this.value) is usually returned without recomputation.\n    recompute(args) {\n        assert(!this.recomputing, \"already recomputing\");\n        rememberParent(this);\n        return mightBeDirty(this)\n            ? reallyRecompute(this, args)\n            : valueGet(this.value);\n    }\n    setDirty() {\n        if (this.dirty)\n            return;\n        this.dirty = true;\n        reportDirty(this);\n        // We can go ahead and unsubscribe here, since any further dirty\n        // notifications we receive will be redundant, and unsubscribing may\n        // free up some resources, e.g. file watchers.\n        maybeUnsubscribe(this);\n    }\n    dispose() {\n        this.setDirty();\n        // Sever any dependency relationships with our own children, so those\n        // children don't retain this parent Entry in their child.parents sets,\n        // thereby preventing it from being fully garbage collected.\n        forgetChildren(this);\n        // Because this entry has been kicked out of the cache (in index.js),\n        // we've lost the ability to find out if/when this entry becomes dirty,\n        // whether that happens through a subscription, because of a direct call\n        // to entry.setDirty(), or because one of its children becomes dirty.\n        // Because of this loss of future information, we have to assume the\n        // worst (that this entry might have become dirty very soon), so we must\n        // immediately mark this entry's parents as dirty. Normally we could\n        // just call entry.setDirty() rather than calling parent.setDirty() for\n        // each parent, but that would leave this entry in parent.childValues\n        // and parent.dirtyChildren, which would prevent the child from being\n        // truly forgotten.\n        eachParent(this, (parent, child) => {\n            parent.setDirty();\n            forgetChild(parent, this);\n        });\n    }\n    forget() {\n        // The code that creates Entry objects in index.ts will replace this method\n        // with one that actually removes the Entry from the cache, which will also\n        // trigger the entry.dispose method.\n        this.dispose();\n    }\n    dependOn(dep) {\n        dep.add(this);\n        if (!this.deps) {\n            this.deps = emptySetPool.pop() || new Set();\n        }\n        this.deps.add(dep);\n    }\n    forgetDeps() {\n        if (this.deps) {\n            arrayFromSet(this.deps).forEach(dep => dep.delete(this));\n            this.deps.clear();\n            emptySetPool.push(this.deps);\n            this.deps = null;\n        }\n    }\n}\nEntry.count = 0;\nfunction rememberParent(child) {\n    const parent = parentEntrySlot.getValue();\n    if (parent) {\n        child.parents.add(parent);\n        if (!parent.childValues.has(child)) {\n            parent.childValues.set(child, []);\n        }\n        if (mightBeDirty(child)) {\n            reportDirtyChild(parent, child);\n        }\n        else {\n            reportCleanChild(parent, child);\n        }\n        return parent;\n    }\n}\nfunction reallyRecompute(entry, args) {\n    forgetChildren(entry);\n    // Set entry as the parent entry while calling recomputeNewValue(entry).\n    parentEntrySlot.withValue(entry, recomputeNewValue, [entry, args]);\n    if (maybeSubscribe(entry, args)) {\n        // If we successfully recomputed entry.value and did not fail to\n        // (re)subscribe, then this Entry is no longer explicitly dirty.\n        setClean(entry);\n    }\n    return valueGet(entry.value);\n}\nfunction recomputeNewValue(entry, args) {\n    entry.recomputing = true;\n    const { normalizeResult } = entry;\n    let oldValueCopy;\n    if (normalizeResult && entry.value.length === 1) {\n        oldValueCopy = valueCopy(entry.value);\n    }\n    // Make entry.value an empty array, representing an unknown value.\n    entry.value.length = 0;\n    try {\n        // If entry.fn succeeds, entry.value will become a normal Value.\n        entry.value[0] = entry.fn.apply(null, args);\n        // If we have a viable oldValueCopy to compare with the (successfully\n        // recomputed) new entry.value, and they are not already === identical, give\n        // normalizeResult a chance to pick/choose/reuse parts of oldValueCopy[0]\n        // and/or entry.value[0] to determine the final cached entry.value.\n        if (normalizeResult && oldValueCopy && !valueIs(oldValueCopy, entry.value)) {\n            try {\n                entry.value[0] = normalizeResult(entry.value[0], oldValueCopy[0]);\n            }\n            catch (_a) {\n                // If normalizeResult throws, just use the newer value, rather than\n                // saving the exception as entry.value[1].\n            }\n        }\n    }\n    catch (e) {\n        // If entry.fn throws, entry.value will hold that exception.\n        entry.value[1] = e;\n    }\n    // Either way, this line is always reached.\n    entry.recomputing = false;\n}\nfunction mightBeDirty(entry) {\n    return entry.dirty || !!(entry.dirtyChildren && entry.dirtyChildren.size);\n}\nfunction setClean(entry) {\n    entry.dirty = false;\n    if (mightBeDirty(entry)) {\n        // This Entry may still have dirty children, in which case we can't\n        // let our parents know we're clean just yet.\n        return;\n    }\n    reportClean(entry);\n}\nfunction reportDirty(child) {\n    eachParent(child, reportDirtyChild);\n}\nfunction reportClean(child) {\n    eachParent(child, reportCleanChild);\n}\nfunction eachParent(child, callback) {\n    const parentCount = child.parents.size;\n    if (parentCount) {\n        const parents = arrayFromSet(child.parents);\n        for (let i = 0; i < parentCount; ++i) {\n            callback(parents[i], child);\n        }\n    }\n}\n// Let a parent Entry know that one of its children may be dirty.\nfunction reportDirtyChild(parent, child) {\n    // Must have called rememberParent(child) before calling\n    // reportDirtyChild(parent, child).\n    assert(parent.childValues.has(child));\n    assert(mightBeDirty(child));\n    const parentWasClean = !mightBeDirty(parent);\n    if (!parent.dirtyChildren) {\n        parent.dirtyChildren = emptySetPool.pop() || new Set;\n    }\n    else if (parent.dirtyChildren.has(child)) {\n        // If we already know this child is dirty, then we must have already\n        // informed our own parents that we are dirty, so we can terminate\n        // the recursion early.\n        return;\n    }\n    parent.dirtyChildren.add(child);\n    // If parent was clean before, it just became (possibly) dirty (according to\n    // mightBeDirty), since we just added child to parent.dirtyChildren.\n    if (parentWasClean) {\n        reportDirty(parent);\n    }\n}\n// Let a parent Entry know that one of its children is no longer dirty.\nfunction reportCleanChild(parent, child) {\n    // Must have called rememberChild(child) before calling\n    // reportCleanChild(parent, child).\n    assert(parent.childValues.has(child));\n    assert(!mightBeDirty(child));\n    const childValue = parent.childValues.get(child);\n    if (childValue.length === 0) {\n        parent.childValues.set(child, valueCopy(child.value));\n    }\n    else if (!valueIs(childValue, child.value)) {\n        parent.setDirty();\n    }\n    removeDirtyChild(parent, child);\n    if (mightBeDirty(parent)) {\n        return;\n    }\n    reportClean(parent);\n}\nfunction removeDirtyChild(parent, child) {\n    const dc = parent.dirtyChildren;\n    if (dc) {\n        dc.delete(child);\n        if (dc.size === 0) {\n            if (emptySetPool.length < POOL_TARGET_SIZE) {\n                emptySetPool.push(dc);\n            }\n            parent.dirtyChildren = null;\n        }\n    }\n}\n// Removes all children from this entry and returns an array of the\n// removed children.\nfunction forgetChildren(parent) {\n    if (parent.childValues.size > 0) {\n        parent.childValues.forEach((_value, child) => {\n            forgetChild(parent, child);\n        });\n    }\n    // Remove this parent Entry from any sets to which it was added by the\n    // addToSet method.\n    parent.forgetDeps();\n    // After we forget all our children, this.dirtyChildren must be empty\n    // and therefore must have been reset to null.\n    assert(parent.dirtyChildren === null);\n}\nfunction forgetChild(parent, child) {\n    child.parents.delete(parent);\n    parent.childValues.delete(child);\n    removeDirtyChild(parent, child);\n}\nfunction maybeSubscribe(entry, args) {\n    if (typeof entry.subscribe === \"function\") {\n        try {\n            maybeUnsubscribe(entry); // Prevent double subscriptions.\n            entry.unsubscribe = entry.subscribe.apply(null, args);\n        }\n        catch (e) {\n            // If this Entry has a subscribe function and it threw an exception\n            // (or an unsubscribe function it previously returned now throws),\n            // return false to indicate that we were not able to subscribe (or\n            // unsubscribe), and this Entry should remain dirty.\n            entry.setDirty();\n            return false;\n        }\n    }\n    // Returning true indicates either that there was no entry.subscribe\n    // function or that it succeeded.\n    return true;\n}\n//# sourceMappingURL=entry.js.map","import { parentEntrySlot } from \"./context.js\";\nimport { hasOwnProperty, maybeUnsubscribe, arrayFromSet, } from \"./helpers.js\";\nconst EntryMethods = {\n    setDirty: true,\n    dispose: true,\n    forget: true, // Fully remove parent Entry from LRU cache and computation graph\n};\nexport function dep(options) {\n    const depsByKey = new Map();\n    const subscribe = options && options.subscribe;\n    function depend(key) {\n        const parent = parentEntrySlot.getValue();\n        if (parent) {\n            let dep = depsByKey.get(key);\n            if (!dep) {\n                depsByKey.set(key, dep = new Set);\n            }\n            parent.dependOn(dep);\n            if (typeof subscribe === \"function\") {\n                maybeUnsubscribe(dep);\n                dep.unsubscribe = subscribe(key);\n            }\n        }\n    }\n    depend.dirty = function dirty(key, entryMethodName) {\n        const dep = depsByKey.get(key);\n        if (dep) {\n            const m = (entryMethodName &&\n                hasOwnProperty.call(EntryMethods, entryMethodName)) ? entryMethodName : \"setDirty\";\n            // We have to use arrayFromSet(dep).forEach instead of dep.forEach,\n            // because modifying a Set while iterating over it can cause elements in\n            // the Set to be removed from the Set before they've been iterated over.\n            arrayFromSet(dep).forEach(entry => entry[m]());\n            depsByKey.delete(key);\n            maybeUnsubscribe(dep);\n        }\n    };\n    return depend;\n}\n//# sourceMappingURL=dep.js.map","import { Trie } from \"@wry/trie\";\nimport { StrongCache } from \"@wry/caches\";\nimport { Entry } from \"./entry.js\";\nimport { parentEntrySlot } from \"./context.js\";\n// These helper functions are important for making optimism work with\n// asynchronous code. In order to register parent-child dependencies,\n// optimism needs to know about any currently active parent computations.\n// In ordinary synchronous code, the parent context is implicit in the\n// execution stack, but asynchronous code requires some extra guidance in\n// order to propagate context from one async task segment to the next.\nexport { bindContext, noContext, nonReactive, setTimeout, asyncFromGen, Slot, } from \"./context.js\";\n// A lighter-weight dependency, similar to OptimisticWrapperFunction, except\n// with only one argument, no makeCacheKey, no wrapped function to recompute,\n// and no result value. Useful for representing dependency leaves in the graph\n// of computation. Subscriptions are supported.\nexport { dep } from \"./dep.js\";\n// The defaultMakeCacheKey function is remarkably powerful, because it gives\n// a unique object for any shallow-identical list of arguments. If you need\n// to implement a custom makeCacheKey function, you may find it helpful to\n// delegate the final work to defaultMakeCacheKey, which is why we export it\n// here. However, you may want to avoid defaultMakeCacheKey if your runtime\n// does not support WeakMap, or you have the ability to return a string key.\n// In those cases, just write your own custom makeCacheKey functions.\nlet defaultKeyTrie;\nexport function defaultMakeCacheKey(...args) {\n    const trie = defaultKeyTrie || (defaultKeyTrie = new Trie(typeof WeakMap === \"function\"));\n    return trie.lookupArray(args);\n}\n// If you're paranoid about memory leaks, or you want to avoid using WeakMap\n// under the hood, but you still need the behavior of defaultMakeCacheKey,\n// import this constructor to create your own tries.\nexport { Trie as KeyTrie };\n;\nconst caches = new Set();\nexport function wrap(originalFunction, { max = Math.pow(2, 16), keyArgs, makeCacheKey = defaultMakeCacheKey, normalizeResult, subscribe, cache: cacheOption = StrongCache, } = Object.create(null)) {\n    const cache = typeof cacheOption === \"function\"\n        ? new cacheOption(max, entry => entry.dispose())\n        : cacheOption;\n    const optimistic = function () {\n        const key = makeCacheKey.apply(null, keyArgs ? keyArgs.apply(null, arguments) : arguments);\n        if (key === void 0) {\n            return originalFunction.apply(null, arguments);\n        }\n        let entry = cache.get(key);\n        if (!entry) {\n            cache.set(key, entry = new Entry(originalFunction));\n            entry.normalizeResult = normalizeResult;\n            entry.subscribe = subscribe;\n            // Give the Entry the ability to trigger cache.delete(key), even though\n            // the Entry itself does not know about key or cache.\n            entry.forget = () => cache.delete(key);\n        }\n        const value = entry.recompute(Array.prototype.slice.call(arguments));\n        // Move this entry to the front of the least-recently used queue,\n        // since we just finished computing its value.\n        cache.set(key, entry);\n        caches.add(cache);\n        // Clean up any excess entries in the cache, but only if there is no\n        // active parent entry, meaning we're not in the middle of a larger\n        // computation that might be flummoxed by the cleaning.\n        if (!parentEntrySlot.hasValue()) {\n            caches.forEach(cache => cache.clean());\n            caches.clear();\n        }\n        return value;\n    };\n    Object.defineProperty(optimistic, \"size\", {\n        get: () => cache.size,\n        configurable: false,\n        enumerable: false,\n    });\n    Object.freeze(optimistic.options = {\n        max,\n        keyArgs,\n        makeCacheKey,\n        normalizeResult,\n        subscribe,\n        cache,\n    });\n    function dirtyKey(key) {\n        const entry = key && cache.get(key);\n        if (entry) {\n            entry.setDirty();\n        }\n    }\n    optimistic.dirtyKey = dirtyKey;\n    optimistic.dirty = function dirty() {\n        dirtyKey(makeCacheKey.apply(null, arguments));\n    };\n    function peekKey(key) {\n        const entry = key && cache.get(key);\n        if (entry) {\n            return entry.peek();\n        }\n    }\n    optimistic.peekKey = peekKey;\n    optimistic.peek = function peek() {\n        return peekKey(makeCacheKey.apply(null, arguments));\n    };\n    function forgetKey(key) {\n        return key ? cache.delete(key) : false;\n    }\n    optimistic.forgetKey = forgetKey;\n    optimistic.forget = function forget() {\n        return forgetKey(makeCacheKey.apply(null, arguments));\n    };\n    optimistic.makeCacheKey = makeCacheKey;\n    optimistic.getKey = keyArgs ? function getKey() {\n        return makeCacheKey.apply(null, keyArgs.apply(null, arguments));\n    } : makeCacheKey;\n    return Object.freeze(optimistic);\n}\n//# sourceMappingURL=index.js.map","import { Trie } from \"@wry/trie\";\nimport { canUseWeakMap, canUseWeakSet } from \"../common/canUse.js\";\nimport { checkDocument } from \"./getFromAST.js\";\nimport { invariant } from \"../globals/index.js\";\nimport { WeakCache } from \"@wry/caches\";\nimport { wrap } from \"optimism\";\nimport { cacheSizes } from \"../caching/index.js\";\nfunction identity(document) {\n    return document;\n}\nvar DocumentTransform = /** @class */ (function () {\n    function DocumentTransform(transform, options) {\n        if (options === void 0) { options = Object.create(null); }\n        this.resultCache = canUseWeakSet ? new WeakSet() : new Set();\n        this.transform = transform;\n        if (options.getCacheKey) {\n            // Override default `getCacheKey` function, which returns [document].\n            this.getCacheKey = options.getCacheKey;\n        }\n        this.cached = options.cache !== false;\n        this.resetCache();\n    }\n    // This default implementation of getCacheKey can be overridden by providing\n    // options.getCacheKey to the DocumentTransform constructor. In general, a\n    // getCacheKey function may either return an array of keys (often including\n    // the document) to be used as a cache key, or undefined to indicate the\n    // transform for this document should not be cached.\n    DocumentTransform.prototype.getCacheKey = function (document) {\n        return [document];\n    };\n    DocumentTransform.identity = function () {\n        // No need to cache this transform since it just returns the document\n        // unchanged. This should save a bit of memory that would otherwise be\n        // needed to populate the `documentCache` of this transform.\n        return new DocumentTransform(identity, { cache: false });\n    };\n    DocumentTransform.split = function (predicate, left, right) {\n        if (right === void 0) { right = DocumentTransform.identity(); }\n        return Object.assign(new DocumentTransform(function (document) {\n            var documentTransform = predicate(document) ? left : right;\n            return documentTransform.transformDocument(document);\n        }, \n        // Reasonably assume both `left` and `right` transforms handle their own caching\n        { cache: false }), { left: left, right: right });\n    };\n    /**\n     * Resets the internal cache of this transform, if it has one.\n     */\n    DocumentTransform.prototype.resetCache = function () {\n        var _this = this;\n        if (this.cached) {\n            var stableCacheKeys_1 = new Trie(canUseWeakMap);\n            this.performWork = wrap(DocumentTransform.prototype.performWork.bind(this), {\n                makeCacheKey: function (document) {\n                    var cacheKeys = _this.getCacheKey(document);\n                    if (cacheKeys) {\n                        invariant(Array.isArray(cacheKeys), 104);\n                        return stableCacheKeys_1.lookupArray(cacheKeys);\n                    }\n                },\n                max: cacheSizes[\"documentTransform.cache\"],\n                cache: (WeakCache),\n            });\n        }\n    };\n    DocumentTransform.prototype.performWork = function (document) {\n        checkDocument(document);\n        return this.transform(document);\n    };\n    DocumentTransform.prototype.transformDocument = function (document) {\n        // If a user passes an already transformed result back to this function,\n        // immediately return it.\n        if (this.resultCache.has(document)) {\n            return document;\n        }\n        var transformedDocument = this.performWork(document);\n        this.resultCache.add(transformedDocument);\n        return transformedDocument;\n    };\n    DocumentTransform.prototype.concat = function (otherTransform) {\n        var _this = this;\n        return Object.assign(new DocumentTransform(function (document) {\n            return otherTransform.transformDocument(_this.transformDocument(document));\n        }, \n        // Reasonably assume both transforms handle their own caching\n        { cache: false }), {\n            left: this,\n            right: otherTransform,\n        });\n    };\n    return DocumentTransform;\n}());\nexport { DocumentTransform };\n//# sourceMappingURL=DocumentTransform.js.map","import { print as origPrint } from \"graphql\";\nimport { AutoCleanedWeakCache, cacheSizes, } from \"../caching/index.js\";\nimport { registerGlobalCache } from \"../caching/getMemoryInternals.js\";\nvar printCache;\nexport var print = Object.assign(function (ast) {\n    var result = printCache.get(ast);\n    if (!result) {\n        result = origPrint(ast);\n        printCache.set(ast, result);\n    }\n    return result;\n}, {\n    reset: function () {\n        printCache = new AutoCleanedWeakCache(cacheSizes.print || 2000 /* defaultCacheSizes.print */);\n    },\n});\nprint.reset();\nif (globalThis.__DEV__ !== false) {\n    registerGlobalCache(\"print\", function () { return (printCache ? printCache.size : 0); });\n}\n//# sourceMappingURL=print.js.map","// A version of Array.isArray that works better with readonly arrays.\nexport var isArray = Array.isArray;\nexport function isNonEmptyArray(value) {\n    return Array.isArray(value) && value.length > 0;\n}\n//# sourceMappingURL=arrays.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { invariant } from \"../globals/index.js\";\nimport { visit, Kind } from \"graphql\";\nimport { checkDocument, getOperationDefinition, getFragmentDefinition, getFragmentDefinitions, getMainDefinition, } from \"./getFromAST.js\";\nimport { isField } from \"./storeUtils.js\";\nimport { createFragmentMap } from \"./fragments.js\";\nimport { isArray, isNonEmptyArray } from \"../common/arrays.js\";\nvar TYPENAME_FIELD = {\n    kind: Kind.FIELD,\n    name: {\n        kind: Kind.NAME,\n        value: \"__typename\",\n    },\n};\nfunction isEmpty(op, fragmentMap) {\n    return (!op ||\n        op.selectionSet.selections.every(function (selection) {\n            return selection.kind === Kind.FRAGMENT_SPREAD &&\n                isEmpty(fragmentMap[selection.name.value], fragmentMap);\n        }));\n}\nfunction nullIfDocIsEmpty(doc) {\n    return (isEmpty(getOperationDefinition(doc) || getFragmentDefinition(doc), createFragmentMap(getFragmentDefinitions(doc)))) ?\n        null\n        : doc;\n}\nfunction getDirectiveMatcher(configs) {\n    var names = new Map();\n    var tests = new Map();\n    configs.forEach(function (directive) {\n        if (directive) {\n            if (directive.name) {\n                names.set(directive.name, directive);\n            }\n            else if (directive.test) {\n                tests.set(directive.test, directive);\n            }\n        }\n    });\n    return function (directive) {\n        var config = names.get(directive.name.value);\n        if (!config && tests.size) {\n            tests.forEach(function (testConfig, test) {\n                if (test(directive)) {\n                    config = testConfig;\n                }\n            });\n        }\n        return config;\n    };\n}\nfunction makeInUseGetterFunction(defaultKey) {\n    var map = new Map();\n    return function inUseGetterFunction(key) {\n        if (key === void 0) { key = defaultKey; }\n        var inUse = map.get(key);\n        if (!inUse) {\n            map.set(key, (inUse = {\n                // Variable and fragment spread names used directly within this\n                // operation or fragment definition, as identified by key. These sets\n                // will be populated during the first traversal of the document in\n                // removeDirectivesFromDocument below.\n                variables: new Set(),\n                fragmentSpreads: new Set(),\n            }));\n        }\n        return inUse;\n    };\n}\nexport function removeDirectivesFromDocument(directives, doc) {\n    checkDocument(doc);\n    // Passing empty strings to makeInUseGetterFunction means we handle anonymous\n    // operations as if their names were \"\". Anonymous fragment definitions are\n    // not supposed to be possible, but the same default naming strategy seems\n    // appropriate for that case as well.\n    var getInUseByOperationName = makeInUseGetterFunction(\"\");\n    var getInUseByFragmentName = makeInUseGetterFunction(\"\");\n    var getInUse = function (ancestors) {\n        for (var p = 0, ancestor = void 0; p < ancestors.length && (ancestor = ancestors[p]); ++p) {\n            if (isArray(ancestor))\n                continue;\n            if (ancestor.kind === Kind.OPERATION_DEFINITION) {\n                // If an operation is anonymous, we use the empty string as its key.\n                return getInUseByOperationName(ancestor.name && ancestor.name.value);\n            }\n            if (ancestor.kind === Kind.FRAGMENT_DEFINITION) {\n                return getInUseByFragmentName(ancestor.name.value);\n            }\n        }\n        globalThis.__DEV__ !== false && invariant.error(124);\n        return null;\n    };\n    var operationCount = 0;\n    for (var i = doc.definitions.length - 1; i >= 0; --i) {\n        if (doc.definitions[i].kind === Kind.OPERATION_DEFINITION) {\n            ++operationCount;\n        }\n    }\n    var directiveMatcher = getDirectiveMatcher(directives);\n    var shouldRemoveField = function (nodeDirectives) {\n        return isNonEmptyArray(nodeDirectives) &&\n            nodeDirectives\n                .map(directiveMatcher)\n                .some(function (config) { return config && config.remove; });\n    };\n    var originalFragmentDefsByPath = new Map();\n    // Any time the first traversal of the document below makes a change like\n    // removing a fragment (by returning null), this variable should be set to\n    // true. Once it becomes true, it should never be set to false again. If this\n    // variable remains false throughout the traversal, then we can return the\n    // original doc immediately without any modifications.\n    var firstVisitMadeChanges = false;\n    var fieldOrInlineFragmentVisitor = {\n        enter: function (node) {\n            if (shouldRemoveField(node.directives)) {\n                firstVisitMadeChanges = true;\n                return null;\n            }\n        },\n    };\n    var docWithoutDirectiveSubtrees = visit(doc, {\n        // These two AST node types share the same implementation, defined above.\n        Field: fieldOrInlineFragmentVisitor,\n        InlineFragment: fieldOrInlineFragmentVisitor,\n        VariableDefinition: {\n            enter: function () {\n                // VariableDefinition nodes do not count as variables in use, though\n                // they do contain Variable nodes that might be visited below. To avoid\n                // counting variable declarations as usages, we skip visiting the\n                // contents of this VariableDefinition node by returning false.\n                return false;\n            },\n        },\n        Variable: {\n            enter: function (node, _key, _parent, _path, ancestors) {\n                var inUse = getInUse(ancestors);\n                if (inUse) {\n                    inUse.variables.add(node.name.value);\n                }\n            },\n        },\n        FragmentSpread: {\n            enter: function (node, _key, _parent, _path, ancestors) {\n                if (shouldRemoveField(node.directives)) {\n                    firstVisitMadeChanges = true;\n                    return null;\n                }\n                var inUse = getInUse(ancestors);\n                if (inUse) {\n                    inUse.fragmentSpreads.add(node.name.value);\n                }\n                // We might like to remove this FragmentSpread by returning null here if\n                // the corresponding FragmentDefinition node is also going to be removed\n                // by the logic below, but we can't control the relative order of those\n                // events, so we have to postpone the removal of dangling FragmentSpread\n                // nodes until after the current visit of the document has finished.\n            },\n        },\n        FragmentDefinition: {\n            enter: function (node, _key, _parent, path) {\n                originalFragmentDefsByPath.set(JSON.stringify(path), node);\n            },\n            leave: function (node, _key, _parent, path) {\n                var originalNode = originalFragmentDefsByPath.get(JSON.stringify(path));\n                if (node === originalNode) {\n                    // If the FragmentNode received by this leave function is identical to\n                    // the one received by the corresponding enter function (above), then\n                    // the visitor must not have made any changes within this\n                    // FragmentDefinition node. This fragment definition may still be\n                    // removed if there are no ...spread references to it, but it won't be\n                    // removed just because it has only a __typename field.\n                    return node;\n                }\n                if (\n                // This logic applies only if the document contains one or more\n                // operations, since removing all fragments from a document containing\n                // only fragments makes the document useless.\n                operationCount > 0 &&\n                    node.selectionSet.selections.every(function (selection) {\n                        return selection.kind === Kind.FIELD &&\n                            selection.name.value === \"__typename\";\n                    })) {\n                    // This is a somewhat opinionated choice: if a FragmentDefinition ends\n                    // up having no fields other than __typename, we remove the whole\n                    // fragment definition, and later prune ...spread references to it.\n                    getInUseByFragmentName(node.name.value).removed = true;\n                    firstVisitMadeChanges = true;\n                    return null;\n                }\n            },\n        },\n        Directive: {\n            leave: function (node) {\n                // If a matching directive is found, remove the directive itself. Note\n                // that this does not remove the target (field, argument, etc) of the\n                // directive, but only the directive itself.\n                if (directiveMatcher(node)) {\n                    firstVisitMadeChanges = true;\n                    return null;\n                }\n            },\n        },\n    });\n    if (!firstVisitMadeChanges) {\n        // If our first pass did not change anything about the document, then there\n        // is no cleanup we need to do, and we can return the original doc.\n        return doc;\n    }\n    // Utility for making sure inUse.transitiveVars is recursively populated.\n    // Because this logic assumes inUse.fragmentSpreads has been completely\n    // populated and inUse.removed has been set if appropriate,\n    // populateTransitiveVars must be called after that information has been\n    // collected by the first traversal of the document.\n    var populateTransitiveVars = function (inUse) {\n        if (!inUse.transitiveVars) {\n            inUse.transitiveVars = new Set(inUse.variables);\n            if (!inUse.removed) {\n                inUse.fragmentSpreads.forEach(function (childFragmentName) {\n                    populateTransitiveVars(getInUseByFragmentName(childFragmentName)).transitiveVars.forEach(function (varName) {\n                        inUse.transitiveVars.add(varName);\n                    });\n                });\n            }\n        }\n        return inUse;\n    };\n    // Since we've been keeping track of fragment spreads used by particular\n    // operations and fragment definitions, we now need to compute the set of all\n    // spreads used (transitively) by any operations in the document.\n    var allFragmentNamesUsed = new Set();\n    docWithoutDirectiveSubtrees.definitions.forEach(function (def) {\n        if (def.kind === Kind.OPERATION_DEFINITION) {\n            populateTransitiveVars(getInUseByOperationName(def.name && def.name.value)).fragmentSpreads.forEach(function (childFragmentName) {\n                allFragmentNamesUsed.add(childFragmentName);\n            });\n        }\n        else if (def.kind === Kind.FRAGMENT_DEFINITION &&\n            // If there are no operations in the document, then all fragment\n            // definitions count as usages of their own fragment names. This heuristic\n            // prevents accidentally removing all fragment definitions from the\n            // document just because it contains no operations that use the fragments.\n            operationCount === 0 &&\n            !getInUseByFragmentName(def.name.value).removed) {\n            allFragmentNamesUsed.add(def.name.value);\n        }\n    });\n    // Now that we have added all fragment spreads used by operations to the\n    // allFragmentNamesUsed set, we can complete the set by transitively adding\n    // all fragment spreads used by those fragments, and so on.\n    allFragmentNamesUsed.forEach(function (fragmentName) {\n        // Once all the childFragmentName strings added here have been seen already,\n        // the top-level allFragmentNamesUsed.forEach loop will terminate.\n        populateTransitiveVars(getInUseByFragmentName(fragmentName)).fragmentSpreads.forEach(function (childFragmentName) {\n            allFragmentNamesUsed.add(childFragmentName);\n        });\n    });\n    var fragmentWillBeRemoved = function (fragmentName) {\n        return !!(\n        // A fragment definition will be removed if there are no spreads that refer\n        // to it, or the fragment was explicitly removed because it had no fields\n        // other than __typename.\n        (!allFragmentNamesUsed.has(fragmentName) ||\n            getInUseByFragmentName(fragmentName).removed));\n    };\n    var enterVisitor = {\n        enter: function (node) {\n            if (fragmentWillBeRemoved(node.name.value)) {\n                return null;\n            }\n        },\n    };\n    return nullIfDocIsEmpty(visit(docWithoutDirectiveSubtrees, {\n        // If the fragment is going to be removed, then leaving any dangling\n        // FragmentSpread nodes with the same name would be a mistake.\n        FragmentSpread: enterVisitor,\n        // This is where the fragment definition is actually removed.\n        FragmentDefinition: enterVisitor,\n        OperationDefinition: {\n            leave: function (node) {\n                // Upon leaving each operation in the depth-first AST traversal, prune\n                // any variables that are declared by the operation but unused within.\n                if (node.variableDefinitions) {\n                    var usedVariableNames_1 = populateTransitiveVars(\n                    // If an operation is anonymous, we use the empty string as its key.\n                    getInUseByOperationName(node.name && node.name.value)).transitiveVars;\n                    // According to the GraphQL spec, all variables declared by an\n                    // operation must either be used by that operation or used by some\n                    // fragment included transitively into that operation:\n                    // https://spec.graphql.org/draft/#sec-All-Variables-Used\n                    //\n                    // To stay on the right side of this validation rule, if/when we\n                    // remove the last $var references from an operation or its fragments,\n                    // we must also remove the corresponding $var declaration from the\n                    // enclosing operation. This pruning applies only to operations and\n                    // not fragment definitions, at the moment. Fragments may be able to\n                    // declare variables eventually, but today they can only consume them.\n                    if (usedVariableNames_1.size < node.variableDefinitions.length) {\n                        return __assign(__assign({}, node), { variableDefinitions: node.variableDefinitions.filter(function (varDef) {\n                                return usedVariableNames_1.has(varDef.variable.name.value);\n                            }) });\n                    }\n                }\n            },\n        },\n    }));\n}\nexport var addTypenameToDocument = Object.assign(function (doc) {\n    return visit(doc, {\n        SelectionSet: {\n            enter: function (node, _key, parent) {\n                // Don't add __typename to OperationDefinitions.\n                if (parent &&\n                    parent.kind ===\n                        Kind.OPERATION_DEFINITION) {\n                    return;\n                }\n                // No changes if no selections.\n                var selections = node.selections;\n                if (!selections) {\n                    return;\n                }\n                // If selections already have a __typename, or are part of an\n                // introspection query, do nothing.\n                var skip = selections.some(function (selection) {\n                    return (isField(selection) &&\n                        (selection.name.value === \"__typename\" ||\n                            selection.name.value.lastIndexOf(\"__\", 0) === 0));\n                });\n                if (skip) {\n                    return;\n                }\n                // If this SelectionSet is @export-ed as an input variable, it should\n                // not have a __typename field (see issue #4691).\n                var field = parent;\n                if (isField(field) &&\n                    field.directives &&\n                    field.directives.some(function (d) { return d.name.value === \"export\"; })) {\n                    return;\n                }\n                // Create and return a new SelectionSet with a __typename Field.\n                return __assign(__assign({}, node), { selections: __spreadArray(__spreadArray([], selections, true), [TYPENAME_FIELD], false) });\n            },\n        },\n    });\n}, {\n    added: function (field) {\n        return field === TYPENAME_FIELD;\n    },\n});\nvar connectionRemoveConfig = {\n    test: function (directive) {\n        var willRemove = directive.name.value === \"connection\";\n        if (willRemove) {\n            if (!directive.arguments ||\n                !directive.arguments.some(function (arg) { return arg.name.value === \"key\"; })) {\n                globalThis.__DEV__ !== false && invariant.warn(125);\n            }\n        }\n        return willRemove;\n    },\n};\nexport function removeConnectionDirectiveFromDocument(doc) {\n    return removeDirectivesFromDocument([connectionRemoveConfig], checkDocument(doc));\n}\nfunction hasDirectivesInSelectionSet(directives, selectionSet, nestedCheck) {\n    if (nestedCheck === void 0) { nestedCheck = true; }\n    return (!!selectionSet &&\n        selectionSet.selections &&\n        selectionSet.selections.some(function (selection) {\n            return hasDirectivesInSelection(directives, selection, nestedCheck);\n        }));\n}\nfunction hasDirectivesInSelection(directives, selection, nestedCheck) {\n    if (nestedCheck === void 0) { nestedCheck = true; }\n    if (!isField(selection)) {\n        return true;\n    }\n    if (!selection.directives) {\n        return false;\n    }\n    return (selection.directives.some(getDirectiveMatcher(directives)) ||\n        (nestedCheck &&\n            hasDirectivesInSelectionSet(directives, selection.selectionSet, nestedCheck)));\n}\nfunction getArgumentMatcher(config) {\n    return function argumentMatcher(argument) {\n        return config.some(function (aConfig) {\n            return argument.value &&\n                argument.value.kind === Kind.VARIABLE &&\n                argument.value.name &&\n                (aConfig.name === argument.value.name.value ||\n                    (aConfig.test && aConfig.test(argument)));\n        });\n    };\n}\nexport function removeArgumentsFromDocument(config, doc) {\n    var argMatcher = getArgumentMatcher(config);\n    return nullIfDocIsEmpty(visit(doc, {\n        OperationDefinition: {\n            enter: function (node) {\n                return __assign(__assign({}, node), { \n                    // Remove matching top level variables definitions.\n                    variableDefinitions: node.variableDefinitions ?\n                        node.variableDefinitions.filter(function (varDef) {\n                            return !config.some(function (arg) { return arg.name === varDef.variable.name.value; });\n                        })\n                        : [] });\n            },\n        },\n        Field: {\n            enter: function (node) {\n                // If `remove` is set to true for an argument, and an argument match\n                // is found for a field, remove the field as well.\n                var shouldRemoveField = config.some(function (argConfig) { return argConfig.remove; });\n                if (shouldRemoveField) {\n                    var argMatchCount_1 = 0;\n                    if (node.arguments) {\n                        node.arguments.forEach(function (arg) {\n                            if (argMatcher(arg)) {\n                                argMatchCount_1 += 1;\n                            }\n                        });\n                    }\n                    if (argMatchCount_1 === 1) {\n                        return null;\n                    }\n                }\n            },\n        },\n        Argument: {\n            enter: function (node) {\n                // Remove all matching arguments.\n                if (argMatcher(node)) {\n                    return null;\n                }\n            },\n        },\n    }));\n}\nexport function removeFragmentSpreadFromDocument(config, doc) {\n    function enter(node) {\n        if (config.some(function (def) { return def.name === node.name.value; })) {\n            return null;\n        }\n    }\n    return nullIfDocIsEmpty(visit(doc, {\n        FragmentSpread: { enter: enter },\n        FragmentDefinition: { enter: enter },\n    }));\n}\n// If the incoming document is a query, return it as is. Otherwise, build a\n// new document containing a query operation based on the selection set\n// of the previous main operation.\nexport function buildQueryFromSelectionSet(document) {\n    var definition = getMainDefinition(document);\n    var definitionOperation = definition.operation;\n    if (definitionOperation === \"query\") {\n        // Already a query, so return the existing document.\n        return document;\n    }\n    // Build a new query using the selection set of the main operation.\n    var modifiedDoc = visit(document, {\n        OperationDefinition: {\n            enter: function (node) {\n                return __assign(__assign({}, node), { operation: \"query\" });\n            },\n        },\n    });\n    return modifiedDoc;\n}\n// Remove fields / selection sets that include an @client directive.\nexport function removeClientSetsFromDocument(document) {\n    checkDocument(document);\n    var modifiedDoc = removeDirectivesFromDocument([\n        {\n            test: function (directive) { return directive.name.value === \"client\"; },\n            remove: true,\n        },\n    ], document);\n    return modifiedDoc;\n}\nexport function addNonReactiveToNamedFragments(document) {\n    checkDocument(document);\n    return visit(document, {\n        FragmentSpread: function (node) {\n            var _a;\n            // Do not add `@nonreactive` if the fragment is marked with `@unmask`\n            // since we want to react to changes in this fragment.\n            if ((_a = node.directives) === null || _a === void 0 ? void 0 : _a.some(function (directive) { return directive.name.value === \"unmask\"; })) {\n                return;\n            }\n            return __assign(__assign({}, node), { directives: __spreadArray(__spreadArray([], (node.directives || []), true), [\n                    {\n                        kind: Kind.DIRECTIVE,\n                        name: { kind: Kind.NAME, value: \"nonreactive\" },\n                    },\n                ], false) });\n        },\n    });\n}\n//# sourceMappingURL=transform.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { isNonNullObject } from \"./objects.js\";\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function mergeDeep() {\n    var sources = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        sources[_i] = arguments[_i];\n    }\n    return mergeDeepArray(sources);\n}\n// In almost any situation where you could succeed in getting the\n// TypeScript compiler to infer a tuple type for the sources array, you\n// could just use mergeDeep instead of mergeDeepArray, so instead of\n// trying to convert T[] to an intersection type we just infer the array\n// element type, which works perfectly when the sources array has a\n// consistent element type.\nexport function mergeDeepArray(sources) {\n    var target = sources[0] || {};\n    var count = sources.length;\n    if (count > 1) {\n        var merger = new DeepMerger();\n        for (var i = 1; i < count; ++i) {\n            target = merger.merge(target, sources[i]);\n        }\n    }\n    return target;\n}\nvar defaultReconciler = function (target, source, property) {\n    return this.merge(target[property], source[property]);\n};\nvar DeepMerger = /** @class */ (function () {\n    function DeepMerger(reconciler) {\n        if (reconciler === void 0) { reconciler = defaultReconciler; }\n        this.reconciler = reconciler;\n        this.isObject = isNonNullObject;\n        this.pastCopies = new Set();\n    }\n    DeepMerger.prototype.merge = function (target, source) {\n        var _this = this;\n        var context = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            context[_i - 2] = arguments[_i];\n        }\n        if (isNonNullObject(source) && isNonNullObject(target)) {\n            Object.keys(source).forEach(function (sourceKey) {\n                if (hasOwnProperty.call(target, sourceKey)) {\n                    var targetValue = target[sourceKey];\n                    if (source[sourceKey] !== targetValue) {\n                        var result = _this.reconciler.apply(_this, __spreadArray([target,\n                            source,\n                            sourceKey], context, false));\n                        // A well-implemented reconciler may return targetValue to indicate\n                        // the merge changed nothing about the structure of the target.\n                        if (result !== targetValue) {\n                            target = _this.shallowCopyForMerge(target);\n                            target[sourceKey] = result;\n                        }\n                    }\n                }\n                else {\n                    // If there is no collision, the target can safely share memory with\n                    // the source, and the recursion can terminate here.\n                    target = _this.shallowCopyForMerge(target);\n                    target[sourceKey] = source[sourceKey];\n                }\n            });\n            return target;\n        }\n        // If source (or target) is not an object, let source replace target.\n        return source;\n    };\n    DeepMerger.prototype.shallowCopyForMerge = function (value) {\n        if (isNonNullObject(value)) {\n            if (!this.pastCopies.has(value)) {\n                if (Array.isArray(value)) {\n                    value = value.slice(0);\n                }\n                else {\n                    value = __assign({ __proto__: Object.getPrototypeOf(value) }, value);\n                }\n                this.pastCopies.add(value);\n            }\n        }\n        return value;\n    };\n    return DeepMerger;\n}());\nexport { DeepMerger };\n//# sourceMappingURL=mergeDeep.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n  return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n  return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n  return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n  Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n  var value = obj[key];\n  if (value == null) return undefined;\n  if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n  return value;\n}\n\nfunction getSpecies(obj) {\n  var ctor = obj.constructor;\n\n  if (ctor !== undefined) {\n    ctor = ctor[SymbolSpecies];\n\n    if (ctor === null) {\n      ctor = undefined;\n    }\n  }\n\n  return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n  return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n  if (hostReportError.log) {\n    hostReportError.log(e);\n  } else {\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nfunction enqueue(fn) {\n  Promise.resolve().then(function () {\n    try {\n      fn();\n    } catch (e) {\n      hostReportError(e);\n    }\n  });\n}\n\nfunction cleanupSubscription(subscription) {\n  var cleanup = subscription._cleanup;\n  if (cleanup === undefined) return;\n  subscription._cleanup = undefined;\n\n  if (!cleanup) {\n    return;\n  }\n\n  try {\n    if (typeof cleanup === 'function') {\n      cleanup();\n    } else {\n      var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n      if (unsubscribe) {\n        unsubscribe.call(cleanup);\n      }\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n}\n\nfunction closeSubscription(subscription) {\n  subscription._observer = undefined;\n  subscription._queue = undefined;\n  subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n  var queue = subscription._queue;\n\n  if (!queue) {\n    return;\n  }\n\n  subscription._queue = undefined;\n  subscription._state = 'ready';\n\n  for (var i = 0; i < queue.length; ++i) {\n    notifySubscription(subscription, queue[i].type, queue[i].value);\n    if (subscription._state === 'closed') break;\n  }\n}\n\nfunction notifySubscription(subscription, type, value) {\n  subscription._state = 'running';\n  var observer = subscription._observer;\n\n  try {\n    var m = getMethod(observer, type);\n\n    switch (type) {\n      case 'next':\n        if (m) m.call(observer, value);\n        break;\n\n      case 'error':\n        closeSubscription(subscription);\n        if (m) m.call(observer, value);else throw value;\n        break;\n\n      case 'complete':\n        closeSubscription(subscription);\n        if (m) m.call(observer);\n        break;\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n\n  if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n  if (subscription._state === 'closed') return;\n\n  if (subscription._state === 'buffering') {\n    subscription._queue.push({\n      type: type,\n      value: value\n    });\n\n    return;\n  }\n\n  if (subscription._state !== 'ready') {\n    subscription._state = 'buffering';\n    subscription._queue = [{\n      type: type,\n      value: value\n    }];\n    enqueue(function () {\n      return flushSubscription(subscription);\n    });\n    return;\n  }\n\n  notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n  function Subscription(observer, subscriber) {\n    // ASSERT: observer is an object\n    // ASSERT: subscriber is callable\n    this._cleanup = undefined;\n    this._observer = observer;\n    this._queue = undefined;\n    this._state = 'initializing';\n    var subscriptionObserver = new SubscriptionObserver(this);\n\n    try {\n      this._cleanup = subscriber.call(undefined, subscriptionObserver);\n    } catch (e) {\n      subscriptionObserver.error(e);\n    }\n\n    if (this._state === 'initializing') this._state = 'ready';\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.unsubscribe = function unsubscribe() {\n    if (this._state !== 'closed') {\n      closeSubscription(this);\n      cleanupSubscription(this);\n    }\n  };\n\n  _createClass(Subscription, [{\n    key: \"closed\",\n    get: function () {\n      return this._state === 'closed';\n    }\n  }]);\n\n  return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n  function SubscriptionObserver(subscription) {\n    this._subscription = subscription;\n  }\n\n  var _proto2 = SubscriptionObserver.prototype;\n\n  _proto2.next = function next(value) {\n    onNotify(this._subscription, 'next', value);\n  };\n\n  _proto2.error = function error(value) {\n    onNotify(this._subscription, 'error', value);\n  };\n\n  _proto2.complete = function complete() {\n    onNotify(this._subscription, 'complete');\n  };\n\n  _createClass(SubscriptionObserver, [{\n    key: \"closed\",\n    get: function () {\n      return this._subscription._state === 'closed';\n    }\n  }]);\n\n  return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n  function Observable(subscriber) {\n    if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n    if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n    this._subscriber = subscriber;\n  }\n\n  var _proto3 = Observable.prototype;\n\n  _proto3.subscribe = function subscribe(observer) {\n    if (typeof observer !== 'object' || observer === null) {\n      observer = {\n        next: observer,\n        error: arguments[1],\n        complete: arguments[2]\n      };\n    }\n\n    return new Subscription(observer, this._subscriber);\n  };\n\n  _proto3.forEach = function forEach(fn) {\n    var _this = this;\n\n    return new Promise(function (resolve, reject) {\n      if (typeof fn !== 'function') {\n        reject(new TypeError(fn + ' is not a function'));\n        return;\n      }\n\n      function done() {\n        subscription.unsubscribe();\n        resolve();\n      }\n\n      var subscription = _this.subscribe({\n        next: function (value) {\n          try {\n            fn(value, done);\n          } catch (e) {\n            reject(e);\n            subscription.unsubscribe();\n          }\n        },\n        error: reject,\n        complete: resolve\n      });\n    });\n  };\n\n  _proto3.map = function map(fn) {\n    var _this2 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      return _this2.subscribe({\n        next: function (value) {\n          try {\n            value = fn(value);\n          } catch (e) {\n            return observer.error(e);\n          }\n\n          observer.next(value);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.filter = function filter(fn) {\n    var _this3 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      return _this3.subscribe({\n        next: function (value) {\n          try {\n            if (!fn(value)) return;\n          } catch (e) {\n            return observer.error(e);\n          }\n\n          observer.next(value);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.reduce = function reduce(fn) {\n    var _this4 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    var hasSeed = arguments.length > 1;\n    var hasValue = false;\n    var seed = arguments[1];\n    var acc = seed;\n    return new C(function (observer) {\n      return _this4.subscribe({\n        next: function (value) {\n          var first = !hasValue;\n          hasValue = true;\n\n          if (!first || hasSeed) {\n            try {\n              acc = fn(acc, value);\n            } catch (e) {\n              return observer.error(e);\n            }\n          } else {\n            acc = value;\n          }\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n          observer.next(acc);\n          observer.complete();\n        }\n      });\n    });\n  };\n\n  _proto3.concat = function concat() {\n    var _this5 = this;\n\n    for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n      sources[_key] = arguments[_key];\n    }\n\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      var subscription;\n      var index = 0;\n\n      function startNext(next) {\n        subscription = next.subscribe({\n          next: function (v) {\n            observer.next(v);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            if (index === sources.length) {\n              subscription = undefined;\n              observer.complete();\n            } else {\n              startNext(C.from(sources[index++]));\n            }\n          }\n        });\n      }\n\n      startNext(_this5);\n      return function () {\n        if (subscription) {\n          subscription.unsubscribe();\n          subscription = undefined;\n        }\n      };\n    });\n  };\n\n  _proto3.flatMap = function flatMap(fn) {\n    var _this6 = this;\n\n    if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n    var C = getSpecies(this);\n    return new C(function (observer) {\n      var subscriptions = [];\n\n      var outer = _this6.subscribe({\n        next: function (value) {\n          if (fn) {\n            try {\n              value = fn(value);\n            } catch (e) {\n              return observer.error(e);\n            }\n          }\n\n          var inner = C.from(value).subscribe({\n            next: function (value) {\n              observer.next(value);\n            },\n            error: function (e) {\n              observer.error(e);\n            },\n            complete: function () {\n              var i = subscriptions.indexOf(inner);\n              if (i >= 0) subscriptions.splice(i, 1);\n              completeIfDone();\n            }\n          });\n          subscriptions.push(inner);\n        },\n        error: function (e) {\n          observer.error(e);\n        },\n        complete: function () {\n          completeIfDone();\n        }\n      });\n\n      function completeIfDone() {\n        if (outer.closed && subscriptions.length === 0) observer.complete();\n      }\n\n      return function () {\n        subscriptions.forEach(function (s) {\n          return s.unsubscribe();\n        });\n        outer.unsubscribe();\n      };\n    });\n  };\n\n  _proto3[SymbolObservable] = function () {\n    return this;\n  };\n\n  Observable.from = function from(x) {\n    var C = typeof this === 'function' ? this : Observable;\n    if (x == null) throw new TypeError(x + ' is not an object');\n    var method = getMethod(x, SymbolObservable);\n\n    if (method) {\n      var observable = method.call(x);\n      if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n      if (isObservable(observable) && observable.constructor === C) return observable;\n      return new C(function (observer) {\n        return observable.subscribe(observer);\n      });\n    }\n\n    if (hasSymbol('iterator')) {\n      method = getMethod(x, SymbolIterator);\n\n      if (method) {\n        return new C(function (observer) {\n          enqueue(function () {\n            if (observer.closed) return;\n\n            for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n              var item = _step.value;\n              observer.next(item);\n              if (observer.closed) return;\n            }\n\n            observer.complete();\n          });\n        });\n      }\n    }\n\n    if (Array.isArray(x)) {\n      return new C(function (observer) {\n        enqueue(function () {\n          if (observer.closed) return;\n\n          for (var i = 0; i < x.length; ++i) {\n            observer.next(x[i]);\n            if (observer.closed) return;\n          }\n\n          observer.complete();\n        });\n      });\n    }\n\n    throw new TypeError(x + ' is not observable');\n  };\n\n  Observable.of = function of() {\n    for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      items[_key2] = arguments[_key2];\n    }\n\n    var C = typeof this === 'function' ? this : Observable;\n    return new C(function (observer) {\n      enqueue(function () {\n        if (observer.closed) return;\n\n        for (var i = 0; i < items.length; ++i) {\n          observer.next(items[i]);\n          if (observer.closed) return;\n        }\n\n        observer.complete();\n      });\n    });\n  };\n\n  _createClass(Observable, null, [{\n    key: SymbolSpecies,\n    get: function () {\n      return this;\n    }\n  }]);\n\n  return Observable;\n}();\n\nif (hasSymbols()) {\n  Object.defineProperty(Observable, Symbol('extensions'), {\n    value: {\n      symbol: SymbolObservable,\n      hostReportError: hostReportError\n    },\n    configurable: true\n  });\n}\n\nexport { Observable };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\n\t\t\tif (typeof Symbol.for === 'function') {\n\t\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t\t// META: It's a resource locator!\n\t\t\t\tresult = Symbol.for('https://github.com/benlesh/symbol-observable');\n\t\t\t} else {\n\t\t\t\t// Symbol.for didn't exist! The best we can do at this point is a totally \n\t\t\t\t// unique symbol. Note that the string argument here is a descriptor, not\n\t\t\t\t// an identifier. This symbol is unique.\n\t\t\t\tresult = Symbol('https://github.com/benlesh/symbol-observable');\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tSymbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import { Observable } from \"zen-observable-ts\";\n// This simplified polyfill attempts to follow the ECMAScript Observable\n// proposal (https://github.com/zenparsing/es-observable)\nimport \"symbol-observable\";\n// The zen-observable package defines Observable.prototype[Symbol.observable]\n// when Symbol is supported, but RxJS interop depends on also setting this fake\n// '@@observable' string as a polyfill for Symbol.observable.\nvar prototype = Observable.prototype;\nvar fakeObsSymbol = \"@@observable\";\nif (!prototype[fakeObsSymbol]) {\n    // @ts-expect-error\n    prototype[fakeObsSymbol] = function () {\n        return this;\n    };\n}\nexport { Observable };\n//# sourceMappingURL=Observable.js.map","export function preventUnhandledRejection(promise) {\n    promise.catch(function () { });\n    return promise;\n}\n//# sourceMappingURL=preventUnhandledRejection.js.map","var toString = Object.prototype.toString;\n/**\n * Deeply clones a value to create a new instance.\n */\nexport function cloneDeep(value) {\n    return cloneDeepHelper(value);\n}\nfunction cloneDeepHelper(val, seen) {\n    switch (toString.call(val)) {\n        case \"[object Array]\": {\n            seen = seen || new Map();\n            if (seen.has(val))\n                return seen.get(val);\n            var copy_1 = val.slice(0);\n            seen.set(val, copy_1);\n            copy_1.forEach(function (child, i) {\n                copy_1[i] = cloneDeepHelper(child, seen);\n            });\n            return copy_1;\n        }\n        case \"[object Object]\": {\n            seen = seen || new Map();\n            if (seen.has(val))\n                return seen.get(val);\n            // High fidelity polyfills of Object.create and Object.getPrototypeOf are\n            // possible in all JS environments, so we will assume they exist/work.\n            var copy_2 = Object.create(Object.getPrototypeOf(val));\n            seen.set(val, copy_2);\n            Object.keys(val).forEach(function (key) {\n                copy_2[key] = cloneDeepHelper(val[key], seen);\n            });\n            return copy_2;\n        }\n        default:\n            return val;\n    }\n}\n//# sourceMappingURL=cloneDeep.js.map","/**\n * @deprecated `iterateObserversSafely` will be removed with Apollo Client 4.0.\n * Please discontinue using this function.\n */\nexport function iterateObserversSafely(observers, method, argument) {\n    // In case observers is modified during iteration, we need to commit to the\n    // original elements, which also provides an opportunity to filter them down\n    // to just the observers with the given method.\n    var observersWithMethod = [];\n    observers.forEach(function (obs) { return obs[method] && observersWithMethod.push(obs); });\n    observersWithMethod.forEach(function (obs) { return obs[method](argument); });\n}\n//# sourceMappingURL=iteration.js.map","import { Observable } from \"./Observable.js\";\n// Like Observable.prototype.map, except that the mapping function can\n// optionally return a Promise (or be async).\n/**\n * @deprecated `asyncMap` will be removed in Apollo Client 4.0. This function is\n * safe to use in Apollo Client 3.x.\n *\n * **Recommended now**\n *\n * No action needed\n *\n * **When migrating**\n *\n * Prefer to use RxJS's built in helpers. Convert promises into observables\n * using the [`from`](https://rxjs.dev/api/index/function/from) function.\n */\nexport function asyncMap(observable, mapFn, catchFn) {\n    return new Observable(function (observer) {\n        var promiseQueue = {\n            // Normally we would initialize promiseQueue to Promise.resolve(), but\n            // in this case, for backwards compatibility, we need to be careful to\n            // invoke the first callback synchronously.\n            then: function (callback) {\n                return new Promise(function (resolve) { return resolve(callback()); });\n            },\n        };\n        function makeCallback(examiner, key) {\n            return function (arg) {\n                if (examiner) {\n                    var both = function () {\n                        // If the observer is closed, we don't want to continue calling the\n                        // mapping function - it's result will be swallowed anyways.\n                        return observer.closed ?\n                            /* will be swallowed */ 0\n                            : examiner(arg);\n                    };\n                    promiseQueue = promiseQueue.then(both, both).then(function (result) { return observer.next(result); }, function (error) { return observer.error(error); });\n                }\n                else {\n                    observer[key](arg);\n                }\n            };\n        }\n        var handler = {\n            next: makeCallback(mapFn, \"next\"),\n            error: makeCallback(catchFn, \"error\"),\n            complete: function () {\n                // no need to reassign `promiseQueue`, after `observer.complete`,\n                // the observer will be closed and short-circuit everything anyways\n                /*promiseQueue = */ promiseQueue.then(function () { return observer.complete(); });\n            },\n        };\n        var sub = observable.subscribe(handler);\n        return function () { return sub.unsubscribe(); };\n    });\n}\n//# sourceMappingURL=asyncMap.js.map","import { Observable } from \"./Observable.js\";\nimport { canUseSymbol } from \"../common/canUse.js\";\n// Generic implementations of Observable.prototype methods like map and\n// filter need to know how to create a new Observable from an Observable\n// subclass (like Concast or ObservableQuery). Those methods assume\n// (perhaps unwisely?) that they can call the subtype's constructor with a\n// Subscriber function, even though the subclass constructor might expect\n// different parameters. Defining this static Symbol.species property on\n// the subclass is a hint to generic Observable code to use the default\n// constructor instead of trying to do `new Subclass(observer => ...)`.\nexport function fixObservableSubclass(subclass) {\n    function set(key) {\n        // Object.defineProperty is necessary because the Symbol.species\n        // property is a getter by default in modern JS environments, so we\n        // can't assign to it with a normal assignment expression.\n        Object.defineProperty(subclass, key, { value: Observable });\n    }\n    if (canUseSymbol && Symbol.species) {\n        set(Symbol.species);\n    }\n    // The \"@@species\" string is used as a fake Symbol.species value in some\n    // polyfill systems (including the SymbolSpecies variable used by\n    // zen-observable), so we should set it as well, to be safe.\n    set(\"@@species\");\n    return subclass;\n}\n//# sourceMappingURL=subclassing.js.map","import { __extends } from \"tslib\";\nimport { Observable } from \"./Observable.js\";\nimport { iterateObserversSafely } from \"./iteration.js\";\nimport { fixObservableSubclass } from \"./subclassing.js\";\nfunction isPromiseLike(value) {\n    return value && typeof value.then === \"function\";\n}\n// A Concast<T> observable concatenates the given sources into a single\n// non-overlapping sequence of Ts, automatically unwrapping any promises,\n// and broadcasts the T elements of that sequence to any number of\n// subscribers, all without creating a bunch of intermediary Observable\n// wrapper objects.\n//\n// Even though any number of observers can subscribe to the Concast, each\n// source observable is guaranteed to receive at most one subscribe call,\n// and the results are multicast to all observers.\n//\n// In addition to broadcasting every next/error message to this.observers,\n// the Concast stores the most recent message using this.latest, so any\n// new observers can immediately receive the latest message, even if it\n// was originally delivered in the past. This behavior means we can assume\n// every active observer in this.observers has received the same most\n// recent message.\n//\n// With the exception of this.latest replay, a Concast is a \"hot\"\n// observable in the sense that it does not replay past results from the\n// beginning of time for each new observer.\n//\n// Could we have used some existing RxJS class instead? Concast<T> is\n// similar to a BehaviorSubject<T>, because it is multicast and redelivers\n// the latest next/error message to new subscribers. Unlike Subject<T>,\n// Concast<T> does not expose an Observer<T> interface (this.handlers is\n// intentionally private), since Concast<T> gets its inputs from the\n// concatenated sources. If we ever switch to RxJS, there may be some\n// value in reusing their code, but for now we use zen-observable, which\n// does not contain any Subject implementations.\nvar Concast = /** @class */ (function (_super) {\n    __extends(Concast, _super);\n    // Not only can the individual elements of the iterable be promises, but\n    // also the iterable itself can be wrapped in a promise.\n    function Concast(sources) {\n        var _this = _super.call(this, function (observer) {\n            _this.addObserver(observer);\n            return function () { return _this.removeObserver(observer); };\n        }) || this;\n        // Active observers receiving broadcast messages. Thanks to this.latest,\n        // we can assume all observers in this Set have received the same most\n        // recent message, though possibly at different times in the past.\n        _this.observers = new Set();\n        _this.promise = new Promise(function (resolve, reject) {\n            _this.resolve = resolve;\n            _this.reject = reject;\n        });\n        // Bound handler functions that can be reused for every internal\n        // subscription.\n        _this.handlers = {\n            next: function (result) {\n                if (_this.sub !== null) {\n                    _this.latest = [\"next\", result];\n                    _this.notify(\"next\", result);\n                    iterateObserversSafely(_this.observers, \"next\", result);\n                }\n            },\n            error: function (error) {\n                var sub = _this.sub;\n                if (sub !== null) {\n                    // Delay unsubscribing from the underlying subscription slightly,\n                    // so that immediately subscribing another observer can keep the\n                    // subscription active.\n                    if (sub)\n                        setTimeout(function () { return sub.unsubscribe(); });\n                    _this.sub = null;\n                    _this.latest = [\"error\", error];\n                    _this.reject(error);\n                    _this.notify(\"error\", error);\n                    iterateObserversSafely(_this.observers, \"error\", error);\n                }\n            },\n            complete: function () {\n                var _a = _this, sub = _a.sub, _b = _a.sources, sources = _b === void 0 ? [] : _b;\n                if (sub !== null) {\n                    // If complete is called before concast.start, this.sources may be\n                    // undefined, so we use a default value of [] for sources. That works\n                    // here because it falls into the if (!value) {...} block, which\n                    // appropriately terminates the Concast, even if this.sources might\n                    // eventually have been initialized to a non-empty array.\n                    var value = sources.shift();\n                    if (!value) {\n                        if (sub)\n                            setTimeout(function () { return sub.unsubscribe(); });\n                        _this.sub = null;\n                        if (_this.latest && _this.latest[0] === \"next\") {\n                            _this.resolve(_this.latest[1]);\n                        }\n                        else {\n                            _this.resolve();\n                        }\n                        _this.notify(\"complete\");\n                        // We do not store this.latest = [\"complete\"], because doing so\n                        // discards useful information about the previous next (or\n                        // error) message. Instead, if new observers subscribe after\n                        // this Concast has completed, they will receive the final\n                        // 'next' message (unless there was an error) immediately\n                        // followed by a 'complete' message (see addObserver).\n                        iterateObserversSafely(_this.observers, \"complete\");\n                    }\n                    else if (isPromiseLike(value)) {\n                        value.then(function (obs) { return (_this.sub = obs.subscribe(_this.handlers)); }, _this.handlers.error);\n                    }\n                    else {\n                        _this.sub = value.subscribe(_this.handlers);\n                    }\n                }\n            },\n        };\n        _this.nextResultListeners = new Set();\n        // A public way to abort observation and broadcast.\n        _this.cancel = function (reason) {\n            _this.reject(reason);\n            _this.sources = [];\n            _this.handlers.error(reason);\n        };\n        // Suppress rejection warnings for this.promise, since it's perfectly\n        // acceptable to pay no attention to this.promise if you're consuming\n        // the results through the normal observable API.\n        _this.promise.catch(function (_) { });\n        // If someone accidentally tries to create a Concast using a subscriber\n        // function, recover by creating an Observable from that subscriber and\n        // using it as the source.\n        if (typeof sources === \"function\") {\n            sources = [new Observable(sources)];\n        }\n        if (isPromiseLike(sources)) {\n            sources.then(function (iterable) { return _this.start(iterable); }, _this.handlers.error);\n        }\n        else {\n            _this.start(sources);\n        }\n        return _this;\n    }\n    Concast.prototype.start = function (sources) {\n        if (this.sub !== void 0)\n            return;\n        // In practice, sources is most often simply an Array of observables.\n        // TODO Consider using sources[Symbol.iterator]() to take advantage\n        // of the laziness of non-Array iterables.\n        this.sources = Array.from(sources);\n        // Calling this.handlers.complete() kicks off consumption of the first\n        // source observable. It's tempting to do this step lazily in\n        // addObserver, but this.promise can be accessed without calling\n        // addObserver, so consumption needs to begin eagerly.\n        this.handlers.complete();\n    };\n    Concast.prototype.deliverLastMessage = function (observer) {\n        if (this.latest) {\n            var nextOrError = this.latest[0];\n            var method = observer[nextOrError];\n            if (method) {\n                method.call(observer, this.latest[1]);\n            }\n            // If the subscription is already closed, and the last message was\n            // a 'next' message, simulate delivery of the final 'complete'\n            // message again.\n            if (this.sub === null && nextOrError === \"next\" && observer.complete) {\n                observer.complete();\n            }\n        }\n    };\n    Concast.prototype.addObserver = function (observer) {\n        if (!this.observers.has(observer)) {\n            // Immediately deliver the most recent message, so we can always\n            // be sure all observers have the latest information.\n            this.deliverLastMessage(observer);\n            this.observers.add(observer);\n        }\n    };\n    Concast.prototype.removeObserver = function (observer) {\n        if (this.observers.delete(observer) && this.observers.size < 1) {\n            // In case there are still any listeners in this.nextResultListeners, and\n            // no error or completion has been broadcast yet, make sure those\n            // observers have a chance to run and then remove themselves from\n            // this.observers.\n            this.handlers.complete();\n        }\n    };\n    Concast.prototype.notify = function (method, arg) {\n        var nextResultListeners = this.nextResultListeners;\n        if (nextResultListeners.size) {\n            // Replacing this.nextResultListeners first ensures it does not grow while\n            // we are iterating over it, potentially leading to infinite loops.\n            this.nextResultListeners = new Set();\n            nextResultListeners.forEach(function (listener) { return listener(method, arg); });\n        }\n    };\n    // We need a way to run callbacks just *before* the next result (or error or\n    // completion) is delivered by this Concast, so we can be sure any code that\n    // runs as a result of delivering that result/error observes the effects of\n    // running the callback(s). It was tempting to reuse the Observer type instead\n    // of introducing NextResultListener, but that messes with the sizing and\n    // maintenance of this.observers, and ends up being more code overall.\n    Concast.prototype.beforeNext = function (callback) {\n        var called = false;\n        this.nextResultListeners.add(function (method, arg) {\n            if (!called) {\n                called = true;\n                callback(method, arg);\n            }\n        });\n    };\n    return Concast;\n}(Observable));\nexport { Concast };\n// Necessary because the Concast constructor has a different signature\n// than the Observable constructor.\nfixObservableSubclass(Concast);\n//# sourceMappingURL=Concast.js.map","import { isNonNullObject } from \"./objects.js\";\nimport { isNonEmptyArray } from \"./arrays.js\";\nimport { DeepMerger } from \"./mergeDeep.js\";\nexport function isExecutionPatchIncrementalResult(value) {\n    return \"incremental\" in value;\n}\nexport function isExecutionPatchInitialResult(value) {\n    return \"hasNext\" in value && \"data\" in value;\n}\nexport function isExecutionPatchResult(value) {\n    return (isExecutionPatchIncrementalResult(value) ||\n        isExecutionPatchInitialResult(value));\n}\n// This function detects an Apollo payload result before it is transformed\n// into a FetchResult via HttpLink; it cannot detect an ApolloPayloadResult\n// once it leaves the link chain.\nexport function isApolloPayloadResult(value) {\n    return isNonNullObject(value) && \"payload\" in value;\n}\nexport function mergeIncrementalData(prevResult, result) {\n    var mergedData = prevResult;\n    var merger = new DeepMerger();\n    if (isExecutionPatchIncrementalResult(result) &&\n        isNonEmptyArray(result.incremental)) {\n        result.incremental.forEach(function (_a) {\n            var data = _a.data, path = _a.path;\n            for (var i = path.length - 1; i >= 0; --i) {\n                var key = path[i];\n                var isNumericKey = !isNaN(+key);\n                var parent_1 = isNumericKey ? [] : {};\n                parent_1[key] = data;\n                data = parent_1;\n            }\n            mergedData = merger.merge(mergedData, data);\n        });\n    }\n    return mergedData;\n}\n//# sourceMappingURL=incrementalResult.js.map","import { isNonEmptyArray } from \"./arrays.js\";\nimport { isExecutionPatchIncrementalResult } from \"./incrementalResult.js\";\nexport function graphQLResultHasError(result) {\n    var errors = getGraphQLErrorsFromResult(result);\n    return isNonEmptyArray(errors);\n}\nexport function getGraphQLErrorsFromResult(result) {\n    var graphQLErrors = isNonEmptyArray(result.errors) ? result.errors.slice(0) : [];\n    if (isExecutionPatchIncrementalResult(result) &&\n        isNonEmptyArray(result.incremental)) {\n        result.incremental.forEach(function (incrementalResult) {\n            if (incrementalResult.errors) {\n                graphQLErrors.push.apply(graphQLErrors, incrementalResult.errors);\n            }\n        });\n    }\n    return graphQLErrors;\n}\n//# sourceMappingURL=errorHandling.js.map","/**\n * Merges the provided objects shallowly and removes\n * all properties with an `undefined` value\n */\nexport function compact() {\n    var objects = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        objects[_i] = arguments[_i];\n    }\n    var result = Object.create(null);\n    objects.forEach(function (obj) {\n        if (!obj)\n            return;\n        Object.keys(obj).forEach(function (key) {\n            var value = obj[key];\n            if (value !== void 0) {\n                result[key] = value;\n            }\n        });\n    });\n    return result;\n}\n//# sourceMappingURL=compact.js.map","import { __assign } from \"tslib\";\nimport { compact } from \"./compact.js\";\nexport function mergeOptions(defaults, options) {\n    return compact(defaults, options, options.variables && {\n        variables: compact(__assign(__assign({}, (defaults && defaults.variables)), options.variables)),\n    });\n}\n//# sourceMappingURL=mergeOptions.js.map","import { isPlainObject } from \"./objects.js\";\nexport function omitDeep(value, key) {\n    return __omitDeep(value, key);\n}\nfunction __omitDeep(value, key, known) {\n    if (known === void 0) { known = new Map(); }\n    if (known.has(value)) {\n        return known.get(value);\n    }\n    var modified = false;\n    if (Array.isArray(value)) {\n        var array_1 = [];\n        known.set(value, array_1);\n        value.forEach(function (value, index) {\n            var result = __omitDeep(value, key, known);\n            modified || (modified = result !== value);\n            array_1[index] = result;\n        });\n        if (modified) {\n            return array_1;\n        }\n    }\n    else if (isPlainObject(value)) {\n        var obj_1 = Object.create(Object.getPrototypeOf(value));\n        known.set(value, obj_1);\n        Object.keys(value).forEach(function (k) {\n            if (k === key) {\n                modified = true;\n                return;\n            }\n            var result = __omitDeep(value[k], key, known);\n            modified || (modified = result !== value[k]);\n            obj_1[k] = result;\n        });\n        if (modified) {\n            return obj_1;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=omitDeep.js.map","import { omitDeep } from \"./omitDeep.js\";\nexport function stripTypename(value) {\n    return omitDeep(value, \"__typename\");\n}\n//# sourceMappingURL=stripTypename.js.map","var _a;\nimport { __spreadArray } from \"tslib\";\nimport { Slot } from \"optimism\";\nimport { invariant, global as untypedGlobal } from \"../globals/index.js\";\nvar muteAllDeprecations = Symbol.for(\"apollo.deprecations\");\nvar deprecationsSlot = Symbol.for(\"apollo.deprecations.slot\");\nvar global = untypedGlobal;\nvar slot = ((_a = global[deprecationsSlot]) !== null && _a !== void 0 ? _a : (global[deprecationsSlot] = new Slot()));\nfunction isMuted(name) {\n    return global[muteAllDeprecations] || (slot.getValue() || []).includes(name);\n}\nexport function muteDeprecations(name) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    return slot.withValue.apply(slot, __spreadArray([Array.isArray(name) ? name : [name]], args, false));\n}\nexport function warnRemovedOption(options, name, callSite, recommendation) {\n    if (recommendation === void 0) { recommendation = \"Please remove this option.\"; }\n    warnDeprecated(name, function () {\n        if (name in options) {\n            globalThis.__DEV__ !== false && invariant.warn(103, callSite, name, recommendation);\n        }\n    });\n}\nexport function warnDeprecated(name, cb) {\n    if (!isMuted(name)) {\n        cb();\n    }\n}\n//# sourceMappingURL=index.js.map","import { Observable } from \"../../utilities/index.js\";\n/**\n * @deprecated `fromError` will be removed in Apollo Client 4.0. This is safe\n * to use in 3.x.\n *\n * **Recommended now**\n *\n * No action needed\n *\n * **When upgrading**\n *\n * Use RxJS's [`throwError`](https://rxjs.dev/api/index/function/throwError) function.\n *\n * ```ts\n * const observable = throwError(() => new Error(...));\n * ```\n */\nexport function fromError(errorValue) {\n    return new Observable(function (observer) {\n        observer.error(errorValue);\n    });\n}\n//# sourceMappingURL=fromError.js.map","/**\n * @deprecated `throwServerError` will be removed in Apollo Client 4.0. This is\n * safe to use in Apollo Client 3.x.\n *\n * **Recommended now**\n *\n * No action needed\n *\n * **When migrating**\n *\n * `ServerError` is a subclass of `Error`. To throw a server error, use\n * `throw new ServerError(...)` instead.\n *\n * ```ts\n * throw new ServerError(\"error message\", { response, result });\n * ```\n */\nexport var throwServerError = function (response, result, message) {\n    var error = new Error(message);\n    error.name = \"ServerError\";\n    error.response = response;\n    error.statusCode = response.status;\n    error.result = result;\n    throw error;\n};\n//# sourceMappingURL=throwServerError.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport function validateOperation(operation) {\n    var OPERATION_FIELDS = [\n        \"query\",\n        \"operationName\",\n        \"variables\",\n        \"extensions\",\n        \"context\",\n    ];\n    for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) {\n        var key = _a[_i];\n        if (OPERATION_FIELDS.indexOf(key) < 0) {\n            throw newInvariantError(58, key);\n        }\n    }\n    return operation;\n}\n//# sourceMappingURL=validateOperation.js.map","import { __assign } from \"tslib\";\nexport function createOperation(starting, operation) {\n    var context = __assign({}, starting);\n    var setContext = function (next) {\n        if (typeof next === \"function\") {\n            context = __assign(__assign({}, context), next(context));\n        }\n        else {\n            context = __assign(__assign({}, context), next);\n        }\n    };\n    var getContext = function () { return (__assign({}, context)); };\n    Object.defineProperty(operation, \"setContext\", {\n        enumerable: false,\n        value: setContext,\n    });\n    Object.defineProperty(operation, \"getContext\", {\n        enumerable: false,\n        value: getContext,\n    });\n    return operation;\n}\n//# sourceMappingURL=createOperation.js.map","import { getOperationName } from \"../../utilities/index.js\";\nexport function transformOperation(operation) {\n    var transformedOperation = {\n        variables: operation.variables || {},\n        extensions: operation.extensions || {},\n        operationName: operation.operationName,\n        query: operation.query,\n    };\n    // Best guess at an operation name\n    if (!transformedOperation.operationName) {\n        transformedOperation.operationName =\n            typeof transformedOperation.query !== \"string\" ?\n                getOperationName(transformedOperation.query) || undefined\n                : \"\";\n    }\n    return transformedOperation;\n}\n//# sourceMappingURL=transformOperation.js.map","import { __assign } from \"tslib\";\nimport { visit } from \"graphql\";\nexport function filterOperationVariables(variables, query) {\n    var result = __assign({}, variables);\n    var unusedNames = new Set(Object.keys(variables));\n    visit(query, {\n        Variable: function (node, _key, parent) {\n            // A variable type definition at the top level of a query is not\n            // enough to silence server-side errors about the variable being\n            // unused, so variable definitions do not count as usage.\n            // https://spec.graphql.org/draft/#sec-All-Variables-Used\n            if (parent &&\n                parent.kind !== \"VariableDefinition\") {\n                unusedNames.delete(node.name.value);\n            }\n        },\n    });\n    unusedNames.forEach(function (name) {\n        delete result[name];\n    });\n    return result;\n}\n//# sourceMappingURL=filterOperationVariables.js.map","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { validateOperation, createOperation, transformOperation, } from \"../utils/index.js\";\nimport { warnDeprecated } from \"../../utilities/index.js\";\nfunction passthrough(op, forward) {\n    return (forward ? forward(op) : Observable.of());\n}\nfunction toLink(handler) {\n    return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\nfunction isTerminating(link) {\n    return link.request.length <= 1;\n}\nvar ApolloLink = /** @class */ (function () {\n    function ApolloLink(request) {\n        if (request)\n            this.request = request;\n    }\n    ApolloLink.empty = function () {\n        return new ApolloLink(function () { return Observable.of(); });\n    };\n    ApolloLink.from = function (links) {\n        if (links.length === 0)\n            return ApolloLink.empty();\n        return links.map(toLink).reduce(function (x, y) { return x.concat(y); });\n    };\n    ApolloLink.split = function (test, left, right) {\n        var leftLink = toLink(left);\n        var rightLink = toLink(right || new ApolloLink(passthrough));\n        var ret;\n        if (isTerminating(leftLink) && isTerminating(rightLink)) {\n            ret = new ApolloLink(function (operation) {\n                return test(operation) ?\n                    leftLink.request(operation) || Observable.of()\n                    : rightLink.request(operation) || Observable.of();\n            });\n        }\n        else {\n            ret = new ApolloLink(function (operation, forward) {\n                return test(operation) ?\n                    leftLink.request(operation, forward) || Observable.of()\n                    : rightLink.request(operation, forward) || Observable.of();\n            });\n        }\n        return Object.assign(ret, { left: leftLink, right: rightLink });\n    };\n    ApolloLink.execute = function (link, operation) {\n        return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());\n    };\n    ApolloLink.concat = function (first, second) {\n        var firstLink = toLink(first);\n        if (isTerminating(firstLink)) {\n            globalThis.__DEV__ !== false && invariant.warn(47, firstLink);\n            return firstLink;\n        }\n        var nextLink = toLink(second);\n        var ret;\n        if (isTerminating(nextLink)) {\n            ret = new ApolloLink(function (operation) {\n                return firstLink.request(operation, function (op) { return nextLink.request(op) || Observable.of(); }) || Observable.of();\n            });\n        }\n        else {\n            ret = new ApolloLink(function (operation, forward) {\n                return (firstLink.request(operation, function (op) {\n                    return nextLink.request(op, forward) || Observable.of();\n                }) || Observable.of());\n            });\n        }\n        return Object.assign(ret, { left: firstLink, right: nextLink });\n    };\n    ApolloLink.prototype.split = function (test, left, right) {\n        return this.concat(ApolloLink.split(test, left, right || new ApolloLink(passthrough)));\n    };\n    ApolloLink.prototype.concat = function (next) {\n        return ApolloLink.concat(this, next);\n    };\n    ApolloLink.prototype.request = function (operation, forward) {\n        throw newInvariantError(48);\n    };\n    /**\n     * @deprecated `onError` will be removed with Apollo Client 4.0. Please\n     * discontinue using this method.\n     */\n    ApolloLink.prototype.onError = function (error, observer) {\n        if (globalThis.__DEV__ !== false) {\n            warnDeprecated(\"onError\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(49);\n            });\n        }\n        if (observer && observer.error) {\n            observer.error(error);\n            // Returning false indicates that observer.error does not need to be\n            // called again, since it was already called (on the previous line).\n            // Calling observer.error again would not cause any real problems,\n            // since only the first call matters, but custom onError functions\n            // might have other reasons for wanting to prevent the default\n            // behavior by returning false.\n            return false;\n        }\n        // Throw errors will be passed to observer.error.\n        throw error;\n    };\n    /**\n     * @deprecated `setOnError` will be removed with Apollo Client 4.0. Please\n     * discontinue using this method.\n     */\n    ApolloLink.prototype.setOnError = function (fn) {\n        if (globalThis.__DEV__ !== false) {\n            globalThis.__DEV__ !== false && invariant.warn(50);\n        }\n        this.onError = fn;\n        return this;\n    };\n    return ApolloLink;\n}());\nexport { ApolloLink };\n//# sourceMappingURL=ApolloLink.js.map","import { ApolloLink } from \"./ApolloLink.js\";\nexport var from = ApolloLink.from;\n//# sourceMappingURL=from.js.map","import { ApolloLink } from \"./ApolloLink.js\";\nexport var execute = ApolloLink.execute;\n//# sourceMappingURL=execute.js.map","/**\n * Original source:\n * https://github.com/kmalakoff/response-iterator/blob/master/src/iterators/async.ts\n */\nexport default function asyncIterator(source) {\n    var _a;\n    var iterator = source[Symbol.asyncIterator]();\n    return _a = {\n            next: function () {\n                return iterator.next();\n            }\n        },\n        _a[Symbol.asyncIterator] = function () {\n            return this;\n        },\n        _a;\n}\n//# sourceMappingURL=async.js.map","/**\n * Original source:\n * https://github.com/kmalakoff/response-iterator/blob/master/src/iterators/nodeStream.ts\n */\nimport { canUseAsyncIteratorSymbol } from \"../../../utilities/index.js\";\nexport default function nodeStreamIterator(stream) {\n    var cleanup = null;\n    var error = null;\n    var done = false;\n    var data = [];\n    var waiting = [];\n    function onData(chunk) {\n        if (error)\n            return;\n        if (waiting.length) {\n            var shiftedArr = waiting.shift();\n            if (Array.isArray(shiftedArr) && shiftedArr[0]) {\n                return shiftedArr[0]({ value: chunk, done: false });\n            }\n        }\n        data.push(chunk);\n    }\n    function onError(err) {\n        error = err;\n        var all = waiting.slice();\n        all.forEach(function (pair) {\n            pair[1](err);\n        });\n        !cleanup || cleanup();\n    }\n    function onEnd() {\n        done = true;\n        var all = waiting.slice();\n        all.forEach(function (pair) {\n            pair[0]({ value: undefined, done: true });\n        });\n        !cleanup || cleanup();\n    }\n    cleanup = function () {\n        cleanup = null;\n        stream.removeListener(\"data\", onData);\n        stream.removeListener(\"error\", onError);\n        stream.removeListener(\"end\", onEnd);\n        stream.removeListener(\"finish\", onEnd);\n        stream.removeListener(\"close\", onEnd);\n    };\n    stream.on(\"data\", onData);\n    stream.on(\"error\", onError);\n    stream.on(\"end\", onEnd);\n    stream.on(\"finish\", onEnd);\n    stream.on(\"close\", onEnd);\n    function getNext() {\n        return new Promise(function (resolve, reject) {\n            if (error)\n                return reject(error);\n            if (data.length)\n                return resolve({ value: data.shift(), done: false });\n            if (done)\n                return resolve({ value: undefined, done: true });\n            waiting.push([resolve, reject]);\n        });\n    }\n    var iterator = {\n        next: function () {\n            return getNext();\n        },\n    };\n    if (canUseAsyncIteratorSymbol) {\n        iterator[Symbol.asyncIterator] = function () {\n            return this;\n        };\n    }\n    return iterator;\n}\n//# sourceMappingURL=nodeStream.js.map","/**\n * Original source:\n * https://github.com/kmalakoff/response-iterator/blob/master/src/iterators/promise.ts\n */\nimport { canUseAsyncIteratorSymbol } from \"../../../utilities/index.js\";\nexport default function promiseIterator(promise) {\n    var resolved = false;\n    var iterator = {\n        next: function () {\n            if (resolved)\n                return Promise.resolve({\n                    value: undefined,\n                    done: true,\n                });\n            resolved = true;\n            return new Promise(function (resolve, reject) {\n                promise\n                    .then(function (value) {\n                    resolve({ value: value, done: false });\n                })\n                    .catch(reject);\n            });\n        },\n    };\n    if (canUseAsyncIteratorSymbol) {\n        iterator[Symbol.asyncIterator] = function () {\n            return this;\n        };\n    }\n    return iterator;\n}\n//# sourceMappingURL=promise.js.map","/**\n * Original source:\n * https://github.com/kmalakoff/response-iterator/blob/master/src/iterators/reader.ts\n */\nimport { canUseAsyncIteratorSymbol } from \"../../../utilities/index.js\";\nexport default function readerIterator(reader) {\n    var iterator = {\n        next: function () {\n            return reader.read();\n        },\n    };\n    if (canUseAsyncIteratorSymbol) {\n        iterator[Symbol.asyncIterator] = function () {\n            return this;\n        };\n    }\n    return iterator;\n}\n//# sourceMappingURL=reader.js.map","/**\n * Original source:\n * https://github.com/kmalakoff/response-iterator/blob/master/src/index.ts\n */\nimport { canUseAsyncIteratorSymbol } from \"../../utilities/index.js\";\nimport asyncIterator from \"./iterators/async.js\";\nimport nodeStreamIterator from \"./iterators/nodeStream.js\";\nimport promiseIterator from \"./iterators/promise.js\";\nimport readerIterator from \"./iterators/reader.js\";\nfunction isNodeResponse(value) {\n    return !!value.body;\n}\nfunction isReadableStream(value) {\n    return !!value.getReader;\n}\nfunction isAsyncIterableIterator(value) {\n    return !!(canUseAsyncIteratorSymbol &&\n        value[Symbol.asyncIterator]);\n}\nfunction isStreamableBlob(value) {\n    return !!value.stream;\n}\nfunction isBlob(value) {\n    return !!value.arrayBuffer;\n}\nfunction isNodeReadableStream(value) {\n    return !!value.pipe;\n}\nexport function responseIterator(response) {\n    var body = response;\n    if (isNodeResponse(response))\n        body = response.body;\n    if (isAsyncIterableIterator(body))\n        return asyncIterator(body);\n    if (isReadableStream(body))\n        return readerIterator(body.getReader());\n    // this errors without casting to ReadableStream<T>\n    // because Blob.stream() returns a NodeJS ReadableStream\n    if (isStreamableBlob(body)) {\n        return readerIterator(body.stream().getReader());\n    }\n    if (isBlob(body))\n        return promiseIterator(body.arrayBuffer());\n    if (isNodeReadableStream(body))\n        return nodeStreamIterator(body);\n    throw new Error(\"Unknown body type for responseIterator. Please pass a streamable response.\");\n}\n//# sourceMappingURL=responseIterator.js.map","import { __extends, __spreadArray } from \"tslib\";\nimport \"../utilities/globals/index.js\";\nimport { isNonNullObject } from \"../utilities/index.js\";\n// This Symbol allows us to pass transport-specific errors from the link chain\n// into QueryManager/client internals without risking a naming collision within\n// extensions (which implementers can use as they see fit).\nexport var PROTOCOL_ERRORS_SYMBOL = Symbol();\nexport function graphQLResultHasProtocolErrors(result) {\n    if (result.extensions) {\n        return Array.isArray(result.extensions[PROTOCOL_ERRORS_SYMBOL]);\n    }\n    return false;\n}\n/**\n * @deprecated `isApolloError` will be removed with Apollo Client 4.0. This\n * function is safe to use in Apollo Client 3.x.\n *\n * **Recommended now**\n *\n * No action needed\n *\n * **When migrating**\n *\n * Errors are no longer wrapped in Apollo Client 4.0. To check if an error is an\n * instance of an error provided by Apollo Client, use the static `.is` method\n * on the error class you want to test against.\n *\n * ```ts\n * // Test if an error is an instance of `CombinedGraphQLErrors`\n * const isGraphQLErrors = CombinedGraphQLErrors.is(error);\n * ```\n */\nexport function isApolloError(err) {\n    return err.hasOwnProperty(\"graphQLErrors\");\n}\n// Sets the error message on this error according to the\n// the GraphQL and network errors that are present.\n// If the error message has already been set through the\n// constructor or otherwise, this function is a nop.\nvar generateErrorMessage = function (err) {\n    var errors = __spreadArray(__spreadArray(__spreadArray([], err.graphQLErrors, true), err.clientErrors, true), err.protocolErrors, true);\n    if (err.networkError)\n        errors.push(err.networkError);\n    return (errors\n        // The rest of the code sometimes unsafely types non-Error objects as GraphQLErrors\n        .map(function (err) {\n        return (isNonNullObject(err) && err.message) || \"Error message not found.\";\n    })\n        .join(\"\\n\"));\n};\nvar ApolloError = /** @class */ (function (_super) {\n    __extends(ApolloError, _super);\n    // Constructs an instance of ApolloError given serialized GraphQL errors,\n    // client errors, protocol errors or network errors.\n    // Note that one of these has to be a valid\n    // value or the constructed error will be meaningless.\n    function ApolloError(_a) {\n        var graphQLErrors = _a.graphQLErrors, protocolErrors = _a.protocolErrors, clientErrors = _a.clientErrors, networkError = _a.networkError, errorMessage = _a.errorMessage, extraInfo = _a.extraInfo;\n        var _this = _super.call(this, errorMessage) || this;\n        _this.name = \"ApolloError\";\n        _this.graphQLErrors = graphQLErrors || [];\n        _this.protocolErrors = protocolErrors || [];\n        _this.clientErrors = clientErrors || [];\n        _this.networkError = networkError || null;\n        _this.message = errorMessage || generateErrorMessage(_this);\n        _this.extraInfo = extraInfo;\n        _this.cause =\n            __spreadArray(__spreadArray(__spreadArray([\n                networkError\n            ], (graphQLErrors || []), true), (protocolErrors || []), true), (clientErrors || []), true).find(function (e) { return !!e; }) || null;\n        // We're not using `Object.setPrototypeOf` here as it isn't fully\n        // supported on Android (see issue #3236).\n        _this.__proto__ = ApolloError.prototype;\n        return _this;\n    }\n    return ApolloError;\n}(Error));\nexport { ApolloError };\n//# sourceMappingURL=index.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { responseIterator } from \"./responseIterator.js\";\nimport { throwServerError } from \"../utils/index.js\";\nimport { PROTOCOL_ERRORS_SYMBOL } from \"../../errors/index.js\";\nimport { isApolloPayloadResult } from \"../../utilities/common/incrementalResult.js\";\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function readMultipartBody(response, nextValue) {\n    return __awaiter(this, void 0, void 0, function () {\n        var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _a, value, done, chunk, searchFrom, bi, message, i, headers, contentType_1, body, result, next;\n        var _b, _c;\n        var _d;\n        return __generator(this, function (_e) {\n            switch (_e.label) {\n                case 0:\n                    if (TextDecoder === undefined) {\n                        throw new Error(\"TextDecoder must be defined in the environment: please import a polyfill.\");\n                    }\n                    decoder = new TextDecoder(\"utf-8\");\n                    contentType = (_d = response.headers) === null || _d === void 0 ? void 0 : _d.get(\"content-type\");\n                    delimiter = \"boundary=\";\n                    boundaryVal = (contentType === null || contentType === void 0 ? void 0 : contentType.includes(delimiter)) ?\n                        contentType === null || contentType === void 0 ? void 0 : contentType.substring((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(delimiter)) + delimiter.length).replace(/['\"]/g, \"\").replace(/\\;(.*)/gm, \"\").trim()\n                        : \"-\";\n                    boundary = \"\\r\\n--\".concat(boundaryVal);\n                    buffer = \"\";\n                    iterator = responseIterator(response);\n                    running = true;\n                    _e.label = 1;\n                case 1:\n                    if (!running) return [3 /*break*/, 3];\n                    return [4 /*yield*/, iterator.next()];\n                case 2:\n                    _a = _e.sent(), value = _a.value, done = _a.done;\n                    chunk = typeof value === \"string\" ? value : decoder.decode(value);\n                    searchFrom = buffer.length - boundary.length + 1;\n                    running = !done;\n                    buffer += chunk;\n                    bi = buffer.indexOf(boundary, searchFrom);\n                    while (bi > -1) {\n                        message = void 0;\n                        _b = [\n                            buffer.slice(0, bi),\n                            buffer.slice(bi + boundary.length),\n                        ], message = _b[0], buffer = _b[1];\n                        i = message.indexOf(\"\\r\\n\\r\\n\");\n                        headers = parseHeaders(message.slice(0, i));\n                        contentType_1 = headers[\"content-type\"];\n                        if (contentType_1 &&\n                            contentType_1.toLowerCase().indexOf(\"application/json\") === -1) {\n                            throw new Error(\"Unsupported patch content type: application/json is required.\");\n                        }\n                        body = message.slice(i);\n                        if (body) {\n                            result = parseJsonBody(response, body);\n                            if (Object.keys(result).length > 1 ||\n                                \"data\" in result ||\n                                \"incremental\" in result ||\n                                \"errors\" in result ||\n                                \"payload\" in result) {\n                                if (isApolloPayloadResult(result)) {\n                                    next = {};\n                                    if (\"payload\" in result) {\n                                        if (Object.keys(result).length === 1 && result.payload === null) {\n                                            return [2 /*return*/];\n                                        }\n                                        next = __assign({}, result.payload);\n                                    }\n                                    if (\"errors\" in result) {\n                                        next = __assign(__assign({}, next), { extensions: __assign(__assign({}, (\"extensions\" in next ? next.extensions : null)), (_c = {}, _c[PROTOCOL_ERRORS_SYMBOL] = result.errors, _c)) });\n                                    }\n                                    nextValue(next);\n                                }\n                                else {\n                                    // for the last chunk with only `hasNext: false`\n                                    // we don't need to call observer.next as there is no data/errors\n                                    nextValue(result);\n                                }\n                            }\n                            else if (\n                            // If the chunk contains only a \"hasNext: false\", we can call\n                            // observer.complete() immediately.\n                            Object.keys(result).length === 1 &&\n                                \"hasNext\" in result &&\n                                !result.hasNext) {\n                                return [2 /*return*/];\n                            }\n                        }\n                        bi = buffer.indexOf(boundary);\n                    }\n                    return [3 /*break*/, 1];\n                case 3: return [2 /*return*/];\n            }\n        });\n    });\n}\nexport function parseHeaders(headerText) {\n    var headersInit = {};\n    headerText.split(\"\\n\").forEach(function (line) {\n        var i = line.indexOf(\":\");\n        if (i > -1) {\n            // normalize headers to lowercase\n            var name_1 = line.slice(0, i).trim().toLowerCase();\n            var value = line.slice(i + 1).trim();\n            headersInit[name_1] = value;\n        }\n    });\n    return headersInit;\n}\nexport function parseJsonBody(response, bodyText) {\n    if (response.status >= 300) {\n        // Network error\n        var getResult = function () {\n            try {\n                return JSON.parse(bodyText);\n            }\n            catch (err) {\n                return bodyText;\n            }\n        };\n        throwServerError(response, getResult(), \"Response not successful: Received status code \".concat(response.status));\n    }\n    try {\n        return JSON.parse(bodyText);\n    }\n    catch (err) {\n        var parseError = err;\n        parseError.name = \"ServerParseError\";\n        parseError.response = response;\n        parseError.statusCode = response.status;\n        parseError.bodyText = bodyText;\n        throw parseError;\n    }\n}\nexport function handleError(err, observer) {\n    // if it is a network error, BUT there is graphql result info fire\n    // the next observer before calling error this gives apollo-client\n    // (and react-apollo) the `graphqlErrors` and `networkErrors` to\n    // pass to UI this should only happen if we *also* have data as\n    // part of the response key per the spec\n    if (err.result && err.result.errors && err.result.data) {\n        // if we don't call next, the UI can only show networkError\n        // because AC didn't get any graphqlErrors this is graphql\n        // execution result info (i.e errors and possibly data) this is\n        // because there is no formal spec how errors should translate to\n        // http status codes. So an auth error (401) could have both data\n        // from a public field, errors from a private field, and a status\n        // of 401\n        // {\n        //  user { // this will have errors\n        //    firstName\n        //  }\n        //  products { // this is public so will have data\n        //    cost\n        //  }\n        // }\n        //\n        // the result of above *could* look like this:\n        // {\n        //   data: { products: [{ cost: \"$10\" }] },\n        //   errors: [{\n        //      message: 'your session has timed out',\n        //      path: []\n        //   }]\n        // }\n        // status code of above would be a 401\n        // in the UI you want to show data where you can, errors as data where you can\n        // and use correct http status codes\n        observer.next(err.result);\n    }\n    observer.error(err);\n}\nexport function parseAndCheckHttpResponse(operations) {\n    return function (response) {\n        return response\n            .text()\n            .then(function (bodyText) { return parseJsonBody(response, bodyText); })\n            .then(function (result) {\n            if (!Array.isArray(result) &&\n                !hasOwnProperty.call(result, \"data\") &&\n                !hasOwnProperty.call(result, \"errors\")) {\n                // Data error\n                throwServerError(response, result, \"Server response was missing for query '\".concat(Array.isArray(operations) ?\n                    operations.map(function (op) { return op.operationName; })\n                    : operations.operationName, \"'.\"));\n            }\n            return result;\n        });\n    };\n}\n//# sourceMappingURL=parseAndCheckHttpResponse.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport var serializeFetchParameter = function (p, label) {\n    var serialized;\n    try {\n        serialized = JSON.stringify(p);\n    }\n    catch (e) {\n        var parseError = newInvariantError(54, label, e.message);\n        parseError.parseError = e;\n        throw parseError;\n    }\n    return serialized;\n};\n//# sourceMappingURL=serializeFetchParameter.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { print } from \"../../utilities/index.js\";\nvar defaultHttpOptions = {\n    includeQuery: true,\n    includeExtensions: false,\n    preserveHeaderCase: false,\n};\nvar defaultHeaders = {\n    // headers are case insensitive (https://stackoverflow.com/a/5259004)\n    accept: \"*/*\",\n    // The content-type header describes the type of the body of the request, and\n    // so it typically only is sent with requests that actually have bodies. One\n    // could imagine that Apollo Client would remove this header when constructing\n    // a GET request (which has no body), but we historically have not done that.\n    // This means that browsers will preflight all Apollo Client requests (even\n    // GET requests). Apollo Server's CSRF prevention feature (introduced in\n    // AS3.7) takes advantage of this fact and does not block requests with this\n    // header. If you want to drop this header from GET requests, then you should\n    // probably replace it with a `apollo-require-preflight` header, or servers\n    // with CSRF prevention enabled might block your GET request. See\n    // https://www.apollographql.com/docs/apollo-server/security/cors/#preventing-cross-site-request-forgery-csrf\n    // for more details.\n    \"content-type\": \"application/json\",\n};\nvar defaultOptions = {\n    method: \"POST\",\n};\nexport var fallbackHttpConfig = {\n    http: defaultHttpOptions,\n    headers: defaultHeaders,\n    options: defaultOptions,\n};\nexport var defaultPrinter = function (ast, printer) { return printer(ast); };\nexport function selectHttpOptionsAndBody(operation, fallbackConfig) {\n    var configs = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        configs[_i - 2] = arguments[_i];\n    }\n    configs.unshift(fallbackConfig);\n    return selectHttpOptionsAndBodyInternal.apply(void 0, __spreadArray([operation,\n        defaultPrinter], configs, false));\n}\nexport function selectHttpOptionsAndBodyInternal(operation, printer) {\n    var configs = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        configs[_i - 2] = arguments[_i];\n    }\n    var options = {};\n    var http = {};\n    configs.forEach(function (config) {\n        options = __assign(__assign(__assign({}, options), config.options), { headers: __assign(__assign({}, options.headers), config.headers) });\n        if (config.credentials) {\n            options.credentials = config.credentials;\n        }\n        http = __assign(__assign({}, http), config.http);\n    });\n    if (options.headers) {\n        options.headers = removeDuplicateHeaders(options.headers, http.preserveHeaderCase);\n    }\n    //The body depends on the http options\n    var operationName = operation.operationName, extensions = operation.extensions, variables = operation.variables, query = operation.query;\n    var body = { operationName: operationName, variables: variables };\n    if (http.includeExtensions)\n        body.extensions = extensions;\n    // not sending the query (i.e persisted queries)\n    if (http.includeQuery)\n        body.query = printer(query, print);\n    return {\n        options: options,\n        body: body,\n    };\n}\n// Remove potential duplicate header names, preserving last (by insertion order).\n// This is done to prevent unintentionally duplicating a header instead of\n// overwriting it (See #8447 and #8449).\nfunction removeDuplicateHeaders(headers, preserveHeaderCase) {\n    // If we're not preserving the case, just remove duplicates w/ normalization.\n    if (!preserveHeaderCase) {\n        var normalizedHeaders_1 = {};\n        Object.keys(Object(headers)).forEach(function (name) {\n            normalizedHeaders_1[name.toLowerCase()] = headers[name];\n        });\n        return normalizedHeaders_1;\n    }\n    // If we are preserving the case, remove duplicates w/ normalization,\n    // preserving the original name.\n    // This allows for non-http-spec-compliant servers that expect intentionally\n    // capitalized header names (See #6741).\n    var headerData = {};\n    Object.keys(Object(headers)).forEach(function (name) {\n        headerData[name.toLowerCase()] = {\n            originalName: name,\n            value: headers[name],\n        };\n    });\n    var normalizedHeaders = {};\n    Object.keys(headerData).forEach(function (name) {\n        normalizedHeaders[headerData[name].originalName] = headerData[name].value;\n    });\n    return normalizedHeaders;\n}\n//# sourceMappingURL=selectHttpOptionsAndBody.js.map","export var selectURI = function (operation, fallbackURI) {\n    var context = operation.getContext();\n    var contextURI = context.uri;\n    if (contextURI) {\n        return contextURI;\n    }\n    else if (typeof fallbackURI === \"function\") {\n        return fallbackURI(operation);\n    }\n    else {\n        return fallbackURI || \"/graphql\";\n    }\n};\n//# sourceMappingURL=selectURI.js.map","import { serializeFetchParameter } from \"./serializeFetchParameter.js\";\n// For GET operations, returns the given URI rewritten with parameters, or a\n// parse error.\nexport function rewriteURIForGET(chosenURI, body) {\n    // Implement the standard HTTP GET serialization, plus 'extensions'. Note\n    // the extra level of JSON serialization!\n    var queryParams = [];\n    var addQueryParam = function (key, value) {\n        queryParams.push(\"\".concat(key, \"=\").concat(encodeURIComponent(value)));\n    };\n    if (\"query\" in body) {\n        addQueryParam(\"query\", body.query);\n    }\n    if (body.operationName) {\n        addQueryParam(\"operationName\", body.operationName);\n    }\n    if (body.variables) {\n        var serializedVariables = void 0;\n        try {\n            serializedVariables = serializeFetchParameter(body.variables, \"Variables map\");\n        }\n        catch (parseError) {\n            return { parseError: parseError };\n        }\n        addQueryParam(\"variables\", serializedVariables);\n    }\n    if (body.extensions) {\n        var serializedExtensions = void 0;\n        try {\n            serializedExtensions = serializeFetchParameter(body.extensions, \"Extensions map\");\n        }\n        catch (parseError) {\n            return { parseError: parseError };\n        }\n        addQueryParam(\"extensions\", serializedExtensions);\n    }\n    // Reconstruct the URI with added query params.\n    // XXX This assumes that the URI is well-formed and that it doesn't\n    //     already contain any of these query params. We could instead use the\n    //     URL API and take a polyfill (whatwg-url@6) for older browsers that\n    //     don't support URLSearchParams. Note that some browsers (and\n    //     versions of whatwg-url) support URL but not URLSearchParams!\n    var fragment = \"\", preFragment = chosenURI;\n    var fragmentStart = chosenURI.indexOf(\"#\");\n    if (fragmentStart !== -1) {\n        fragment = chosenURI.substr(fragmentStart);\n        preFragment = chosenURI.substr(0, fragmentStart);\n    }\n    var queryParamsPrefix = preFragment.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n    var newURI = preFragment + queryParamsPrefix + queryParams.join(\"&\") + fragment;\n    return { newURI: newURI };\n}\n//# sourceMappingURL=rewriteURIForGET.js.map","import { __assign, __rest } from \"tslib\";\nimport { invariant } from \"../../utilities/globals/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable, hasDirectives } from \"../../utilities/index.js\";\nimport { serializeFetchParameter } from \"./serializeFetchParameter.js\";\nimport { selectURI } from \"./selectURI.js\";\nimport { handleError, readMultipartBody, parseAndCheckHttpResponse, } from \"./parseAndCheckHttpResponse.js\";\nimport { checkFetcher } from \"./checkFetcher.js\";\nimport { selectHttpOptionsAndBodyInternal, defaultPrinter, fallbackHttpConfig, } from \"./selectHttpOptionsAndBody.js\";\nimport { rewriteURIForGET } from \"./rewriteURIForGET.js\";\nimport { fromError, filterOperationVariables } from \"../utils/index.js\";\nimport { maybe, getMainDefinition, removeClientSetsFromDocument, } from \"../../utilities/index.js\";\nvar backupFetch = maybe(function () { return fetch; });\nexport var createHttpLink = function (linkOptions) {\n    if (linkOptions === void 0) { linkOptions = {}; }\n    var _a = linkOptions.uri, uri = _a === void 0 ? \"/graphql\" : _a, \n    // use default global fetch if nothing passed in\n    preferredFetch = linkOptions.fetch, _b = linkOptions.print, print = _b === void 0 ? defaultPrinter : _b, includeExtensions = linkOptions.includeExtensions, preserveHeaderCase = linkOptions.preserveHeaderCase, useGETForQueries = linkOptions.useGETForQueries, _c = linkOptions.includeUnusedVariables, includeUnusedVariables = _c === void 0 ? false : _c, requestOptions = __rest(linkOptions, [\"uri\", \"fetch\", \"print\", \"includeExtensions\", \"preserveHeaderCase\", \"useGETForQueries\", \"includeUnusedVariables\"]);\n    if (globalThis.__DEV__ !== false) {\n        // Make sure at least one of preferredFetch, window.fetch, or backupFetch is\n        // defined, so requests won't fail at runtime.\n        checkFetcher(preferredFetch || backupFetch);\n    }\n    var linkConfig = {\n        http: { includeExtensions: includeExtensions, preserveHeaderCase: preserveHeaderCase },\n        options: requestOptions.fetchOptions,\n        credentials: requestOptions.credentials,\n        headers: requestOptions.headers,\n    };\n    return new ApolloLink(function (operation) {\n        var chosenURI = selectURI(operation, uri);\n        var context = operation.getContext();\n        // `apollographql-client-*` headers are automatically set if a\n        // `clientAwareness` object is found in the context. These headers are\n        // set first, followed by the rest of the headers pulled from\n        // `context.headers`. If desired, `apollographql-client-*` headers set by\n        // the `clientAwareness` object can be overridden by\n        // `apollographql-client-*` headers set in `context.headers`.\n        var clientAwarenessHeaders = {};\n        if (context.clientAwareness) {\n            var _a = context.clientAwareness, name_1 = _a.name, version = _a.version;\n            if (name_1) {\n                clientAwarenessHeaders[\"apollographql-client-name\"] = name_1;\n            }\n            if (version) {\n                clientAwarenessHeaders[\"apollographql-client-version\"] = version;\n            }\n        }\n        var contextHeaders = __assign(__assign({}, clientAwarenessHeaders), context.headers);\n        var contextConfig = {\n            http: context.http,\n            options: context.fetchOptions,\n            credentials: context.credentials,\n            headers: contextHeaders,\n        };\n        if (hasDirectives([\"client\"], operation.query)) {\n            if (globalThis.__DEV__ !== false) {\n                globalThis.__DEV__ !== false && invariant.warn(52);\n            }\n            var transformedQuery = removeClientSetsFromDocument(operation.query);\n            if (!transformedQuery) {\n                return fromError(new Error(\"HttpLink: Trying to send a client-only query to the server. To send to the server, ensure a non-client field is added to the query or set the `transformOptions.removeClientFields` option to `true`.\"));\n            }\n            operation.query = transformedQuery;\n        }\n        //uses fallback, link, and then context to build options\n        var _b = selectHttpOptionsAndBodyInternal(operation, print, fallbackHttpConfig, linkConfig, contextConfig), options = _b.options, body = _b.body;\n        if (body.variables && !includeUnusedVariables) {\n            body.variables = filterOperationVariables(body.variables, operation.query);\n        }\n        var controller;\n        if (!options.signal && typeof AbortController !== \"undefined\") {\n            controller = new AbortController();\n            options.signal = controller.signal;\n        }\n        // If requested, set method to GET if there are no mutations.\n        var definitionIsMutation = function (d) {\n            return d.kind === \"OperationDefinition\" && d.operation === \"mutation\";\n        };\n        var definitionIsSubscription = function (d) {\n            return d.kind === \"OperationDefinition\" && d.operation === \"subscription\";\n        };\n        var isSubscription = definitionIsSubscription(getMainDefinition(operation.query));\n        // does not match custom directives beginning with @defer\n        var hasDefer = hasDirectives([\"defer\"], operation.query);\n        if (useGETForQueries &&\n            !operation.query.definitions.some(definitionIsMutation)) {\n            options.method = \"GET\";\n        }\n        if (hasDefer || isSubscription) {\n            options.headers = options.headers || {};\n            var acceptHeader = \"multipart/mixed;\";\n            // Omit defer-specific headers if the user attempts to defer a selection\n            // set on a subscription and log a warning.\n            if (isSubscription && hasDefer) {\n                globalThis.__DEV__ !== false && invariant.warn(53);\n            }\n            if (isSubscription) {\n                acceptHeader +=\n                    \"boundary=graphql;subscriptionSpec=1.0,application/json\";\n            }\n            else if (hasDefer) {\n                acceptHeader += \"deferSpec=20220824,application/json\";\n            }\n            options.headers.accept = acceptHeader;\n        }\n        if (options.method === \"GET\") {\n            var _c = rewriteURIForGET(chosenURI, body), newURI = _c.newURI, parseError = _c.parseError;\n            if (parseError) {\n                return fromError(parseError);\n            }\n            chosenURI = newURI;\n        }\n        else {\n            try {\n                options.body = serializeFetchParameter(body, \"Payload\");\n            }\n            catch (parseError) {\n                return fromError(parseError);\n            }\n        }\n        return new Observable(function (observer) {\n            // Prefer linkOptions.fetch (preferredFetch) if provided, and otherwise\n            // fall back to the *current* global window.fetch function (see issue\n            // #7832), or (if all else fails) the backupFetch function we saved when\n            // this module was first evaluated. This last option protects against the\n            // removal of window.fetch, which is unlikely but not impossible.\n            var currentFetch = preferredFetch || maybe(function () { return fetch; }) || backupFetch;\n            var observerNext = observer.next.bind(observer);\n            currentFetch(chosenURI, options)\n                .then(function (response) {\n                var _a;\n                operation.setContext({ response: response });\n                var ctype = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get(\"content-type\");\n                if (ctype !== null && /^multipart\\/mixed/i.test(ctype)) {\n                    return readMultipartBody(response, observerNext);\n                }\n                else {\n                    return parseAndCheckHttpResponse(operation)(response).then(observerNext);\n                }\n            })\n                .then(function () {\n                controller = undefined;\n                observer.complete();\n            })\n                .catch(function (err) {\n                controller = undefined;\n                handleError(err, observer);\n            });\n            return function () {\n                // XXX support canceling this request\n                // https://developers.google.com/web/updates/2017/09/abortable-fetch\n                if (controller)\n                    controller.abort();\n            };\n        });\n    });\n};\n//# sourceMappingURL=createHttpLink.js.map","import { __extends } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { createHttpLink } from \"./createHttpLink.js\";\nvar HttpLink = /** @class */ (function (_super) {\n    __extends(HttpLink, _super);\n    function HttpLink(options) {\n        if (options === void 0) { options = {}; }\n        var _this = _super.call(this, createHttpLink(options).request) || this;\n        _this.options = options;\n        return _this;\n    }\n    return HttpLink;\n}(ApolloLink));\nexport { HttpLink };\n//# sourceMappingURL=HttpLink.js.map","const { toString, hasOwnProperty } = Object.prototype;\nconst fnToStr = Function.prototype.toString;\nconst previousComparisons = new Map();\n/**\n * Performs a deep equality check on two JavaScript values, tolerating cycles.\n */\nexport function equal(a, b) {\n    try {\n        return check(a, b);\n    }\n    finally {\n        previousComparisons.clear();\n    }\n}\n// Allow default imports as well.\nexport default equal;\nfunction check(a, b) {\n    // If the two values are strictly equal, our job is easy.\n    if (a === b) {\n        return true;\n    }\n    // Object.prototype.toString returns a representation of the runtime type of\n    // the given value that is considerably more precise than typeof.\n    const aTag = toString.call(a);\n    const bTag = toString.call(b);\n    // If the runtime types of a and b are different, they could maybe be equal\n    // under some interpretation of equality, but for simplicity and performance\n    // we just return false instead.\n    if (aTag !== bTag) {\n        return false;\n    }\n    switch (aTag) {\n        case '[object Array]':\n            // Arrays are a lot like other objects, but we can cheaply compare their\n            // lengths as a short-cut before comparing their elements.\n            if (a.length !== b.length)\n                return false;\n        // Fall through to object case...\n        case '[object Object]': {\n            if (previouslyCompared(a, b))\n                return true;\n            const aKeys = definedKeys(a);\n            const bKeys = definedKeys(b);\n            // If `a` and `b` have a different number of enumerable keys, they\n            // must be different.\n            const keyCount = aKeys.length;\n            if (keyCount !== bKeys.length)\n                return false;\n            // Now make sure they have the same keys.\n            for (let k = 0; k < keyCount; ++k) {\n                if (!hasOwnProperty.call(b, aKeys[k])) {\n                    return false;\n                }\n            }\n            // Finally, check deep equality of all child properties.\n            for (let k = 0; k < keyCount; ++k) {\n                const key = aKeys[k];\n                if (!check(a[key], b[key])) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        case '[object Error]':\n            return a.name === b.name && a.message === b.message;\n        case '[object Number]':\n            // Handle NaN, which is !== itself.\n            if (a !== a)\n                return b !== b;\n        // Fall through to shared +a === +b case...\n        case '[object Boolean]':\n        case '[object Date]':\n            return +a === +b;\n        case '[object RegExp]':\n        case '[object String]':\n            return a == `${b}`;\n        case '[object Map]':\n        case '[object Set]': {\n            if (a.size !== b.size)\n                return false;\n            if (previouslyCompared(a, b))\n                return true;\n            const aIterator = a.entries();\n            const isMap = aTag === '[object Map]';\n            while (true) {\n                const info = aIterator.next();\n                if (info.done)\n                    break;\n                // If a instanceof Set, aValue === aKey.\n                const [aKey, aValue] = info.value;\n                // So this works the same way for both Set and Map.\n                if (!b.has(aKey)) {\n                    return false;\n                }\n                // However, we care about deep equality of values only when dealing\n                // with Map structures.\n                if (isMap && !check(aValue, b.get(aKey))) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        case '[object Uint16Array]':\n        case '[object Uint8Array]': // Buffer, in Node.js.\n        case '[object Uint32Array]':\n        case '[object Int32Array]':\n        case '[object Int8Array]':\n        case '[object Int16Array]':\n        case '[object ArrayBuffer]':\n            // DataView doesn't need these conversions, but the equality check is\n            // otherwise the same.\n            a = new Uint8Array(a);\n            b = new Uint8Array(b);\n        // Fall through...\n        case '[object DataView]': {\n            let len = a.byteLength;\n            if (len === b.byteLength) {\n                while (len-- && a[len] === b[len]) {\n                    // Keep looping as long as the bytes are equal.\n                }\n            }\n            return len === -1;\n        }\n        case '[object AsyncFunction]':\n        case '[object GeneratorFunction]':\n        case '[object AsyncGeneratorFunction]':\n        case '[object Function]': {\n            const aCode = fnToStr.call(a);\n            if (aCode !== fnToStr.call(b)) {\n                return false;\n            }\n            // We consider non-native functions equal if they have the same code\n            // (native functions require === because their code is censored).\n            // Note that this behavior is not entirely sound, since !== function\n            // objects with the same code can behave differently depending on\n            // their closure scope. However, any function can behave differently\n            // depending on the values of its input arguments (including this)\n            // and its calling context (including its closure scope), even\n            // though the function object is === to itself; and it is entirely\n            // possible for functions that are not === to behave exactly the\n            // same under all conceivable circumstances. Because none of these\n            // factors are statically decidable in JavaScript, JS function\n            // equality is not well-defined. This ambiguity allows us to\n            // consider the best possible heuristic among various imperfect\n            // options, and equating non-native functions that have the same\n            // code has enormous practical benefits, such as when comparing\n            // functions that are repeatedly passed as fresh function\n            // expressions within objects that are otherwise deeply equal. Since\n            // any function created from the same syntactic expression (in the\n            // same code location) will always stringify to the same code\n            // according to fnToStr.call, we can reasonably expect these\n            // repeatedly passed function expressions to have the same code, and\n            // thus behave \"the same\" (with all the caveats mentioned above),\n            // even though the runtime function objects are !== to one another.\n            return !endsWith(aCode, nativeCodeSuffix);\n        }\n    }\n    // Otherwise the values are not equal.\n    return false;\n}\nfunction definedKeys(obj) {\n    // Remember that the second argument to Array.prototype.filter will be\n    // used as `this` within the callback function.\n    return Object.keys(obj).filter(isDefinedKey, obj);\n}\nfunction isDefinedKey(key) {\n    return this[key] !== void 0;\n}\nconst nativeCodeSuffix = \"{ [native code] }\";\nfunction endsWith(full, suffix) {\n    const fromIndex = full.length - suffix.length;\n    return fromIndex >= 0 &&\n        full.indexOf(suffix, fromIndex) === fromIndex;\n}\nfunction previouslyCompared(a, b) {\n    // Though cyclic references can make an object graph appear infinite from the\n    // perspective of a depth-first traversal, the graph still contains a finite\n    // number of distinct object references. We use the previousComparisons cache\n    // to avoid comparing the same pair of object references more than once, which\n    // guarantees termination (even if we end up comparing every object in one\n    // graph to every object in the other graph, which is extremely unlikely),\n    // while still allowing weird isomorphic structures (like rings with different\n    // lengths) a chance to pass the equality test.\n    let bSet = previousComparisons.get(a);\n    if (bSet) {\n        // Return true here because we can be sure false will be returned somewhere\n        // else if the objects are not equivalent.\n        if (bSet.has(b))\n            return true;\n    }\n    else {\n        previousComparisons.set(a, bSet = new Set);\n    }\n    bSet.add(b);\n    return false;\n}\n//# sourceMappingURL=index.js.map","import { __rest } from \"tslib\";\nimport equal from \"@wry/equality\";\nimport { createFragmentMap, getFragmentDefinitions, getFragmentFromSelection, getMainDefinition, isField, resultKeyNameFromField, shouldInclude, } from \"../utilities/index.js\";\n// Returns true if aResult and bResult are deeply equal according to the fields\n// selected by the given query, ignoring any fields marked as @nonreactive.\nexport function equalByQuery(query, _a, _b, variables) {\n    var aData = _a.data, aRest = __rest(_a, [\"data\"]);\n    var bData = _b.data, bRest = __rest(_b, [\"data\"]);\n    return (equal(aRest, bRest) &&\n        equalBySelectionSet(getMainDefinition(query).selectionSet, aData, bData, {\n            fragmentMap: createFragmentMap(getFragmentDefinitions(query)),\n            variables: variables,\n        }));\n}\nfunction equalBySelectionSet(selectionSet, aResult, bResult, context) {\n    if (aResult === bResult) {\n        return true;\n    }\n    var seenSelections = new Set();\n    // Returning true from this Array.prototype.every callback function skips the\n    // current field/subtree. Returning false aborts the entire traversal\n    // immediately, causing equalBySelectionSet to return false.\n    return selectionSet.selections.every(function (selection) {\n        // Avoid re-processing the same selection at the same level of recursion, in\n        // case the same field gets included via multiple indirect fragment spreads.\n        if (seenSelections.has(selection))\n            return true;\n        seenSelections.add(selection);\n        // Ignore @skip(if: true) and @include(if: false) fields.\n        if (!shouldInclude(selection, context.variables))\n            return true;\n        // If the field or (named) fragment spread has a @nonreactive directive on\n        // it, we don't care if it's different, so we pretend it's the same.\n        if (selectionHasNonreactiveDirective(selection))\n            return true;\n        if (isField(selection)) {\n            var resultKey = resultKeyNameFromField(selection);\n            var aResultChild = aResult && aResult[resultKey];\n            var bResultChild = bResult && bResult[resultKey];\n            var childSelectionSet = selection.selectionSet;\n            if (!childSelectionSet) {\n                // These are scalar values, so we can compare them with deep equal\n                // without redoing the main recursive work.\n                return equal(aResultChild, bResultChild);\n            }\n            var aChildIsArray = Array.isArray(aResultChild);\n            var bChildIsArray = Array.isArray(bResultChild);\n            if (aChildIsArray !== bChildIsArray)\n                return false;\n            if (aChildIsArray && bChildIsArray) {\n                var length_1 = aResultChild.length;\n                if (bResultChild.length !== length_1) {\n                    return false;\n                }\n                for (var i = 0; i < length_1; ++i) {\n                    if (!equalBySelectionSet(childSelectionSet, aResultChild[i], bResultChild[i], context)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            return equalBySelectionSet(childSelectionSet, aResultChild, bResultChild, context);\n        }\n        else {\n            var fragment = getFragmentFromSelection(selection, context.fragmentMap);\n            if (fragment) {\n                // The fragment might === selection if it's an inline fragment, but\n                // could be !== if it's a named fragment ...spread.\n                if (selectionHasNonreactiveDirective(fragment))\n                    return true;\n                return equalBySelectionSet(fragment.selectionSet, \n                // Notice that we reuse the same aResult and bResult values here,\n                // since the fragment ...spread does not specify a field name, but\n                // consists of multiple fields (within the fragment's selection set)\n                // that should be applied to the current result value(s).\n                aResult, bResult, context);\n            }\n        }\n    });\n}\nfunction selectionHasNonreactiveDirective(selection) {\n    return (!!selection.directives && selection.directives.some(directiveIsNonreactive));\n}\nfunction directiveIsNonreactive(dir) {\n    return dir.name.value === \"nonreactive\";\n}\n//# sourceMappingURL=equalByQuery.js.map","import { Slot } from \"optimism\";\nimport { invariant } from \"../utilities/globals/index.js\";\nimport { canUseWeakMap, canUseWeakSet } from \"../utilities/index.js\";\nexport var MapImpl = canUseWeakMap ? WeakMap : Map;\nexport var SetImpl = canUseWeakSet ? WeakSet : Set;\n// Contextual slot that allows us to disable accessor warnings on fields when in\n// migrate mode.\n/** @internal */\nexport var disableWarningsSlot = new Slot();\nvar issuedWarning = false;\nexport function warnOnImproperCacheImplementation() {\n    if (!issuedWarning) {\n        issuedWarning = true;\n        globalThis.__DEV__ !== false && invariant.warn(64);\n    }\n}\n//# sourceMappingURL=utils.js.map","import { Kind } from \"graphql\";\nimport { getFragmentMaskMode, maybeDeepFreeze, resultKeyNameFromField, } from \"../utilities/index.js\";\nimport { disableWarningsSlot } from \"./utils.js\";\nimport { invariant } from \"../utilities/globals/index.js\";\nexport function maskDefinition(data, selectionSet, context) {\n    return disableWarningsSlot.withValue(true, function () {\n        var masked = maskSelectionSet(data, selectionSet, context, false);\n        if (Object.isFrozen(data)) {\n            maybeDeepFreeze(masked);\n        }\n        return masked;\n    });\n}\nfunction getMutableTarget(data, mutableTargets) {\n    if (mutableTargets.has(data)) {\n        return mutableTargets.get(data);\n    }\n    var mutableTarget = Array.isArray(data) ? [] : Object.create(null);\n    mutableTargets.set(data, mutableTarget);\n    return mutableTarget;\n}\nfunction maskSelectionSet(data, selectionSet, context, migration, path) {\n    var _a;\n    var knownChanged = context.knownChanged;\n    var memo = getMutableTarget(data, context.mutableTargets);\n    if (Array.isArray(data)) {\n        for (var _i = 0, _b = Array.from(data.entries()); _i < _b.length; _i++) {\n            var _c = _b[_i], index = _c[0], item = _c[1];\n            if (item === null) {\n                memo[index] = null;\n                continue;\n            }\n            var masked = maskSelectionSet(item, selectionSet, context, migration, globalThis.__DEV__ !== false ? \"\".concat(path || \"\", \"[\").concat(index, \"]\") : void 0);\n            if (knownChanged.has(masked)) {\n                knownChanged.add(memo);\n            }\n            memo[index] = masked;\n        }\n        return knownChanged.has(memo) ? memo : data;\n    }\n    for (var _d = 0, _e = selectionSet.selections; _d < _e.length; _d++) {\n        var selection = _e[_d];\n        var value = void 0;\n        // we later want to add acessor warnings to the final result\n        // so we need a new object to add the accessor warning to\n        if (migration) {\n            knownChanged.add(memo);\n        }\n        if (selection.kind === Kind.FIELD) {\n            var keyName = resultKeyNameFromField(selection);\n            var childSelectionSet = selection.selectionSet;\n            value = memo[keyName] || data[keyName];\n            if (value === void 0) {\n                continue;\n            }\n            if (childSelectionSet && value !== null) {\n                var masked = maskSelectionSet(data[keyName], childSelectionSet, context, migration, globalThis.__DEV__ !== false ? \"\".concat(path || \"\", \".\").concat(keyName) : void 0);\n                if (knownChanged.has(masked)) {\n                    value = masked;\n                }\n            }\n            if (!(globalThis.__DEV__ !== false)) {\n                memo[keyName] = value;\n            }\n            if (globalThis.__DEV__ !== false) {\n                if (migration &&\n                    keyName !== \"__typename\" &&\n                    // either the field is not present in the memo object\n                    // or it has a `get` descriptor, not a `value` descriptor\n                    // => it is a warning accessor and we can overwrite it\n                    // with another accessor\n                    !((_a = Object.getOwnPropertyDescriptor(memo, keyName)) === null || _a === void 0 ? void 0 : _a.value)) {\n                    Object.defineProperty(memo, keyName, getAccessorWarningDescriptor(keyName, value, path || \"\", context.operationName, context.operationType));\n                }\n                else {\n                    delete memo[keyName];\n                    memo[keyName] = value;\n                }\n            }\n        }\n        if (selection.kind === Kind.INLINE_FRAGMENT &&\n            (!selection.typeCondition ||\n                context.cache.fragmentMatches(selection, data.__typename))) {\n            value = maskSelectionSet(data, selection.selectionSet, context, migration, path);\n        }\n        if (selection.kind === Kind.FRAGMENT_SPREAD) {\n            var fragmentName = selection.name.value;\n            var fragment = context.fragmentMap[fragmentName] ||\n                (context.fragmentMap[fragmentName] =\n                    context.cache.lookupFragment(fragmentName));\n            invariant(fragment, 59, fragmentName);\n            var mode = getFragmentMaskMode(selection);\n            if (mode !== \"mask\") {\n                value = maskSelectionSet(data, fragment.selectionSet, context, mode === \"migrate\", path);\n            }\n        }\n        if (knownChanged.has(value)) {\n            knownChanged.add(memo);\n        }\n    }\n    if (\"__typename\" in data && !(\"__typename\" in memo)) {\n        memo.__typename = data.__typename;\n    }\n    // This check prevents cases where masked fields may accidentally be\n    // returned as part of this object when the fragment also selects\n    // additional fields from the same child selection.\n    if (Object.keys(memo).length !== Object.keys(data).length) {\n        knownChanged.add(memo);\n    }\n    return knownChanged.has(memo) ? memo : data;\n}\nfunction getAccessorWarningDescriptor(fieldName, value, path, operationName, operationType) {\n    var getValue = function () {\n        if (disableWarningsSlot.getValue()) {\n            return value;\n        }\n        globalThis.__DEV__ !== false && invariant.warn(60, operationName ?\n            \"\".concat(operationType, \" '\").concat(operationName, \"'\")\n            : \"anonymous \".concat(operationType), \"\".concat(path, \".\").concat(fieldName).replace(/^\\./, \"\"));\n        getValue = function () { return value; };\n        return value;\n    };\n    return {\n        get: function () {\n            return getValue();\n        },\n        set: function (newValue) {\n            getValue = function () { return newValue; };\n        },\n        enumerable: true,\n        configurable: true,\n    };\n}\n//# sourceMappingURL=maskDefinition.js.map","import { Kind } from \"graphql\";\nimport { MapImpl, SetImpl, warnOnImproperCacheImplementation, } from \"./utils.js\";\nimport { invariant } from \"../utilities/globals/index.js\";\nimport equal from \"@wry/equality\";\nimport { maskDefinition } from \"./maskDefinition.js\";\nimport { createFragmentMap, getFragmentDefinitions, } from \"../utilities/index.js\";\n/** @internal */\nexport function maskFragment(data, document, cache, fragmentName) {\n    if (!cache.fragmentMatches) {\n        if (globalThis.__DEV__ !== false) {\n            warnOnImproperCacheImplementation();\n        }\n        return data;\n    }\n    var fragments = document.definitions.filter(function (node) {\n        return node.kind === Kind.FRAGMENT_DEFINITION;\n    });\n    if (typeof fragmentName === \"undefined\") {\n        invariant(fragments.length === 1, 61, fragments.length);\n        fragmentName = fragments[0].name.value;\n    }\n    var fragment = fragments.find(function (fragment) { return fragment.name.value === fragmentName; });\n    invariant(!!fragment, 62, fragmentName);\n    if (data == null) {\n        // Maintain the original `null` or `undefined` value\n        return data;\n    }\n    if (equal(data, {})) {\n        // Return early and skip the masking algorithm if we don't have any data\n        // yet. This can happen when cache.diff returns an empty object which is\n        // used from watchFragment.\n        return data;\n    }\n    return maskDefinition(data, fragment.selectionSet, {\n        operationType: \"fragment\",\n        operationName: fragment.name.value,\n        fragmentMap: createFragmentMap(getFragmentDefinitions(document)),\n        cache: cache,\n        mutableTargets: new MapImpl(),\n        knownChanged: new SetImpl(),\n    });\n}\n//# sourceMappingURL=maskFragment.js.map","import { invariant } from \"../utilities/globals/index.js\";\nimport { createFragmentMap, getFragmentDefinitions, getOperationDefinition, } from \"../utilities/index.js\";\nimport { maskDefinition } from \"./maskDefinition.js\";\nimport { MapImpl, SetImpl, warnOnImproperCacheImplementation, } from \"./utils.js\";\n/** @internal */\nexport function maskOperation(data, document, cache) {\n    var _a;\n    if (!cache.fragmentMatches) {\n        if (globalThis.__DEV__ !== false) {\n            warnOnImproperCacheImplementation();\n        }\n        return data;\n    }\n    var definition = getOperationDefinition(document);\n    invariant(definition, 63);\n    if (data == null) {\n        // Maintain the original `null` or `undefined` value\n        return data;\n    }\n    return maskDefinition(data, definition.selectionSet, {\n        operationType: definition.operation,\n        operationName: (_a = definition.name) === null || _a === void 0 ? void 0 : _a.value,\n        fragmentMap: createFragmentMap(getFragmentDefinitions(document)),\n        cache: cache,\n        mutableTargets: new MapImpl(),\n        knownChanged: new SetImpl(),\n    });\n}\n//# sourceMappingURL=maskOperation.js.map","import { __assign, __rest } from \"tslib\";\nimport { wrap } from \"optimism\";\nimport { Observable, cacheSizes, getFragmentDefinition, getFragmentQueryDocument, mergeDeepArray, } from \"../../utilities/index.js\";\nimport { WeakCache } from \"@wry/caches\";\nimport { getApolloCacheMemoryInternals } from \"../../utilities/caching/getMemoryInternals.js\";\nimport { equalByQuery } from \"../../core/equalByQuery.js\";\nimport { invariant } from \"../../utilities/globals/index.js\";\nimport { maskFragment } from \"../../masking/index.js\";\nimport { muteDeprecations, warnRemovedOption } from \"../../utilities/index.js\";\nvar ApolloCache = /** @class */ (function () {\n    function ApolloCache() {\n        this.assumeImmutableResults = false;\n        // Make sure we compute the same (===) fragment query document every\n        // time we receive the same fragment in readFragment.\n        this.getFragmentDoc = wrap(getFragmentQueryDocument, {\n            max: cacheSizes[\"cache.fragmentQueryDocuments\"] ||\n                1000 /* defaultCacheSizes[\"cache.fragmentQueryDocuments\"] */,\n            cache: WeakCache,\n        });\n    }\n    // Function used to lookup a fragment when a fragment definition is not part\n    // of the GraphQL document. This is useful for caches, such as InMemoryCache,\n    // that register fragments ahead of time so they can be referenced by name.\n    ApolloCache.prototype.lookupFragment = function (fragmentName) {\n        return null;\n    };\n    // Transactional API\n    // The batch method is intended to replace/subsume both performTransaction\n    // and recordOptimisticTransaction, but performTransaction came first, so we\n    // provide a default batch implementation that's just another way of calling\n    // performTransaction. Subclasses of ApolloCache (such as InMemoryCache) can\n    // override the batch method to do more interesting things with its options.\n    ApolloCache.prototype.batch = function (options) {\n        var _this = this;\n        var optimisticId = typeof options.optimistic === \"string\" ? options.optimistic\n            : options.optimistic === false ? null\n                : void 0;\n        var updateResult;\n        this.performTransaction(function () { return (updateResult = options.update(_this)); }, optimisticId);\n        return updateResult;\n    };\n    ApolloCache.prototype.recordOptimisticTransaction = function (transaction, optimisticId) {\n        this.performTransaction(transaction, optimisticId);\n    };\n    // Optional API\n    // Called once per input document, allowing the cache to make static changes\n    // to the query, such as adding __typename fields.\n    ApolloCache.prototype.transformDocument = function (document) {\n        return document;\n    };\n    // Called before each ApolloLink request, allowing the cache to make dynamic\n    // changes to the query, such as filling in missing fragment definitions.\n    ApolloCache.prototype.transformForLink = function (document) {\n        return document;\n    };\n    ApolloCache.prototype.identify = function (object) {\n        return;\n    };\n    ApolloCache.prototype.gc = function () {\n        return [];\n    };\n    ApolloCache.prototype.modify = function (options) {\n        return false;\n    };\n    // DataProxy API\n    ApolloCache.prototype.readQuery = function (options, optimistic) {\n        var _this = this;\n        if (optimistic === void 0) { optimistic = !!options.optimistic; }\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.readQuery\");\n        }\n        return muteDeprecations(\"canonizeResults\", function () {\n            return _this.read(__assign(__assign({}, options), { rootId: options.id || \"ROOT_QUERY\", optimistic: optimistic }));\n        });\n    };\n    /** {@inheritDoc @apollo/client!ApolloClient#watchFragment:member(1)} */\n    ApolloCache.prototype.watchFragment = function (options) {\n        var _this = this;\n        var fragment = options.fragment, fragmentName = options.fragmentName, from = options.from, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, otherOptions = __rest(options, [\"fragment\", \"fragmentName\", \"from\", \"optimistic\"]);\n        var query = this.getFragmentDoc(fragment, fragmentName);\n        // While our TypeScript types do not allow for `undefined` as a valid\n        // `from`, its possible `useFragment` gives us an `undefined` since it\n        // calls` cache.identify` and provides that value to `from`. We are\n        // adding this fix here however to ensure those using plain JavaScript\n        // and using `cache.identify` themselves will avoid seeing the obscure\n        // warning.\n        var id = typeof from === \"undefined\" || typeof from === \"string\" ?\n            from\n            : this.identify(from);\n        var dataMasking = !!options[Symbol.for(\"apollo.dataMasking\")];\n        if (globalThis.__DEV__ !== false) {\n            var actualFragmentName = fragmentName || getFragmentDefinition(fragment).name.value;\n            if (!id) {\n                globalThis.__DEV__ !== false && invariant.warn(1, actualFragmentName);\n            }\n        }\n        var diffOptions = __assign(__assign({}, otherOptions), { returnPartialData: true, id: id, query: query, optimistic: optimistic });\n        var latestDiff;\n        return new Observable(function (observer) {\n            return _this.watch(__assign(__assign({}, diffOptions), { immediate: true, callback: function (diff) {\n                    var data = dataMasking ?\n                        maskFragment(diff.result, fragment, _this, fragmentName)\n                        : diff.result;\n                    if (\n                    // Always ensure we deliver the first result\n                    latestDiff &&\n                        equalByQuery(query, { data: latestDiff.result }, { data: data }, \n                        // TODO: Fix the type on WatchFragmentOptions so that TVars\n                        // extends OperationVariables\n                        options.variables)) {\n                        return;\n                    }\n                    var result = {\n                        data: data,\n                        complete: !!diff.complete,\n                    };\n                    if (diff.missing) {\n                        result.missing = mergeDeepArray(diff.missing.map(function (error) { return error.missing; }));\n                    }\n                    latestDiff = __assign(__assign({}, diff), { result: data });\n                    observer.next(result);\n                } }));\n        });\n    };\n    ApolloCache.prototype.readFragment = function (options, optimistic) {\n        var _this = this;\n        if (optimistic === void 0) { optimistic = !!options.optimistic; }\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.readFragment\");\n        }\n        return muteDeprecations(\"canonizeResults\", function () {\n            return _this.read(__assign(__assign({}, options), { query: _this.getFragmentDoc(options.fragment, options.fragmentName), rootId: options.id, optimistic: optimistic }));\n        });\n    };\n    ApolloCache.prototype.writeQuery = function (_a) {\n        var id = _a.id, data = _a.data, options = __rest(_a, [\"id\", \"data\"]);\n        return this.write(Object.assign(options, {\n            dataId: id || \"ROOT_QUERY\",\n            result: data,\n        }));\n    };\n    ApolloCache.prototype.writeFragment = function (_a) {\n        var id = _a.id, data = _a.data, fragment = _a.fragment, fragmentName = _a.fragmentName, options = __rest(_a, [\"id\", \"data\", \"fragment\", \"fragmentName\"]);\n        return this.write(Object.assign(options, {\n            query: this.getFragmentDoc(fragment, fragmentName),\n            dataId: id,\n            result: data,\n        }));\n    };\n    ApolloCache.prototype.updateQuery = function (options, update) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.updateQuery\");\n        }\n        return this.batch({\n            update: function (cache) {\n                var value = muteDeprecations(\"canonizeResults\", function () {\n                    return cache.readQuery(options);\n                });\n                var data = update(value);\n                if (data === void 0 || data === null)\n                    return value;\n                cache.writeQuery(__assign(__assign({}, options), { data: data }));\n                return data;\n            },\n        });\n    };\n    ApolloCache.prototype.updateFragment = function (options, update) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.updateFragment\");\n        }\n        return this.batch({\n            update: function (cache) {\n                var value = muteDeprecations(\"canonizeResults\", function () {\n                    return cache.readFragment(options);\n                });\n                var data = update(value);\n                if (data === void 0 || data === null)\n                    return value;\n                cache.writeFragment(__assign(__assign({}, options), { data: data }));\n                return data;\n            },\n        });\n    };\n    return ApolloCache;\n}());\nexport { ApolloCache };\nif (globalThis.__DEV__ !== false) {\n    ApolloCache.prototype.getMemoryInternals = getApolloCacheMemoryInternals;\n}\n//# sourceMappingURL=cache.js.map","import { __extends } from \"tslib\";\nvar MissingFieldError = /** @class */ (function (_super) {\n    __extends(MissingFieldError, _super);\n    function MissingFieldError(message, path, query, variables) {\n        var _a;\n        // 'Error' breaks prototype chain here\n        var _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.path = path;\n        _this.query = query;\n        _this.variables = variables;\n        if (Array.isArray(_this.path)) {\n            _this.missing = _this.message;\n            for (var i = _this.path.length - 1; i >= 0; --i) {\n                _this.missing = (_a = {}, _a[_this.path[i]] = _this.missing, _a);\n            }\n        }\n        else {\n            _this.missing = _this.path;\n        }\n        // We're not using `Object.setPrototypeOf` here as it isn't fully supported\n        // on Android (see issue #3236).\n        _this.__proto__ = MissingFieldError.prototype;\n        return _this;\n    }\n    return MissingFieldError;\n}(Error));\nexport { MissingFieldError };\n//# sourceMappingURL=common.js.map","import { isReference, isField, DeepMerger, resultKeyNameFromField, shouldInclude, isNonNullObject, compact, createFragmentMap, getFragmentDefinitions, isArray, } from \"../../utilities/index.js\";\nexport var hasOwn = Object.prototype.hasOwnProperty;\nexport function isNullish(value) {\n    return value === null || value === void 0;\n}\nexport { isArray };\nexport function defaultDataIdFromObject(_a, context) {\n    var __typename = _a.__typename, id = _a.id, _id = _a._id;\n    if (typeof __typename === \"string\") {\n        if (context) {\n            context.keyObject =\n                !isNullish(id) ? { id: id }\n                    : !isNullish(_id) ? { _id: _id }\n                        : void 0;\n        }\n        // If there is no object.id, fall back to object._id.\n        if (isNullish(id) && !isNullish(_id)) {\n            id = _id;\n        }\n        if (!isNullish(id)) {\n            return \"\".concat(__typename, \":\").concat(typeof id === \"number\" || typeof id === \"string\" ?\n                id\n                : JSON.stringify(id));\n        }\n    }\n}\nvar defaultConfig = {\n    dataIdFromObject: defaultDataIdFromObject,\n    addTypename: true,\n    resultCaching: true,\n    // Thanks to the shouldCanonizeResults helper, this should be the only line\n    // you have to change to reenable canonization by default in the future.\n    canonizeResults: false,\n};\nexport function normalizeConfig(config) {\n    return compact(defaultConfig, config);\n}\nexport function shouldCanonizeResults(config) {\n    var value = config.canonizeResults;\n    return value === void 0 ? defaultConfig.canonizeResults : value;\n}\nexport function getTypenameFromStoreObject(store, objectOrReference) {\n    return isReference(objectOrReference) ?\n        store.get(objectOrReference.__ref, \"__typename\")\n        : objectOrReference && objectOrReference.__typename;\n}\nexport var TypeOrFieldNameRegExp = /^[_a-z][_0-9a-z]*/i;\nexport function fieldNameFromStoreName(storeFieldName) {\n    var match = storeFieldName.match(TypeOrFieldNameRegExp);\n    return match ? match[0] : storeFieldName;\n}\nexport function selectionSetMatchesResult(selectionSet, result, variables) {\n    if (isNonNullObject(result)) {\n        return isArray(result) ?\n            result.every(function (item) {\n                return selectionSetMatchesResult(selectionSet, item, variables);\n            })\n            : selectionSet.selections.every(function (field) {\n                if (isField(field) && shouldInclude(field, variables)) {\n                    var key = resultKeyNameFromField(field);\n                    return (hasOwn.call(result, key) &&\n                        (!field.selectionSet ||\n                            selectionSetMatchesResult(field.selectionSet, result[key], variables)));\n                }\n                // If the selection has been skipped with @skip(true) or\n                // @include(false), it should not count against the matching. If\n                // the selection is not a field, it must be a fragment (inline or\n                // named). We will determine if selectionSetMatchesResult for that\n                // fragment when we get to it, so for now we return true.\n                return true;\n            });\n    }\n    return false;\n}\nexport function storeValueIsStoreObject(value) {\n    return isNonNullObject(value) && !isReference(value) && !isArray(value);\n}\nexport function makeProcessedFieldsMerger() {\n    return new DeepMerger();\n}\nexport function extractFragmentContext(document, fragments) {\n    // FragmentMap consisting only of fragments defined directly in document, not\n    // including other fragments registered in the FragmentRegistry.\n    var fragmentMap = createFragmentMap(getFragmentDefinitions(document));\n    return {\n        fragmentMap: fragmentMap,\n        lookupFragment: function (name) {\n            var def = fragmentMap[name];\n            if (!def && fragments) {\n                def = fragments.lookup(name);\n            }\n            return def || null;\n        },\n    };\n}\n//# sourceMappingURL=helpers.js.map","import { __assign, __extends, __rest } from \"tslib\";\nimport { invariant } from \"../../utilities/globals/index.js\";\nimport { dep } from \"optimism\";\nimport { equal } from \"@wry/equality\";\nimport { Trie } from \"@wry/trie\";\nimport { isReference, makeReference, DeepMerger, maybeDeepFreeze, canUseWeakMap, isNonNullObject, } from \"../../utilities/index.js\";\nimport { hasOwn, fieldNameFromStoreName } from \"./helpers.js\";\nvar DELETE = Object.create(null);\nvar delModifier = function () { return DELETE; };\nvar INVALIDATE = Object.create(null);\nvar EntityStore = /** @class */ (function () {\n    function EntityStore(policies, group) {\n        var _this = this;\n        this.policies = policies;\n        this.group = group;\n        this.data = Object.create(null);\n        // Maps root entity IDs to the number of times they have been retained, minus\n        // the number of times they have been released. Retained entities keep other\n        // entities they reference (even indirectly) from being garbage collected.\n        this.rootIds = Object.create(null);\n        // Lazily tracks { __ref: <dataId> } strings contained by this.data[dataId].\n        this.refs = Object.create(null);\n        // Bound function that can be passed around to provide easy access to fields\n        // of Reference objects as well as ordinary objects.\n        this.getFieldValue = function (objectOrReference, storeFieldName) {\n            return maybeDeepFreeze(isReference(objectOrReference) ?\n                _this.get(objectOrReference.__ref, storeFieldName)\n                : objectOrReference && objectOrReference[storeFieldName]);\n        };\n        // Returns true for non-normalized StoreObjects and non-dangling\n        // References, indicating that readField(name, objOrRef) has a chance of\n        // working. Useful for filtering out dangling references from lists.\n        this.canRead = function (objOrRef) {\n            return isReference(objOrRef) ?\n                _this.has(objOrRef.__ref)\n                : typeof objOrRef === \"object\";\n        };\n        // Bound function that converts an id or an object with a __typename and\n        // primary key fields to a Reference object. If called with a Reference object,\n        // that same Reference object is returned. Pass true for mergeIntoStore to persist\n        // an object into the store.\n        this.toReference = function (objOrIdOrRef, mergeIntoStore) {\n            if (typeof objOrIdOrRef === \"string\") {\n                return makeReference(objOrIdOrRef);\n            }\n            if (isReference(objOrIdOrRef)) {\n                return objOrIdOrRef;\n            }\n            var id = _this.policies.identify(objOrIdOrRef)[0];\n            if (id) {\n                var ref = makeReference(id);\n                if (mergeIntoStore) {\n                    _this.merge(id, objOrIdOrRef);\n                }\n                return ref;\n            }\n        };\n    }\n    // Although the EntityStore class is abstract, it contains concrete\n    // implementations of the various NormalizedCache interface methods that\n    // are inherited by the Root and Layer subclasses.\n    EntityStore.prototype.toObject = function () {\n        return __assign({}, this.data);\n    };\n    EntityStore.prototype.has = function (dataId) {\n        return this.lookup(dataId, true) !== void 0;\n    };\n    EntityStore.prototype.get = function (dataId, fieldName) {\n        this.group.depend(dataId, fieldName);\n        if (hasOwn.call(this.data, dataId)) {\n            var storeObject = this.data[dataId];\n            if (storeObject && hasOwn.call(storeObject, fieldName)) {\n                return storeObject[fieldName];\n            }\n        }\n        if (fieldName === \"__typename\" &&\n            hasOwn.call(this.policies.rootTypenamesById, dataId)) {\n            return this.policies.rootTypenamesById[dataId];\n        }\n        if (this instanceof Layer) {\n            return this.parent.get(dataId, fieldName);\n        }\n    };\n    EntityStore.prototype.lookup = function (dataId, dependOnExistence) {\n        // The has method (above) calls lookup with dependOnExistence = true, so\n        // that it can later be invalidated when we add or remove a StoreObject for\n        // this dataId. Any consumer who cares about the contents of the StoreObject\n        // should not rely on this dependency, since the contents could change\n        // without the object being added or removed.\n        if (dependOnExistence)\n            this.group.depend(dataId, \"__exists\");\n        if (hasOwn.call(this.data, dataId)) {\n            return this.data[dataId];\n        }\n        if (this instanceof Layer) {\n            return this.parent.lookup(dataId, dependOnExistence);\n        }\n        if (this.policies.rootTypenamesById[dataId]) {\n            return Object.create(null);\n        }\n    };\n    EntityStore.prototype.merge = function (older, newer) {\n        var _this = this;\n        var dataId;\n        // Convert unexpected references to ID strings.\n        if (isReference(older))\n            older = older.__ref;\n        if (isReference(newer))\n            newer = newer.__ref;\n        var existing = typeof older === \"string\" ? this.lookup((dataId = older)) : older;\n        var incoming = typeof newer === \"string\" ? this.lookup((dataId = newer)) : newer;\n        // If newer was a string ID, but that ID was not defined in this store,\n        // then there are no fields to be merged, so we're done.\n        if (!incoming)\n            return;\n        invariant(typeof dataId === \"string\", 2);\n        var merged = new DeepMerger(storeObjectReconciler).merge(existing, incoming);\n        // Even if merged === existing, existing may have come from a lower\n        // layer, so we always need to set this.data[dataId] on this level.\n        this.data[dataId] = merged;\n        if (merged !== existing) {\n            delete this.refs[dataId];\n            if (this.group.caching) {\n                var fieldsToDirty_1 = Object.create(null);\n                // If we added a new StoreObject where there was previously none, dirty\n                // anything that depended on the existence of this dataId, such as the\n                // EntityStore#has method.\n                if (!existing)\n                    fieldsToDirty_1.__exists = 1;\n                // Now invalidate dependents who called getFieldValue for any fields\n                // that are changing as a result of this merge.\n                Object.keys(incoming).forEach(function (storeFieldName) {\n                    if (!existing ||\n                        existing[storeFieldName] !== merged[storeFieldName]) {\n                        // Always dirty the full storeFieldName, which may include\n                        // serialized arguments following the fieldName prefix.\n                        fieldsToDirty_1[storeFieldName] = 1;\n                        // Also dirty fieldNameFromStoreName(storeFieldName) if it's\n                        // different from storeFieldName and this field does not have\n                        // keyArgs configured, because that means the cache can't make\n                        // any assumptions about how field values with the same field\n                        // name but different arguments might be interrelated, so it\n                        // must err on the side of invalidating all field values that\n                        // share the same short fieldName, regardless of arguments.\n                        var fieldName = fieldNameFromStoreName(storeFieldName);\n                        if (fieldName !== storeFieldName &&\n                            !_this.policies.hasKeyArgs(merged.__typename, fieldName)) {\n                            fieldsToDirty_1[fieldName] = 1;\n                        }\n                        // If merged[storeFieldName] has become undefined, and this is the\n                        // Root layer, actually delete the property from the merged object,\n                        // which is guaranteed to have been created fresh in this method.\n                        if (merged[storeFieldName] === void 0 && !(_this instanceof Layer)) {\n                            delete merged[storeFieldName];\n                        }\n                    }\n                });\n                if (fieldsToDirty_1.__typename &&\n                    !(existing && existing.__typename) &&\n                    // Since we return default root __typename strings\n                    // automatically from store.get, we don't need to dirty the\n                    // ROOT_QUERY.__typename field if merged.__typename is equal\n                    // to the default string (usually \"Query\").\n                    this.policies.rootTypenamesById[dataId] === merged.__typename) {\n                    delete fieldsToDirty_1.__typename;\n                }\n                Object.keys(fieldsToDirty_1).forEach(function (fieldName) {\n                    return _this.group.dirty(dataId, fieldName);\n                });\n            }\n        }\n    };\n    EntityStore.prototype.modify = function (dataId, fields) {\n        var _this = this;\n        var storeObject = this.lookup(dataId);\n        if (storeObject) {\n            var changedFields_1 = Object.create(null);\n            var needToMerge_1 = false;\n            var allDeleted_1 = true;\n            var sharedDetails_1 = {\n                DELETE: DELETE,\n                INVALIDATE: INVALIDATE,\n                isReference: isReference,\n                toReference: this.toReference,\n                canRead: this.canRead,\n                readField: function (fieldNameOrOptions, from) {\n                    return _this.policies.readField(typeof fieldNameOrOptions === \"string\" ?\n                        {\n                            fieldName: fieldNameOrOptions,\n                            from: from || makeReference(dataId),\n                        }\n                        : fieldNameOrOptions, { store: _this });\n                },\n            };\n            Object.keys(storeObject).forEach(function (storeFieldName) {\n                var fieldName = fieldNameFromStoreName(storeFieldName);\n                var fieldValue = storeObject[storeFieldName];\n                if (fieldValue === void 0)\n                    return;\n                var modify = typeof fields === \"function\" ? fields : (fields[storeFieldName] || fields[fieldName]);\n                if (modify) {\n                    var newValue = modify === delModifier ? DELETE : (modify(maybeDeepFreeze(fieldValue), __assign(__assign({}, sharedDetails_1), { fieldName: fieldName, storeFieldName: storeFieldName, storage: _this.getStorage(dataId, storeFieldName) })));\n                    if (newValue === INVALIDATE) {\n                        _this.group.dirty(dataId, storeFieldName);\n                    }\n                    else {\n                        if (newValue === DELETE)\n                            newValue = void 0;\n                        if (newValue !== fieldValue) {\n                            changedFields_1[storeFieldName] = newValue;\n                            needToMerge_1 = true;\n                            fieldValue = newValue;\n                            if (globalThis.__DEV__ !== false) {\n                                var checkReference = function (ref) {\n                                    if (_this.lookup(ref.__ref) === undefined) {\n                                        globalThis.__DEV__ !== false && invariant.warn(3, ref);\n                                        return true;\n                                    }\n                                };\n                                if (isReference(newValue)) {\n                                    checkReference(newValue);\n                                }\n                                else if (Array.isArray(newValue)) {\n                                    // Warn about writing \"mixed\" arrays of Reference and non-Reference objects\n                                    var seenReference = false;\n                                    var someNonReference = void 0;\n                                    for (var _i = 0, newValue_1 = newValue; _i < newValue_1.length; _i++) {\n                                        var value = newValue_1[_i];\n                                        if (isReference(value)) {\n                                            seenReference = true;\n                                            if (checkReference(value))\n                                                break;\n                                        }\n                                        else {\n                                            // Do not warn on primitive values, since those could never be represented\n                                            // by a reference. This is a valid (albeit uncommon) use case.\n                                            if (typeof value === \"object\" && !!value) {\n                                                var id = _this.policies.identify(value)[0];\n                                                // check if object could even be referenced, otherwise we are not interested in it for this warning\n                                                if (id) {\n                                                    someNonReference = value;\n                                                }\n                                            }\n                                        }\n                                        if (seenReference && someNonReference !== undefined) {\n                                            globalThis.__DEV__ !== false && invariant.warn(4, someNonReference);\n                                            break;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (fieldValue !== void 0) {\n                    allDeleted_1 = false;\n                }\n            });\n            if (needToMerge_1) {\n                this.merge(dataId, changedFields_1);\n                if (allDeleted_1) {\n                    if (this instanceof Layer) {\n                        this.data[dataId] = void 0;\n                    }\n                    else {\n                        delete this.data[dataId];\n                    }\n                    this.group.dirty(dataId, \"__exists\");\n                }\n                return true;\n            }\n        }\n        return false;\n    };\n    // If called with only one argument, removes the entire entity\n    // identified by dataId. If called with a fieldName as well, removes all\n    // fields of that entity whose names match fieldName according to the\n    // fieldNameFromStoreName helper function. If called with a fieldName\n    // and variables, removes all fields of that entity whose names match fieldName\n    // and whose arguments when cached exactly match the variables passed.\n    EntityStore.prototype.delete = function (dataId, fieldName, args) {\n        var _a;\n        var storeObject = this.lookup(dataId);\n        if (storeObject) {\n            var typename = this.getFieldValue(storeObject, \"__typename\");\n            var storeFieldName = fieldName && args ?\n                this.policies.getStoreFieldName({ typename: typename, fieldName: fieldName, args: args })\n                : fieldName;\n            return this.modify(dataId, storeFieldName ? (_a = {},\n                _a[storeFieldName] = delModifier,\n                _a) : delModifier);\n        }\n        return false;\n    };\n    EntityStore.prototype.evict = function (options, limit) {\n        var evicted = false;\n        if (options.id) {\n            if (hasOwn.call(this.data, options.id)) {\n                evicted = this.delete(options.id, options.fieldName, options.args);\n            }\n            if (this instanceof Layer && this !== limit) {\n                evicted = this.parent.evict(options, limit) || evicted;\n            }\n            // Always invalidate the field to trigger rereading of watched\n            // queries, even if no cache data was modified by the eviction,\n            // because queries may depend on computed fields with custom read\n            // functions, whose values are not stored in the EntityStore.\n            if (options.fieldName || evicted) {\n                this.group.dirty(options.id, options.fieldName || \"__exists\");\n            }\n        }\n        return evicted;\n    };\n    EntityStore.prototype.clear = function () {\n        this.replace(null);\n    };\n    EntityStore.prototype.extract = function () {\n        var _this = this;\n        var obj = this.toObject();\n        var extraRootIds = [];\n        this.getRootIdSet().forEach(function (id) {\n            if (!hasOwn.call(_this.policies.rootTypenamesById, id)) {\n                extraRootIds.push(id);\n            }\n        });\n        if (extraRootIds.length) {\n            obj.__META = { extraRootIds: extraRootIds.sort() };\n        }\n        return obj;\n    };\n    EntityStore.prototype.replace = function (newData) {\n        var _this = this;\n        Object.keys(this.data).forEach(function (dataId) {\n            if (!(newData && hasOwn.call(newData, dataId))) {\n                _this.delete(dataId);\n            }\n        });\n        if (newData) {\n            var __META = newData.__META, rest_1 = __rest(newData, [\"__META\"]);\n            Object.keys(rest_1).forEach(function (dataId) {\n                _this.merge(dataId, rest_1[dataId]);\n            });\n            if (__META) {\n                __META.extraRootIds.forEach(this.retain, this);\n            }\n        }\n    };\n    EntityStore.prototype.retain = function (rootId) {\n        return (this.rootIds[rootId] = (this.rootIds[rootId] || 0) + 1);\n    };\n    EntityStore.prototype.release = function (rootId) {\n        if (this.rootIds[rootId] > 0) {\n            var count = --this.rootIds[rootId];\n            if (!count)\n                delete this.rootIds[rootId];\n            return count;\n        }\n        return 0;\n    };\n    // Return a Set<string> of all the ID strings that have been retained by\n    // this layer/root *and* any layers/roots beneath it.\n    EntityStore.prototype.getRootIdSet = function (ids) {\n        if (ids === void 0) { ids = new Set(); }\n        Object.keys(this.rootIds).forEach(ids.add, ids);\n        if (this instanceof Layer) {\n            this.parent.getRootIdSet(ids);\n        }\n        else {\n            // Official singleton IDs like ROOT_QUERY and ROOT_MUTATION are\n            // always considered roots for garbage collection, regardless of\n            // their retainment counts in this.rootIds.\n            Object.keys(this.policies.rootTypenamesById).forEach(ids.add, ids);\n        }\n        return ids;\n    };\n    // The goal of garbage collection is to remove IDs from the Root layer of the\n    // store that are no longer reachable starting from any IDs that have been\n    // explicitly retained (see retain and release, above). Returns an array of\n    // dataId strings that were removed from the store.\n    EntityStore.prototype.gc = function () {\n        var _this = this;\n        var ids = this.getRootIdSet();\n        var snapshot = this.toObject();\n        ids.forEach(function (id) {\n            if (hasOwn.call(snapshot, id)) {\n                // Because we are iterating over an ECMAScript Set, the IDs we add here\n                // will be visited in later iterations of the forEach loop only if they\n                // were not previously contained by the Set.\n                Object.keys(_this.findChildRefIds(id)).forEach(ids.add, ids);\n                // By removing IDs from the snapshot object here, we protect them from\n                // getting removed from the root store layer below.\n                delete snapshot[id];\n            }\n        });\n        var idsToRemove = Object.keys(snapshot);\n        if (idsToRemove.length) {\n            var root_1 = this;\n            while (root_1 instanceof Layer)\n                root_1 = root_1.parent;\n            idsToRemove.forEach(function (id) { return root_1.delete(id); });\n        }\n        return idsToRemove;\n    };\n    EntityStore.prototype.findChildRefIds = function (dataId) {\n        if (!hasOwn.call(this.refs, dataId)) {\n            var found_1 = (this.refs[dataId] = Object.create(null));\n            var root = this.data[dataId];\n            if (!root)\n                return found_1;\n            var workSet_1 = new Set([root]);\n            // Within the store, only arrays and objects can contain child entity\n            // references, so we can prune the traversal using this predicate:\n            workSet_1.forEach(function (obj) {\n                if (isReference(obj)) {\n                    found_1[obj.__ref] = true;\n                    // In rare cases, a { __ref } Reference object may have other fields.\n                    // This often indicates a mismerging of References with StoreObjects,\n                    // but garbage collection should not be fooled by a stray __ref\n                    // property in a StoreObject (ignoring all the other fields just\n                    // because the StoreObject looks like a Reference). To avoid this\n                    // premature termination of findChildRefIds recursion, we fall through\n                    // to the code below, which will handle any other properties of obj.\n                }\n                if (isNonNullObject(obj)) {\n                    Object.keys(obj).forEach(function (key) {\n                        var child = obj[key];\n                        // No need to add primitive values to the workSet, since they cannot\n                        // contain reference objects.\n                        if (isNonNullObject(child)) {\n                            workSet_1.add(child);\n                        }\n                    });\n                }\n            });\n        }\n        return this.refs[dataId];\n    };\n    EntityStore.prototype.makeCacheKey = function () {\n        return this.group.keyMaker.lookupArray(arguments);\n    };\n    return EntityStore;\n}());\nexport { EntityStore };\n// A single CacheGroup represents a set of one or more EntityStore objects,\n// typically the Root store in a CacheGroup by itself, and all active Layer\n// stores in a group together. A single EntityStore object belongs to only\n// one CacheGroup, store.group. The CacheGroup is responsible for tracking\n// dependencies, so store.group is helpful for generating unique keys for\n// cached results that need to be invalidated when/if those dependencies\n// change. If we used the EntityStore objects themselves as cache keys (that\n// is, store rather than store.group), the cache would become unnecessarily\n// fragmented by all the different Layer objects. Instead, the CacheGroup\n// approach allows all optimistic Layer objects in the same linked list to\n// belong to one CacheGroup, with the non-optimistic Root object belonging\n// to another CacheGroup, allowing resultCaching dependencies to be tracked\n// separately for optimistic and non-optimistic entity data.\nvar CacheGroup = /** @class */ (function () {\n    function CacheGroup(caching, parent) {\n        if (parent === void 0) { parent = null; }\n        this.caching = caching;\n        this.parent = parent;\n        this.d = null;\n        this.resetCaching();\n    }\n    CacheGroup.prototype.resetCaching = function () {\n        this.d = this.caching ? dep() : null;\n        this.keyMaker = new Trie(canUseWeakMap);\n    };\n    CacheGroup.prototype.depend = function (dataId, storeFieldName) {\n        if (this.d) {\n            this.d(makeDepKey(dataId, storeFieldName));\n            var fieldName = fieldNameFromStoreName(storeFieldName);\n            if (fieldName !== storeFieldName) {\n                // Fields with arguments that contribute extra identifying\n                // information to the fieldName (thus forming the storeFieldName)\n                // depend not only on the full storeFieldName but also on the\n                // short fieldName, so the field can be invalidated using either\n                // level of specificity.\n                this.d(makeDepKey(dataId, fieldName));\n            }\n            if (this.parent) {\n                this.parent.depend(dataId, storeFieldName);\n            }\n        }\n    };\n    CacheGroup.prototype.dirty = function (dataId, storeFieldName) {\n        if (this.d) {\n            this.d.dirty(makeDepKey(dataId, storeFieldName), \n            // When storeFieldName === \"__exists\", that means the entity identified\n            // by dataId has either disappeared from the cache or was newly added,\n            // so the result caching system would do well to \"forget everything it\n            // knows\" about that object. To achieve that kind of invalidation, we\n            // not only dirty the associated result cache entry, but also remove it\n            // completely from the dependency graph. For the optimism implementation\n            // details, see https://github.com/benjamn/optimism/pull/195.\n            storeFieldName === \"__exists\" ? \"forget\" : \"setDirty\");\n        }\n    };\n    return CacheGroup;\n}());\nfunction makeDepKey(dataId, storeFieldName) {\n    // Since field names cannot have '#' characters in them, this method\n    // of joining the field name and the ID should be unambiguous, and much\n    // cheaper than JSON.stringify([dataId, fieldName]).\n    return storeFieldName + \"#\" + dataId;\n}\nexport function maybeDependOnExistenceOfEntity(store, entityId) {\n    if (supportsResultCaching(store)) {\n        // We use this pseudo-field __exists elsewhere in the EntityStore code to\n        // represent changes in the existence of the entity object identified by\n        // entityId. This dependency gets reliably dirtied whenever an object with\n        // this ID is deleted (or newly created) within this group, so any result\n        // cache entries (for example, StoreReader#executeSelectionSet results) that\n        // depend on __exists for this entityId will get dirtied as well, leading to\n        // the eventual recomputation (instead of reuse) of those result objects the\n        // next time someone reads them from the cache.\n        store.group.depend(entityId, \"__exists\");\n    }\n}\n(function (EntityStore) {\n    // Refer to this class as EntityStore.Root outside this namespace.\n    var Root = /** @class */ (function (_super) {\n        __extends(Root, _super);\n        function Root(_a) {\n            var policies = _a.policies, _b = _a.resultCaching, resultCaching = _b === void 0 ? true : _b, seed = _a.seed;\n            var _this = _super.call(this, policies, new CacheGroup(resultCaching)) || this;\n            _this.stump = new Stump(_this);\n            _this.storageTrie = new Trie(canUseWeakMap);\n            if (seed)\n                _this.replace(seed);\n            return _this;\n        }\n        Root.prototype.addLayer = function (layerId, replay) {\n            // Adding an optimistic Layer on top of the Root actually adds the Layer\n            // on top of the Stump, so the Stump always comes between the Root and\n            // any Layer objects that we've added.\n            return this.stump.addLayer(layerId, replay);\n        };\n        Root.prototype.removeLayer = function () {\n            // Never remove the root layer.\n            return this;\n        };\n        Root.prototype.getStorage = function () {\n            return this.storageTrie.lookupArray(arguments);\n        };\n        return Root;\n    }(EntityStore));\n    EntityStore.Root = Root;\n})(EntityStore || (EntityStore = {}));\n// Not exported, since all Layer instances are created by the addLayer method\n// of the EntityStore.Root class.\nvar Layer = /** @class */ (function (_super) {\n    __extends(Layer, _super);\n    function Layer(id, parent, replay, group) {\n        var _this = _super.call(this, parent.policies, group) || this;\n        _this.id = id;\n        _this.parent = parent;\n        _this.replay = replay;\n        _this.group = group;\n        replay(_this);\n        return _this;\n    }\n    Layer.prototype.addLayer = function (layerId, replay) {\n        return new Layer(layerId, this, replay, this.group);\n    };\n    Layer.prototype.removeLayer = function (layerId) {\n        var _this = this;\n        // Remove all instances of the given id, not just the first one.\n        var parent = this.parent.removeLayer(layerId);\n        if (layerId === this.id) {\n            if (this.group.caching) {\n                // Dirty every ID we're removing. Technically we might be able to avoid\n                // dirtying fields that have values in higher layers, but we don't have\n                // easy access to higher layers here, and we're about to recreate those\n                // layers anyway (see parent.addLayer below).\n                Object.keys(this.data).forEach(function (dataId) {\n                    var ownStoreObject = _this.data[dataId];\n                    var parentStoreObject = parent[\"lookup\"](dataId);\n                    if (!parentStoreObject) {\n                        // The StoreObject identified by dataId was defined in this layer\n                        // but will be undefined in the parent layer, so we can delete the\n                        // whole entity using this.delete(dataId). Since we're about to\n                        // throw this layer away, the only goal of this deletion is to dirty\n                        // the removed fields.\n                        _this.delete(dataId);\n                    }\n                    else if (!ownStoreObject) {\n                        // This layer had an entry for dataId but it was undefined, which\n                        // means the entity was deleted in this layer, and it's about to\n                        // become undeleted when we remove this layer, so we need to dirty\n                        // all fields that are about to be reexposed.\n                        _this.group.dirty(dataId, \"__exists\");\n                        Object.keys(parentStoreObject).forEach(function (storeFieldName) {\n                            _this.group.dirty(dataId, storeFieldName);\n                        });\n                    }\n                    else if (ownStoreObject !== parentStoreObject) {\n                        // If ownStoreObject is not exactly the same as parentStoreObject,\n                        // dirty any fields whose values will change as a result of this\n                        // removal.\n                        Object.keys(ownStoreObject).forEach(function (storeFieldName) {\n                            if (!equal(ownStoreObject[storeFieldName], parentStoreObject[storeFieldName])) {\n                                _this.group.dirty(dataId, storeFieldName);\n                            }\n                        });\n                    }\n                });\n            }\n            return parent;\n        }\n        // No changes are necessary if the parent chain remains identical.\n        if (parent === this.parent)\n            return this;\n        // Recreate this layer on top of the new parent.\n        return parent.addLayer(this.id, this.replay);\n    };\n    Layer.prototype.toObject = function () {\n        return __assign(__assign({}, this.parent.toObject()), this.data);\n    };\n    Layer.prototype.findChildRefIds = function (dataId) {\n        var fromParent = this.parent.findChildRefIds(dataId);\n        return hasOwn.call(this.data, dataId) ? __assign(__assign({}, fromParent), _super.prototype.findChildRefIds.call(this, dataId)) : fromParent;\n    };\n    Layer.prototype.getStorage = function () {\n        var p = this.parent;\n        while (p.parent)\n            p = p.parent;\n        return p.getStorage.apply(p, \n        // @ts-expect-error\n        arguments);\n    };\n    return Layer;\n}(EntityStore));\n// Represents a Layer permanently installed just above the Root, which allows\n// reading optimistically (and registering optimistic dependencies) even when\n// no optimistic layers are currently active. The stump.group CacheGroup object\n// is shared by any/all Layer objects added on top of the Stump.\nvar Stump = /** @class */ (function (_super) {\n    __extends(Stump, _super);\n    function Stump(root) {\n        return _super.call(this, \"EntityStore.Stump\", root, function () { }, new CacheGroup(root.group.caching, root.group)) || this;\n    }\n    Stump.prototype.removeLayer = function () {\n        // Never remove the Stump layer.\n        return this;\n    };\n    Stump.prototype.merge = function (older, newer) {\n        // We never want to write any data into the Stump, so we forward any merge\n        // calls to the Root instead. Another option here would be to throw an\n        // exception, but the toReference(object, true) function can sometimes\n        // trigger Stump writes (which used to be Root writes, before the Stump\n        // concept was introduced).\n        return this.parent.merge(older, newer);\n    };\n    return Stump;\n}(Layer));\nfunction storeObjectReconciler(existingObject, incomingObject, property) {\n    var existingValue = existingObject[property];\n    var incomingValue = incomingObject[property];\n    // Wherever there is a key collision, prefer the incoming value, unless\n    // it is deeply equal to the existing value. It's worth checking deep\n    // equality here (even though blindly returning incoming would be\n    // logically correct) because preserving the referential identity of\n    // existing data can prevent needless rereading and rerendering.\n    return equal(existingValue, incomingValue) ? existingValue : incomingValue;\n}\nexport function supportsResultCaching(store) {\n    // When result caching is disabled, store.depend will be null.\n    return !!(store instanceof EntityStore && store.group.caching);\n}\n//# sourceMappingURL=entityStore.js.map","import { __assign } from \"tslib\";\nimport { Trie } from \"@wry/trie\";\nimport { canUseWeakMap, canUseWeakSet, isNonNullObject as isObjectOrArray, } from \"../../utilities/index.js\";\nimport { isArray } from \"./helpers.js\";\nfunction shallowCopy(value) {\n    if (isObjectOrArray(value)) {\n        return isArray(value) ?\n            value.slice(0)\n            : __assign({ __proto__: Object.getPrototypeOf(value) }, value);\n    }\n    return value;\n}\n// When programmers talk about the \"canonical form\" of an object, they\n// usually have the following meaning in mind, which I've copied from\n// https://en.wiktionary.org/wiki/canonical_form:\n//\n// 1. A standard or normal presentation of a mathematical entity [or\n//    object]. A canonical form is an element of a set of representatives\n//    of equivalence classes of forms such that there is a function or\n//    procedure which projects every element of each equivalence class\n//    onto that one element, the canonical form of that equivalence\n//    class. The canonical form is expected to be simpler than the rest of\n//    the forms in some way.\n//\n// That's a long-winded way of saying any two objects that have the same\n// canonical form may be considered equivalent, even if they are !==,\n// which usually means the objects are structurally equivalent (deeply\n// equal), but don't necessarily use the same memory.\n//\n// Like a literary or musical canon, this ObjectCanon class represents a\n// collection of unique canonical items (JavaScript objects), with the\n// important property that canon.admit(a) === canon.admit(b) if a and b\n// are deeply equal to each other. In terms of the definition above, the\n// canon.admit method is the \"function or procedure which projects every\"\n// object \"onto that one element, the canonical form.\"\n//\n// In the worst case, the canonicalization process may involve looking at\n// every property in the provided object tree, so it takes the same order\n// of time as deep equality checking. Fortunately, already-canonicalized\n// objects are returned immediately from canon.admit, so the presence of\n// canonical subtrees tends to speed up canonicalization.\n//\n// Since consumers of canonical objects can check for deep equality in\n// constant time, canonicalizing cache results can massively improve the\n// performance of application code that skips re-rendering unchanged\n// results, such as \"pure\" UI components in a framework like React.\n//\n// Of course, since canonical objects may be shared widely between\n// unrelated consumers, it's important to think of them as immutable, even\n// though they are not actually frozen with Object.freeze in production,\n// due to the extra performance overhead that comes with frozen objects.\n//\n// Custom scalar objects whose internal class name is neither Array nor\n// Object can be included safely in the admitted tree, but they will not\n// be replaced with a canonical version (to put it another way, they are\n// assumed to be canonical already).\n//\n// If we ignore custom objects, no detection of cycles or repeated object\n// references is currently required by the StoreReader class, since\n// GraphQL result objects are JSON-serializable trees (and thus contain\n// neither cycles nor repeated subtrees), so we can avoid the complexity\n// of keeping track of objects we've already seen during the recursion of\n// the admit method.\n//\n// In the future, we may consider adding additional cases to the switch\n// statement to handle other common object types, such as \"[object Date]\"\n// objects, as needed.\nvar ObjectCanon = /** @class */ (function () {\n    function ObjectCanon() {\n        // Set of all canonical objects this ObjectCanon has admitted, allowing\n        // canon.admit to return previously-canonicalized objects immediately.\n        this.known = new (canUseWeakSet ? WeakSet : Set)();\n        // Efficient storage/lookup structure for canonical objects.\n        this.pool = new Trie(canUseWeakMap);\n        // Make the ObjectCanon assume this value has already been\n        // canonicalized.\n        this.passes = new WeakMap();\n        // Arrays that contain the same elements in a different order can share\n        // the same SortedKeysInfo object, to save memory.\n        this.keysByJSON = new Map();\n        // This has to come last because it depends on keysByJSON.\n        this.empty = this.admit({});\n    }\n    ObjectCanon.prototype.isKnown = function (value) {\n        return isObjectOrArray(value) && this.known.has(value);\n    };\n    ObjectCanon.prototype.pass = function (value) {\n        if (isObjectOrArray(value)) {\n            var copy = shallowCopy(value);\n            this.passes.set(copy, value);\n            return copy;\n        }\n        return value;\n    };\n    ObjectCanon.prototype.admit = function (value) {\n        var _this = this;\n        if (isObjectOrArray(value)) {\n            var original = this.passes.get(value);\n            if (original)\n                return original;\n            var proto = Object.getPrototypeOf(value);\n            switch (proto) {\n                case Array.prototype: {\n                    if (this.known.has(value))\n                        return value;\n                    var array = value.map(this.admit, this);\n                    // Arrays are looked up in the Trie using their recursively\n                    // canonicalized elements, and the known version of the array is\n                    // preserved as node.array.\n                    var node = this.pool.lookupArray(array);\n                    if (!node.array) {\n                        this.known.add((node.array = array));\n                        // Since canonical arrays may be shared widely between\n                        // unrelated consumers, it's important to regard them as\n                        // immutable, even if they are not frozen in production.\n                        if (globalThis.__DEV__ !== false) {\n                            Object.freeze(array);\n                        }\n                    }\n                    return node.array;\n                }\n                case null:\n                case Object.prototype: {\n                    if (this.known.has(value))\n                        return value;\n                    var proto_1 = Object.getPrototypeOf(value);\n                    var array_1 = [proto_1];\n                    var keys = this.sortedKeys(value);\n                    array_1.push(keys.json);\n                    var firstValueIndex_1 = array_1.length;\n                    keys.sorted.forEach(function (key) {\n                        array_1.push(_this.admit(value[key]));\n                    });\n                    // Objects are looked up in the Trie by their prototype (which\n                    // is *not* recursively canonicalized), followed by a JSON\n                    // representation of their (sorted) keys, followed by the\n                    // sequence of recursively canonicalized values corresponding to\n                    // those keys. To keep the final results unambiguous with other\n                    // sequences (such as arrays that just happen to contain [proto,\n                    // keys.json, value1, value2, ...]), the known version of the\n                    // object is stored as node.object.\n                    var node = this.pool.lookupArray(array_1);\n                    if (!node.object) {\n                        var obj_1 = (node.object = Object.create(proto_1));\n                        this.known.add(obj_1);\n                        keys.sorted.forEach(function (key, i) {\n                            obj_1[key] = array_1[firstValueIndex_1 + i];\n                        });\n                        // Since canonical objects may be shared widely between\n                        // unrelated consumers, it's important to regard them as\n                        // immutable, even if they are not frozen in production.\n                        if (globalThis.__DEV__ !== false) {\n                            Object.freeze(obj_1);\n                        }\n                    }\n                    return node.object;\n                }\n            }\n        }\n        return value;\n    };\n    // It's worthwhile to cache the sorting of arrays of strings, since the\n    // same initial unsorted arrays tend to be encountered many times.\n    // Fortunately, we can reuse the Trie machinery to look up the sorted\n    // arrays in linear time (which is faster than sorting large arrays).\n    ObjectCanon.prototype.sortedKeys = function (obj) {\n        var keys = Object.keys(obj);\n        var node = this.pool.lookupArray(keys);\n        if (!node.keys) {\n            keys.sort();\n            var json = JSON.stringify(keys);\n            if (!(node.keys = this.keysByJSON.get(json))) {\n                this.keysByJSON.set(json, (node.keys = { sorted: keys, json: json }));\n            }\n        }\n        return node.keys;\n    };\n    return ObjectCanon;\n}());\nexport { ObjectCanon };\n//# sourceMappingURL=object-canon.js.map","import { __assign } from \"tslib\";\nimport { invariant, newInvariantError } from \"../../utilities/globals/index.js\";\nimport { Kind } from \"graphql\";\nimport { wrap } from \"optimism\";\nimport { isField, resultKeyNameFromField, isReference, makeReference, shouldInclude, addTypenameToDocument, getDefaultValues, getMainDefinition, getQueryDefinition, getFragmentFromSelection, maybeDeepFreeze, mergeDeepArray, DeepMerger, isNonNullObject, canUseWeakMap, compact, canonicalStringify, cacheSizes, } from \"../../utilities/index.js\";\nimport { maybeDependOnExistenceOfEntity, supportsResultCaching, } from \"./entityStore.js\";\nimport { isArray, extractFragmentContext, getTypenameFromStoreObject, shouldCanonizeResults, } from \"./helpers.js\";\nimport { MissingFieldError } from \"../core/types/common.js\";\nimport { ObjectCanon } from \"./object-canon.js\";\nfunction execSelectionSetKeyArgs(options) {\n    return [\n        options.selectionSet,\n        options.objectOrReference,\n        options.context,\n        // We split out this property so we can pass different values\n        // independently without modifying options.context itself.\n        options.context.canonizeResults,\n    ];\n}\nvar StoreReader = /** @class */ (function () {\n    function StoreReader(config) {\n        var _this = this;\n        this.knownResults = new (canUseWeakMap ? WeakMap : Map)();\n        this.config = compact(config, {\n            addTypename: config.addTypename !== false,\n            canonizeResults: shouldCanonizeResults(config),\n        });\n        this.canon = config.canon || new ObjectCanon();\n        // memoized functions in this class will be \"garbage-collected\"\n        // by recreating the whole `StoreReader` in\n        // `InMemoryCache.resetResultsCache`\n        // (triggered from `InMemoryCache.gc` with `resetResultCache: true`)\n        this.executeSelectionSet = wrap(function (options) {\n            var _a;\n            var canonizeResults = options.context.canonizeResults;\n            var peekArgs = execSelectionSetKeyArgs(options);\n            // Negate this boolean option so we can find out if we've already read\n            // this result using the other boolean value.\n            peekArgs[3] = !canonizeResults;\n            var other = (_a = _this.executeSelectionSet).peek.apply(_a, peekArgs);\n            if (other) {\n                if (canonizeResults) {\n                    return __assign(__assign({}, other), { \n                        // If we previously read this result without canonizing it, we can\n                        // reuse that result simply by canonizing it now.\n                        result: _this.canon.admit(other.result) });\n                }\n                // If we previously read this result with canonization enabled, we can\n                // return that canonized result as-is.\n                return other;\n            }\n            maybeDependOnExistenceOfEntity(options.context.store, options.enclosingRef.__ref);\n            // Finally, if we didn't find any useful previous results, run the real\n            // execSelectionSetImpl method with the given options.\n            return _this.execSelectionSetImpl(options);\n        }, {\n            max: this.config.resultCacheMaxSize ||\n                cacheSizes[\"inMemoryCache.executeSelectionSet\"] ||\n                50000 /* defaultCacheSizes[\"inMemoryCache.executeSelectionSet\"] */,\n            keyArgs: execSelectionSetKeyArgs,\n            // Note that the parameters of makeCacheKey are determined by the\n            // array returned by keyArgs.\n            makeCacheKey: function (selectionSet, parent, context, canonizeResults) {\n                if (supportsResultCaching(context.store)) {\n                    return context.store.makeCacheKey(selectionSet, isReference(parent) ? parent.__ref : parent, context.varString, canonizeResults);\n                }\n            },\n        });\n        this.executeSubSelectedArray = wrap(function (options) {\n            maybeDependOnExistenceOfEntity(options.context.store, options.enclosingRef.__ref);\n            return _this.execSubSelectedArrayImpl(options);\n        }, {\n            max: this.config.resultCacheMaxSize ||\n                cacheSizes[\"inMemoryCache.executeSubSelectedArray\"] ||\n                10000 /* defaultCacheSizes[\"inMemoryCache.executeSubSelectedArray\"] */,\n            makeCacheKey: function (_a) {\n                var field = _a.field, array = _a.array, context = _a.context;\n                if (supportsResultCaching(context.store)) {\n                    return context.store.makeCacheKey(field, array, context.varString);\n                }\n            },\n        });\n    }\n    StoreReader.prototype.resetCanon = function () {\n        this.canon = new ObjectCanon();\n    };\n    /**\n     * Given a store and a query, return as much of the result as possible and\n     * identify if any data was missing from the store.\n     */\n    StoreReader.prototype.diffQueryAgainstStore = function (_a) {\n        var store = _a.store, query = _a.query, _b = _a.rootId, rootId = _b === void 0 ? \"ROOT_QUERY\" : _b, variables = _a.variables, _c = _a.returnPartialData, returnPartialData = _c === void 0 ? true : _c, _d = _a.canonizeResults, canonizeResults = _d === void 0 ? this.config.canonizeResults : _d;\n        var policies = this.config.cache.policies;\n        variables = __assign(__assign({}, getDefaultValues(getQueryDefinition(query))), variables);\n        var rootRef = makeReference(rootId);\n        var execResult = this.executeSelectionSet({\n            selectionSet: getMainDefinition(query).selectionSet,\n            objectOrReference: rootRef,\n            enclosingRef: rootRef,\n            context: __assign({ store: store, query: query, policies: policies, variables: variables, varString: canonicalStringify(variables), canonizeResults: canonizeResults }, extractFragmentContext(query, this.config.fragments)),\n        });\n        var missing;\n        if (execResult.missing) {\n            // For backwards compatibility we still report an array of\n            // MissingFieldError objects, even though there will only ever be at most\n            // one of them, now that all missing field error messages are grouped\n            // together in the execResult.missing tree.\n            missing = [\n                new MissingFieldError(firstMissing(execResult.missing), execResult.missing, query, variables),\n            ];\n            if (!returnPartialData) {\n                throw missing[0];\n            }\n        }\n        return {\n            result: execResult.result,\n            complete: !missing,\n            missing: missing,\n        };\n    };\n    StoreReader.prototype.isFresh = function (result, parent, selectionSet, context) {\n        if (supportsResultCaching(context.store) &&\n            this.knownResults.get(result) === selectionSet) {\n            var latest = this.executeSelectionSet.peek(selectionSet, parent, context, \n            // If result is canonical, then it could only have been previously\n            // cached by the canonizing version of executeSelectionSet, so we can\n            // avoid checking both possibilities here.\n            this.canon.isKnown(result));\n            if (latest && result === latest.result) {\n                return true;\n            }\n        }\n        return false;\n    };\n    // Uncached version of executeSelectionSet.\n    StoreReader.prototype.execSelectionSetImpl = function (_a) {\n        var _this = this;\n        var selectionSet = _a.selectionSet, objectOrReference = _a.objectOrReference, enclosingRef = _a.enclosingRef, context = _a.context;\n        if (isReference(objectOrReference) &&\n            !context.policies.rootTypenamesById[objectOrReference.__ref] &&\n            !context.store.has(objectOrReference.__ref)) {\n            return {\n                result: this.canon.empty,\n                missing: \"Dangling reference to missing \".concat(objectOrReference.__ref, \" object\"),\n            };\n        }\n        var variables = context.variables, policies = context.policies, store = context.store;\n        var typename = store.getFieldValue(objectOrReference, \"__typename\");\n        var objectsToMerge = [];\n        var missing;\n        var missingMerger = new DeepMerger();\n        if (this.config.addTypename &&\n            typeof typename === \"string\" &&\n            !policies.rootIdsByTypename[typename]) {\n            // Ensure we always include a default value for the __typename\n            // field, if we have one, and this.config.addTypename is true. Note\n            // that this field can be overridden by other merged objects.\n            objectsToMerge.push({ __typename: typename });\n        }\n        function handleMissing(result, resultName) {\n            var _a;\n            if (result.missing) {\n                missing = missingMerger.merge(missing, (_a = {},\n                    _a[resultName] = result.missing,\n                    _a));\n            }\n            return result.result;\n        }\n        var workSet = new Set(selectionSet.selections);\n        workSet.forEach(function (selection) {\n            var _a, _b;\n            // Omit fields with directives @skip(if: <truthy value>) or\n            // @include(if: <falsy value>).\n            if (!shouldInclude(selection, variables))\n                return;\n            if (isField(selection)) {\n                var fieldValue = policies.readField({\n                    fieldName: selection.name.value,\n                    field: selection,\n                    variables: context.variables,\n                    from: objectOrReference,\n                }, context);\n                var resultName = resultKeyNameFromField(selection);\n                if (fieldValue === void 0) {\n                    if (!addTypenameToDocument.added(selection)) {\n                        missing = missingMerger.merge(missing, (_a = {},\n                            _a[resultName] = \"Can't find field '\".concat(selection.name.value, \"' on \").concat(isReference(objectOrReference) ?\n                                objectOrReference.__ref + \" object\"\n                                : \"object \" + JSON.stringify(objectOrReference, null, 2)),\n                            _a));\n                    }\n                }\n                else if (isArray(fieldValue)) {\n                    if (fieldValue.length > 0) {\n                        fieldValue = handleMissing(_this.executeSubSelectedArray({\n                            field: selection,\n                            array: fieldValue,\n                            enclosingRef: enclosingRef,\n                            context: context,\n                        }), resultName);\n                    }\n                }\n                else if (!selection.selectionSet) {\n                    // If the field does not have a selection set, then we handle it\n                    // as a scalar value. To keep this.canon from canonicalizing\n                    // this value, we use this.canon.pass to wrap fieldValue in a\n                    // Pass object that this.canon.admit will later unwrap as-is.\n                    if (context.canonizeResults) {\n                        fieldValue = _this.canon.pass(fieldValue);\n                    }\n                }\n                else if (fieldValue != null) {\n                    // In this case, because we know the field has a selection set,\n                    // it must be trying to query a GraphQLObjectType, which is why\n                    // fieldValue must be != null.\n                    fieldValue = handleMissing(_this.executeSelectionSet({\n                        selectionSet: selection.selectionSet,\n                        objectOrReference: fieldValue,\n                        enclosingRef: isReference(fieldValue) ? fieldValue : enclosingRef,\n                        context: context,\n                    }), resultName);\n                }\n                if (fieldValue !== void 0) {\n                    objectsToMerge.push((_b = {}, _b[resultName] = fieldValue, _b));\n                }\n            }\n            else {\n                var fragment = getFragmentFromSelection(selection, context.lookupFragment);\n                if (!fragment && selection.kind === Kind.FRAGMENT_SPREAD) {\n                    throw newInvariantError(10, selection.name.value);\n                }\n                if (fragment && policies.fragmentMatches(fragment, typename)) {\n                    fragment.selectionSet.selections.forEach(workSet.add, workSet);\n                }\n            }\n        });\n        var result = mergeDeepArray(objectsToMerge);\n        var finalResult = { result: result, missing: missing };\n        var frozen = context.canonizeResults ?\n            this.canon.admit(finalResult)\n            // Since this.canon is normally responsible for freezing results (only in\n            // development), freeze them manually if canonization is disabled.\n            : maybeDeepFreeze(finalResult);\n        // Store this result with its selection set so that we can quickly\n        // recognize it again in the StoreReader#isFresh method.\n        if (frozen.result) {\n            this.knownResults.set(frozen.result, selectionSet);\n        }\n        return frozen;\n    };\n    // Uncached version of executeSubSelectedArray.\n    StoreReader.prototype.execSubSelectedArrayImpl = function (_a) {\n        var _this = this;\n        var field = _a.field, array = _a.array, enclosingRef = _a.enclosingRef, context = _a.context;\n        var missing;\n        var missingMerger = new DeepMerger();\n        function handleMissing(childResult, i) {\n            var _a;\n            if (childResult.missing) {\n                missing = missingMerger.merge(missing, (_a = {}, _a[i] = childResult.missing, _a));\n            }\n            return childResult.result;\n        }\n        if (field.selectionSet) {\n            array = array.filter(context.store.canRead);\n        }\n        array = array.map(function (item, i) {\n            // null value in array\n            if (item === null) {\n                return null;\n            }\n            // This is a nested array, recurse\n            if (isArray(item)) {\n                return handleMissing(_this.executeSubSelectedArray({\n                    field: field,\n                    array: item,\n                    enclosingRef: enclosingRef,\n                    context: context,\n                }), i);\n            }\n            // This is an object, run the selection set on it\n            if (field.selectionSet) {\n                return handleMissing(_this.executeSelectionSet({\n                    selectionSet: field.selectionSet,\n                    objectOrReference: item,\n                    enclosingRef: isReference(item) ? item : enclosingRef,\n                    context: context,\n                }), i);\n            }\n            if (globalThis.__DEV__ !== false) {\n                assertSelectionSetForIdValue(context.store, field, item);\n            }\n            return item;\n        });\n        return {\n            result: context.canonizeResults ? this.canon.admit(array) : array,\n            missing: missing,\n        };\n    };\n    return StoreReader;\n}());\nexport { StoreReader };\nfunction firstMissing(tree) {\n    try {\n        JSON.stringify(tree, function (_, value) {\n            if (typeof value === \"string\")\n                throw value;\n            return value;\n        });\n    }\n    catch (result) {\n        return result;\n    }\n}\nfunction assertSelectionSetForIdValue(store, field, fieldValue) {\n    if (!field.selectionSet) {\n        var workSet_1 = new Set([fieldValue]);\n        workSet_1.forEach(function (value) {\n            if (isNonNullObject(value)) {\n                invariant(\n                    !isReference(value),\n                    11,\n                    getTypenameFromStoreObject(store, value),\n                    field.name.value\n                );\n                Object.values(value).forEach(workSet_1.add, workSet_1);\n            }\n        });\n    }\n}\n//# sourceMappingURL=readFromStore.js.map","import { dep, Slot } from \"optimism\";\n// Contextual Slot that acquires its value when custom read functions are\n// called in Policies#readField.\nexport var cacheSlot = new Slot();\nvar cacheInfoMap = new WeakMap();\nfunction getCacheInfo(cache) {\n    var info = cacheInfoMap.get(cache);\n    if (!info) {\n        cacheInfoMap.set(cache, (info = {\n            vars: new Set(),\n            dep: dep(),\n        }));\n    }\n    return info;\n}\nexport function forgetCache(cache) {\n    getCacheInfo(cache).vars.forEach(function (rv) { return rv.forgetCache(cache); });\n}\n// Calling forgetCache(cache) serves to silence broadcasts and allows the\n// cache to be garbage collected. However, the varsByCache WeakMap\n// preserves the set of reactive variables that were previously associated\n// with this cache, which makes it possible to \"recall\" the cache at a\n// later time, by reattaching it to those variables. If the cache has been\n// garbage collected in the meantime, because it is no longer reachable,\n// you won't be able to call recallCache(cache), and the cache will\n// automatically disappear from the varsByCache WeakMap.\nexport function recallCache(cache) {\n    getCacheInfo(cache).vars.forEach(function (rv) { return rv.attachCache(cache); });\n}\nexport function makeVar(value) {\n    var caches = new Set();\n    var listeners = new Set();\n    var rv = function (newValue) {\n        if (arguments.length > 0) {\n            if (value !== newValue) {\n                value = newValue;\n                caches.forEach(function (cache) {\n                    // Invalidate any fields with custom read functions that\n                    // consumed this variable, so query results involving those\n                    // fields will be recomputed the next time we read them.\n                    getCacheInfo(cache).dep.dirty(rv);\n                    // Broadcast changes to any caches that have previously read\n                    // from this variable.\n                    broadcast(cache);\n                });\n                // Finally, notify any listeners added via rv.onNextChange.\n                var oldListeners = Array.from(listeners);\n                listeners.clear();\n                oldListeners.forEach(function (listener) { return listener(value); });\n            }\n        }\n        else {\n            // When reading from the variable, obtain the current cache from\n            // context via cacheSlot. This isn't entirely foolproof, but it's\n            // the same system that powers varDep.\n            var cache = cacheSlot.getValue();\n            if (cache) {\n                attach(cache);\n                getCacheInfo(cache).dep(rv);\n            }\n        }\n        return value;\n    };\n    rv.onNextChange = function (listener) {\n        listeners.add(listener);\n        return function () {\n            listeners.delete(listener);\n        };\n    };\n    var attach = (rv.attachCache = function (cache) {\n        caches.add(cache);\n        getCacheInfo(cache).vars.add(rv);\n        return rv;\n    });\n    rv.forgetCache = function (cache) { return caches.delete(cache); };\n    return rv;\n}\nfunction broadcast(cache) {\n    if (cache.broadcastWatches) {\n        cache.broadcastWatches();\n    }\n}\n//# sourceMappingURL=reactiveVars.js.map","import { invariant } from \"../../utilities/globals/index.js\";\nimport { argumentsObjectFromField, DeepMerger, isNonEmptyArray, isNonNullObject, } from \"../../utilities/index.js\";\nimport { hasOwn, isArray } from \"./helpers.js\";\n// Mapping from JSON-encoded KeySpecifier strings to associated information.\nvar specifierInfoCache = Object.create(null);\nfunction lookupSpecifierInfo(spec) {\n    // It's safe to encode KeySpecifier arrays with JSON.stringify, since they're\n    // just arrays of strings or nested KeySpecifier arrays, and the order of the\n    // array elements is important (and suitably preserved by JSON.stringify).\n    var cacheKey = JSON.stringify(spec);\n    return (specifierInfoCache[cacheKey] ||\n        (specifierInfoCache[cacheKey] = Object.create(null)));\n}\nexport function keyFieldsFnFromSpecifier(specifier) {\n    var info = lookupSpecifierInfo(specifier);\n    return (info.keyFieldsFn || (info.keyFieldsFn = function (object, context) {\n            var extract = function (from, key) {\n                return context.readField(key, from);\n            };\n            var keyObject = (context.keyObject = collectSpecifierPaths(specifier, function (schemaKeyPath) {\n                var extracted = extractKeyPath(context.storeObject, schemaKeyPath, \n                // Using context.readField to extract paths from context.storeObject\n                // allows the extraction to see through Reference objects and respect\n                // custom read functions.\n                extract);\n                if (extracted === void 0 &&\n                    object !== context.storeObject &&\n                    hasOwn.call(object, schemaKeyPath[0])) {\n                    // If context.storeObject fails to provide a value for the requested\n                    // path, fall back to the raw result object, if it has a top-level key\n                    // matching the first key in the path (schemaKeyPath[0]). This allows\n                    // key fields included in the written data to be saved in the cache\n                    // even if they are not selected explicitly in context.selectionSet.\n                    // Not being mentioned by context.selectionSet is convenient here,\n                    // since it means these extra fields cannot be affected by field\n                    // aliasing, which is why we can use extractKey instead of\n                    // context.readField for this extraction.\n                    extracted = extractKeyPath(object, schemaKeyPath, extractKey);\n                }\n                invariant(extracted !== void 0, 5, schemaKeyPath.join(\".\"), object);\n                return extracted;\n            }));\n            return \"\".concat(context.typename, \":\").concat(JSON.stringify(keyObject));\n        }));\n}\n// The keyArgs extraction process is roughly analogous to keyFields extraction,\n// but there are no aliases involved, missing fields are tolerated (by merely\n// omitting them from the key), and drawing from field.directives or variables\n// is allowed (in addition to drawing from the field's arguments object).\n// Concretely, these differences mean passing a different key path extractor\n// function to collectSpecifierPaths, reusing the shared extractKeyPath helper\n// wherever possible.\nexport function keyArgsFnFromSpecifier(specifier) {\n    var info = lookupSpecifierInfo(specifier);\n    return (info.keyArgsFn ||\n        (info.keyArgsFn = function (args, _a) {\n            var field = _a.field, variables = _a.variables, fieldName = _a.fieldName;\n            var collected = collectSpecifierPaths(specifier, function (keyPath) {\n                var firstKey = keyPath[0];\n                var firstChar = firstKey.charAt(0);\n                if (firstChar === \"@\") {\n                    if (field && isNonEmptyArray(field.directives)) {\n                        var directiveName_1 = firstKey.slice(1);\n                        // If the directive appears multiple times, only the first\n                        // occurrence's arguments will be used. TODO Allow repetition?\n                        // TODO Cache this work somehow, a la aliasMap?\n                        var d = field.directives.find(function (d) { return d.name.value === directiveName_1; });\n                        // Fortunately argumentsObjectFromField works for DirectiveNode!\n                        var directiveArgs = d && argumentsObjectFromField(d, variables);\n                        // For directives without arguments (d defined, but directiveArgs ===\n                        // null), the presence or absence of the directive still counts as\n                        // part of the field key, so we return null in those cases. If no\n                        // directive with this name was found for this field (d undefined and\n                        // thus directiveArgs undefined), we return undefined, which causes\n                        // this value to be omitted from the key object returned by\n                        // collectSpecifierPaths.\n                        return (directiveArgs &&\n                            extractKeyPath(directiveArgs, \n                            // If keyPath.length === 1, this code calls extractKeyPath with an\n                            // empty path, which works because it uses directiveArgs as the\n                            // extracted value.\n                            keyPath.slice(1)));\n                    }\n                    // If the key started with @ but there was no corresponding directive,\n                    // we want to omit this value from the key object, not fall through to\n                    // treating @whatever as a normal argument name.\n                    return;\n                }\n                if (firstChar === \"$\") {\n                    var variableName = firstKey.slice(1);\n                    if (variables && hasOwn.call(variables, variableName)) {\n                        var varKeyPath = keyPath.slice(0);\n                        varKeyPath[0] = variableName;\n                        return extractKeyPath(variables, varKeyPath);\n                    }\n                    // If the key started with $ but there was no corresponding variable, we\n                    // want to omit this value from the key object, not fall through to\n                    // treating $whatever as a normal argument name.\n                    return;\n                }\n                if (args) {\n                    return extractKeyPath(args, keyPath);\n                }\n            });\n            var suffix = JSON.stringify(collected);\n            // If no arguments were passed to this field, and it didn't have any other\n            // field key contributions from directives or variables, hide the empty\n            // :{} suffix from the field key. However, a field passed no arguments can\n            // still end up with a non-empty :{...} suffix if its key configuration\n            // refers to directives or variables.\n            if (args || suffix !== \"{}\") {\n                fieldName += \":\" + suffix;\n            }\n            return fieldName;\n        }));\n}\nexport function collectSpecifierPaths(specifier, extractor) {\n    // For each path specified by specifier, invoke the extractor, and repeatedly\n    // merge the results together, with appropriate ancestor context.\n    var merger = new DeepMerger();\n    return getSpecifierPaths(specifier).reduce(function (collected, path) {\n        var _a;\n        var toMerge = extractor(path);\n        if (toMerge !== void 0) {\n            // This path is not expected to contain array indexes, so the toMerge\n            // reconstruction will not contain arrays. TODO Fix this?\n            for (var i = path.length - 1; i >= 0; --i) {\n                toMerge = (_a = {}, _a[path[i]] = toMerge, _a);\n            }\n            collected = merger.merge(collected, toMerge);\n        }\n        return collected;\n    }, Object.create(null));\n}\nexport function getSpecifierPaths(spec) {\n    var info = lookupSpecifierInfo(spec);\n    if (!info.paths) {\n        var paths_1 = (info.paths = []);\n        var currentPath_1 = [];\n        spec.forEach(function (s, i) {\n            if (isArray(s)) {\n                getSpecifierPaths(s).forEach(function (p) { return paths_1.push(currentPath_1.concat(p)); });\n                currentPath_1.length = 0;\n            }\n            else {\n                currentPath_1.push(s);\n                if (!isArray(spec[i + 1])) {\n                    paths_1.push(currentPath_1.slice(0));\n                    currentPath_1.length = 0;\n                }\n            }\n        });\n    }\n    return info.paths;\n}\nfunction extractKey(object, key) {\n    return object[key];\n}\nexport function extractKeyPath(object, path, extract) {\n    // For each key in path, extract the corresponding child property from obj,\n    // flattening arrays if encountered (uncommon for keyFields and keyArgs, but\n    // possible). The final result of path.reduce is normalized so unexpected leaf\n    // objects have their keys safely sorted. That final result is difficult to\n    // type as anything other than any. You're welcome to try to improve the\n    // return type, but keep in mind extractKeyPath is not a public function\n    // (exported only for testing), so the effort may not be worthwhile unless the\n    // limited set of actual callers (see above) pass arguments that TypeScript\n    // can statically type. If we know only that path is some array of strings\n    // (and not, say, a specific tuple of statically known strings), any (or\n    // possibly unknown) is the honest answer.\n    extract = extract || extractKey;\n    return normalize(path.reduce(function reducer(obj, key) {\n        return isArray(obj) ?\n            obj.map(function (child) { return reducer(child, key); })\n            : obj && extract(obj, key);\n    }, object));\n}\nfunction normalize(value) {\n    // Usually the extracted value will be a scalar value, since most primary\n    // key fields are scalar, but just in case we get an object or an array, we\n    // need to do some normalization of the order of (nested) keys.\n    if (isNonNullObject(value)) {\n        if (isArray(value)) {\n            return value.map(normalize);\n        }\n        return collectSpecifierPaths(Object.keys(value).sort(), function (path) {\n            return extractKeyPath(value, path);\n        });\n    }\n    return value;\n}\n//# sourceMappingURL=key-extractor.js.map","import { __assign, __rest } from \"tslib\";\nimport { invariant, newInvariantError } from \"../../utilities/globals/index.js\";\nimport { storeKeyNameFromField, argumentsObjectFromField, isReference, getStoreKeyName, isNonNullObject, stringifyForDisplay, } from \"../../utilities/index.js\";\nimport { hasOwn, fieldNameFromStoreName, storeValueIsStoreObject, selectionSetMatchesResult, TypeOrFieldNameRegExp, defaultDataIdFromObject, isArray, } from \"./helpers.js\";\nimport { cacheSlot } from \"./reactiveVars.js\";\nimport { keyArgsFnFromSpecifier, keyFieldsFnFromSpecifier, } from \"./key-extractor.js\";\nimport { disableWarningsSlot } from \"../../masking/index.js\";\nfunction argsFromFieldSpecifier(spec) {\n    return (spec.args !== void 0 ? spec.args\n        : spec.field ? argumentsObjectFromField(spec.field, spec.variables)\n            : null);\n}\nvar nullKeyFieldsFn = function () { return void 0; };\nvar simpleKeyArgsFn = function (_args, context) { return context.fieldName; };\n// These merge functions can be selected by specifying merge:true or\n// merge:false in a field policy.\nvar mergeTrueFn = function (existing, incoming, _a) {\n    var mergeObjects = _a.mergeObjects;\n    return mergeObjects(existing, incoming);\n};\nvar mergeFalseFn = function (_, incoming) { return incoming; };\nvar Policies = /** @class */ (function () {\n    function Policies(config) {\n        this.config = config;\n        this.typePolicies = Object.create(null);\n        this.toBeAdded = Object.create(null);\n        // Map from subtype names to sets of supertype names. Note that this\n        // representation inverts the structure of possibleTypes (whose keys are\n        // supertypes and whose values are arrays of subtypes) because it tends\n        // to be much more efficient to search upwards than downwards.\n        this.supertypeMap = new Map();\n        // Any fuzzy subtypes specified by possibleTypes will be converted to\n        // RegExp objects and recorded here. Every key of this map can also be\n        // found in supertypeMap. In many cases this Map will be empty, which\n        // means no fuzzy subtype checking will happen in fragmentMatches.\n        this.fuzzySubtypes = new Map();\n        this.rootIdsByTypename = Object.create(null);\n        this.rootTypenamesById = Object.create(null);\n        this.usingPossibleTypes = false;\n        this.config = __assign({ dataIdFromObject: defaultDataIdFromObject }, config);\n        this.cache = this.config.cache;\n        this.setRootTypename(\"Query\");\n        this.setRootTypename(\"Mutation\");\n        this.setRootTypename(\"Subscription\");\n        if (config.possibleTypes) {\n            this.addPossibleTypes(config.possibleTypes);\n        }\n        if (config.typePolicies) {\n            this.addTypePolicies(config.typePolicies);\n        }\n    }\n    Policies.prototype.identify = function (object, partialContext) {\n        var _a;\n        var policies = this;\n        var typename = (partialContext &&\n            (partialContext.typename || ((_a = partialContext.storeObject) === null || _a === void 0 ? void 0 : _a.__typename))) ||\n            object.__typename;\n        // It should be possible to write root Query fields with writeFragment,\n        // using { __typename: \"Query\", ... } as the data, but it does not make\n        // sense to allow the same identification behavior for the Mutation and\n        // Subscription types, since application code should never be writing\n        // directly to (or reading directly from) those root objects.\n        if (typename === this.rootTypenamesById.ROOT_QUERY) {\n            return [\"ROOT_QUERY\"];\n        }\n        // Default context.storeObject to object if not otherwise provided.\n        var storeObject = (partialContext && partialContext.storeObject) || object;\n        var context = __assign(__assign({}, partialContext), { typename: typename, storeObject: storeObject, readField: (partialContext && partialContext.readField) ||\n                function () {\n                    var options = normalizeReadFieldOptions(arguments, storeObject);\n                    return policies.readField(options, {\n                        store: policies.cache[\"data\"],\n                        variables: options.variables,\n                    });\n                } });\n        var id;\n        var policy = typename && this.getTypePolicy(typename);\n        var keyFn = (policy && policy.keyFn) || this.config.dataIdFromObject;\n        disableWarningsSlot.withValue(true, function () {\n            while (keyFn) {\n                var specifierOrId = keyFn(__assign(__assign({}, object), storeObject), context);\n                if (isArray(specifierOrId)) {\n                    keyFn = keyFieldsFnFromSpecifier(specifierOrId);\n                }\n                else {\n                    id = specifierOrId;\n                    break;\n                }\n            }\n        });\n        id = id ? String(id) : void 0;\n        return context.keyObject ? [id, context.keyObject] : [id];\n    };\n    Policies.prototype.addTypePolicies = function (typePolicies) {\n        var _this = this;\n        Object.keys(typePolicies).forEach(function (typename) {\n            var _a = typePolicies[typename], queryType = _a.queryType, mutationType = _a.mutationType, subscriptionType = _a.subscriptionType, incoming = __rest(_a, [\"queryType\", \"mutationType\", \"subscriptionType\"]);\n            // Though {query,mutation,subscription}Type configurations are rare,\n            // it's important to call setRootTypename as early as possible,\n            // since these configurations should apply consistently for the\n            // entire lifetime of the cache. Also, since only one __typename can\n            // qualify as one of these root types, these three properties cannot\n            // be inherited, unlike the rest of the incoming properties. That\n            // restriction is convenient, because the purpose of this.toBeAdded\n            // is to delay the processing of type/field policies until the first\n            // time they're used, allowing policies to be added in any order as\n            // long as all relevant policies (including policies for supertypes)\n            // have been added by the time a given policy is used for the first\n            // time. In other words, since inheritance doesn't matter for these\n            // properties, there's also no need to delay their processing using\n            // the this.toBeAdded queue.\n            if (queryType)\n                _this.setRootTypename(\"Query\", typename);\n            if (mutationType)\n                _this.setRootTypename(\"Mutation\", typename);\n            if (subscriptionType)\n                _this.setRootTypename(\"Subscription\", typename);\n            if (hasOwn.call(_this.toBeAdded, typename)) {\n                _this.toBeAdded[typename].push(incoming);\n            }\n            else {\n                _this.toBeAdded[typename] = [incoming];\n            }\n        });\n    };\n    Policies.prototype.updateTypePolicy = function (typename, incoming, existingFieldPolicies) {\n        var existing = this.getTypePolicy(typename);\n        var keyFields = incoming.keyFields, fields = incoming.fields;\n        function setMerge(existing, merge) {\n            existing.merge =\n                typeof merge === \"function\" ? merge\n                    // Pass merge:true as a shorthand for a merge implementation\n                    // that returns options.mergeObjects(existing, incoming).\n                    : merge === true ? mergeTrueFn\n                        // Pass merge:false to make incoming always replace existing\n                        // without any warnings about data clobbering.\n                        : merge === false ? mergeFalseFn\n                            : existing.merge;\n        }\n        // Type policies can define merge functions, as an alternative to\n        // using field policies to merge child objects.\n        setMerge(existing, incoming.merge);\n        existing.keyFn =\n            // Pass false to disable normalization for this typename.\n            keyFields === false ? nullKeyFieldsFn\n                // Pass an array of strings to use those fields to compute a\n                // composite ID for objects of this typename.\n                : isArray(keyFields) ? keyFieldsFnFromSpecifier(keyFields)\n                    // Pass a function to take full control over identification.\n                    : typeof keyFields === \"function\" ? keyFields\n                        // Leave existing.keyFn unchanged if above cases fail.\n                        : existing.keyFn;\n        if (fields) {\n            Object.keys(fields).forEach(function (fieldName) {\n                var existing = existingFieldPolicies[fieldName];\n                // Field policy inheritance is atomic/shallow: you can't inherit a\n                // field policy and then override just its read function, since read\n                // and merge functions often need to cooperate, so changing only one\n                // of them would be a recipe for inconsistency.\n                // So here we avoid merging an inherited field policy with an updated one.\n                if (!existing || (existing === null || existing === void 0 ? void 0 : existing.typename) !== typename) {\n                    existing = existingFieldPolicies[fieldName] = { typename: typename };\n                }\n                var incoming = fields[fieldName];\n                if (typeof incoming === \"function\") {\n                    existing.read = incoming;\n                }\n                else {\n                    var keyArgs = incoming.keyArgs, read = incoming.read, merge = incoming.merge;\n                    existing.keyFn =\n                        // Pass false to disable argument-based differentiation of\n                        // field identities.\n                        keyArgs === false ? simpleKeyArgsFn\n                            // Pass an array of strings to use named arguments to\n                            // compute a composite identity for the field.\n                            : isArray(keyArgs) ? keyArgsFnFromSpecifier(keyArgs)\n                                // Pass a function to take full control over field identity.\n                                : typeof keyArgs === \"function\" ? keyArgs\n                                    // Leave existing.keyFn unchanged if above cases fail.\n                                    : existing.keyFn;\n                    if (typeof read === \"function\") {\n                        existing.read = read;\n                    }\n                    setMerge(existing, merge);\n                }\n                if (existing.read && existing.merge) {\n                    // If we have both a read and a merge function, assume\n                    // keyArgs:false, because read and merge together can take\n                    // responsibility for interpreting arguments in and out. This\n                    // default assumption can always be overridden by specifying\n                    // keyArgs explicitly in the FieldPolicy.\n                    existing.keyFn = existing.keyFn || simpleKeyArgsFn;\n                }\n            });\n        }\n    };\n    Policies.prototype.setRootTypename = function (which, typename) {\n        if (typename === void 0) { typename = which; }\n        var rootId = \"ROOT_\" + which.toUpperCase();\n        var old = this.rootTypenamesById[rootId];\n        if (typename !== old) {\n            invariant(!old || old === which, 6, which);\n            // First, delete any old __typename associated with this rootId from\n            // rootIdsByTypename.\n            if (old)\n                delete this.rootIdsByTypename[old];\n            // Now make this the only __typename that maps to this rootId.\n            this.rootIdsByTypename[typename] = rootId;\n            // Finally, update the __typename associated with this rootId.\n            this.rootTypenamesById[rootId] = typename;\n        }\n    };\n    Policies.prototype.addPossibleTypes = function (possibleTypes) {\n        var _this = this;\n        this.usingPossibleTypes = true;\n        Object.keys(possibleTypes).forEach(function (supertype) {\n            // Make sure all types have an entry in this.supertypeMap, even if\n            // their supertype set is empty, so we can return false immediately\n            // from policies.fragmentMatches for unknown supertypes.\n            _this.getSupertypeSet(supertype, true);\n            possibleTypes[supertype].forEach(function (subtype) {\n                _this.getSupertypeSet(subtype, true).add(supertype);\n                var match = subtype.match(TypeOrFieldNameRegExp);\n                if (!match || match[0] !== subtype) {\n                    // TODO Don't interpret just any invalid typename as a RegExp.\n                    _this.fuzzySubtypes.set(subtype, new RegExp(subtype));\n                }\n            });\n        });\n    };\n    Policies.prototype.getTypePolicy = function (typename) {\n        var _this = this;\n        if (!hasOwn.call(this.typePolicies, typename)) {\n            var policy_1 = (this.typePolicies[typename] = Object.create(null));\n            policy_1.fields = Object.create(null);\n            // When the TypePolicy for typename is first accessed, instead of\n            // starting with an empty policy object, inherit any properties or\n            // fields from the type policies of the supertypes of typename.\n            //\n            // Any properties or fields defined explicitly within the TypePolicy\n            // for typename will take precedence, and if there are multiple\n            // supertypes, the properties of policies whose types were added\n            // later via addPossibleTypes will take precedence over those of\n            // earlier supertypes. TODO Perhaps we should warn about these\n            // conflicts in development, and recommend defining the property\n            // explicitly in the subtype policy?\n            //\n            // Field policy inheritance is atomic/shallow: you can't inherit a\n            // field policy and then override just its read function, since read\n            // and merge functions often need to cooperate, so changing only one\n            // of them would be a recipe for inconsistency.\n            //\n            // Once the TypePolicy for typename has been accessed, its properties can\n            // still be updated directly using addTypePolicies, but future changes to\n            // inherited supertype policies will not be reflected in this subtype\n            // policy, because this code runs at most once per typename.\n            var supertypes_1 = this.supertypeMap.get(typename);\n            if (!supertypes_1 && this.fuzzySubtypes.size) {\n                // To make the inheritance logic work for unknown typename strings that\n                // may have fuzzy supertypes, we give this typename an empty supertype\n                // set and then populate it with any fuzzy supertypes that match.\n                supertypes_1 = this.getSupertypeSet(typename, true);\n                // This only works for typenames that are directly matched by a fuzzy\n                // supertype. What if there is an intermediate chain of supertypes?\n                // While possible, that situation can only be solved effectively by\n                // specifying the intermediate relationships via possibleTypes, manually\n                // and in a non-fuzzy way.\n                this.fuzzySubtypes.forEach(function (regExp, fuzzy) {\n                    if (regExp.test(typename)) {\n                        // The fuzzy parameter is just the original string version of regExp\n                        // (not a valid __typename string), but we can look up the\n                        // associated supertype(s) in this.supertypeMap.\n                        var fuzzySupertypes = _this.supertypeMap.get(fuzzy);\n                        if (fuzzySupertypes) {\n                            fuzzySupertypes.forEach(function (supertype) {\n                                return supertypes_1.add(supertype);\n                            });\n                        }\n                    }\n                });\n            }\n            if (supertypes_1 && supertypes_1.size) {\n                supertypes_1.forEach(function (supertype) {\n                    var _a = _this.getTypePolicy(supertype), fields = _a.fields, rest = __rest(_a, [\"fields\"]);\n                    Object.assign(policy_1, rest);\n                    Object.assign(policy_1.fields, fields);\n                });\n            }\n        }\n        var inbox = this.toBeAdded[typename];\n        if (inbox && inbox.length) {\n            // Merge the pending policies into this.typePolicies, in the order they\n            // were originally passed to addTypePolicy.\n            inbox.splice(0).forEach(function (policy) {\n                _this.updateTypePolicy(typename, policy, _this.typePolicies[typename].fields);\n            });\n        }\n        return this.typePolicies[typename];\n    };\n    Policies.prototype.getFieldPolicy = function (typename, fieldName) {\n        if (typename) {\n            return this.getTypePolicy(typename).fields[fieldName];\n        }\n    };\n    Policies.prototype.getSupertypeSet = function (subtype, createIfMissing) {\n        var supertypeSet = this.supertypeMap.get(subtype);\n        if (!supertypeSet && createIfMissing) {\n            this.supertypeMap.set(subtype, (supertypeSet = new Set()));\n        }\n        return supertypeSet;\n    };\n    Policies.prototype.fragmentMatches = function (fragment, typename, result, variables) {\n        var _this = this;\n        if (!fragment.typeCondition)\n            return true;\n        // If the fragment has a type condition but the object we're matching\n        // against does not have a __typename, the fragment cannot match.\n        if (!typename)\n            return false;\n        var supertype = fragment.typeCondition.name.value;\n        // Common case: fragment type condition and __typename are the same.\n        if (typename === supertype)\n            return true;\n        if (this.usingPossibleTypes && this.supertypeMap.has(supertype)) {\n            var typenameSupertypeSet = this.getSupertypeSet(typename, true);\n            var workQueue_1 = [typenameSupertypeSet];\n            var maybeEnqueue_1 = function (subtype) {\n                var supertypeSet = _this.getSupertypeSet(subtype, false);\n                if (supertypeSet &&\n                    supertypeSet.size &&\n                    workQueue_1.indexOf(supertypeSet) < 0) {\n                    workQueue_1.push(supertypeSet);\n                }\n            };\n            // We need to check fuzzy subtypes only if we encountered fuzzy\n            // subtype strings in addPossibleTypes, and only while writing to\n            // the cache, since that's when selectionSetMatchesResult gives a\n            // strong signal of fragment matching. The StoreReader class calls\n            // policies.fragmentMatches without passing a result object, so\n            // needToCheckFuzzySubtypes is always false while reading.\n            var needToCheckFuzzySubtypes = !!(result && this.fuzzySubtypes.size);\n            var checkingFuzzySubtypes = false;\n            // It's important to keep evaluating workQueue.length each time through\n            // the loop, because the queue can grow while we're iterating over it.\n            for (var i = 0; i < workQueue_1.length; ++i) {\n                var supertypeSet = workQueue_1[i];\n                if (supertypeSet.has(supertype)) {\n                    if (!typenameSupertypeSet.has(supertype)) {\n                        if (checkingFuzzySubtypes) {\n                            globalThis.__DEV__ !== false && invariant.warn(7, typename, supertype);\n                        }\n                        // Record positive results for faster future lookup.\n                        // Unfortunately, we cannot safely cache negative results,\n                        // because new possibleTypes data could always be added to the\n                        // Policies class.\n                        typenameSupertypeSet.add(supertype);\n                    }\n                    return true;\n                }\n                supertypeSet.forEach(maybeEnqueue_1);\n                if (needToCheckFuzzySubtypes &&\n                    // Start checking fuzzy subtypes only after exhausting all\n                    // non-fuzzy subtypes (after the final iteration of the loop).\n                    i === workQueue_1.length - 1 &&\n                    // We could wait to compare fragment.selectionSet to result\n                    // after we verify the supertype, but this check is often less\n                    // expensive than that search, and we will have to do the\n                    // comparison anyway whenever we find a potential match.\n                    selectionSetMatchesResult(fragment.selectionSet, result, variables)) {\n                    // We don't always need to check fuzzy subtypes (if no result\n                    // was provided, or !this.fuzzySubtypes.size), but, when we do,\n                    // we only want to check them once.\n                    needToCheckFuzzySubtypes = false;\n                    checkingFuzzySubtypes = true;\n                    // If we find any fuzzy subtypes that match typename, extend the\n                    // workQueue to search through the supertypes of those fuzzy\n                    // subtypes. Otherwise the for-loop will terminate and we'll\n                    // return false below.\n                    this.fuzzySubtypes.forEach(function (regExp, fuzzyString) {\n                        var match = typename.match(regExp);\n                        if (match && match[0] === typename) {\n                            maybeEnqueue_1(fuzzyString);\n                        }\n                    });\n                }\n            }\n        }\n        return false;\n    };\n    Policies.prototype.hasKeyArgs = function (typename, fieldName) {\n        var policy = this.getFieldPolicy(typename, fieldName);\n        return !!(policy && policy.keyFn);\n    };\n    Policies.prototype.getStoreFieldName = function (fieldSpec) {\n        var typename = fieldSpec.typename, fieldName = fieldSpec.fieldName;\n        var policy = this.getFieldPolicy(typename, fieldName);\n        var storeFieldName;\n        var keyFn = policy && policy.keyFn;\n        if (keyFn && typename) {\n            var context = {\n                typename: typename,\n                fieldName: fieldName,\n                field: fieldSpec.field || null,\n                variables: fieldSpec.variables,\n            };\n            var args = argsFromFieldSpecifier(fieldSpec);\n            while (keyFn) {\n                var specifierOrString = keyFn(args, context);\n                if (isArray(specifierOrString)) {\n                    keyFn = keyArgsFnFromSpecifier(specifierOrString);\n                }\n                else {\n                    // If the custom keyFn returns a falsy value, fall back to\n                    // fieldName instead.\n                    storeFieldName = specifierOrString || fieldName;\n                    break;\n                }\n            }\n        }\n        if (storeFieldName === void 0) {\n            storeFieldName =\n                fieldSpec.field ?\n                    storeKeyNameFromField(fieldSpec.field, fieldSpec.variables)\n                    : getStoreKeyName(fieldName, argsFromFieldSpecifier(fieldSpec));\n        }\n        // Returning false from a keyArgs function is like configuring\n        // keyArgs: false, but more dynamic.\n        if (storeFieldName === false) {\n            return fieldName;\n        }\n        // Make sure custom field names start with the actual field.name.value\n        // of the field, so we can always figure out which properties of a\n        // StoreObject correspond to which original field names.\n        return fieldName === fieldNameFromStoreName(storeFieldName) ? storeFieldName\n            : fieldName + \":\" + storeFieldName;\n    };\n    Policies.prototype.readField = function (options, context) {\n        var objectOrReference = options.from;\n        if (!objectOrReference)\n            return;\n        var nameOrField = options.field || options.fieldName;\n        if (!nameOrField)\n            return;\n        if (options.typename === void 0) {\n            var typename = context.store.getFieldValue(objectOrReference, \"__typename\");\n            if (typename)\n                options.typename = typename;\n        }\n        var storeFieldName = this.getStoreFieldName(options);\n        var fieldName = fieldNameFromStoreName(storeFieldName);\n        var existing = context.store.getFieldValue(objectOrReference, storeFieldName);\n        var policy = this.getFieldPolicy(options.typename, fieldName);\n        var read = policy && policy.read;\n        if (read) {\n            var readOptions = makeFieldFunctionOptions(this, objectOrReference, options, context, context.store.getStorage(isReference(objectOrReference) ?\n                objectOrReference.__ref\n                : objectOrReference, storeFieldName));\n            // Call read(existing, readOptions) with cacheSlot holding this.cache.\n            return cacheSlot.withValue(this.cache, read, [\n                existing,\n                readOptions,\n            ]);\n        }\n        return existing;\n    };\n    Policies.prototype.getReadFunction = function (typename, fieldName) {\n        var policy = this.getFieldPolicy(typename, fieldName);\n        return policy && policy.read;\n    };\n    Policies.prototype.getMergeFunction = function (parentTypename, fieldName, childTypename) {\n        var policy = this.getFieldPolicy(parentTypename, fieldName);\n        var merge = policy && policy.merge;\n        if (!merge && childTypename) {\n            policy = this.getTypePolicy(childTypename);\n            merge = policy && policy.merge;\n        }\n        return merge;\n    };\n    Policies.prototype.runMergeFunction = function (existing, incoming, _a, context, storage) {\n        var field = _a.field, typename = _a.typename, merge = _a.merge;\n        if (merge === mergeTrueFn) {\n            // Instead of going to the trouble of creating a full\n            // FieldFunctionOptions object and calling mergeTrueFn, we can\n            // simply call mergeObjects, as mergeTrueFn would.\n            return makeMergeObjectsFunction(context.store)(existing, incoming);\n        }\n        if (merge === mergeFalseFn) {\n            // Likewise for mergeFalseFn, whose implementation is even simpler.\n            return incoming;\n        }\n        // If cache.writeQuery or cache.writeFragment was called with\n        // options.overwrite set to true, we still call merge functions, but\n        // the existing data is always undefined, so the merge function will\n        // not attempt to combine the incoming data with the existing data.\n        if (context.overwrite) {\n            existing = void 0;\n        }\n        return merge(existing, incoming, makeFieldFunctionOptions(this, \n        // Unlike options.readField for read functions, we do not fall\n        // back to the current object if no foreignObjOrRef is provided,\n        // because it's not clear what the current object should be for\n        // merge functions: the (possibly undefined) existing object, or\n        // the incoming object? If you think your merge function needs\n        // to read sibling fields in order to produce a new value for\n        // the current field, you might want to rethink your strategy,\n        // because that's a recipe for making merge behavior sensitive\n        // to the order in which fields are written into the cache.\n        // However, readField(name, ref) is useful for merge functions\n        // that need to deduplicate child objects and references.\n        void 0, {\n            typename: typename,\n            fieldName: field.name.value,\n            field: field,\n            variables: context.variables,\n        }, context, storage || Object.create(null)));\n    };\n    return Policies;\n}());\nexport { Policies };\nfunction makeFieldFunctionOptions(policies, objectOrReference, fieldSpec, context, storage) {\n    var storeFieldName = policies.getStoreFieldName(fieldSpec);\n    var fieldName = fieldNameFromStoreName(storeFieldName);\n    var variables = fieldSpec.variables || context.variables;\n    var _a = context.store, toReference = _a.toReference, canRead = _a.canRead;\n    return {\n        args: argsFromFieldSpecifier(fieldSpec),\n        field: fieldSpec.field || null,\n        fieldName: fieldName,\n        storeFieldName: storeFieldName,\n        variables: variables,\n        isReference: isReference,\n        toReference: toReference,\n        storage: storage,\n        cache: policies.cache,\n        canRead: canRead,\n        readField: function () {\n            return policies.readField(normalizeReadFieldOptions(arguments, objectOrReference, variables), context);\n        },\n        mergeObjects: makeMergeObjectsFunction(context.store),\n    };\n}\nexport function normalizeReadFieldOptions(readFieldArgs, objectOrReference, variables) {\n    var fieldNameOrOptions = readFieldArgs[0], from = readFieldArgs[1], argc = readFieldArgs.length;\n    var options;\n    if (typeof fieldNameOrOptions === \"string\") {\n        options = {\n            fieldName: fieldNameOrOptions,\n            // Default to objectOrReference only when no second argument was\n            // passed for the from parameter, not when undefined is explicitly\n            // passed as the second argument.\n            from: argc > 1 ? from : objectOrReference,\n        };\n    }\n    else {\n        options = __assign({}, fieldNameOrOptions);\n        // Default to objectOrReference only when fieldNameOrOptions.from is\n        // actually omitted, rather than just undefined.\n        if (!hasOwn.call(options, \"from\")) {\n            options.from = objectOrReference;\n        }\n    }\n    if (globalThis.__DEV__ !== false && options.from === void 0) {\n        globalThis.__DEV__ !== false && invariant.warn(8, stringifyForDisplay(Array.from(readFieldArgs)));\n    }\n    if (void 0 === options.variables) {\n        options.variables = variables;\n    }\n    return options;\n}\nfunction makeMergeObjectsFunction(store) {\n    return function mergeObjects(existing, incoming) {\n        if (isArray(existing) || isArray(incoming)) {\n            throw newInvariantError(9);\n        }\n        // These dynamic checks are necessary because the parameters of a\n        // custom merge function can easily have the any type, so the type\n        // system cannot always enforce the StoreObject | Reference parameter\n        // types of options.mergeObjects.\n        if (isNonNullObject(existing) && isNonNullObject(incoming)) {\n            var eType = store.getFieldValue(existing, \"__typename\");\n            var iType = store.getFieldValue(incoming, \"__typename\");\n            var typesDiffer = eType && iType && eType !== iType;\n            if (typesDiffer) {\n                return incoming;\n            }\n            if (isReference(existing) && storeValueIsStoreObject(incoming)) {\n                // Update the normalized EntityStore for the entity identified by\n                // existing.__ref, preferring/overwriting any fields contributed by the\n                // newer incoming StoreObject.\n                store.merge(existing.__ref, incoming);\n                return existing;\n            }\n            if (storeValueIsStoreObject(existing) && isReference(incoming)) {\n                // Update the normalized EntityStore for the entity identified by\n                // incoming.__ref, taking fields from the older existing object only if\n                // those fields are not already present in the newer StoreObject\n                // identified by incoming.__ref.\n                store.merge(existing, incoming.__ref);\n                return incoming;\n            }\n            if (storeValueIsStoreObject(existing) &&\n                storeValueIsStoreObject(incoming)) {\n                return __assign(__assign({}, existing), incoming);\n            }\n        }\n        return incoming;\n    };\n}\n//# sourceMappingURL=policies.js.map","import { __assign } from \"tslib\";\nimport { invariant, newInvariantError } from \"../../utilities/globals/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { Trie } from \"@wry/trie\";\nimport { Kind } from \"graphql\";\nimport { getFragmentFromSelection, getDefaultValues, getOperationDefinition, getTypenameFromResult, makeReference, isField, resultKeyNameFromField, isReference, shouldInclude, cloneDeep, addTypenameToDocument, isNonEmptyArray, argumentsObjectFromField, canonicalStringify, } from \"../../utilities/index.js\";\nimport { isArray, makeProcessedFieldsMerger, fieldNameFromStoreName, storeValueIsStoreObject, extractFragmentContext, } from \"./helpers.js\";\nimport { normalizeReadFieldOptions } from \"./policies.js\";\n// Since there are only four possible combinations of context.clientOnly and\n// context.deferred values, we should need at most four \"flavors\" of any given\n// WriteContext. To avoid creating multiple copies of the same context, we cache\n// the contexts in the context.flavors Map (shared by all flavors) according to\n// their clientOnly and deferred values (always in that order).\nfunction getContextFlavor(context, clientOnly, deferred) {\n    var key = \"\".concat(clientOnly).concat(deferred);\n    var flavored = context.flavors.get(key);\n    if (!flavored) {\n        context.flavors.set(key, (flavored =\n            context.clientOnly === clientOnly && context.deferred === deferred ?\n                context\n                : __assign(__assign({}, context), { clientOnly: clientOnly, deferred: deferred })));\n    }\n    return flavored;\n}\nvar StoreWriter = /** @class */ (function () {\n    function StoreWriter(cache, reader, fragments) {\n        this.cache = cache;\n        this.reader = reader;\n        this.fragments = fragments;\n    }\n    StoreWriter.prototype.writeToStore = function (store, _a) {\n        var _this = this;\n        var query = _a.query, result = _a.result, dataId = _a.dataId, variables = _a.variables, overwrite = _a.overwrite;\n        var operationDefinition = getOperationDefinition(query);\n        var merger = makeProcessedFieldsMerger();\n        variables = __assign(__assign({}, getDefaultValues(operationDefinition)), variables);\n        var context = __assign(__assign({ store: store, written: Object.create(null), merge: function (existing, incoming) {\n                return merger.merge(existing, incoming);\n            }, variables: variables, varString: canonicalStringify(variables) }, extractFragmentContext(query, this.fragments)), { overwrite: !!overwrite, incomingById: new Map(), clientOnly: false, deferred: false, flavors: new Map() });\n        var ref = this.processSelectionSet({\n            result: result || Object.create(null),\n            dataId: dataId,\n            selectionSet: operationDefinition.selectionSet,\n            mergeTree: { map: new Map() },\n            context: context,\n        });\n        if (!isReference(ref)) {\n            throw newInvariantError(12, result);\n        }\n        // So far, the store has not been modified, so now it's time to process\n        // context.incomingById and merge those incoming fields into context.store.\n        context.incomingById.forEach(function (_a, dataId) {\n            var storeObject = _a.storeObject, mergeTree = _a.mergeTree, fieldNodeSet = _a.fieldNodeSet;\n            var entityRef = makeReference(dataId);\n            if (mergeTree && mergeTree.map.size) {\n                var applied = _this.applyMerges(mergeTree, entityRef, storeObject, context);\n                if (isReference(applied)) {\n                    // Assume References returned by applyMerges have already been merged\n                    // into the store. See makeMergeObjectsFunction in policies.ts for an\n                    // example of how this can happen.\n                    return;\n                }\n                // Otherwise, applyMerges returned a StoreObject, whose fields we should\n                // merge into the store (see store.merge statement below).\n                storeObject = applied;\n            }\n            if (globalThis.__DEV__ !== false && !context.overwrite) {\n                var fieldsWithSelectionSets_1 = Object.create(null);\n                fieldNodeSet.forEach(function (field) {\n                    if (field.selectionSet) {\n                        fieldsWithSelectionSets_1[field.name.value] = true;\n                    }\n                });\n                var hasSelectionSet_1 = function (storeFieldName) {\n                    return fieldsWithSelectionSets_1[fieldNameFromStoreName(storeFieldName)] ===\n                        true;\n                };\n                var hasMergeFunction_1 = function (storeFieldName) {\n                    var childTree = mergeTree && mergeTree.map.get(storeFieldName);\n                    return Boolean(childTree && childTree.info && childTree.info.merge);\n                };\n                Object.keys(storeObject).forEach(function (storeFieldName) {\n                    // If a merge function was defined for this field, trust that it\n                    // did the right thing about (not) clobbering data. If the field\n                    // has no selection set, it's a scalar field, so it doesn't need\n                    // a merge function (even if it's an object, like JSON data).\n                    if (hasSelectionSet_1(storeFieldName) &&\n                        !hasMergeFunction_1(storeFieldName)) {\n                        warnAboutDataLoss(entityRef, storeObject, storeFieldName, context.store);\n                    }\n                });\n            }\n            store.merge(dataId, storeObject);\n        });\n        // Any IDs written explicitly to the cache will be retained as\n        // reachable root IDs for garbage collection purposes. Although this\n        // logic includes root IDs like ROOT_QUERY and ROOT_MUTATION, their\n        // retainment counts are effectively ignored because cache.gc() always\n        // includes them in its root ID set.\n        store.retain(ref.__ref);\n        return ref;\n    };\n    StoreWriter.prototype.processSelectionSet = function (_a) {\n        var _this = this;\n        var dataId = _a.dataId, result = _a.result, selectionSet = _a.selectionSet, context = _a.context, \n        // This object allows processSelectionSet to report useful information\n        // to its callers without explicitly returning that information.\n        mergeTree = _a.mergeTree;\n        var policies = this.cache.policies;\n        // This variable will be repeatedly updated using context.merge to\n        // accumulate all fields that need to be written into the store.\n        var incoming = Object.create(null);\n        // If typename was not passed in, infer it. Note that typename is\n        // always passed in for tricky-to-infer cases such as \"Query\" for\n        // ROOT_QUERY.\n        var typename = (dataId && policies.rootTypenamesById[dataId]) ||\n            getTypenameFromResult(result, selectionSet, context.fragmentMap) ||\n            (dataId && context.store.get(dataId, \"__typename\"));\n        if (\"string\" === typeof typename) {\n            incoming.__typename = typename;\n        }\n        // This readField function will be passed as context.readField in the\n        // KeyFieldsContext object created within policies.identify (called below).\n        // In addition to reading from the existing context.store (thanks to the\n        // policies.readField(options, context) line at the very bottom), this\n        // version of readField can read from Reference objects that are currently\n        // pending in context.incomingById, which is important whenever keyFields\n        // need to be extracted from a child object that processSelectionSet has\n        // turned into a Reference.\n        var readField = function () {\n            var options = normalizeReadFieldOptions(arguments, incoming, context.variables);\n            if (isReference(options.from)) {\n                var info = context.incomingById.get(options.from.__ref);\n                if (info) {\n                    var result_1 = policies.readField(__assign(__assign({}, options), { from: info.storeObject }), context);\n                    if (result_1 !== void 0) {\n                        return result_1;\n                    }\n                }\n            }\n            return policies.readField(options, context);\n        };\n        var fieldNodeSet = new Set();\n        this.flattenFields(selectionSet, result, \n        // This WriteContext will be the default context value for fields returned\n        // by the flattenFields method, but some fields may be assigned a modified\n        // context, depending on the presence of @client and other directives.\n        context, typename).forEach(function (context, field) {\n            var _a;\n            var resultFieldKey = resultKeyNameFromField(field);\n            var value = result[resultFieldKey];\n            fieldNodeSet.add(field);\n            if (value !== void 0) {\n                var storeFieldName = policies.getStoreFieldName({\n                    typename: typename,\n                    fieldName: field.name.value,\n                    field: field,\n                    variables: context.variables,\n                });\n                var childTree = getChildMergeTree(mergeTree, storeFieldName);\n                var incomingValue = _this.processFieldValue(value, field, \n                // Reset context.clientOnly and context.deferred to their default\n                // values before processing nested selection sets.\n                field.selectionSet ?\n                    getContextFlavor(context, false, false)\n                    : context, childTree);\n                // To determine if this field holds a child object with a merge function\n                // defined in its type policy (see PR #7070), we need to figure out the\n                // child object's __typename.\n                var childTypename = void 0;\n                // The field's value can be an object that has a __typename only if the\n                // field has a selection set. Otherwise incomingValue is scalar.\n                if (field.selectionSet &&\n                    (isReference(incomingValue) || storeValueIsStoreObject(incomingValue))) {\n                    childTypename = readField(\"__typename\", incomingValue);\n                }\n                var merge = policies.getMergeFunction(typename, field.name.value, childTypename);\n                if (merge) {\n                    childTree.info = {\n                        // TODO Check compatibility against any existing childTree.field?\n                        field: field,\n                        typename: typename,\n                        merge: merge,\n                    };\n                }\n                else {\n                    maybeRecycleChildMergeTree(mergeTree, storeFieldName);\n                }\n                incoming = context.merge(incoming, (_a = {},\n                    _a[storeFieldName] = incomingValue,\n                    _a));\n            }\n            else if (globalThis.__DEV__ !== false &&\n                !context.clientOnly &&\n                !context.deferred &&\n                !addTypenameToDocument.added(field) &&\n                // If the field has a read function, it may be a synthetic field or\n                // provide a default value, so its absence from the written data should\n                // not be cause for alarm.\n                !policies.getReadFunction(typename, field.name.value)) {\n                globalThis.__DEV__ !== false && invariant.error(13, resultKeyNameFromField(field), result);\n            }\n        });\n        // Identify the result object, even if dataId was already provided,\n        // since we always need keyObject below.\n        try {\n            var _b = policies.identify(result, {\n                typename: typename,\n                selectionSet: selectionSet,\n                fragmentMap: context.fragmentMap,\n                storeObject: incoming,\n                readField: readField,\n            }), id = _b[0], keyObject = _b[1];\n            // If dataId was not provided, fall back to the id just generated by\n            // policies.identify.\n            dataId = dataId || id;\n            // Write any key fields that were used during identification, even if\n            // they were not mentioned in the original query.\n            if (keyObject) {\n                // TODO Reverse the order of the arguments?\n                incoming = context.merge(incoming, keyObject);\n            }\n        }\n        catch (e) {\n            // If dataId was provided, tolerate failure of policies.identify.\n            if (!dataId)\n                throw e;\n        }\n        if (\"string\" === typeof dataId) {\n            var dataRef = makeReference(dataId);\n            // Avoid processing the same entity object using the same selection\n            // set more than once. We use an array instead of a Set since most\n            // entity IDs will be written using only one selection set, so the\n            // size of this array is likely to be very small, meaning indexOf is\n            // likely to be faster than Set.prototype.has.\n            var sets = context.written[dataId] || (context.written[dataId] = []);\n            if (sets.indexOf(selectionSet) >= 0)\n                return dataRef;\n            sets.push(selectionSet);\n            // If we're about to write a result object into the store, but we\n            // happen to know that the exact same (===) result object would be\n            // returned if we were to reread the result with the same inputs,\n            // then we can skip the rest of the processSelectionSet work for\n            // this object, and immediately return a Reference to it.\n            if (this.reader &&\n                this.reader.isFresh(result, dataRef, selectionSet, context)) {\n                return dataRef;\n            }\n            var previous_1 = context.incomingById.get(dataId);\n            if (previous_1) {\n                previous_1.storeObject = context.merge(previous_1.storeObject, incoming);\n                previous_1.mergeTree = mergeMergeTrees(previous_1.mergeTree, mergeTree);\n                fieldNodeSet.forEach(function (field) { return previous_1.fieldNodeSet.add(field); });\n            }\n            else {\n                context.incomingById.set(dataId, {\n                    storeObject: incoming,\n                    // Save a reference to mergeTree only if it is not empty, because\n                    // empty MergeTrees may be recycled by maybeRecycleChildMergeTree and\n                    // reused for entirely different parts of the result tree.\n                    mergeTree: mergeTreeIsEmpty(mergeTree) ? void 0 : mergeTree,\n                    fieldNodeSet: fieldNodeSet,\n                });\n            }\n            return dataRef;\n        }\n        return incoming;\n    };\n    StoreWriter.prototype.processFieldValue = function (value, field, context, mergeTree) {\n        var _this = this;\n        if (!field.selectionSet || value === null) {\n            // In development, we need to clone scalar values so that they can be\n            // safely frozen with maybeDeepFreeze in readFromStore.ts. In production,\n            // it's cheaper to store the scalar values directly in the cache.\n            return globalThis.__DEV__ !== false ? cloneDeep(value) : value;\n        }\n        if (isArray(value)) {\n            return value.map(function (item, i) {\n                var value = _this.processFieldValue(item, field, context, getChildMergeTree(mergeTree, i));\n                maybeRecycleChildMergeTree(mergeTree, i);\n                return value;\n            });\n        }\n        return this.processSelectionSet({\n            result: value,\n            selectionSet: field.selectionSet,\n            context: context,\n            mergeTree: mergeTree,\n        });\n    };\n    // Implements https://spec.graphql.org/draft/#sec-Field-Collection, but with\n    // some additions for tracking @client and @defer directives.\n    StoreWriter.prototype.flattenFields = function (selectionSet, result, context, typename) {\n        if (typename === void 0) { typename = getTypenameFromResult(result, selectionSet, context.fragmentMap); }\n        var fieldMap = new Map();\n        var policies = this.cache.policies;\n        var limitingTrie = new Trie(false); // No need for WeakMap, since limitingTrie does not escape.\n        (function flatten(selectionSet, inheritedContext) {\n            var visitedNode = limitingTrie.lookup(selectionSet, \n            // Because we take inheritedClientOnly and inheritedDeferred into\n            // consideration here (in addition to selectionSet), it's possible for\n            // the same selection set to be flattened more than once, if it appears\n            // in the query with different @client and/or @directive configurations.\n            inheritedContext.clientOnly, inheritedContext.deferred);\n            if (visitedNode.visited)\n                return;\n            visitedNode.visited = true;\n            selectionSet.selections.forEach(function (selection) {\n                if (!shouldInclude(selection, context.variables))\n                    return;\n                var clientOnly = inheritedContext.clientOnly, deferred = inheritedContext.deferred;\n                if (\n                // Since the presence of @client or @defer on this field can only\n                // cause clientOnly or deferred to become true, we can skip the\n                // forEach loop if both clientOnly and deferred are already true.\n                !(clientOnly && deferred) &&\n                    isNonEmptyArray(selection.directives)) {\n                    selection.directives.forEach(function (dir) {\n                        var name = dir.name.value;\n                        if (name === \"client\")\n                            clientOnly = true;\n                        if (name === \"defer\") {\n                            var args = argumentsObjectFromField(dir, context.variables);\n                            // The @defer directive takes an optional args.if boolean\n                            // argument, similar to @include(if: boolean). Note that\n                            // @defer(if: false) does not make context.deferred false, but\n                            // instead behaves as if there was no @defer directive.\n                            if (!args || args.if !== false) {\n                                deferred = true;\n                            }\n                            // TODO In the future, we may want to record args.label using\n                            // context.deferred, if a label is specified.\n                        }\n                    });\n                }\n                if (isField(selection)) {\n                    var existing = fieldMap.get(selection);\n                    if (existing) {\n                        // If this field has been visited along another recursive path\n                        // before, the final context should have clientOnly or deferred set\n                        // to true only if *all* paths have the directive (hence the &&).\n                        clientOnly = clientOnly && existing.clientOnly;\n                        deferred = deferred && existing.deferred;\n                    }\n                    fieldMap.set(selection, getContextFlavor(context, clientOnly, deferred));\n                }\n                else {\n                    var fragment = getFragmentFromSelection(selection, context.lookupFragment);\n                    if (!fragment && selection.kind === Kind.FRAGMENT_SPREAD) {\n                        throw newInvariantError(14, selection.name.value);\n                    }\n                    if (fragment &&\n                        policies.fragmentMatches(fragment, typename, result, context.variables)) {\n                        flatten(fragment.selectionSet, getContextFlavor(context, clientOnly, deferred));\n                    }\n                }\n            });\n        })(selectionSet, context);\n        return fieldMap;\n    };\n    StoreWriter.prototype.applyMerges = function (mergeTree, existing, incoming, context, getStorageArgs) {\n        var _a;\n        var _this = this;\n        if (mergeTree.map.size && !isReference(incoming)) {\n            var e_1 = \n            // Items in the same position in different arrays are not\n            // necessarily related to each other, so when incoming is an array\n            // we process its elements as if there was no existing data.\n            (!isArray(incoming) &&\n                // Likewise, existing must be either a Reference or a StoreObject\n                // in order for its fields to be safe to merge with the fields of\n                // the incoming object.\n                (isReference(existing) || storeValueIsStoreObject(existing))) ?\n                existing\n                : void 0;\n            // This narrowing is implied by mergeTree.map.size > 0 and\n            // !isReference(incoming), though TypeScript understandably cannot\n            // hope to infer this type.\n            var i_1 = incoming;\n            // The options.storage objects provided to read and merge functions\n            // are derived from the identity of the parent object plus a\n            // sequence of storeFieldName strings/numbers identifying the nested\n            // field name path of each field value to be merged.\n            if (e_1 && !getStorageArgs) {\n                getStorageArgs = [isReference(e_1) ? e_1.__ref : e_1];\n            }\n            // It's possible that applying merge functions to this subtree will\n            // not change the incoming data, so this variable tracks the fields\n            // that did change, so we can create a new incoming object when (and\n            // only when) at least one incoming field has changed. We use a Map\n            // to preserve the type of numeric keys.\n            var changedFields_1;\n            var getValue_1 = function (from, name) {\n                return (isArray(from) ?\n                    typeof name === \"number\" ?\n                        from[name]\n                        : void 0\n                    : context.store.getFieldValue(from, String(name)));\n            };\n            mergeTree.map.forEach(function (childTree, storeFieldName) {\n                var eVal = getValue_1(e_1, storeFieldName);\n                var iVal = getValue_1(i_1, storeFieldName);\n                // If we have no incoming data, leave any existing data untouched.\n                if (void 0 === iVal)\n                    return;\n                if (getStorageArgs) {\n                    getStorageArgs.push(storeFieldName);\n                }\n                var aVal = _this.applyMerges(childTree, eVal, iVal, context, getStorageArgs);\n                if (aVal !== iVal) {\n                    changedFields_1 = changedFields_1 || new Map();\n                    changedFields_1.set(storeFieldName, aVal);\n                }\n                if (getStorageArgs) {\n                    invariant(getStorageArgs.pop() === storeFieldName);\n                }\n            });\n            if (changedFields_1) {\n                // Shallow clone i so we can add changed fields to it.\n                incoming = (isArray(i_1) ? i_1.slice(0) : __assign({}, i_1));\n                changedFields_1.forEach(function (value, name) {\n                    incoming[name] = value;\n                });\n            }\n        }\n        if (mergeTree.info) {\n            return this.cache.policies.runMergeFunction(existing, incoming, mergeTree.info, context, getStorageArgs && (_a = context.store).getStorage.apply(_a, getStorageArgs));\n        }\n        return incoming;\n    };\n    return StoreWriter;\n}());\nexport { StoreWriter };\nvar emptyMergeTreePool = [];\nfunction getChildMergeTree(_a, name) {\n    var map = _a.map;\n    if (!map.has(name)) {\n        map.set(name, emptyMergeTreePool.pop() || { map: new Map() });\n    }\n    return map.get(name);\n}\nfunction mergeMergeTrees(left, right) {\n    if (left === right || !right || mergeTreeIsEmpty(right))\n        return left;\n    if (!left || mergeTreeIsEmpty(left))\n        return right;\n    var info = left.info && right.info ? __assign(__assign({}, left.info), right.info) : left.info || right.info;\n    var needToMergeMaps = left.map.size && right.map.size;\n    var map = needToMergeMaps ? new Map()\n        : left.map.size ? left.map\n            : right.map;\n    var merged = { info: info, map: map };\n    if (needToMergeMaps) {\n        var remainingRightKeys_1 = new Set(right.map.keys());\n        left.map.forEach(function (leftTree, key) {\n            merged.map.set(key, mergeMergeTrees(leftTree, right.map.get(key)));\n            remainingRightKeys_1.delete(key);\n        });\n        remainingRightKeys_1.forEach(function (key) {\n            merged.map.set(key, mergeMergeTrees(right.map.get(key), left.map.get(key)));\n        });\n    }\n    return merged;\n}\nfunction mergeTreeIsEmpty(tree) {\n    return !tree || !(tree.info || tree.map.size);\n}\nfunction maybeRecycleChildMergeTree(_a, name) {\n    var map = _a.map;\n    var childTree = map.get(name);\n    if (childTree && mergeTreeIsEmpty(childTree)) {\n        emptyMergeTreePool.push(childTree);\n        map.delete(name);\n    }\n}\nvar warnings = new Set();\n// Note that this function is unused in production, and thus should be\n// pruned by any well-configured minifier.\nfunction warnAboutDataLoss(existingRef, incomingObj, storeFieldName, store) {\n    var getChild = function (objOrRef) {\n        var child = store.getFieldValue(objOrRef, storeFieldName);\n        return typeof child === \"object\" && child;\n    };\n    var existing = getChild(existingRef);\n    if (!existing)\n        return;\n    var incoming = getChild(incomingObj);\n    if (!incoming)\n        return;\n    // It's always safe to replace a reference, since it refers to data\n    // safely stored elsewhere.\n    if (isReference(existing))\n        return;\n    // If the values are structurally equivalent, we do not need to worry\n    // about incoming replacing existing.\n    if (equal(existing, incoming))\n        return;\n    // If we're replacing every key of the existing object, then the\n    // existing data would be overwritten even if the objects were\n    // normalized, so warning would not be helpful here.\n    if (Object.keys(existing).every(function (key) { return store.getFieldValue(incoming, key) !== void 0; })) {\n        return;\n    }\n    var parentType = store.getFieldValue(existingRef, \"__typename\") ||\n        store.getFieldValue(incomingObj, \"__typename\");\n    var fieldName = fieldNameFromStoreName(storeFieldName);\n    var typeDotName = \"\".concat(parentType, \".\").concat(fieldName);\n    // Avoid warning more than once for the same type and field name.\n    if (warnings.has(typeDotName))\n        return;\n    warnings.add(typeDotName);\n    var childTypenames = [];\n    // Arrays do not have __typename fields, and always need a custom merge\n    // function, even if their elements are normalized entities.\n    if (!isArray(existing) && !isArray(incoming)) {\n        [existing, incoming].forEach(function (child) {\n            var typename = store.getFieldValue(child, \"__typename\");\n            if (typeof typename === \"string\" && !childTypenames.includes(typename)) {\n                childTypenames.push(typename);\n            }\n        });\n    }\n    globalThis.__DEV__ !== false && invariant.warn(15, fieldName, parentType, childTypenames.length ?\n        \"either ensure all objects of type \" +\n            childTypenames.join(\" and \") +\n            \" have an ID or a custom merge function, or \"\n        : \"\", typeDotName, __assign({}, existing), __assign({}, incoming));\n}\n//# sourceMappingURL=writeToStore.js.map","import { __assign, __extends } from \"tslib\";\nimport { invariant } from \"../../utilities/globals/index.js\";\n// Make builtins like Map and Set safe to use with non-extensible objects.\nimport \"./fixPolyfills.js\";\nimport { wrap } from \"optimism\";\nimport { equal } from \"@wry/equality\";\nimport { ApolloCache } from \"../core/cache.js\";\nimport { MissingFieldError } from \"../core/types/common.js\";\nimport { addTypenameToDocument, isReference, DocumentTransform, canonicalStringify, print, cacheSizes, } from \"../../utilities/index.js\";\nimport { StoreReader } from \"./readFromStore.js\";\nimport { StoreWriter } from \"./writeToStore.js\";\nimport { EntityStore, supportsResultCaching } from \"./entityStore.js\";\nimport { makeVar, forgetCache, recallCache } from \"./reactiveVars.js\";\nimport { Policies } from \"./policies.js\";\nimport { hasOwn, normalizeConfig, shouldCanonizeResults } from \"./helpers.js\";\nimport { getInMemoryCacheMemoryInternals } from \"../../utilities/caching/getMemoryInternals.js\";\nimport { muteDeprecations, warnRemovedOption } from \"../../utilities/index.js\";\nvar InMemoryCache = /** @class */ (function (_super) {\n    __extends(InMemoryCache, _super);\n    function InMemoryCache(config) {\n        if (config === void 0) { config = {}; }\n        var _this = _super.call(this) || this;\n        _this.watches = new Set();\n        _this.addTypenameTransform = new DocumentTransform(addTypenameToDocument);\n        // Override the default value, since InMemoryCache result objects are frozen\n        // in development and expected to remain logically immutable in production.\n        _this.assumeImmutableResults = true;\n        _this.makeVar = makeVar;\n        _this.txCount = 0;\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(config, \"addTypename\", \"InMemoryCache\", \"Please remove the `addTypename` option when initializing `InMemoryCache`.\");\n            warnRemovedOption(config, \"canonizeResults\", \"InMemoryCache\", \"Please remove the `canonizeResults` option when initializing `InMemoryCache`.\");\n        }\n        _this.config = normalizeConfig(config);\n        _this.addTypename = !!_this.config.addTypename;\n        _this.policies = new Policies({\n            cache: _this,\n            dataIdFromObject: _this.config.dataIdFromObject,\n            possibleTypes: _this.config.possibleTypes,\n            typePolicies: _this.config.typePolicies,\n        });\n        _this.init();\n        return _this;\n    }\n    InMemoryCache.prototype.init = function () {\n        // Passing { resultCaching: false } in the InMemoryCache constructor options\n        // will completely disable dependency tracking, which will improve memory\n        // usage but worsen the performance of repeated reads.\n        var rootStore = (this.data = new EntityStore.Root({\n            policies: this.policies,\n            resultCaching: this.config.resultCaching,\n        }));\n        // When no optimistic writes are currently active, cache.optimisticData ===\n        // cache.data, so there are no additional layers on top of the actual data.\n        // When an optimistic update happens, this.optimisticData will become a\n        // linked list of EntityStore Layer objects that terminates with the\n        // original this.data cache object.\n        this.optimisticData = rootStore.stump;\n        this.resetResultCache();\n    };\n    InMemoryCache.prototype.resetResultCache = function (resetResultIdentities) {\n        var _this = this;\n        var previousReader = this.storeReader;\n        var fragments = this.config.fragments;\n        this.addTypenameTransform.resetCache();\n        fragments === null || fragments === void 0 ? void 0 : fragments.resetCaches();\n        // The StoreWriter is mostly stateless and so doesn't really need to be\n        // reset, but it does need to have its writer.storeReader reference updated,\n        // so it's simpler to update this.storeWriter as well.\n        this.storeWriter = new StoreWriter(this, (this.storeReader = new StoreReader({\n            cache: this,\n            addTypename: this.addTypename,\n            resultCacheMaxSize: this.config.resultCacheMaxSize,\n            canonizeResults: shouldCanonizeResults(this.config),\n            canon: resetResultIdentities ? void 0 : (previousReader && previousReader.canon),\n            fragments: fragments,\n        })), fragments);\n        this.maybeBroadcastWatch = wrap(function (c, options) {\n            return _this.broadcastWatch(c, options);\n        }, {\n            max: this.config.resultCacheMaxSize ||\n                cacheSizes[\"inMemoryCache.maybeBroadcastWatch\"] ||\n                5000 /* defaultCacheSizes[\"inMemoryCache.maybeBroadcastWatch\"] */,\n            makeCacheKey: function (c) {\n                // Return a cache key (thus enabling result caching) only if we're\n                // currently using a data store that can track cache dependencies.\n                var store = c.optimistic ? _this.optimisticData : _this.data;\n                if (supportsResultCaching(store)) {\n                    var optimistic = c.optimistic, id = c.id, variables = c.variables;\n                    return store.makeCacheKey(c.query, \n                    // Different watches can have the same query, optimistic\n                    // status, rootId, and variables, but if their callbacks are\n                    // different, the (identical) result needs to be delivered to\n                    // each distinct callback. The easiest way to achieve that\n                    // separation is to include c.callback in the cache key for\n                    // maybeBroadcastWatch calls. See issue #5733.\n                    c.callback, canonicalStringify({ optimistic: optimistic, id: id, variables: variables }));\n                }\n            },\n        });\n        // Since we have thrown away all the cached functions that depend on the\n        // CacheGroup dependencies maintained by EntityStore, we should also reset\n        // all CacheGroup dependency information.\n        new Set([this.data.group, this.optimisticData.group]).forEach(function (group) {\n            return group.resetCaching();\n        });\n    };\n    InMemoryCache.prototype.restore = function (data) {\n        this.init();\n        // Since calling this.init() discards/replaces the entire StoreReader, along\n        // with the result caches it maintains, this.data.replace(data) won't have\n        // to bother deleting the old data.\n        if (data)\n            this.data.replace(data);\n        return this;\n    };\n    InMemoryCache.prototype.extract = function (optimistic) {\n        if (optimistic === void 0) { optimistic = false; }\n        return (optimistic ? this.optimisticData : this.data).extract();\n    };\n    InMemoryCache.prototype.read = function (options) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.read\");\n        }\n        var \n        // Since read returns data or null, without any additional metadata\n        // about whether/where there might have been missing fields, the\n        // default behavior cannot be returnPartialData = true (like it is\n        // for the diff method), since defaulting to true would violate the\n        // integrity of the T in the return type. However, partial data may\n        // be useful in some cases, so returnPartialData:true may be\n        // specified explicitly.\n        _a = options.returnPartialData, \n        // Since read returns data or null, without any additional metadata\n        // about whether/where there might have been missing fields, the\n        // default behavior cannot be returnPartialData = true (like it is\n        // for the diff method), since defaulting to true would violate the\n        // integrity of the T in the return type. However, partial data may\n        // be useful in some cases, so returnPartialData:true may be\n        // specified explicitly.\n        returnPartialData = _a === void 0 ? false : _a;\n        try {\n            return (this.storeReader.diffQueryAgainstStore(__assign(__assign({}, options), { store: options.optimistic ? this.optimisticData : this.data, config: this.config, returnPartialData: returnPartialData })).result || null);\n        }\n        catch (e) {\n            if (e instanceof MissingFieldError) {\n                // Swallow MissingFieldError and return null, so callers do not need to\n                // worry about catching \"normal\" exceptions resulting from incomplete\n                // cache data. Unexpected errors will be re-thrown. If you need more\n                // information about which fields were missing, use cache.diff instead,\n                // and examine diffResult.missing.\n                return null;\n            }\n            throw e;\n        }\n    };\n    InMemoryCache.prototype.write = function (options) {\n        try {\n            ++this.txCount;\n            return this.storeWriter.writeToStore(this.data, options);\n        }\n        finally {\n            if (!--this.txCount && options.broadcast !== false) {\n                this.broadcastWatches();\n            }\n        }\n    };\n    InMemoryCache.prototype.modify = function (options) {\n        if (hasOwn.call(options, \"id\") && !options.id) {\n            // To my knowledge, TypeScript does not currently provide a way to\n            // enforce that an optional property?:type must *not* be undefined\n            // when present. That ability would be useful here, because we want\n            // options.id to default to ROOT_QUERY only when no options.id was\n            // provided. If the caller attempts to pass options.id with a\n            // falsy/undefined value (perhaps because cache.identify failed), we\n            // should not assume the goal was to modify the ROOT_QUERY object.\n            // We could throw, but it seems natural to return false to indicate\n            // that nothing was modified.\n            return false;\n        }\n        var store = ((options.optimistic) // Defaults to false.\n        ) ?\n            this.optimisticData\n            : this.data;\n        try {\n            ++this.txCount;\n            return store.modify(options.id || \"ROOT_QUERY\", options.fields);\n        }\n        finally {\n            if (!--this.txCount && options.broadcast !== false) {\n                this.broadcastWatches();\n            }\n        }\n    };\n    InMemoryCache.prototype.diff = function (options) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"cache.diff\");\n        }\n        return this.storeReader.diffQueryAgainstStore(__assign(__assign({}, options), { store: options.optimistic ? this.optimisticData : this.data, rootId: options.id || \"ROOT_QUERY\", config: this.config }));\n    };\n    InMemoryCache.prototype.watch = function (watch) {\n        var _this = this;\n        if (!this.watches.size) {\n            // In case we previously called forgetCache(this) because\n            // this.watches became empty (see below), reattach this cache to any\n            // reactive variables on which it previously depended. It might seem\n            // paradoxical that we're able to recall something we supposedly\n            // forgot, but the point of calling forgetCache(this) is to silence\n            // useless broadcasts while this.watches is empty, and to allow the\n            // cache to be garbage collected. If, however, we manage to call\n            // recallCache(this) here, this cache object must not have been\n            // garbage collected yet, and should resume receiving updates from\n            // reactive variables, now that it has a watcher to notify.\n            recallCache(this);\n        }\n        this.watches.add(watch);\n        if (watch.immediate) {\n            this.maybeBroadcastWatch(watch);\n        }\n        return function () {\n            // Once we remove the last watch from this.watches, cache.broadcastWatches\n            // no longer does anything, so we preemptively tell the reactive variable\n            // system to exclude this cache from future broadcasts.\n            if (_this.watches.delete(watch) && !_this.watches.size) {\n                forgetCache(_this);\n            }\n            // Remove this watch from the LRU cache managed by the\n            // maybeBroadcastWatch OptimisticWrapperFunction, to prevent memory\n            // leaks involving the closure of watch.callback.\n            _this.maybeBroadcastWatch.forget(watch);\n        };\n    };\n    InMemoryCache.prototype.gc = function (options) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options || {}, \"resetResultIdentities\", \"cache.gc\", \"First ensure all usages of `canonizeResults` are removed, then remove this option.\");\n        }\n        canonicalStringify.reset();\n        print.reset();\n        var ids = this.optimisticData.gc();\n        if (options && !this.txCount) {\n            if (options.resetResultCache) {\n                this.resetResultCache(options.resetResultIdentities);\n            }\n            else if (options.resetResultIdentities) {\n                this.storeReader.resetCanon();\n            }\n        }\n        return ids;\n    };\n    // Call this method to ensure the given root ID remains in the cache after\n    // garbage collection, along with its transitive child entities. Note that\n    // the cache automatically retains all directly written entities. By default,\n    // the retainment persists after optimistic updates are removed. Pass true\n    // for the optimistic argument if you would prefer for the retainment to be\n    // discarded when the top-most optimistic layer is removed. Returns the\n    // resulting (non-negative) retainment count.\n    InMemoryCache.prototype.retain = function (rootId, optimistic) {\n        return (optimistic ? this.optimisticData : this.data).retain(rootId);\n    };\n    // Call this method to undo the effect of the retain method, above. Once the\n    // retainment count falls to zero, the given ID will no longer be preserved\n    // during garbage collection, though it may still be preserved by other safe\n    // entities that refer to it. Returns the resulting (non-negative) retainment\n    // count, in case that's useful.\n    InMemoryCache.prototype.release = function (rootId, optimistic) {\n        return (optimistic ? this.optimisticData : this.data).release(rootId);\n    };\n    // Returns the canonical ID for a given StoreObject, obeying typePolicies\n    // and keyFields (and dataIdFromObject, if you still use that). At minimum,\n    // the object must contain a __typename and any primary key fields required\n    // to identify entities of that type. If you pass a query result object, be\n    // sure that none of the primary key fields have been renamed by aliasing.\n    // If you pass a Reference object, its __ref ID string will be returned.\n    InMemoryCache.prototype.identify = function (object) {\n        if (isReference(object))\n            return object.__ref;\n        try {\n            return this.policies.identify(object)[0];\n        }\n        catch (e) {\n            globalThis.__DEV__ !== false && invariant.warn(e);\n        }\n    };\n    InMemoryCache.prototype.evict = function (options) {\n        if (!options.id) {\n            if (hasOwn.call(options, \"id\")) {\n                // See comment in modify method about why we return false when\n                // options.id exists but is falsy/undefined.\n                return false;\n            }\n            options = __assign(__assign({}, options), { id: \"ROOT_QUERY\" });\n        }\n        try {\n            // It's unlikely that the eviction will end up invoking any other\n            // cache update operations while it's running, but {in,de}crementing\n            // this.txCount still seems like a good idea, for uniformity with\n            // the other update methods.\n            ++this.txCount;\n            // Pass this.data as a limit on the depth of the eviction, so evictions\n            // during optimistic updates (when this.data is temporarily set equal to\n            // this.optimisticData) do not escape their optimistic Layer.\n            return this.optimisticData.evict(options, this.data);\n        }\n        finally {\n            if (!--this.txCount && options.broadcast !== false) {\n                this.broadcastWatches();\n            }\n        }\n    };\n    InMemoryCache.prototype.reset = function (options) {\n        var _this = this;\n        this.init();\n        canonicalStringify.reset();\n        if (options && options.discardWatches) {\n            // Similar to what happens in the unsubscribe function returned by\n            // cache.watch, applied to all current watches.\n            this.watches.forEach(function (watch) { return _this.maybeBroadcastWatch.forget(watch); });\n            this.watches.clear();\n            forgetCache(this);\n        }\n        else {\n            // Calling this.init() above unblocks all maybeBroadcastWatch caching, so\n            // this.broadcastWatches() triggers a broadcast to every current watcher\n            // (letting them know their data is now missing). This default behavior is\n            // convenient because it means the watches do not have to be manually\n            // reestablished after resetting the cache. To prevent this broadcast and\n            // cancel all watches, pass true for options.discardWatches.\n            this.broadcastWatches();\n        }\n        return Promise.resolve();\n    };\n    InMemoryCache.prototype.removeOptimistic = function (idToRemove) {\n        var newOptimisticData = this.optimisticData.removeLayer(idToRemove);\n        if (newOptimisticData !== this.optimisticData) {\n            this.optimisticData = newOptimisticData;\n            this.broadcastWatches();\n        }\n    };\n    InMemoryCache.prototype.batch = function (options) {\n        var _this = this;\n        var update = options.update, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, removeOptimistic = options.removeOptimistic, onWatchUpdated = options.onWatchUpdated;\n        var updateResult;\n        var perform = function (layer) {\n            var _a = _this, data = _a.data, optimisticData = _a.optimisticData;\n            ++_this.txCount;\n            if (layer) {\n                _this.data = _this.optimisticData = layer;\n            }\n            try {\n                return (updateResult = update(_this));\n            }\n            finally {\n                --_this.txCount;\n                _this.data = data;\n                _this.optimisticData = optimisticData;\n            }\n        };\n        var alreadyDirty = new Set();\n        if (onWatchUpdated && !this.txCount) {\n            // If an options.onWatchUpdated callback is provided, we want to call it\n            // with only the Cache.WatchOptions objects affected by options.update,\n            // but there might be dirty watchers already waiting to be broadcast that\n            // have nothing to do with the update. To prevent including those watchers\n            // in the post-update broadcast, we perform this initial broadcast to\n            // collect the dirty watchers, so we can re-dirty them later, after the\n            // post-update broadcast, allowing them to receive their pending\n            // broadcasts the next time broadcastWatches is called, just as they would\n            // if we never called cache.batch.\n            this.broadcastWatches(__assign(__assign({}, options), { onWatchUpdated: function (watch) {\n                    alreadyDirty.add(watch);\n                    return false;\n                } }));\n        }\n        if (typeof optimistic === \"string\") {\n            // Note that there can be multiple layers with the same optimistic ID.\n            // When removeOptimistic(id) is called for that id, all matching layers\n            // will be removed, and the remaining layers will be reapplied.\n            this.optimisticData = this.optimisticData.addLayer(optimistic, perform);\n        }\n        else if (optimistic === false) {\n            // Ensure both this.data and this.optimisticData refer to the root\n            // (non-optimistic) layer of the cache during the update. Note that\n            // this.data could be a Layer if we are currently executing an optimistic\n            // update function, but otherwise will always be an EntityStore.Root\n            // instance.\n            perform(this.data);\n        }\n        else {\n            // Otherwise, leave this.data and this.optimisticData unchanged and run\n            // the update with broadcast batching.\n            perform();\n        }\n        if (typeof removeOptimistic === \"string\") {\n            this.optimisticData = this.optimisticData.removeLayer(removeOptimistic);\n        }\n        // Note: if this.txCount > 0, then alreadyDirty.size === 0, so this code\n        // takes the else branch and calls this.broadcastWatches(options), which\n        // does nothing when this.txCount > 0.\n        if (onWatchUpdated && alreadyDirty.size) {\n            this.broadcastWatches(__assign(__assign({}, options), { onWatchUpdated: function (watch, diff) {\n                    var result = onWatchUpdated.call(this, watch, diff);\n                    if (result !== false) {\n                        // Since onWatchUpdated did not return false, this diff is\n                        // about to be broadcast to watch.callback, so we don't need\n                        // to re-dirty it with the other alreadyDirty watches below.\n                        alreadyDirty.delete(watch);\n                    }\n                    return result;\n                } }));\n            // Silently re-dirty any watches that were already dirty before the update\n            // was performed, and were not broadcast just now.\n            if (alreadyDirty.size) {\n                alreadyDirty.forEach(function (watch) { return _this.maybeBroadcastWatch.dirty(watch); });\n            }\n        }\n        else {\n            // If alreadyDirty is empty or we don't have an onWatchUpdated\n            // function, we don't need to go to the trouble of wrapping\n            // options.onWatchUpdated.\n            this.broadcastWatches(options);\n        }\n        return updateResult;\n    };\n    InMemoryCache.prototype.performTransaction = function (update, optimisticId) {\n        return this.batch({\n            update: update,\n            optimistic: optimisticId || optimisticId !== null,\n        });\n    };\n    InMemoryCache.prototype.transformDocument = function (document) {\n        return this.addTypenameToDocument(this.addFragmentsToDocument(document));\n    };\n    InMemoryCache.prototype.fragmentMatches = function (fragment, typename) {\n        return this.policies.fragmentMatches(fragment, typename);\n    };\n    InMemoryCache.prototype.lookupFragment = function (fragmentName) {\n        var _a;\n        return ((_a = this.config.fragments) === null || _a === void 0 ? void 0 : _a.lookup(fragmentName)) || null;\n    };\n    InMemoryCache.prototype.broadcastWatches = function (options) {\n        var _this = this;\n        if (!this.txCount) {\n            this.watches.forEach(function (c) { return _this.maybeBroadcastWatch(c, options); });\n        }\n    };\n    InMemoryCache.prototype.addFragmentsToDocument = function (document) {\n        var fragments = this.config.fragments;\n        return fragments ? fragments.transform(document) : document;\n    };\n    InMemoryCache.prototype.addTypenameToDocument = function (document) {\n        if (this.addTypename) {\n            return this.addTypenameTransform.transformDocument(document);\n        }\n        return document;\n    };\n    // This method is wrapped by maybeBroadcastWatch, which is called by\n    // broadcastWatches, so that we compute and broadcast results only when\n    // the data that would be broadcast might have changed. It would be\n    // simpler to check for changes after recomputing a result but before\n    // broadcasting it, but this wrapping approach allows us to skip both\n    // the recomputation and the broadcast, in most cases.\n    InMemoryCache.prototype.broadcastWatch = function (c, options) {\n        var _this = this;\n        var lastDiff = c.lastDiff;\n        // Both WatchOptions and DiffOptions extend ReadOptions, and DiffOptions\n        // currently requires no additional properties, so we can use c (a\n        // WatchOptions object) as DiffOptions, without having to allocate a new\n        // object, and without having to enumerate the relevant properties (query,\n        // variables, etc.) explicitly. There will be some additional properties\n        // (lastDiff, callback, etc.), but cache.diff ignores them.\n        var diff = muteDeprecations(\"canonizeResults\", function () { return _this.diff(c); });\n        if (options) {\n            if (c.optimistic && typeof options.optimistic === \"string\") {\n                diff.fromOptimisticTransaction = true;\n            }\n            if (options.onWatchUpdated &&\n                options.onWatchUpdated.call(this, c, diff, lastDiff) === false) {\n                // Returning false from the onWatchUpdated callback will prevent\n                // calling c.callback(diff) for this watcher.\n                return;\n            }\n        }\n        if (!lastDiff || !equal(lastDiff.result, diff.result)) {\n            c.callback((c.lastDiff = diff), lastDiff);\n        }\n    };\n    return InMemoryCache;\n}(ApolloCache));\nexport { InMemoryCache };\nif (globalThis.__DEV__ !== false) {\n    InMemoryCache.prototype.getMemoryInternals = getInMemoryCacheMemoryInternals;\n}\n//# sourceMappingURL=inMemoryCache.js.map","/**\n * The current status of a query’s execution in our system.\n */\nexport var NetworkStatus;\n(function (NetworkStatus) {\n    /**\n     * The query has never been run before and the query is now currently running. A query will still\n     * have this network status even if a partial data result was returned from the cache, but a\n     * query was dispatched anyway.\n     */\n    NetworkStatus[NetworkStatus[\"loading\"] = 1] = \"loading\";\n    /**\n     * If `setVariables` was called and a query was fired because of that then the network status\n     * will be `setVariables` until the result of that query comes back.\n     */\n    NetworkStatus[NetworkStatus[\"setVariables\"] = 2] = \"setVariables\";\n    /**\n     * Indicates that `fetchMore` was called on this query and that the query created is currently in\n     * flight.\n     */\n    NetworkStatus[NetworkStatus[\"fetchMore\"] = 3] = \"fetchMore\";\n    /**\n     * Similar to the `setVariables` network status. It means that `refetch` was called on a query\n     * and the refetch request is currently in flight.\n     */\n    NetworkStatus[NetworkStatus[\"refetch\"] = 4] = \"refetch\";\n    /**\n     * Indicates that a polling query is currently in flight. So for example if you are polling a\n     * query every 10 seconds then the network status will switch to `poll` every 10 seconds whenever\n     * a poll request has been sent but not resolved.\n     */\n    NetworkStatus[NetworkStatus[\"poll\"] = 6] = \"poll\";\n    /**\n     * No request is in flight for this query, and no errors happened. Everything is OK.\n     */\n    NetworkStatus[NetworkStatus[\"ready\"] = 7] = \"ready\";\n    /**\n     * No request is in flight for this query, but one or more errors were detected.\n     */\n    NetworkStatus[NetworkStatus[\"error\"] = 8] = \"error\";\n})(NetworkStatus || (NetworkStatus = {}));\n/**\n * Returns true if there is currently a network request in flight according to a given network\n * status.\n */\nexport function isNetworkRequestInFlight(networkStatus) {\n    return networkStatus ? networkStatus < 7 : false;\n}\n/**\n * Returns true if the network request is in ready or error state according to a given network\n * status.\n */\nexport function isNetworkRequestSettled(networkStatus) {\n    return networkStatus === 7 || networkStatus === 8;\n}\n//# sourceMappingURL=networkStatus.js.map","import { __assign, __extends } from \"tslib\";\nimport { invariant } from \"../utilities/globals/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { NetworkStatus, isNetworkRequestInFlight } from \"./networkStatus.js\";\nimport { cloneDeep, compact, getOperationDefinition, Observable, iterateObserversSafely, fixObservableSubclass, getQueryDefinition, preventUnhandledRejection, } from \"../utilities/index.js\";\nimport { ApolloError, isApolloError } from \"../errors/index.js\";\nimport { equalByQuery } from \"./equalByQuery.js\";\nimport { Slot } from \"optimism\";\nimport { muteDeprecations, warnDeprecated, warnRemovedOption, } from \"../utilities/index.js\";\nvar assign = Object.assign, hasOwnProperty = Object.hasOwnProperty;\nvar ObservableQuery = /** @class */ (function (_super) {\n    __extends(ObservableQuery, _super);\n    function ObservableQuery(_a) {\n        var queryManager = _a.queryManager, queryInfo = _a.queryInfo, options = _a.options;\n        var _this = this;\n        var startedInactive = ObservableQuery.inactiveOnCreation.getValue();\n        _this = _super.call(this, function (observer) {\n            _this._getOrCreateQuery();\n            // Zen Observable has its own error function, so in order to log correctly\n            // we need to provide a custom error callback.\n            try {\n                var subObserver = observer._subscription._observer;\n                if (subObserver && !subObserver.error) {\n                    subObserver.error = defaultSubscriptionObserverErrorCallback;\n                }\n            }\n            catch (_a) { }\n            var first = !_this.observers.size;\n            _this.observers.add(observer);\n            // Deliver most recent error or result.\n            var last = _this.last;\n            if (last && last.error) {\n                observer.error && observer.error(last.error);\n            }\n            else if (last && last.result) {\n                observer.next && observer.next(_this.maskResult(last.result));\n            }\n            // Initiate observation of this query if it hasn't been reported to\n            // the QueryManager yet.\n            if (first) {\n                // Blindly catching here prevents unhandled promise rejections,\n                // and is safe because the ObservableQuery handles this error with\n                // this.observer.error, so we're not just swallowing the error by\n                // ignoring it here.\n                _this.reobserve().catch(function () { });\n            }\n            return function () {\n                if (_this.observers.delete(observer) && !_this.observers.size) {\n                    _this.tearDownQuery();\n                }\n            };\n        }) || this;\n        _this.observers = new Set();\n        _this.subscriptions = new Set();\n        _this.dirty = false;\n        _this._getOrCreateQuery = function () {\n            if (startedInactive) {\n                queryManager[\"queries\"].set(_this.queryId, queryInfo);\n                startedInactive = false;\n            }\n            return _this.queryManager.getOrCreateQuery(_this.queryId);\n        };\n        // related classes\n        _this.queryInfo = queryInfo;\n        _this.queryManager = queryManager;\n        // active state\n        _this.waitForOwnResult = skipCacheDataFor(options.fetchPolicy);\n        _this.isTornDown = false;\n        _this.subscribeToMore = _this.subscribeToMore.bind(_this);\n        _this.maskResult = _this.maskResult.bind(_this);\n        var _b = queryManager.defaultOptions.watchQuery, _c = _b === void 0 ? {} : _b, _d = _c.fetchPolicy, defaultFetchPolicy = _d === void 0 ? \"cache-first\" : _d;\n        var _e = options.fetchPolicy, fetchPolicy = _e === void 0 ? defaultFetchPolicy : _e, \n        // Make sure we don't store \"standby\" as the initialFetchPolicy.\n        _f = options.initialFetchPolicy, \n        // Make sure we don't store \"standby\" as the initialFetchPolicy.\n        initialFetchPolicy = _f === void 0 ? fetchPolicy === \"standby\" ? defaultFetchPolicy : (fetchPolicy) : _f;\n        _this.options = __assign(__assign({}, options), { \n            // Remember the initial options.fetchPolicy so we can revert back to this\n            // policy when variables change. This information can also be specified\n            // (or overridden) by providing options.initialFetchPolicy explicitly.\n            initialFetchPolicy: initialFetchPolicy, \n            // This ensures this.options.fetchPolicy always has a string value, in\n            // case options.fetchPolicy was not provided.\n            fetchPolicy: fetchPolicy });\n        _this.queryId = queryInfo.queryId || queryManager.generateQueryId();\n        var opDef = getOperationDefinition(_this.query);\n        _this.queryName = opDef && opDef.name && opDef.name.value;\n        return _this;\n    }\n    Object.defineProperty(ObservableQuery.prototype, \"query\", {\n        // The `query` computed property will always reflect the document transformed\n        // by the last run query. `this.options.query` will always reflect the raw\n        // untransformed query to ensure document transforms with runtime conditionals\n        // are run on the original document.\n        get: function () {\n            return this.lastQuery || this.options.query;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ObservableQuery.prototype, \"variables\", {\n        // Computed shorthand for this.options.variables, preserved for\n        // backwards compatibility.\n        /**\n         * An object containing the variables that were provided for the query.\n         */\n        get: function () {\n            return this.options.variables;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * @deprecated `result` will be removed in Apollo Client 4.0.\n     *\n     * **Recommended now**\n     *\n     * If you continue to need this functionality, subscribe to `ObservableQuery`\n     * to get the first value emitted from the observable, then immediately unsubscribe.\n     *\n     * **When upgrading**\n     *\n     * Use RxJS's [`firstResultFrom`](https://rxjs.dev/api/index/function/firstValueFrom) function to mimic this functionality.\n     *\n     * ```ts\n     * const result = await firstValueFrom(from(observableQuery));\n     * ```\n     */\n    ObservableQuery.prototype.result = function () {\n        var _this = this;\n        if (globalThis.__DEV__ !== false) {\n            warnDeprecated(\"observableQuery.result\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(23);\n            });\n        }\n        return new Promise(function (resolve, reject) {\n            // TODO: this code doesn’t actually make sense insofar as the observer\n            // will never exist in this.observers due how zen-observable wraps observables.\n            // https://github.com/zenparsing/zen-observable/blob/master/src/Observable.js#L169\n            var observer = {\n                next: function (result) {\n                    resolve(result);\n                    // Stop the query within the QueryManager if we can before\n                    // this function returns.\n                    //\n                    // We do this in order to prevent observers piling up within\n                    // the QueryManager. Notice that we only fully unsubscribe\n                    // from the subscription in a setTimeout(..., 0)  call. This call can\n                    // actually be handled by the browser at a much later time. If queries\n                    // are fired in the meantime, observers that should have been removed\n                    // from the QueryManager will continue to fire, causing an unnecessary\n                    // performance hit.\n                    _this.observers.delete(observer);\n                    if (!_this.observers.size) {\n                        _this.queryManager.removeQuery(_this.queryId);\n                    }\n                    setTimeout(function () {\n                        subscription.unsubscribe();\n                    }, 0);\n                },\n                error: reject,\n            };\n            var subscription = _this.subscribe(observer);\n        });\n    };\n    /** @internal */\n    ObservableQuery.prototype.resetDiff = function () {\n        this.queryInfo.resetDiff();\n    };\n    ObservableQuery.prototype.getCurrentFullResult = function (saveAsLastResult) {\n        var _this = this;\n        if (saveAsLastResult === void 0) { saveAsLastResult = true; }\n        // Use the last result as long as the variables match this.variables.\n        var lastResult = muteDeprecations(\"getLastResult\", function () {\n            return _this.getLastResult(true);\n        });\n        var networkStatus = this.queryInfo.networkStatus ||\n            (lastResult && lastResult.networkStatus) ||\n            NetworkStatus.ready;\n        var result = __assign(__assign({}, lastResult), { loading: isNetworkRequestInFlight(networkStatus), networkStatus: networkStatus });\n        var _a = this.options.fetchPolicy, fetchPolicy = _a === void 0 ? \"cache-first\" : _a;\n        if (\n        // These fetch policies should never deliver data from the cache, unless\n        // redelivering a previously delivered result.\n        skipCacheDataFor(fetchPolicy) ||\n            // If this.options.query has @client(always: true) fields, we cannot\n            // trust diff.result, since it was read from the cache without running\n            // local resolvers (and it's too late to run resolvers now, since we must\n            // return a result synchronously).\n            this.queryManager.getDocumentInfo(this.query).hasForcedResolvers) {\n            // Fall through.\n        }\n        else if (this.waitForOwnResult) {\n            // This would usually be a part of `QueryInfo.getDiff()`.\n            // which we skip in the waitForOwnResult case since we are not\n            // interested in the diff.\n            this.queryInfo[\"updateWatch\"]();\n        }\n        else {\n            var diff = this.queryInfo.getDiff();\n            if (diff.complete || this.options.returnPartialData) {\n                result.data = diff.result;\n            }\n            if (equal(result.data, {})) {\n                result.data = void 0;\n            }\n            if (diff.complete) {\n                // Similar to setting result.partial to false, but taking advantage of the\n                // falsiness of missing fields.\n                delete result.partial;\n                // If the diff is complete, and we're using a FetchPolicy that\n                // terminates after a complete cache read, we can assume the next result\n                // we receive will have NetworkStatus.ready and !loading.\n                if (diff.complete &&\n                    result.networkStatus === NetworkStatus.loading &&\n                    (fetchPolicy === \"cache-first\" || fetchPolicy === \"cache-only\")) {\n                    result.networkStatus = NetworkStatus.ready;\n                    result.loading = false;\n                }\n            }\n            else {\n                result.partial = true;\n            }\n            // We need to check for both both `error` and `errors` field because there\n            // are cases where sometimes `error` is set, but not `errors` and\n            // vice-versa. This will be updated in the next major version when\n            // `errors` is deprecated in favor of `error`.\n            if (result.networkStatus === NetworkStatus.ready &&\n                (result.error || result.errors)) {\n                result.networkStatus = NetworkStatus.error;\n            }\n            if (globalThis.__DEV__ !== false &&\n                !diff.complete &&\n                !this.options.partialRefetch &&\n                !result.loading &&\n                !result.data &&\n                !result.error) {\n                logMissingFieldErrors(diff.missing);\n            }\n        }\n        if (saveAsLastResult) {\n            this.updateLastResult(result);\n        }\n        return result;\n    };\n    ObservableQuery.prototype.getCurrentResult = function (saveAsLastResult) {\n        if (saveAsLastResult === void 0) { saveAsLastResult = true; }\n        return this.maskResult(this.getCurrentFullResult(saveAsLastResult));\n    };\n    // Compares newResult to the snapshot we took of this.lastResult when it was\n    // first received.\n    ObservableQuery.prototype.isDifferentFromLastResult = function (newResult, variables) {\n        if (!this.last) {\n            return true;\n        }\n        var documentInfo = this.queryManager.getDocumentInfo(this.query);\n        var dataMasking = this.queryManager.dataMasking;\n        var query = dataMasking ? documentInfo.nonReactiveQuery : this.query;\n        var resultIsDifferent = dataMasking || documentInfo.hasNonreactiveDirective ?\n            !equalByQuery(query, this.last.result, newResult, this.variables)\n            : !equal(this.last.result, newResult);\n        return (resultIsDifferent || (variables && !equal(this.last.variables, variables)));\n    };\n    ObservableQuery.prototype.getLast = function (key, variablesMustMatch) {\n        var last = this.last;\n        if (last &&\n            last[key] &&\n            (!variablesMustMatch || equal(last.variables, this.variables))) {\n            return last[key];\n        }\n    };\n    /**\n     * @deprecated `getLastResult` will be removed in Apollo Client 4.0. Please\n     * discontinue using this method.\n     */\n    ObservableQuery.prototype.getLastResult = function (variablesMustMatch) {\n        if (globalThis.__DEV__ !== false) {\n            warnDeprecated(\"getLastResult\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(24);\n            });\n        }\n        return this.getLast(\"result\", variablesMustMatch);\n    };\n    /**\n     * @deprecated `getLastError` will be removed in Apollo Client 4.0. Please\n     * discontinue using this method.\n     */\n    ObservableQuery.prototype.getLastError = function (variablesMustMatch) {\n        if (globalThis.__DEV__ !== false) {\n            warnDeprecated(\"getLastError\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(25);\n            });\n        }\n        return this.getLast(\"error\", variablesMustMatch);\n    };\n    /**\n     * @deprecated `resetLastResults` will be removed in Apollo Client 4.0. Please\n     * discontinue using this method.\n     */\n    ObservableQuery.prototype.resetLastResults = function () {\n        if (globalThis.__DEV__ !== false) {\n            warnDeprecated(\"resetLastResults\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(26);\n            });\n        }\n        delete this.last;\n        this.isTornDown = false;\n    };\n    /**\n     * @deprecated `resetQueryStoreErrors` will be removed in Apollo Client 4.0.\n     * Please discontinue using this method.\n     */\n    ObservableQuery.prototype.resetQueryStoreErrors = function () {\n        if (globalThis.__DEV__ !== false) {\n            globalThis.__DEV__ !== false && invariant.warn(27);\n        }\n        this.queryManager.resetErrors(this.queryId);\n    };\n    /**\n     * Update the variables of this observable query, and fetch the new results.\n     * This method should be preferred over `setVariables` in most use cases.\n     *\n     * @param variables - The new set of variables. If there are missing variables,\n     * the previous values of those variables will be used.\n     */\n    ObservableQuery.prototype.refetch = function (variables) {\n        var _a;\n        var reobserveOptions = {\n            // Always disable polling for refetches.\n            pollInterval: 0,\n        };\n        // Unless the provided fetchPolicy always consults the network\n        // (no-cache, network-only, or cache-and-network), override it with\n        // network-only to force the refetch for this fetchQuery call.\n        var fetchPolicy = this.options.fetchPolicy;\n        if (fetchPolicy === \"no-cache\") {\n            reobserveOptions.fetchPolicy = \"no-cache\";\n        }\n        else {\n            reobserveOptions.fetchPolicy = \"network-only\";\n        }\n        if (globalThis.__DEV__ !== false && variables && hasOwnProperty.call(variables, \"variables\")) {\n            var queryDef = getQueryDefinition(this.query);\n            var vars = queryDef.variableDefinitions;\n            if (!vars || !vars.some(function (v) { return v.variable.name.value === \"variables\"; })) {\n                globalThis.__DEV__ !== false && invariant.warn(\n                    28,\n                    variables,\n                    ((_a = queryDef.name) === null || _a === void 0 ? void 0 : _a.value) || queryDef\n                );\n            }\n        }\n        if (variables && !equal(this.options.variables, variables)) {\n            // Update the existing options with new variables\n            reobserveOptions.variables = this.options.variables = __assign(__assign({}, this.options.variables), variables);\n        }\n        this.queryInfo.resetLastWrite();\n        return this.reobserve(reobserveOptions, NetworkStatus.refetch);\n    };\n    /**\n     * A function that helps you fetch the next set of results for a [paginated list field](https://www.apollographql.com/docs/react/pagination/core-api/).\n     */\n    ObservableQuery.prototype.fetchMore = function (fetchMoreOptions) {\n        var _this = this;\n        var combinedOptions = __assign(__assign({}, (fetchMoreOptions.query ? fetchMoreOptions : (__assign(__assign(__assign(__assign({}, this.options), { query: this.options.query }), fetchMoreOptions), { variables: __assign(__assign({}, this.options.variables), fetchMoreOptions.variables) })))), { \n            // The fetchMore request goes immediately to the network and does\n            // not automatically write its result to the cache (hence no-cache\n            // instead of network-only), because we allow the caller of\n            // fetchMore to provide an updateQuery callback that determines how\n            // the data gets written to the cache.\n            fetchPolicy: \"no-cache\" });\n        combinedOptions.query = this.transformDocument(combinedOptions.query);\n        var qid = this.queryManager.generateQueryId();\n        // If a temporary query is passed to `fetchMore`, we don't want to store\n        // it as the last query result since it may be an optimized query for\n        // pagination. We will however run the transforms on the original document\n        // as well as the document passed in `fetchMoreOptions` to ensure the cache\n        // uses the most up-to-date document which may rely on runtime conditionals.\n        this.lastQuery =\n            fetchMoreOptions.query ?\n                this.transformDocument(this.options.query)\n                : combinedOptions.query;\n        // Simulate a loading result for the original query with\n        // result.networkStatus === NetworkStatus.fetchMore.\n        var queryInfo = this.queryInfo;\n        var originalNetworkStatus = queryInfo.networkStatus;\n        queryInfo.networkStatus = NetworkStatus.fetchMore;\n        if (combinedOptions.notifyOnNetworkStatusChange) {\n            this.observe();\n        }\n        var updatedQuerySet = new Set();\n        var updateQuery = fetchMoreOptions === null || fetchMoreOptions === void 0 ? void 0 : fetchMoreOptions.updateQuery;\n        var isCached = this.options.fetchPolicy !== \"no-cache\";\n        if (!isCached) {\n            invariant(updateQuery, 29);\n        }\n        return this.queryManager\n            .fetchQuery(qid, combinedOptions, NetworkStatus.fetchMore)\n            .then(function (fetchMoreResult) {\n            _this.queryManager.removeQuery(qid);\n            if (queryInfo.networkStatus === NetworkStatus.fetchMore) {\n                queryInfo.networkStatus = originalNetworkStatus;\n            }\n            if (isCached) {\n                // Performing this cache update inside a cache.batch transaction ensures\n                // any affected cache.watch watchers are notified at most once about any\n                // updates. Most watchers will be using the QueryInfo class, which\n                // responds to notifications by calling reobserveCacheFirst to deliver\n                // fetchMore cache results back to this ObservableQuery.\n                _this.queryManager.cache.batch({\n                    update: function (cache) {\n                        var updateQuery = fetchMoreOptions.updateQuery;\n                        if (updateQuery) {\n                            cache.updateQuery({\n                                query: _this.query,\n                                variables: _this.variables,\n                                returnPartialData: true,\n                                optimistic: false,\n                            }, function (previous) {\n                                return updateQuery(previous, {\n                                    fetchMoreResult: fetchMoreResult.data,\n                                    variables: combinedOptions.variables,\n                                });\n                            });\n                        }\n                        else {\n                            // If we're using a field policy instead of updateQuery, the only\n                            // thing we need to do is write the new data to the cache using\n                            // combinedOptions.variables (instead of this.variables, which is\n                            // what this.updateQuery uses, because it works by abusing the\n                            // original field value, keyed by the original variables).\n                            cache.writeQuery({\n                                query: combinedOptions.query,\n                                variables: combinedOptions.variables,\n                                data: fetchMoreResult.data,\n                            });\n                        }\n                    },\n                    onWatchUpdated: function (watch) {\n                        // Record the DocumentNode associated with any watched query whose\n                        // data were updated by the cache writes above.\n                        updatedQuerySet.add(watch.query);\n                    },\n                });\n            }\n            else {\n                // There is a possibility `lastResult` may not be set when\n                // `fetchMore` is called which would cause this to crash. This should\n                // only happen if we haven't previously reported a result. We don't\n                // quite know what the right behavior should be here since this block\n                // of code runs after the fetch result has executed on the network.\n                // We plan to let it crash in the meantime.\n                //\n                // If we get bug reports due to the `data` property access on\n                // undefined, this should give us a real-world scenario that we can\n                // use to test against and determine the right behavior. If we do end\n                // up changing this behavior, this may require, for example, an\n                // adjustment to the types on `updateQuery` since that function\n                // expects that the first argument always contains previous result\n                // data, but not `undefined`.\n                var lastResult = _this.getLast(\"result\");\n                var data = updateQuery(lastResult.data, {\n                    fetchMoreResult: fetchMoreResult.data,\n                    variables: combinedOptions.variables,\n                });\n                _this.reportResult(__assign(__assign({}, lastResult), { networkStatus: originalNetworkStatus, loading: isNetworkRequestInFlight(originalNetworkStatus), data: data }), _this.variables);\n            }\n            return _this.maskResult(fetchMoreResult);\n        })\n            .finally(function () {\n            // In case the cache writes above did not generate a broadcast\n            // notification (which would have been intercepted by onWatchUpdated),\n            // likely because the written data were the same as what was already in\n            // the cache, we still want fetchMore to deliver its final loading:false\n            // result with the unchanged data.\n            if (isCached && !updatedQuerySet.has(_this.query)) {\n                _this.reobserveCacheFirst();\n            }\n        });\n    };\n    // XXX the subscription variables are separate from the query variables.\n    // if you want to update subscription variables, right now you have to do that separately,\n    // and you can only do it by stopping the subscription and then subscribing again with new variables.\n    /**\n     * A function that enables you to execute a [subscription](https://www.apollographql.com/docs/react/data/subscriptions/), usually to subscribe to specific fields that were included in the query.\n     *\n     * This function returns _another_ function that you can call to terminate the subscription.\n     */\n    ObservableQuery.prototype.subscribeToMore = function (options) {\n        var _this = this;\n        var subscription = this.queryManager\n            .startGraphQLSubscription({\n            query: options.document,\n            variables: options.variables,\n            context: options.context,\n        })\n            .subscribe({\n            next: function (subscriptionData) {\n                var updateQuery = options.updateQuery;\n                if (updateQuery) {\n                    _this.updateQuery(function (previous, updateOptions) {\n                        return updateQuery(previous, __assign({ subscriptionData: subscriptionData }, updateOptions));\n                    });\n                }\n            },\n            error: function (err) {\n                if (options.onError) {\n                    options.onError(err);\n                    return;\n                }\n                globalThis.__DEV__ !== false && invariant.error(30, err);\n            },\n        });\n        this.subscriptions.add(subscription);\n        return function () {\n            if (_this.subscriptions.delete(subscription)) {\n                subscription.unsubscribe();\n            }\n        };\n    };\n    /**\n     * @deprecated `setOptions` will be removed in Apollo Client 4.0. Please use\n     * `observableQuery.reobserve(newOptions)` instead.\n     */\n    ObservableQuery.prototype.setOptions = function (newOptions) {\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(newOptions, \"canonizeResults\", \"setOptions\");\n            warnDeprecated(\"setOptions\", function () {\n                globalThis.__DEV__ !== false && invariant.warn(31);\n            });\n        }\n        return this.reobserve(newOptions);\n    };\n    ObservableQuery.prototype.silentSetOptions = function (newOptions) {\n        var mergedOptions = compact(this.options, newOptions || {});\n        assign(this.options, mergedOptions);\n    };\n    /**\n     * Update the variables of this observable query, and fetch the new results\n     * if they've changed. Most users should prefer `refetch` instead of\n     * `setVariables` in order to to be properly notified of results even when\n     * they come from the cache.\n     *\n     * Note: the `next` callback will *not* fire if the variables have not changed\n     * or if the result is coming from cache.\n     *\n     * Note: the promise will return the old results immediately if the variables\n     * have not changed.\n     *\n     * Note: the promise will return null immediately if the query is not active\n     * (there are no subscribers).\n     *\n     * @param variables - The new set of variables. If there are missing variables,\n     * the previous values of those variables will be used.\n     */\n    ObservableQuery.prototype.setVariables = function (variables) {\n        var _this = this;\n        if (equal(this.variables, variables)) {\n            // If we have no observers, then we don't actually want to make a network\n            // request. As soon as someone observes the query, the request will kick\n            // off. For now, we just store any changes. (See #1077)\n            return this.observers.size ?\n                muteDeprecations(\"observableQuery.result\", function () { return _this.result(); })\n                : Promise.resolve();\n        }\n        this.options.variables = variables;\n        // See comment above\n        if (!this.observers.size) {\n            return Promise.resolve();\n        }\n        return this.reobserve({\n            // Reset options.fetchPolicy to its original value.\n            fetchPolicy: this.options.initialFetchPolicy,\n            variables: variables,\n        }, NetworkStatus.setVariables);\n    };\n    /**\n     * A function that enables you to update the query's cached result without executing a followup GraphQL operation.\n     *\n     * See [using updateQuery and updateFragment](https://www.apollographql.com/docs/react/caching/cache-interaction/#using-updatequery-and-updatefragment) for additional information.\n     */\n    ObservableQuery.prototype.updateQuery = function (mapFn) {\n        var queryManager = this.queryManager;\n        var _a = queryManager.cache.diff({\n            query: this.options.query,\n            variables: this.variables,\n            returnPartialData: true,\n            optimistic: false,\n        }), result = _a.result, complete = _a.complete;\n        var newResult = mapFn(result, {\n            variables: this.variables,\n            complete: !!complete,\n            previousData: result,\n        });\n        if (newResult) {\n            queryManager.cache.writeQuery({\n                query: this.options.query,\n                data: newResult,\n                variables: this.variables,\n            });\n            queryManager.broadcastQueries();\n        }\n    };\n    /**\n     * A function that instructs the query to begin re-executing at a specified interval (in milliseconds).\n     */\n    ObservableQuery.prototype.startPolling = function (pollInterval) {\n        this.options.pollInterval = pollInterval;\n        this.updatePolling();\n    };\n    /**\n     * A function that instructs the query to stop polling after a previous call to `startPolling`.\n     */\n    ObservableQuery.prototype.stopPolling = function () {\n        this.options.pollInterval = 0;\n        this.updatePolling();\n    };\n    // Update options.fetchPolicy according to options.nextFetchPolicy.\n    ObservableQuery.prototype.applyNextFetchPolicy = function (reason, \n    // It's possible to use this method to apply options.nextFetchPolicy to\n    // options.fetchPolicy even if options !== this.options, though that happens\n    // most often when the options are temporary, used for only one request and\n    // then thrown away, so nextFetchPolicy may not end up mattering.\n    options) {\n        if (options.nextFetchPolicy) {\n            var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? \"cache-first\" : _a, _b = options.initialFetchPolicy, initialFetchPolicy = _b === void 0 ? fetchPolicy : _b;\n            if (fetchPolicy === \"standby\") {\n                // Do nothing, leaving options.fetchPolicy unchanged.\n            }\n            else if (typeof options.nextFetchPolicy === \"function\") {\n                // When someone chooses \"cache-and-network\" or \"network-only\" as their\n                // initial FetchPolicy, they often do not want future cache updates to\n                // trigger unconditional network requests, which is what repeatedly\n                // applying the \"cache-and-network\" or \"network-only\" policies would\n                // seem to imply. Instead, when the cache reports an update after the\n                // initial network request, it may be desirable for subsequent network\n                // requests to be triggered only if the cache result is incomplete. To\n                // that end, the options.nextFetchPolicy option provides an easy way to\n                // update options.fetchPolicy after the initial network request, without\n                // having to call observableQuery.setOptions.\n                options.fetchPolicy = options.nextFetchPolicy(fetchPolicy, {\n                    reason: reason,\n                    options: options,\n                    observable: this,\n                    initialFetchPolicy: initialFetchPolicy,\n                });\n            }\n            else if (reason === \"variables-changed\") {\n                options.fetchPolicy = initialFetchPolicy;\n            }\n            else {\n                options.fetchPolicy = options.nextFetchPolicy;\n            }\n        }\n        return options.fetchPolicy;\n    };\n    ObservableQuery.prototype.fetch = function (options, newNetworkStatus, query) {\n        // TODO Make sure we update the networkStatus (and infer fetchVariables)\n        // before actually committing to the fetch.\n        var queryInfo = this._getOrCreateQuery();\n        queryInfo.setObservableQuery(this);\n        return this.queryManager[\"fetchConcastWithInfo\"](queryInfo, options, newNetworkStatus, query);\n    };\n    // Turns polling on or off based on this.options.pollInterval.\n    ObservableQuery.prototype.updatePolling = function () {\n        var _this = this;\n        // Avoid polling in SSR mode\n        if (this.queryManager.ssrMode) {\n            return;\n        }\n        var _a = this, pollingInfo = _a.pollingInfo, pollInterval = _a.options.pollInterval;\n        if (!pollInterval || !this.hasObservers()) {\n            if (pollingInfo) {\n                clearTimeout(pollingInfo.timeout);\n                delete this.pollingInfo;\n            }\n            return;\n        }\n        if (pollingInfo && pollingInfo.interval === pollInterval) {\n            return;\n        }\n        invariant(pollInterval, 32);\n        var info = pollingInfo || (this.pollingInfo = {});\n        info.interval = pollInterval;\n        var maybeFetch = function () {\n            var _a, _b;\n            if (_this.pollingInfo) {\n                if (!isNetworkRequestInFlight(_this.queryInfo.networkStatus) &&\n                    !((_b = (_a = _this.options).skipPollAttempt) === null || _b === void 0 ? void 0 : _b.call(_a))) {\n                    _this.reobserve({\n                        // Most fetchPolicy options don't make sense to use in a polling context, as\n                        // users wouldn't want to be polling the cache directly. However, network-only and\n                        // no-cache are both useful for when the user wants to control whether or not the\n                        // polled results are written to the cache.\n                        fetchPolicy: _this.options.initialFetchPolicy === \"no-cache\" ?\n                            \"no-cache\"\n                            : \"network-only\",\n                    }, NetworkStatus.poll).then(poll, poll);\n                }\n                else {\n                    poll();\n                }\n            }\n        };\n        var poll = function () {\n            var info = _this.pollingInfo;\n            if (info) {\n                clearTimeout(info.timeout);\n                info.timeout = setTimeout(maybeFetch, info.interval);\n            }\n        };\n        poll();\n    };\n    ObservableQuery.prototype.updateLastResult = function (newResult, variables) {\n        var _this = this;\n        if (variables === void 0) { variables = this.variables; }\n        var error = muteDeprecations(\"getLastError\", function () {\n            return _this.getLastError();\n        });\n        // Preserve this.last.error unless the variables have changed.\n        if (error && this.last && !equal(variables, this.last.variables)) {\n            error = void 0;\n        }\n        return (this.last = __assign({ result: this.queryManager.assumeImmutableResults ?\n                newResult\n                : cloneDeep(newResult), variables: variables }, (error ? { error: error } : null)));\n    };\n    ObservableQuery.prototype.reobserveAsConcast = function (newOptions, newNetworkStatus) {\n        var _this = this;\n        this.isTornDown = false;\n        var useDisposableConcast = \n        // Refetching uses a disposable Concast to allow refetches using different\n        // options/variables, without permanently altering the options of the\n        // original ObservableQuery.\n        newNetworkStatus === NetworkStatus.refetch ||\n            // The fetchMore method does not actually call the reobserve method, but,\n            // if it did, it would definitely use a disposable Concast.\n            newNetworkStatus === NetworkStatus.fetchMore ||\n            // Polling uses a disposable Concast so the polling options (which force\n            // fetchPolicy to be \"network-only\" or \"no-cache\") won't override the original options.\n            newNetworkStatus === NetworkStatus.poll;\n        // Save the old variables, since Object.assign may modify them below.\n        var oldVariables = this.options.variables;\n        var oldFetchPolicy = this.options.fetchPolicy;\n        var mergedOptions = compact(this.options, newOptions || {});\n        var options = useDisposableConcast ?\n            // Disposable Concast fetches receive a shallow copy of this.options\n            // (merged with newOptions), leaving this.options unmodified.\n            mergedOptions\n            : assign(this.options, mergedOptions);\n        // Don't update options.query with the transformed query to avoid\n        // overwriting this.options.query when we aren't using a disposable concast.\n        // We want to ensure we can re-run the custom document transforms the next\n        // time a request is made against the original query.\n        var query = this.transformDocument(options.query);\n        this.lastQuery = query;\n        if (!useDisposableConcast) {\n            // We can skip calling updatePolling if we're not changing this.options.\n            this.updatePolling();\n            // Reset options.fetchPolicy to its original value when variables change,\n            // unless a new fetchPolicy was provided by newOptions.\n            if (newOptions &&\n                newOptions.variables &&\n                !equal(newOptions.variables, oldVariables) &&\n                // Don't mess with the fetchPolicy if it's currently \"standby\".\n                options.fetchPolicy !== \"standby\" &&\n                // If we're changing the fetchPolicy anyway, don't try to change it here\n                // using applyNextFetchPolicy. The explicit options.fetchPolicy wins.\n                (options.fetchPolicy === oldFetchPolicy ||\n                    // A `nextFetchPolicy` function has even higher priority, though,\n                    // so in that case `applyNextFetchPolicy` must be called.\n                    typeof options.nextFetchPolicy === \"function\")) {\n                this.applyNextFetchPolicy(\"variables-changed\", options);\n                if (newNetworkStatus === void 0) {\n                    newNetworkStatus = NetworkStatus.setVariables;\n                }\n            }\n        }\n        this.waitForOwnResult && (this.waitForOwnResult = skipCacheDataFor(options.fetchPolicy));\n        var finishWaitingForOwnResult = function () {\n            if (_this.concast === concast) {\n                _this.waitForOwnResult = false;\n            }\n        };\n        var variables = options.variables && __assign({}, options.variables);\n        var _a = this.fetch(options, newNetworkStatus, query), concast = _a.concast, fromLink = _a.fromLink;\n        var observer = {\n            next: function (result) {\n                if (equal(_this.variables, variables)) {\n                    finishWaitingForOwnResult();\n                    _this.reportResult(result, variables);\n                }\n            },\n            error: function (error) {\n                if (equal(_this.variables, variables)) {\n                    // Coming from `getResultsFromLink`, `error` here should always be an `ApolloError`.\n                    // However, calling `concast.cancel` can inject another type of error, so we have to\n                    // wrap it again here.\n                    if (!isApolloError(error)) {\n                        error = new ApolloError({ networkError: error });\n                    }\n                    finishWaitingForOwnResult();\n                    _this.reportError(error, variables);\n                }\n            },\n        };\n        if (!useDisposableConcast && (fromLink || !this.concast)) {\n            // We use the {add,remove}Observer methods directly to avoid wrapping\n            // observer with an unnecessary SubscriptionObserver object.\n            if (this.concast && this.observer) {\n                this.concast.removeObserver(this.observer);\n            }\n            this.concast = concast;\n            this.observer = observer;\n        }\n        concast.addObserver(observer);\n        return concast;\n    };\n    ObservableQuery.prototype.reobserve = function (newOptions, newNetworkStatus) {\n        return preventUnhandledRejection(this.reobserveAsConcast(newOptions, newNetworkStatus).promise.then(this.maskResult));\n    };\n    ObservableQuery.prototype.resubscribeAfterError = function () {\n        var _this = this;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        // If `lastError` is set in the current when the subscription is re-created,\n        // the subscription will immediately receive the error, which will\n        // cause it to terminate again. To avoid this, we first clear\n        // the last error/result from the `observableQuery` before re-starting\n        // the subscription, and restore the last value afterwards so that the\n        // subscription has a chance to stay open.\n        var last = this.last;\n        muteDeprecations(\"resetLastResults\", function () { return _this.resetLastResults(); });\n        var subscription = this.subscribe.apply(this, args);\n        this.last = last;\n        return subscription;\n    };\n    // (Re)deliver the current result to this.observers without applying fetch\n    // policies or making network requests.\n    ObservableQuery.prototype.observe = function () {\n        this.reportResult(\n        // Passing false is important so that this.getCurrentResult doesn't\n        // save the fetchMore result as this.lastResult, causing it to be\n        // ignored due to the this.isDifferentFromLastResult check in\n        // this.reportResult.\n        this.getCurrentFullResult(false), this.variables);\n    };\n    ObservableQuery.prototype.reportResult = function (result, variables) {\n        var _this = this;\n        var lastError = muteDeprecations(\"getLastError\", function () {\n            return _this.getLastError();\n        });\n        var isDifferent = this.isDifferentFromLastResult(result, variables);\n        // Update the last result even when isDifferentFromLastResult returns false,\n        // because the query may be using the @nonreactive directive, and we want to\n        // save the the latest version of any nonreactive subtrees (in case\n        // getCurrentResult is called), even though we skip broadcasting changes.\n        if (lastError || !result.partial || this.options.returnPartialData) {\n            this.updateLastResult(result, variables);\n        }\n        if (lastError || isDifferent) {\n            iterateObserversSafely(this.observers, \"next\", this.maskResult(result));\n        }\n    };\n    ObservableQuery.prototype.reportError = function (error, variables) {\n        var _this = this;\n        // Since we don't get the current result on errors, only the error, we\n        // must mirror the updates that occur in QueryStore.markQueryError here\n        var errorResult = __assign(__assign({}, muteDeprecations(\"getLastResult\", function () { return _this.getLastResult(); })), { error: error, errors: error.graphQLErrors, networkStatus: NetworkStatus.error, loading: false });\n        this.updateLastResult(errorResult, variables);\n        iterateObserversSafely(this.observers, \"error\", (this.last.error = error));\n    };\n    ObservableQuery.prototype.hasObservers = function () {\n        return this.observers.size > 0;\n    };\n    ObservableQuery.prototype.tearDownQuery = function () {\n        if (this.isTornDown)\n            return;\n        if (this.concast && this.observer) {\n            this.concast.removeObserver(this.observer);\n            delete this.concast;\n            delete this.observer;\n        }\n        this.stopPolling();\n        // stop all active GraphQL subscriptions\n        this.subscriptions.forEach(function (sub) { return sub.unsubscribe(); });\n        this.subscriptions.clear();\n        this.queryManager.stopQuery(this.queryId);\n        this.observers.clear();\n        this.isTornDown = true;\n    };\n    ObservableQuery.prototype.transformDocument = function (document) {\n        return this.queryManager.transform(document);\n    };\n    ObservableQuery.prototype.maskResult = function (result) {\n        return result && \"data\" in result ? __assign(__assign({}, result), { data: this.queryManager.maskOperation({\n                document: this.query,\n                data: result.data,\n                fetchPolicy: this.options.fetchPolicy,\n                id: this.queryId,\n            }) }) : result;\n    };\n    /** @internal */\n    ObservableQuery.prototype.resetNotifications = function () {\n        this.cancelNotifyTimeout();\n        this.dirty = false;\n    };\n    ObservableQuery.prototype.cancelNotifyTimeout = function () {\n        if (this.notifyTimeout) {\n            clearTimeout(this.notifyTimeout);\n            this.notifyTimeout = void 0;\n        }\n    };\n    /** @internal */\n    ObservableQuery.prototype.scheduleNotify = function () {\n        var _this = this;\n        if (this.dirty)\n            return;\n        this.dirty = true;\n        if (!this.notifyTimeout) {\n            this.notifyTimeout = setTimeout(function () { return _this.notify(); }, 0);\n        }\n    };\n    /** @internal */\n    ObservableQuery.prototype.notify = function () {\n        this.cancelNotifyTimeout();\n        if (this.dirty) {\n            if (this.options.fetchPolicy == \"cache-only\" ||\n                this.options.fetchPolicy == \"cache-and-network\" ||\n                !isNetworkRequestInFlight(this.queryInfo.networkStatus)) {\n                var diff = this.queryInfo.getDiff();\n                if (diff.fromOptimisticTransaction) {\n                    // If this diff came from an optimistic transaction, deliver the\n                    // current cache data to the ObservableQuery, but don't perform a\n                    // reobservation, since oq.reobserveCacheFirst might make a network\n                    // request, and we never want to trigger network requests in the\n                    // middle of optimistic updates.\n                    this.observe();\n                }\n                else {\n                    // Otherwise, make the ObservableQuery \"reobserve\" the latest data\n                    // using a temporary fetch policy of \"cache-first\", so complete cache\n                    // results have a chance to be delivered without triggering additional\n                    // network requests, even when options.fetchPolicy is \"network-only\"\n                    // or \"cache-and-network\". All other fetch policies are preserved by\n                    // this method, and are handled by calling oq.reobserve(). If this\n                    // reobservation is spurious, isDifferentFromLastResult still has a\n                    // chance to catch it before delivery to ObservableQuery subscribers.\n                    this.reobserveCacheFirst();\n                }\n            }\n        }\n        this.dirty = false;\n    };\n    // Reobserve with fetchPolicy effectively set to \"cache-first\", triggering\n    // delivery of any new data from the cache, possibly falling back to the network\n    // if any cache data are missing. This allows _complete_ cache results to be\n    // delivered without also kicking off unnecessary network requests when\n    // this.options.fetchPolicy is \"cache-and-network\" or \"network-only\". When\n    // this.options.fetchPolicy is any other policy (\"cache-first\", \"cache-only\",\n    // \"standby\", or \"no-cache\"), we call this.reobserve() as usual.\n    ObservableQuery.prototype.reobserveCacheFirst = function () {\n        var _a = this.options, fetchPolicy = _a.fetchPolicy, nextFetchPolicy = _a.nextFetchPolicy;\n        if (fetchPolicy === \"cache-and-network\" || fetchPolicy === \"network-only\") {\n            return this.reobserve({\n                fetchPolicy: \"cache-first\",\n                // Use a temporary nextFetchPolicy function that replaces itself with the\n                // previous nextFetchPolicy value and returns the original fetchPolicy.\n                nextFetchPolicy: function (currentFetchPolicy, context) {\n                    // Replace this nextFetchPolicy function in the options object with the\n                    // original this.options.nextFetchPolicy value.\n                    this.nextFetchPolicy = nextFetchPolicy;\n                    // If the original nextFetchPolicy value was a function, give it a\n                    // chance to decide what happens here.\n                    if (typeof this.nextFetchPolicy === \"function\") {\n                        return this.nextFetchPolicy(currentFetchPolicy, context);\n                    }\n                    // Otherwise go back to the original this.options.fetchPolicy.\n                    return fetchPolicy;\n                },\n            });\n        }\n        return this.reobserve();\n    };\n    /**\n     * @internal\n     * A slot used by the `useQuery` hook to indicate that `client.watchQuery`\n     * should not register the query immediately, but instead wait for the query to\n     * be started registered with the `QueryManager` when `useSyncExternalStore`\n     * actively subscribes to it.\n     */\n    ObservableQuery.inactiveOnCreation = new Slot();\n    return ObservableQuery;\n}(Observable));\nexport { ObservableQuery };\n// Necessary because the ObservableQuery constructor has a different\n// signature than the Observable constructor.\nfixObservableSubclass(ObservableQuery);\nfunction defaultSubscriptionObserverErrorCallback(error) {\n    globalThis.__DEV__ !== false && invariant.error(33, error.message, error.stack);\n}\nexport function logMissingFieldErrors(missing) {\n    if (globalThis.__DEV__ !== false && missing) {\n        globalThis.__DEV__ !== false && invariant.debug(34, missing);\n    }\n}\nfunction skipCacheDataFor(fetchPolicy /* `undefined` would mean `\"cache-first\"` */) {\n    return (fetchPolicy === \"network-only\" ||\n        fetchPolicy === \"no-cache\" ||\n        fetchPolicy === \"standby\");\n}\n//# sourceMappingURL=ObservableQuery.js.map","import { __assign } from \"tslib\";\nimport { equal } from \"@wry/equality\";\nimport { DeepMerger } from \"../utilities/index.js\";\nimport { mergeIncrementalData } from \"../utilities/index.js\";\nimport { isNonEmptyArray, graphQLResultHasError, canUseWeakMap, } from \"../utilities/index.js\";\nimport { NetworkStatus } from \"./networkStatus.js\";\nimport { muteDeprecations } from \"../utilities/index.js\";\nvar destructiveMethodCounts = new (canUseWeakMap ? WeakMap : Map)();\nfunction wrapDestructiveCacheMethod(cache, methodName) {\n    var original = cache[methodName];\n    if (typeof original === \"function\") {\n        // @ts-expect-error this is just too generic to be typed correctly\n        cache[methodName] = function () {\n            destructiveMethodCounts.set(cache, \n            // The %1e15 allows the count to wrap around to 0 safely every\n            // quadrillion evictions, so there's no risk of overflow. To be\n            // clear, this is more of a pedantic principle than something\n            // that matters in any conceivable practical scenario.\n            (destructiveMethodCounts.get(cache) + 1) % 1e15);\n            // @ts-expect-error this is just too generic to be typed correctly\n            return original.apply(this, arguments);\n        };\n    }\n}\n// A QueryInfo object represents a single query managed by the\n// QueryManager, which tracks all QueryInfo objects by queryId in its\n// this.queries Map. QueryInfo objects store the latest results and errors\n// for the given query, and are responsible for reporting those results to\n// the corresponding ObservableQuery, via the QueryInfo.notify method.\n// Results are reported asynchronously whenever setDiff marks the\n// QueryInfo object as dirty, though a call to the QueryManager's\n// broadcastQueries method may trigger the notification before it happens\n// automatically. This class used to be a simple interface type without\n// any field privacy or meaningful methods, which is why it still has so\n// many public fields. The effort to lock down and simplify the QueryInfo\n// interface is ongoing, and further improvements are welcome.\nvar QueryInfo = /** @class */ (function () {\n    function QueryInfo(queryManager, queryId) {\n        if (queryId === void 0) { queryId = queryManager.generateQueryId(); }\n        this.queryId = queryId;\n        this.document = null;\n        this.lastRequestId = 1;\n        this.stopped = false;\n        this.observableQuery = null;\n        var cache = (this.cache = queryManager.cache);\n        // Track how often cache.evict is called, since we want eviction to\n        // override the feud-stopping logic in the markResult method, by\n        // causing shouldWrite to return true. Wrapping the cache.evict method\n        // is a bit of a hack, but it saves us from having to make eviction\n        // counting an official part of the ApolloCache API.\n        if (!destructiveMethodCounts.has(cache)) {\n            destructiveMethodCounts.set(cache, 0);\n            wrapDestructiveCacheMethod(cache, \"evict\");\n            wrapDestructiveCacheMethod(cache, \"modify\");\n            wrapDestructiveCacheMethod(cache, \"reset\");\n        }\n    }\n    QueryInfo.prototype.init = function (query) {\n        var networkStatus = query.networkStatus || NetworkStatus.loading;\n        if (this.variables &&\n            this.networkStatus !== NetworkStatus.loading &&\n            !equal(this.variables, query.variables)) {\n            networkStatus = NetworkStatus.setVariables;\n        }\n        if (!equal(query.variables, this.variables)) {\n            this.lastDiff = void 0;\n            // Ensure we don't continue to receive cache updates for old variables\n            this.cancel();\n        }\n        Object.assign(this, {\n            document: query.document,\n            variables: query.variables,\n            networkError: null,\n            graphQLErrors: this.graphQLErrors || [],\n            networkStatus: networkStatus,\n        });\n        if (query.observableQuery) {\n            this.setObservableQuery(query.observableQuery);\n        }\n        if (query.lastRequestId) {\n            this.lastRequestId = query.lastRequestId;\n        }\n        return this;\n    };\n    QueryInfo.prototype.resetDiff = function () {\n        this.lastDiff = void 0;\n    };\n    QueryInfo.prototype.getDiff = function () {\n        var _this = this;\n        var options = this.getDiffOptions();\n        if (this.lastDiff && equal(options, this.lastDiff.options)) {\n            return this.lastDiff.diff;\n        }\n        this.updateWatch(this.variables);\n        var oq = this.observableQuery;\n        if (oq && oq.options.fetchPolicy === \"no-cache\") {\n            return { complete: false };\n        }\n        var diff = muteDeprecations(\"canonizeResults\", function () {\n            return _this.cache.diff(options);\n        });\n        this.updateLastDiff(diff, options);\n        return diff;\n    };\n    QueryInfo.prototype.updateLastDiff = function (diff, options) {\n        this.lastDiff =\n            diff ?\n                {\n                    diff: diff,\n                    options: options || this.getDiffOptions(),\n                }\n                : void 0;\n    };\n    QueryInfo.prototype.getDiffOptions = function (variables) {\n        var _a;\n        if (variables === void 0) { variables = this.variables; }\n        return {\n            query: this.document,\n            variables: variables,\n            returnPartialData: true,\n            optimistic: true,\n            canonizeResults: (_a = this.observableQuery) === null || _a === void 0 ? void 0 : _a.options.canonizeResults,\n        };\n    };\n    QueryInfo.prototype.setDiff = function (diff) {\n        var _this = this;\n        var _a;\n        var oldDiff = this.lastDiff && this.lastDiff.diff;\n        // If we are trying to deliver an incomplete cache result, we avoid\n        // reporting it if the query has errored, otherwise we let the broadcast try\n        // and repair the partial result by refetching the query. This check avoids\n        // a situation where a query that errors and another succeeds with\n        // overlapping data does not report the partial data result to the errored\n        // query.\n        //\n        // See https://github.com/apollographql/apollo-client/issues/11400 for more\n        // information on this issue.\n        if (diff &&\n            !diff.complete &&\n            muteDeprecations(\"getLastError\", function () { var _a; return (_a = _this.observableQuery) === null || _a === void 0 ? void 0 : _a.getLastError(); })) {\n            return;\n        }\n        this.updateLastDiff(diff);\n        if (!equal(oldDiff && oldDiff.result, diff && diff.result)) {\n            (_a = this.observableQuery) === null || _a === void 0 ? void 0 : _a[\"scheduleNotify\"]();\n        }\n    };\n    QueryInfo.prototype.setObservableQuery = function (oq) {\n        if (oq === this.observableQuery)\n            return;\n        this.observableQuery = oq;\n        if (oq) {\n            oq[\"queryInfo\"] = this;\n        }\n    };\n    QueryInfo.prototype.stop = function () {\n        var _a;\n        if (!this.stopped) {\n            this.stopped = true;\n            // Cancel the pending notify timeout\n            (_a = this.observableQuery) === null || _a === void 0 ? void 0 : _a[\"resetNotifications\"]();\n            this.cancel();\n            var oq = this.observableQuery;\n            if (oq)\n                oq.stopPolling();\n        }\n    };\n    QueryInfo.prototype.cancel = function () {\n        var _a;\n        (_a = this.cancelWatch) === null || _a === void 0 ? void 0 : _a.call(this);\n        this.cancelWatch = void 0;\n    };\n    QueryInfo.prototype.updateWatch = function (variables) {\n        var _this = this;\n        if (variables === void 0) { variables = this.variables; }\n        var oq = this.observableQuery;\n        if (oq && oq.options.fetchPolicy === \"no-cache\") {\n            return;\n        }\n        var watchOptions = __assign(__assign({}, this.getDiffOptions(variables)), { watcher: this, callback: function (diff) { return _this.setDiff(diff); } });\n        if (!this.lastWatch || !equal(watchOptions, this.lastWatch)) {\n            this.cancel();\n            this.cancelWatch = this.cache.watch((this.lastWatch = watchOptions));\n        }\n    };\n    QueryInfo.prototype.resetLastWrite = function () {\n        this.lastWrite = void 0;\n    };\n    QueryInfo.prototype.shouldWrite = function (result, variables) {\n        var lastWrite = this.lastWrite;\n        return !(lastWrite &&\n            // If cache.evict has been called since the last time we wrote this\n            // data into the cache, there's a chance writing this result into\n            // the cache will repair what was evicted.\n            lastWrite.dmCount === destructiveMethodCounts.get(this.cache) &&\n            equal(variables, lastWrite.variables) &&\n            equal(result.data, lastWrite.result.data));\n    };\n    QueryInfo.prototype.markResult = function (result, document, options, cacheWriteBehavior) {\n        var _this = this;\n        var _a;\n        var merger = new DeepMerger();\n        var graphQLErrors = isNonEmptyArray(result.errors) ? result.errors.slice(0) : [];\n        // Cancel the pending notify timeout (if it exists) to prevent extraneous network\n        // requests. To allow future notify timeouts, diff and dirty are reset as well.\n        (_a = this.observableQuery) === null || _a === void 0 ? void 0 : _a[\"resetNotifications\"]();\n        if (\"incremental\" in result && isNonEmptyArray(result.incremental)) {\n            var mergedData = mergeIncrementalData(this.getDiff().result, result);\n            result.data = mergedData;\n            // Detect the first chunk of a deferred query and merge it with existing\n            // cache data. This ensures a `cache-first` fetch policy that returns\n            // partial cache data or a `cache-and-network` fetch policy that already\n            // has full data in the cache does not complain when trying to merge the\n            // initial deferred server data with existing cache data.\n        }\n        else if (\"hasNext\" in result && result.hasNext) {\n            var diff = this.getDiff();\n            result.data = merger.merge(diff.result, result.data);\n        }\n        this.graphQLErrors = graphQLErrors;\n        if (options.fetchPolicy === \"no-cache\") {\n            this.updateLastDiff({ result: result.data, complete: true }, this.getDiffOptions(options.variables));\n        }\n        else if (cacheWriteBehavior !== 0 /* CacheWriteBehavior.FORBID */) {\n            if (shouldWriteResult(result, options.errorPolicy)) {\n                // Using a transaction here so we have a chance to read the result\n                // back from the cache before the watch callback fires as a result\n                // of writeQuery, so we can store the new diff quietly and ignore\n                // it when we receive it redundantly from the watch callback.\n                this.cache.performTransaction(function (cache) {\n                    if (_this.shouldWrite(result, options.variables)) {\n                        cache.writeQuery({\n                            query: document,\n                            data: result.data,\n                            variables: options.variables,\n                            overwrite: cacheWriteBehavior === 1 /* CacheWriteBehavior.OVERWRITE */,\n                        });\n                        _this.lastWrite = {\n                            result: result,\n                            variables: options.variables,\n                            dmCount: destructiveMethodCounts.get(_this.cache),\n                        };\n                    }\n                    else {\n                        // If result is the same as the last result we received from\n                        // the network (and the variables match too), avoid writing\n                        // result into the cache again. The wisdom of skipping this\n                        // cache write is far from obvious, since any cache write\n                        // could be the one that puts the cache back into a desired\n                        // state, fixing corruption or missing data. However, if we\n                        // always write every network result into the cache, we enable\n                        // feuds between queries competing to update the same data in\n                        // incompatible ways, which can lead to an endless cycle of\n                        // cache broadcasts and useless network requests. As with any\n                        // feud, eventually one side must step back from the brink,\n                        // letting the other side(s) have the last word(s). There may\n                        // be other points where we could break this cycle, such as\n                        // silencing the broadcast for cache.writeQuery (not a good\n                        // idea, since it just delays the feud a bit) or somehow\n                        // avoiding the network request that just happened (also bad,\n                        // because the server could return useful new data). All\n                        // options considered, skipping this cache write seems to be\n                        // the least damaging place to break the cycle, because it\n                        // reflects the intuition that we recently wrote this exact\n                        // result into the cache, so the cache *should* already/still\n                        // contain this data. If some other query has clobbered that\n                        // data in the meantime, that's too bad, but there will be no\n                        // winners if every query blindly reverts to its own version\n                        // of the data. This approach also gives the network a chance\n                        // to return new data, which will be written into the cache as\n                        // usual, notifying only those queries that are directly\n                        // affected by the cache updates, as usual. In the future, an\n                        // even more sophisticated cache could perhaps prevent or\n                        // mitigate the clobbering somehow, but that would make this\n                        // particular cache write even less important, and thus\n                        // skipping it would be even safer than it is today.\n                        if (_this.lastDiff && _this.lastDiff.diff.complete) {\n                            // Reuse data from the last good (complete) diff that we\n                            // received, when possible.\n                            result.data = _this.lastDiff.diff.result;\n                            return;\n                        }\n                        // If the previous this.diff was incomplete, fall through to\n                        // re-reading the latest data with cache.diff, below.\n                    }\n                    var diffOptions = _this.getDiffOptions(options.variables);\n                    var diff = muteDeprecations(\"canonizeResults\", function () {\n                        return cache.diff(diffOptions);\n                    });\n                    // In case the QueryManager stops this QueryInfo before its\n                    // results are delivered, it's important to avoid restarting the\n                    // cache watch when markResult is called. We also avoid updating\n                    // the watch if we are writing a result that doesn't match the current\n                    // variables to avoid race conditions from broadcasting the wrong\n                    // result.\n                    if (!_this.stopped && equal(_this.variables, options.variables)) {\n                        // Any time we're about to update this.diff, we need to make\n                        // sure we've started watching the cache.\n                        _this.updateWatch(options.variables);\n                    }\n                    // If we're allowed to write to the cache, and we can read a\n                    // complete result from the cache, update result.data to be the\n                    // result from the cache, rather than the raw network result.\n                    // Set without setDiff to avoid triggering a notify call, since\n                    // we have other ways of notifying for this result.\n                    _this.updateLastDiff(diff, diffOptions);\n                    if (diff.complete) {\n                        result.data = diff.result;\n                    }\n                });\n            }\n            else {\n                this.lastWrite = void 0;\n            }\n        }\n    };\n    QueryInfo.prototype.markReady = function () {\n        this.networkError = null;\n        return (this.networkStatus = NetworkStatus.ready);\n    };\n    QueryInfo.prototype.markError = function (error) {\n        var _a;\n        this.networkStatus = NetworkStatus.error;\n        this.lastWrite = void 0;\n        (_a = this.observableQuery) === null || _a === void 0 ? void 0 : _a[\"resetNotifications\"]();\n        if (error.graphQLErrors) {\n            this.graphQLErrors = error.graphQLErrors;\n        }\n        if (error.networkError) {\n            this.networkError = error.networkError;\n        }\n        return error;\n    };\n    return QueryInfo;\n}());\nexport { QueryInfo };\nexport function shouldWriteResult(result, errorPolicy) {\n    if (errorPolicy === void 0) { errorPolicy = \"none\"; }\n    var ignoreErrors = errorPolicy === \"ignore\" || errorPolicy === \"all\";\n    var writeWithErrors = !graphQLResultHasError(result);\n    if (!writeWithErrors && ignoreErrors && result.data) {\n        writeWithErrors = true;\n    }\n    return writeWithErrors;\n}\n//# sourceMappingURL=QueryInfo.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { invariant, newInvariantError } from \"../utilities/globals/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { execute } from \"../link/core/index.js\";\nimport { addNonReactiveToNamedFragments, hasDirectives, isExecutionPatchIncrementalResult, isExecutionPatchResult, isFullyUnmaskedOperation, removeDirectivesFromDocument, } from \"../utilities/index.js\";\nimport { canonicalStringify } from \"../cache/index.js\";\nimport { getDefaultValues, getOperationDefinition, getOperationName, hasClientExports, graphQLResultHasError, getGraphQLErrorsFromResult, Observable, asyncMap, isNonEmptyArray, Concast, makeUniqueId, isDocumentNode, isNonNullObject, DocumentTransform, } from \"../utilities/index.js\";\nimport { mergeIncrementalData } from \"../utilities/common/incrementalResult.js\";\nimport { ApolloError, isApolloError, graphQLResultHasProtocolErrors, } from \"../errors/index.js\";\nimport { ObservableQuery, logMissingFieldErrors } from \"./ObservableQuery.js\";\nimport { NetworkStatus, isNetworkRequestInFlight } from \"./networkStatus.js\";\nimport { QueryInfo, shouldWriteResult, } from \"./QueryInfo.js\";\nimport { PROTOCOL_ERRORS_SYMBOL } from \"../errors/index.js\";\nimport { print } from \"../utilities/index.js\";\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar IGNORE = Object.create(null);\nimport { Trie } from \"@wry/trie\";\nimport { AutoCleanedWeakCache, cacheSizes } from \"../utilities/index.js\";\nimport { maskFragment, maskOperation } from \"../masking/index.js\";\nimport { muteDeprecations } from \"../utilities/index.js\";\nvar QueryManager = /** @class */ (function () {\n    function QueryManager(options) {\n        var _this = this;\n        this.clientAwareness = {};\n        // All the queries that the QueryManager is currently managing (not\n        // including mutations and subscriptions).\n        this.queries = new Map();\n        // Maps from queryId strings to Promise rejection functions for\n        // currently active queries and fetches.\n        // Use protected instead of private field so\n        // @apollo/experimental-nextjs-app-support can access type info.\n        this.fetchCancelFns = new Map();\n        this.transformCache = new AutoCleanedWeakCache(cacheSizes[\"queryManager.getDocumentInfo\"] ||\n            2000 /* defaultCacheSizes[\"queryManager.getDocumentInfo\"] */);\n        this.queryIdCounter = 1;\n        this.requestIdCounter = 1;\n        this.mutationIdCounter = 1;\n        // Use protected instead of private field so\n        // @apollo/experimental-nextjs-app-support can access type info.\n        this.inFlightLinkObservables = new Trie(false);\n        this.noCacheWarningsByQueryId = new Set();\n        var defaultDocumentTransform = new DocumentTransform(function (document) { return _this.cache.transformDocument(document); }, \n        // Allow the apollo cache to manage its own transform caches\n        { cache: false });\n        this.cache = options.cache;\n        this.link = options.link;\n        this.defaultOptions = options.defaultOptions;\n        this.queryDeduplication = options.queryDeduplication;\n        this.clientAwareness = options.clientAwareness;\n        this.localState = options.localState;\n        this.ssrMode = options.ssrMode;\n        this.assumeImmutableResults = options.assumeImmutableResults;\n        this.dataMasking = options.dataMasking;\n        var documentTransform = options.documentTransform;\n        this.documentTransform =\n            documentTransform ?\n                defaultDocumentTransform\n                    .concat(documentTransform)\n                    // The custom document transform may add new fragment spreads or new\n                    // field selections, so we want to give the cache a chance to run\n                    // again. For example, the InMemoryCache adds __typename to field\n                    // selections and fragments from the fragment registry.\n                    .concat(defaultDocumentTransform)\n                : defaultDocumentTransform;\n        this.defaultContext = options.defaultContext || Object.create(null);\n        if ((this.onBroadcast = options.onBroadcast)) {\n            this.mutationStore = Object.create(null);\n        }\n    }\n    /**\n     * Call this method to terminate any active query processes, making it safe\n     * to dispose of this QueryManager instance.\n     */\n    QueryManager.prototype.stop = function () {\n        var _this = this;\n        this.queries.forEach(function (_info, queryId) {\n            _this.stopQueryNoBroadcast(queryId);\n        });\n        this.cancelPendingFetches(newInvariantError(35));\n    };\n    QueryManager.prototype.cancelPendingFetches = function (error) {\n        this.fetchCancelFns.forEach(function (cancel) { return cancel(error); });\n        this.fetchCancelFns.clear();\n    };\n    QueryManager.prototype.mutate = function (_a) {\n        return __awaiter(this, arguments, void 0, function (_b) {\n            var mutationId, hasClientExports, mutationStoreValue, isOptimistic, self;\n            var _c, _d;\n            var mutation = _b.mutation, variables = _b.variables, optimisticResponse = _b.optimisticResponse, updateQueries = _b.updateQueries, _e = _b.refetchQueries, refetchQueries = _e === void 0 ? [] : _e, _f = _b.awaitRefetchQueries, awaitRefetchQueries = _f === void 0 ? false : _f, updateWithProxyFn = _b.update, onQueryUpdated = _b.onQueryUpdated, _g = _b.fetchPolicy, fetchPolicy = _g === void 0 ? ((_c = this.defaultOptions.mutate) === null || _c === void 0 ? void 0 : _c.fetchPolicy) || \"network-only\" : _g, _h = _b.errorPolicy, errorPolicy = _h === void 0 ? ((_d = this.defaultOptions.mutate) === null || _d === void 0 ? void 0 : _d.errorPolicy) || \"none\" : _h, keepRootFields = _b.keepRootFields, context = _b.context;\n            return __generator(this, function (_j) {\n                switch (_j.label) {\n                    case 0:\n                        invariant(mutation, 36);\n                        invariant(fetchPolicy === \"network-only\" || fetchPolicy === \"no-cache\", 37);\n                        mutationId = this.generateMutationId();\n                        mutation = this.cache.transformForLink(this.transform(mutation));\n                        hasClientExports = this.getDocumentInfo(mutation).hasClientExports;\n                        variables = this.getVariables(mutation, variables);\n                        if (!hasClientExports) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.localState.addExportedVariables(mutation, variables, context)];\n                    case 1:\n                        variables = (_j.sent());\n                        _j.label = 2;\n                    case 2:\n                        mutationStoreValue = this.mutationStore &&\n                            (this.mutationStore[mutationId] = {\n                                mutation: mutation,\n                                variables: variables,\n                                loading: true,\n                                error: null,\n                            });\n                        isOptimistic = optimisticResponse &&\n                            this.markMutationOptimistic(optimisticResponse, {\n                                mutationId: mutationId,\n                                document: mutation,\n                                variables: variables,\n                                fetchPolicy: fetchPolicy,\n                                errorPolicy: errorPolicy,\n                                context: context,\n                                updateQueries: updateQueries,\n                                update: updateWithProxyFn,\n                                keepRootFields: keepRootFields,\n                            });\n                        this.broadcastQueries();\n                        self = this;\n                        return [2 /*return*/, new Promise(function (resolve, reject) {\n                                return asyncMap(self.getObservableFromLink(mutation, __assign(__assign({}, context), { optimisticResponse: isOptimistic ? optimisticResponse : void 0 }), variables, {}, false), function (result) {\n                                    if (graphQLResultHasError(result) && errorPolicy === \"none\") {\n                                        throw new ApolloError({\n                                            graphQLErrors: getGraphQLErrorsFromResult(result),\n                                        });\n                                    }\n                                    if (mutationStoreValue) {\n                                        mutationStoreValue.loading = false;\n                                        mutationStoreValue.error = null;\n                                    }\n                                    var storeResult = __assign({}, result);\n                                    if (typeof refetchQueries === \"function\") {\n                                        refetchQueries = refetchQueries(storeResult);\n                                    }\n                                    if (errorPolicy === \"ignore\" && graphQLResultHasError(storeResult)) {\n                                        delete storeResult.errors;\n                                    }\n                                    return self.markMutationResult({\n                                        mutationId: mutationId,\n                                        result: storeResult,\n                                        document: mutation,\n                                        variables: variables,\n                                        fetchPolicy: fetchPolicy,\n                                        errorPolicy: errorPolicy,\n                                        context: context,\n                                        update: updateWithProxyFn,\n                                        updateQueries: updateQueries,\n                                        awaitRefetchQueries: awaitRefetchQueries,\n                                        refetchQueries: refetchQueries,\n                                        removeOptimistic: isOptimistic ? mutationId : void 0,\n                                        onQueryUpdated: onQueryUpdated,\n                                        keepRootFields: keepRootFields,\n                                    });\n                                }).subscribe({\n                                    next: function (storeResult) {\n                                        self.broadcastQueries();\n                                        // Since mutations might receive multiple payloads from the\n                                        // ApolloLink chain (e.g. when used with @defer),\n                                        // we resolve with a SingleExecutionResult or after the final\n                                        // ExecutionPatchResult has arrived and we have assembled the\n                                        // multipart response into a single result.\n                                        if (!(\"hasNext\" in storeResult) || storeResult.hasNext === false) {\n                                            resolve(__assign(__assign({}, storeResult), { data: self.maskOperation({\n                                                    document: mutation,\n                                                    data: storeResult.data,\n                                                    fetchPolicy: fetchPolicy,\n                                                    id: mutationId,\n                                                }) }));\n                                        }\n                                    },\n                                    error: function (err) {\n                                        if (mutationStoreValue) {\n                                            mutationStoreValue.loading = false;\n                                            mutationStoreValue.error = err;\n                                        }\n                                        if (isOptimistic) {\n                                            self.cache.removeOptimistic(mutationId);\n                                        }\n                                        self.broadcastQueries();\n                                        reject(err instanceof ApolloError ? err : (new ApolloError({\n                                            networkError: err,\n                                        })));\n                                    },\n                                });\n                            })];\n                }\n            });\n        });\n    };\n    QueryManager.prototype.markMutationResult = function (mutation, cache) {\n        var _this = this;\n        if (cache === void 0) { cache = this.cache; }\n        var result = mutation.result;\n        var cacheWrites = [];\n        var skipCache = mutation.fetchPolicy === \"no-cache\";\n        if (!skipCache && shouldWriteResult(result, mutation.errorPolicy)) {\n            if (!isExecutionPatchIncrementalResult(result)) {\n                cacheWrites.push({\n                    result: result.data,\n                    dataId: \"ROOT_MUTATION\",\n                    query: mutation.document,\n                    variables: mutation.variables,\n                });\n            }\n            if (isExecutionPatchIncrementalResult(result) &&\n                isNonEmptyArray(result.incremental)) {\n                var diff = cache.diff({\n                    id: \"ROOT_MUTATION\",\n                    // The cache complains if passed a mutation where it expects a\n                    // query, so we transform mutations and subscriptions to queries\n                    // (only once, thanks to this.transformCache).\n                    query: this.getDocumentInfo(mutation.document).asQuery,\n                    variables: mutation.variables,\n                    optimistic: false,\n                    returnPartialData: true,\n                });\n                var mergedData = void 0;\n                if (diff.result) {\n                    mergedData = mergeIncrementalData(diff.result, result);\n                }\n                if (typeof mergedData !== \"undefined\") {\n                    // cast the ExecutionPatchResult to FetchResult here since\n                    // ExecutionPatchResult never has `data` when returned from the server\n                    result.data = mergedData;\n                    cacheWrites.push({\n                        result: mergedData,\n                        dataId: \"ROOT_MUTATION\",\n                        query: mutation.document,\n                        variables: mutation.variables,\n                    });\n                }\n            }\n            var updateQueries_1 = mutation.updateQueries;\n            if (updateQueries_1) {\n                this.queries.forEach(function (_a, queryId) {\n                    var observableQuery = _a.observableQuery;\n                    var queryName = observableQuery && observableQuery.queryName;\n                    if (!queryName || !hasOwnProperty.call(updateQueries_1, queryName)) {\n                        return;\n                    }\n                    var updater = updateQueries_1[queryName];\n                    var _b = _this.queries.get(queryId), document = _b.document, variables = _b.variables;\n                    // Read the current query result from the store.\n                    var _c = cache.diff({\n                        query: document,\n                        variables: variables,\n                        returnPartialData: true,\n                        optimistic: false,\n                    }), currentQueryResult = _c.result, complete = _c.complete;\n                    if (complete && currentQueryResult) {\n                        // Run our reducer using the current query result and the mutation result.\n                        var nextQueryResult = updater(currentQueryResult, {\n                            mutationResult: result,\n                            queryName: (document && getOperationName(document)) || void 0,\n                            queryVariables: variables,\n                        });\n                        // Write the modified result back into the store if we got a new result.\n                        if (nextQueryResult) {\n                            cacheWrites.push({\n                                result: nextQueryResult,\n                                dataId: \"ROOT_QUERY\",\n                                query: document,\n                                variables: variables,\n                            });\n                        }\n                    }\n                });\n            }\n        }\n        if (cacheWrites.length > 0 ||\n            (mutation.refetchQueries || \"\").length > 0 ||\n            mutation.update ||\n            mutation.onQueryUpdated ||\n            mutation.removeOptimistic) {\n            var results_1 = [];\n            this.refetchQueries({\n                updateCache: function (cache) {\n                    if (!skipCache) {\n                        cacheWrites.forEach(function (write) { return cache.write(write); });\n                    }\n                    // If the mutation has some writes associated with it then we need to\n                    // apply those writes to the store by running this reducer again with\n                    // a write action.\n                    var update = mutation.update;\n                    // Determine whether result is a SingleExecutionResult,\n                    // or the final ExecutionPatchResult.\n                    var isFinalResult = !isExecutionPatchResult(result) ||\n                        (isExecutionPatchIncrementalResult(result) && !result.hasNext);\n                    if (update) {\n                        if (!skipCache) {\n                            // Re-read the ROOT_MUTATION data we just wrote into the cache\n                            // (the first cache.write call in the cacheWrites.forEach loop\n                            // above), so field read functions have a chance to run for\n                            // fields within mutation result objects.\n                            var diff = cache.diff({\n                                id: \"ROOT_MUTATION\",\n                                // The cache complains if passed a mutation where it expects a\n                                // query, so we transform mutations and subscriptions to queries\n                                // (only once, thanks to this.transformCache).\n                                query: _this.getDocumentInfo(mutation.document).asQuery,\n                                variables: mutation.variables,\n                                optimistic: false,\n                                returnPartialData: true,\n                            });\n                            if (diff.complete) {\n                                result = __assign(__assign({}, result), { data: diff.result });\n                                if (\"incremental\" in result) {\n                                    delete result.incremental;\n                                }\n                                if (\"hasNext\" in result) {\n                                    delete result.hasNext;\n                                }\n                            }\n                        }\n                        // If we've received the whole response,\n                        // either a SingleExecutionResult or the final ExecutionPatchResult,\n                        // call the update function.\n                        if (isFinalResult) {\n                            update(cache, result, {\n                                context: mutation.context,\n                                variables: mutation.variables,\n                            });\n                        }\n                    }\n                    // TODO Do this with cache.evict({ id: 'ROOT_MUTATION' }) but make it\n                    // shallow to allow rolling back optimistic evictions.\n                    if (!skipCache && !mutation.keepRootFields && isFinalResult) {\n                        cache.modify({\n                            id: \"ROOT_MUTATION\",\n                            fields: function (value, _a) {\n                                var fieldName = _a.fieldName, DELETE = _a.DELETE;\n                                return fieldName === \"__typename\" ? value : DELETE;\n                            },\n                        });\n                    }\n                },\n                include: mutation.refetchQueries,\n                // Write the final mutation.result to the root layer of the cache.\n                optimistic: false,\n                // Remove the corresponding optimistic layer at the same time as we\n                // write the final non-optimistic result.\n                removeOptimistic: mutation.removeOptimistic,\n                // Let the caller of client.mutate optionally determine the refetching\n                // behavior for watched queries after the mutation.update function runs.\n                // If no onQueryUpdated function was provided for this mutation, pass\n                // null instead of undefined to disable the default refetching behavior.\n                onQueryUpdated: mutation.onQueryUpdated || null,\n            }).forEach(function (result) { return results_1.push(result); });\n            if (mutation.awaitRefetchQueries || mutation.onQueryUpdated) {\n                // Returning a promise here makes the mutation await that promise, so we\n                // include results in that promise's work if awaitRefetchQueries or an\n                // onQueryUpdated function was specified.\n                return Promise.all(results_1).then(function () { return result; });\n            }\n        }\n        return Promise.resolve(result);\n    };\n    QueryManager.prototype.markMutationOptimistic = function (optimisticResponse, mutation) {\n        var _this = this;\n        var data = typeof optimisticResponse === \"function\" ?\n            optimisticResponse(mutation.variables, { IGNORE: IGNORE })\n            : optimisticResponse;\n        if (data === IGNORE) {\n            return false;\n        }\n        this.cache.recordOptimisticTransaction(function (cache) {\n            try {\n                _this.markMutationResult(__assign(__assign({}, mutation), { result: { data: data } }), cache);\n            }\n            catch (error) {\n                globalThis.__DEV__ !== false && invariant.error(error);\n            }\n        }, mutation.mutationId);\n        return true;\n    };\n    QueryManager.prototype.fetchQuery = function (queryId, options, networkStatus) {\n        return this.fetchConcastWithInfo(this.getOrCreateQuery(queryId), options, networkStatus).concast.promise;\n    };\n    QueryManager.prototype.getQueryStore = function () {\n        var store = Object.create(null);\n        this.queries.forEach(function (info, queryId) {\n            store[queryId] = {\n                variables: info.variables,\n                networkStatus: info.networkStatus,\n                networkError: info.networkError,\n                graphQLErrors: info.graphQLErrors,\n            };\n        });\n        return store;\n    };\n    QueryManager.prototype.resetErrors = function (queryId) {\n        var queryInfo = this.queries.get(queryId);\n        if (queryInfo) {\n            queryInfo.networkError = undefined;\n            queryInfo.graphQLErrors = [];\n        }\n    };\n    QueryManager.prototype.transform = function (document) {\n        return this.documentTransform.transformDocument(document);\n    };\n    QueryManager.prototype.getDocumentInfo = function (document) {\n        var transformCache = this.transformCache;\n        if (!transformCache.has(document)) {\n            var cacheEntry = {\n                // TODO These three calls (hasClientExports, shouldForceResolvers, and\n                // usesNonreactiveDirective) are performing independent full traversals\n                // of the transformed document. We should consider merging these\n                // traversals into a single pass in the future, though the work is\n                // cached after the first time.\n                hasClientExports: hasClientExports(document),\n                hasForcedResolvers: this.localState.shouldForceResolvers(document),\n                hasNonreactiveDirective: hasDirectives([\"nonreactive\"], document),\n                nonReactiveQuery: addNonReactiveToNamedFragments(document),\n                clientQuery: this.localState.clientQuery(document),\n                serverQuery: removeDirectivesFromDocument([\n                    { name: \"client\", remove: true },\n                    { name: \"connection\" },\n                    { name: \"nonreactive\" },\n                    { name: \"unmask\" },\n                ], document),\n                defaultVars: getDefaultValues(getOperationDefinition(document)),\n                // Transform any mutation or subscription operations to query operations\n                // so we can read/write them from/to the cache.\n                asQuery: __assign(__assign({}, document), { definitions: document.definitions.map(function (def) {\n                        if (def.kind === \"OperationDefinition\" &&\n                            def.operation !== \"query\") {\n                            return __assign(__assign({}, def), { operation: \"query\" });\n                        }\n                        return def;\n                    }) }),\n            };\n            transformCache.set(document, cacheEntry);\n        }\n        return transformCache.get(document);\n    };\n    QueryManager.prototype.getVariables = function (document, variables) {\n        return __assign(__assign({}, this.getDocumentInfo(document).defaultVars), variables);\n    };\n    QueryManager.prototype.watchQuery = function (options) {\n        var query = this.transform(options.query);\n        // assign variable default values if supplied\n        // NOTE: We don't modify options.query here with the transformed query to\n        // ensure observable.options.query is set to the raw untransformed query.\n        options = __assign(__assign({}, options), { variables: this.getVariables(query, options.variables) });\n        if (typeof options.notifyOnNetworkStatusChange === \"undefined\") {\n            options.notifyOnNetworkStatusChange = false;\n        }\n        var queryInfo = new QueryInfo(this);\n        var observable = new ObservableQuery({\n            queryManager: this,\n            queryInfo: queryInfo,\n            options: options,\n        });\n        observable[\"lastQuery\"] = query;\n        if (!ObservableQuery[\"inactiveOnCreation\"].getValue()) {\n            this.queries.set(observable.queryId, queryInfo);\n        }\n        // We give queryInfo the transformed query to ensure the first cache diff\n        // uses the transformed query instead of the raw query\n        queryInfo.init({\n            document: query,\n            observableQuery: observable,\n            variables: observable.variables,\n        });\n        return observable;\n    };\n    QueryManager.prototype.query = function (options, queryId) {\n        var _this = this;\n        if (queryId === void 0) { queryId = this.generateQueryId(); }\n        invariant(options.query, 38);\n        invariant(options.query.kind === \"Document\", 39);\n        invariant(!options.returnPartialData, 40);\n        invariant(!options.pollInterval, 41);\n        var query = this.transform(options.query);\n        return this.fetchQuery(queryId, __assign(__assign({}, options), { query: query }))\n            .then(function (result) {\n            return result && __assign(__assign({}, result), { data: _this.maskOperation({\n                    document: query,\n                    data: result.data,\n                    fetchPolicy: options.fetchPolicy,\n                    id: queryId,\n                }) });\n        })\n            .finally(function () { return _this.stopQuery(queryId); });\n    };\n    QueryManager.prototype.generateQueryId = function () {\n        return String(this.queryIdCounter++);\n    };\n    QueryManager.prototype.generateRequestId = function () {\n        return this.requestIdCounter++;\n    };\n    QueryManager.prototype.generateMutationId = function () {\n        return String(this.mutationIdCounter++);\n    };\n    QueryManager.prototype.stopQueryInStore = function (queryId) {\n        this.stopQueryInStoreNoBroadcast(queryId);\n        this.broadcastQueries();\n    };\n    QueryManager.prototype.stopQueryInStoreNoBroadcast = function (queryId) {\n        var queryInfo = this.queries.get(queryId);\n        if (queryInfo)\n            queryInfo.stop();\n    };\n    QueryManager.prototype.clearStore = function (options) {\n        if (options === void 0) { options = {\n            discardWatches: true,\n        }; }\n        // Before we have sent the reset action to the store, we can no longer\n        // rely on the results returned by in-flight requests since these may\n        // depend on values that previously existed in the data portion of the\n        // store. So, we cancel the promises and observers that we have issued\n        // so far and not yet resolved (in the case of queries).\n        this.cancelPendingFetches(newInvariantError(42));\n        this.queries.forEach(function (queryInfo) {\n            if (queryInfo.observableQuery) {\n                // Set loading to true so listeners don't trigger unless they want\n                // results with partial data.\n                queryInfo.networkStatus = NetworkStatus.loading;\n            }\n            else {\n                queryInfo.stop();\n            }\n        });\n        if (this.mutationStore) {\n            this.mutationStore = Object.create(null);\n        }\n        // begin removing data from the store\n        return this.cache.reset(options);\n    };\n    QueryManager.prototype.getObservableQueries = function (include) {\n        var _this = this;\n        if (include === void 0) { include = \"active\"; }\n        var queries = new Map();\n        var queryNames = new Map();\n        var queryNamesAndQueryStrings = new Map();\n        var legacyQueryOptions = new Set();\n        if (Array.isArray(include)) {\n            include.forEach(function (desc) {\n                if (typeof desc === \"string\") {\n                    queryNames.set(desc, desc);\n                    queryNamesAndQueryStrings.set(desc, false);\n                }\n                else if (isDocumentNode(desc)) {\n                    var queryString = print(_this.transform(desc));\n                    queryNames.set(queryString, getOperationName(desc));\n                    queryNamesAndQueryStrings.set(queryString, false);\n                }\n                else if (isNonNullObject(desc) && desc.query) {\n                    legacyQueryOptions.add(desc);\n                }\n            });\n        }\n        this.queries.forEach(function (_a, queryId) {\n            var oq = _a.observableQuery, document = _a.document;\n            if (oq) {\n                if (include === \"all\") {\n                    queries.set(queryId, oq);\n                    return;\n                }\n                var queryName = oq.queryName, fetchPolicy = oq.options.fetchPolicy;\n                if (fetchPolicy === \"standby\" ||\n                    (include === \"active\" && !oq.hasObservers())) {\n                    return;\n                }\n                if (include === \"active\" ||\n                    (queryName && queryNamesAndQueryStrings.has(queryName)) ||\n                    (document && queryNamesAndQueryStrings.has(print(document)))) {\n                    queries.set(queryId, oq);\n                    if (queryName)\n                        queryNamesAndQueryStrings.set(queryName, true);\n                    if (document)\n                        queryNamesAndQueryStrings.set(print(document), true);\n                }\n            }\n        });\n        if (legacyQueryOptions.size) {\n            legacyQueryOptions.forEach(function (options) {\n                // We will be issuing a fresh network request for this query, so we\n                // pre-allocate a new query ID here, using a special prefix to enable\n                // cleaning up these temporary queries later, after fetching.\n                var queryId = makeUniqueId(\"legacyOneTimeQuery\");\n                var queryInfo = _this.getOrCreateQuery(queryId).init({\n                    document: options.query,\n                    variables: options.variables,\n                });\n                var oq = new ObservableQuery({\n                    queryManager: _this,\n                    queryInfo: queryInfo,\n                    options: __assign(__assign({}, options), { fetchPolicy: \"network-only\" }),\n                });\n                invariant(oq.queryId === queryId);\n                queryInfo.setObservableQuery(oq);\n                queries.set(queryId, oq);\n            });\n        }\n        if (globalThis.__DEV__ !== false && queryNamesAndQueryStrings.size) {\n            queryNamesAndQueryStrings.forEach(function (included, nameOrQueryString) {\n                if (!included) {\n                    var queryName = queryNames.get(nameOrQueryString);\n                    if (queryName) {\n                        globalThis.__DEV__ !== false && invariant.warn(43, queryName);\n                    }\n                    else {\n                        globalThis.__DEV__ !== false && invariant.warn(44);\n                    }\n                }\n            });\n        }\n        return queries;\n    };\n    QueryManager.prototype.reFetchObservableQueries = function (includeStandby) {\n        var _this = this;\n        if (includeStandby === void 0) { includeStandby = false; }\n        var observableQueryPromises = [];\n        this.getObservableQueries(includeStandby ? \"all\" : \"active\").forEach(function (observableQuery, queryId) {\n            var fetchPolicy = observableQuery.options.fetchPolicy;\n            muteDeprecations(\"resetLastResults\", function () {\n                return observableQuery.resetLastResults();\n            });\n            if (includeStandby ||\n                (fetchPolicy !== \"standby\" && fetchPolicy !== \"cache-only\")) {\n                observableQueryPromises.push(observableQuery.refetch());\n            }\n            (_this.queries.get(queryId) || observableQuery[\"queryInfo\"]).setDiff(null);\n        });\n        this.broadcastQueries();\n        return Promise.all(observableQueryPromises);\n    };\n    QueryManager.prototype.startGraphQLSubscription = function (options) {\n        var _this = this;\n        var query = options.query, variables = options.variables;\n        var fetchPolicy = options.fetchPolicy, _a = options.errorPolicy, errorPolicy = _a === void 0 ? \"none\" : _a, _b = options.context, context = _b === void 0 ? {} : _b, _c = options.extensions, extensions = _c === void 0 ? {} : _c;\n        query = this.transform(query);\n        variables = this.getVariables(query, variables);\n        var makeObservable = function (variables) {\n            return _this.getObservableFromLink(query, context, variables, extensions).map(function (result) {\n                if (fetchPolicy !== \"no-cache\") {\n                    // the subscription interface should handle not sending us results we no longer subscribe to.\n                    // XXX I don't think we ever send in an object with errors, but we might in the future...\n                    if (shouldWriteResult(result, errorPolicy)) {\n                        _this.cache.write({\n                            query: query,\n                            result: result.data,\n                            dataId: \"ROOT_SUBSCRIPTION\",\n                            variables: variables,\n                        });\n                    }\n                    _this.broadcastQueries();\n                }\n                var hasErrors = graphQLResultHasError(result);\n                var hasProtocolErrors = graphQLResultHasProtocolErrors(result);\n                if (hasErrors || hasProtocolErrors) {\n                    var errors = {};\n                    if (hasErrors) {\n                        errors.graphQLErrors = result.errors;\n                    }\n                    if (hasProtocolErrors) {\n                        errors.protocolErrors = result.extensions[PROTOCOL_ERRORS_SYMBOL];\n                    }\n                    // `errorPolicy` is a mechanism for handling GraphQL errors, according\n                    // to our documentation, so we throw protocol errors regardless of the\n                    // set error policy.\n                    if (errorPolicy === \"none\" || hasProtocolErrors) {\n                        throw new ApolloError(errors);\n                    }\n                }\n                if (errorPolicy === \"ignore\") {\n                    delete result.errors;\n                }\n                return result;\n            });\n        };\n        if (this.getDocumentInfo(query).hasClientExports) {\n            var observablePromise_1 = this.localState\n                .addExportedVariables(query, variables, context)\n                .then(makeObservable);\n            return new Observable(function (observer) {\n                var sub = null;\n                observablePromise_1.then(function (observable) { return (sub = observable.subscribe(observer)); }, observer.error);\n                return function () { return sub && sub.unsubscribe(); };\n            });\n        }\n        return makeObservable(variables);\n    };\n    QueryManager.prototype.stopQuery = function (queryId) {\n        this.stopQueryNoBroadcast(queryId);\n        this.broadcastQueries();\n    };\n    QueryManager.prototype.stopQueryNoBroadcast = function (queryId) {\n        this.stopQueryInStoreNoBroadcast(queryId);\n        this.removeQuery(queryId);\n    };\n    QueryManager.prototype.removeQuery = function (queryId) {\n        var _a;\n        // teardown all links\n        // Both `QueryManager.fetchRequest` and `QueryManager.query` create separate promises\n        // that each add their reject functions to fetchCancelFns.\n        // A query created with `QueryManager.query()` could trigger a `QueryManager.fetchRequest`.\n        // The same queryId could have two rejection fns for two promises\n        this.fetchCancelFns.delete(queryId);\n        if (this.queries.has(queryId)) {\n            (_a = this.queries.get(queryId)) === null || _a === void 0 ? void 0 : _a.stop();\n            this.queries.delete(queryId);\n        }\n    };\n    QueryManager.prototype.broadcastQueries = function () {\n        if (this.onBroadcast)\n            this.onBroadcast();\n        this.queries.forEach(function (info) { var _a; return (_a = info.observableQuery) === null || _a === void 0 ? void 0 : _a[\"notify\"](); });\n    };\n    QueryManager.prototype.getLocalState = function () {\n        return this.localState;\n    };\n    QueryManager.prototype.getObservableFromLink = function (query, context, variables, extensions, \n    // Prefer context.queryDeduplication if specified.\n    deduplication) {\n        var _this = this;\n        var _a;\n        if (deduplication === void 0) { deduplication = (_a = context === null || context === void 0 ? void 0 : context.queryDeduplication) !== null && _a !== void 0 ? _a : this.queryDeduplication; }\n        var observable;\n        var _b = this.getDocumentInfo(query), serverQuery = _b.serverQuery, clientQuery = _b.clientQuery;\n        if (serverQuery) {\n            var _c = this, inFlightLinkObservables_1 = _c.inFlightLinkObservables, link = _c.link;\n            var operation = {\n                query: serverQuery,\n                variables: variables,\n                operationName: getOperationName(serverQuery) || void 0,\n                context: this.prepareContext(__assign(__assign({}, context), { forceFetch: !deduplication })),\n                extensions: extensions,\n            };\n            context = operation.context;\n            if (deduplication) {\n                var printedServerQuery_1 = print(serverQuery);\n                var varJson_1 = canonicalStringify(variables);\n                var entry = inFlightLinkObservables_1.lookup(printedServerQuery_1, varJson_1);\n                observable = entry.observable;\n                if (!observable) {\n                    var concast_1 = new Concast([\n                        execute(link, operation),\n                    ]);\n                    observable = entry.observable = concast_1;\n                    concast_1.beforeNext(function cb(method, arg) {\n                        if (method === \"next\" && \"hasNext\" in arg && arg.hasNext) {\n                            concast_1.beforeNext(cb);\n                        }\n                        else {\n                            inFlightLinkObservables_1.remove(printedServerQuery_1, varJson_1);\n                        }\n                    });\n                }\n            }\n            else {\n                observable = new Concast([\n                    execute(link, operation),\n                ]);\n            }\n        }\n        else {\n            observable = new Concast([Observable.of({ data: {} })]);\n            context = this.prepareContext(context);\n        }\n        if (clientQuery) {\n            observable = asyncMap(observable, function (result) {\n                return _this.localState.runResolvers({\n                    document: clientQuery,\n                    remoteResult: result,\n                    context: context,\n                    variables: variables,\n                });\n            });\n        }\n        return observable;\n    };\n    QueryManager.prototype.getResultsFromLink = function (queryInfo, cacheWriteBehavior, options) {\n        var requestId = (queryInfo.lastRequestId = this.generateRequestId());\n        // Performing transformForLink here gives this.cache a chance to fill in\n        // missing fragment definitions (for example) before sending this document\n        // through the link chain.\n        var linkDocument = this.cache.transformForLink(options.query);\n        return asyncMap(this.getObservableFromLink(linkDocument, options.context, options.variables), function (result) {\n            var graphQLErrors = getGraphQLErrorsFromResult(result);\n            var hasErrors = graphQLErrors.length > 0;\n            var errorPolicy = options.errorPolicy;\n            // If we interrupted this request by calling getResultsFromLink again\n            // with the same QueryInfo object, we ignore the old results.\n            if (requestId >= queryInfo.lastRequestId) {\n                if (hasErrors && errorPolicy === \"none\") {\n                    // Throwing here effectively calls observer.error.\n                    throw queryInfo.markError(new ApolloError({\n                        graphQLErrors: graphQLErrors,\n                    }));\n                }\n                // Use linkDocument rather than queryInfo.document so the\n                // operation/fragments used to write the result are the same as the\n                // ones used to obtain it from the link.\n                queryInfo.markResult(result, linkDocument, options, cacheWriteBehavior);\n                queryInfo.markReady();\n            }\n            var aqr = {\n                data: result.data,\n                loading: false,\n                networkStatus: NetworkStatus.ready,\n            };\n            // In the case we start multiple network requests simulatenously, we\n            // want to ensure we properly set `data` if we're reporting on an old\n            // result which will not be caught by the conditional above that ends up\n            // throwing the markError result.\n            if (hasErrors && errorPolicy === \"none\") {\n                aqr.data = void 0;\n            }\n            if (hasErrors && errorPolicy !== \"ignore\") {\n                aqr.errors = graphQLErrors;\n                aqr.networkStatus = NetworkStatus.error;\n            }\n            return aqr;\n        }, function (networkError) {\n            var error = isApolloError(networkError) ? networkError : (new ApolloError({ networkError: networkError }));\n            // Avoid storing errors from older interrupted queries.\n            if (requestId >= queryInfo.lastRequestId) {\n                queryInfo.markError(error);\n            }\n            throw error;\n        });\n    };\n    QueryManager.prototype.fetchConcastWithInfo = function (queryInfo, options, \n    // The initial networkStatus for this fetch, most often\n    // NetworkStatus.loading, but also possibly fetchMore, poll, refetch,\n    // or setVariables.\n    networkStatus, query) {\n        var _this = this;\n        if (networkStatus === void 0) { networkStatus = NetworkStatus.loading; }\n        if (query === void 0) { query = options.query; }\n        var variables = this.getVariables(query, options.variables);\n        var defaults = this.defaultOptions.watchQuery;\n        var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? (defaults && defaults.fetchPolicy) || \"cache-first\" : _a, _b = options.errorPolicy, errorPolicy = _b === void 0 ? (defaults && defaults.errorPolicy) || \"none\" : _b, _c = options.returnPartialData, returnPartialData = _c === void 0 ? false : _c, _d = options.notifyOnNetworkStatusChange, notifyOnNetworkStatusChange = _d === void 0 ? false : _d, _e = options.context, context = _e === void 0 ? {} : _e;\n        var normalized = Object.assign({}, options, {\n            query: query,\n            variables: variables,\n            fetchPolicy: fetchPolicy,\n            errorPolicy: errorPolicy,\n            returnPartialData: returnPartialData,\n            notifyOnNetworkStatusChange: notifyOnNetworkStatusChange,\n            context: context,\n        });\n        var fromVariables = function (variables) {\n            // Since normalized is always a fresh copy of options, it's safe to\n            // modify its properties here, rather than creating yet another new\n            // WatchQueryOptions object.\n            normalized.variables = variables;\n            var sourcesWithInfo = _this.fetchQueryByPolicy(queryInfo, normalized, networkStatus);\n            if (\n            // If we're in standby, postpone advancing options.fetchPolicy using\n            // applyNextFetchPolicy.\n            normalized.fetchPolicy !== \"standby\" &&\n                // The \"standby\" policy currently returns [] from fetchQueryByPolicy, so\n                // this is another way to detect when nothing was done/fetched.\n                sourcesWithInfo.sources.length > 0 &&\n                queryInfo.observableQuery) {\n                queryInfo.observableQuery[\"applyNextFetchPolicy\"](\"after-fetch\", options);\n            }\n            return sourcesWithInfo;\n        };\n        // This cancel function needs to be set before the concast is created,\n        // in case concast creation synchronously cancels the request.\n        var cleanupCancelFn = function () { return _this.fetchCancelFns.delete(queryInfo.queryId); };\n        this.fetchCancelFns.set(queryInfo.queryId, function (reason) {\n            cleanupCancelFn();\n            // This delay ensures the concast variable has been initialized.\n            setTimeout(function () { return concast.cancel(reason); });\n        });\n        var concast, containsDataFromLink;\n        // If the query has @export(as: ...) directives, then we need to\n        // process those directives asynchronously. When there are no\n        // @export directives (the common case), we deliberately avoid\n        // wrapping the result of this.fetchQueryByPolicy in a Promise,\n        // since the timing of result delivery is (unfortunately) important\n        // for backwards compatibility. TODO This code could be simpler if\n        // we deprecated and removed LocalState.\n        if (this.getDocumentInfo(normalized.query).hasClientExports) {\n            concast = new Concast(this.localState\n                .addExportedVariables(normalized.query, normalized.variables, normalized.context)\n                .then(fromVariables)\n                .then(function (sourcesWithInfo) { return sourcesWithInfo.sources; }));\n            // there is just no way we can synchronously get the *right* value here,\n            // so we will assume `true`, which is the behaviour before the bug fix in\n            // #10597. This means that bug is not fixed in that case, and is probably\n            // un-fixable with reasonable effort for the edge case of @export as\n            // directives.\n            containsDataFromLink = true;\n        }\n        else {\n            var sourcesWithInfo = fromVariables(normalized.variables);\n            containsDataFromLink = sourcesWithInfo.fromLink;\n            concast = new Concast(sourcesWithInfo.sources);\n        }\n        concast.promise.then(cleanupCancelFn, cleanupCancelFn);\n        return {\n            concast: concast,\n            fromLink: containsDataFromLink,\n        };\n    };\n    QueryManager.prototype.refetchQueries = function (_a) {\n        var _this = this;\n        var updateCache = _a.updateCache, include = _a.include, _b = _a.optimistic, optimistic = _b === void 0 ? false : _b, _c = _a.removeOptimistic, removeOptimistic = _c === void 0 ? optimistic ? makeUniqueId(\"refetchQueries\") : void 0 : _c, onQueryUpdated = _a.onQueryUpdated;\n        var includedQueriesById = new Map();\n        if (include) {\n            this.getObservableQueries(include).forEach(function (oq, queryId) {\n                includedQueriesById.set(queryId, {\n                    oq: oq,\n                    lastDiff: (_this.queries.get(queryId) || oq[\"queryInfo\"]).getDiff(),\n                });\n            });\n        }\n        var results = new Map();\n        if (updateCache) {\n            this.cache.batch({\n                update: updateCache,\n                // Since you can perform any combination of cache reads and/or writes in\n                // the cache.batch update function, its optimistic option can be either\n                // a boolean or a string, representing three distinct modes of\n                // operation:\n                //\n                // * false: read/write only the root layer\n                // * true: read/write the topmost layer\n                // * string: read/write a fresh optimistic layer with that ID string\n                //\n                // When typeof optimistic === \"string\", a new optimistic layer will be\n                // temporarily created within cache.batch with that string as its ID. If\n                // we then pass that same string as the removeOptimistic option, we can\n                // make cache.batch immediately remove the optimistic layer after\n                // running the updateCache function, triggering only one broadcast.\n                //\n                // However, the refetchQueries method accepts only true or false for its\n                // optimistic option (not string). We interpret true to mean a temporary\n                // optimistic layer should be created, to allow efficiently rolling back\n                // the effect of the updateCache function, which involves passing a\n                // string instead of true as the optimistic option to cache.batch, when\n                // refetchQueries receives optimistic: true.\n                //\n                // In other words, we are deliberately not supporting the use case of\n                // writing to an *existing* optimistic layer (using the refetchQueries\n                // updateCache function), since that would potentially interfere with\n                // other optimistic updates in progress. Instead, you can read/write\n                // only the root layer by passing optimistic: false to refetchQueries,\n                // or you can read/write a brand new optimistic layer that will be\n                // automatically removed by passing optimistic: true.\n                optimistic: (optimistic && removeOptimistic) || false,\n                // The removeOptimistic option can also be provided by itself, even if\n                // optimistic === false, to remove some previously-added optimistic\n                // layer safely and efficiently, like we do in markMutationResult.\n                //\n                // If an explicit removeOptimistic string is provided with optimistic:\n                // true, the removeOptimistic string will determine the ID of the\n                // temporary optimistic layer, in case that ever matters.\n                removeOptimistic: removeOptimistic,\n                onWatchUpdated: function (watch, diff, lastDiff) {\n                    var oq = watch.watcher instanceof QueryInfo && watch.watcher.observableQuery;\n                    if (oq) {\n                        if (onQueryUpdated) {\n                            // Since we're about to handle this query now, remove it from\n                            // includedQueriesById, in case it was added earlier because of\n                            // options.include.\n                            includedQueriesById.delete(oq.queryId);\n                            var result = onQueryUpdated(oq, diff, lastDiff);\n                            if (result === true) {\n                                // The onQueryUpdated function requested the default refetching\n                                // behavior by returning true.\n                                result = oq.refetch();\n                            }\n                            // Record the result in the results Map, as long as onQueryUpdated\n                            // did not return false to skip/ignore this result.\n                            if (result !== false) {\n                                results.set(oq, result);\n                            }\n                            // Allow the default cache broadcast to happen, except when\n                            // onQueryUpdated returns false.\n                            return result;\n                        }\n                        if (onQueryUpdated !== null) {\n                            // If we don't have an onQueryUpdated function, and onQueryUpdated\n                            // was not disabled by passing null, make sure this query is\n                            // \"included\" like any other options.include-specified query.\n                            includedQueriesById.set(oq.queryId, { oq: oq, lastDiff: lastDiff, diff: diff });\n                        }\n                    }\n                },\n            });\n        }\n        if (includedQueriesById.size) {\n            includedQueriesById.forEach(function (_a, queryId) {\n                var oq = _a.oq, lastDiff = _a.lastDiff, diff = _a.diff;\n                var result;\n                // If onQueryUpdated is provided, we want to use it for all included\n                // queries, even the QueryOptions ones.\n                if (onQueryUpdated) {\n                    if (!diff) {\n                        diff = muteDeprecations(\"canonizeResults\", function () {\n                            return _this.cache.diff(oq[\"queryInfo\"][\"getDiffOptions\"]());\n                        });\n                    }\n                    result = onQueryUpdated(oq, diff, lastDiff);\n                }\n                // Otherwise, we fall back to refetching.\n                if (!onQueryUpdated || result === true) {\n                    result = oq.refetch();\n                }\n                if (result !== false) {\n                    results.set(oq, result);\n                }\n                if (queryId.indexOf(\"legacyOneTimeQuery\") >= 0) {\n                    _this.stopQueryNoBroadcast(queryId);\n                }\n            });\n        }\n        if (removeOptimistic) {\n            // In case no updateCache callback was provided (so cache.batch was not\n            // called above, and thus did not already remove the optimistic layer),\n            // remove it here. Since this is a no-op when the layer has already been\n            // removed, we do it even if we called cache.batch above, since it's\n            // possible this.cache is an instance of some ApolloCache subclass other\n            // than InMemoryCache, and does not fully support the removeOptimistic\n            // option for cache.batch.\n            this.cache.removeOptimistic(removeOptimistic);\n        }\n        return results;\n    };\n    QueryManager.prototype.maskOperation = function (options) {\n        var _a, _b, _c;\n        var document = options.document, data = options.data;\n        if (globalThis.__DEV__ !== false) {\n            var fetchPolicy = options.fetchPolicy, id = options.id;\n            var operationType = (_a = getOperationDefinition(document)) === null || _a === void 0 ? void 0 : _a.operation;\n            var operationId = ((_b = operationType === null || operationType === void 0 ? void 0 : operationType[0]) !== null && _b !== void 0 ? _b : \"o\") + id;\n            if (this.dataMasking &&\n                fetchPolicy === \"no-cache\" &&\n                !isFullyUnmaskedOperation(document) &&\n                !this.noCacheWarningsByQueryId.has(operationId)) {\n                this.noCacheWarningsByQueryId.add(operationId);\n                globalThis.__DEV__ !== false && invariant.warn(\n                    45,\n                    (_c = getOperationName(document)) !== null && _c !== void 0 ? _c : \"Unnamed \".concat(operationType !== null && operationType !== void 0 ? operationType : \"operation\")\n                );\n            }\n        }\n        return (this.dataMasking ?\n            maskOperation(data, document, this.cache)\n            : data);\n    };\n    QueryManager.prototype.maskFragment = function (options) {\n        var data = options.data, fragment = options.fragment, fragmentName = options.fragmentName;\n        return this.dataMasking ?\n            maskFragment(data, fragment, this.cache, fragmentName)\n            : data;\n    };\n    QueryManager.prototype.fetchQueryByPolicy = function (queryInfo, _a, \n    // The initial networkStatus for this fetch, most often\n    // NetworkStatus.loading, but also possibly fetchMore, poll, refetch,\n    // or setVariables.\n    networkStatus) {\n        var _this = this;\n        var query = _a.query, variables = _a.variables, fetchPolicy = _a.fetchPolicy, refetchWritePolicy = _a.refetchWritePolicy, errorPolicy = _a.errorPolicy, returnPartialData = _a.returnPartialData, context = _a.context, notifyOnNetworkStatusChange = _a.notifyOnNetworkStatusChange;\n        var oldNetworkStatus = queryInfo.networkStatus;\n        queryInfo.init({\n            document: query,\n            variables: variables,\n            networkStatus: networkStatus,\n        });\n        var readCache = function () { return queryInfo.getDiff(); };\n        var resultsFromCache = function (diff, networkStatus) {\n            if (networkStatus === void 0) { networkStatus = queryInfo.networkStatus || NetworkStatus.loading; }\n            var data = diff.result;\n            if (globalThis.__DEV__ !== false && !returnPartialData && !equal(data, {})) {\n                logMissingFieldErrors(diff.missing);\n            }\n            var fromData = function (data) {\n                return Observable.of(__assign({ data: data, loading: isNetworkRequestInFlight(networkStatus), networkStatus: networkStatus }, (diff.complete ? null : { partial: true })));\n            };\n            if (data && _this.getDocumentInfo(query).hasForcedResolvers) {\n                return _this.localState\n                    .runResolvers({\n                    document: query,\n                    remoteResult: { data: data },\n                    context: context,\n                    variables: variables,\n                    onlyRunForcedResolvers: true,\n                })\n                    .then(function (resolved) { return fromData(resolved.data || void 0); });\n            }\n            // Resolves https://github.com/apollographql/apollo-client/issues/10317.\n            // If errorPolicy is 'none' and notifyOnNetworkStatusChange is true,\n            // data was incorrectly returned from the cache on refetch:\n            // if diff.missing exists, we should not return cache data.\n            if (errorPolicy === \"none\" &&\n                networkStatus === NetworkStatus.refetch &&\n                Array.isArray(diff.missing)) {\n                return fromData(void 0);\n            }\n            return fromData(data);\n        };\n        var cacheWriteBehavior = fetchPolicy === \"no-cache\" ? 0 /* CacheWriteBehavior.FORBID */\n            // Watched queries must opt into overwriting existing data on refetch,\n            // by passing refetchWritePolicy: \"overwrite\" in their WatchQueryOptions.\n            : (networkStatus === NetworkStatus.refetch &&\n                refetchWritePolicy !== \"merge\") ?\n                1 /* CacheWriteBehavior.OVERWRITE */\n                : 2 /* CacheWriteBehavior.MERGE */;\n        var resultsFromLink = function () {\n            return _this.getResultsFromLink(queryInfo, cacheWriteBehavior, {\n                query: query,\n                variables: variables,\n                context: context,\n                fetchPolicy: fetchPolicy,\n                errorPolicy: errorPolicy,\n            });\n        };\n        var shouldNotify = notifyOnNetworkStatusChange &&\n            typeof oldNetworkStatus === \"number\" &&\n            oldNetworkStatus !== networkStatus &&\n            isNetworkRequestInFlight(networkStatus);\n        switch (fetchPolicy) {\n            default:\n            case \"cache-first\": {\n                var diff = readCache();\n                if (diff.complete) {\n                    return {\n                        fromLink: false,\n                        sources: [resultsFromCache(diff, queryInfo.markReady())],\n                    };\n                }\n                if (returnPartialData || shouldNotify) {\n                    return {\n                        fromLink: true,\n                        sources: [resultsFromCache(diff), resultsFromLink()],\n                    };\n                }\n                return { fromLink: true, sources: [resultsFromLink()] };\n            }\n            case \"cache-and-network\": {\n                var diff = readCache();\n                if (diff.complete || returnPartialData || shouldNotify) {\n                    return {\n                        fromLink: true,\n                        sources: [resultsFromCache(diff), resultsFromLink()],\n                    };\n                }\n                return { fromLink: true, sources: [resultsFromLink()] };\n            }\n            case \"cache-only\":\n                return {\n                    fromLink: false,\n                    sources: [resultsFromCache(readCache(), queryInfo.markReady())],\n                };\n            case \"network-only\":\n                if (shouldNotify) {\n                    return {\n                        fromLink: true,\n                        sources: [resultsFromCache(readCache()), resultsFromLink()],\n                    };\n                }\n                return { fromLink: true, sources: [resultsFromLink()] };\n            case \"no-cache\":\n                if (shouldNotify) {\n                    return {\n                        fromLink: true,\n                        // Note that queryInfo.getDiff() for no-cache queries does not call\n                        // cache.diff, but instead returns a { complete: false } stub result\n                        // when there is no queryInfo.diff already defined.\n                        sources: [resultsFromCache(queryInfo.getDiff()), resultsFromLink()],\n                    };\n                }\n                return { fromLink: true, sources: [resultsFromLink()] };\n            case \"standby\":\n                return { fromLink: false, sources: [] };\n        }\n    };\n    QueryManager.prototype.getOrCreateQuery = function (queryId) {\n        if (queryId && !this.queries.has(queryId)) {\n            this.queries.set(queryId, new QueryInfo(this, queryId));\n        }\n        return this.queries.get(queryId);\n    };\n    QueryManager.prototype.prepareContext = function (context) {\n        if (context === void 0) { context = {}; }\n        var newContext = this.localState.prepareContext(context);\n        return __assign(__assign(__assign({}, this.defaultContext), newContext), { clientAwareness: this.clientAwareness });\n    };\n    return QueryManager;\n}());\nexport { QueryManager };\n//# sourceMappingURL=QueryManager.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { invariant } from \"../utilities/globals/index.js\";\nimport { visit, BREAK, isSelectionNode } from \"graphql\";\nimport { argumentsObjectFromField, buildQueryFromSelectionSet, createFragmentMap, getFragmentDefinitions, getMainDefinition, hasDirectives, isField, isInlineFragment, mergeDeep, mergeDeepArray, removeClientSetsFromDocument, resultKeyNameFromField, shouldInclude, } from \"../utilities/index.js\";\nimport { cacheSlot } from \"../cache/index.js\";\nvar LocalState = /** @class */ (function () {\n    function LocalState(_a) {\n        var cache = _a.cache, client = _a.client, resolvers = _a.resolvers, fragmentMatcher = _a.fragmentMatcher;\n        this.selectionsToResolveCache = new WeakMap();\n        this.cache = cache;\n        if (client) {\n            this.client = client;\n        }\n        if (resolvers) {\n            this.addResolvers(resolvers);\n        }\n        if (fragmentMatcher) {\n            this.setFragmentMatcher(fragmentMatcher);\n        }\n    }\n    LocalState.prototype.addResolvers = function (resolvers) {\n        var _this = this;\n        this.resolvers = this.resolvers || {};\n        if (Array.isArray(resolvers)) {\n            resolvers.forEach(function (resolverGroup) {\n                _this.resolvers = mergeDeep(_this.resolvers, resolverGroup);\n            });\n        }\n        else {\n            this.resolvers = mergeDeep(this.resolvers, resolvers);\n        }\n    };\n    LocalState.prototype.setResolvers = function (resolvers) {\n        this.resolvers = {};\n        this.addResolvers(resolvers);\n    };\n    LocalState.prototype.getResolvers = function () {\n        return this.resolvers || {};\n    };\n    // Run local client resolvers against the incoming query and remote data.\n    // Locally resolved field values are merged with the incoming remote data,\n    // and returned. Note that locally resolved fields will overwrite\n    // remote data using the same field name.\n    LocalState.prototype.runResolvers = function (_a) {\n        return __awaiter(this, arguments, void 0, function (_b) {\n            var document = _b.document, remoteResult = _b.remoteResult, context = _b.context, variables = _b.variables, _c = _b.onlyRunForcedResolvers, onlyRunForcedResolvers = _c === void 0 ? false : _c;\n            return __generator(this, function (_d) {\n                if (document) {\n                    return [2 /*return*/, this.resolveDocument(document, remoteResult.data, context, variables, this.fragmentMatcher, onlyRunForcedResolvers).then(function (localResult) { return (__assign(__assign({}, remoteResult), { data: localResult.result })); })];\n                }\n                return [2 /*return*/, remoteResult];\n            });\n        });\n    };\n    LocalState.prototype.setFragmentMatcher = function (fragmentMatcher) {\n        this.fragmentMatcher = fragmentMatcher;\n    };\n    LocalState.prototype.getFragmentMatcher = function () {\n        return this.fragmentMatcher;\n    };\n    // Client queries contain everything in the incoming document (if a @client\n    // directive is found).\n    LocalState.prototype.clientQuery = function (document) {\n        if (hasDirectives([\"client\"], document)) {\n            if (this.resolvers) {\n                return document;\n            }\n        }\n        return null;\n    };\n    // Server queries are stripped of all @client based selection sets.\n    LocalState.prototype.serverQuery = function (document) {\n        return removeClientSetsFromDocument(document);\n    };\n    LocalState.prototype.prepareContext = function (context) {\n        var cache = this.cache;\n        return __assign(__assign({}, context), { cache: cache, \n            // Getting an entry's cache key is useful for local state resolvers.\n            getCacheKey: function (obj) {\n                return cache.identify(obj);\n            } });\n    };\n    // To support `@client @export(as: \"someVar\")` syntax, we'll first resolve\n    // @client @export fields locally, then pass the resolved values back to be\n    // used alongside the original operation variables.\n    LocalState.prototype.addExportedVariables = function (document_1) {\n        return __awaiter(this, arguments, void 0, function (document, variables, context) {\n            if (variables === void 0) { variables = {}; }\n            if (context === void 0) { context = {}; }\n            return __generator(this, function (_a) {\n                if (document) {\n                    return [2 /*return*/, this.resolveDocument(document, this.buildRootValueFromCache(document, variables) || {}, this.prepareContext(context), variables).then(function (data) { return (__assign(__assign({}, variables), data.exportedVariables)); })];\n                }\n                return [2 /*return*/, __assign({}, variables)];\n            });\n        });\n    };\n    LocalState.prototype.shouldForceResolvers = function (document) {\n        var forceResolvers = false;\n        visit(document, {\n            Directive: {\n                enter: function (node) {\n                    if (node.name.value === \"client\" && node.arguments) {\n                        forceResolvers = node.arguments.some(function (arg) {\n                            return arg.name.value === \"always\" &&\n                                arg.value.kind === \"BooleanValue\" &&\n                                arg.value.value === true;\n                        });\n                        if (forceResolvers) {\n                            return BREAK;\n                        }\n                    }\n                },\n            },\n        });\n        return forceResolvers;\n    };\n    // Query the cache and return matching data.\n    LocalState.prototype.buildRootValueFromCache = function (document, variables) {\n        return this.cache.diff({\n            query: buildQueryFromSelectionSet(document),\n            variables: variables,\n            returnPartialData: true,\n            optimistic: false,\n        }).result;\n    };\n    LocalState.prototype.resolveDocument = function (document_1, rootValue_1) {\n        return __awaiter(this, arguments, void 0, function (document, rootValue, context, variables, fragmentMatcher, onlyRunForcedResolvers) {\n            var mainDefinition, fragments, fragmentMap, selectionsToResolve, definitionOperation, defaultOperationType, _a, cache, client, execContext, isClientFieldDescendant;\n            if (context === void 0) { context = {}; }\n            if (variables === void 0) { variables = {}; }\n            if (fragmentMatcher === void 0) { fragmentMatcher = function () { return true; }; }\n            if (onlyRunForcedResolvers === void 0) { onlyRunForcedResolvers = false; }\n            return __generator(this, function (_b) {\n                mainDefinition = getMainDefinition(document);\n                fragments = getFragmentDefinitions(document);\n                fragmentMap = createFragmentMap(fragments);\n                selectionsToResolve = this.collectSelectionsToResolve(mainDefinition, fragmentMap);\n                definitionOperation = mainDefinition.operation;\n                defaultOperationType = definitionOperation ?\n                    definitionOperation.charAt(0).toUpperCase() +\n                        definitionOperation.slice(1)\n                    : \"Query\";\n                _a = this, cache = _a.cache, client = _a.client;\n                execContext = {\n                    fragmentMap: fragmentMap,\n                    context: __assign(__assign({}, context), { cache: cache, client: client }),\n                    variables: variables,\n                    fragmentMatcher: fragmentMatcher,\n                    defaultOperationType: defaultOperationType,\n                    exportedVariables: {},\n                    selectionsToResolve: selectionsToResolve,\n                    onlyRunForcedResolvers: onlyRunForcedResolvers,\n                };\n                isClientFieldDescendant = false;\n                return [2 /*return*/, this.resolveSelectionSet(mainDefinition.selectionSet, isClientFieldDescendant, rootValue, execContext).then(function (result) { return ({\n                        result: result,\n                        exportedVariables: execContext.exportedVariables,\n                    }); })];\n            });\n        });\n    };\n    LocalState.prototype.resolveSelectionSet = function (selectionSet, isClientFieldDescendant, rootValue, execContext) {\n        return __awaiter(this, void 0, void 0, function () {\n            var fragmentMap, context, variables, resultsToMerge, execute;\n            var _this = this;\n            return __generator(this, function (_a) {\n                fragmentMap = execContext.fragmentMap, context = execContext.context, variables = execContext.variables;\n                resultsToMerge = [rootValue];\n                execute = function (selection) { return __awaiter(_this, void 0, void 0, function () {\n                    var fragment, typeCondition;\n                    return __generator(this, function (_a) {\n                        if (!isClientFieldDescendant &&\n                            !execContext.selectionsToResolve.has(selection)) {\n                            // Skip selections without @client directives\n                            // (still processing if one of the ancestors or one of the child fields has @client directive)\n                            return [2 /*return*/];\n                        }\n                        if (!shouldInclude(selection, variables)) {\n                            // Skip this entirely.\n                            return [2 /*return*/];\n                        }\n                        if (isField(selection)) {\n                            return [2 /*return*/, this.resolveField(selection, isClientFieldDescendant, rootValue, execContext).then(function (fieldResult) {\n                                    var _a;\n                                    if (typeof fieldResult !== \"undefined\") {\n                                        resultsToMerge.push((_a = {},\n                                            _a[resultKeyNameFromField(selection)] = fieldResult,\n                                            _a));\n                                    }\n                                })];\n                        }\n                        if (isInlineFragment(selection)) {\n                            fragment = selection;\n                        }\n                        else {\n                            // This is a named fragment.\n                            fragment = fragmentMap[selection.name.value];\n                            invariant(fragment, 21, selection.name.value);\n                        }\n                        if (fragment && fragment.typeCondition) {\n                            typeCondition = fragment.typeCondition.name.value;\n                            if (execContext.fragmentMatcher(rootValue, typeCondition, context)) {\n                                return [2 /*return*/, this.resolveSelectionSet(fragment.selectionSet, isClientFieldDescendant, rootValue, execContext).then(function (fragmentResult) {\n                                        resultsToMerge.push(fragmentResult);\n                                    })];\n                            }\n                        }\n                        return [2 /*return*/];\n                    });\n                }); };\n                return [2 /*return*/, Promise.all(selectionSet.selections.map(execute)).then(function () {\n                        return mergeDeepArray(resultsToMerge);\n                    })];\n            });\n        });\n    };\n    LocalState.prototype.resolveField = function (field, isClientFieldDescendant, rootValue, execContext) {\n        return __awaiter(this, void 0, void 0, function () {\n            var variables, fieldName, aliasedFieldName, aliasUsed, defaultResult, resultPromise, resolverType, resolverMap, resolve;\n            var _this = this;\n            return __generator(this, function (_a) {\n                if (!rootValue) {\n                    return [2 /*return*/, null];\n                }\n                variables = execContext.variables;\n                fieldName = field.name.value;\n                aliasedFieldName = resultKeyNameFromField(field);\n                aliasUsed = fieldName !== aliasedFieldName;\n                defaultResult = rootValue[aliasedFieldName] || rootValue[fieldName];\n                resultPromise = Promise.resolve(defaultResult);\n                // Usually all local resolvers are run when passing through here, but\n                // if we've specifically identified that we only want to run forced\n                // resolvers (that is, resolvers for fields marked with\n                // `@client(always: true)`), then we'll skip running non-forced resolvers.\n                if (!execContext.onlyRunForcedResolvers ||\n                    this.shouldForceResolvers(field)) {\n                    resolverType = rootValue.__typename || execContext.defaultOperationType;\n                    resolverMap = this.resolvers && this.resolvers[resolverType];\n                    if (resolverMap) {\n                        resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName];\n                        if (resolve) {\n                            resultPromise = Promise.resolve(\n                            // In case the resolve function accesses reactive variables,\n                            // set cacheSlot to the current cache instance.\n                            cacheSlot.withValue(this.cache, resolve, [\n                                rootValue,\n                                argumentsObjectFromField(field, variables),\n                                execContext.context,\n                                { field: field, fragmentMap: execContext.fragmentMap },\n                            ]));\n                        }\n                    }\n                }\n                return [2 /*return*/, resultPromise.then(function (result) {\n                        var _a, _b;\n                        if (result === void 0) { result = defaultResult; }\n                        // If an @export directive is associated with the current field, store\n                        // the `as` export variable name and current result for later use.\n                        if (field.directives) {\n                            field.directives.forEach(function (directive) {\n                                if (directive.name.value === \"export\" && directive.arguments) {\n                                    directive.arguments.forEach(function (arg) {\n                                        if (arg.name.value === \"as\" && arg.value.kind === \"StringValue\") {\n                                            execContext.exportedVariables[arg.value.value] = result;\n                                        }\n                                    });\n                                }\n                            });\n                        }\n                        // Handle all scalar types here.\n                        if (!field.selectionSet) {\n                            return result;\n                        }\n                        // From here down, the field has a selection set, which means it's trying\n                        // to query a GraphQLObjectType.\n                        if (result == null) {\n                            // Basically any field in a GraphQL response can be null, or missing\n                            return result;\n                        }\n                        var isClientField = (_b = (_a = field.directives) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.name.value === \"client\"; })) !== null && _b !== void 0 ? _b : false;\n                        if (Array.isArray(result)) {\n                            return _this.resolveSubSelectedArray(field, isClientFieldDescendant || isClientField, result, execContext);\n                        }\n                        // Returned value is an object, and the query has a sub-selection. Recurse.\n                        if (field.selectionSet) {\n                            return _this.resolveSelectionSet(field.selectionSet, isClientFieldDescendant || isClientField, result, execContext);\n                        }\n                    })];\n            });\n        });\n    };\n    LocalState.prototype.resolveSubSelectedArray = function (field, isClientFieldDescendant, result, execContext) {\n        var _this = this;\n        return Promise.all(result.map(function (item) {\n            if (item === null) {\n                return null;\n            }\n            // This is a nested array, recurse.\n            if (Array.isArray(item)) {\n                return _this.resolveSubSelectedArray(field, isClientFieldDescendant, item, execContext);\n            }\n            // This is an object, run the selection set on it.\n            if (field.selectionSet) {\n                return _this.resolveSelectionSet(field.selectionSet, isClientFieldDescendant, item, execContext);\n            }\n        }));\n    };\n    // Collect selection nodes on paths from document root down to all @client directives.\n    // This function takes into account transitive fragment spreads.\n    // Complexity equals to a single `visit` over the full document.\n    LocalState.prototype.collectSelectionsToResolve = function (mainDefinition, fragmentMap) {\n        var isSingleASTNode = function (node) { return !Array.isArray(node); };\n        var selectionsToResolveCache = this.selectionsToResolveCache;\n        function collectByDefinition(definitionNode) {\n            if (!selectionsToResolveCache.has(definitionNode)) {\n                var matches_1 = new Set();\n                selectionsToResolveCache.set(definitionNode, matches_1);\n                visit(definitionNode, {\n                    Directive: function (node, _, __, ___, ancestors) {\n                        if (node.name.value === \"client\") {\n                            ancestors.forEach(function (node) {\n                                if (isSingleASTNode(node) && isSelectionNode(node)) {\n                                    matches_1.add(node);\n                                }\n                            });\n                        }\n                    },\n                    FragmentSpread: function (spread, _, __, ___, ancestors) {\n                        var fragment = fragmentMap[spread.name.value];\n                        invariant(fragment, 22, spread.name.value);\n                        var fragmentSelections = collectByDefinition(fragment);\n                        if (fragmentSelections.size > 0) {\n                            // Fragment for this spread contains @client directive (either directly or transitively)\n                            // Collect selection nodes on paths from the root down to fields with the @client directive\n                            ancestors.forEach(function (node) {\n                                if (isSingleASTNode(node) && isSelectionNode(node)) {\n                                    matches_1.add(node);\n                                }\n                            });\n                            matches_1.add(spread);\n                            fragmentSelections.forEach(function (selection) {\n                                matches_1.add(selection);\n                            });\n                        }\n                    },\n                });\n            }\n            return selectionsToResolveCache.get(definitionNode);\n        }\n        return collectByDefinition(mainDefinition);\n    };\n    return LocalState;\n}());\nexport { LocalState };\n//# sourceMappingURL=LocalState.js.map","import { __assign } from \"tslib\";\nimport { invariant, newInvariantError } from \"../utilities/globals/index.js\";\nimport { ApolloLink, execute } from \"../link/core/index.js\";\nimport { version } from \"../version.js\";\nimport { HttpLink } from \"../link/http/index.js\";\nimport { QueryManager } from \"./QueryManager.js\";\nimport { LocalState } from \"./LocalState.js\";\nvar hasSuggestedDevtools = false;\n// Though mergeOptions now resides in @apollo/client/utilities, it was\n// previously declared and exported from this module, and then reexported from\n// @apollo/client/core. Since we need to preserve that API anyway, the easiest\n// solution is to reexport mergeOptions where it was previously declared (here).\nimport { mergeOptions } from \"../utilities/index.js\";\nimport { getApolloClientMemoryInternals } from \"../utilities/caching/getMemoryInternals.js\";\nimport { warnRemovedOption } from \"../utilities/index.js\";\nexport { mergeOptions };\n/**\n * This is the primary Apollo Client class. It is used to send GraphQL documents (i.e. queries\n * and mutations) to a GraphQL spec-compliant server over an `ApolloLink` instance,\n * receive results from the server and cache the results in a store. It also delivers updates\n * to GraphQL queries through `Observable` instances.\n */\nvar ApolloClient = /** @class */ (function () {\n    /**\n     * Constructs an instance of `ApolloClient`.\n     *\n     * @example\n     * ```js\n     * import { ApolloClient, InMemoryCache } from '@apollo/client';\n     *\n     * const cache = new InMemoryCache();\n     *\n     * const client = new ApolloClient({\n     *   // Provide required constructor fields\n     *   cache: cache,\n     *   uri: 'http://localhost:4000/',\n     *\n     *   // Provide some optional constructor fields\n     *   name: 'react-web-client',\n     *   version: '1.3',\n     *   queryDeduplication: false,\n     *   defaultOptions: {\n     *     watchQuery: {\n     *       fetchPolicy: 'cache-and-network',\n     *     },\n     *   },\n     * });\n     * ```\n     */\n    function ApolloClient(options) {\n        var _this = this;\n        var _a, _b, _c;\n        this.resetStoreCallbacks = [];\n        this.clearStoreCallbacks = [];\n        if (!options.cache) {\n            throw newInvariantError(16);\n        }\n        var uri = options.uri, credentials = options.credentials, headers = options.headers, cache = options.cache, documentTransform = options.documentTransform, _d = options.ssrMode, ssrMode = _d === void 0 ? false : _d, _e = options.ssrForceFetchDelay, ssrForceFetchDelay = _e === void 0 ? 0 : _e, \n        // Expose the client instance as window.__APOLLO_CLIENT__ and call\n        // onBroadcast in queryManager.broadcastQueries to enable browser\n        // devtools, but disable them by default in production.\n        connectToDevTools = options.connectToDevTools, _f = options.queryDeduplication, queryDeduplication = _f === void 0 ? true : _f, defaultOptions = options.defaultOptions, defaultContext = options.defaultContext, _g = options.assumeImmutableResults, assumeImmutableResults = _g === void 0 ? cache.assumeImmutableResults : _g, resolvers = options.resolvers, typeDefs = options.typeDefs, fragmentMatcher = options.fragmentMatcher, clientAwareness = options.clientAwareness, clientAwarenessName = options.name, clientAwarenessVersion = options.version, devtools = options.devtools, dataMasking = options.dataMasking;\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"connectToDevTools\", \"ApolloClient\", \"Please use `devtools.enabled` instead.\");\n            warnRemovedOption(options, \"uri\", \"ApolloClient\", \"Please initialize an instance of `HttpLink` with `uri` instead.\");\n            warnRemovedOption(options, \"credentials\", \"ApolloClient\", \"Please initialize an instance of `HttpLink` with `credentials` instead.\");\n            warnRemovedOption(options, \"headers\", \"ApolloClient\", \"Please initialize an instance of `HttpLink` with `headers` instead.\");\n            warnRemovedOption(options, \"name\", \"ApolloClient\", \"Please use the `clientAwareness.name` option instead.\");\n            warnRemovedOption(options, \"version\", \"ApolloClient\", \"Please use the `clientAwareness.version` option instead.\");\n            warnRemovedOption(options, \"typeDefs\", \"ApolloClient\");\n            if (!options.link) {\n                globalThis.__DEV__ !== false && invariant.warn(17);\n            }\n        }\n        var link = options.link;\n        if (!link) {\n            link =\n                uri ? new HttpLink({ uri: uri, credentials: credentials, headers: headers }) : ApolloLink.empty();\n        }\n        this.link = link;\n        this.cache = cache;\n        this.disableNetworkFetches = ssrMode || ssrForceFetchDelay > 0;\n        this.queryDeduplication = queryDeduplication;\n        this.defaultOptions = defaultOptions || Object.create(null);\n        this.typeDefs = typeDefs;\n        this.devtoolsConfig = __assign(__assign({}, devtools), { enabled: (_a = devtools === null || devtools === void 0 ? void 0 : devtools.enabled) !== null && _a !== void 0 ? _a : connectToDevTools });\n        if (this.devtoolsConfig.enabled === undefined) {\n            this.devtoolsConfig.enabled = globalThis.__DEV__ !== false;\n        }\n        if (ssrForceFetchDelay) {\n            setTimeout(function () { return (_this.disableNetworkFetches = false); }, ssrForceFetchDelay);\n        }\n        this.watchQuery = this.watchQuery.bind(this);\n        this.query = this.query.bind(this);\n        this.mutate = this.mutate.bind(this);\n        this.watchFragment = this.watchFragment.bind(this);\n        this.resetStore = this.resetStore.bind(this);\n        this.reFetchObservableQueries = this.reFetchObservableQueries.bind(this);\n        this.version = version;\n        this.localState = new LocalState({\n            cache: cache,\n            client: this,\n            resolvers: resolvers,\n            fragmentMatcher: fragmentMatcher,\n        });\n        this.queryManager = new QueryManager({\n            cache: this.cache,\n            link: this.link,\n            defaultOptions: this.defaultOptions,\n            defaultContext: defaultContext,\n            documentTransform: documentTransform,\n            queryDeduplication: queryDeduplication,\n            ssrMode: ssrMode,\n            dataMasking: !!dataMasking,\n            clientAwareness: {\n                name: (_b = clientAwareness === null || clientAwareness === void 0 ? void 0 : clientAwareness.name) !== null && _b !== void 0 ? _b : clientAwarenessName,\n                version: (_c = clientAwareness === null || clientAwareness === void 0 ? void 0 : clientAwareness.version) !== null && _c !== void 0 ? _c : clientAwarenessVersion,\n            },\n            localState: this.localState,\n            assumeImmutableResults: assumeImmutableResults,\n            onBroadcast: this.devtoolsConfig.enabled ?\n                function () {\n                    if (_this.devToolsHookCb) {\n                        _this.devToolsHookCb({\n                            action: {},\n                            state: {\n                                queries: _this.queryManager.getQueryStore(),\n                                mutations: _this.queryManager.mutationStore || {},\n                            },\n                            dataWithOptimisticResults: _this.cache.extract(true),\n                        });\n                    }\n                }\n                : void 0,\n        });\n        if (this.devtoolsConfig.enabled)\n            this.connectToDevTools();\n    }\n    Object.defineProperty(ApolloClient.prototype, \"prioritizeCacheValues\", {\n        /**\n         * Whether to prioritize cache values over network results when `query` or `watchQuery` is called.\n         * This will essentially turn a `\"network-only\"` or `\"cache-and-network\"` fetchPolicy into a `\"cache-first\"` fetchPolicy,\n         * but without influencing the `fetchPolicy` of the created `ObservableQuery` long-term.\n         *\n         * This can e.g. be used to prioritize the cache during the first render after SSR.\n         */\n        get: function () {\n            return this.disableNetworkFetches;\n        },\n        set: function (value) {\n            this.disableNetworkFetches = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ApolloClient.prototype.connectToDevTools = function () {\n        if (typeof window === \"undefined\") {\n            return;\n        }\n        var windowWithDevTools = window;\n        var devtoolsSymbol = Symbol.for(\"apollo.devtools\");\n        (windowWithDevTools[devtoolsSymbol] =\n            windowWithDevTools[devtoolsSymbol] || []).push(this);\n        windowWithDevTools.__APOLLO_CLIENT__ = this;\n        /**\n         * Suggest installing the devtools for developers who don't have them\n         */\n        if (!hasSuggestedDevtools && globalThis.__DEV__ !== false) {\n            hasSuggestedDevtools = true;\n            if (window.document &&\n                window.top === window.self &&\n                /^(https?|file):$/.test(window.location.protocol)) {\n                setTimeout(function () {\n                    if (!window.__APOLLO_DEVTOOLS_GLOBAL_HOOK__) {\n                        var nav = window.navigator;\n                        var ua = nav && nav.userAgent;\n                        var url = void 0;\n                        if (typeof ua === \"string\") {\n                            if (ua.indexOf(\"Chrome/\") > -1) {\n                                url =\n                                    \"https://chrome.google.com/webstore/detail/\" +\n                                        \"apollo-client-developer-t/jdkknkkbebbapilgoeccciglkfbmbnfm\";\n                            }\n                            else if (ua.indexOf(\"Firefox/\") > -1) {\n                                url =\n                                    \"https://addons.mozilla.org/en-US/firefox/addon/apollo-developer-tools/\";\n                            }\n                        }\n                        if (url) {\n                            globalThis.__DEV__ !== false && invariant.log(\"Download the Apollo DevTools for a better development \" +\n                                \"experience: %s\", url);\n                        }\n                    }\n                }, 10000);\n            }\n        }\n    };\n    Object.defineProperty(ApolloClient.prototype, \"documentTransform\", {\n        /**\n         * The `DocumentTransform` used to modify GraphQL documents before a request\n         * is made. If a custom `DocumentTransform` is not provided, this will be the\n         * default document transform.\n         */\n        get: function () {\n            return this.queryManager.documentTransform;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Call this method to terminate any active client processes, making it safe\n     * to dispose of this `ApolloClient` instance.\n     */\n    ApolloClient.prototype.stop = function () {\n        this.queryManager.stop();\n    };\n    /**\n     * This watches the cache store of the query according to the options specified and\n     * returns an `ObservableQuery`. We can subscribe to this `ObservableQuery` and\n     * receive updated results through an observer when the cache store changes.\n     *\n     * Note that this method is not an implementation of GraphQL subscriptions. Rather,\n     * it uses Apollo's store in order to reactively deliver updates to your query results.\n     *\n     * For example, suppose you call watchQuery on a GraphQL query that fetches a person's\n     * first and last name and this person has a particular object identifier, provided by\n     * dataIdFromObject. Later, a different query fetches that same person's\n     * first and last name and the first name has now changed. Then, any observers associated\n     * with the results of the first query will be updated with a new result object.\n     *\n     * Note that if the cache does not change, the subscriber will *not* be notified.\n     *\n     * See [here](https://medium.com/apollo-stack/the-concepts-of-graphql-bc68bd819be3#.3mb0cbcmc) for\n     * a description of store reactivity.\n     */\n    ApolloClient.prototype.watchQuery = function (options) {\n        if (this.defaultOptions.watchQuery) {\n            options = mergeOptions(this.defaultOptions.watchQuery, options);\n        }\n        // XXX Overwriting options is probably not the best way to do this long term...\n        if (this.disableNetworkFetches &&\n            (options.fetchPolicy === \"network-only\" ||\n                options.fetchPolicy === \"cache-and-network\")) {\n            options = __assign(__assign({}, options), { fetchPolicy: \"cache-first\" });\n        }\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"client.watchQuery\");\n            warnRemovedOption(options, \"partialRefetch\", \"client.watchQuery\");\n        }\n        return this.queryManager.watchQuery(options);\n    };\n    /**\n     * This resolves a single query according to the options specified and\n     * returns a `Promise` which is either resolved with the resulting data\n     * or rejected with an error.\n     *\n     * @param options - An object of type `QueryOptions` that allows us to\n     * describe how this query should be treated e.g. whether it should hit the\n     * server at all or just resolve from the cache, etc.\n     */\n    ApolloClient.prototype.query = function (options) {\n        if (this.defaultOptions.query) {\n            options = mergeOptions(this.defaultOptions.query, options);\n        }\n        invariant(options.fetchPolicy !== \"cache-and-network\", 18);\n        if (this.disableNetworkFetches && options.fetchPolicy === \"network-only\") {\n            options = __assign(__assign({}, options), { fetchPolicy: \"cache-first\" });\n        }\n        if (globalThis.__DEV__ !== false) {\n            warnRemovedOption(options, \"canonizeResults\", \"client.query\");\n            warnRemovedOption(options, \"notifyOnNetworkStatusChange\", \"client.query\", \"This option does not affect `client.query` and can be safely removed.\");\n            if (options.fetchPolicy === \"standby\") {\n                globalThis.__DEV__ !== false && invariant.warn(19);\n            }\n        }\n        return this.queryManager.query(options);\n    };\n    /**\n     * This resolves a single mutation according to the options specified and returns a\n     * Promise which is either resolved with the resulting data or rejected with an\n     * error. In some cases both `data` and `errors` might be undefined, for example\n     * when `errorPolicy` is set to `'ignore'`.\n     *\n     * It takes options as an object with the following keys and values:\n     */\n    ApolloClient.prototype.mutate = function (options) {\n        if (this.defaultOptions.mutate) {\n            options = mergeOptions(this.defaultOptions.mutate, options);\n        }\n        return this.queryManager.mutate(options);\n    };\n    /**\n     * This subscribes to a graphql subscription according to the options specified and returns an\n     * `Observable` which either emits received data or an error.\n     */\n    ApolloClient.prototype.subscribe = function (options) {\n        var _this = this;\n        var id = this.queryManager.generateQueryId();\n        return this.queryManager\n            .startGraphQLSubscription(options)\n            .map(function (result) { return (__assign(__assign({}, result), { data: _this.queryManager.maskOperation({\n                document: options.query,\n                data: result.data,\n                fetchPolicy: options.fetchPolicy,\n                id: id,\n            }) })); });\n    };\n    /**\n     * Tries to read some data from the store in the shape of the provided\n     * GraphQL query without making a network request. This method will start at\n     * the root query. To start at a specific id returned by `dataIdFromObject`\n     * use `readFragment`.\n     *\n     * @param optimistic - Set to `true` to allow `readQuery` to return\n     * optimistic results. Is `false` by default.\n     */\n    ApolloClient.prototype.readQuery = function (options, optimistic) {\n        if (optimistic === void 0) { optimistic = false; }\n        return this.cache.readQuery(options, optimistic);\n    };\n    /**\n     * Watches the cache store of the fragment according to the options specified\n     * and returns an `Observable`. We can subscribe to this\n     * `Observable` and receive updated results through an\n     * observer when the cache store changes.\n     *\n     * You must pass in a GraphQL document with a single fragment or a document\n     * with multiple fragments that represent what you are reading. If you pass\n     * in a document with multiple fragments then you must also specify a\n     * `fragmentName`.\n     *\n     * @since 3.10.0\n     * @param options - An object of type `WatchFragmentOptions` that allows\n     * the cache to identify the fragment and optionally specify whether to react\n     * to optimistic updates.\n     */\n    ApolloClient.prototype.watchFragment = function (options) {\n        var _a;\n        return this.cache.watchFragment(__assign(__assign({}, options), (_a = {}, _a[Symbol.for(\"apollo.dataMasking\")] = this.queryManager.dataMasking, _a)));\n    };\n    /**\n     * Tries to read some data from the store in the shape of the provided\n     * GraphQL fragment without making a network request. This method will read a\n     * GraphQL fragment from any arbitrary id that is currently cached, unlike\n     * `readQuery` which will only read from the root query.\n     *\n     * You must pass in a GraphQL document with a single fragment or a document\n     * with multiple fragments that represent what you are reading. If you pass\n     * in a document with multiple fragments then you must also specify a\n     * `fragmentName`.\n     *\n     * @param optimistic - Set to `true` to allow `readFragment` to return\n     * optimistic results. Is `false` by default.\n     */\n    ApolloClient.prototype.readFragment = function (options, optimistic) {\n        if (optimistic === void 0) { optimistic = false; }\n        return this.cache.readFragment(options, optimistic);\n    };\n    /**\n     * Writes some data in the shape of the provided GraphQL query directly to\n     * the store. This method will start at the root query. To start at a\n     * specific id returned by `dataIdFromObject` then use `writeFragment`.\n     */\n    ApolloClient.prototype.writeQuery = function (options) {\n        var ref = this.cache.writeQuery(options);\n        if (options.broadcast !== false) {\n            this.queryManager.broadcastQueries();\n        }\n        return ref;\n    };\n    /**\n     * Writes some data in the shape of the provided GraphQL fragment directly to\n     * the store. This method will write to a GraphQL fragment from any arbitrary\n     * id that is currently cached, unlike `writeQuery` which will only write\n     * from the root query.\n     *\n     * You must pass in a GraphQL document with a single fragment or a document\n     * with multiple fragments that represent what you are writing. If you pass\n     * in a document with multiple fragments then you must also specify a\n     * `fragmentName`.\n     */\n    ApolloClient.prototype.writeFragment = function (options) {\n        var ref = this.cache.writeFragment(options);\n        if (options.broadcast !== false) {\n            this.queryManager.broadcastQueries();\n        }\n        return ref;\n    };\n    ApolloClient.prototype.__actionHookForDevTools = function (cb) {\n        this.devToolsHookCb = cb;\n    };\n    ApolloClient.prototype.__requestRaw = function (payload) {\n        return execute(this.link, payload);\n    };\n    /**\n     * Resets your entire store by clearing out your cache and then re-executing\n     * all of your active queries. This makes it so that you may guarantee that\n     * there is no data left in your store from a time before you called this\n     * method.\n     *\n     * `resetStore()` is useful when your user just logged out. You’ve removed the\n     * user session, and you now want to make sure that any references to data you\n     * might have fetched while the user session was active is gone.\n     *\n     * It is important to remember that `resetStore()` *will* refetch any active\n     * queries. This means that any components that might be mounted will execute\n     * their queries again using your network interface. If you do not want to\n     * re-execute any queries then you should make sure to stop watching any\n     * active queries.\n     */\n    ApolloClient.prototype.resetStore = function () {\n        var _this = this;\n        return Promise.resolve()\n            .then(function () {\n            return _this.queryManager.clearStore({\n                discardWatches: false,\n            });\n        })\n            .then(function () { return Promise.all(_this.resetStoreCallbacks.map(function (fn) { return fn(); })); })\n            .then(function () { return _this.reFetchObservableQueries(); });\n    };\n    /**\n     * Remove all data from the store. Unlike `resetStore`, `clearStore` will\n     * not refetch any active queries.\n     */\n    ApolloClient.prototype.clearStore = function () {\n        var _this = this;\n        return Promise.resolve()\n            .then(function () {\n            return _this.queryManager.clearStore({\n                discardWatches: true,\n            });\n        })\n            .then(function () { return Promise.all(_this.clearStoreCallbacks.map(function (fn) { return fn(); })); });\n    };\n    /**\n     * Allows callbacks to be registered that are executed when the store is\n     * reset. `onResetStore` returns an unsubscribe function that can be used\n     * to remove registered callbacks.\n     */\n    ApolloClient.prototype.onResetStore = function (cb) {\n        var _this = this;\n        this.resetStoreCallbacks.push(cb);\n        return function () {\n            _this.resetStoreCallbacks = _this.resetStoreCallbacks.filter(function (c) { return c !== cb; });\n        };\n    };\n    /**\n     * Allows callbacks to be registered that are executed when the store is\n     * cleared. `onClearStore` returns an unsubscribe function that can be used\n     * to remove registered callbacks.\n     */\n    ApolloClient.prototype.onClearStore = function (cb) {\n        var _this = this;\n        this.clearStoreCallbacks.push(cb);\n        return function () {\n            _this.clearStoreCallbacks = _this.clearStoreCallbacks.filter(function (c) { return c !== cb; });\n        };\n    };\n    /**\n     * Refetches all of your active queries.\n     *\n     * `reFetchObservableQueries()` is useful if you want to bring the client back to proper state in case of a network outage\n     *\n     * It is important to remember that `reFetchObservableQueries()` *will* refetch any active\n     * queries. This means that any components that might be mounted will execute\n     * their queries again using your network interface. If you do not want to\n     * re-execute any queries then you should make sure to stop watching any\n     * active queries.\n     * Takes optional parameter `includeStandby` which will include queries in standby-mode when refetching.\n     */\n    ApolloClient.prototype.reFetchObservableQueries = function (includeStandby) {\n        return this.queryManager.reFetchObservableQueries(includeStandby);\n    };\n    /**\n     * Refetches specified active queries. Similar to \"reFetchObservableQueries()\" but with a specific list of queries.\n     *\n     * `refetchQueries()` is useful for use cases to imperatively refresh a selection of queries.\n     *\n     * It is important to remember that `refetchQueries()` *will* refetch specified active\n     * queries. This means that any components that might be mounted will execute\n     * their queries again using your network interface. If you do not want to\n     * re-execute any queries then you should make sure to stop watching any\n     * active queries.\n     */\n    ApolloClient.prototype.refetchQueries = function (options) {\n        var map = this.queryManager.refetchQueries(options);\n        var queries = [];\n        var results = [];\n        map.forEach(function (result, obsQuery) {\n            queries.push(obsQuery);\n            results.push(result);\n        });\n        var result = Promise.all(results);\n        // In case you need the raw results immediately, without awaiting\n        // Promise.all(results):\n        result.queries = queries;\n        result.results = results;\n        // If you decide to ignore the result Promise because you're using\n        // result.queries and result.results instead, you shouldn't have to worry\n        // about preventing uncaught rejections for the Promise.all result.\n        result.catch(function (error) {\n            globalThis.__DEV__ !== false && invariant.debug(20, error);\n        });\n        return result;\n    };\n    /**\n     * Get all currently active `ObservableQuery` objects, in a `Map` keyed by\n     * query ID strings.\n     *\n     * An \"active\" query is one that has observers and a `fetchPolicy` other than\n     * \"standby\" or \"cache-only\".\n     *\n     * You can include all `ObservableQuery` objects (including the inactive ones)\n     * by passing \"all\" instead of \"active\", or you can include just a subset of\n     * active queries by passing an array of query names or DocumentNode objects.\n     */\n    ApolloClient.prototype.getObservableQueries = function (include) {\n        if (include === void 0) { include = \"active\"; }\n        return this.queryManager.getObservableQueries(include);\n    };\n    /**\n     * Exposes the cache's complete state, in a serializable format for later restoration.\n     */\n    ApolloClient.prototype.extract = function (optimistic) {\n        return this.cache.extract(optimistic);\n    };\n    /**\n     * Replaces existing state in the cache (if any) with the values expressed by\n     * `serializedState`.\n     *\n     * Called when hydrating a cache (server side rendering, or offline storage),\n     * and also (potentially) during hot reloads.\n     */\n    ApolloClient.prototype.restore = function (serializedState) {\n        return this.cache.restore(serializedState);\n    };\n    /**\n     * Add additional local resolvers.\n     *\n     * @deprecated `addResolvers` will been removed in Apollo Client 4.0. It is\n     * safe to continue using this method in Apollo Client 3.x.\n     *\n     * **Recommended now**\n     *\n     * No action needed\n     *\n     * **When upgrading**\n     *\n     * Use `client.localState.addResolvers(resolvers)`. Alternatively, store\n     * the `LocalState` instance in a separate variable and call `addResolvers` on\n     * that.\n     */\n    ApolloClient.prototype.addResolvers = function (resolvers) {\n        this.localState.addResolvers(resolvers);\n    };\n    /**\n     * Set (override existing) local resolvers.\n     *\n     * @deprecated `setResolvers` will been removed in Apollo Client 4.0. It is\n     * safe to continue using this method in Apollo Client 3.x.\n     *\n     * **Recommended now**\n     *\n     * If possible, stop using the `setResolvers` method.\n     *\n     * **When upgrading**\n     *\n     * Remove the use of `setResolvers`.\n     */\n    ApolloClient.prototype.setResolvers = function (resolvers) {\n        this.localState.setResolvers(resolvers);\n    };\n    /**\n     * Get all registered local resolvers.\n     *\n     * @deprecated `getResolvers` will be removed in Apollo Client 4.0. It is\n     * safe to continue using this method in Apollo Client 3.x.\n     *\n     * **Recommended now**\n     *\n     * If possible, stop using the `getResolvers` method.\n     *\n     * **When upgrading**\n     *\n     * Remove the use of `getResolvers`.\n     */\n    ApolloClient.prototype.getResolvers = function () {\n        return this.localState.getResolvers();\n    };\n    /**\n     * Set a custom local state fragment matcher.\n     *\n     * @deprecated Custom fragment matchers will no longer be supported in Apollo\n     * Client 4.0 and has been replaced by `cache.fragmentMatches`. It is safe to\n     * continue using `setLocalStateFragmentMatcher` in Apollo Client 3.x.\n     *\n     * **Recommended now**\n     *\n     * No action needed\n     *\n     * **When upgrading**\n     *\n     * Leverage `possibleTypes` with `InMemoryCache` to ensure fragments match\n     * correctly. Ensure `possibleTypes` include local types if needed. If working\n     * with a 3rd party cache implementation, ensure the 3rd party cache implements\n     * the `cache.fragmentMatches` method. This function should no longer be used.\n     */\n    ApolloClient.prototype.setLocalStateFragmentMatcher = function (fragmentMatcher) {\n        this.localState.setFragmentMatcher(fragmentMatcher);\n    };\n    /**\n     * Define a new ApolloLink (or link chain) that Apollo Client will use.\n     */\n    ApolloClient.prototype.setLink = function (newLink) {\n        this.link = this.queryManager.link = newLink;\n    };\n    Object.defineProperty(ApolloClient.prototype, \"defaultContext\", {\n        get: function () {\n            return this.queryManager.defaultContext;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ApolloClient;\n}());\nexport { ApolloClient };\nif (globalThis.__DEV__ !== false) {\n    ApolloClient.prototype.getMemoryInternals = getApolloClientMemoryInternals;\n}\n//# sourceMappingURL=ApolloClient.js.map","import { __assign } from \"tslib\";\nimport { parse } from 'graphql';\nvar docCache = new Map();\nvar fragmentSourceMap = new Map();\nvar printFragmentWarnings = true;\nvar experimentalFragmentVariables = false;\nfunction normalize(string) {\n    return string.replace(/[\\s,]+/g, ' ').trim();\n}\nfunction cacheKeyFromLoc(loc) {\n    return normalize(loc.source.body.substring(loc.start, loc.end));\n}\nfunction processFragments(ast) {\n    var seenKeys = new Set();\n    var definitions = [];\n    ast.definitions.forEach(function (fragmentDefinition) {\n        if (fragmentDefinition.kind === 'FragmentDefinition') {\n            var fragmentName = fragmentDefinition.name.value;\n            var sourceKey = cacheKeyFromLoc(fragmentDefinition.loc);\n            var sourceKeySet = fragmentSourceMap.get(fragmentName);\n            if (sourceKeySet && !sourceKeySet.has(sourceKey)) {\n                if (printFragmentWarnings) {\n                    console.warn(\"Warning: fragment with name \" + fragmentName + \" already exists.\\n\"\n                        + \"graphql-tag enforces all fragment names across your application to be unique; read more about\\n\"\n                        + \"this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names\");\n                }\n            }\n            else if (!sourceKeySet) {\n                fragmentSourceMap.set(fragmentName, sourceKeySet = new Set);\n            }\n            sourceKeySet.add(sourceKey);\n            if (!seenKeys.has(sourceKey)) {\n                seenKeys.add(sourceKey);\n                definitions.push(fragmentDefinition);\n            }\n        }\n        else {\n            definitions.push(fragmentDefinition);\n        }\n    });\n    return __assign(__assign({}, ast), { definitions: definitions });\n}\nfunction stripLoc(doc) {\n    var workSet = new Set(doc.definitions);\n    workSet.forEach(function (node) {\n        if (node.loc)\n            delete node.loc;\n        Object.keys(node).forEach(function (key) {\n            var value = node[key];\n            if (value && typeof value === 'object') {\n                workSet.add(value);\n            }\n        });\n    });\n    var loc = doc.loc;\n    if (loc) {\n        delete loc.startToken;\n        delete loc.endToken;\n    }\n    return doc;\n}\nfunction parseDocument(source) {\n    var cacheKey = normalize(source);\n    if (!docCache.has(cacheKey)) {\n        var parsed = parse(source, {\n            experimentalFragmentVariables: experimentalFragmentVariables,\n            allowLegacyFragmentVariables: experimentalFragmentVariables\n        });\n        if (!parsed || parsed.kind !== 'Document') {\n            throw new Error('Not a valid GraphQL document.');\n        }\n        docCache.set(cacheKey, stripLoc(processFragments(parsed)));\n    }\n    return docCache.get(cacheKey);\n}\nexport function gql(literals) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    if (typeof literals === 'string') {\n        literals = [literals];\n    }\n    var result = literals[0];\n    args.forEach(function (arg, i) {\n        if (arg && arg.kind === 'Document') {\n            result += arg.loc.source.body;\n        }\n        else {\n            result += arg;\n        }\n        result += literals[i + 1];\n    });\n    return parseDocument(result);\n}\nexport function resetCaches() {\n    docCache.clear();\n    fragmentSourceMap.clear();\n}\nexport function disableFragmentWarnings() {\n    printFragmentWarnings = false;\n}\nexport function enableExperimentalFragmentVariables() {\n    experimentalFragmentVariables = true;\n}\nexport function disableExperimentalFragmentVariables() {\n    experimentalFragmentVariables = false;\n}\nvar extras = {\n    gql: gql,\n    resetCaches: resetCaches,\n    disableFragmentWarnings: disableFragmentWarnings,\n    enableExperimentalFragmentVariables: enableExperimentalFragmentVariables,\n    disableExperimentalFragmentVariables: disableExperimentalFragmentVariables\n};\n(function (gql_1) {\n    gql_1.gql = extras.gql, gql_1.resetCaches = extras.resetCaches, gql_1.disableFragmentWarnings = extras.disableFragmentWarnings, gql_1.enableExperimentalFragmentVariables = extras.enableExperimentalFragmentVariables, gql_1.disableExperimentalFragmentVariables = extras.disableExperimentalFragmentVariables;\n})(gql || (gql = {}));\ngql[\"default\"] = gql;\nexport default gql;\n//# sourceMappingURL=index.js.map","import { FunctionComponent, ReactNode } from \"react\";\nimport { WorkflowManager } from \"./WorkflowManager\";\nimport type { RenderableContextService } from \"@repo/preview\";\nimport type { ConversionConfiguration, ThemeInstallConfigurationGraphQl } from \"@repo/types\";\nimport { CanvasCommand } from \"./command\";\n\nexport enum AssetType {\n    Data = \"Data\",\n    Font = \"Font\",\n    Frame = \"Frame\",\n    Illustration = \"Illustration\",\n    Image = \"Image\",\n    Model = \"Model\",\n    Material = \"Material\",\n    Color = \"Color\",\n    QuestionnaireCollateral = \"QuestionnaireCollateral\",\n    RequestCollateral = \"RequestCollateral\",\n    SignupCollateral = \"SignupCollateral\",\n    Video = \"Video\",\n    ColorProfile = \"ColorProfile\",\n    Environment = \"Environment\",\n}\n\nexport interface Asset {\n    /**\n     * The path of the asset within the bucket.\n     */\n    key?: string;\n\n    /**\n     * The name of this asset, the file name by default, otherwise a name set by the user.\n     */\n    name?: string;\n\n    /**\n     * The time that this asset was uploaded.\n     */\n    createdAt?: string;\n\n    /**\n     * The ID of this asset's license.\n     */\n    licenseId?: string;\n\n    /**\n     * The content type registered with the bucket.\n     */\n    mimeType?: string;\n\n    /**\n     * The ID of the person that uploaded this asset.\n     */\n    ownerId?: string;\n\n    /**\n     * The price to use this asset.\n     */\n    price?: number;\n\n    /**\n     * The asset type being dealt with.\n     */\n    type?: AssetType;\n\n    /**\n     * True when this asset is publicly available to anyone.\n     */\n    public?: boolean;\n\n    /**\n     * All versions for this asset, including the \"latest\" one which is the default and represented\n     * by the key of the asset itself.\n     */\n    objectVersions?: AssetObjectVersion[];\n\n    /**\n     * A list of tags for organisational purposes.\n     */\n    tags?: AssetTag[];\n\n    hubLink?: string;\n\n    fileLink?: string;\n\n    newVersionLink?: string;\n\n    invalidateLink?: string;\n\n    /**\n     * @deprecated Use getTransformedAssetURL instead for getting URLs for specific use cases such as thumbnails and previews.\n     * NOTE: Currently svgs from PDF files & video transcoding still require this field.\n     */\n    versions?: AssetVersion[];\n\n    /**\n     * A list of historical versions of this asset, which may be used for version browsing and reverting to previous versions.\n     */\n    history?: AssetHistory[];\n\n    metadata?: AssetMetadata[];\n\n    assetConfiguration?: AssetConfiguration;\n}\n\nexport interface AssetHistory {\n    id: string;\n    versionId: string;\n    size: number;\n    createdAt: string;\n}\n\nexport interface AssetConfiguration {\n    colorOption?: OptionResource;\n    channelNumbers: {\n        id: string;\n        number: number;\n    }[];\n    defaultColorVariants: {\n        channelNumber: number;\n        variant: VariantResource;\n    }[];\n}\n\n/**\n * A tag for organisation of assets\n */\nexport interface AssetTag {\n    /**\n     * A unique ID.\n     */\n    id: string;\n    /**\n     * The human friendly display name of the tag.\n     */\n    name: string;\n    /**\n     * The key of the asset the tag is associated to.\n     */\n    assetKey: string;\n    /**\n     * The partner that owns that asset & tag.\n     */\n    partnerId: string;\n}\n\ninterface AssetMetadata {\n    key: string;\n    value: string;\n}\n\ninterface AssetVersion {\n    name: string;\n\n    link: string;\n}\n\n/**\n * An object version is a snapshow of an asset at a given point in time. Each time\n * the user updates the file associated to an asset a new object version is created.\n * Users can then see a timeline of all object versions and switch between them.\n */\nexport interface AssetObjectVersion {\n    /**\n     * The size of the file in bytes.\n     */\n    size: number;\n    /**\n     * A timestamp for when this version was created.\n     */\n    timestamp: string;\n    /**\n     * The id of the version, this is required in cases where we want to perform\n     * specific operations on a version such as making it the latest one or deleting it.\n     */\n    versionId: string;\n    /**\n     * The url that this asset should be called on when we want to get it,\n     * instead of the base key. This key is\n     */\n    versionedKey: string;\n}\n\nexport interface Step<T extends AnyStepData = AnyStepData> {\n    conditions?: Condition[];\n    data: T;\n    globalPropertyAspectConfigurations?: GlobalPropertyAspectConfiguration[];\n    conversionConfigurationFieldLinks?: ConversionConfigurationLink[];\n    helpText?: string;\n    mandatory?: boolean;\n    relevantPanelName?: string;\n    silent?: boolean;\n    option?: OptionResource;\n    overrideDefaultVariantId?: string;\n    optionId?: string;\n    stepName: string;\n    stepTitle: string;\n    tags?: string[];\n    type: StepType;\n}\n\nexport interface GlobalPropertyAspectConfiguration {\n    aspectName?: string;\n    globalPropertyConfigurationId?: string;\n}\n\nexport interface ConversionConfigurationLink {\n    identifier?: string;\n    conversionConfigurationId?: string;\n}\n\nexport interface GlobalPropertyConfiguration {\n    id: string;\n    aspects: GlobalPropertyConfigurationAspect[];\n}\n\nexport enum GlobalPropertyConfigurationConditionMode {\n    AND = \"AND\",\n    OR = \"OR\",\n}\n\nexport interface GlobalPropertyConfigurationAspect {\n    name: string;\n    type: AspectType;\n    title: string;\n    description: string;\n    entityId?: string;\n    conditions?: GlobalPropertyConfigurationAspectCondition[];\n    conditionMode?: GlobalPropertyConfigurationConditionMode;\n    data?: GlobalPropertyConfigurationAspectData;\n    mandatory?: boolean;\n    silent?: boolean;\n}\n\nexport interface GlobalPropertyConfigurationAspectData {\n    fileUpload?: GlobalPropertyConfigurationAspectFileUploadData;\n    text?: GlobalPropertyConfigurationAspectTextData;\n}\n\nexport interface GlobalPropertyConfigurationAspectFileUploadData {\n    colorPickerEnabled?: boolean;\n    pmsPickerEnabled?: boolean;\n    colorOptionId?: string;\n}\n\nexport interface GlobalPropertyConfigurationAspectTextData {\n    templatingEnabled?: boolean;\n}\n\nexport interface GlobalPropertyConfigurationAspectCondition {\n    targetAspectName?: string;\n    action: AspectConditionAction;\n    requiredVariantSelections: string[];\n}\n\nexport enum AspectConditionAction {\n    Show = \"Show\",\n}\n\nexport enum AspectType {\n    FileUpload = \"FileUpload\",\n    Option = \"Option\",\n    ColorOption = \"ColorOption\",\n    Text = \"Text\",\n}\n\nexport enum StepType {\n    Information = \"Information\",\n    Bulk = \"Bulk\",\n    DigitalContent = \"DigitalContent\",\n    Finish = \"Finish\",\n    Frame = \"Frame\",\n    Illustration = \"Illustration\",\n    Introduction = \"Introduction\",\n    Material = \"Material\",\n    Model = \"Model\",\n    Module = \"Module\",\n    Picture = \"Picture\",\n    /**\n     * @deprecated Use Frame instead.\n     */\n    Photo = \"Photo\",\n    ProductOverlay = \"ProductOverlay\",\n    Question = \"Question\",\n    Shape = \"Shape\",\n    SilentIllustration = \"SilentIllustration\",\n    Text = \"Text\",\n}\n\nexport interface StepAspect {\n    stepName: string;\n    stepType: StepType;\n    aspectType: StepAspectType;\n}\n\nexport enum StepAspectType {\n    Color = \"Color\",\n    Colors = \"Colors\",\n    Selection = \"Selection\",\n    Selections = \"Selections\",\n    Text = \"Text\",\n    Upload = \"Upload\",\n}\n\nexport interface Region {\n    top: number;\n    left: number;\n    width: number;\n    height: number;\n    layer?: number;\n    layerIndex?: number;\n    rotation: number;\n    panelId: string;\n    immutable?: boolean;\n    adjustmentBoundary?: { x: number; y: number; height: number; width: number };\n}\n\ninterface RequiredVariantMetafield {\n    variantMetafieldConfigurationId?: string;\n    variantMetafieldValue?: string;\n}\n\nexport interface Condition {\n    requiredVariantMetafields?: RequiredVariantMetafield[];\n    requiredVariantSelections: string[];\n    action: string;\n    type?: string;\n    targetStepName: string;\n}\n\ninterface StepAsset {\n    key: string;\n    previewKey?: string;\n}\n\nexport interface OptionResource {\n    id?: string;\n    localId?: string;\n    name: string;\n    type?: string;\n    variants?: VariantResource[];\n    defaultVariant?: Pick<VariantResource, \"id\">;\n    workflowId?: string;\n    public?: boolean;\n    displayType?: string;\n    colorProfile?: Asset;\n    integrationOptions?: IntegrationOptionResource[];\n}\n\nexport interface VariantResource {\n    id?: string;\n    name: string;\n    enabled: boolean;\n    priceModifier: number;\n\n    asset?: Asset;\n    material?: MaterialResource;\n    thumbnail?: Asset;\n\n    color?: string;\n    localId?: string;\n    default?: boolean;\n    namedColor?: string;\n\n    option?: OptionResource;\n\n    category?: string;\n}\n\nexport interface IntegrationOptionResource {\n    id?: string;\n    localId?: string;\n    integrationId: string;\n    externalProductId?: string;\n}\n\n/**\n * Represents a material resource that can be additively applied to\n * a material targeted in the scene.\n */\nexport type MaterialResource = {\n    /**\n     * A unique identified for this material.\n     */\n    id: string;\n    /**\n     * The name of this material\n     */\n    name: string;\n    /**\n     * Defines the base color of a surface before any other calculations are made.\n     */\n    albedoMapKey?: string;\n    /**\n     * Defines the transparency of a surface.\n     */\n    alphaMapKey?: string;\n    /**\n     * Defines shadowing on a surface.\n     */\n    ambientMapKey?: string;\n    /**\n     * Defines the amount of light being emitted from a surface.\n     */\n    emissionMapKey?: string;\n    /**\n     * Identical to roughness.\n     */\n    metallicMapKey?: string;\n    /**\n     * Defines the direction light will bounce in when it hits a point on a surface.\n     */\n    normalMapKey?: string;\n    /**\n     * Used to define how smooth a surface is.\n     */\n    roughnessMapKey?: string;\n    /**\n     * Used to define refraction of light on a surface.\n     */\n    refractionMapKey?: string;\n    /**\n     * The intensity of refraction, when refraction is enabled via a texture.\n     */\n    refractionIntensity?: number;\n    /**\n     * Use to define reflection of light on a surface.\n     */\n    reflectionMapKey?: string;\n    /**\n     * The intensity of reflection, when reflection is enabled via a texture.\n     */\n    reflectionIntensity?: number;\n    /**\n     * The rotation of the reflection map (around the up axis, in degrees), when reflection is enabled via a texture.\n     */\n    reflectionRotation?: number;\n    /**\n     * When enabled the material will be displayed with a clearcoat affect for simulating coated plastic surfaces.\n     */\n    clearCoat: MaterialEffectMode;\n    /**\n     * Index of refraction when clear coat is enabled.\n     */\n    clearCoatIOR?: number;\n    /**\n     * The date that this material resource was created\n     */\n    createdAt: string;\n    /**\n     * The date that this material resource was last updated.\n     */\n    updatedAt: string;\n};\n\n/**\n * Used to specify the behavior of a material effect such as clearcoat, sheen and translucency.\n */\nexport enum MaterialEffectMode {\n    /**\n     * When a material variant effect specifies 'None' the effect doesn't change in any way. This is the default behavior.\n     */\n    None = \"None\",\n    /**\n     * When a material variant effect specifies 'RemoveWhenSelected' the effect is removed.\n     */\n    RemoveWhenSelected = \"RemoveWhenSelected\",\n    /**\n     * When a material variant effect specifies 'ApplyWhenSelected' the effect is enabled.\n     */\n    ApplyWhenSelected = \"ApplyWhenSelected\",\n}\n\nexport type AnyStepData =\n    | InformationStepData\n    | BulkStepData\n    | DigitalContentStepData\n    | FinalizeStepData\n    | FrameStepData\n    | IllustrationStepData\n    | MaterialStepData\n    | ModelStepData\n    | ModuleStepData\n    | PictureStepData\n    | QuestionStepData\n    | ShapeStepData\n    | SilentStepData\n    | TextStepData;\n\nexport interface Animatable {\n    lookAtAnimation?: CameraAnimation;\n    modelAnimation?: ModelAnimation;\n}\n\nexport interface BulkStepData extends Animatable {\n    aspects: StepAspect[];\n}\n\nexport interface InformationStepData extends Animatable, Placeable {\n    content: string;\n}\n\nexport interface DigitalContentStepData extends Animatable, Placeable {\n    baseUrl: string;\n    varyUpload?: boolean;\n}\n\nexport interface FrameStepData extends Animatable, Placeable, Colorable {\n    hideSelectionInCart?: boolean;\n    hideImageInCart?: boolean;\n    colorPickerEnabled?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    displayImageOnFinishStep?: boolean;\n    disablePlaceholder?: boolean;\n    enableVariantCategories?: boolean;\n    initialZoomLevel?: number;\n    markSelectionAsCustomField?: boolean;\n    markImageAsCustomField?: boolean;\n    shouldVectorize?: boolean;\n    vectorizeMaxColors?: number;\n    vectorizationMinimumPixelThreshold?: number;\n    maxColors?: number;\n    focalBlur?: boolean;\n    focalBlurRadius?: number;\n    focalBlurStrength?: number;\n    forceImageCover?: boolean;\n    overlayImageKey?: string;\n    placeholderImageKey?: string;\n    placeholderImageUrl?: string;\n    varySelection?: boolean;\n    varyUpload?: boolean;\n    whitelistedExtensions: string[];\n}\n\nexport interface IllustrationStepData extends Animatable, Placeable, Colorable {\n    hideSelectionInCart?: boolean;\n    hideColorsInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    displayColorsOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    enableVariantSearch?: boolean;\n    markSelectionAsCustomField?: boolean;\n    markColorsAsCustomField?: boolean;\n    assetKeys?: string[];\n    assets?: StepAsset[];\n    defaultAssetKey?: string;\n    colorPickerEnabled?: boolean;\n    pmsPickerEnabled?: boolean;\n    varySelection?: boolean;\n    varyColors?: boolean;\n}\n\nexport interface MaterialStepData extends Animatable {\n    hideSelectionInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    markSelectionAsCustomField?: boolean;\n    targetMaterials: string[];\n    varySelection?: boolean;\n}\n\nexport interface ModelStepData extends Animatable {\n    replaceProductModel?: boolean;\n    hideSelectionInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    markSelectionAsCustomField?: boolean;\n    varySelection?: boolean;\n}\n\nexport interface ModuleStepData extends Animatable, Placeable {\n    hideTextInCart?: boolean;\n    displayTextOnFinishStep?: boolean;\n    markTextAsCustomField?: boolean;\n    module: string;\n    maxLength: number;\n    varyText?: string;\n}\n\nexport interface PictureStepData extends Animatable, Placeable {\n    hideSelectionInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    enableVariantSearch?: boolean;\n    markSelectionAsCustomField?: boolean;\n    varySelection?: boolean;\n}\n\nexport interface QuestionStepData extends Animatable {\n    hideSelectionsInCart?: boolean;\n    displaySelectionsOnFinishStep?: boolean;\n    markSelectionsAsCustomField?: boolean;\n    varySelections?: boolean;\n}\n\nexport interface ShapeStepData extends Animatable, Placeable {\n    hideSelectionInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    markSelectionAsCustomField?: boolean;\n    defaultColour?: string;\n    excludeFromPrint?: boolean;\n    varySelection?: boolean;\n}\n\nexport interface TextStepData extends Animatable, Placeable, Colorable {\n    hideSelectionInCart?: boolean;\n    hideFillImageInCart?: boolean;\n    hideColorInCart?: boolean;\n    hideStrokeInCart?: boolean;\n    hideTextInCart?: boolean;\n    displaySelectionOnFinishStep?: boolean;\n    displayImageFillOnFinishStep?: boolean;\n    displayColorOnFinishStep?: boolean;\n    displayTextOnFinishStep?: boolean;\n    displayStrokeOnFinishStep?: boolean;\n    enableVariantCategories?: boolean;\n    markSelectionAsCustomField?: boolean;\n    markFillImageAsCustomField?: boolean;\n    markColorAsCustomField?: boolean;\n    markStrokeAsCustomField?: boolean;\n    markTextAsCustomField?: boolean;\n    allowNewlines?: boolean;\n    defaultText: string;\n    deleteDefaultOnFocus?: boolean;\n    replaceableText?: string;\n    font: string;\n    colorPickerEnabled?: boolean;\n    maxLength: number;\n    maxSize?: number;\n    minSize?: number;\n    size: number;\n    textAlign: string;\n    colour: string;\n    uppercase?: boolean;\n    vertical?: boolean;\n    verticalAlign: string;\n    curved?: boolean;\n    paths?: string[];\n    userCanReplaceText?: boolean;\n    varySelection?: boolean;\n    varyText?: boolean;\n    varyColor?: boolean;\n    imageFillOption?: OptionResource;\n    imageFillScale?: number;\n    strokeEnabled?: boolean;\n    strokeOption?: OptionResource;\n    strokeThickness?: string;\n}\n\nexport interface SilentStepData extends Animatable, Placeable {\n    asset?: Asset;\n    excludeFromPrint?: boolean;\n}\n\ntype FinalizeStepData = Animatable;\n\n/**\n * A colorable step is a step that can have an optional color option assigned to help drive color palette choices.\n */\nexport interface Colorable {\n    colorOption?: OptionResource;\n}\n\n/**\n * A placeable step is a step that can be placed on a canvas in a set of specific positions.\n */\nexport interface Placeable {\n    regions: Region[];\n}\n\nexport interface StepService<T extends AnyStepData> {\n    /**\n     * Initialize the given step, or reload from serialized data if present.\n     */\n    init(stepData: Step<T>, workflowManager: WorkflowManager, reducerState?: LayoutsState): Promise<any>;\n}\n\nexport interface LayoutsState {\n    layouts: { [id: string]: LayoutState };\n    serializableWorkflow: SerializableWorkflow;\n}\n\n/**\n * A workflow step in the process of being serialized or deserialized.\n */\nexport interface SerializableStep {\n    stepName: string;\n    storage?: StepStorage;\n    selectedVariants?: SerializableVariant[];\n}\n\nexport interface SerializableWorkflow {\n    steps: SerializableStep[];\n}\n\nexport interface SerializableVariant {\n    id: string;\n    priceModifier: number;\n}\n\n// Non-variant information required to rehydrate a workflow step.\nexport interface StepStorage {\n    bulkIsConnected?: boolean;\n    color?: string;\n    colorProfileAssetKey?: string;\n    colors?: { [key: string]: IllustrationColorObject };\n    colour?: string;\n    currentFrameSources?: string[];\n    customiseAllText?: boolean;\n    defaultCleared?: boolean;\n    fillImage?: TextFillImage;\n    frameOffsetsList?: FrameOffsets[];\n    framePatternData?: {\n        originalAssetKey?: string;\n        backgroundRemovedAssetKey?: string;\n        vectorizedAssetKey?: string;\n        enhancedAssetKey?: string;\n        useOriginalAsset?: boolean;\n    };\n    framePatternSrc?: string;\n    inputText?: string;\n    overrideGlobalConfiguration?: boolean;\n    overrideGlobalConfigurations?: { [key: string]: boolean };\n    strokeColor?: IllustrationColorObject;\n    text?: string;\n    videoShortUrl?: string;\n    videoUrl?: string;\n}\n\nexport interface IllustrationColorObject {\n    browserValue: string;\n    spotColor?: { profileName: string; namedColor: string };\n    pmsValue?: string;\n}\n\nexport interface FrameOffsets {\n    regionIndex?: string;\n    y: number;\n    x: number;\n    zoom: number;\n    rotation?: number;\n}\n\nexport interface LayoutState {\n    /**\n     * The elements currently on this layout.\n     */\n    elements: LayoutElement[];\n    /**\n     * A file describing the properties of this layout.\n     */\n    layout: ILayout;\n    /**\n     * A unique ID regenerated each time this layout is changed.\n     */\n    modificationID: string;\n}\n\n/**\n * Represents an element on the SVG canvas. This may comprise of multiple SVG elements when\n * output such as path elements, defs, etc. All concrete elements must implement this interface.\n */\nexport interface LayoutElement extends Layerable {\n    /**\n     * The unique identifier for this element.\n     */\n    id: string;\n    /**\n     * If the element was made from a workflow step, this is its step name.\n     */\n    stepName?: string;\n    /**\n     * If the element was made from a workflow step, this is its region.\n     */\n    stepRegion?: Region;\n    /**\n     * If the element was made from a workflow step, this the index of the region.\n     */\n    stepRegionIndex?: number;\n    /**\n     * The type of this element\n     */\n    type: LayoutElementType;\n    /**\n     * Horizontal offset from top left origin point.\n     */\n    x: number;\n    /**\n     * Vertical offset from top left origin point.\n     */\n    y: number;\n    /**\n     * The height in pixels of the element.\n     */\n    width: number;\n    /**\n     * The height in pixels of the element.\n     */\n    height: number;\n    /**\n     * The rotation in degrees.\n     */\n    rotation: number;\n\n    /**\n     * The element is considered immutable and shouldn't be modifiable by the user.\n     */\n    immutable?: boolean;\n    /**\n     * When true this element should be rendered on top of all other elements always.\n     */\n    productOverlay?: boolean;\n    /**\n     * When true, this element will be removed from SVGString output when\n     * the removeExcludedElements flag is set to true.\n     */\n    excludeFromExport?: boolean;\n    /**\n     * Value to use as the mask attribute if the element does not correspond to a step.\n     */\n    mask?: string;\n    /**\n     * Injected by the LayoutsProvider if required. Shouldn't be\n     * used by the user. This is a simple way to pass global rendering configuration\n     * to individual elements without having to set up a react context.\n     */\n    _renderingConfiguration?: RenderingConfiguration;\n}\n\n/**\n * Represents a layerable entity. Layerable entities can be sorted within our system for rendering purposes.\n */\nexport interface Layerable {\n    /**\n     * The layer that this element exists on. Elements on a higher layer can never\n     * be below an element on a lower layer. 0 by default.\n     */\n    layer?: number;\n    /**\n     * The index of this element on the current layer, if no layer is present it is assumed to be 0.\n     * For the index 0 is lower, > 0 is higher\n     */\n    layerIndex?: number;\n}\n\nexport interface TextFillImage {\n    src: string;\n    width: number;\n    height: number;\n    scale: number;\n}\n\n/**\n * The reason we need to turn a layout into an SVG.\n */\nexport enum LayoutRenderingPurpose {\n    ThreeD = \"ThreeD\",\n    FreeDesign = \"FreeDesign\",\n    Print = \"Print\",\n}\n\n/**\n * Specifies configuration for rendering a Papyrus canvas as an SVG string.\n */\nexport interface RenderingConfiguration {\n    /**\n     * Sets the viewbox to a custom value when subregions are desired.\n     */\n    region?: PreviewRegion;\n    /**\n     * Excludes marked elements from the SVG output when true.\n     */\n    removeExcludedElements?: boolean;\n\n    purpose: LayoutRenderingPurpose;\n\n    /**\n     * When true any cached data will be ignored and assets will be rendered in full\n     * with the properties they are provided.\n     */\n    omitCachedFields?: boolean;\n    /**\n     * When true, spot colors will be output, when provided, into any\n     * fill or stroke style in an illustration.\n     */\n    spotColors?: boolean;\n\n    colorProfiles?: ColorProfileProps[];\n\n    /**\n     * Allow for debug rendering on elements.\n     */\n    debug?: boolean;\n\n    /**\n     * Contents variables for templating text.\n     */\n    templatingContext?: { [key: string]: any };\n}\n\nexport interface ColorProfileProps {\n    name: string;\n    key: string;\n}\n\nexport interface PreviewRegion {\n    top: number;\n    left: number;\n    width: number;\n    height: number;\n}\n\n/**\n * The possible types for an element.\n */\nexport enum LayoutElementType {\n    Frame = \"frame\",\n    Group = \"group\",\n    Image = \"image\",\n    Pattern = \"pattern\",\n    Illustration = \"illustration\",\n    Textbox = \"textbox\",\n}\n\n/**\n * Represents a layout contained within a specific user created design.\n */\nexport interface ILayout {\n    /**\n     * The internal identifier for this layout.\n     */\n    id: string;\n\n    /**\n     * A link to the json resource describing this layout\n     */\n    layoutPath?: string;\n\n    /**\n     * The index this layout appears at in its design\n     */\n    index: number;\n\n    /**\n     * An id for the panel associated to this layout.\n     */\n    panelId: string;\n\n    /**\n     * The date this layout was created.\n     */\n    createdAt: Date;\n\n    /**\n     * The date this layout was last updated.\n     */\n    updatedAt: Date;\n\n    /**\n     * The height of the layout. This matches the background element on the canvas as a convenience.\n     */\n    height: number;\n\n    /**\n     * The width of the layout. This matches the background element on the canvas as a convenience.\n     */\n    width: number;\n    /**\n     * When true this layout should contain no background fill.\n     */\n    transparentBackground?: boolean;\n\n    previewRegion?: {\n        height: number;\n        width: number;\n        top: number;\n        left: number;\n    };\n\n    useEditableArea?: boolean;\n    editableArea?: {\n        x: number;\n        y: number;\n        height: number;\n        width: number;\n    };\n\n    name: string;\n    title?: string;\n}\n\nexport interface FileInfo {\n    /**\n     * The name of the file.\n     */\n    name: string;\n\n    /**\n     * A blob object representing the\n     * data of the file.\n     */\n    blob: Blob;\n}\n\n/**\n * A command along with a function to run afterwards.\n */\nexport interface CommandWithFollowup {\n    command?: CanvasCommand;\n    followup?: () => Promise<void>;\n}\n\nexport interface DesignResource {\n    metadata?: { [key: string]: string };\n    sku?: string;\n}\n\nexport interface DesignDetails {\n    name: string;\n    layouts: { index: number; panelId: string }[];\n    workflowId: string;\n    transactionId: string;\n    previewImage?: string;\n    useThreeDimPreview: boolean;\n    metadata?: { key: string; value: string }[];\n    selectedVariants?: { key: string; ids: string[] }[];\n}\n\n/**\n * The variant selections of a completed step.\n */\nexport interface SelectedVariants {\n    [stepName: string]: {\n        id: string;\n        name: string;\n        priceModifier: number;\n    }[];\n}\n\n// The metadata and variant selections of a completed workflow.\nexport interface ExportedData {\n    [name: string]: {\n        value: string;\n        priceModifier: number;\n    };\n}\n\nexport interface DesignCreationMessage {\n    additionalExternalProductId?: string;\n    additionalExternalVariantId?: string;\n    baseCost?: number;\n    designExternalVariants?: DesignExternalVariant[];\n    designProductId?: string;\n    designProductVariantId?: string;\n    event: string;\n    exportedData: ExportedData;\n    externalCartProductId?: string;\n    externalCartProductVariantId?: string;\n    lineItemImageUrl: string;\n    metadata?: { [stepName: string]: string };\n    optionsCost: number;\n    processExecutionId?: string;\n    quantity?: number;\n    selectedVariants?: SelectedVariants;\n    sku?: string;\n    transactionId: string;\n    transactionOwnerId?: string;\n    weight?: number;\n    workflowViewerLink: string;\n    workflowViewerReadOnlyLink: string;\n}\n\nexport enum BundleDesignCreationCartAddMode {\n    /** Uses default grouping method, which consolidates products into as few line items as possible */\n    Default = \"Default\",\n    /** Only adds the first transaction to the cart. */\n    FirstTransaction = \"FirstTransaction\",\n    /** Adds each transaction in the Bundle to the cart, without consolidation. */\n    OneToOne = \"OneToOne\",\n}\n\nexport interface BundleDesignCreationMessage {\n    bundleId: string;\n    /**\n     * The name assigned by the user for this design.\n     */\n    name: string;\n    /**\n     * The date this bundle is expected to be dispatched.\n     */\n    dispatchDate: string;\n    /**\n     * The purchase order associated with this bundle.\n     */\n    purchaseOrder: string;\n    /**\n     * The ID of the collection this bundle is using.\n     */\n    collectionId: string;\n    /**\n     * The name of the collection this bundle is using.\n     */\n    collectionName: string;\n    /**\n     * The line items associated with this bundle.\n     */\n    items: DesignCreationMessage[];\n    /**\n     * The ID of the user who owns this bundle.\n     */\n    bundleOwnerId?: string;\n    /**\n     * @deprecated\n     */\n    cartAddMode?: BundleDesignCreationCartAddMode;\n}\n\nexport interface DesignWorkflowMetadata {\n    [key: string]: string;\n}\n\n/**\n * Represents a transaction.\n */\nexport interface Transaction {\n    /**\n     * A unique identifier for this transaction. Useful for reloading and\n     * modifying state of the transaction.\n     */\n    id: string;\n\n    /**\n     * User-supplied name for the associated design.\n     */\n    designName?: string;\n\n    /**\n     * The workflow associated with this transaction.\n     */\n    workflowId?: string;\n\n    /**\n     * Temporary ID that grants write permission to the transaction.\n     */\n    transactionOwnerId?: string;\n\n    /**\n     * The current state of the design.\n     */\n    workflowState?: string;\n\n    /**\n     * URL to a partner-specific logo intended to display during the workflow experience.\n     */\n    customLogoLink?: string;\n\n    /**\n     * URL to a logo intended to display at the periphery of the workflow experience.\n     */\n    workflowFooterLogoLink?: string;\n\n    /**\n     * URL to the corresponding integration in the REST API.\n     */\n    restApiIntegrationLink?: string;\n\n    /**\n     * URL to redirect to when a workflow is finished.\n     */\n    callbackUrl?: string;\n\n    /**\n     * Product that this transaction belongs to.\n     */\n    product?: Product;\n\n    /**\n     * The ID of the product that this transaction belongs to.\n     */\n    productId?: string;\n\n    /**\n     * The integration product related to this lineitem.\n     */\n    integrationProduct?: IntegrationProductResource;\n\n    /**\n     * The ID of the integration product that this transaction belongs to.\n     */\n    integrationProductId?: string;\n\n    /**\n     * Whether this transaction has previously been ordered.\n     */\n    isOrdered?: boolean;\n\n    /**\n     * @deprecated use isOrdered to check whether transaction has been ordered instead.\n     */\n    lineItem?: LineItem;\n\n    /**\n     * The external product variant ID representing the design product related\n     * to this transaction, null unless the createDesignProduct flag was set\n     * and the design was finalized using createDesign operation.\n     */\n    /**@deprecated use externalCartProductVariantId or designExternalVariants[x].externalProductVariantId instead of this moving forward */\n    externalDesignProductVariantId?: string;\n\n    /**\n     * The external product id representing the design product related\n     * to this transaction, null unless the createDesignProduct flag was set\n     * and the design was finalized using createDesign operation.\n     */\n    /**@deprecated use externalCartProductId or designExternalVariants[x].externalProductId instead of this moving forward. */\n    externalDesignProductId?: string;\n\n    /**\n     * The external product id representing the product related to the transaction.\n     * This value can hold any type of transaction such as design and standard products.\n     */\n    externalCartProductId?: string;\n\n    /**\n     * The external product variant id representing the product related to the transaction.\n     * This value can hold any type of transaction such as design and standard products.\n     */\n    externalCartProductVariantId?: string;\n\n    priceModifierTotal?: number;\n\n    /**\n     * URL to open the transaction in the workflow viewer.\n     */\n    workflowViewerLink?: string;\n\n    workflowViewerReadOnlyLink?: string;\n\n    previewImageLink?: string;\n\n    lastSyncedAt?: string;\n\n    /**\n     * The users who have access to this transaction.\n     */\n    stakeholders?: Stakeholder[];\n\n    /** The stakeholder of the currently logged in user, if applicable. */\n    currentStakeholder?: Stakeholder;\n\n    recipient?: Recipient;\n\n    /**\n     * The amount of this transaction that was, or will be, ordered\n     */\n    quantity?: number;\n\n    createdAt?: string;\n\n    printFileUrl1?: string;\n    printFileUrl2?: string;\n    printFileUrl3?: string;\n    printFileUrl4?: string;\n    printFileUrl5?: string;\n    printFileName1?: string;\n    printFileName2?: string;\n    printFileName3?: string;\n    printFileName4?: string;\n    printFileName5?: string;\n\n    /**\n     * An array of objects containing information on additional products to add to the cart.\n     * Typically only available when being passed to {@link DesignCreationMessage}\n     */\n    designExternalVariants?: DesignExternalVariant[];\n\n    /**\n     * A list of actions that have been associated to this transaction. To be used by the client to interact further post design.\n     */\n    transactionShareActions?: ShareAction[];\n\n    /** Whether any share actions for this Transaction require the user to be authenticated as a stakeholder */\n    hasAuthenticatedActions?: boolean;\n\n    marketplaceThemeInstallConfiguration?: ThemeInstallConfigurationGraphQl;\n\n    completed?: boolean;\n\n    addressValidationStatus?: AddressValidationStatus;\n}\n\nexport enum AddressValidationStatus {\n    Pending = \"Pending\",\n    Failed = \"Failed\",\n    Validated = \"Validated\",\n    Overridden = \"Overridden\",\n}\n\nexport interface Recipient {\n    id?: string;\n    firstName?: string;\n    lastName?: string;\n    address?: string;\n    suburb?: string;\n    state?: string;\n    email?: string;\n    postalCode?: string;\n    country?: string;\n    mobile?: string;\n    company?: string;\n    apartment?: string;\n    customField1?: string;\n    customField2?: string;\n    customField3?: string;\n    customField4?: string;\n    customField5?: string;\n    conversionConfigurationId?: string;\n    createdAt?: string;\n    updatedAt?: string;\n    deletedAt?: string;\n}\n\nexport interface ShareAction {\n    id: string;\n    type: ShareActionType;\n    title?: string;\n    precedence?: number;\n    stakeholderType?: string;\n    url?: string;\n}\n\nexport enum ShareActionType {\n    Hyperlink = \"Hyperlink\",\n    Edit = \"Edit\",\n    Approve = \"Approve\",\n}\n\n/**\n * An object containing ids for an external product/variant that should be added to the cart alongside the base product/variant.\n */\nexport interface DesignExternalVariant {\n    id?: string;\n    externalProductId?: string;\n    externalProductVariantId?: string;\n    skuCode?: string;\n}\n\n/**\n * An integration product represents the connection of a product in SpiffCommerce with\n * a product on a third party platform.\n */\nexport interface IntegrationProductResource {\n    /**\n     * The ID of the IntegrationProduct entity. Used internally by SpiffCommerce.\n     */\n    id: string;\n    /**\n     * The ID of the product on the third party platform. For example a Shopify product ID.\n     */\n    externalProductId?: string;\n    /**\n     * The integration that this product is associated with. For example a Shopify integration.\n     */\n    integration?: Integration;\n\n    /**\n     * The ID of an additional product (on the third party platform) that should be added to the cart.\n     */\n    additionalExternalProductId?: string;\n\n    /**\n     * A supplementary ID for the additional product. Shopify uses the variant ids to add products to the cart.\n     */\n    additionalExternalVariantId?: string;\n\n    /**\n     * When the additionalExternalProductId is set, this is the IntegrationProduct that is associated with it.\n     * If no Spiff product has been associated with the additionalExternalProductId, this will be null.\n     */\n    additionalIntegrationProduct?: IntegrationProductResource;\n\n    /**\n     * The product that this integration product is associated with.\n     */\n    product?: Product;\n}\n\nexport interface Integration {\n    id: string;\n    enabled: boolean;\n    externalIntegrationId?: string;\n    type?: IntegrationType;\n    isCurrent?: boolean;\n    theme: Theme;\n    logo: string;\n    partner: Partner;\n    marketplaceThemeInstallConfiguration?: ThemeInstallConfigurationGraphQl;\n    name?: string;\n}\n\nexport interface Theme {\n    configuration?: string;\n    fontAsset?: Asset;\n    id?: string;\n    name?: string;\n    primaryColor?: string;\n    secondaryColor?: string;\n    textColor?: string;\n    themeLayout?: {\n        id?: string;\n        name?: string;\n    };\n}\n\nexport enum IntegrationType {\n    Hub = \"Hub\",\n    Shopify = \"Shopify\",\n}\n\n/**\n * Fields found in a variant within a line item resource.\n */\nexport interface LineItemVariant {\n    currencyCode: string;\n    optionName: string;\n    priceModifier: number;\n    stepName: string;\n    variantName: string;\n}\n\nexport interface LineItem {\n    id: string;\n    transactionId?: string;\n    previewImageUrl?: string;\n    product: Product;\n    quantity: number;\n    metadata?: LineItemMetadata[];\n    variants: LineItemVariant[];\n}\n\nexport interface LineItemMetadata {\n    stepName: string;\n    metadata: string;\n}\n\nexport interface ProductWorkflow {\n    friendlyName: string;\n    id: string;\n    index?: number;\n    present?: boolean;\n    imageUrl: string;\n    workflowName: string;\n}\n\nexport interface Partner {\n    id?: string;\n    name?: string;\n    currencyCode?: string;\n    customerDetailsPromptMarkdown?: string;\n    activeAddons?: AddonHandle[];\n    beta?: boolean;\n}\n\nexport enum AddonHandle {\n    // Historically this addon was only used for background removal, but it has since\n    // expanded to include a variety of image manipulation features,\n    // so we've renamed it to better reflect its current capabilities.\n    AdvancedImageManipulation = \"BackgroundRemover\",\n    ConversionAccelerator = \"Conversion Accelerator\",\n    ProcessBuilder = \"ProcessBuilder\",\n}\n\nexport interface Product {\n    /**\n     * ID of the partner owner.\n     */\n    partnerId?: string;\n    partner?: Partner;\n\n    /**\n     * Whether a line item for this product is delivered as soon as the order is received.\n     */\n    autoprint: boolean;\n\n    /**\n     * Whether this product can be quickprinted.\n     */\n    canQuickprint?: boolean;\n\n    /**\n     * The internal identifier for this product.\n     */\n    id: string;\n\n    /**\n     * The human friendly name of the product.\n     */\n    name: string;\n\n    /**\n     * A description of the Product, written in Markdown.\n     */\n    description?: string;\n\n    /**\n     * A URL to the image asset associated with this product.\n     */\n    imageUrl?: string;\n\n    /**\n     * A resource url for a 3D model used to represent this product\n     * in the 3d editor. If not available we assume the product doesn't support 3D.\n     */\n    modelUrl?: string;\n\n    /**\n     * A URL for the image used as an overlay on any workflows\n     * that incorporate a product overlay step.\n     */\n    overlayImageUrl?: string;\n\n    /**\n     * Words which can't be used in a workflow for this product.\n     */\n    profanities?: {\n        id: string;\n        createdAt: string;\n        userId: string;\n        word: string;\n    }[];\n\n    /**\n     * The max characters that can be typed for quickprint.\n     */\n    quickprintMaxLength?: number;\n\n    /**\n     * The name of the module to use for quickprint.\n     */\n    quickprintModuleName?: string;\n\n    /**\n     * If true, the product should be displayed in the client as if it is available.\n     * Should be displayed as if it is unavailable otherwise.\n     */\n    enabled: boolean;\n\n    /**\n     * Workflows which have been assigned to this product.\n     */\n    workflows?: ProductWorkflow[];\n\n    /**\n     * The base price of this product in sub units. Essentially the cost of the\n     * product without any customisations applied.\n     */\n    basePrice?: number;\n\n    /**\n     * The weight of this product.\n     */\n    weight?: number;\n\n    minimumOrderQuantity?: number;\n\n    /**\n     * When specified, represents a pre-rendered image of this product to be\n     * displayed to customers while the 3D preview is loading.\n     */\n    preloadImageUrl?: string;\n\n    /**\n     * When set the store owner has configured this product to prompt for\n     * customer details. In hosted experience, we'll offer to collect this information from the customer. In\n     * bespoke UIs created using the Core SDK you will need to check this flag and request the data accordingly.\n     * See attachCustomerDetails on the WorkflowExperience for how to supply us with the details you collect.\n     */\n    promptForCustomerDetails?: boolean;\n\n    /**\n     * Configuration for conversion. Optional.\n     */\n    conversionConfiguration?: ConversionConfiguration;\n\n    integrationProducts?: IntegrationProductResource[];\n\n    productTags?: ProductTag[];\n\n    productImages?: ProductImage[];\n\n    /**\n     * The SKU of the product in the merchant's store.\n     */\n    sku?: string;\n\n    /**\n     * The Spiff SKU code for the product.\n     */\n    skuCode?: string;\n\n    /**\n     * Price breaks for this product when dealing with quantity.\n     */\n    priceBreaks?: ProductPriceBreak[];\n}\n\nexport interface ProductImage {\n    id: string;\n    precedence?: number;\n    asset: Asset;\n}\n\n/**\n * A price break represents a minimum quantity of a product and the price that will be charged for that quantity.\n * This can be seen as an override for the base price of the product.\n */\nexport interface ProductPriceBreak {\n    /**\n     * The id of this price break.\n     */\n    id: string;\n    /**\n     * The minimum quantity of this price break. A positive integer.\n     */\n    minQty: number;\n    /**\n     * A percentage to apply to the overall price. A value between 0-1 where 1 retains 100% of the original price and 0 completely discounts it to free.\n     */\n    percentage: number;\n}\n\nexport interface ProductTag {\n    id: string;\n    name: string;\n}\n\nexport interface ColorOption {\n    id?: string;\n    fill?: string;\n    stroke?: string;\n    variant?: VariantResource;\n    colorProfileAssetKey?: string;\n    pmsValue?: string;\n}\n\nexport interface RegionElement {\n    id: string;\n    region?: Region;\n    regionIndex?: number;\n}\n\nexport interface FrameMetadata {\n    image: string;\n}\n\nexport interface IllustrationMetadata {\n    colors: string[];\n}\n\nexport interface ModuleMetadata {\n    text: string;\n}\n\nexport interface TextMetadata {\n    color?: string;\n    text: string;\n    fillImage?: string;\n    strokeColor?: string;\n}\n\nexport interface SelectionStorage {\n    selectedVariants?: VariantResource[];\n}\n\nexport interface FrameStepStorage extends SelectionStorage {\n    framePatternAsset?: Asset;\n    currentFrameSources?: string[];\n    framePatternData?: {\n        originalAssetKey?: string;\n        backgroundRemovedAssetKey?: string;\n        vectorizedAssetKey?: string;\n        enhancedAssetKey?: string;\n        useOriginalAsset?: boolean;\n    };\n}\n\nexport interface TextStepStorage extends SelectionStorage {\n    color?: string;\n    defaultCleared?: boolean;\n    inputText?: string;\n    text?: string;\n    customiseAllText?: boolean;\n}\n\nexport type StepSelections = {\n    [key: string]: SelectionStorage;\n};\n\nexport interface FrameData {\n    /**\n     * The path data for a frame SVG\n     */\n    path: string;\n\n    /**\n     *  The viewbox width\n     */\n    width: number;\n\n    /**\n     * The viewbox height.\n     */\n    height: number;\n}\n\nexport interface FrameThresholdSettings {\n    // Whether to enable a black and white threshold.\n    useThreshold: boolean;\n    // If using threshold, whether to invert black and white.\n    invertThreshold: boolean;\n    // An integer from 0 to 256.\n    threshold: number;\n    // A number from 0 to 1.\n    thresholdSaturation: number;\n}\n\n/**\n * Details relating to a model for use in the preview.\n */\nexport type ModelDetails = {\n    readonly model?: string;\n    readonly contextService: RenderableContextService;\n};\n\n/**\n * A renderable context represents the relationship of a texture in the 3D preview\n * with an external canvas. This context allows external clients to render to a texture\n * in the 3D preview with a simple interface.\n */\nexport type RenderableContext = {\n    /**\n     * A unique identifier for this renderable context.\n     */\n    getID(): string;\n\n    /**\n     * A name for this renderable.\n     */\n    getName(): string;\n\n    /**\n     * Sets the render context associated to this renderable.\n     * @param ctx The context to use for rendering.\n     */\n    setStaticContext(ctx: CanvasRenderingContext2D): void;\n\n    /**\n     * Get the render context associated to this renderable.\n     */\n    getStaticContext(): CanvasRenderingContext2D | undefined;\n\n    /**\n     * Sets whether or not this renderable is dirty and will need re-rendering.\n     * @param value The new value\n     */\n    setStaticContextDirty(value: boolean): void;\n\n    /**\n     * When this context has been set as dirty, returns true.\n     */\n    getStaticContextDirty(): boolean;\n\n    /**\n     * A timestamp for the last successful render of the context.\n     */\n    getLastCompletedStaticRender(): number | undefined;\n};\n\n/**\n * Represents a handle to a material in the 3D scene. The underlying complexity of materials is abstracted\n * away so the client doesn't need to know anything more than the ID they're given and the name.\n */\nexport type MaterialHandle = {\n    /**\n     * The identifier for the material.\n     */\n    readonly id: string;\n    /**\n     * The human readable name for the material.\n     */\n    readonly name: string;\n};\n\n/**\n * Settings related to the 3D preview.\n */\nexport type PreviewOptions = {\n    /**\n     * The color expected to be seen in the background of the product. Expects a hexadecimal value.\n     */\n    readonly backgroundColor?: string;\n    /**\n     * Image to be used as a background when running with transparency, the image\n     * will be scaled and centered to fill the preview based on aspect ratio.\n     */\n    readonly backgroundImage?: string;\n    /**\n     * The closest zoom the camera can achieve to the product.\n     */\n    readonly maxZoomOverride?: number;\n    /**\n     * The furthest zoom the camera can achieve to the product.\n     */\n    readonly minZoomOverride?: number;\n    /**\n     * The environment file used to calculate product lighting.\n     */\n    readonly environmentFile?: string;\n    /**\n     * The intensity of the environment lighting.\n     */\n    readonly environmentIntensity?: number;\n    /**\n     * The rotation (around the y axis) of the environment lighting, in degrees.\n     */\n    readonly environmentRotationY?: number;\n\n    /**\n     * The lowest point, vertically, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    readonly lowerBetaLimitDeg?: number;\n\n    /**\n     * The highest point, vertically, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    readonly upperBetaLimitDeg?: number;\n\n    /**\n     * The leftmost point, horizontally, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    readonly lowerAlphaLimitDeg?: number;\n\n    /**\n     * The rightmost point, horizontally, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    readonly upperAlphaLimitDeg?: number;\n\n    /**\n     * When set the product while rotate slowly\n     */\n    readonly autoRotation?: boolean;\n    /**\n     * Time in milliseconds before the product starts rotating after a user input has taken control.\n     */\n    readonly idleTimeBeforeRotation?: number;\n    /**\n     * When set the 3D preview won't attempt to orient the product automatically to its front view at load.\n     */\n    readonly disableAutomaticOrientation?: boolean;\n    /**\n     * When true the action bar won't be displayed to the user.\n     */\n    readonly disableActionBar?: boolean;\n    /**\n     * When set, mousing over the model in this preview will highlight the associated mesh/material.\n     * When layout contexts are provided, only the materials with matching names will highlight.\n     */\n    readonly highlightOnMaterialHover?: boolean;\n    /**\n     * Sets the color of highlights when enabled. Expects hexadecimal value.\n     */\n    readonly highlightColor?: string;\n    /**\n     * When true, the user will not be able to pan the camera.\n     */\n    readonly noPan?: boolean;\n};\n\n/**\n * Defines the different behaviors supported by the camera system\n * for control when viewing a product.\n */\nexport enum ProductCameraRig {\n    Orbit,\n    Pan,\n}\n\n/**\n * Identical to CameraAnimation typing, however the\n * target is always available and hence is not optional.\n */\nexport type CameraPose = {\n    readonly lonDeg: number;\n    readonly radius: number;\n    readonly latDeg: number;\n    readonly target: {\n        readonly x: number;\n        readonly y: number;\n        readonly z: number;\n    };\n};\n\nexport type LoadProgressEventData = {\n    /**\n     * The total load value of the scene, this is an average of all\n     * 'in progress' loading events. when all events are fully loaded this value will be 100.\n     */\n    readonly loadValue: number;\n    /**\n     * This value is true when the base model and scene have been initialized.\n     */\n    readonly sceneInitialized: boolean;\n};\n\nexport interface Design {\n    id?: string;\n    sku?: string;\n    transaction?: Transaction;\n    processExecution?: {\n        id?: string;\n    };\n}\n\n/**\n * Someone who has used a workflow experience and entered their contact details.\n */\nexport interface Customer {\n    id?: string;\n    emailAddress: string;\n    firstName?: string;\n    lastName?: string;\n    phoneNumber?: string;\n    loginToken?: string;\n    partner?: Partner;\n    stakeholders?: Stakeholder[];\n    bundleStakeholders?: BundleStakeholder[];\n    hasBundleTemplates?: boolean;\n    productCollectionCustomers?: ProductCollectionCustomer[];\n    defaultTemplateBundleId?: string;\n}\n\nexport interface ProductCollectionCustomer {\n    id: string;\n    customer: Customer;\n    productCollection: ProductCollectionResource;\n}\n\nexport interface CustomerDetailsInput {\n    emailAddress: string;\n    firstName?: string;\n    lastName?: string;\n    phoneNumber?: string;\n}\n\nexport enum StakeholderType {\n    Owner = \"Owner\",\n    Approver = \"Approver\",\n    Editor = \"Editor\",\n    Viewer = \"Viewer\",\n}\n\nexport interface Stakeholder {\n    id: string;\n    type?: StakeholderType;\n    authorizationDate?: string;\n    authorizationNote?: string;\n    authorizationStatus?: string;\n    transaction?: Transaction;\n    customer?: Customer;\n}\n\n/**\n * A wrapper for a list of bundles returned from the server.\n */\nexport interface BundlesFeed {\n    /** The items. The size of this array will typically be limited by the request. */\n    items: Bundle[];\n    /** The total number of items available on the server that matched the initial request. */\n    total: number;\n}\n\nexport enum BundleTemplateStatus {\n    Draft = \"Draft\",\n    Active = \"Active\",\n}\n\nexport interface Bundle {\n    id?: string;\n    bundleOwnerId?: string;\n    completed?: boolean;\n    dispatchDate?: string;\n    purchaseOrder?: string;\n    currentBundleStakeholder?: BundleStakeholder;\n    bundleStakeholders?: BundleStakeholder[];\n    bundleStateData?: string;\n    globalPropertyState?: GlobalPropertyState;\n    metadata?: { key: string; value: string }[];\n    name?: string;\n    partner?: Partner;\n    productCollection?: ProductCollectionResource;\n    transactions?: Transaction[];\n    transactionIds?: string[];\n    template?: boolean;\n    templateLocked: boolean;\n    templateStatus?: BundleTemplateStatus;\n    bundleShareActions?: ShareAction[];\n    workflowViewerLink: string;\n    workflowViewerAmendLink: string;\n    workflowViewerReadOnlyLink: string;\n    createdAt: string;\n    updatedAt: string;\n    transactionsCount?: number;\n    productsCount?: number;\n    totalPriceSubunits?: number;\n    orderId?: string;\n    externalOrderId?: string;\n    internalOrderId?: string;\n    quoteId?: string;\n}\n\nexport interface BundleStakeholder {\n    id: string;\n    bundle?: Bundle;\n    customer?: Customer;\n    type?: StakeholderType;\n    authorizationDate?: string;\n    authorizationNote?: string;\n    authorizationStatus?: string;\n}\n\nexport interface BundleStakeholderInput {\n    type: StakeholderType;\n    customerDetails: CustomerDetailsInput;\n}\n\nexport type ProductCollectionResource = {\n    id: string;\n    globalPropertyConfiguration?: GlobalPropertyConfiguration;\n    productCollectionProducts?: ProductCollectionProductResource[];\n    productCollectionProductsFeed?: ProductCollectionProductsFeedResource;\n    name: string;\n    description?: string;\n    dispatchStartDate?: string;\n    dispatchEndDate?: string;\n    image?: Asset;\n    productCollectionCustomers?: ProductCollectionCustomer[];\n    total: number;\n};\n\nexport type ProductCollectionProductResource = {\n    id: string;\n    productCollection?: ProductCollectionResource;\n    productCollectionId?: string;\n    product: Product;\n    productId: string;\n    workflowId?: string;\n};\n\nexport type ProductCollectionProductsFeedResource = {\n    items: ProductCollectionProductResource[];\n    total: number;\n};\n\nexport interface ProductCollectionCustomer {\n    id: string;\n    customer: Customer;\n    productCollection: ProductCollectionResource;\n}\n\nexport type GlobalPropertyState = {\n    id: string;\n    aspects: GlobalPropertyStateAspect[];\n};\n\nexport type GlobalPropertyStateAspect = {\n    name: string;\n    value: string;\n    type?: AspectType;\n    storage?: GlobalPropertyStateAspectStorage;\n    channel?: number;\n    hidden?: boolean;\n};\n\nexport type GlobalPropertyStateAspectStorage =\n    | GlobalPropertyStateFileUploadStorage\n    | GlobalPropertyStateColorOptionStorage;\n\nexport type GlobalPropertyStateFileUploadStorage = {\n    originalAssetKey?: string;\n    backgroundRemovedAssetKey?: string;\n    vectorizedAssetKey?: string;\n    useOriginalAsset?: boolean;\n    colors?: GlobalPropertyStateIllustrationColor[];\n};\n\nexport type GlobalPropertyStateIllustrationColor = {\n    key: string;\n    browserValue: string;\n    pmsValue?: string;\n};\n\nexport type GlobalPropertyStateColorOptionStorage = {\n    customColor?: string;\n};\n\nexport interface BundleStateData {\n    transactions: BundleStateTransaction[];\n    /** @deprecated Use productIds instead. */\n    integrationProductIds?: string[];\n    productIds?: string[];\n}\n\nexport interface BundleStateTransaction {\n    transactionId: string;\n}\n\n// Allows a type to be extended with other arbitrary fields, while still requiring the base fields.\nexport type Extendable<T> = T & { [key: string]: any };\n\nexport interface Metafield {\n    id: string;\n    createdAt: string;\n    updatedAt: string;\n    entityId: string;\n    value: string;\n    metafieldConfiguration: MetafieldConfiguration;\n}\n\nexport interface MetafieldConfiguration {\n    id: string;\n    createdAt: string;\n    updatedAt: string;\n    entityType: string;\n    metafieldType: string;\n    name: string;\n}\n\nexport enum TextAlgorithm {\n    /**\n     * An algorithm that finds the best size for text based\n     * on a range minSize <-> maxSize\n     * NOTE: Default, this is how we've calculated historically.\n     */\n    Autosize = \"Autosize\",\n    /**\n     * An algorithm that follows behavior of other popular\n     * text editing applications.\n     */\n    Traditional = \"Traditional\",\n}\n\nexport interface FrameElement extends LayoutElement {\n    // The source path for the frame. Equivalent to the d attribute of an SVG path element.\n    path: string;\n\n    /**\n     * Assigns the 'data-frame-width' attribute to the frame element. The rasterizer we use has issues with images inside\n     * patterns. This is a workaround to ensure that the pattern is correctly sized.\n     */\n    dataWidth?: number;\n    /**\n     * Assigns the 'data-frame-height' attribute to the frame element. The rasterizer we use has issues with images inside\n     * patterns. This is a workaround to ensure that the pattern is correctly sized.\n     */\n    dataHeight?: number;\n\n    // Disables the placeholder image for this frame. Instead the frame will\n    // be blank before any image is UploadRounded.\n    disablePlaceholder?: boolean;\n\n    // FIXME: Scale was removed from all other elements however persists on frames\n    // to ensure backwards compat with existing functionality. We should remove this when we can.\n    scaleX: number;\n    scaleY: number;\n\n    // The opacity of the frame\n    opacity?: number;\n    // The pattern for this frame. Roughly translates to a pattern tag in SVG.\n    pattern?: Pattern;\n    // Properties used to control focal blur in frames.\n    focalBlur?: boolean;\n    focalBlurStrength?: number;\n    focalBlurRadius?: number;\n    forceImageCover?: boolean;\n\n    // Whether to enable a black and white threshold.\n    useThreshold?: boolean;\n    // If using threshold, whether to invert black and white.\n    invertThreshold?: boolean;\n    // An integer from 0 to 256.\n    threshold?: number;\n    // A number from 0 to 1.\n    thresholdSaturation?: number;\n}\n\n/**\n * A pattern object stores data relevant for displaying an image within a frame, including\n * the source for the image itself and also dimensions and offsets.\n */\ninterface Pattern extends Omit<LayoutElement, \"type\"> {\n    /**\n     * The image to use when a file is generated, this should be an original high resolution source file.\n     */\n    src: string;\n\n    /**\n     * Scaling X of image within frame.\n     */\n    scaleX: number;\n\n    /**\n     * Scaling Y of image within frame.\n     */\n    scaleY: number;\n\n    /**\n     * The SVG document that the src represents. This must be the actual content string of the document, rather than a URL.\n     */\n    svg?: string;\n\n    /**\n     * A map of ID to color code, used to store color selections in the SVG. Only applicable when `svg` is provided.\n     */\n    colors?: { [key: string]: ColorDefinition };\n}\n\nexport interface GroupElement extends LayoutElement {\n    /**\n     * A clip path applied to the group\n     */\n    clipPath?: string;\n    /**\n     * Elements renderable inside this group.\n     */\n    children: LayoutElement[];\n}\n\nexport interface IllustrationElement extends LayoutElement {\n    /**\n     * When provided a src will be used to rehyrdrate the svg field. On serialization\n     * the svg field will be dropped and only src will remain.\n     */\n    src?: string;\n    /**\n     * The string representation of the SVG element. A valid SVG document.\n     */\n    svg?: string;\n    /**\n     * A cached image representation of this SVG, to be used for faster\n     * rendering in performance critical code.\n     */\n    cachedObjectURL?: string;\n    /**\n     * A map of ID to color code, used to store color selections in the SVG.\n     */\n    colors: { [key: string]: ColorDefinition };\n}\n\n/**\n * Represents a raster image on the Papyrus canvas.\n */\nexport interface ImageElement extends LayoutElement {\n    /**\n     * A src for the image. This will be used in place of the data URL in server environments and should\n     * be original image quality.\n     */\n    src: string;\n    /**\n     * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n     */\n    preserveAspectRatio?: string;\n}\n\nexport interface TextboxElement extends LayoutElement {\n    /**\n     * Horizontal alignment of text. eg. left, center, right.\n     */\n    align?: string;\n    /**\n     * An image to use as the fill instead of a color.\n     */\n    textFillImage?: TextFillImage;\n    /**\n     * Fill color of this text. Any value that can be parsed by css fill should work here.\n     */\n    fill: string;\n    /**\n     * The font size.\n     */\n    fontSize: number;\n    /**\n     * Information about the font family used to render this text.\n     */\n    fontData: FontData | undefined;\n    /**\n     * Text computed for this textbox.\n     */\n    text?: string;\n    /**\n     * Per element user input. Not used by the layout engine. Instead\n     * used to store user input for textbox to preserve newlines.\n     */\n    input?: string;\n    /**\n     * Should the text layout top to bottom.\n     */\n    vertical?: boolean;\n    /**\n     * The height between text lines.\n     */\n    lineHeight?: number;\n    /**\n     * The alignment of text vertically, top center or bottom.\n     */\n    verticalAlign: string;\n    /**\n     * When true the text will be rendered using the provided curve.\n     */\n    curved?: boolean;\n    /**\n     * The curve to use when curved = true. Ignored otherwise.\n     */\n    paths?: string[]; // TODO: remove array and change to path from paths.\n    /**\n     * The algorithm to use when laying out text.\n     */\n    algorithm?: TextAlgorithm;\n\n    fillSpotColorDefinition?: SpotColorDefinition;\n\n    strokeColor?: ColorDefinition;\n    strokeThickness?: string;\n}\n\nexport interface FontData {\n    assetUrl: string;\n    name: string;\n}\n\n/**\n * A container for data related to a specific spotcolor. toString\n * can be used to output a string expected by Filegen inside a stroke or fill.\n */\nexport interface SpotColorDefinition {\n    /**\n     * The name of the profile being used.\n     */\n    profileName: string;\n\n    /**\n     * The named color expected by the profile.\n     */\n    namedColor: string;\n}\n\n/**\n * Contains configuration for font sizing.\n *\n * When min/maxSize values are set we interpret the textbox as being\n * in \"Variable Mode\" which essentially\n * auto sizes the text based on a given region.\n *\n * When only size is set, we interpret the textbox as being in \"Fixed Mode\" where\n * text is computed at a fixed font size.\n */\nexport interface SizeRange {\n    /**\n     * Variable Mode: A maximum size\n     */\n    maxSize?: number;\n\n    /**\n     * Variable Mode: Minimum Size\n     */\n    minSize?: number;\n\n    /**\n     * Fixed Mode: A Fixed font size to be used at all times.\n     */\n    size: number;\n}\n\nexport interface CanvasRegion {\n    top: number;\n    left: number;\n    width: number;\n    height: number;\n}\n\nexport interface ColorDefinition {\n    /**\n     * Represents the color value in hex or any other\n     * browser supported format. This will be used when rendering the canvas\n     * in an environment that doesn't support spot color.\n     */\n    browserValue: string;\n\n    /**\n     * A spot color definition. This is optional and will\n     * be applied to the SVG returned by toString when configured allowing\n     * filegen to output spot colors.\n     */\n    spotColor?: SpotColorDefinition;\n\n    /**\n     * Represents the color value in the PMS colorspace.\n     */\n    pmsValue?: string;\n}\n\n/**\n * A container for data related to a specific spotcolor. toString\n * can be used to output a string expected by Filegen inside a stroke or fill.\n */\nexport interface SpotColorDefinition {\n    /**\n     * The name of the profile being used.\n     */\n    profileName: string;\n\n    /**\n     * The named color expected by the profile.\n     */\n    namedColor: string;\n}\n\nexport interface TextFillSpotColor {\n    profileName: string;\n    namedColor: string;\n}\n\nexport interface PatternImageData {\n    /**\n     * The original src of the image.\n     */\n    src: string;\n\n    /**\n     *  The natural width of the image.\n     */\n    width: number;\n\n    /**\n     * The natural height of the image.\n     */\n    height: number;\n\n    /**\n     * Cached result of the calculation width/height.\n     */\n    aspect: number;\n\n    /**\n     * The SVG document that the src represents. This must be the actual content string of the document, rather than a URL.\n     */\n    svg?: string;\n\n    /**\n     * A map of ID to color code, used to store color selections in the SVG. Only applicable when `svg` is provided.\n     */\n    colors?: { [key: string]: ColorDefinition };\n}\n\n/**\n * Defines the direction of scaling, can be used\n * to determine the anchor point of a scale calculation.\n */\nexport enum ScaleAxis {\n    North,\n    Northeast,\n    East,\n    Southeast,\n    South,\n    Southwest,\n    West,\n    Northwest,\n}\n\n/**\n * A point in a 2D coordinate space.\n */\nexport interface Point {\n    x: number;\n    y: number;\n}\n\nexport interface Workflow {\n    defaultPreviewPanelIndex?: number;\n    deletedAt?: Date;\n    id: string;\n    previewAssetKey?: string;\n    previewImageUrl?: string;\n    name: string;\n    introduction: string;\n    panels: WorkflowPanel[];\n    showModelOnFinishStep: boolean;\n    showPricing?: boolean;\n    baseCurrency?: string;\n    showPlusInVariantPrices?: boolean;\n    allowProofDownload: boolean;\n    steps: Step<AnyStepData>[];\n    stepGroups: StepGroup[];\n    theme?: {\n        primaryColour: string;\n        textColour: string;\n    };\n    globalPreviewConfig?: PreviewConfiguration;\n    finalizeStepConfig?: FinalizeStepConfig;\n    partnerId?: string;\n    toggleBulkSourceView?: boolean;\n    overrideTheme?: Theme;\n    globalPropertyConfiguration?: GlobalPropertyConfiguration;\n}\n\nexport interface WorkflowPanel {\n    height: number;\n    width: number;\n    name: string;\n    title?: string;\n    index: number;\n    transparentBackground?: boolean;\n    previewRegion?: PreviewRegion;\n    useEditableArea?: boolean;\n    editableArea?: {\n        x: number;\n        y: number;\n        height: number;\n        width: number;\n    };\n}\n\nexport interface StepGroup {\n    id?: string;\n    name: string;\n    stepNames: string[];\n}\n\nexport interface FinalizeStepConfig {\n    termsMarkdown?: string;\n    modelAnimation?: ModelAnimation;\n    lookAtAnimation?: CameraAnimation;\n    previewRegion?: { left: number; top: number; width: number; height: number };\n}\n\nexport interface PreviewRegion {\n    top: number;\n    left: number;\n    width: number;\n    height: number;\n}\n\nexport interface ModelAnimation {\n    /**\n     * A value it seconds along the animation timeline to begin at.\n     */\n    from?: number;\n    /**\n     * A value in seconds along the animation timeline to end at.\n     */\n    to?: number;\n    /**\n     * When true the animation will loop. The only behaviour currently is to reset\n     * back to from but we could have it bounce back and forth and/or follow a curve.\n     */\n    loop?: boolean;\n    /**\n     * The name of the animation to play.\n     */\n    name?: string;\n}\n\n/**\n * A CameraAnimation specifies a discrete state that the camera should\n * animate to. This state represents the final position of the camera after animations have run.\n */\nexport interface CameraAnimation {\n    /**\n     * The longitutude in degrees the camera should animate to.\n     */\n    lonDeg: number;\n    /**\n     * The lattitude in degrees the camera should animnate to.\n     */\n    latDeg: number;\n    /**\n     * An optional target for the camera to focus on in the scene.\n     */\n    target?: { x: number; y: number; z: number };\n    /**\n     * A value in scene units specifying camera distance from the target.\n     */\n    radius?: number;\n}\n\n/**\n * Settings related to the 3D preview for use at either a global level or at per step level. The global\n * values can be a default if per step values aren't specified.\n */\nexport interface PreviewConfiguration {\n    /**\n     * @deprecated Removed in favor of backgroundColor as a simple hexadecimal color value.\n     */\n    clearColor?: [number, number, number];\n    /**\n     * The color expected to be seen in the background of the product\n     */\n    backgroundColor?: string;\n    /**\n     * The closest zoom the camera can achieve to the product.\n     */\n    maxZoomOverride?: number;\n    /**\n     * The furthest zoom the camera can achieve to the product.\n     */\n    minZoomOverride?: number;\n    /**\n     * The environment file used to calculate product lighting.\n     */\n    environmentFile?: string;\n\n    /**\n     * The lowest point, vertically, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    lowerBetaLimitDeg?: number;\n\n    /**\n     * The highest point, vertically, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    upperBetaLimitDeg?: number;\n\n    /**\n     * The leftmost point, horizontally, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    lowerAlphaLimitDeg?: number;\n\n    /**\n     * The rightmost point, horizontally, that the camera can rotate to.\n     * https://doc.babylonjs.com/divingDeeper/cameras/camera_introduction\n     */\n    upperAlphaLimitDeg?: number;\n\n    /**\n     * When set the product while rotate slowly\n     */\n    autoRotation?: boolean;\n    /**\n     * Time in milliseconds before the product starts rotating after a user input has taken control.\n     */\n    idleTimeBeforeRotation?: number;\n    /**\n     * When set the 3D preview won't attempt to orient the product automatically to its front view at load.\n     */\n    disableAutomaticOrientation?: boolean;\n    /**\n     * When true the action bar won't be displayed to the user.\n     */\n    disableActionBar?: boolean;\n\n    /**\n     * When true the AR button will be displayed to the user.\n     */\n    enableAR?: boolean;\n}\n\nexport enum UnitOfMeasurement {\n    Pixel = \"px\",\n    Millimeter = \"mm\",\n    Centimeter = \"cm\",\n}\n\nexport type PapyrusComponent<T = any> = FunctionComponent<T>;\n\nexport type PapyrusNode = ReactNode;\n\nexport interface Order {\n    id: string;\n    internalId: string;\n}\n\nexport interface OrderItem {\n    transactionId: string;\n    amountToOrder: number;\n}\n\nexport enum ConversionDataType {\n    Email = \"Email\",\n    FirstName = \"FirstName\",\n    LastName = \"LastName\",\n    Phone = \"Phone\",\n    Apartment = \"Apartment\",\n    City = \"City\",\n    Country = \"Country\",\n    OrganizationName = \"OrganizationName\",\n    PostCode = \"PostCode\",\n    State = \"State\",\n    StreetAddress = \"StreetAddress\",\n    Custom = \"Custom\",\n}\n","import { AnyStepData, Asset, Region, Step, VariantResource } from \"../types\";\n\n/**\n * A generic base class for custom errors that assigns the name\n * of the error class automatically. All custom errors should extend this.\n */\nabstract class CustomError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = this.constructor.name;\n    }\n}\n\n/**\n * A custom class for categorising errors related to workflow configuration.\n */\nabstract class ConfigurationError extends CustomError {\n    constructor(message) {\n        super(`ConfigurationError - ${message}`);\n    }\n}\n\n/**\n * Thrown when an option was expected but not found in the workflow configuration or\n * the server returned a 404 for an option we expected.\n */\nclass OptionNotFoundError extends ConfigurationError {\n    readonly optionId: string;\n    constructor(step: Step<AnyStepData>) {\n        super(`Option not Configured: ${step.stepTitle}`);\n        this.optionId = step?.optionId || \"N/A\";\n    }\n}\n\n/**\n * Thrown when a layout is not found for a given region entity. This\n * can occur when panels are deleted from a workflow but steps are still relying\n * on the layout being present.\n */\nclass LayoutNotFoundError extends ConfigurationError {\n    readonly panelId: string;\n    constructor(region: Region) {\n        super(`Panel not Found: ${region.panelId}`);\n        this.panelId = region?.panelId || \"N/A\";\n    }\n}\n\n/**\n * Thrown when an asset is not found on a specific variant. This can occur when\n * the asset wasn't configured in hub and the variant is loaded in a workflow.\n */\nclass AssetNotFoundError extends ConfigurationError {\n    readonly variant: VariantResource;\n    constructor(variant: VariantResource) {\n        super(`Asset not found for variant: ${variant.name}`);\n        this.variant = variant;\n    }\n}\n\n/**\n * Thrown when a resource is not found linked to a specific asset. This\n * can occur when generation of a resource fails or hasn't completed. Or may be\n * a sign of a misconfiguration.\n */\nclass ResourceNotFoundError extends ConfigurationError {\n    readonly asset: Asset;\n    constructor(asset: Asset) {\n        super(`Resource not found for asset: ${asset.name}`);\n        this.asset = asset;\n    }\n}\n\n/**\n * Thrown when configuration is missing when it was expected. More generic\n * to cover remaining cases outside of the more specific ones such as options, variants & assets.\n */\nclass MisconfigurationError extends ConfigurationError {\n    readonly step: Step<AnyStepData>;\n    constructor(step: Step<AnyStepData>, message: string) {\n        super(`Workflow Misconfiguration: ${step.stepName} - ${message}`);\n        this.step = step;\n    }\n}\n\n/**\n * A custom class for categorising errors related to implementation of core.\n */\nabstract class ImplementationError extends CustomError {\n    constructor(message) {\n        super(`ImplementationError - ${message}`);\n    }\n}\n\n/**\n * Thrown when we hit a case that we didn't expect to happen\n */\nclass UnhandledBehaviorError extends ImplementationError {\n    constructor(message: string) {\n        super(`Unhandled Behavior Encountered: ${message}`);\n    }\n}\n\n/**\n * Thrown when we fail to parse something that we expected to be valid\n */\nclass ParseError extends ImplementationError {\n    constructor(message: string) {\n        super(`Parsing Error: ${message}`);\n    }\n}\n\n/**\n * Thrown when we use the client in a way that is not supported by the platform.\n */\nclass ClientError extends ImplementationError {\n    constructor(message: string) {\n        super(`Client Error: ${message}`);\n    }\n}\n\n/**\n * Thrown when we fail to generate a resource on the client. Generally this is\n * due to poor handling of device or browser specific requirements like memory limits.\n */\nclass ResourceGenerationError extends ImplementationError {\n    constructor(message: string) {\n        super(`Resource Generation Failed: ${message}`);\n    }\n}\n\n// Config errors\nexport { OptionNotFoundError, LayoutNotFoundError, AssetNotFoundError, ResourceNotFoundError, MisconfigurationError };\n\n// Implementation errors\nexport { UnhandledBehaviorError, ClientError, ResourceGenerationError, ParseError };\n","interface StorageService {\n    /**\n     * Get a value.\n     * @param key The key to lookup the value with.\n     */\n    get(key: string): string | undefined;\n    /**\n     * Set a value.\n     * @param key The key to set.\n     * @param val The new value.\n     */\n    set(key: string, val: string): void;\n    /**\n     * Remove a value.\n     * @param key The key to remove, does nothing if the key doesn't exist.\n     */\n    remove(key: string): void;\n    /**\n     * Get a map from persistence.\n     * @param key The key to search by.\n     */\n    getMap<K = any, V = any>(key: string): Map<K, V> | undefined;\n    /**\n     * St a map into persistence.\n     * @param key The key to set the map at.\n     * @param val The map to set.\n     */\n    setMap<K = any, V = any>(key: string, val: Map<K, V>): void;\n}\n\n/**\n * Storage built upon browser localStorage capability.\n */\nclass LocalStorageService implements StorageService {\n    get(key: string): string | undefined {\n        return localStorage.getItem(key) || undefined;\n    }\n    set(key: string, val: string): void {\n        localStorage.setItem(key, val);\n    }\n    remove(key: string): void {\n        localStorage.removeItem(key);\n    }\n    getMap(key: string): Map<any, any> | undefined {\n        const serialisedMap = this.get(key);\n        if (!serialisedMap) {\n            return;\n        }\n        return new Map(JSON.parse(serialisedMap));\n    }\n    setMap(key: string, val: Map<any, any>): void {\n        const mapSerialised = JSON.stringify([...val.entries()]);\n        this.set(key, mapSerialised);\n    }\n}\n\n/**\n * An in-memory fallback storage when we encounter environments that don't support localStorage.\n */\nclass InMemoryStorageService implements StorageService {\n    private storage: Map<string, string> = new Map();\n    get(key: string): string | undefined {\n        return this.storage.get(key) || undefined;\n    }\n    set(key: string, val: string): void {\n        this.storage.set(key, val);\n    }\n    remove(key: string): void {\n        this.storage.delete(key);\n    }\n    getMap(key: string): Map<any, any> | undefined {\n        const serialisedMap = this.get(key);\n        if (!serialisedMap) {\n            return;\n        }\n        return new Map(JSON.parse(serialisedMap));\n    }\n    setMap(key: string, val: Map<any, any>): void {\n        const mapSerialised = JSON.stringify([...val.entries()]);\n        this.set(key, mapSerialised);\n    }\n}\n\nconst buildPersistentStorage = (): StorageService => {\n    try {\n        if (localStorage) {\n            return new LocalStorageService();\n        }\n        return new InMemoryStorageService();\n    } catch {\n        console.warn(\"Local storage was unavilable due to browser security settings. Using in-memory storage instead.\");\n        return new InMemoryStorageService();\n    }\n};\n\nexport const persistenceService = buildPersistentStorage();\n","import { __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nexport function setContext(setter) {\n    return new ApolloLink(function (operation, forward) {\n        var request = __rest(operation, []);\n        return new Observable(function (observer) {\n            var handle;\n            var closed = false;\n            Promise.resolve(request)\n                .then(function (req) { return setter(req, operation.getContext()); })\n                .then(operation.setContext)\n                .then(function () {\n                // if the observer is already closed, no need to subscribe.\n                if (closed)\n                    return;\n                handle = forward(operation).subscribe({\n                    next: observer.next.bind(observer),\n                    error: observer.error.bind(observer),\n                    complete: observer.complete.bind(observer),\n                });\n            })\n                .catch(observer.error.bind(observer));\n            return function () {\n                closed = true;\n                if (handle)\n                    handle.unsubscribe();\n            };\n        });\n    });\n}\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { graphQLResultHasProtocolErrors, PROTOCOL_ERRORS_SYMBOL, } from \"../../errors/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\nexport function onError(errorHandler) {\n    return new ApolloLink(function (operation, forward) {\n        return new Observable(function (observer) {\n            var sub;\n            var retriedSub;\n            var retriedResult;\n            try {\n                sub = forward(operation).subscribe({\n                    next: function (result) {\n                        if (result.errors) {\n                            retriedResult = errorHandler({\n                                graphQLErrors: result.errors,\n                                response: result,\n                                operation: operation,\n                                forward: forward,\n                            });\n                        }\n                        else if (graphQLResultHasProtocolErrors(result)) {\n                            retriedResult = errorHandler({\n                                protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL],\n                                response: result,\n                                operation: operation,\n                                forward: forward,\n                            });\n                        }\n                        if (retriedResult) {\n                            retriedSub = retriedResult.subscribe({\n                                next: observer.next.bind(observer),\n                                error: observer.error.bind(observer),\n                                complete: observer.complete.bind(observer),\n                            });\n                            return;\n                        }\n                        observer.next(result);\n                    },\n                    error: function (networkError) {\n                        retriedResult = errorHandler({\n                            operation: operation,\n                            networkError: networkError,\n                            //Network errors can return GraphQL errors on for example a 403\n                            graphQLErrors: (networkError &&\n                                networkError.result &&\n                                networkError.result.errors) ||\n                                void 0,\n                            forward: forward,\n                        });\n                        if (retriedResult) {\n                            retriedSub = retriedResult.subscribe({\n                                next: observer.next.bind(observer),\n                                error: observer.error.bind(observer),\n                                complete: observer.complete.bind(observer),\n                            });\n                            return;\n                        }\n                        observer.error(networkError);\n                    },\n                    complete: function () {\n                        // disable the previous sub from calling complete on observable\n                        // if retry is in flight.\n                        if (!retriedResult) {\n                            observer.complete.bind(observer)();\n                        }\n                    },\n                });\n            }\n            catch (e) {\n                errorHandler({ networkError: e, operation: operation, forward: forward });\n                observer.error(e);\n            }\n            return function () {\n                if (sub)\n                    sub.unsubscribe();\n                if (retriedSub)\n                    sub.unsubscribe();\n            };\n        });\n    });\n}\nvar ErrorLink = /** @class */ (function (_super) {\n    __extends(ErrorLink, _super);\n    function ErrorLink(errorHandler) {\n        var _this = _super.call(this) || this;\n        _this.link = onError(errorHandler);\n        return _this;\n    }\n    ErrorLink.prototype.request = function (operation, forward) {\n        return this.link.request(operation, forward);\n    };\n    return ErrorLink;\n}(ApolloLink));\nexport { ErrorLink };\n//# sourceMappingURL=index.js.map","class Configuration {\n    private readonly defaultServerUrl = \"https://api.au.spiffcommerce.com\";\n    private readonly defaultServicesApiUrl = \"https://services.au.spiffcommerce.com\";\n    private readonly defaultHubUrl = \"https://hub.au.spiffcommerce.com\";\n\n    private serverUrl: string;\n    private servicesApiUrl: string;\n    private hubUrl: string;\n\n    private serverUrlCallbacks: (() => void)[];\n\n    constructor() {\n        this.serverUrl = this.defaultServerUrl;\n        this.servicesApiUrl = this.defaultServicesApiUrl;\n        this.hubUrl = this.defaultHubUrl;\n        this.serverUrlCallbacks = [];\n    }\n\n    getServerUrl() {\n        return this.serverUrl;\n    }\n\n    getServicesApiUrl() {\n        return this.servicesApiUrl;\n    }\n\n    getHubUrl() {\n        return this.hubUrl;\n    }\n\n    setServerUrl(serverUrl: string) {\n        this.serverUrl = serverUrl;\n        this.serverUrlCallbacks.forEach((callback) => callback());\n    }\n\n    setServicesApiUrl(servicesApiUrl: string) {\n        this.servicesApiUrl = servicesApiUrl;\n    }\n\n    setHubUrl(hubUrl: string) {\n        this.hubUrl = hubUrl;\n    }\n\n    addServerUrlCallback(callback: () => void) {\n        this.serverUrlCallbacks.push(callback);\n    }\n}\n\nexport const spiffCoreConfiguration = new Configuration();\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n\n          'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n          var ReactVersion = '18.3.1';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n  transition: null\n};\n\nvar ReactCurrentActQueue = {\n  current: null,\n  // Used to reproduce behavior of `batchedUpdates` in legacy mode.\n  isBatchingLegacy: false,\n  didScheduleLegacyUpdate: false\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n};\n\nvar ReactDebugCurrentFrame = {};\nvar currentExtraStackFrame = null;\nfunction setExtraStackFrame(stack) {\n  {\n    currentExtraStackFrame = stack;\n  }\n}\n\n{\n  ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {\n    {\n      currentExtraStackFrame = stack;\n    }\n  }; // Stack implementation injected by the current renderer.\n\n\n  ReactDebugCurrentFrame.getCurrentStack = null;\n\n  ReactDebugCurrentFrame.getStackAddendum = function () {\n    var stack = ''; // Add an extra top frame while an element is being validated\n\n    if (currentExtraStackFrame) {\n      stack += currentExtraStackFrame;\n    } // Delegate to the injected renderer-specific implementation\n\n\n    var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n    if (impl) {\n      stack += impl() || '';\n    }\n\n    return stack;\n  };\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar ReactSharedInternals = {\n  ReactCurrentDispatcher: ReactCurrentDispatcher,\n  ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n  ReactCurrentOwner: ReactCurrentOwner\n};\n\n{\n  ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;\n  ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      printWarning('warn', format, args);\n    }\n  }\n}\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n    var warningKey = componentName + \".\" + callerName;\n\n    if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n      return;\n    }\n\n    error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n    didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n  }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance, callback, callerName) {\n    warnNoop(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} callerName name of the calling function in the public API.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n    warnNoop(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @param {?function} callback Called after component is updated.\n   * @param {?string} Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n    warnNoop(publicInstance, 'setState');\n  }\n};\n\nvar assign = Object.assign;\n\nvar emptyObject = {};\n\n{\n  Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n  // renderer.\n\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n  if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {\n    throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');\n  }\n\n  this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n\n  var defineDeprecationWarning = function (methodName, info) {\n    Object.defineProperty(Component.prototype, methodName, {\n      get: function () {\n        warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n        return undefined;\n      }\n    });\n  };\n\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context; // If a component has string refs, we will assign a different object later.\n\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n  var refObject = {\n    current: null\n  };\n\n  {\n    Object.seal(refObject);\n  }\n\n  return refObject;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  var warnAboutAccessingKey = function () {\n    {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingKey.isReactWarning = true;\n  Object.defineProperty(props, 'key', {\n    get: warnAboutAccessingKey,\n    configurable: true\n  });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  var warnAboutAccessingRef = function () {\n    {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    }\n  };\n\n  warnAboutAccessingRef.isReactWarning = true;\n  Object.defineProperty(props, 'ref', {\n    get: warnAboutAccessingRef,\n    configurable: true\n  });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n  var propName; // Reserved names are extracted\n\n  var props = {};\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      ref = config.ref;\n\n      {\n        warnIfStringRefCannotBeAutoConverted(config);\n      }\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    {\n      if (Object.freeze) {\n        Object.freeze(childArray);\n      }\n    }\n\n    props.children = childArray;\n  } // Resolve default props\n\n\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  {\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n  return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n  if (element === null || element === undefined) {\n    throw new Error(\"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\");\n  }\n\n  var propName; // Original props are copied\n\n  var props = assign({}, element.props); // Reserved names are extracted\n\n  var key = element.key;\n  var ref = element.ref; // Self is preserved since the owner is preserved.\n\n  var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n\n  var source = element._source; // Owner will be preserved, unless ref is overridden\n\n  var owner = element._owner;\n\n  if (config != null) {\n    if (hasValidRef(config)) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    } // Remaining properties override existing props\n\n\n    var defaultProps;\n\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  } // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n\n\n  var childrenLength = arguments.length - 2;\n\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = key.replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n  return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n  return text.replace(userProvidedKeyEscapeRegex, '$&/');\n}\n/**\n * Generate a key string that identifies a element within a set.\n *\n * @param {*} element A element that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getElementKey(element, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (typeof element === 'object' && element !== null && element.key != null) {\n    // Explicit key\n    {\n      checkKeyStringCoercion(element.key);\n    }\n\n    return escape('' + element.key);\n  } // Implicit key determined by the index in the set\n\n\n  return index.toString(36);\n}\n\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  var invokeCallback = false;\n\n  if (children === null) {\n    invokeCallback = true;\n  } else {\n    switch (type) {\n      case 'string':\n      case 'number':\n        invokeCallback = true;\n        break;\n\n      case 'object':\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = true;\n        }\n\n    }\n  }\n\n  if (invokeCallback) {\n    var _child = children;\n    var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows:\n\n    var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;\n\n    if (isArray(mappedChild)) {\n      var escapedChildKey = '';\n\n      if (childKey != null) {\n        escapedChildKey = escapeUserProvidedKey(childKey) + '/';\n      }\n\n      mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {\n        return c;\n      });\n    } else if (mappedChild != null) {\n      if (isValidElement(mappedChild)) {\n        {\n          // The `if` statement here prevents auto-disabling of the safe\n          // coercion ESLint rule, so we must manually disable it below.\n          // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n          if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {\n            checkKeyStringCoercion(mappedChild.key);\n          }\n        }\n\n        mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n        // traverseAllChildren used to do for objects as children\n        escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n        mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number\n        // eslint-disable-next-line react-internal/safe-string-coercion\n        escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);\n      }\n\n      array.push(mappedChild);\n    }\n\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getElementKey(child, i);\n      subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n\n    if (typeof iteratorFn === 'function') {\n      var iterableChildren = children;\n\n      {\n        // Warn about using Maps as children\n        if (iteratorFn === iterableChildren.entries) {\n          if (!didWarnAboutMaps) {\n            warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n          }\n\n          didWarnAboutMaps = true;\n        }\n      }\n\n      var iterator = iteratorFn.call(iterableChildren);\n      var step;\n      var ii = 0;\n\n      while (!(step = iterator.next()).done) {\n        child = step.value;\n        nextName = nextNamePrefix + getElementKey(child, ii++);\n        subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n      }\n    } else if (type === 'object') {\n      // eslint-disable-next-line react-internal/safe-string-coercion\n      var childrenString = String(children);\n      throw new Error(\"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n\n  var result = [];\n  var count = 0;\n  mapIntoArray(children, result, '', '', function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n  var n = 0;\n  mapChildren(children, function () {\n    n++; // Don't return anything\n  });\n  return n;\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  mapChildren(children, function () {\n    forEachFunc.apply(this, arguments); // Don't return anything.\n  }, forEachContext);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n  return mapChildren(children, function (child) {\n    return child;\n  }) || [];\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n  if (!isValidElement(children)) {\n    throw new Error('React.Children.only expected to receive a single React element child.');\n  }\n\n  return children;\n}\n\nfunction createContext(defaultValue) {\n  // TODO: Second argument used to be an optional `calculateChangedBits`\n  // function. Warn to reserve for future use?\n  var context = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    // As a workaround to support multiple concurrent renderers, we categorize\n    // some renderers as primary and others as secondary. We only expect\n    // there to be two concurrent renderers at most: React Native (primary) and\n    // Fabric (secondary); React DOM (primary) and React ART (secondary).\n    // Secondary renderers store their context values on separate fields.\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    // Used to track how many concurrent renderers this context currently\n    // supports within in a single renderer. Such as parallel server rendering.\n    _threadCount: 0,\n    // These are circular\n    Provider: null,\n    Consumer: null,\n    // Add these to use same hidden class in VM as ServerContext\n    _defaultValue: null,\n    _globalName: null\n  };\n  context.Provider = {\n    $$typeof: REACT_PROVIDER_TYPE,\n    _context: context\n  };\n  var hasWarnedAboutUsingNestedContextConsumers = false;\n  var hasWarnedAboutUsingConsumerProvider = false;\n  var hasWarnedAboutDisplayNameOnConsumer = false;\n\n  {\n    // A separate object, but proxies back to the original context object for\n    // backwards compatibility. It has a different $$typeof, so we can properly\n    // warn for the incorrect usage of Context as a Consumer.\n    var Consumer = {\n      $$typeof: REACT_CONTEXT_TYPE,\n      _context: context\n    }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n    Object.defineProperties(Consumer, {\n      Provider: {\n        get: function () {\n          if (!hasWarnedAboutUsingConsumerProvider) {\n            hasWarnedAboutUsingConsumerProvider = true;\n\n            error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n          }\n\n          return context.Provider;\n        },\n        set: function (_Provider) {\n          context.Provider = _Provider;\n        }\n      },\n      _currentValue: {\n        get: function () {\n          return context._currentValue;\n        },\n        set: function (_currentValue) {\n          context._currentValue = _currentValue;\n        }\n      },\n      _currentValue2: {\n        get: function () {\n          return context._currentValue2;\n        },\n        set: function (_currentValue2) {\n          context._currentValue2 = _currentValue2;\n        }\n      },\n      _threadCount: {\n        get: function () {\n          return context._threadCount;\n        },\n        set: function (_threadCount) {\n          context._threadCount = _threadCount;\n        }\n      },\n      Consumer: {\n        get: function () {\n          if (!hasWarnedAboutUsingNestedContextConsumers) {\n            hasWarnedAboutUsingNestedContextConsumers = true;\n\n            error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n          }\n\n          return context.Consumer;\n        }\n      },\n      displayName: {\n        get: function () {\n          return context.displayName;\n        },\n        set: function (displayName) {\n          if (!hasWarnedAboutDisplayNameOnConsumer) {\n            warn('Setting `displayName` on Context.Consumer has no effect. ' + \"You should set it directly on the context with Context.displayName = '%s'.\", displayName);\n\n            hasWarnedAboutDisplayNameOnConsumer = true;\n          }\n        }\n      }\n    }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n    context.Consumer = Consumer;\n  }\n\n  {\n    context._currentRenderer = null;\n    context._currentRenderer2 = null;\n  }\n\n  return context;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\n\nfunction lazyInitializer(payload) {\n  if (payload._status === Uninitialized) {\n    var ctor = payload._result;\n    var thenable = ctor(); // Transition to the next state.\n    // This might throw either because it's missing or throws. If so, we treat it\n    // as still uninitialized and try again next time. Which is the same as what\n    // happens if the ctor or any wrappers processing the ctor throws. This might\n    // end up fixing it if the resolution was a concurrency bug.\n\n    thenable.then(function (moduleObject) {\n      if (payload._status === Pending || payload._status === Uninitialized) {\n        // Transition to the next state.\n        var resolved = payload;\n        resolved._status = Resolved;\n        resolved._result = moduleObject;\n      }\n    }, function (error) {\n      if (payload._status === Pending || payload._status === Uninitialized) {\n        // Transition to the next state.\n        var rejected = payload;\n        rejected._status = Rejected;\n        rejected._result = error;\n      }\n    });\n\n    if (payload._status === Uninitialized) {\n      // In case, we're still uninitialized, then we're waiting for the thenable\n      // to resolve. Set it as pending in the meantime.\n      var pending = payload;\n      pending._status = Pending;\n      pending._result = thenable;\n    }\n  }\n\n  if (payload._status === Resolved) {\n    var moduleObject = payload._result;\n\n    {\n      if (moduleObject === undefined) {\n        error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n  ' + // Break up imports to avoid accidentally parsing them as dependencies.\n        'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\\n\\n\" + 'Did you accidentally put curly braces around the import?', moduleObject);\n      }\n    }\n\n    {\n      if (!('default' in moduleObject)) {\n        error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n  ' + // Break up imports to avoid accidentally parsing them as dependencies.\n        'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\", moduleObject);\n      }\n    }\n\n    return moduleObject.default;\n  } else {\n    throw payload._result;\n  }\n}\n\nfunction lazy(ctor) {\n  var payload = {\n    // We use these fields to store the result.\n    _status: Uninitialized,\n    _result: ctor\n  };\n  var lazyType = {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: payload,\n    _init: lazyInitializer\n  };\n\n  {\n    // In production, this would just set it on the object.\n    var defaultProps;\n    var propTypes; // $FlowFixMe\n\n    Object.defineProperties(lazyType, {\n      defaultProps: {\n        configurable: true,\n        get: function () {\n          return defaultProps;\n        },\n        set: function (newDefaultProps) {\n          error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          defaultProps = newDefaultProps; // Match production behavior more closely:\n          // $FlowFixMe\n\n          Object.defineProperty(lazyType, 'defaultProps', {\n            enumerable: true\n          });\n        }\n      },\n      propTypes: {\n        configurable: true,\n        get: function () {\n          return propTypes;\n        },\n        set: function (newPropTypes) {\n          error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n          propTypes = newPropTypes; // Match production behavior more closely:\n          // $FlowFixMe\n\n          Object.defineProperty(lazyType, 'propTypes', {\n            enumerable: true\n          });\n        }\n      }\n    });\n  }\n\n  return lazyType;\n}\n\nfunction forwardRef(render) {\n  {\n    if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n      error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n    } else if (typeof render !== 'function') {\n      error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n    } else {\n      if (render.length !== 0 && render.length !== 2) {\n        error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n      }\n    }\n\n    if (render != null) {\n      if (render.defaultProps != null || render.propTypes != null) {\n        error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n      }\n    }\n  }\n\n  var elementType = {\n    $$typeof: REACT_FORWARD_REF_TYPE,\n    render: render\n  };\n\n  {\n    var ownName;\n    Object.defineProperty(elementType, 'displayName', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n        return ownName;\n      },\n      set: function (name) {\n        ownName = name; // The inner component shouldn't inherit this display name in most cases,\n        // because the component may be used elsewhere.\n        // But it's nice for anonymous functions to inherit the name,\n        // so that our component-stack generation logic will display their frames.\n        // An anonymous function generally suggests a pattern like:\n        //   React.forwardRef((props, ref) => {...});\n        // This kind of inner function is not used elsewhere so the side effect is okay.\n\n        if (!render.name && !render.displayName) {\n          render.displayName = name;\n        }\n      }\n    });\n  }\n\n  return elementType;\n}\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction memo(type, compare) {\n  {\n    if (!isValidElementType(type)) {\n      error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n    }\n  }\n\n  var elementType = {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: compare === undefined ? null : compare\n  };\n\n  {\n    var ownName;\n    Object.defineProperty(elementType, 'displayName', {\n      enumerable: false,\n      configurable: true,\n      get: function () {\n        return ownName;\n      },\n      set: function (name) {\n        ownName = name; // The inner component shouldn't inherit this display name in most cases,\n        // because the component may be used elsewhere.\n        // But it's nice for anonymous functions to inherit the name,\n        // so that our component-stack generation logic will display their frames.\n        // An anonymous function generally suggests a pattern like:\n        //   React.memo((props) => {...});\n        // This kind of inner function is not used elsewhere so the side effect is okay.\n\n        if (!type.name && !type.displayName) {\n          type.displayName = name;\n        }\n      }\n    });\n  }\n\n  return elementType;\n}\n\nfunction resolveDispatcher() {\n  var dispatcher = ReactCurrentDispatcher.current;\n\n  {\n    if (dispatcher === null) {\n      error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n    }\n  } // Will result in a null access error if accessed outside render phase. We\n  // intentionally don't throw our own error because this is in a hot path.\n  // Also helps ensure this is inlined.\n\n\n  return dispatcher;\n}\nfunction useContext(Context) {\n  var dispatcher = resolveDispatcher();\n\n  {\n    // TODO: add a more generic warning for invalid values.\n    if (Context._context !== undefined) {\n      var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n      // and nobody should be using this in existing code.\n\n      if (realContext.Consumer === Context) {\n        error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n      } else if (realContext.Provider === Context) {\n        error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n      }\n    }\n  }\n\n  return dispatcher.useContext(Context);\n}\nfunction useState(initialState) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useEffect(create, deps);\n}\nfunction useInsertionEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useInsertionEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n  {\n    var dispatcher = resolveDispatcher();\n    return dispatcher.useDebugValue(value, formatterFn);\n  }\n}\nfunction useTransition() {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useTransition();\n}\nfunction useDeferredValue(value) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useDeferredValue(value);\n}\nfunction useId() {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useId();\n}\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var dispatcher = resolveDispatcher();\n  return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher$1.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher$1.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      setExtraStackFrame(stack);\n    } else {\n      setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n    if (name) {\n      return '\\n\\nCheck the render method of `' + name + '`.';\n    }\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  if (source !== undefined) {\n    var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n    var lineNumber = source.lineNumber;\n    return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n  }\n\n  return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n  if (elementProps !== null && elementProps !== undefined) {\n    return getSourceInfoErrorAddendum(elementProps.__source);\n  }\n\n  return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  var info = getDeclarationErrorAddendum();\n\n  if (!info) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n    if (parentName) {\n      info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n    }\n  }\n\n  return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n\n  element._store.validated = true;\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n  if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n    return;\n  }\n\n  ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n\n  var childOwner = '';\n\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n  }\n\n  {\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n\n  if (isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n\n      if (isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n\n    if (typeof iteratorFn === 'function') {\n      // Entry iterators used to provide implicit keys,\n      // but now we print a separate warning for them later.\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n\n        while (!(step = iterator.next()).done) {\n          if (isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\nfunction createElementWithValidation(type, props, children) {\n  var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n  // succeed and there will likely be errors in render.\n\n  if (!validType) {\n    var info = '';\n\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n    }\n\n    var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n    if (sourceInfo) {\n      info += sourceInfo;\n    } else {\n      info += getDeclarationErrorAddendum();\n    }\n\n    var typeString;\n\n    if (type === null) {\n      typeString = 'null';\n    } else if (isArray(type)) {\n      typeString = 'array';\n    } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n      typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n      info = ' Did you accidentally export a JSX literal instead of a component?';\n    } else {\n      typeString = typeof type;\n    }\n\n    {\n      error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n  }\n\n  var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n  // TODO: Drop this when these are no longer allowed as the type argument.\n\n  if (element == null) {\n    return element;\n  } // Skip key warning if the type isn't valid since our key validation logic\n  // doesn't expect a non-string/function type and can throw confusing errors.\n  // We don't want exception behavior to differ between dev and prod.\n  // (Rendering will throw with a helpful message and as soon as the type is\n  // fixed, the key warnings will appear.)\n\n\n  if (validType) {\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], type);\n    }\n  }\n\n  if (type === REACT_FRAGMENT_TYPE) {\n    validateFragmentProps(element);\n  } else {\n    validatePropTypes(element);\n  }\n\n  return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n  var validatedFactory = createElementWithValidation.bind(null, type);\n  validatedFactory.type = type;\n\n  {\n    if (!didWarnAboutDeprecatedCreateFactory) {\n      didWarnAboutDeprecatedCreateFactory = true;\n\n      warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n    } // Legacy hook: remove it\n\n\n    Object.defineProperty(validatedFactory, 'type', {\n      enumerable: false,\n      get: function () {\n        warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n        Object.defineProperty(this, 'type', {\n          value: type\n        });\n        return type;\n      }\n    });\n  }\n\n  return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n  var newElement = cloneElement.apply(this, arguments);\n\n  for (var i = 2; i < arguments.length; i++) {\n    validateChildKeys(arguments[i], newElement.type);\n  }\n\n  validatePropTypes(newElement);\n  return newElement;\n}\n\nfunction startTransition(scope, options) {\n  var prevTransition = ReactCurrentBatchConfig.transition;\n  ReactCurrentBatchConfig.transition = {};\n  var currentTransition = ReactCurrentBatchConfig.transition;\n\n  {\n    ReactCurrentBatchConfig.transition._updatedFibers = new Set();\n  }\n\n  try {\n    scope();\n  } finally {\n    ReactCurrentBatchConfig.transition = prevTransition;\n\n    {\n      if (prevTransition === null && currentTransition._updatedFibers) {\n        var updatedFibersCount = currentTransition._updatedFibers.size;\n\n        if (updatedFibersCount > 10) {\n          warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n        }\n\n        currentTransition._updatedFibers.clear();\n      }\n    }\n  }\n}\n\nvar didWarnAboutMessageChannel = false;\nvar enqueueTaskImpl = null;\nfunction enqueueTask(task) {\n  if (enqueueTaskImpl === null) {\n    try {\n      // read require off the module object to get around the bundlers.\n      // we don't want them to detect a require and bundle a Node polyfill.\n      var requireString = ('require' + Math.random()).slice(0, 7);\n      var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's\n      // version of setImmediate, bypassing fake timers if any.\n\n      enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;\n    } catch (_err) {\n      // we're in a browser\n      // we can't use regular timers because they may still be faked\n      // so we try MessageChannel+postMessage instead\n      enqueueTaskImpl = function (callback) {\n        {\n          if (didWarnAboutMessageChannel === false) {\n            didWarnAboutMessageChannel = true;\n\n            if (typeof MessageChannel === 'undefined') {\n              error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');\n            }\n          }\n        }\n\n        var channel = new MessageChannel();\n        channel.port1.onmessage = callback;\n        channel.port2.postMessage(undefined);\n      };\n    }\n  }\n\n  return enqueueTaskImpl(task);\n}\n\nvar actScopeDepth = 0;\nvar didWarnNoAwaitAct = false;\nfunction act(callback) {\n  {\n    // `act` calls can be nested, so we track the depth. This represents the\n    // number of `act` scopes on the stack.\n    var prevActScopeDepth = actScopeDepth;\n    actScopeDepth++;\n\n    if (ReactCurrentActQueue.current === null) {\n      // This is the outermost `act` scope. Initialize the queue. The reconciler\n      // will detect the queue and use it instead of Scheduler.\n      ReactCurrentActQueue.current = [];\n    }\n\n    var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;\n    var result;\n\n    try {\n      // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only\n      // set to `true` while the given callback is executed, not for updates\n      // triggered during an async event, because this is how the legacy\n      // implementation of `act` behaved.\n      ReactCurrentActQueue.isBatchingLegacy = true;\n      result = callback(); // Replicate behavior of original `act` implementation in legacy mode,\n      // which flushed updates immediately after the scope function exits, even\n      // if it's an async function.\n\n      if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {\n        var queue = ReactCurrentActQueue.current;\n\n        if (queue !== null) {\n          ReactCurrentActQueue.didScheduleLegacyUpdate = false;\n          flushActQueue(queue);\n        }\n      }\n    } catch (error) {\n      popActScope(prevActScopeDepth);\n      throw error;\n    } finally {\n      ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;\n    }\n\n    if (result !== null && typeof result === 'object' && typeof result.then === 'function') {\n      var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait\n      // for it to resolve before exiting the current scope.\n\n      var wasAwaited = false;\n      var thenable = {\n        then: function (resolve, reject) {\n          wasAwaited = true;\n          thenableResult.then(function (returnValue) {\n            popActScope(prevActScopeDepth);\n\n            if (actScopeDepth === 0) {\n              // We've exited the outermost act scope. Recursively flush the\n              // queue until there's no remaining work.\n              recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n            } else {\n              resolve(returnValue);\n            }\n          }, function (error) {\n            // The callback threw an error.\n            popActScope(prevActScopeDepth);\n            reject(error);\n          });\n        }\n      };\n\n      {\n        if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {\n          // eslint-disable-next-line no-undef\n          Promise.resolve().then(function () {}).then(function () {\n            if (!wasAwaited) {\n              didWarnNoAwaitAct = true;\n\n              error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');\n            }\n          });\n        }\n      }\n\n      return thenable;\n    } else {\n      var returnValue = result; // The callback is not an async function. Exit the current scope\n      // immediately, without awaiting.\n\n      popActScope(prevActScopeDepth);\n\n      if (actScopeDepth === 0) {\n        // Exiting the outermost act scope. Flush the queue.\n        var _queue = ReactCurrentActQueue.current;\n\n        if (_queue !== null) {\n          flushActQueue(_queue);\n          ReactCurrentActQueue.current = null;\n        } // Return a thenable. If the user awaits it, we'll flush again in\n        // case additional work was scheduled by a microtask.\n\n\n        var _thenable = {\n          then: function (resolve, reject) {\n            // Confirm we haven't re-entered another `act` scope, in case\n            // the user does something weird like await the thenable\n            // multiple times.\n            if (ReactCurrentActQueue.current === null) {\n              // Recursively flush the queue until there's no remaining work.\n              ReactCurrentActQueue.current = [];\n              recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n            } else {\n              resolve(returnValue);\n            }\n          }\n        };\n        return _thenable;\n      } else {\n        // Since we're inside a nested `act` scope, the returned thenable\n        // immediately resolves. The outer scope will flush the queue.\n        var _thenable2 = {\n          then: function (resolve, reject) {\n            resolve(returnValue);\n          }\n        };\n        return _thenable2;\n      }\n    }\n  }\n}\n\nfunction popActScope(prevActScopeDepth) {\n  {\n    if (prevActScopeDepth !== actScopeDepth - 1) {\n      error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');\n    }\n\n    actScopeDepth = prevActScopeDepth;\n  }\n}\n\nfunction recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n  {\n    var queue = ReactCurrentActQueue.current;\n\n    if (queue !== null) {\n      try {\n        flushActQueue(queue);\n        enqueueTask(function () {\n          if (queue.length === 0) {\n            // No additional work was scheduled. Finish.\n            ReactCurrentActQueue.current = null;\n            resolve(returnValue);\n          } else {\n            // Keep flushing work until there's none left.\n            recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n          }\n        });\n      } catch (error) {\n        reject(error);\n      }\n    } else {\n      resolve(returnValue);\n    }\n  }\n}\n\nvar isFlushing = false;\n\nfunction flushActQueue(queue) {\n  {\n    if (!isFlushing) {\n      // Prevent re-entrance.\n      isFlushing = true;\n      var i = 0;\n\n      try {\n        for (; i < queue.length; i++) {\n          var callback = queue[i];\n\n          do {\n            callback = callback(true);\n          } while (callback !== null);\n        }\n\n        queue.length = 0;\n      } catch (error) {\n        // If something throws, leave the remaining callbacks on the queue.\n        queue = queue.slice(i + 1);\n        throw error;\n      } finally {\n        isFlushing = false;\n      }\n    }\n  }\n}\n\nvar createElement$1 =  createElementWithValidation ;\nvar cloneElement$1 =  cloneElementWithValidation ;\nvar createFactory =  createFactoryWithValidation ;\nvar Children = {\n  map: mapChildren,\n  forEach: forEachChildren,\n  count: countChildren,\n  toArray: toArray,\n  only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.act = act;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.startTransition = startTransition;\nexports.unstable_act = act;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useDeferredValue = useDeferredValue;\nexports.useEffect = useEffect;\nexports.useId = useId;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useInsertionEffect = useInsertionEffect;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.useSyncExternalStore = useSyncExternalStore;\nexports.useTransition = useTransition;\nexports.version = ReactVersion;\n          /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n    'function'\n) {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n        \n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom-server-legacy.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var aa=require(\"react\");function l(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar p=Object.prototype.hasOwnProperty,fa=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ha={},ia={};\nfunction ja(a){if(p.call(ia,a))return!0;if(p.call(ha,a))return!1;if(fa.test(a))return ia[a]=!0;ha[a]=!0;return!1}function r(a,b,c,d,f,e,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=e;this.removeEmptyString=g}var t={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){t[a]=new r(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];t[b]=new r(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){t[a]=new r(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){t[a]=new r(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){t[a]=new r(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){t[a]=new r(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){t[a]=new r(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){t[a]=new r(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){t[a]=new r(a,5,!1,a.toLowerCase(),null,!1,!1)});var ka=/[\\-:]([a-z])/g;function la(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ka,\nla);t[b]=new r(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ka,la);t[b]=new r(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ka,la);t[b]=new r(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){t[a]=new r(a,1,!1,a.toLowerCase(),null,!1,!1)});\nt.xlinkHref=new r(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){t[a]=new r(a,1,!1,a.toLowerCase(),null,!0,!0)});\nvar u={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,\nfillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ma=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(u).forEach(function(a){ma.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);u[b]=u[a]})});var na=/[\"'&<>]/;\nfunction v(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=na.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\"&quot;\";break;case 38:b=\"&amp;\";break;case 39:b=\"&#x27;\";break;case 60:b=\"&lt;\";break;case 62:b=\"&gt;\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}var oa=/([A-Z])/g,pa=/^ms-/,qa=Array.isArray;function w(a,b){return{insertionMode:a,selectedValue:b}}\nfunction ra(a,b,c){switch(b){case \"select\":return w(1,null!=c.value?c.value:c.defaultValue);case \"svg\":return w(2,null);case \"math\":return w(3,null);case \"foreignObject\":return w(1,null);case \"table\":return w(4,null);case \"thead\":case \"tbody\":case \"tfoot\":return w(5,null);case \"colgroup\":return w(7,null);case \"tr\":return w(6,null)}return 4<=a.insertionMode||0===a.insertionMode?w(1,null):a}var sa=new Map;\nfunction ta(a,b,c){if(\"object\"!==typeof c)throw Error(l(62));b=!0;for(var d in c)if(p.call(c,d)){var f=c[d];if(null!=f&&\"boolean\"!==typeof f&&\"\"!==f){if(0===d.indexOf(\"--\")){var e=v(d);f=v((\"\"+f).trim())}else{e=d;var g=sa.get(e);void 0!==g?e=g:(g=v(e.replace(oa,\"-$1\").toLowerCase().replace(pa,\"-ms-\")),sa.set(e,g),e=g);f=\"number\"===typeof f?0===f||p.call(u,d)?\"\"+f:f+\"px\":v((\"\"+f).trim())}b?(b=!1,a.push(' style=\"',e,\":\",f)):a.push(\";\",e,\":\",f)}}b||a.push('\"')}\nfunction x(a,b,c,d){switch(c){case \"style\":ta(a,b,d);return;case \"defaultValue\":case \"defaultChecked\":case \"innerHTML\":case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":return}if(!(2<c.length)||\"o\"!==c[0]&&\"O\"!==c[0]||\"n\"!==c[1]&&\"N\"!==c[1])if(b=t.hasOwnProperty(c)?t[c]:null,null!==b){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(!b.acceptsBooleans)return}c=b.attributeName;switch(b.type){case 3:d&&a.push(\" \",c,'=\"\"');break;case 4:!0===d?a.push(\" \",c,'=\"\"'):\n!1!==d&&a.push(\" \",c,'=\"',v(d),'\"');break;case 5:isNaN(d)||a.push(\" \",c,'=\"',v(d),'\"');break;case 6:!isNaN(d)&&1<=d&&a.push(\" \",c,'=\"',v(d),'\"');break;default:b.sanitizeURL&&(d=\"\"+d),a.push(\" \",c,'=\"',v(d),'\"')}}else if(ja(c)){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(b=c.toLowerCase().slice(0,5),\"data-\"!==b&&\"aria-\"!==b)return}a.push(\" \",c,'=\"',v(d),'\"')}}\nfunction y(a,b,c){if(null!=b){if(null!=c)throw Error(l(60));if(\"object\"!==typeof b||!(\"__html\"in b))throw Error(l(61));b=b.__html;null!==b&&void 0!==b&&a.push(\"\"+b)}}function ua(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}\nfunction va(a,b,c,d){a.push(A(c));var f=c=null,e;for(e in b)if(p.call(b,e)){var g=b[e];if(null!=g)switch(e){case \"children\":c=g;break;case \"dangerouslySetInnerHTML\":f=g;break;default:x(a,d,e,g)}}a.push(\">\");y(a,f,c);return\"string\"===typeof c?(a.push(v(c)),null):c}var wa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,xa=new Map;function A(a){var b=xa.get(a);if(void 0===b){if(!wa.test(a))throw Error(l(65,a));b=\"<\"+a;xa.set(a,b)}return b}\nfunction ya(a,b,c,d,f){switch(b){case \"select\":a.push(A(\"select\"));var e=null,g=null;for(n in c)if(p.call(c,n)){var h=c[n];if(null!=h)switch(n){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"defaultValue\":case \"value\":break;default:x(a,d,n,h)}}a.push(\">\");y(a,g,e);return e;case \"option\":g=f.selectedValue;a.push(A(\"option\"));var k=h=null,m=null;var n=null;for(e in c)if(p.call(c,e)){var q=c[e];if(null!=q)switch(e){case \"children\":h=q;break;case \"selected\":m=q;break;case \"dangerouslySetInnerHTML\":n=\nq;break;case \"value\":k=q;default:x(a,d,e,q)}}if(null!=g)if(c=null!==k?\"\"+k:ua(h),qa(g))for(d=0;d<g.length;d++){if(\"\"+g[d]===c){a.push(' selected=\"\"');break}}else\"\"+g===c&&a.push(' selected=\"\"');else m&&a.push(' selected=\"\"');a.push(\">\");y(a,n,h);return h;case \"textarea\":a.push(A(\"textarea\"));n=g=e=null;for(h in c)if(p.call(c,h)&&(k=c[h],null!=k))switch(h){case \"children\":n=k;break;case \"value\":e=k;break;case \"defaultValue\":g=k;break;case \"dangerouslySetInnerHTML\":throw Error(l(91));default:x(a,d,\nh,k)}null===e&&null!==g&&(e=g);a.push(\">\");if(null!=n){if(null!=e)throw Error(l(92));if(qa(n)&&1<n.length)throw Error(l(93));e=\"\"+n}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(\"\\n\");null!==e&&a.push(v(\"\"+e));return null;case \"input\":a.push(A(\"input\"));k=n=h=e=null;for(g in c)if(p.call(c,g)&&(m=c[g],null!=m))switch(g){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(399,\"input\"));case \"defaultChecked\":k=m;break;case \"defaultValue\":h=m;break;case \"checked\":n=m;break;case \"value\":e=m;break;\ndefault:x(a,d,g,m)}null!==n?x(a,d,\"checked\",n):null!==k&&x(a,d,\"checked\",k);null!==e?x(a,d,\"value\",e):null!==h&&x(a,d,\"value\",h);a.push(\"/>\");return null;case \"menuitem\":a.push(A(\"menuitem\"));for(var C in c)if(p.call(c,C)&&(e=c[C],null!=e))switch(C){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(400));default:x(a,d,C,e)}a.push(\">\");return null;case \"title\":a.push(A(\"title\"));e=null;for(q in c)if(p.call(c,q)&&(g=c[q],null!=g))switch(q){case \"children\":e=g;break;case \"dangerouslySetInnerHTML\":throw Error(l(434));\ndefault:x(a,d,q,g)}a.push(\">\");return e;case \"listing\":case \"pre\":a.push(A(b));g=e=null;for(k in c)if(p.call(c,k)&&(h=c[k],null!=h))switch(k){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;default:x(a,d,k,h)}a.push(\">\");if(null!=g){if(null!=e)throw Error(l(60));if(\"object\"!==typeof g||!(\"__html\"in g))throw Error(l(61));c=g.__html;null!==c&&void 0!==c&&(\"string\"===typeof c&&0<c.length&&\"\\n\"===c[0]?a.push(\"\\n\",c):a.push(\"\"+c))}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(\"\\n\");return e;\ncase \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":a.push(A(b));for(var D in c)if(p.call(c,D)&&(e=c[D],null!=e))switch(D){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(l(399,b));default:x(a,d,D,e)}a.push(\"/>\");return null;case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return va(a,\nc,b,d);case \"html\":return 0===f.insertionMode&&a.push(\"<!DOCTYPE html>\"),va(a,c,b,d);default:if(-1===b.indexOf(\"-\")&&\"string\"!==typeof c.is)return va(a,c,b,d);a.push(A(b));g=e=null;for(m in c)if(p.call(c,m)&&(h=c[m],null!=h))switch(m){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"style\":ta(a,d,h);break;case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":break;default:ja(m)&&\"function\"!==typeof h&&\"symbol\"!==typeof h&&a.push(\" \",m,'=\"',v(h),'\"')}a.push(\">\");\ny(a,g,e);return e}}function za(a,b,c){a.push('\\x3c!--$?--\\x3e<template id=\"');if(null===c)throw Error(l(395));a.push(c);return a.push('\"></template>')}\nfunction Aa(a,b,c,d){switch(c.insertionMode){case 0:case 1:return a.push('<div hidden id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 2:return a.push('<svg aria-hidden=\"true\" style=\"display:none\" id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 3:return a.push('<math aria-hidden=\"true\" style=\"display:none\" id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 4:return a.push('<table hidden id=\"'),a.push(b.segmentPrefix),\nb=d.toString(16),a.push(b),a.push('\">');case 5:return a.push('<table hidden><tbody id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 6:return a.push('<table hidden><tr id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');case 7:return a.push('<table hidden><colgroup id=\"'),a.push(b.segmentPrefix),b=d.toString(16),a.push(b),a.push('\">');default:throw Error(l(397));}}\nfunction Ba(a,b){switch(b.insertionMode){case 0:case 1:return a.push(\"</div>\");case 2:return a.push(\"</svg>\");case 3:return a.push(\"</math>\");case 4:return a.push(\"</table>\");case 5:return a.push(\"</tbody></table>\");case 6:return a.push(\"</tr></table>\");case 7:return a.push(\"</colgroup></table>\");default:throw Error(l(397));}}var Ca=/[<\\u2028\\u2029]/g;\nfunction Da(a){return JSON.stringify(a).replace(Ca,function(a){switch(a){case \"<\":return\"\\\\u003c\";case \"\\u2028\":return\"\\\\u2028\";case \"\\u2029\":return\"\\\\u2029\";default:throw Error(\"escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React\");}})}\nfunction Ea(a,b){b=void 0===b?\"\":b;return{bootstrapChunks:[],startInlineScript:\"<script>\",placeholderPrefix:b+\"P:\",segmentPrefix:b+\"S:\",boundaryPrefix:b+\"B:\",idPrefix:b,nextSuspenseID:0,sentCompleteSegmentFunction:!1,sentCompleteBoundaryFunction:!1,sentClientRenderFunction:!1,generateStaticMarkup:a}}function Fa(a,b,c,d){if(c.generateStaticMarkup)return a.push(v(b)),!1;\"\"===b?a=d:(d&&a.push(\"\\x3c!-- --\\x3e\"),a.push(v(b)),a=!0);return a}\nvar B=Object.assign,Ga=Symbol.for(\"react.element\"),Ha=Symbol.for(\"react.portal\"),Ia=Symbol.for(\"react.fragment\"),Ja=Symbol.for(\"react.strict_mode\"),Ka=Symbol.for(\"react.profiler\"),La=Symbol.for(\"react.provider\"),Ma=Symbol.for(\"react.context\"),Na=Symbol.for(\"react.forward_ref\"),Oa=Symbol.for(\"react.suspense\"),Pa=Symbol.for(\"react.suspense_list\"),Qa=Symbol.for(\"react.memo\"),Ra=Symbol.for(\"react.lazy\"),Sa=Symbol.for(\"react.scope\"),Ta=Symbol.for(\"react.debug_trace_mode\"),Ua=Symbol.for(\"react.legacy_hidden\"),\nVa=Symbol.for(\"react.default_value\"),Wa=Symbol.iterator;\nfunction Xa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case Ia:return\"Fragment\";case Ha:return\"Portal\";case Ka:return\"Profiler\";case Ja:return\"StrictMode\";case Oa:return\"Suspense\";case Pa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ma:return(a.displayName||\"Context\")+\".Consumer\";case La:return(a._context.displayName||\"Context\")+\".Provider\";case Na:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Qa:return b=a.displayName||null,null!==b?b:Xa(a.type)||\"Memo\";case Ra:b=a._payload;a=a._init;try{return Xa(a(b))}catch(c){}}return null}var Ya={};function Za(a,b){a=a.contextTypes;if(!a)return Ya;var c={},d;for(d in a)c[d]=b[d];return c}var E=null;\nfunction F(a,b){if(a!==b){a.context._currentValue2=a.parentValue;a=a.parent;var c=b.parent;if(null===a){if(null!==c)throw Error(l(401));}else{if(null===c)throw Error(l(401));F(a,c)}b.context._currentValue2=b.value}}function $a(a){a.context._currentValue2=a.parentValue;a=a.parent;null!==a&&$a(a)}function ab(a){var b=a.parent;null!==b&&ab(b);a.context._currentValue2=a.value}\nfunction bb(a,b){a.context._currentValue2=a.parentValue;a=a.parent;if(null===a)throw Error(l(402));a.depth===b.depth?F(a,b):bb(a,b)}function cb(a,b){var c=b.parent;if(null===c)throw Error(l(402));a.depth===c.depth?F(a,c):cb(a,c);b.context._currentValue2=b.value}function G(a){var b=E;b!==a&&(null===b?ab(a):null===a?$a(b):b.depth===a.depth?F(b,a):b.depth>a.depth?bb(b,a):cb(b,a),E=a)}\nvar db={isMounted:function(){return!1},enqueueSetState:function(a,b){a=a._reactInternals;null!==a.queue&&a.queue.push(b)},enqueueReplaceState:function(a,b){a=a._reactInternals;a.replace=!0;a.queue=[b]},enqueueForceUpdate:function(){}};\nfunction eb(a,b,c,d){var f=void 0!==a.state?a.state:null;a.updater=db;a.props=c;a.state=f;var e={queue:[],replace:!1};a._reactInternals=e;var g=b.contextType;a.context=\"object\"===typeof g&&null!==g?g._currentValue2:d;g=b.getDerivedStateFromProps;\"function\"===typeof g&&(g=g(c,f),f=null===g||void 0===g?f:B({},f,g),a.state=f);if(\"function\"!==typeof b.getDerivedStateFromProps&&\"function\"!==typeof a.getSnapshotBeforeUpdate&&(\"function\"===typeof a.UNSAFE_componentWillMount||\"function\"===typeof a.componentWillMount))if(b=\na.state,\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),b!==a.state&&db.enqueueReplaceState(a,a.state,null),null!==e.queue&&0<e.queue.length)if(b=e.queue,g=e.replace,e.queue=null,e.replace=!1,g&&1===b.length)a.state=b[0];else{e=g?b[0]:a.state;f=!0;for(g=g?1:0;g<b.length;g++){var h=b[g];h=\"function\"===typeof h?h.call(a,e,c,d):h;null!=h&&(f?(f=!1,e=B({},e,h)):B(e,h))}a.state=e}else e.queue=null}\nvar fb={id:1,overflow:\"\"};function gb(a,b,c){var d=a.id;a=a.overflow;var f=32-H(d)-1;d&=~(1<<f);c+=1;var e=32-H(b)+f;if(30<e){var g=f-f%5;e=(d&(1<<g)-1).toString(32);d>>=g;f-=g;return{id:1<<32-H(b)+f|c<<f|d,overflow:e+a}}return{id:1<<e|c<<f|d,overflow:a}}var H=Math.clz32?Math.clz32:hb,ib=Math.log,jb=Math.LN2;function hb(a){a>>>=0;return 0===a?32:31-(ib(a)/jb|0)|0}function kb(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar lb=\"function\"===typeof Object.is?Object.is:kb,I=null,ob=null,J=null,K=null,L=!1,M=!1,N=0,O=null,P=0;function Q(){if(null===I)throw Error(l(321));return I}function pb(){if(0<P)throw Error(l(312));return{memoizedState:null,queue:null,next:null}}function qb(){null===K?null===J?(L=!1,J=K=pb()):(L=!0,K=J):null===K.next?(L=!1,K=K.next=pb()):(L=!0,K=K.next);return K}function rb(){ob=I=null;M=!1;J=null;P=0;K=O=null}function sb(a,b){return\"function\"===typeof b?b(a):b}\nfunction tb(a,b,c){I=Q();K=qb();if(L){var d=K.queue;b=d.dispatch;if(null!==O&&(c=O.get(d),void 0!==c)){O.delete(d);d=K.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);K.memoizedState=d;return[d,b]}return[K.memoizedState,b]}a=a===sb?\"function\"===typeof b?b():b:void 0!==c?c(b):b;K.memoizedState=a;a=K.queue={last:null,dispatch:null};a=a.dispatch=ub.bind(null,I,a);return[K.memoizedState,a]}\nfunction vb(a,b){I=Q();K=qb();b=void 0===b?null:b;if(null!==K){var c=K.memoizedState;if(null!==c&&null!==b){var d=c[1];a:if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!lb(b[f],d[f])){d=!1;break a}d=!0}if(d)return c[0]}}a=a();K.memoizedState=[a,b];return a}function ub(a,b,c){if(25<=P)throw Error(l(301));if(a===I)if(M=!0,a={action:c,next:null},null===O&&(O=new Map),c=O.get(b),void 0===c)O.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function wb(){throw Error(l(394));}\nfunction R(){}\nvar xb={readContext:function(a){return a._currentValue2},useContext:function(a){Q();return a._currentValue2},useMemo:vb,useReducer:tb,useRef:function(a){I=Q();K=qb();var b=K.memoizedState;return null===b?(a={current:a},K.memoizedState=a):b},useState:function(a){return tb(sb,a)},useInsertionEffect:R,useLayoutEffect:function(){},useCallback:function(a,b){return vb(function(){return a},b)},useImperativeHandle:R,useEffect:R,useDebugValue:R,useDeferredValue:function(a){Q();return a},useTransition:function(){Q();return[!1,\nwb]},useId:function(){var a=ob.treeContext;var b=a.overflow;a=a.id;a=(a&~(1<<32-H(a)-1)).toString(32)+b;var c=S;if(null===c)throw Error(l(404));b=N++;a=\":\"+c.idPrefix+\"R\"+a;0<b&&(a+=\"H\"+b.toString(32));return a+\":\"},useMutableSource:function(a,b){Q();return b(a._source)},useSyncExternalStore:function(a,b,c){if(void 0===c)throw Error(l(407));return c()}},S=null,yb=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher;function zb(a){console.error(a);return null}\nfunction T(){}\nfunction Ab(a,b,c,d,f,e,g,h,k){var m=[],n=new Set;b={destination:null,responseState:b,progressiveChunkSize:void 0===d?12800:d,status:0,fatalError:null,nextSegmentId:0,allPendingTasks:0,pendingRootTasks:0,completedRootSegment:null,abortableTasks:n,pingedTasks:m,clientRenderedBoundaries:[],completedBoundaries:[],partialBoundaries:[],onError:void 0===f?zb:f,onAllReady:void 0===e?T:e,onShellReady:void 0===g?T:g,onShellError:void 0===h?T:h,onFatalError:void 0===k?T:k};c=U(b,0,null,c,!1,!1);c.parentFlushed=\n!0;a=Bb(b,a,null,c,n,Ya,null,fb);m.push(a);return b}function Bb(a,b,c,d,f,e,g,h){a.allPendingTasks++;null===c?a.pendingRootTasks++:c.pendingTasks++;var k={node:b,ping:function(){var b=a.pingedTasks;b.push(k);1===b.length&&Cb(a)},blockedBoundary:c,blockedSegment:d,abortSet:f,legacyContext:e,context:g,treeContext:h};f.add(k);return k}function U(a,b,c,d,f,e){return{status:0,id:-1,index:b,parentFlushed:!1,chunks:[],children:[],formatContext:d,boundary:c,lastPushedText:f,textEmbedded:e}}\nfunction V(a,b){a=a.onError(b);if(null!=a&&\"string\"!==typeof a)throw Error('onError returned something with a type other than \"string\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \"'+typeof a+'\" instead');return a}function W(a,b){var c=a.onShellError;c(b);c=a.onFatalError;c(b);null!==a.destination?(a.status=2,a.destination.destroy(b)):(a.status=1,a.fatalError=b)}\nfunction Db(a,b,c,d,f){I={};ob=b;N=0;for(a=c(d,f);M;)M=!1,N=0,P+=1,K=null,a=c(d,f);rb();return a}function Eb(a,b,c,d){var f=c.render(),e=d.childContextTypes;if(null!==e&&void 0!==e){var g=b.legacyContext;if(\"function\"!==typeof c.getChildContext)d=g;else{c=c.getChildContext();for(var h in c)if(!(h in e))throw Error(l(108,Xa(d)||\"Unknown\",h));d=B({},g,c)}b.legacyContext=d;X(a,b,f);b.legacyContext=g}else X(a,b,f)}\nfunction Fb(a,b){if(a&&a.defaultProps){b=B({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}\nfunction Gb(a,b,c,d,f){if(\"function\"===typeof c)if(c.prototype&&c.prototype.isReactComponent){f=Za(c,b.legacyContext);var e=c.contextType;e=new c(d,\"object\"===typeof e&&null!==e?e._currentValue2:f);eb(e,c,d,f);Eb(a,b,e,c)}else{e=Za(c,b.legacyContext);f=Db(a,b,c,d,e);var g=0!==N;if(\"object\"===typeof f&&null!==f&&\"function\"===typeof f.render&&void 0===f.$$typeof)eb(f,c,d,e),Eb(a,b,f,c);else if(g){d=b.treeContext;b.treeContext=gb(d,1,0);try{X(a,b,f)}finally{b.treeContext=d}}else X(a,b,f)}else if(\"string\"===\ntypeof c){f=b.blockedSegment;e=ya(f.chunks,c,d,a.responseState,f.formatContext);f.lastPushedText=!1;g=f.formatContext;f.formatContext=ra(g,c,d);Hb(a,b,e);f.formatContext=g;switch(c){case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"input\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":break;default:f.chunks.push(\"</\",c,\">\")}f.lastPushedText=!1}else{switch(c){case Ua:case Ta:case Ja:case Ka:case Ia:X(a,b,d.children);return;\ncase Pa:X(a,b,d.children);return;case Sa:throw Error(l(343));case Oa:a:{c=b.blockedBoundary;f=b.blockedSegment;e=d.fallback;d=d.children;g=new Set;var h={id:null,rootSegmentID:-1,parentFlushed:!1,pendingTasks:0,forceClientRender:!1,completedSegments:[],byteSize:0,fallbackAbortableTasks:g,errorDigest:null},k=U(a,f.chunks.length,h,f.formatContext,!1,!1);f.children.push(k);f.lastPushedText=!1;var m=U(a,0,null,f.formatContext,!1,!1);m.parentFlushed=!0;b.blockedBoundary=h;b.blockedSegment=m;try{if(Hb(a,\nb,d),a.responseState.generateStaticMarkup||m.lastPushedText&&m.textEmbedded&&m.chunks.push(\"\\x3c!-- --\\x3e\"),m.status=1,Y(h,m),0===h.pendingTasks)break a}catch(n){m.status=4,h.forceClientRender=!0,h.errorDigest=V(a,n)}finally{b.blockedBoundary=c,b.blockedSegment=f}b=Bb(a,e,c,k,g,b.legacyContext,b.context,b.treeContext);a.pingedTasks.push(b)}return}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case Na:d=Db(a,b,c.render,d,f);if(0!==N){c=b.treeContext;b.treeContext=gb(c,1,0);try{X(a,b,d)}finally{b.treeContext=\nc}}else X(a,b,d);return;case Qa:c=c.type;d=Fb(c,d);Gb(a,b,c,d,f);return;case La:f=d.children;c=c._context;d=d.value;e=c._currentValue2;c._currentValue2=d;g=E;E=d={parent:g,depth:null===g?0:g.depth+1,context:c,parentValue:e,value:d};b.context=d;X(a,b,f);a=E;if(null===a)throw Error(l(403));d=a.parentValue;a.context._currentValue2=d===Va?a.context._defaultValue:d;a=E=a.parent;b.context=a;return;case Ma:d=d.children;d=d(c._currentValue2);X(a,b,d);return;case Ra:f=c._init;c=f(c._payload);d=Fb(c,d);Gb(a,\nb,c,d,void 0);return}throw Error(l(130,null==c?c:typeof c,\"\"));}}\nfunction X(a,b,c){b.node=c;if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Ga:Gb(a,b,c.type,c.props,c.ref);return;case Ha:throw Error(l(257));case Ra:var d=c._init;c=d(c._payload);X(a,b,c);return}if(qa(c)){Ib(a,b,c);return}null===c||\"object\"!==typeof c?d=null:(d=Wa&&c[Wa]||c[\"@@iterator\"],d=\"function\"===typeof d?d:null);if(d&&(d=d.call(c))){c=d.next();if(!c.done){var f=[];do f.push(c.value),c=d.next();while(!c.done);Ib(a,b,f)}return}a=Object.prototype.toString.call(c);throw Error(l(31,\"[object Object]\"===\na?\"object with keys {\"+Object.keys(c).join(\", \")+\"}\":a));}\"string\"===typeof c?(d=b.blockedSegment,d.lastPushedText=Fa(b.blockedSegment.chunks,c,a.responseState,d.lastPushedText)):\"number\"===typeof c&&(d=b.blockedSegment,d.lastPushedText=Fa(b.blockedSegment.chunks,\"\"+c,a.responseState,d.lastPushedText))}function Ib(a,b,c){for(var d=c.length,f=0;f<d;f++){var e=b.treeContext;b.treeContext=gb(e,d,f);try{Hb(a,b,c[f])}finally{b.treeContext=e}}}\nfunction Hb(a,b,c){var d=b.blockedSegment.formatContext,f=b.legacyContext,e=b.context;try{return X(a,b,c)}catch(k){if(rb(),\"object\"===typeof k&&null!==k&&\"function\"===typeof k.then){c=k;var g=b.blockedSegment,h=U(a,g.chunks.length,null,g.formatContext,g.lastPushedText,!0);g.children.push(h);g.lastPushedText=!1;a=Bb(a,b.node,b.blockedBoundary,h,b.abortSet,b.legacyContext,b.context,b.treeContext).ping;c.then(a,a);b.blockedSegment.formatContext=d;b.legacyContext=f;b.context=e;G(e)}else throw b.blockedSegment.formatContext=\nd,b.legacyContext=f,b.context=e,G(e),k;}}function Jb(a){var b=a.blockedBoundary;a=a.blockedSegment;a.status=3;Kb(this,b,a)}\nfunction Lb(a,b,c){var d=a.blockedBoundary;a.blockedSegment.status=3;null===d?(b.allPendingTasks--,2!==b.status&&(b.status=2,null!==b.destination&&b.destination.push(null))):(d.pendingTasks--,d.forceClientRender||(d.forceClientRender=!0,a=void 0===c?Error(l(432)):c,d.errorDigest=b.onError(a),d.parentFlushed&&b.clientRenderedBoundaries.push(d)),d.fallbackAbortableTasks.forEach(function(a){return Lb(a,b,c)}),d.fallbackAbortableTasks.clear(),b.allPendingTasks--,0===b.allPendingTasks&&(d=b.onAllReady,\nd()))}function Y(a,b){if(0===b.chunks.length&&1===b.children.length&&null===b.children[0].boundary){var c=b.children[0];c.id=b.id;c.parentFlushed=!0;1===c.status&&Y(a,c)}else a.completedSegments.push(b)}\nfunction Kb(a,b,c){if(null===b){if(c.parentFlushed){if(null!==a.completedRootSegment)throw Error(l(389));a.completedRootSegment=c}a.pendingRootTasks--;0===a.pendingRootTasks&&(a.onShellError=T,b=a.onShellReady,b())}else b.pendingTasks--,b.forceClientRender||(0===b.pendingTasks?(c.parentFlushed&&1===c.status&&Y(b,c),b.parentFlushed&&a.completedBoundaries.push(b),b.fallbackAbortableTasks.forEach(Jb,a),b.fallbackAbortableTasks.clear()):c.parentFlushed&&1===c.status&&(Y(b,c),1===b.completedSegments.length&&\nb.parentFlushed&&a.partialBoundaries.push(b)));a.allPendingTasks--;0===a.allPendingTasks&&(a=a.onAllReady,a())}\nfunction Cb(a){if(2!==a.status){var b=E,c=yb.current;yb.current=xb;var d=S;S=a.responseState;try{var f=a.pingedTasks,e;for(e=0;e<f.length;e++){var g=f[e];var h=a,k=g.blockedSegment;if(0===k.status){G(g.context);try{X(h,g,g.node),h.responseState.generateStaticMarkup||k.lastPushedText&&k.textEmbedded&&k.chunks.push(\"\\x3c!-- --\\x3e\"),g.abortSet.delete(g),k.status=1,Kb(h,g.blockedBoundary,k)}catch(z){if(rb(),\"object\"===typeof z&&null!==z&&\"function\"===typeof z.then){var m=g.ping;z.then(m,m)}else{g.abortSet.delete(g);\nk.status=4;var n=g.blockedBoundary,q=z,C=V(h,q);null===n?W(h,q):(n.pendingTasks--,n.forceClientRender||(n.forceClientRender=!0,n.errorDigest=C,n.parentFlushed&&h.clientRenderedBoundaries.push(n)));h.allPendingTasks--;if(0===h.allPendingTasks){var D=h.onAllReady;D()}}}finally{}}}f.splice(0,e);null!==a.destination&&Mb(a,a.destination)}catch(z){V(a,z),W(a,z)}finally{S=d,yb.current=c,c===xb&&G(b)}}}\nfunction Z(a,b,c){c.parentFlushed=!0;switch(c.status){case 0:var d=c.id=a.nextSegmentId++;c.lastPushedText=!1;c.textEmbedded=!1;a=a.responseState;b.push('<template id=\"');b.push(a.placeholderPrefix);a=d.toString(16);b.push(a);return b.push('\"></template>');case 1:c.status=2;var f=!0;d=c.chunks;var e=0;c=c.children;for(var g=0;g<c.length;g++){for(f=c[g];e<f.index;e++)b.push(d[e]);f=Nb(a,b,f)}for(;e<d.length-1;e++)b.push(d[e]);e<d.length&&(f=b.push(d[e]));return f;default:throw Error(l(390));}}\nfunction Nb(a,b,c){var d=c.boundary;if(null===d)return Z(a,b,c);d.parentFlushed=!0;if(d.forceClientRender)return a.responseState.generateStaticMarkup||(d=d.errorDigest,b.push(\"\\x3c!--$!--\\x3e\"),b.push(\"<template\"),d&&(b.push(' data-dgst=\"'),d=v(d),b.push(d),b.push('\"')),b.push(\"></template>\")),Z(a,b,c),a=a.responseState.generateStaticMarkup?!0:b.push(\"\\x3c!--/$--\\x3e\"),a;if(0<d.pendingTasks){d.rootSegmentID=a.nextSegmentId++;0<d.completedSegments.length&&a.partialBoundaries.push(d);var f=a.responseState;\nvar e=f.nextSuspenseID++;f=f.boundaryPrefix+e.toString(16);d=d.id=f;za(b,a.responseState,d);Z(a,b,c);return b.push(\"\\x3c!--/$--\\x3e\")}if(d.byteSize>a.progressiveChunkSize)return d.rootSegmentID=a.nextSegmentId++,a.completedBoundaries.push(d),za(b,a.responseState,d.id),Z(a,b,c),b.push(\"\\x3c!--/$--\\x3e\");a.responseState.generateStaticMarkup||b.push(\"\\x3c!--$--\\x3e\");c=d.completedSegments;if(1!==c.length)throw Error(l(391));Nb(a,b,c[0]);a=a.responseState.generateStaticMarkup?!0:b.push(\"\\x3c!--/$--\\x3e\");\nreturn a}function Ob(a,b,c){Aa(b,a.responseState,c.formatContext,c.id);Nb(a,b,c);return Ba(b,c.formatContext)}\nfunction Pb(a,b,c){for(var d=c.completedSegments,f=0;f<d.length;f++)Qb(a,b,c,d[f]);d.length=0;a=a.responseState;d=c.id;c=c.rootSegmentID;b.push(a.startInlineScript);a.sentCompleteBoundaryFunction?b.push('$RC(\"'):(a.sentCompleteBoundaryFunction=!0,b.push('function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}};$RC(\"'));if(null===\nd)throw Error(l(395));c=c.toString(16);b.push(d);b.push('\",\"');b.push(a.segmentPrefix);b.push(c);return b.push('\")\\x3c/script>')}\nfunction Qb(a,b,c,d){if(2===d.status)return!0;var f=d.id;if(-1===f){if(-1===(d.id=c.rootSegmentID))throw Error(l(392));return Ob(a,b,d)}Ob(a,b,d);a=a.responseState;b.push(a.startInlineScript);a.sentCompleteSegmentFunction?b.push('$RS(\"'):(a.sentCompleteSegmentFunction=!0,b.push('function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS(\"'));b.push(a.segmentPrefix);\nf=f.toString(16);b.push(f);b.push('\",\"');b.push(a.placeholderPrefix);b.push(f);return b.push('\")\\x3c/script>')}\nfunction Mb(a,b){try{var c=a.completedRootSegment;if(null!==c&&0===a.pendingRootTasks){Nb(a,b,c);a.completedRootSegment=null;var d=a.responseState.bootstrapChunks;for(c=0;c<d.length-1;c++)b.push(d[c]);c<d.length&&b.push(d[c])}var f=a.clientRenderedBoundaries,e;for(e=0;e<f.length;e++){var g=f[e];d=b;var h=a.responseState,k=g.id,m=g.errorDigest,n=g.errorMessage,q=g.errorComponentStack;d.push(h.startInlineScript);h.sentClientRenderFunction?d.push('$RX(\"'):(h.sentClientRenderFunction=!0,d.push('function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())};$RX(\"'));\nif(null===k)throw Error(l(395));d.push(k);d.push('\"');if(m||n||q){d.push(\",\");var C=Da(m||\"\");d.push(C)}if(n||q){d.push(\",\");var D=Da(n||\"\");d.push(D)}if(q){d.push(\",\");var z=Da(q);d.push(z)}if(!d.push(\")\\x3c/script>\")){a.destination=null;e++;f.splice(0,e);return}}f.splice(0,e);var ba=a.completedBoundaries;for(e=0;e<ba.length;e++)if(!Pb(a,b,ba[e])){a.destination=null;e++;ba.splice(0,e);return}ba.splice(0,e);var ca=a.partialBoundaries;for(e=0;e<ca.length;e++){var mb=ca[e];a:{f=a;g=b;var da=mb.completedSegments;\nfor(h=0;h<da.length;h++)if(!Qb(f,g,mb,da[h])){h++;da.splice(0,h);var nb=!1;break a}da.splice(0,h);nb=!0}if(!nb){a.destination=null;e++;ca.splice(0,e);return}}ca.splice(0,e);var ea=a.completedBoundaries;for(e=0;e<ea.length;e++)if(!Pb(a,b,ea[e])){a.destination=null;e++;ea.splice(0,e);return}ea.splice(0,e)}finally{0===a.allPendingTasks&&0===a.pingedTasks.length&&0===a.clientRenderedBoundaries.length&&0===a.completedBoundaries.length&&b.push(null)}}\nfunction Rb(a,b){try{var c=a.abortableTasks;c.forEach(function(c){return Lb(c,a,b)});c.clear();null!==a.destination&&Mb(a,a.destination)}catch(d){V(a,d),W(a,d)}}function Sb(){}\nfunction Tb(a,b,c,d){var f=!1,e=null,g=\"\",h={push:function(a){null!==a&&(g+=a);return!0},destroy:function(a){f=!0;e=a}},k=!1;a=Ab(a,Ea(c,b?b.identifierPrefix:void 0),{insertionMode:1,selectedValue:null},Infinity,Sb,void 0,function(){k=!0},void 0,void 0);Cb(a);Rb(a,d);if(1===a.status)a.status=2,h.destroy(a.fatalError);else if(2!==a.status&&null===a.destination){a.destination=h;try{Mb(a,h)}catch(m){V(a,m),W(a,m)}}if(f)throw e;if(!k)throw Error(l(426));return g}\nexports.renderToNodeStream=function(){throw Error(l(207));};exports.renderToStaticMarkup=function(a,b){return Tb(a,b,!0,'The server used \"renderToStaticMarkup\" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server')};exports.renderToStaticNodeStream=function(){throw Error(l(208));};exports.renderToString=function(a,b){return Tb(a,b,!1,'The server used \"renderToString\" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server')};\nexports.version=\"18.3.1\";\n","/**\n * @license React\n * react-dom-server.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var aa=require(\"react\");function k(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var l=null,n=0;\nfunction p(a,b){if(0!==b.length)if(512<b.length)0<n&&(a.enqueue(new Uint8Array(l.buffer,0,n)),l=new Uint8Array(512),n=0),a.enqueue(b);else{var c=l.length-n;c<b.length&&(0===c?a.enqueue(l):(l.set(b.subarray(0,c),n),a.enqueue(l),b=b.subarray(c)),l=new Uint8Array(512),n=0);l.set(b,n);n+=b.length}}function t(a,b){p(a,b);return!0}function ba(a){l&&0<n&&(a.enqueue(new Uint8Array(l.buffer,0,n)),l=null,n=0)}var ca=new TextEncoder;function u(a){return ca.encode(a)}function w(a){return ca.encode(a)}\nfunction da(a,b){\"function\"===typeof a.error?a.error(b):a.close()}var x=Object.prototype.hasOwnProperty,ea=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,fa={},ha={};\nfunction ia(a){if(x.call(ha,a))return!0;if(x.call(fa,a))return!1;if(ea.test(a))return ha[a]=!0;fa[a]=!0;return!1}function y(a,b,c,d,f,e,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=e;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new y(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new y(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new y(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new y(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new y(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new y(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new y(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new y(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new y(a,5,!1,a.toLowerCase(),null,!1,!1)});var ja=/[\\-:]([a-z])/g;function ka(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ja,\nka);z[b]=new y(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ja,ka);z[b]=new y(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ja,ka);z[b]=new y(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new y(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new y(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new y(a,1,!1,a.toLowerCase(),null,!0,!0)});\nvar B={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,\nfillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},la=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(B).forEach(function(a){la.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);B[b]=B[a]})});var oa=/[\"'&<>]/;\nfunction C(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=oa.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\"&quot;\";break;case 38:b=\"&amp;\";break;case 39:b=\"&#x27;\";break;case 60:b=\"&lt;\";break;case 62:b=\"&gt;\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}\nvar pa=/([A-Z])/g,qa=/^ms-/,ra=Array.isArray,sa=w(\"<script>\"),ta=w(\"\\x3c/script>\"),ua=w('<script src=\"'),va=w('<script type=\"module\" src=\"'),wa=w('\" async=\"\">\\x3c/script>'),xa=/(<\\/|<)(s)(cript)/gi;function ya(a,b,c,d){return\"\"+b+(\"s\"===c?\"\\\\u0073\":\"\\\\u0053\")+d}\nfunction za(a,b,c,d,f){a=void 0===a?\"\":a;b=void 0===b?sa:w('<script nonce=\"'+C(b)+'\">');var e=[];void 0!==c&&e.push(b,u((\"\"+c).replace(xa,ya)),ta);if(void 0!==d)for(c=0;c<d.length;c++)e.push(ua,u(C(d[c])),wa);if(void 0!==f)for(d=0;d<f.length;d++)e.push(va,u(C(f[d])),wa);return{bootstrapChunks:e,startInlineScript:b,placeholderPrefix:w(a+\"P:\"),segmentPrefix:w(a+\"S:\"),boundaryPrefix:a+\"B:\",idPrefix:a,nextSuspenseID:0,sentCompleteSegmentFunction:!1,sentCompleteBoundaryFunction:!1,sentClientRenderFunction:!1}}\nfunction D(a,b){return{insertionMode:a,selectedValue:b}}function Aa(a){return D(\"http://www.w3.org/2000/svg\"===a?2:\"http://www.w3.org/1998/Math/MathML\"===a?3:0,null)}\nfunction Ba(a,b,c){switch(b){case \"select\":return D(1,null!=c.value?c.value:c.defaultValue);case \"svg\":return D(2,null);case \"math\":return D(3,null);case \"foreignObject\":return D(1,null);case \"table\":return D(4,null);case \"thead\":case \"tbody\":case \"tfoot\":return D(5,null);case \"colgroup\":return D(7,null);case \"tr\":return D(6,null)}return 4<=a.insertionMode||0===a.insertionMode?D(1,null):a}var Ca=w(\"\\x3c!-- --\\x3e\");function Da(a,b,c,d){if(\"\"===b)return d;d&&a.push(Ca);a.push(u(C(b)));return!0}\nvar Ea=new Map,Fa=w(' style=\"'),Ga=w(\":\"),Ha=w(\";\");\nfunction Ia(a,b,c){if(\"object\"!==typeof c)throw Error(k(62));b=!0;for(var d in c)if(x.call(c,d)){var f=c[d];if(null!=f&&\"boolean\"!==typeof f&&\"\"!==f){if(0===d.indexOf(\"--\")){var e=u(C(d));f=u(C((\"\"+f).trim()))}else{e=d;var g=Ea.get(e);void 0!==g?e=g:(g=w(C(e.replace(pa,\"-$1\").toLowerCase().replace(qa,\"-ms-\"))),Ea.set(e,g),e=g);f=\"number\"===typeof f?0===f||x.call(B,d)?u(\"\"+f):u(f+\"px\"):u(C((\"\"+f).trim()))}b?(b=!1,a.push(Fa,e,Ga,f)):a.push(Ha,e,Ga,f)}}b||a.push(E)}\nvar H=w(\" \"),I=w('=\"'),E=w('\"'),Ja=w('=\"\"');\nfunction J(a,b,c,d){switch(c){case \"style\":Ia(a,b,d);return;case \"defaultValue\":case \"defaultChecked\":case \"innerHTML\":case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":return}if(!(2<c.length)||\"o\"!==c[0]&&\"O\"!==c[0]||\"n\"!==c[1]&&\"N\"!==c[1])if(b=z.hasOwnProperty(c)?z[c]:null,null!==b){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(!b.acceptsBooleans)return}c=u(b.attributeName);switch(b.type){case 3:d&&a.push(H,c,Ja);break;case 4:!0===d?a.push(H,c,Ja):!1!==\nd&&a.push(H,c,I,u(C(d)),E);break;case 5:isNaN(d)||a.push(H,c,I,u(C(d)),E);break;case 6:!isNaN(d)&&1<=d&&a.push(H,c,I,u(C(d)),E);break;default:b.sanitizeURL&&(d=\"\"+d),a.push(H,c,I,u(C(d)),E)}}else if(ia(c)){switch(typeof d){case \"function\":case \"symbol\":return;case \"boolean\":if(b=c.toLowerCase().slice(0,5),\"data-\"!==b&&\"aria-\"!==b)return}a.push(H,u(c),I,u(C(d)),E)}}var K=w(\">\"),Ka=w(\"/>\");\nfunction L(a,b,c){if(null!=b){if(null!=c)throw Error(k(60));if(\"object\"!==typeof b||!(\"__html\"in b))throw Error(k(61));b=b.__html;null!==b&&void 0!==b&&a.push(u(\"\"+b))}}function La(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Ma=w(' selected=\"\"');\nfunction Na(a,b,c,d){a.push(M(c));var f=c=null,e;for(e in b)if(x.call(b,e)){var g=b[e];if(null!=g)switch(e){case \"children\":c=g;break;case \"dangerouslySetInnerHTML\":f=g;break;default:J(a,d,e,g)}}a.push(K);L(a,f,c);return\"string\"===typeof c?(a.push(u(C(c))),null):c}var Oa=w(\"\\n\"),Pa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,Qa=new Map;function M(a){var b=Qa.get(a);if(void 0===b){if(!Pa.test(a))throw Error(k(65,a));b=w(\"<\"+a);Qa.set(a,b)}return b}var Ra=w(\"<!DOCTYPE html>\");\nfunction Sa(a,b,c,d,f){switch(b){case \"select\":a.push(M(\"select\"));var e=null,g=null;for(r in c)if(x.call(c,r)){var h=c[r];if(null!=h)switch(r){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"defaultValue\":case \"value\":break;default:J(a,d,r,h)}}a.push(K);L(a,g,e);return e;case \"option\":g=f.selectedValue;a.push(M(\"option\"));var m=h=null,q=null;var r=null;for(e in c)if(x.call(c,e)){var v=c[e];if(null!=v)switch(e){case \"children\":h=v;break;case \"selected\":q=v;break;case \"dangerouslySetInnerHTML\":r=\nv;break;case \"value\":m=v;default:J(a,d,e,v)}}if(null!=g)if(c=null!==m?\"\"+m:La(h),ra(g))for(d=0;d<g.length;d++){if(\"\"+g[d]===c){a.push(Ma);break}}else\"\"+g===c&&a.push(Ma);else q&&a.push(Ma);a.push(K);L(a,r,h);return h;case \"textarea\":a.push(M(\"textarea\"));r=g=e=null;for(h in c)if(x.call(c,h)&&(m=c[h],null!=m))switch(h){case \"children\":r=m;break;case \"value\":e=m;break;case \"defaultValue\":g=m;break;case \"dangerouslySetInnerHTML\":throw Error(k(91));default:J(a,d,h,m)}null===e&&null!==g&&(e=g);a.push(K);\nif(null!=r){if(null!=e)throw Error(k(92));if(ra(r)&&1<r.length)throw Error(k(93));e=\"\"+r}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(Oa);null!==e&&a.push(u(C(\"\"+e)));return null;case \"input\":a.push(M(\"input\"));m=r=h=e=null;for(g in c)if(x.call(c,g)&&(q=c[g],null!=q))switch(g){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(399,\"input\"));case \"defaultChecked\":m=q;break;case \"defaultValue\":h=q;break;case \"checked\":r=q;break;case \"value\":e=q;break;default:J(a,d,g,q)}null!==r?J(a,d,\"checked\",\nr):null!==m&&J(a,d,\"checked\",m);null!==e?J(a,d,\"value\",e):null!==h&&J(a,d,\"value\",h);a.push(Ka);return null;case \"menuitem\":a.push(M(\"menuitem\"));for(var A in c)if(x.call(c,A)&&(e=c[A],null!=e))switch(A){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(400));default:J(a,d,A,e)}a.push(K);return null;case \"title\":a.push(M(\"title\"));e=null;for(v in c)if(x.call(c,v)&&(g=c[v],null!=g))switch(v){case \"children\":e=g;break;case \"dangerouslySetInnerHTML\":throw Error(k(434));default:J(a,d,v,g)}a.push(K);\nreturn e;case \"listing\":case \"pre\":a.push(M(b));g=e=null;for(m in c)if(x.call(c,m)&&(h=c[m],null!=h))switch(m){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;default:J(a,d,m,h)}a.push(K);if(null!=g){if(null!=e)throw Error(k(60));if(\"object\"!==typeof g||!(\"__html\"in g))throw Error(k(61));c=g.__html;null!==c&&void 0!==c&&(\"string\"===typeof c&&0<c.length&&\"\\n\"===c[0]?a.push(Oa,u(c)):a.push(u(\"\"+c)))}\"string\"===typeof e&&\"\\n\"===e[0]&&a.push(Oa);return e;case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":a.push(M(b));\nfor(var F in c)if(x.call(c,F)&&(e=c[F],null!=e))switch(F){case \"children\":case \"dangerouslySetInnerHTML\":throw Error(k(399,b));default:J(a,d,F,e)}a.push(Ka);return null;case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return Na(a,c,b,d);case \"html\":return 0===f.insertionMode&&a.push(Ra),Na(a,c,b,d);default:if(-1===b.indexOf(\"-\")&&\"string\"!==typeof c.is)return Na(a,c,b,d);a.push(M(b));\ng=e=null;for(q in c)if(x.call(c,q)&&(h=c[q],null!=h))switch(q){case \"children\":e=h;break;case \"dangerouslySetInnerHTML\":g=h;break;case \"style\":Ia(a,d,h);break;case \"suppressContentEditableWarning\":case \"suppressHydrationWarning\":break;default:ia(q)&&\"function\"!==typeof h&&\"symbol\"!==typeof h&&a.push(H,u(q),I,u(C(h)),E)}a.push(K);L(a,g,e);return e}}\nvar Ta=w(\"</\"),Ua=w(\">\"),Va=w('<template id=\"'),Wa=w('\"></template>'),Xa=w(\"\\x3c!--$--\\x3e\"),Ya=w('\\x3c!--$?--\\x3e<template id=\"'),Za=w('\"></template>'),$a=w(\"\\x3c!--$!--\\x3e\"),ab=w(\"\\x3c!--/$--\\x3e\"),bb=w(\"<template\"),cb=w('\"'),db=w(' data-dgst=\"');w(' data-msg=\"');w(' data-stck=\"');var eb=w(\"></template>\");function fb(a,b,c){p(a,Ya);if(null===c)throw Error(k(395));p(a,c);return t(a,Za)}\nvar gb=w('<div hidden id=\"'),hb=w('\">'),ib=w(\"</div>\"),jb=w('<svg aria-hidden=\"true\" style=\"display:none\" id=\"'),kb=w('\">'),lb=w(\"</svg>\"),mb=w('<math aria-hidden=\"true\" style=\"display:none\" id=\"'),nb=w('\">'),ob=w(\"</math>\"),pb=w('<table hidden id=\"'),qb=w('\">'),rb=w(\"</table>\"),sb=w('<table hidden><tbody id=\"'),tb=w('\">'),ub=w(\"</tbody></table>\"),vb=w('<table hidden><tr id=\"'),wb=w('\">'),xb=w(\"</tr></table>\"),yb=w('<table hidden><colgroup id=\"'),zb=w('\">'),Ab=w(\"</colgroup></table>\");\nfunction Bb(a,b,c,d){switch(c.insertionMode){case 0:case 1:return p(a,gb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,hb);case 2:return p(a,jb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,kb);case 3:return p(a,mb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,nb);case 4:return p(a,pb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,qb);case 5:return p(a,sb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,tb);case 6:return p(a,vb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,wb);case 7:return p(a,\nyb),p(a,b.segmentPrefix),p(a,u(d.toString(16))),t(a,zb);default:throw Error(k(397));}}function Cb(a,b){switch(b.insertionMode){case 0:case 1:return t(a,ib);case 2:return t(a,lb);case 3:return t(a,ob);case 4:return t(a,rb);case 5:return t(a,ub);case 6:return t(a,xb);case 7:return t(a,Ab);default:throw Error(k(397));}}\nvar Db=w('function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS(\"'),Eb=w('$RS(\"'),Gb=w('\",\"'),Hb=w('\")\\x3c/script>'),Ib=w('function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}};$RC(\"'),\nJb=w('$RC(\"'),Kb=w('\",\"'),Lb=w('\")\\x3c/script>'),Mb=w('function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())};$RX(\"'),Nb=w('$RX(\"'),Ob=w('\"'),Pb=w(\")\\x3c/script>\"),Qb=w(\",\"),Rb=/[<\\u2028\\u2029]/g;\nfunction Sb(a){return JSON.stringify(a).replace(Rb,function(a){switch(a){case \"<\":return\"\\\\u003c\";case \"\\u2028\":return\"\\\\u2028\";case \"\\u2029\":return\"\\\\u2029\";default:throw Error(\"escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React\");}})}\nvar N=Object.assign,Tb=Symbol.for(\"react.element\"),Ub=Symbol.for(\"react.portal\"),Vb=Symbol.for(\"react.fragment\"),Wb=Symbol.for(\"react.strict_mode\"),Xb=Symbol.for(\"react.profiler\"),Yb=Symbol.for(\"react.provider\"),Zb=Symbol.for(\"react.context\"),$b=Symbol.for(\"react.forward_ref\"),ac=Symbol.for(\"react.suspense\"),bc=Symbol.for(\"react.suspense_list\"),cc=Symbol.for(\"react.memo\"),dc=Symbol.for(\"react.lazy\"),ec=Symbol.for(\"react.scope\"),fc=Symbol.for(\"react.debug_trace_mode\"),gc=Symbol.for(\"react.legacy_hidden\"),\nhc=Symbol.for(\"react.default_value\"),ic=Symbol.iterator;\nfunction jc(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case Vb:return\"Fragment\";case Ub:return\"Portal\";case Xb:return\"Profiler\";case Wb:return\"StrictMode\";case ac:return\"Suspense\";case bc:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Zb:return(a.displayName||\"Context\")+\".Consumer\";case Yb:return(a._context.displayName||\"Context\")+\".Provider\";case $b:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case cc:return b=a.displayName||null,null!==b?b:jc(a.type)||\"Memo\";case dc:b=a._payload;a=a._init;try{return jc(a(b))}catch(c){}}return null}var kc={};function lc(a,b){a=a.contextTypes;if(!a)return kc;var c={},d;for(d in a)c[d]=b[d];return c}var O=null;\nfunction P(a,b){if(a!==b){a.context._currentValue=a.parentValue;a=a.parent;var c=b.parent;if(null===a){if(null!==c)throw Error(k(401));}else{if(null===c)throw Error(k(401));P(a,c)}b.context._currentValue=b.value}}function mc(a){a.context._currentValue=a.parentValue;a=a.parent;null!==a&&mc(a)}function nc(a){var b=a.parent;null!==b&&nc(b);a.context._currentValue=a.value}\nfunction oc(a,b){a.context._currentValue=a.parentValue;a=a.parent;if(null===a)throw Error(k(402));a.depth===b.depth?P(a,b):oc(a,b)}function pc(a,b){var c=b.parent;if(null===c)throw Error(k(402));a.depth===c.depth?P(a,c):pc(a,c);b.context._currentValue=b.value}function Q(a){var b=O;b!==a&&(null===b?nc(a):null===a?mc(b):b.depth===a.depth?P(b,a):b.depth>a.depth?oc(b,a):pc(b,a),O=a)}\nvar qc={isMounted:function(){return!1},enqueueSetState:function(a,b){a=a._reactInternals;null!==a.queue&&a.queue.push(b)},enqueueReplaceState:function(a,b){a=a._reactInternals;a.replace=!0;a.queue=[b]},enqueueForceUpdate:function(){}};\nfunction rc(a,b,c,d){var f=void 0!==a.state?a.state:null;a.updater=qc;a.props=c;a.state=f;var e={queue:[],replace:!1};a._reactInternals=e;var g=b.contextType;a.context=\"object\"===typeof g&&null!==g?g._currentValue:d;g=b.getDerivedStateFromProps;\"function\"===typeof g&&(g=g(c,f),f=null===g||void 0===g?f:N({},f,g),a.state=f);if(\"function\"!==typeof b.getDerivedStateFromProps&&\"function\"!==typeof a.getSnapshotBeforeUpdate&&(\"function\"===typeof a.UNSAFE_componentWillMount||\"function\"===typeof a.componentWillMount))if(b=\na.state,\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),b!==a.state&&qc.enqueueReplaceState(a,a.state,null),null!==e.queue&&0<e.queue.length)if(b=e.queue,g=e.replace,e.queue=null,e.replace=!1,g&&1===b.length)a.state=b[0];else{e=g?b[0]:a.state;f=!0;for(g=g?1:0;g<b.length;g++){var h=b[g];h=\"function\"===typeof h?h.call(a,e,c,d):h;null!=h&&(f?(f=!1,e=N({},e,h)):N(e,h))}a.state=e}else e.queue=null}\nvar sc={id:1,overflow:\"\"};function tc(a,b,c){var d=a.id;a=a.overflow;var f=32-uc(d)-1;d&=~(1<<f);c+=1;var e=32-uc(b)+f;if(30<e){var g=f-f%5;e=(d&(1<<g)-1).toString(32);d>>=g;f-=g;return{id:1<<32-uc(b)+f|c<<f|d,overflow:e+a}}return{id:1<<e|c<<f|d,overflow:a}}var uc=Math.clz32?Math.clz32:vc,wc=Math.log,xc=Math.LN2;function vc(a){a>>>=0;return 0===a?32:31-(wc(a)/xc|0)|0}function yc(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar zc=\"function\"===typeof Object.is?Object.is:yc,R=null,Ac=null,Bc=null,S=null,T=!1,Cc=!1,U=0,V=null,Dc=0;function W(){if(null===R)throw Error(k(321));return R}function Ec(){if(0<Dc)throw Error(k(312));return{memoizedState:null,queue:null,next:null}}function Fc(){null===S?null===Bc?(T=!1,Bc=S=Ec()):(T=!0,S=Bc):null===S.next?(T=!1,S=S.next=Ec()):(T=!0,S=S.next);return S}function Gc(){Ac=R=null;Cc=!1;Bc=null;Dc=0;S=V=null}function Hc(a,b){return\"function\"===typeof b?b(a):b}\nfunction Ic(a,b,c){R=W();S=Fc();if(T){var d=S.queue;b=d.dispatch;if(null!==V&&(c=V.get(d),void 0!==c)){V.delete(d);d=S.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);S.memoizedState=d;return[d,b]}return[S.memoizedState,b]}a=a===Hc?\"function\"===typeof b?b():b:void 0!==c?c(b):b;S.memoizedState=a;a=S.queue={last:null,dispatch:null};a=a.dispatch=Jc.bind(null,R,a);return[S.memoizedState,a]}\nfunction Kc(a,b){R=W();S=Fc();b=void 0===b?null:b;if(null!==S){var c=S.memoizedState;if(null!==c&&null!==b){var d=c[1];a:if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!zc(b[f],d[f])){d=!1;break a}d=!0}if(d)return c[0]}}a=a();S.memoizedState=[a,b];return a}function Jc(a,b,c){if(25<=Dc)throw Error(k(301));if(a===R)if(Cc=!0,a={action:c,next:null},null===V&&(V=new Map),c=V.get(b),void 0===c)V.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}\nfunction Lc(){throw Error(k(394));}function Mc(){}\nvar Oc={readContext:function(a){return a._currentValue},useContext:function(a){W();return a._currentValue},useMemo:Kc,useReducer:Ic,useRef:function(a){R=W();S=Fc();var b=S.memoizedState;return null===b?(a={current:a},S.memoizedState=a):b},useState:function(a){return Ic(Hc,a)},useInsertionEffect:Mc,useLayoutEffect:function(){},useCallback:function(a,b){return Kc(function(){return a},b)},useImperativeHandle:Mc,useEffect:Mc,useDebugValue:Mc,useDeferredValue:function(a){W();return a},useTransition:function(){W();\nreturn[!1,Lc]},useId:function(){var a=Ac.treeContext;var b=a.overflow;a=a.id;a=(a&~(1<<32-uc(a)-1)).toString(32)+b;var c=Nc;if(null===c)throw Error(k(404));b=U++;a=\":\"+c.idPrefix+\"R\"+a;0<b&&(a+=\"H\"+b.toString(32));return a+\":\"},useMutableSource:function(a,b){W();return b(a._source)},useSyncExternalStore:function(a,b,c){if(void 0===c)throw Error(k(407));return c()}},Nc=null,Pc=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher;function Qc(a){console.error(a);return null}\nfunction X(){}\nfunction Rc(a,b,c,d,f,e,g,h,m){var q=[],r=new Set;b={destination:null,responseState:b,progressiveChunkSize:void 0===d?12800:d,status:0,fatalError:null,nextSegmentId:0,allPendingTasks:0,pendingRootTasks:0,completedRootSegment:null,abortableTasks:r,pingedTasks:q,clientRenderedBoundaries:[],completedBoundaries:[],partialBoundaries:[],onError:void 0===f?Qc:f,onAllReady:void 0===e?X:e,onShellReady:void 0===g?X:g,onShellError:void 0===h?X:h,onFatalError:void 0===m?X:m};c=Sc(b,0,null,c,!1,!1);c.parentFlushed=\n!0;a=Tc(b,a,null,c,r,kc,null,sc);q.push(a);return b}function Tc(a,b,c,d,f,e,g,h){a.allPendingTasks++;null===c?a.pendingRootTasks++:c.pendingTasks++;var m={node:b,ping:function(){var b=a.pingedTasks;b.push(m);1===b.length&&Uc(a)},blockedBoundary:c,blockedSegment:d,abortSet:f,legacyContext:e,context:g,treeContext:h};f.add(m);return m}function Sc(a,b,c,d,f,e){return{status:0,id:-1,index:b,parentFlushed:!1,chunks:[],children:[],formatContext:d,boundary:c,lastPushedText:f,textEmbedded:e}}\nfunction Y(a,b){a=a.onError(b);if(null!=a&&\"string\"!==typeof a)throw Error('onError returned something with a type other than \"string\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \"'+typeof a+'\" instead');return a}function Vc(a,b){var c=a.onShellError;c(b);c=a.onFatalError;c(b);null!==a.destination?(a.status=2,da(a.destination,b)):(a.status=1,a.fatalError=b)}\nfunction Wc(a,b,c,d,f){R={};Ac=b;U=0;for(a=c(d,f);Cc;)Cc=!1,U=0,Dc+=1,S=null,a=c(d,f);Gc();return a}function Xc(a,b,c,d){var f=c.render(),e=d.childContextTypes;if(null!==e&&void 0!==e){var g=b.legacyContext;if(\"function\"!==typeof c.getChildContext)d=g;else{c=c.getChildContext();for(var h in c)if(!(h in e))throw Error(k(108,jc(d)||\"Unknown\",h));d=N({},g,c)}b.legacyContext=d;Z(a,b,f);b.legacyContext=g}else Z(a,b,f)}\nfunction Yc(a,b){if(a&&a.defaultProps){b=N({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}\nfunction Zc(a,b,c,d,f){if(\"function\"===typeof c)if(c.prototype&&c.prototype.isReactComponent){f=lc(c,b.legacyContext);var e=c.contextType;e=new c(d,\"object\"===typeof e&&null!==e?e._currentValue:f);rc(e,c,d,f);Xc(a,b,e,c)}else{e=lc(c,b.legacyContext);f=Wc(a,b,c,d,e);var g=0!==U;if(\"object\"===typeof f&&null!==f&&\"function\"===typeof f.render&&void 0===f.$$typeof)rc(f,c,d,e),Xc(a,b,f,c);else if(g){d=b.treeContext;b.treeContext=tc(d,1,0);try{Z(a,b,f)}finally{b.treeContext=d}}else Z(a,b,f)}else if(\"string\"===\ntypeof c){f=b.blockedSegment;e=Sa(f.chunks,c,d,a.responseState,f.formatContext);f.lastPushedText=!1;g=f.formatContext;f.formatContext=Ba(g,c,d);$c(a,b,e);f.formatContext=g;switch(c){case \"area\":case \"base\":case \"br\":case \"col\":case \"embed\":case \"hr\":case \"img\":case \"input\":case \"keygen\":case \"link\":case \"meta\":case \"param\":case \"source\":case \"track\":case \"wbr\":break;default:f.chunks.push(Ta,u(c),Ua)}f.lastPushedText=!1}else{switch(c){case gc:case fc:case Wb:case Xb:case Vb:Z(a,b,d.children);return;\ncase bc:Z(a,b,d.children);return;case ec:throw Error(k(343));case ac:a:{c=b.blockedBoundary;f=b.blockedSegment;e=d.fallback;d=d.children;g=new Set;var h={id:null,rootSegmentID:-1,parentFlushed:!1,pendingTasks:0,forceClientRender:!1,completedSegments:[],byteSize:0,fallbackAbortableTasks:g,errorDigest:null},m=Sc(a,f.chunks.length,h,f.formatContext,!1,!1);f.children.push(m);f.lastPushedText=!1;var q=Sc(a,0,null,f.formatContext,!1,!1);q.parentFlushed=!0;b.blockedBoundary=h;b.blockedSegment=q;try{if($c(a,\nb,d),q.lastPushedText&&q.textEmbedded&&q.chunks.push(Ca),q.status=1,ad(h,q),0===h.pendingTasks)break a}catch(r){q.status=4,h.forceClientRender=!0,h.errorDigest=Y(a,r)}finally{b.blockedBoundary=c,b.blockedSegment=f}b=Tc(a,e,c,m,g,b.legacyContext,b.context,b.treeContext);a.pingedTasks.push(b)}return}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case $b:d=Wc(a,b,c.render,d,f);if(0!==U){c=b.treeContext;b.treeContext=tc(c,1,0);try{Z(a,b,d)}finally{b.treeContext=c}}else Z(a,b,d);return;case cc:c=\nc.type;d=Yc(c,d);Zc(a,b,c,d,f);return;case Yb:f=d.children;c=c._context;d=d.value;e=c._currentValue;c._currentValue=d;g=O;O=d={parent:g,depth:null===g?0:g.depth+1,context:c,parentValue:e,value:d};b.context=d;Z(a,b,f);a=O;if(null===a)throw Error(k(403));d=a.parentValue;a.context._currentValue=d===hc?a.context._defaultValue:d;a=O=a.parent;b.context=a;return;case Zb:d=d.children;d=d(c._currentValue);Z(a,b,d);return;case dc:f=c._init;c=f(c._payload);d=Yc(c,d);Zc(a,b,c,d,void 0);return}throw Error(k(130,\nnull==c?c:typeof c,\"\"));}}\nfunction Z(a,b,c){b.node=c;if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Tb:Zc(a,b,c.type,c.props,c.ref);return;case Ub:throw Error(k(257));case dc:var d=c._init;c=d(c._payload);Z(a,b,c);return}if(ra(c)){bd(a,b,c);return}null===c||\"object\"!==typeof c?d=null:(d=ic&&c[ic]||c[\"@@iterator\"],d=\"function\"===typeof d?d:null);if(d&&(d=d.call(c))){c=d.next();if(!c.done){var f=[];do f.push(c.value),c=d.next();while(!c.done);bd(a,b,f)}return}a=Object.prototype.toString.call(c);throw Error(k(31,\"[object Object]\"===\na?\"object with keys {\"+Object.keys(c).join(\", \")+\"}\":a));}\"string\"===typeof c?(d=b.blockedSegment,d.lastPushedText=Da(b.blockedSegment.chunks,c,a.responseState,d.lastPushedText)):\"number\"===typeof c&&(d=b.blockedSegment,d.lastPushedText=Da(b.blockedSegment.chunks,\"\"+c,a.responseState,d.lastPushedText))}function bd(a,b,c){for(var d=c.length,f=0;f<d;f++){var e=b.treeContext;b.treeContext=tc(e,d,f);try{$c(a,b,c[f])}finally{b.treeContext=e}}}\nfunction $c(a,b,c){var d=b.blockedSegment.formatContext,f=b.legacyContext,e=b.context;try{return Z(a,b,c)}catch(m){if(Gc(),\"object\"===typeof m&&null!==m&&\"function\"===typeof m.then){c=m;var g=b.blockedSegment,h=Sc(a,g.chunks.length,null,g.formatContext,g.lastPushedText,!0);g.children.push(h);g.lastPushedText=!1;a=Tc(a,b.node,b.blockedBoundary,h,b.abortSet,b.legacyContext,b.context,b.treeContext).ping;c.then(a,a);b.blockedSegment.formatContext=d;b.legacyContext=f;b.context=e;Q(e)}else throw b.blockedSegment.formatContext=\nd,b.legacyContext=f,b.context=e,Q(e),m;}}function cd(a){var b=a.blockedBoundary;a=a.blockedSegment;a.status=3;dd(this,b,a)}\nfunction ed(a,b,c){var d=a.blockedBoundary;a.blockedSegment.status=3;null===d?(b.allPendingTasks--,2!==b.status&&(b.status=2,null!==b.destination&&b.destination.close())):(d.pendingTasks--,d.forceClientRender||(d.forceClientRender=!0,a=void 0===c?Error(k(432)):c,d.errorDigest=b.onError(a),d.parentFlushed&&b.clientRenderedBoundaries.push(d)),d.fallbackAbortableTasks.forEach(function(a){return ed(a,b,c)}),d.fallbackAbortableTasks.clear(),b.allPendingTasks--,0===b.allPendingTasks&&(d=b.onAllReady,d()))}\nfunction ad(a,b){if(0===b.chunks.length&&1===b.children.length&&null===b.children[0].boundary){var c=b.children[0];c.id=b.id;c.parentFlushed=!0;1===c.status&&ad(a,c)}else a.completedSegments.push(b)}\nfunction dd(a,b,c){if(null===b){if(c.parentFlushed){if(null!==a.completedRootSegment)throw Error(k(389));a.completedRootSegment=c}a.pendingRootTasks--;0===a.pendingRootTasks&&(a.onShellError=X,b=a.onShellReady,b())}else b.pendingTasks--,b.forceClientRender||(0===b.pendingTasks?(c.parentFlushed&&1===c.status&&ad(b,c),b.parentFlushed&&a.completedBoundaries.push(b),b.fallbackAbortableTasks.forEach(cd,a),b.fallbackAbortableTasks.clear()):c.parentFlushed&&1===c.status&&(ad(b,c),1===b.completedSegments.length&&\nb.parentFlushed&&a.partialBoundaries.push(b)));a.allPendingTasks--;0===a.allPendingTasks&&(a=a.onAllReady,a())}\nfunction Uc(a){if(2!==a.status){var b=O,c=Pc.current;Pc.current=Oc;var d=Nc;Nc=a.responseState;try{var f=a.pingedTasks,e;for(e=0;e<f.length;e++){var g=f[e];var h=a,m=g.blockedSegment;if(0===m.status){Q(g.context);try{Z(h,g,g.node),m.lastPushedText&&m.textEmbedded&&m.chunks.push(Ca),g.abortSet.delete(g),m.status=1,dd(h,g.blockedBoundary,m)}catch(G){if(Gc(),\"object\"===typeof G&&null!==G&&\"function\"===typeof G.then){var q=g.ping;G.then(q,q)}else{g.abortSet.delete(g);m.status=4;var r=g.blockedBoundary,\nv=G,A=Y(h,v);null===r?Vc(h,v):(r.pendingTasks--,r.forceClientRender||(r.forceClientRender=!0,r.errorDigest=A,r.parentFlushed&&h.clientRenderedBoundaries.push(r)));h.allPendingTasks--;if(0===h.allPendingTasks){var F=h.onAllReady;F()}}}finally{}}}f.splice(0,e);null!==a.destination&&fd(a,a.destination)}catch(G){Y(a,G),Vc(a,G)}finally{Nc=d,Pc.current=c,c===Oc&&Q(b)}}}\nfunction gd(a,b,c){c.parentFlushed=!0;switch(c.status){case 0:var d=c.id=a.nextSegmentId++;c.lastPushedText=!1;c.textEmbedded=!1;a=a.responseState;p(b,Va);p(b,a.placeholderPrefix);a=u(d.toString(16));p(b,a);return t(b,Wa);case 1:c.status=2;var f=!0;d=c.chunks;var e=0;c=c.children;for(var g=0;g<c.length;g++){for(f=c[g];e<f.index;e++)p(b,d[e]);f=hd(a,b,f)}for(;e<d.length-1;e++)p(b,d[e]);e<d.length&&(f=t(b,d[e]));return f;default:throw Error(k(390));}}\nfunction hd(a,b,c){var d=c.boundary;if(null===d)return gd(a,b,c);d.parentFlushed=!0;if(d.forceClientRender)d=d.errorDigest,t(b,$a),p(b,bb),d&&(p(b,db),p(b,u(C(d))),p(b,cb)),t(b,eb),gd(a,b,c);else if(0<d.pendingTasks){d.rootSegmentID=a.nextSegmentId++;0<d.completedSegments.length&&a.partialBoundaries.push(d);var f=a.responseState;var e=f.nextSuspenseID++;f=w(f.boundaryPrefix+e.toString(16));d=d.id=f;fb(b,a.responseState,d);gd(a,b,c)}else if(d.byteSize>a.progressiveChunkSize)d.rootSegmentID=a.nextSegmentId++,\na.completedBoundaries.push(d),fb(b,a.responseState,d.id),gd(a,b,c);else{t(b,Xa);c=d.completedSegments;if(1!==c.length)throw Error(k(391));hd(a,b,c[0])}return t(b,ab)}function id(a,b,c){Bb(b,a.responseState,c.formatContext,c.id);hd(a,b,c);return Cb(b,c.formatContext)}\nfunction jd(a,b,c){for(var d=c.completedSegments,f=0;f<d.length;f++)kd(a,b,c,d[f]);d.length=0;a=a.responseState;d=c.id;c=c.rootSegmentID;p(b,a.startInlineScript);a.sentCompleteBoundaryFunction?p(b,Jb):(a.sentCompleteBoundaryFunction=!0,p(b,Ib));if(null===d)throw Error(k(395));c=u(c.toString(16));p(b,d);p(b,Kb);p(b,a.segmentPrefix);p(b,c);return t(b,Lb)}\nfunction kd(a,b,c,d){if(2===d.status)return!0;var f=d.id;if(-1===f){if(-1===(d.id=c.rootSegmentID))throw Error(k(392));return id(a,b,d)}id(a,b,d);a=a.responseState;p(b,a.startInlineScript);a.sentCompleteSegmentFunction?p(b,Eb):(a.sentCompleteSegmentFunction=!0,p(b,Db));p(b,a.segmentPrefix);f=u(f.toString(16));p(b,f);p(b,Gb);p(b,a.placeholderPrefix);p(b,f);return t(b,Hb)}\nfunction fd(a,b){l=new Uint8Array(512);n=0;try{var c=a.completedRootSegment;if(null!==c&&0===a.pendingRootTasks){hd(a,b,c);a.completedRootSegment=null;var d=a.responseState.bootstrapChunks;for(c=0;c<d.length-1;c++)p(b,d[c]);c<d.length&&t(b,d[c])}var f=a.clientRenderedBoundaries,e;for(e=0;e<f.length;e++){var g=f[e];d=b;var h=a.responseState,m=g.id,q=g.errorDigest,r=g.errorMessage,v=g.errorComponentStack;p(d,h.startInlineScript);h.sentClientRenderFunction?p(d,Nb):(h.sentClientRenderFunction=!0,p(d,\nMb));if(null===m)throw Error(k(395));p(d,m);p(d,Ob);if(q||r||v)p(d,Qb),p(d,u(Sb(q||\"\")));if(r||v)p(d,Qb),p(d,u(Sb(r||\"\")));v&&(p(d,Qb),p(d,u(Sb(v))));if(!t(d,Pb)){a.destination=null;e++;f.splice(0,e);return}}f.splice(0,e);var A=a.completedBoundaries;for(e=0;e<A.length;e++)if(!jd(a,b,A[e])){a.destination=null;e++;A.splice(0,e);return}A.splice(0,e);ba(b);l=new Uint8Array(512);n=0;var F=a.partialBoundaries;for(e=0;e<F.length;e++){var G=F[e];a:{f=a;g=b;var ma=G.completedSegments;for(h=0;h<ma.length;h++)if(!kd(f,\ng,G,ma[h])){h++;ma.splice(0,h);var Fb=!1;break a}ma.splice(0,h);Fb=!0}if(!Fb){a.destination=null;e++;F.splice(0,e);return}}F.splice(0,e);var na=a.completedBoundaries;for(e=0;e<na.length;e++)if(!jd(a,b,na[e])){a.destination=null;e++;na.splice(0,e);return}na.splice(0,e)}finally{ba(b),0===a.allPendingTasks&&0===a.pingedTasks.length&&0===a.clientRenderedBoundaries.length&&0===a.completedBoundaries.length&&b.close()}}\nfunction ld(a,b){try{var c=a.abortableTasks;c.forEach(function(c){return ed(c,a,b)});c.clear();null!==a.destination&&fd(a,a.destination)}catch(d){Y(a,d),Vc(a,d)}}\nexports.renderToReadableStream=function(a,b){return new Promise(function(c,d){var f,e,g=new Promise(function(a,b){e=a;f=b}),h=Rc(a,za(b?b.identifierPrefix:void 0,b?b.nonce:void 0,b?b.bootstrapScriptContent:void 0,b?b.bootstrapScripts:void 0,b?b.bootstrapModules:void 0),Aa(b?b.namespaceURI:void 0),b?b.progressiveChunkSize:void 0,b?b.onError:void 0,e,function(){var a=new ReadableStream({type:\"bytes\",pull:function(a){if(1===h.status)h.status=2,da(a,h.fatalError);else if(2!==h.status&&null===h.destination){h.destination=\na;try{fd(h,a)}catch(A){Y(h,A),Vc(h,A)}}},cancel:function(){ld(h)}},{highWaterMark:0});a.allReady=g;c(a)},function(a){g.catch(function(){});d(a)},f);if(b&&b.signal){var m=b.signal,q=function(){ld(h,m.reason);m.removeEventListener(\"abort\",q)};m.addEventListener(\"abort\",q)}Uc(h)})};exports.version=\"18.3.1\";\n","/**\n * @license React\n * react-dom-server-legacy.browser.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\nvar ReactVersion = '18.3.1';\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      printWarning('warn', format, args);\n    }\n  }\n}\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\nfunction scheduleWork(callback) {\n  callback();\n}\nfunction beginWriting(destination) {}\nfunction writeChunk(destination, chunk) {\n  writeChunkAndReturn(destination, chunk);\n}\nfunction writeChunkAndReturn(destination, chunk) {\n  return destination.push(chunk);\n}\nfunction completeWriting(destination) {}\nfunction close(destination) {\n  destination.push(null);\n}\nfunction stringToChunk(content) {\n  return content;\n}\nfunction stringToPrecomputedChunk(content) {\n  return content;\n}\nfunction closeWithError(destination, error) {\n  // $FlowFixMe: This is an Error object or the destination accepts other types.\n  destination.destroy(error);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\n\nfunction checkAttributeStringCoercion(value, attributeName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkCSSPropertyStringCoercion(value, propName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkHtmlStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n    return true;\n  }\n\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n    return false;\n  }\n\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n\n  illegalAttributeNameCache[attributeName] = true;\n\n  {\n    error('Invalid attribute name: `%s`', attributeName);\n  }\n\n  return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n    return false;\n  }\n\n  switch (typeof value) {\n    case 'function': // $FlowIssue symbol is perfectly valid here\n\n    case 'symbol':\n      // eslint-disable-line\n      return true;\n\n    case 'boolean':\n      {\n        if (isCustomComponentTag) {\n          return false;\n        }\n\n        if (propertyInfo !== null) {\n          return !propertyInfo.acceptsBooleans;\n        } else {\n          var prefix = name.toLowerCase().slice(0, 5);\n          return prefix !== 'data-' && prefix !== 'aria-';\n        }\n      }\n\n    default:\n      return false;\n  }\n}\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var name = _ref[0],\n      attributeName = _ref[1];\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL\n  false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL\nfalse);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true, // sanitizeURL\n  true);\n});\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridArea: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\nvar hasReadOnlyValue = {\n  button: true,\n  checkbox: true,\n  image: true,\n  hidden: true,\n  radio: true,\n  reset: true,\n  submit: true\n};\nfunction checkControlledValueProps(tagName, props) {\n  {\n    if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {\n      error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n\n    if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {\n      error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this list too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n\n    default:\n      return true;\n  }\n}\n\nvar ariaProperties = {\n  'aria-current': 0,\n  // state\n  'aria-description': 0,\n  'aria-details': 0,\n  'aria-disabled': 0,\n  // state\n  'aria-hidden': 0,\n  // state\n  'aria-invalid': 0,\n  // state\n  'aria-keyshortcuts': 0,\n  'aria-label': 0,\n  'aria-roledescription': 0,\n  // Widget Attributes\n  'aria-autocomplete': 0,\n  'aria-checked': 0,\n  'aria-expanded': 0,\n  'aria-haspopup': 0,\n  'aria-level': 0,\n  'aria-modal': 0,\n  'aria-multiline': 0,\n  'aria-multiselectable': 0,\n  'aria-orientation': 0,\n  'aria-placeholder': 0,\n  'aria-pressed': 0,\n  'aria-readonly': 0,\n  'aria-required': 0,\n  'aria-selected': 0,\n  'aria-sort': 0,\n  'aria-valuemax': 0,\n  'aria-valuemin': 0,\n  'aria-valuenow': 0,\n  'aria-valuetext': 0,\n  // Live Region Attributes\n  'aria-atomic': 0,\n  'aria-busy': 0,\n  'aria-live': 0,\n  'aria-relevant': 0,\n  // Drag-and-Drop Attributes\n  'aria-dropeffect': 0,\n  'aria-grabbed': 0,\n  // Relationship Attributes\n  'aria-activedescendant': 0,\n  'aria-colcount': 0,\n  'aria-colindex': 0,\n  'aria-colspan': 0,\n  'aria-controls': 0,\n  'aria-describedby': 0,\n  'aria-errormessage': 0,\n  'aria-flowto': 0,\n  'aria-labelledby': 0,\n  'aria-owns': 0,\n  'aria-posinset': 0,\n  'aria-rowcount': 0,\n  'aria-rowindex': 0,\n  'aria-rowspan': 0,\n  'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nfunction validateProperty(tagName, name) {\n  {\n    if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {\n      return true;\n    }\n\n    if (rARIACamel.test(name)) {\n      var ariaName = 'aria-' + name.slice(4).toLowerCase();\n      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (correctName == null) {\n        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n        warnedProperties[name] = true;\n        return true;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== correctName) {\n        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n\n    if (rARIA.test(name)) {\n      var lowerCasedName = name.toLowerCase();\n      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (standardName == null) {\n        warnedProperties[name] = true;\n        return false;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== standardName) {\n        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n  {\n    var invalidProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty(type, key);\n\n      if (!isValid) {\n        invalidProps.push(key);\n      }\n    }\n\n    var unknownPropString = invalidProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (invalidProps.length === 1) {\n      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    } else if (invalidProps.length > 1) {\n      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    }\n  }\n}\n\nfunction validateProperties(type, props) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n  {\n    if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n      return;\n    }\n\n    if (props != null && props.value === null && !didWarnValueNull) {\n      didWarnValueNull = true;\n\n      if (type === 'select' && props.multiple) {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n      } else {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n      }\n    }\n  }\n}\n\n// When adding attributes to the HTML or SVG allowed attribute list, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n  // HTML\n  accept: 'accept',\n  acceptcharset: 'acceptCharset',\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  action: 'action',\n  allowfullscreen: 'allowFullScreen',\n  alt: 'alt',\n  as: 'as',\n  async: 'async',\n  autocapitalize: 'autoCapitalize',\n  autocomplete: 'autoComplete',\n  autocorrect: 'autoCorrect',\n  autofocus: 'autoFocus',\n  autoplay: 'autoPlay',\n  autosave: 'autoSave',\n  capture: 'capture',\n  cellpadding: 'cellPadding',\n  cellspacing: 'cellSpacing',\n  challenge: 'challenge',\n  charset: 'charSet',\n  checked: 'checked',\n  children: 'children',\n  cite: 'cite',\n  class: 'className',\n  classid: 'classID',\n  classname: 'className',\n  cols: 'cols',\n  colspan: 'colSpan',\n  content: 'content',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  controls: 'controls',\n  controlslist: 'controlsList',\n  coords: 'coords',\n  crossorigin: 'crossOrigin',\n  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n  data: 'data',\n  datetime: 'dateTime',\n  default: 'default',\n  defaultchecked: 'defaultChecked',\n  defaultvalue: 'defaultValue',\n  defer: 'defer',\n  dir: 'dir',\n  disabled: 'disabled',\n  disablepictureinpicture: 'disablePictureInPicture',\n  disableremoteplayback: 'disableRemotePlayback',\n  download: 'download',\n  draggable: 'draggable',\n  enctype: 'encType',\n  enterkeyhint: 'enterKeyHint',\n  for: 'htmlFor',\n  form: 'form',\n  formmethod: 'formMethod',\n  formaction: 'formAction',\n  formenctype: 'formEncType',\n  formnovalidate: 'formNoValidate',\n  formtarget: 'formTarget',\n  frameborder: 'frameBorder',\n  headers: 'headers',\n  height: 'height',\n  hidden: 'hidden',\n  high: 'high',\n  href: 'href',\n  hreflang: 'hrefLang',\n  htmlfor: 'htmlFor',\n  httpequiv: 'httpEquiv',\n  'http-equiv': 'httpEquiv',\n  icon: 'icon',\n  id: 'id',\n  imagesizes: 'imageSizes',\n  imagesrcset: 'imageSrcSet',\n  innerhtml: 'innerHTML',\n  inputmode: 'inputMode',\n  integrity: 'integrity',\n  is: 'is',\n  itemid: 'itemID',\n  itemprop: 'itemProp',\n  itemref: 'itemRef',\n  itemscope: 'itemScope',\n  itemtype: 'itemType',\n  keyparams: 'keyParams',\n  keytype: 'keyType',\n  kind: 'kind',\n  label: 'label',\n  lang: 'lang',\n  list: 'list',\n  loop: 'loop',\n  low: 'low',\n  manifest: 'manifest',\n  marginwidth: 'marginWidth',\n  marginheight: 'marginHeight',\n  max: 'max',\n  maxlength: 'maxLength',\n  media: 'media',\n  mediagroup: 'mediaGroup',\n  method: 'method',\n  min: 'min',\n  minlength: 'minLength',\n  multiple: 'multiple',\n  muted: 'muted',\n  name: 'name',\n  nomodule: 'noModule',\n  nonce: 'nonce',\n  novalidate: 'noValidate',\n  open: 'open',\n  optimum: 'optimum',\n  pattern: 'pattern',\n  placeholder: 'placeholder',\n  playsinline: 'playsInline',\n  poster: 'poster',\n  preload: 'preload',\n  profile: 'profile',\n  radiogroup: 'radioGroup',\n  readonly: 'readOnly',\n  referrerpolicy: 'referrerPolicy',\n  rel: 'rel',\n  required: 'required',\n  reversed: 'reversed',\n  role: 'role',\n  rows: 'rows',\n  rowspan: 'rowSpan',\n  sandbox: 'sandbox',\n  scope: 'scope',\n  scoped: 'scoped',\n  scrolling: 'scrolling',\n  seamless: 'seamless',\n  selected: 'selected',\n  shape: 'shape',\n  size: 'size',\n  sizes: 'sizes',\n  span: 'span',\n  spellcheck: 'spellCheck',\n  src: 'src',\n  srcdoc: 'srcDoc',\n  srclang: 'srcLang',\n  srcset: 'srcSet',\n  start: 'start',\n  step: 'step',\n  style: 'style',\n  summary: 'summary',\n  tabindex: 'tabIndex',\n  target: 'target',\n  title: 'title',\n  type: 'type',\n  usemap: 'useMap',\n  value: 'value',\n  width: 'width',\n  wmode: 'wmode',\n  wrap: 'wrap',\n  // SVG\n  about: 'about',\n  accentheight: 'accentHeight',\n  'accent-height': 'accentHeight',\n  accumulate: 'accumulate',\n  additive: 'additive',\n  alignmentbaseline: 'alignmentBaseline',\n  'alignment-baseline': 'alignmentBaseline',\n  allowreorder: 'allowReorder',\n  alphabetic: 'alphabetic',\n  amplitude: 'amplitude',\n  arabicform: 'arabicForm',\n  'arabic-form': 'arabicForm',\n  ascent: 'ascent',\n  attributename: 'attributeName',\n  attributetype: 'attributeType',\n  autoreverse: 'autoReverse',\n  azimuth: 'azimuth',\n  basefrequency: 'baseFrequency',\n  baselineshift: 'baselineShift',\n  'baseline-shift': 'baselineShift',\n  baseprofile: 'baseProfile',\n  bbox: 'bbox',\n  begin: 'begin',\n  bias: 'bias',\n  by: 'by',\n  calcmode: 'calcMode',\n  capheight: 'capHeight',\n  'cap-height': 'capHeight',\n  clip: 'clip',\n  clippath: 'clipPath',\n  'clip-path': 'clipPath',\n  clippathunits: 'clipPathUnits',\n  cliprule: 'clipRule',\n  'clip-rule': 'clipRule',\n  color: 'color',\n  colorinterpolation: 'colorInterpolation',\n  'color-interpolation': 'colorInterpolation',\n  colorinterpolationfilters: 'colorInterpolationFilters',\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorprofile: 'colorProfile',\n  'color-profile': 'colorProfile',\n  colorrendering: 'colorRendering',\n  'color-rendering': 'colorRendering',\n  contentscripttype: 'contentScriptType',\n  contentstyletype: 'contentStyleType',\n  cursor: 'cursor',\n  cx: 'cx',\n  cy: 'cy',\n  d: 'd',\n  datatype: 'datatype',\n  decelerate: 'decelerate',\n  descent: 'descent',\n  diffuseconstant: 'diffuseConstant',\n  direction: 'direction',\n  display: 'display',\n  divisor: 'divisor',\n  dominantbaseline: 'dominantBaseline',\n  'dominant-baseline': 'dominantBaseline',\n  dur: 'dur',\n  dx: 'dx',\n  dy: 'dy',\n  edgemode: 'edgeMode',\n  elevation: 'elevation',\n  enablebackground: 'enableBackground',\n  'enable-background': 'enableBackground',\n  end: 'end',\n  exponent: 'exponent',\n  externalresourcesrequired: 'externalResourcesRequired',\n  fill: 'fill',\n  fillopacity: 'fillOpacity',\n  'fill-opacity': 'fillOpacity',\n  fillrule: 'fillRule',\n  'fill-rule': 'fillRule',\n  filter: 'filter',\n  filterres: 'filterRes',\n  filterunits: 'filterUnits',\n  floodopacity: 'floodOpacity',\n  'flood-opacity': 'floodOpacity',\n  floodcolor: 'floodColor',\n  'flood-color': 'floodColor',\n  focusable: 'focusable',\n  fontfamily: 'fontFamily',\n  'font-family': 'fontFamily',\n  fontsize: 'fontSize',\n  'font-size': 'fontSize',\n  fontsizeadjust: 'fontSizeAdjust',\n  'font-size-adjust': 'fontSizeAdjust',\n  fontstretch: 'fontStretch',\n  'font-stretch': 'fontStretch',\n  fontstyle: 'fontStyle',\n  'font-style': 'fontStyle',\n  fontvariant: 'fontVariant',\n  'font-variant': 'fontVariant',\n  fontweight: 'fontWeight',\n  'font-weight': 'fontWeight',\n  format: 'format',\n  from: 'from',\n  fx: 'fx',\n  fy: 'fy',\n  g1: 'g1',\n  g2: 'g2',\n  glyphname: 'glyphName',\n  'glyph-name': 'glyphName',\n  glyphorientationhorizontal: 'glyphOrientationHorizontal',\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphorientationvertical: 'glyphOrientationVertical',\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphref: 'glyphRef',\n  gradienttransform: 'gradientTransform',\n  gradientunits: 'gradientUnits',\n  hanging: 'hanging',\n  horizadvx: 'horizAdvX',\n  'horiz-adv-x': 'horizAdvX',\n  horizoriginx: 'horizOriginX',\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 'ideographic',\n  imagerendering: 'imageRendering',\n  'image-rendering': 'imageRendering',\n  in2: 'in2',\n  in: 'in',\n  inlist: 'inlist',\n  intercept: 'intercept',\n  k1: 'k1',\n  k2: 'k2',\n  k3: 'k3',\n  k4: 'k4',\n  k: 'k',\n  kernelmatrix: 'kernelMatrix',\n  kernelunitlength: 'kernelUnitLength',\n  kerning: 'kerning',\n  keypoints: 'keyPoints',\n  keysplines: 'keySplines',\n  keytimes: 'keyTimes',\n  lengthadjust: 'lengthAdjust',\n  letterspacing: 'letterSpacing',\n  'letter-spacing': 'letterSpacing',\n  lightingcolor: 'lightingColor',\n  'lighting-color': 'lightingColor',\n  limitingconeangle: 'limitingConeAngle',\n  local: 'local',\n  markerend: 'markerEnd',\n  'marker-end': 'markerEnd',\n  markerheight: 'markerHeight',\n  markermid: 'markerMid',\n  'marker-mid': 'markerMid',\n  markerstart: 'markerStart',\n  'marker-start': 'markerStart',\n  markerunits: 'markerUnits',\n  markerwidth: 'markerWidth',\n  mask: 'mask',\n  maskcontentunits: 'maskContentUnits',\n  maskunits: 'maskUnits',\n  mathematical: 'mathematical',\n  mode: 'mode',\n  numoctaves: 'numOctaves',\n  offset: 'offset',\n  opacity: 'opacity',\n  operator: 'operator',\n  order: 'order',\n  orient: 'orient',\n  orientation: 'orientation',\n  origin: 'origin',\n  overflow: 'overflow',\n  overlineposition: 'overlinePosition',\n  'overline-position': 'overlinePosition',\n  overlinethickness: 'overlineThickness',\n  'overline-thickness': 'overlineThickness',\n  paintorder: 'paintOrder',\n  'paint-order': 'paintOrder',\n  panose1: 'panose1',\n  'panose-1': 'panose1',\n  pathlength: 'pathLength',\n  patterncontentunits: 'patternContentUnits',\n  patterntransform: 'patternTransform',\n  patternunits: 'patternUnits',\n  pointerevents: 'pointerEvents',\n  'pointer-events': 'pointerEvents',\n  points: 'points',\n  pointsatx: 'pointsAtX',\n  pointsaty: 'pointsAtY',\n  pointsatz: 'pointsAtZ',\n  prefix: 'prefix',\n  preservealpha: 'preserveAlpha',\n  preserveaspectratio: 'preserveAspectRatio',\n  primitiveunits: 'primitiveUnits',\n  property: 'property',\n  r: 'r',\n  radius: 'radius',\n  refx: 'refX',\n  refy: 'refY',\n  renderingintent: 'renderingIntent',\n  'rendering-intent': 'renderingIntent',\n  repeatcount: 'repeatCount',\n  repeatdur: 'repeatDur',\n  requiredextensions: 'requiredExtensions',\n  requiredfeatures: 'requiredFeatures',\n  resource: 'resource',\n  restart: 'restart',\n  result: 'result',\n  results: 'results',\n  rotate: 'rotate',\n  rx: 'rx',\n  ry: 'ry',\n  scale: 'scale',\n  security: 'security',\n  seed: 'seed',\n  shaperendering: 'shapeRendering',\n  'shape-rendering': 'shapeRendering',\n  slope: 'slope',\n  spacing: 'spacing',\n  specularconstant: 'specularConstant',\n  specularexponent: 'specularExponent',\n  speed: 'speed',\n  spreadmethod: 'spreadMethod',\n  startoffset: 'startOffset',\n  stddeviation: 'stdDeviation',\n  stemh: 'stemh',\n  stemv: 'stemv',\n  stitchtiles: 'stitchTiles',\n  stopcolor: 'stopColor',\n  'stop-color': 'stopColor',\n  stopopacity: 'stopOpacity',\n  'stop-opacity': 'stopOpacity',\n  strikethroughposition: 'strikethroughPosition',\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughthickness: 'strikethroughThickness',\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 'string',\n  stroke: 'stroke',\n  strokedasharray: 'strokeDasharray',\n  'stroke-dasharray': 'strokeDasharray',\n  strokedashoffset: 'strokeDashoffset',\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokelinecap: 'strokeLinecap',\n  'stroke-linecap': 'strokeLinecap',\n  strokelinejoin: 'strokeLinejoin',\n  'stroke-linejoin': 'strokeLinejoin',\n  strokemiterlimit: 'strokeMiterlimit',\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokewidth: 'strokeWidth',\n  'stroke-width': 'strokeWidth',\n  strokeopacity: 'strokeOpacity',\n  'stroke-opacity': 'strokeOpacity',\n  suppresscontenteditablewarning: 'suppressContentEditableWarning',\n  suppresshydrationwarning: 'suppressHydrationWarning',\n  surfacescale: 'surfaceScale',\n  systemlanguage: 'systemLanguage',\n  tablevalues: 'tableValues',\n  targetx: 'targetX',\n  targety: 'targetY',\n  textanchor: 'textAnchor',\n  'text-anchor': 'textAnchor',\n  textdecoration: 'textDecoration',\n  'text-decoration': 'textDecoration',\n  textlength: 'textLength',\n  textrendering: 'textRendering',\n  'text-rendering': 'textRendering',\n  to: 'to',\n  transform: 'transform',\n  typeof: 'typeof',\n  u1: 'u1',\n  u2: 'u2',\n  underlineposition: 'underlinePosition',\n  'underline-position': 'underlinePosition',\n  underlinethickness: 'underlineThickness',\n  'underline-thickness': 'underlineThickness',\n  unicode: 'unicode',\n  unicodebidi: 'unicodeBidi',\n  'unicode-bidi': 'unicodeBidi',\n  unicoderange: 'unicodeRange',\n  'unicode-range': 'unicodeRange',\n  unitsperem: 'unitsPerEm',\n  'units-per-em': 'unitsPerEm',\n  unselectable: 'unselectable',\n  valphabetic: 'vAlphabetic',\n  'v-alphabetic': 'vAlphabetic',\n  values: 'values',\n  vectoreffect: 'vectorEffect',\n  'vector-effect': 'vectorEffect',\n  version: 'version',\n  vertadvy: 'vertAdvY',\n  'vert-adv-y': 'vertAdvY',\n  vertoriginx: 'vertOriginX',\n  'vert-origin-x': 'vertOriginX',\n  vertoriginy: 'vertOriginY',\n  'vert-origin-y': 'vertOriginY',\n  vhanging: 'vHanging',\n  'v-hanging': 'vHanging',\n  videographic: 'vIdeographic',\n  'v-ideographic': 'vIdeographic',\n  viewbox: 'viewBox',\n  viewtarget: 'viewTarget',\n  visibility: 'visibility',\n  vmathematical: 'vMathematical',\n  'v-mathematical': 'vMathematical',\n  vocab: 'vocab',\n  widths: 'widths',\n  wordspacing: 'wordSpacing',\n  'word-spacing': 'wordSpacing',\n  writingmode: 'writingMode',\n  'writing-mode': 'writingMode',\n  x1: 'x1',\n  x2: 'x2',\n  x: 'x',\n  xchannelselector: 'xChannelSelector',\n  xheight: 'xHeight',\n  'x-height': 'xHeight',\n  xlinkactuate: 'xlinkActuate',\n  'xlink:actuate': 'xlinkActuate',\n  xlinkarcrole: 'xlinkArcrole',\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkhref: 'xlinkHref',\n  'xlink:href': 'xlinkHref',\n  xlinkrole: 'xlinkRole',\n  'xlink:role': 'xlinkRole',\n  xlinkshow: 'xlinkShow',\n  'xlink:show': 'xlinkShow',\n  xlinktitle: 'xlinkTitle',\n  'xlink:title': 'xlinkTitle',\n  xlinktype: 'xlinkType',\n  'xlink:type': 'xlinkType',\n  xmlbase: 'xmlBase',\n  'xml:base': 'xmlBase',\n  xmllang: 'xmlLang',\n  'xml:lang': 'xmlLang',\n  xmlns: 'xmlns',\n  'xml:space': 'xmlSpace',\n  xmlnsxlink: 'xmlnsXlink',\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlspace: 'xmlSpace',\n  y1: 'y1',\n  y2: 'y2',\n  y: 'y',\n  ychannelselector: 'yChannelSelector',\n  z: 'z',\n  zoomandpan: 'zoomAndPan'\n};\n\nvar validateProperty$1 = function () {};\n\n{\n  var warnedProperties$1 = {};\n  var EVENT_NAME_REGEX = /^on./;\n  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n  validateProperty$1 = function (tagName, name, value, eventRegistry) {\n    if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n      return true;\n    }\n\n    var lowerCasedName = name.toLowerCase();\n\n    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n      error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // We can't rely on the event system being injected on the server.\n\n\n    if (eventRegistry != null) {\n      var registrationNameDependencies = eventRegistry.registrationNameDependencies,\n          possibleRegistrationNames = eventRegistry.possibleRegistrationNames;\n\n      if (registrationNameDependencies.hasOwnProperty(name)) {\n        return true;\n      }\n\n      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n      if (registrationName != null) {\n        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n\n      if (EVENT_NAME_REGEX.test(name)) {\n        error('Unknown event handler property `%s`. It will be ignored.', name);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (EVENT_NAME_REGEX.test(name)) {\n      // If no event plugins have been injected, we are in a server environment.\n      // So we can't tell if the event name is correct for sure, but we can filter\n      // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n      if (INVALID_EVENT_NAME_REGEX.test(name)) {\n        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Let the ARIA attribute hook validate ARIA attributes\n\n\n    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n      return true;\n    }\n\n    if (lowerCasedName === 'innerhtml') {\n      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'aria') {\n      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    var propertyInfo = getPropertyInfo(name);\n    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      var standardName = possibleStandardNames[lowerCasedName];\n\n      if (standardName !== name) {\n        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (!isReserved && name !== lowerCasedName) {\n      // Unknown attributes should have lowercase casing since that's how they\n      // will be cased anyway with server rendering.\n      error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      if (value) {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n      } else {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Now that we've validated casing, do not validate\n    // data types for reserved props\n\n\n    if (isReserved) {\n      return true;\n    } // Warn when a known attribute is a bad type\n\n\n    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      warnedProperties$1[name] = true;\n      return false;\n    } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n      error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    return true;\n  };\n}\n\nvar warnUnknownProperties = function (type, props, eventRegistry) {\n  {\n    var unknownProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty$1(type, key, props[key], eventRegistry);\n\n      if (!isValid) {\n        unknownProps.push(key);\n      }\n    }\n\n    var unknownPropString = unknownProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (unknownProps.length === 1) {\n      error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    } else if (unknownProps.length > 1) {\n      error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    }\n  }\n};\n\nfunction validateProperties$2(type, props, eventRegistry) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnUnknownProperties(type, props, eventRegistry);\n}\n\nvar warnValidStyle = function () {};\n\n{\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n  var warnedForInfinityValue = false;\n\n  var camelize = function (string) {\n    return string.replace(hyphenPattern, function (_, character) {\n      return character.toUpperCase();\n    });\n  };\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n    // is converted to lowercase `ms`.\n    camelize(name.replace(msPattern, 'ms-')));\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n\n    error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n  };\n\n  var warnStyleValueIsNaN = function (name, value) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n\n    error('`NaN` is an invalid value for the `%s` css style property.', name);\n  };\n\n  var warnStyleValueIsInfinity = function (name, value) {\n    if (warnedForInfinityValue) {\n      return;\n    }\n\n    warnedForInfinityValue = true;\n\n    error('`Infinity` is an invalid value for the `%s` css style property.', name);\n  };\n\n  warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n\n    if (typeof value === 'number') {\n      if (isNaN(value)) {\n        warnStyleValueIsNaN(name, value);\n      } else if (!isFinite(value)) {\n        warnStyleValueIsInfinity(name, value);\n      }\n    }\n  };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n// code copied and modified from escape-html\nvar matchHtmlRegExp = /[\"'&<>]/;\n/**\n * Escapes special characters and HTML entities in a given html string.\n *\n * @param  {string} string HTML string to escape for later insertion\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  {\n    checkHtmlStringCoercion(string);\n  }\n\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        // \"\n        escape = '&quot;';\n        break;\n\n      case 38:\n        // &\n        escape = '&amp;';\n        break;\n\n      case 39:\n        // '\n        escape = '&#x27;'; // modified from escape-html; used to be '&#39'\n\n        break;\n\n      case 60:\n        // <\n        escape = '&lt;';\n        break;\n\n      case 62:\n        // >\n        escape = '&gt;';\n        break;\n\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n} // end code copied and modified from escape-html\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\n\n\nfunction escapeTextForBrowser(text) {\n  if (typeof text === 'boolean' || typeof text === 'number') {\n    // this shortcircuit helps perf for types that we know will never have\n    // special characters, especially given that this function is used often\n    // for numeric dom ids.\n    return '' + text;\n  }\n\n  return escapeHtml(text);\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern$1 = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern$1, '-ms-');\n}\n\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n  {\n    if (!didWarn && isJavaScriptProtocol.test(url)) {\n      didWarn = true;\n\n      error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\nvar startInlineScript = stringToPrecomputedChunk('<script>');\nvar endInlineScript = stringToPrecomputedChunk('</script>');\nvar startScriptSrc = stringToPrecomputedChunk('<script src=\"');\nvar startModuleSrc = stringToPrecomputedChunk('<script type=\"module\" src=\"');\nvar endAsyncScript = stringToPrecomputedChunk('\" async=\"\"></script>');\n/**\n * This escaping function is designed to work with bootstrapScriptContent only.\n * because we know we are escaping the entire script. We can avoid for instance\n * escaping html comment string sequences that are valid javascript as well because\n * if there are no sebsequent <script sequences the html parser will never enter\n * script data double escaped state (see: https://www.w3.org/TR/html53/syntax.html#script-data-double-escaped-state)\n *\n * While untrusted script content should be made safe before using this api it will\n * ensure that the script cannot be early terminated or never terminated state\n */\n\nfunction escapeBootstrapScriptContent(scriptText) {\n  {\n    checkHtmlStringCoercion(scriptText);\n  }\n\n  return ('' + scriptText).replace(scriptRegex, scriptReplacer);\n}\n\nvar scriptRegex = /(<\\/|<)(s)(cript)/gi;\n\nvar scriptReplacer = function (match, prefix, s, suffix) {\n  return \"\" + prefix + (s === 's' ? \"\\\\u0073\" : \"\\\\u0053\") + suffix;\n}; // Allows us to keep track of what we've already written so we can refer back to it.\n\n\nfunction createResponseState(identifierPrefix, nonce, bootstrapScriptContent, bootstrapScripts, bootstrapModules) {\n  var idPrefix = identifierPrefix === undefined ? '' : identifierPrefix;\n  var inlineScriptWithNonce = nonce === undefined ? startInlineScript : stringToPrecomputedChunk('<script nonce=\"' + escapeTextForBrowser(nonce) + '\">');\n  var bootstrapChunks = [];\n\n  if (bootstrapScriptContent !== undefined) {\n    bootstrapChunks.push(inlineScriptWithNonce, stringToChunk(escapeBootstrapScriptContent(bootstrapScriptContent)), endInlineScript);\n  }\n\n  if (bootstrapScripts !== undefined) {\n    for (var i = 0; i < bootstrapScripts.length; i++) {\n      bootstrapChunks.push(startScriptSrc, stringToChunk(escapeTextForBrowser(bootstrapScripts[i])), endAsyncScript);\n    }\n  }\n\n  if (bootstrapModules !== undefined) {\n    for (var _i = 0; _i < bootstrapModules.length; _i++) {\n      bootstrapChunks.push(startModuleSrc, stringToChunk(escapeTextForBrowser(bootstrapModules[_i])), endAsyncScript);\n    }\n  }\n\n  return {\n    bootstrapChunks: bootstrapChunks,\n    startInlineScript: inlineScriptWithNonce,\n    placeholderPrefix: stringToPrecomputedChunk(idPrefix + 'P:'),\n    segmentPrefix: stringToPrecomputedChunk(idPrefix + 'S:'),\n    boundaryPrefix: idPrefix + 'B:',\n    idPrefix: idPrefix,\n    nextSuspenseID: 0,\n    sentCompleteSegmentFunction: false,\n    sentCompleteBoundaryFunction: false,\n    sentClientRenderFunction: false\n  };\n} // Constants for the insertion mode we're currently writing in. We don't encode all HTML5 insertion\n// modes. We only include the variants as they matter for the sake of our purposes.\n// We don't actually provide the namespace therefore we use constants instead of the string.\n\nvar ROOT_HTML_MODE = 0; // Used for the root most element tag.\n\nvar HTML_MODE = 1;\nvar SVG_MODE = 2;\nvar MATHML_MODE = 3;\nvar HTML_TABLE_MODE = 4;\nvar HTML_TABLE_BODY_MODE = 5;\nvar HTML_TABLE_ROW_MODE = 6;\nvar HTML_COLGROUP_MODE = 7; // We have a greater than HTML_TABLE_MODE check elsewhere. If you add more cases here, make sure it\n// still makes sense\n\nfunction createFormatContext(insertionMode, selectedValue) {\n  return {\n    insertionMode: insertionMode,\n    selectedValue: selectedValue\n  };\n}\nfunction getChildFormatContext(parentContext, type, props) {\n  switch (type) {\n    case 'select':\n      return createFormatContext(HTML_MODE, props.value != null ? props.value : props.defaultValue);\n\n    case 'svg':\n      return createFormatContext(SVG_MODE, null);\n\n    case 'math':\n      return createFormatContext(MATHML_MODE, null);\n\n    case 'foreignObject':\n      return createFormatContext(HTML_MODE, null);\n    // Table parents are special in that their children can only be created at all if they're\n    // wrapped in a table parent. So we need to encode that we're entering this mode.\n\n    case 'table':\n      return createFormatContext(HTML_TABLE_MODE, null);\n\n    case 'thead':\n    case 'tbody':\n    case 'tfoot':\n      return createFormatContext(HTML_TABLE_BODY_MODE, null);\n\n    case 'colgroup':\n      return createFormatContext(HTML_COLGROUP_MODE, null);\n\n    case 'tr':\n      return createFormatContext(HTML_TABLE_ROW_MODE, null);\n  }\n\n  if (parentContext.insertionMode >= HTML_TABLE_MODE) {\n    // Whatever tag this was, it wasn't a table parent or other special parent, so we must have\n    // entered plain HTML again.\n    return createFormatContext(HTML_MODE, null);\n  }\n\n  if (parentContext.insertionMode === ROOT_HTML_MODE) {\n    // We've emitted the root and is now in plain HTML mode.\n    return createFormatContext(HTML_MODE, null);\n  }\n\n  return parentContext;\n}\nvar UNINITIALIZED_SUSPENSE_BOUNDARY_ID = null;\nfunction assignSuspenseBoundaryID(responseState) {\n  var generatedID = responseState.nextSuspenseID++;\n  return stringToPrecomputedChunk(responseState.boundaryPrefix + generatedID.toString(16));\n}\nfunction makeId(responseState, treeId, localId) {\n  var idPrefix = responseState.idPrefix;\n  var id = ':' + idPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end\n  // that represents the position of this useId hook among all the useId\n  // hooks for this fiber.\n\n  if (localId > 0) {\n    id += 'H' + localId.toString(32);\n  }\n\n  return id + ':';\n}\n\nfunction encodeHTMLTextNode(text) {\n  return escapeTextForBrowser(text);\n}\n\nvar textSeparator = stringToPrecomputedChunk('<!-- -->');\nfunction pushTextInstance(target, text, responseState, textEmbedded) {\n  if (text === '') {\n    // Empty text doesn't have a DOM node representation and the hydration is aware of this.\n    return textEmbedded;\n  }\n\n  if (textEmbedded) {\n    target.push(textSeparator);\n  }\n\n  target.push(stringToChunk(encodeHTMLTextNode(text)));\n  return true;\n} // Called when Fizz is done with a Segment. Currently the only purpose is to conditionally\n// emit a text separator when we don't know for sure it is safe to omit\n\nfunction pushSegmentFinale(target, responseState, lastPushedText, textEmbedded) {\n  if (lastPushedText && textEmbedded) {\n    target.push(textSeparator);\n  }\n}\nvar styleNameCache = new Map();\n\nfunction processStyleName(styleName) {\n  var chunk = styleNameCache.get(styleName);\n\n  if (chunk !== undefined) {\n    return chunk;\n  }\n\n  var result = stringToPrecomputedChunk(escapeTextForBrowser(hyphenateStyleName(styleName)));\n  styleNameCache.set(styleName, result);\n  return result;\n}\n\nvar styleAttributeStart = stringToPrecomputedChunk(' style=\"');\nvar styleAssign = stringToPrecomputedChunk(':');\nvar styleSeparator = stringToPrecomputedChunk(';');\n\nfunction pushStyle(target, responseState, style) {\n  if (typeof style !== 'object') {\n    throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n  }\n\n  var isFirst = true;\n\n  for (var styleName in style) {\n    if (!hasOwnProperty.call(style, styleName)) {\n      continue;\n    } // If you provide unsafe user data here they can inject arbitrary CSS\n    // which may be problematic (I couldn't repro this):\n    // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n    // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n    // This is not an XSS hole but instead a potential CSS injection issue\n    // which has lead to a greater discussion about how we're going to\n    // trust URLs moving forward. See #2115901\n\n\n    var styleValue = style[styleName];\n\n    if (styleValue == null || typeof styleValue === 'boolean' || styleValue === '') {\n      // TODO: We used to set empty string as a style with an empty value. Does that ever make sense?\n      continue;\n    }\n\n    var nameChunk = void 0;\n    var valueChunk = void 0;\n    var isCustomProperty = styleName.indexOf('--') === 0;\n\n    if (isCustomProperty) {\n      nameChunk = stringToChunk(escapeTextForBrowser(styleName));\n\n      {\n        checkCSSPropertyStringCoercion(styleValue, styleName);\n      }\n\n      valueChunk = stringToChunk(escapeTextForBrowser(('' + styleValue).trim()));\n    } else {\n      {\n        warnValidStyle$1(styleName, styleValue);\n      }\n\n      nameChunk = processStyleName(styleName);\n\n      if (typeof styleValue === 'number') {\n        if (styleValue !== 0 && !hasOwnProperty.call(isUnitlessNumber, styleName)) {\n          valueChunk = stringToChunk(styleValue + 'px'); // Presumes implicit 'px' suffix for unitless numbers\n        } else {\n          valueChunk = stringToChunk('' + styleValue);\n        }\n      } else {\n        {\n          checkCSSPropertyStringCoercion(styleValue, styleName);\n        }\n\n        valueChunk = stringToChunk(escapeTextForBrowser(('' + styleValue).trim()));\n      }\n    }\n\n    if (isFirst) {\n      isFirst = false; // If it's first, we don't need any separators prefixed.\n\n      target.push(styleAttributeStart, nameChunk, styleAssign, valueChunk);\n    } else {\n      target.push(styleSeparator, nameChunk, styleAssign, valueChunk);\n    }\n  }\n\n  if (!isFirst) {\n    target.push(attributeEnd);\n  }\n}\n\nvar attributeSeparator = stringToPrecomputedChunk(' ');\nvar attributeAssign = stringToPrecomputedChunk('=\"');\nvar attributeEnd = stringToPrecomputedChunk('\"');\nvar attributeEmptyString = stringToPrecomputedChunk('=\"\"');\n\nfunction pushAttribute(target, responseState, name, value) {\n  switch (name) {\n    case 'style':\n      {\n        pushStyle(target, responseState, value);\n        return;\n      }\n\n    case 'defaultValue':\n    case 'defaultChecked': // These shouldn't be set as attributes on generic HTML elements.\n\n    case 'innerHTML': // Must use dangerouslySetInnerHTML instead.\n\n    case 'suppressContentEditableWarning':\n    case 'suppressHydrationWarning':\n      // Ignored. These are built-in to React on the client.\n      return;\n  }\n\n  if ( // shouldIgnoreAttribute\n  // We have already filtered out null/undefined and reserved words.\n  name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n    return;\n  }\n\n  var propertyInfo = getPropertyInfo(name);\n\n  if (propertyInfo !== null) {\n    // shouldRemoveAttribute\n    switch (typeof value) {\n      case 'function': // $FlowIssue symbol is perfectly valid here\n\n      case 'symbol':\n        // eslint-disable-line\n        return;\n\n      case 'boolean':\n        {\n          if (!propertyInfo.acceptsBooleans) {\n            return;\n          }\n        }\n    }\n\n    var attributeName = propertyInfo.attributeName;\n    var attributeNameChunk = stringToChunk(attributeName); // TODO: If it's known we can cache the chunk.\n\n    switch (propertyInfo.type) {\n      case BOOLEAN:\n        if (value) {\n          target.push(attributeSeparator, attributeNameChunk, attributeEmptyString);\n        }\n\n        return;\n\n      case OVERLOADED_BOOLEAN:\n        if (value === true) {\n          target.push(attributeSeparator, attributeNameChunk, attributeEmptyString);\n        } else if (value === false) ; else {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        return;\n\n      case NUMERIC:\n        if (!isNaN(value)) {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        break;\n\n      case POSITIVE_NUMERIC:\n        if (!isNaN(value) && value >= 1) {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        break;\n\n      default:\n        if (propertyInfo.sanitizeURL) {\n          {\n            checkAttributeStringCoercion(value, attributeName);\n          }\n\n          value = '' + value;\n          sanitizeURL(value);\n        }\n\n        target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n    }\n  } else if (isAttributeNameSafe(name)) {\n    // shouldRemoveAttribute\n    switch (typeof value) {\n      case 'function': // $FlowIssue symbol is perfectly valid here\n\n      case 'symbol':\n        // eslint-disable-line\n        return;\n\n      case 'boolean':\n        {\n          var prefix = name.toLowerCase().slice(0, 5);\n\n          if (prefix !== 'data-' && prefix !== 'aria-') {\n            return;\n          }\n        }\n    }\n\n    target.push(attributeSeparator, stringToChunk(name), attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n  }\n}\n\nvar endOfStartTag = stringToPrecomputedChunk('>');\nvar endOfStartTagSelfClosing = stringToPrecomputedChunk('/>');\n\nfunction pushInnerHTML(target, innerHTML, children) {\n  if (innerHTML != null) {\n    if (children != null) {\n      throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n    }\n\n    if (typeof innerHTML !== 'object' || !('__html' in innerHTML)) {\n      throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n    }\n\n    var html = innerHTML.__html;\n\n    if (html !== null && html !== undefined) {\n      {\n        checkHtmlStringCoercion(html);\n      }\n\n      target.push(stringToChunk('' + html));\n    }\n  }\n} // TODO: Move these to ResponseState so that we warn for every request.\n// It would help debugging in stateful servers (e.g. service worker).\n\n\nvar didWarnDefaultInputValue = false;\nvar didWarnDefaultChecked = false;\nvar didWarnDefaultSelectValue = false;\nvar didWarnDefaultTextareaValue = false;\nvar didWarnInvalidOptionChildren = false;\nvar didWarnInvalidOptionInnerHTML = false;\nvar didWarnSelectedSetOnOption = false;\n\nfunction checkSelectProp(props, propName) {\n  {\n    var value = props[propName];\n\n    if (value != null) {\n      var array = isArray(value);\n\n      if (props.multiple && !array) {\n        error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.', propName);\n      } else if (!props.multiple && array) {\n        error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.', propName);\n      }\n    }\n  }\n}\n\nfunction pushStartSelect(target, props, responseState) {\n  {\n    checkControlledValueProps('select', props);\n    checkSelectProp(props, 'value');\n    checkSelectProp(props, 'defaultValue');\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultSelectValue) {\n      error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n      didWarnDefaultSelectValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('select'));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          // TODO: This doesn't really make sense for select since it can't use the controlled\n          // value in the innerHTML.\n          innerHTML = propValue;\n          break;\n\n        case 'defaultValue':\n        case 'value':\n          // These are set on the Context instead and applied to the nested options.\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nfunction flattenOptionChildren(children) {\n  var content = ''; // Flatten children and warn if they aren't strings or numbers;\n  // invalid types are ignored.\n\n  React.Children.forEach(children, function (child) {\n    if (child == null) {\n      return;\n    }\n\n    content += child;\n\n    {\n      if (!didWarnInvalidOptionChildren && typeof child !== 'string' && typeof child !== 'number') {\n        didWarnInvalidOptionChildren = true;\n\n        error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');\n      }\n    }\n  });\n  return content;\n}\n\nvar selectedMarkerAttribute = stringToPrecomputedChunk(' selected=\"\"');\n\nfunction pushStartOption(target, props, responseState, formatContext) {\n  var selectedValue = formatContext.selectedValue;\n  target.push(startChunkForTag('option'));\n  var children = null;\n  var value = null;\n  var selected = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'selected':\n          // ignore\n          selected = propValue;\n\n          {\n            // TODO: Remove support for `selected` in <option>.\n            if (!didWarnSelectedSetOnOption) {\n              error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n              didWarnSelectedSetOnOption = true;\n            }\n          }\n\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n        // eslint-disable-next-line-no-fallthrough\n\n        case 'value':\n          value = propValue;\n        // We intentionally fallthrough to also set the attribute on the node.\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (selectedValue != null) {\n    var stringValue;\n\n    if (value !== null) {\n      {\n        checkAttributeStringCoercion(value, 'value');\n      }\n\n      stringValue = '' + value;\n    } else {\n      {\n        if (innerHTML !== null) {\n          if (!didWarnInvalidOptionInnerHTML) {\n            didWarnInvalidOptionInnerHTML = true;\n\n            error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');\n          }\n        }\n      }\n\n      stringValue = flattenOptionChildren(children);\n    }\n\n    if (isArray(selectedValue)) {\n      // multiple\n      for (var i = 0; i < selectedValue.length; i++) {\n        {\n          checkAttributeStringCoercion(selectedValue[i], 'value');\n        }\n\n        var v = '' + selectedValue[i];\n\n        if (v === stringValue) {\n          target.push(selectedMarkerAttribute);\n          break;\n        }\n      }\n    } else {\n      {\n        checkAttributeStringCoercion(selectedValue, 'select.value');\n      }\n\n      if ('' + selectedValue === stringValue) {\n        target.push(selectedMarkerAttribute);\n      }\n    }\n  } else if (selected) {\n    target.push(selectedMarkerAttribute);\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nfunction pushInput(target, props, responseState) {\n  {\n    checkControlledValueProps('input', props);\n\n    if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnDefaultChecked) {\n      error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', 'A component', props.type);\n\n      didWarnDefaultChecked = true;\n    }\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultInputValue) {\n      error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', 'A component', props.type);\n\n      didWarnDefaultInputValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('input'));\n  var value = null;\n  var defaultValue = null;\n  var checked = null;\n  var defaultChecked = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error('input' + \" is a self-closing tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        case 'defaultChecked':\n          defaultChecked = propValue;\n          break;\n\n        case 'defaultValue':\n          defaultValue = propValue;\n          break;\n\n        case 'checked':\n          checked = propValue;\n          break;\n\n        case 'value':\n          value = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (checked !== null) {\n    pushAttribute(target, responseState, 'checked', checked);\n  } else if (defaultChecked !== null) {\n    pushAttribute(target, responseState, 'checked', defaultChecked);\n  }\n\n  if (value !== null) {\n    pushAttribute(target, responseState, 'value', value);\n  } else if (defaultValue !== null) {\n    pushAttribute(target, responseState, 'value', defaultValue);\n  }\n\n  target.push(endOfStartTagSelfClosing);\n  return null;\n}\n\nfunction pushStartTextArea(target, props, responseState) {\n  {\n    checkControlledValueProps('textarea', props);\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultTextareaValue) {\n      error('Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n      didWarnDefaultTextareaValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('textarea'));\n  var value = null;\n  var defaultValue = null;\n  var children = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'value':\n          value = propValue;\n          break;\n\n        case 'defaultValue':\n          defaultValue = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (value === null && defaultValue !== null) {\n    value = defaultValue;\n  }\n\n  target.push(endOfStartTag); // TODO (yungsters): Remove support for children content in <textarea>.\n\n  if (children != null) {\n    {\n      error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n    }\n\n    if (value != null) {\n      throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');\n    }\n\n    if (isArray(children)) {\n      if (children.length > 1) {\n        throw new Error('<textarea> can only have at most one child.');\n      } // TODO: remove the coercion and the DEV check below because it will\n      // always be overwritten by the coercion several lines below it. #22309\n\n\n      {\n        checkHtmlStringCoercion(children[0]);\n      }\n\n      value = '' + children[0];\n    }\n\n    {\n      checkHtmlStringCoercion(children);\n    }\n\n    value = '' + children;\n  }\n\n  if (typeof value === 'string' && value[0] === '\\n') {\n    // text/html ignores the first character in these tags if it's a newline\n    // Prefer to break application/xml over text/html (for now) by adding\n    // a newline specifically to get eaten by the parser. (Alternately for\n    // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n    // \\r is normalized out by HTMLTextAreaElement#value.)\n    // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n    // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n    // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n    // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n    //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n    target.push(leadingNewline);\n  } // ToString and push directly instead of recurse over children.\n  // We don't really support complex children in the value anyway.\n  // This also currently avoids a trailing comment node which breaks textarea.\n\n\n  if (value !== null) {\n    {\n      checkAttributeStringCoercion(value, 'value');\n    }\n\n    target.push(stringToChunk(encodeHTMLTextNode('' + value)));\n  }\n\n  return null;\n}\n\nfunction pushSelfClosing(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error(tag + \" is a self-closing tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTagSelfClosing);\n  return null;\n}\n\nfunction pushStartMenuItem(target, props, responseState) {\n  target.push(startChunkForTag('menuitem'));\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error('menuitems cannot have `children` nor `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  return null;\n}\n\nfunction pushStartTitle(target, props, responseState) {\n  target.push(startChunkForTag('title'));\n  var children = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          throw new Error('`dangerouslySetInnerHTML` does not make sense on <title>.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n\n  {\n    var child = Array.isArray(children) && children.length < 2 ? children[0] || null : children;\n\n    if (Array.isArray(children) && children.length > 1) {\n      error('A title element received an array with more than 1 element as children. ' + 'In browsers title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    } else if (child != null && child.$$typeof != null) {\n      error('A title element received a React element for children. ' + 'In the browser title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    } else if (child != null && typeof child !== 'string' && typeof child !== 'number') {\n      error('A title element received a value that was not a string or number for children. ' + 'In the browser title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    }\n  }\n\n  return children;\n}\n\nfunction pushStartGenericElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n\n  if (typeof children === 'string') {\n    // Special case children as a string to avoid the unnecessary comment.\n    // TODO: Remove this special case after the general optimization is in place.\n    target.push(stringToChunk(encodeHTMLTextNode(children)));\n    return null;\n  }\n\n  return children;\n}\n\nfunction pushStartCustomElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        case 'style':\n          pushStyle(target, responseState, propValue);\n          break;\n\n        case 'suppressContentEditableWarning':\n        case 'suppressHydrationWarning':\n          // Ignored. These are built-in to React on the client.\n          break;\n\n        default:\n          if (isAttributeNameSafe(propKey) && typeof propValue !== 'function' && typeof propValue !== 'symbol') {\n            target.push(attributeSeparator, stringToChunk(propKey), attributeAssign, stringToChunk(escapeTextForBrowser(propValue)), attributeEnd);\n          }\n\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nvar leadingNewline = stringToPrecomputedChunk('\\n');\n\nfunction pushStartPreformattedElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag); // text/html ignores the first character in these tags if it's a newline\n  // Prefer to break application/xml over text/html (for now) by adding\n  // a newline specifically to get eaten by the parser. (Alternately for\n  // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n  // \\r is normalized out by HTMLTextAreaElement#value.)\n  // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n  // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n  // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n  // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n  //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n  // TODO: This doesn't deal with the case where the child is an array\n  // or component that returns a string.\n\n  if (innerHTML != null) {\n    if (children != null) {\n      throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n    }\n\n    if (typeof innerHTML !== 'object' || !('__html' in innerHTML)) {\n      throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n    }\n\n    var html = innerHTML.__html;\n\n    if (html !== null && html !== undefined) {\n      if (typeof html === 'string' && html.length > 0 && html[0] === '\\n') {\n        target.push(leadingNewline, stringToChunk(html));\n      } else {\n        {\n          checkHtmlStringCoercion(html);\n        }\n\n        target.push(stringToChunk('' + html));\n      }\n    }\n  }\n\n  if (typeof children === 'string' && children[0] === '\\n') {\n    target.push(leadingNewline);\n  }\n\n  return children;\n} // We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\n\nvar validatedTagCache = new Map();\n\nfunction startChunkForTag(tag) {\n  var tagStartChunk = validatedTagCache.get(tag);\n\n  if (tagStartChunk === undefined) {\n    if (!VALID_TAG_REGEX.test(tag)) {\n      throw new Error(\"Invalid tag: \" + tag);\n    }\n\n    tagStartChunk = stringToPrecomputedChunk('<' + tag);\n    validatedTagCache.set(tag, tagStartChunk);\n  }\n\n  return tagStartChunk;\n}\n\nvar DOCTYPE = stringToPrecomputedChunk('<!DOCTYPE html>');\nfunction pushStartInstance(target, type, props, responseState, formatContext) {\n  {\n    validateProperties(type, props);\n    validateProperties$1(type, props);\n    validateProperties$2(type, props, null);\n\n    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n      error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n    }\n\n    if (formatContext.insertionMode !== SVG_MODE && formatContext.insertionMode !== MATHML_MODE) {\n      if (type.indexOf('-') === -1 && typeof props.is !== 'string' && type.toLowerCase() !== type) {\n        error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n      }\n    }\n  }\n\n  switch (type) {\n    // Special tags\n    case 'select':\n      return pushStartSelect(target, props, responseState);\n\n    case 'option':\n      return pushStartOption(target, props, responseState, formatContext);\n\n    case 'textarea':\n      return pushStartTextArea(target, props, responseState);\n\n    case 'input':\n      return pushInput(target, props, responseState);\n\n    case 'menuitem':\n      return pushStartMenuItem(target, props, responseState);\n\n    case 'title':\n      return pushStartTitle(target, props, responseState);\n    // Newline eating tags\n\n    case 'listing':\n    case 'pre':\n      {\n        return pushStartPreformattedElement(target, props, type, responseState);\n      }\n    // Omitted close tags\n\n    case 'area':\n    case 'base':\n    case 'br':\n    case 'col':\n    case 'embed':\n    case 'hr':\n    case 'img':\n    case 'keygen':\n    case 'link':\n    case 'meta':\n    case 'param':\n    case 'source':\n    case 'track':\n    case 'wbr':\n      {\n        return pushSelfClosing(target, props, type, responseState);\n      }\n    // These are reserved SVG and MathML elements, that are never custom elements.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      {\n        return pushStartGenericElement(target, props, type, responseState);\n      }\n\n    case 'html':\n      {\n        if (formatContext.insertionMode === ROOT_HTML_MODE) {\n          // If we're rendering the html tag and we're at the root (i.e. not in foreignObject)\n          // then we also emit the DOCTYPE as part of the root content as a convenience for\n          // rendering the whole document.\n          target.push(DOCTYPE);\n        }\n\n        return pushStartGenericElement(target, props, type, responseState);\n      }\n\n    default:\n      {\n        if (type.indexOf('-') === -1 && typeof props.is !== 'string') {\n          // Generic element\n          return pushStartGenericElement(target, props, type, responseState);\n        } else {\n          // Custom element\n          return pushStartCustomElement(target, props, type, responseState);\n        }\n      }\n  }\n}\nvar endTag1 = stringToPrecomputedChunk('</');\nvar endTag2 = stringToPrecomputedChunk('>');\nfunction pushEndInstance(target, type, props) {\n  switch (type) {\n    // Omitted close tags\n    // TODO: Instead of repeating this switch we could try to pass a flag from above.\n    // That would require returning a tuple. Which might be ok if it gets inlined.\n    case 'area':\n    case 'base':\n    case 'br':\n    case 'col':\n    case 'embed':\n    case 'hr':\n    case 'img':\n    case 'input':\n    case 'keygen':\n    case 'link':\n    case 'meta':\n    case 'param':\n    case 'source':\n    case 'track':\n    case 'wbr':\n      {\n        // No close tag needed.\n        break;\n      }\n\n    default:\n      {\n        target.push(endTag1, stringToChunk(type), endTag2);\n      }\n  }\n}\nfunction writeCompletedRoot(destination, responseState) {\n  var bootstrapChunks = responseState.bootstrapChunks;\n  var i = 0;\n\n  for (; i < bootstrapChunks.length - 1; i++) {\n    writeChunk(destination, bootstrapChunks[i]);\n  }\n\n  if (i < bootstrapChunks.length) {\n    return writeChunkAndReturn(destination, bootstrapChunks[i]);\n  }\n\n  return true;\n} // Structural Nodes\n// A placeholder is a node inside a hidden partial tree that can be filled in later, but before\n// display. It's never visible to users. We use the template tag because it can be used in every\n// type of parent. <script> tags also work in every other tag except <colgroup>.\n\nvar placeholder1 = stringToPrecomputedChunk('<template id=\"');\nvar placeholder2 = stringToPrecomputedChunk('\"></template>');\nfunction writePlaceholder(destination, responseState, id) {\n  writeChunk(destination, placeholder1);\n  writeChunk(destination, responseState.placeholderPrefix);\n  var formattedID = stringToChunk(id.toString(16));\n  writeChunk(destination, formattedID);\n  return writeChunkAndReturn(destination, placeholder2);\n} // Suspense boundaries are encoded as comments.\n\nvar startCompletedSuspenseBoundary = stringToPrecomputedChunk('<!--$-->');\nvar startPendingSuspenseBoundary1 = stringToPrecomputedChunk('<!--$?--><template id=\"');\nvar startPendingSuspenseBoundary2 = stringToPrecomputedChunk('\"></template>');\nvar startClientRenderedSuspenseBoundary = stringToPrecomputedChunk('<!--$!-->');\nvar endSuspenseBoundary = stringToPrecomputedChunk('<!--/$-->');\nvar clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk('<template');\nvar clientRenderedSuspenseBoundaryErrorAttrInterstitial = stringToPrecomputedChunk('\"');\nvar clientRenderedSuspenseBoundaryError1A = stringToPrecomputedChunk(' data-dgst=\"');\nvar clientRenderedSuspenseBoundaryError1B = stringToPrecomputedChunk(' data-msg=\"');\nvar clientRenderedSuspenseBoundaryError1C = stringToPrecomputedChunk(' data-stck=\"');\nvar clientRenderedSuspenseBoundaryError2 = stringToPrecomputedChunk('></template>');\nfunction writeStartCompletedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, startCompletedSuspenseBoundary);\n}\nfunction writeStartPendingSuspenseBoundary(destination, responseState, id) {\n  writeChunk(destination, startPendingSuspenseBoundary1);\n\n  if (id === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  writeChunk(destination, id);\n  return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);\n}\nfunction writeStartClientRenderedSuspenseBoundary(destination, responseState, errorDigest, errorMesssage, errorComponentStack) {\n  var result;\n  result = writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);\n  writeChunk(destination, clientRenderedSuspenseBoundaryError1);\n\n  if (errorDigest) {\n    writeChunk(destination, clientRenderedSuspenseBoundaryError1A);\n    writeChunk(destination, stringToChunk(escapeTextForBrowser(errorDigest)));\n    writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n  }\n\n  {\n    if (errorMesssage) {\n      writeChunk(destination, clientRenderedSuspenseBoundaryError1B);\n      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorMesssage)));\n      writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n    }\n\n    if (errorComponentStack) {\n      writeChunk(destination, clientRenderedSuspenseBoundaryError1C);\n      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorComponentStack)));\n      writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n    }\n  }\n\n  result = writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);\n  return result;\n}\nfunction writeEndCompletedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nfunction writeEndPendingSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nfunction writeEndClientRenderedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nvar startSegmentHTML = stringToPrecomputedChunk('<div hidden id=\"');\nvar startSegmentHTML2 = stringToPrecomputedChunk('\">');\nvar endSegmentHTML = stringToPrecomputedChunk('</div>');\nvar startSegmentSVG = stringToPrecomputedChunk('<svg aria-hidden=\"true\" style=\"display:none\" id=\"');\nvar startSegmentSVG2 = stringToPrecomputedChunk('\">');\nvar endSegmentSVG = stringToPrecomputedChunk('</svg>');\nvar startSegmentMathML = stringToPrecomputedChunk('<math aria-hidden=\"true\" style=\"display:none\" id=\"');\nvar startSegmentMathML2 = stringToPrecomputedChunk('\">');\nvar endSegmentMathML = stringToPrecomputedChunk('</math>');\nvar startSegmentTable = stringToPrecomputedChunk('<table hidden id=\"');\nvar startSegmentTable2 = stringToPrecomputedChunk('\">');\nvar endSegmentTable = stringToPrecomputedChunk('</table>');\nvar startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id=\"');\nvar startSegmentTableBody2 = stringToPrecomputedChunk('\">');\nvar endSegmentTableBody = stringToPrecomputedChunk('</tbody></table>');\nvar startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id=\"');\nvar startSegmentTableRow2 = stringToPrecomputedChunk('\">');\nvar endSegmentTableRow = stringToPrecomputedChunk('</tr></table>');\nvar startSegmentColGroup = stringToPrecomputedChunk('<table hidden><colgroup id=\"');\nvar startSegmentColGroup2 = stringToPrecomputedChunk('\">');\nvar endSegmentColGroup = stringToPrecomputedChunk('</colgroup></table>');\nfunction writeStartSegment(destination, responseState, formatContext, id) {\n  switch (formatContext.insertionMode) {\n    case ROOT_HTML_MODE:\n    case HTML_MODE:\n      {\n        writeChunk(destination, startSegmentHTML);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentHTML2);\n      }\n\n    case SVG_MODE:\n      {\n        writeChunk(destination, startSegmentSVG);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentSVG2);\n      }\n\n    case MATHML_MODE:\n      {\n        writeChunk(destination, startSegmentMathML);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentMathML2);\n      }\n\n    case HTML_TABLE_MODE:\n      {\n        writeChunk(destination, startSegmentTable);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTable2);\n      }\n    // TODO: For the rest of these, there will be extra wrapper nodes that never\n    // get deleted from the document. We need to delete the table too as part\n    // of the injected scripts. They are invisible though so it's not too terrible\n    // and it's kind of an edge case to suspend in a table. Totally supported though.\n\n    case HTML_TABLE_BODY_MODE:\n      {\n        writeChunk(destination, startSegmentTableBody);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTableBody2);\n      }\n\n    case HTML_TABLE_ROW_MODE:\n      {\n        writeChunk(destination, startSegmentTableRow);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTableRow2);\n      }\n\n    case HTML_COLGROUP_MODE:\n      {\n        writeChunk(destination, startSegmentColGroup);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentColGroup2);\n      }\n\n    default:\n      {\n        throw new Error('Unknown insertion mode. This is a bug in React.');\n      }\n  }\n}\nfunction writeEndSegment(destination, formatContext) {\n  switch (formatContext.insertionMode) {\n    case ROOT_HTML_MODE:\n    case HTML_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentHTML);\n      }\n\n    case SVG_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentSVG);\n      }\n\n    case MATHML_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentMathML);\n      }\n\n    case HTML_TABLE_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTable);\n      }\n\n    case HTML_TABLE_BODY_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTableBody);\n      }\n\n    case HTML_TABLE_ROW_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTableRow);\n      }\n\n    case HTML_COLGROUP_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentColGroup);\n      }\n\n    default:\n      {\n        throw new Error('Unknown insertion mode. This is a bug in React.');\n      }\n  }\n} // Instruction Set\n// The following code is the source scripts that we then minify and inline below,\n// with renamed function names that we hope don't collide:\n// const COMMENT_NODE = 8;\n// const SUSPENSE_START_DATA = '$';\n// const SUSPENSE_END_DATA = '/$';\n// const SUSPENSE_PENDING_START_DATA = '$?';\n// const SUSPENSE_FALLBACK_START_DATA = '$!';\n//\n// function clientRenderBoundary(suspenseBoundaryID, errorDigest, errorMsg, errorComponentStack) {\n//   // Find the fallback's first element.\n//   const suspenseIdNode = document.getElementById(suspenseBoundaryID);\n//   if (!suspenseIdNode) {\n//     // The user must have already navigated away from this tree.\n//     // E.g. because the parent was hydrated.\n//     return;\n//   }\n//   // Find the boundary around the fallback. This is always the previous node.\n//   const suspenseNode = suspenseIdNode.previousSibling;\n//   // Tag it to be client rendered.\n//   suspenseNode.data = SUSPENSE_FALLBACK_START_DATA;\n//   // assign error metadata to first sibling\n//   let dataset = suspenseIdNode.dataset;\n//   if (errorDigest) dataset.dgst = errorDigest;\n//   if (errorMsg) dataset.msg = errorMsg;\n//   if (errorComponentStack) dataset.stck = errorComponentStack;\n//   // Tell React to retry it if the parent already hydrated.\n//   if (suspenseNode._reactRetry) {\n//     suspenseNode._reactRetry();\n//   }\n// }\n//\n// function completeBoundary(suspenseBoundaryID, contentID) {\n//   // Find the fallback's first element.\n//   const suspenseIdNode = document.getElementById(suspenseBoundaryID);\n//   const contentNode = document.getElementById(contentID);\n//   // We'll detach the content node so that regardless of what happens next we don't leave in the tree.\n//   // This might also help by not causing recalcing each time we move a child from here to the target.\n//   contentNode.parentNode.removeChild(contentNode);\n//   if (!suspenseIdNode) {\n//     // The user must have already navigated away from this tree.\n//     // E.g. because the parent was hydrated. That's fine there's nothing to do\n//     // but we have to make sure that we already deleted the container node.\n//     return;\n//   }\n//   // Find the boundary around the fallback. This is always the previous node.\n//   const suspenseNode = suspenseIdNode.previousSibling;\n//\n//   // Clear all the existing children. This is complicated because\n//   // there can be embedded Suspense boundaries in the fallback.\n//   // This is similar to clearSuspenseBoundary in ReactDOMHostConfig.\n//   // TODO: We could avoid this if we never emitted suspense boundaries in fallback trees.\n//   // They never hydrate anyway. However, currently we support incrementally loading the fallback.\n//   const parentInstance = suspenseNode.parentNode;\n//   let node = suspenseNode.nextSibling;\n//   let depth = 0;\n//   do {\n//     if (node && node.nodeType === COMMENT_NODE) {\n//       const data = node.data;\n//       if (data === SUSPENSE_END_DATA) {\n//         if (depth === 0) {\n//           break;\n//         } else {\n//           depth--;\n//         }\n//       } else if (\n//         data === SUSPENSE_START_DATA ||\n//         data === SUSPENSE_PENDING_START_DATA ||\n//         data === SUSPENSE_FALLBACK_START_DATA\n//       ) {\n//         depth++;\n//       }\n//     }\n//\n//     const nextNode = node.nextSibling;\n//     parentInstance.removeChild(node);\n//     node = nextNode;\n//   } while (node);\n//\n//   const endOfBoundary = node;\n//\n//   // Insert all the children from the contentNode between the start and end of suspense boundary.\n//   while (contentNode.firstChild) {\n//     parentInstance.insertBefore(contentNode.firstChild, endOfBoundary);\n//   }\n//   suspenseNode.data = SUSPENSE_START_DATA;\n//   if (suspenseNode._reactRetry) {\n//     suspenseNode._reactRetry();\n//   }\n// }\n//\n// function completeSegment(containerID, placeholderID) {\n//   const segmentContainer = document.getElementById(containerID);\n//   const placeholderNode = document.getElementById(placeholderID);\n//   // We always expect both nodes to exist here because, while we might\n//   // have navigated away from the main tree, we still expect the detached\n//   // tree to exist.\n//   segmentContainer.parentNode.removeChild(segmentContainer);\n//   while (segmentContainer.firstChild) {\n//     placeholderNode.parentNode.insertBefore(\n//       segmentContainer.firstChild,\n//       placeholderNode,\n//     );\n//   }\n//   placeholderNode.parentNode.removeChild(placeholderNode);\n// }\n\nvar completeSegmentFunction = 'function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)}';\nvar completeBoundaryFunction = 'function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}}';\nvar clientRenderFunction = 'function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())}';\nvar completeSegmentScript1Full = stringToPrecomputedChunk(completeSegmentFunction + ';$RS(\"');\nvar completeSegmentScript1Partial = stringToPrecomputedChunk('$RS(\"');\nvar completeSegmentScript2 = stringToPrecomputedChunk('\",\"');\nvar completeSegmentScript3 = stringToPrecomputedChunk('\")</script>');\nfunction writeCompletedSegmentInstruction(destination, responseState, contentSegmentID) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentCompleteSegmentFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentCompleteSegmentFunction = true;\n    writeChunk(destination, completeSegmentScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, completeSegmentScript1Partial);\n  }\n\n  writeChunk(destination, responseState.segmentPrefix);\n  var formattedID = stringToChunk(contentSegmentID.toString(16));\n  writeChunk(destination, formattedID);\n  writeChunk(destination, completeSegmentScript2);\n  writeChunk(destination, responseState.placeholderPrefix);\n  writeChunk(destination, formattedID);\n  return writeChunkAndReturn(destination, completeSegmentScript3);\n}\nvar completeBoundaryScript1Full = stringToPrecomputedChunk(completeBoundaryFunction + ';$RC(\"');\nvar completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC(\"');\nvar completeBoundaryScript2 = stringToPrecomputedChunk('\",\"');\nvar completeBoundaryScript3 = stringToPrecomputedChunk('\")</script>');\nfunction writeCompletedBoundaryInstruction(destination, responseState, boundaryID, contentSegmentID) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentCompleteBoundaryFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentCompleteBoundaryFunction = true;\n    writeChunk(destination, completeBoundaryScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, completeBoundaryScript1Partial);\n  }\n\n  if (boundaryID === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  var formattedContentID = stringToChunk(contentSegmentID.toString(16));\n  writeChunk(destination, boundaryID);\n  writeChunk(destination, completeBoundaryScript2);\n  writeChunk(destination, responseState.segmentPrefix);\n  writeChunk(destination, formattedContentID);\n  return writeChunkAndReturn(destination, completeBoundaryScript3);\n}\nvar clientRenderScript1Full = stringToPrecomputedChunk(clientRenderFunction + ';$RX(\"');\nvar clientRenderScript1Partial = stringToPrecomputedChunk('$RX(\"');\nvar clientRenderScript1A = stringToPrecomputedChunk('\"');\nvar clientRenderScript2 = stringToPrecomputedChunk(')</script>');\nvar clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(',');\nfunction writeClientRenderBoundaryInstruction(destination, responseState, boundaryID, errorDigest, errorMessage, errorComponentStack) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentClientRenderFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentClientRenderFunction = true;\n    writeChunk(destination, clientRenderScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, clientRenderScript1Partial);\n  }\n\n  if (boundaryID === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  writeChunk(destination, boundaryID);\n  writeChunk(destination, clientRenderScript1A);\n\n  if (errorDigest || errorMessage || errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorDigest || '')));\n  }\n\n  if (errorMessage || errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorMessage || '')));\n  }\n\n  if (errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorComponentStack)));\n  }\n\n  return writeChunkAndReturn(destination, clientRenderScript2);\n}\nvar regexForJSStringsInScripts = /[<\\u2028\\u2029]/g;\n\nfunction escapeJSStringsForInstructionScripts(input) {\n  var escaped = JSON.stringify(input);\n  return escaped.replace(regexForJSStringsInScripts, function (match) {\n    switch (match) {\n      // santizing breaking out of strings and script tags\n      case '<':\n        return \"\\\\u003c\";\n\n      case \"\\u2028\":\n        return \"\\\\u2028\";\n\n      case \"\\u2029\":\n        return \"\\\\u2029\";\n\n      default:\n        {\n          // eslint-disable-next-line react-internal/prod-error-codes\n          throw new Error('escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React');\n        }\n    }\n  });\n}\n\nfunction createResponseState$1(generateStaticMarkup, identifierPrefix) {\n  var responseState = createResponseState(identifierPrefix, undefined);\n  return {\n    // Keep this in sync with ReactDOMServerFormatConfig\n    bootstrapChunks: responseState.bootstrapChunks,\n    startInlineScript: responseState.startInlineScript,\n    placeholderPrefix: responseState.placeholderPrefix,\n    segmentPrefix: responseState.segmentPrefix,\n    boundaryPrefix: responseState.boundaryPrefix,\n    idPrefix: responseState.idPrefix,\n    nextSuspenseID: responseState.nextSuspenseID,\n    sentCompleteSegmentFunction: responseState.sentCompleteSegmentFunction,\n    sentCompleteBoundaryFunction: responseState.sentCompleteBoundaryFunction,\n    sentClientRenderFunction: responseState.sentClientRenderFunction,\n    // This is an extra field for the legacy renderer\n    generateStaticMarkup: generateStaticMarkup\n  };\n}\nfunction createRootFormatContext() {\n  return {\n    insertionMode: HTML_MODE,\n    // We skip the root mode because we don't want to emit the DOCTYPE in legacy mode.\n    selectedValue: null\n  };\n}\nfunction pushTextInstance$1(target, text, responseState, textEmbedded) {\n  if (responseState.generateStaticMarkup) {\n    target.push(stringToChunk(escapeTextForBrowser(text)));\n    return false;\n  } else {\n    return pushTextInstance(target, text, responseState, textEmbedded);\n  }\n}\nfunction pushSegmentFinale$1(target, responseState, lastPushedText, textEmbedded) {\n  if (responseState.generateStaticMarkup) {\n    return;\n  } else {\n    return pushSegmentFinale(target, responseState, lastPushedText, textEmbedded);\n  }\n}\nfunction writeStartCompletedSuspenseBoundary$1(destination, responseState) {\n  if (responseState.generateStaticMarkup) {\n    // A completed boundary is done and doesn't need a representation in the HTML\n    // if we're not going to be hydrating it.\n    return true;\n  }\n\n  return writeStartCompletedSuspenseBoundary(destination);\n}\nfunction writeStartClientRenderedSuspenseBoundary$1(destination, responseState, // flushing these error arguments are not currently supported in this legacy streaming format.\nerrorDigest, errorMessage, errorComponentStack) {\n  if (responseState.generateStaticMarkup) {\n    // A client rendered boundary is done and doesn't need a representation in the HTML\n    // since we'll never hydrate it. This is arguably an error in static generation.\n    return true;\n  }\n\n  return writeStartClientRenderedSuspenseBoundary(destination, responseState, errorDigest, errorMessage, errorComponentStack);\n}\nfunction writeEndCompletedSuspenseBoundary$1(destination, responseState) {\n  if (responseState.generateStaticMarkup) {\n    return true;\n  }\n\n  return writeEndCompletedSuspenseBoundary(destination);\n}\nfunction writeEndClientRenderedSuspenseBoundary$1(destination, responseState) {\n  if (responseState.generateStaticMarkup) {\n    return true;\n  }\n\n  return writeEndClientRenderedSuspenseBoundary(destination);\n}\n\nvar assign = Object.assign;\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SCOPE_TYPE = Symbol.for('react.scope');\nvar REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');\nvar REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');\nvar REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED = Symbol.for('react.default_value');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\n\nfunction describeClassComponentFrame(ctor, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(ctor, true);\n  }\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n  warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n  Object.freeze(emptyContextObject);\n}\n\nfunction getMaskedContext(type, unmaskedContext) {\n  {\n    var contextTypes = type.contextTypes;\n\n    if (!contextTypes) {\n      return emptyContextObject;\n    }\n\n    var context = {};\n\n    for (var key in contextTypes) {\n      context[key] = unmaskedContext[key];\n    }\n\n    {\n      var name = getComponentNameFromType(type) || 'Unknown';\n      checkPropTypes(contextTypes, context, 'context', name);\n    }\n\n    return context;\n  }\n}\nfunction processChildContext(instance, type, parentContext, childContextTypes) {\n  {\n    // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n    // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n    if (typeof instance.getChildContext !== 'function') {\n      {\n        var componentName = getComponentNameFromType(type) || 'Unknown';\n\n        if (!warnedAboutMissingGetChildContext[componentName]) {\n          warnedAboutMissingGetChildContext[componentName] = true;\n\n          error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n        }\n      }\n\n      return parentContext;\n    }\n\n    var childContext = instance.getChildContext();\n\n    for (var contextKey in childContext) {\n      if (!(contextKey in childContextTypes)) {\n        throw new Error((getComponentNameFromType(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\");\n      }\n    }\n\n    {\n      var name = getComponentNameFromType(type) || 'Unknown';\n      checkPropTypes(childContextTypes, childContext, 'child context', name);\n    }\n\n    return assign({}, parentContext, childContext);\n  }\n}\n\nvar rendererSigil;\n\n{\n  // Use this to detect multiple renderers using the same context\n  rendererSigil = {};\n} // Used to store the parent path of all context overrides in a shared linked list.\n// Forming a reverse tree.\n\n\nvar rootContextSnapshot = null; // We assume that this runtime owns the \"current\" field on all ReactContext instances.\n// This global (actually thread local) state represents what state all those \"current\",\n// fields are currently in.\n\nvar currentActiveSnapshot = null;\n\nfunction popNode(prev) {\n  {\n    prev.context._currentValue2 = prev.parentValue;\n  }\n}\n\nfunction pushNode(next) {\n  {\n    next.context._currentValue2 = next.value;\n  }\n}\n\nfunction popToNearestCommonAncestor(prev, next) {\n  if (prev === next) ; else {\n    popNode(prev);\n    var parentPrev = prev.parent;\n    var parentNext = next.parent;\n\n    if (parentPrev === null) {\n      if (parentNext !== null) {\n        throw new Error('The stacks must reach the root at the same time. This is a bug in React.');\n      }\n    } else {\n      if (parentNext === null) {\n        throw new Error('The stacks must reach the root at the same time. This is a bug in React.');\n      }\n\n      popToNearestCommonAncestor(parentPrev, parentNext);\n    } // On the way back, we push the new ones that weren't common.\n\n\n    pushNode(next);\n  }\n}\n\nfunction popAllPrevious(prev) {\n  popNode(prev);\n  var parentPrev = prev.parent;\n\n  if (parentPrev !== null) {\n    popAllPrevious(parentPrev);\n  }\n}\n\nfunction pushAllNext(next) {\n  var parentNext = next.parent;\n\n  if (parentNext !== null) {\n    pushAllNext(parentNext);\n  }\n\n  pushNode(next);\n}\n\nfunction popPreviousToCommonLevel(prev, next) {\n  popNode(prev);\n  var parentPrev = prev.parent;\n\n  if (parentPrev === null) {\n    throw new Error('The depth must equal at least at zero before reaching the root. This is a bug in React.');\n  }\n\n  if (parentPrev.depth === next.depth) {\n    // We found the same level. Now we just need to find a shared ancestor.\n    popToNearestCommonAncestor(parentPrev, next);\n  } else {\n    // We must still be deeper.\n    popPreviousToCommonLevel(parentPrev, next);\n  }\n}\n\nfunction popNextToCommonLevel(prev, next) {\n  var parentNext = next.parent;\n\n  if (parentNext === null) {\n    throw new Error('The depth must equal at least at zero before reaching the root. This is a bug in React.');\n  }\n\n  if (prev.depth === parentNext.depth) {\n    // We found the same level. Now we just need to find a shared ancestor.\n    popToNearestCommonAncestor(prev, parentNext);\n  } else {\n    // We must still be deeper.\n    popNextToCommonLevel(prev, parentNext);\n  }\n\n  pushNode(next);\n} // Perform context switching to the new snapshot.\n// To make it cheap to read many contexts, while not suspending, we make the switch eagerly by\n// updating all the context's current values. That way reads, always just read the current value.\n// At the cost of updating contexts even if they're never read by this subtree.\n\n\nfunction switchContext(newSnapshot) {\n  // The basic algorithm we need to do is to pop back any contexts that are no longer on the stack.\n  // We also need to update any new contexts that are now on the stack with the deepest value.\n  // The easiest way to update new contexts is to just reapply them in reverse order from the\n  // perspective of the backpointers. To avoid allocating a lot when switching, we use the stack\n  // for that. Therefore this algorithm is recursive.\n  // 1) First we pop which ever snapshot tree was deepest. Popping old contexts as we go.\n  // 2) Then we find the nearest common ancestor from there. Popping old contexts as we go.\n  // 3) Then we reapply new contexts on the way back up the stack.\n  var prev = currentActiveSnapshot;\n  var next = newSnapshot;\n\n  if (prev !== next) {\n    if (prev === null) {\n      // $FlowFixMe: This has to be non-null since it's not equal to prev.\n      pushAllNext(next);\n    } else if (next === null) {\n      popAllPrevious(prev);\n    } else if (prev.depth === next.depth) {\n      popToNearestCommonAncestor(prev, next);\n    } else if (prev.depth > next.depth) {\n      popPreviousToCommonLevel(prev, next);\n    } else {\n      popNextToCommonLevel(prev, next);\n    }\n\n    currentActiveSnapshot = next;\n  }\n}\nfunction pushProvider(context, nextValue) {\n  var prevValue;\n\n  {\n    prevValue = context._currentValue2;\n    context._currentValue2 = nextValue;\n\n    {\n      if (context._currentRenderer2 !== undefined && context._currentRenderer2 !== null && context._currentRenderer2 !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer2 = rendererSigil;\n    }\n  }\n\n  var prevNode = currentActiveSnapshot;\n  var newNode = {\n    parent: prevNode,\n    depth: prevNode === null ? 0 : prevNode.depth + 1,\n    context: context,\n    parentValue: prevValue,\n    value: nextValue\n  };\n  currentActiveSnapshot = newNode;\n  return newNode;\n}\nfunction popProvider(context) {\n  var prevSnapshot = currentActiveSnapshot;\n\n  if (prevSnapshot === null) {\n    throw new Error('Tried to pop a Context at the root of the app. This is a bug in React.');\n  }\n\n  {\n    if (prevSnapshot.context !== context) {\n      error('The parent context is not the expected context. This is probably a bug in React.');\n    }\n  }\n\n  {\n    var _value = prevSnapshot.parentValue;\n\n    if (_value === REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED) {\n      prevSnapshot.context._currentValue2 = prevSnapshot.context._defaultValue;\n    } else {\n      prevSnapshot.context._currentValue2 = _value;\n    }\n\n    {\n      if (context._currentRenderer2 !== undefined && context._currentRenderer2 !== null && context._currentRenderer2 !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer2 = rendererSigil;\n    }\n  }\n\n  return currentActiveSnapshot = prevSnapshot.parent;\n}\nfunction getActiveContext() {\n  return currentActiveSnapshot;\n}\nfunction readContext(context) {\n  var value =  context._currentValue2;\n  return value;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n  return key._reactInternals;\n}\nfunction set(key, value) {\n  key._reactInternals = value;\n}\n\nvar didWarnAboutNoopUpdateForComponent = {};\nvar didWarnAboutDeprecatedWillMount = {};\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n  didWarnAboutUninitializedState = new Set();\n  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n  didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n  didWarnAboutDirectlyAssigningPropsToState = new Set();\n  didWarnAboutUndefinedDerivedState = new Set();\n  didWarnAboutContextTypeAndContextTypes = new Set();\n  didWarnAboutInvalidateContextType = new Set();\n  var didWarnOnInvalidCallback = new Set();\n\n  warnOnInvalidCallback = function (callback, callerName) {\n    if (callback === null || typeof callback === 'function') {\n      return;\n    }\n\n    var key = callerName + '_' + callback;\n\n    if (!didWarnOnInvalidCallback.has(key)) {\n      didWarnOnInvalidCallback.add(key);\n\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  };\n\n  warnOnUndefinedDerivedState = function (type, partialState) {\n    if (partialState === undefined) {\n      var componentName = getComponentNameFromType(type) || 'Component';\n\n      if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n        didWarnAboutUndefinedDerivedState.add(componentName);\n\n        error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n      }\n    }\n  };\n}\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && getComponentNameFromType(_constructor) || 'ReactClass';\n    var warningKey = componentName + '.' + callerName;\n\n    if (didWarnAboutNoopUpdateForComponent[warningKey]) {\n      return;\n    }\n\n    error('%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\\n\\nPlease check the code for the %s component.', callerName, callerName, componentName);\n\n    didWarnAboutNoopUpdateForComponent[warningKey] = true;\n  }\n}\n\nvar classComponentUpdater = {\n  isMounted: function (inst) {\n    return false;\n  },\n  enqueueSetState: function (inst, payload, callback) {\n    var internals = get(inst);\n\n    if (internals.queue === null) {\n      warnNoop(inst, 'setState');\n    } else {\n      internals.queue.push(payload);\n\n      {\n        if (callback !== undefined && callback !== null) {\n          warnOnInvalidCallback(callback, 'setState');\n        }\n      }\n    }\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    var internals = get(inst);\n    internals.replace = true;\n    internals.queue = [payload];\n\n    {\n      if (callback !== undefined && callback !== null) {\n        warnOnInvalidCallback(callback, 'setState');\n      }\n    }\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    var internals = get(inst);\n\n    if (internals.queue === null) {\n      warnNoop(inst, 'forceUpdate');\n    } else {\n      {\n        if (callback !== undefined && callback !== null) {\n          warnOnInvalidCallback(callback, 'setState');\n        }\n      }\n    }\n  }\n};\n\nfunction applyDerivedStateFromProps(instance, ctor, getDerivedStateFromProps, prevState, nextProps) {\n  var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n  {\n    warnOnUndefinedDerivedState(ctor, partialState);\n  } // Merge the partial state and the previous state.\n\n\n  var newState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);\n  return newState;\n}\n\nfunction constructClassInstance(ctor, props, maskedLegacyContext) {\n  var context = emptyContextObject;\n  var contextType = ctor.contextType;\n\n  {\n    if ('contextType' in ctor) {\n      var isValid = // Allow null for conditional declaration\n      contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n      if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n        didWarnAboutInvalidateContextType.add(ctor);\n        var addendum = '';\n\n        if (contextType === undefined) {\n          addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n        } else if (typeof contextType !== 'object') {\n          addendum = ' However, it is set to a ' + typeof contextType + '.';\n        } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n          addendum = ' Did you accidentally pass the Context.Provider instead?';\n        } else if (contextType._context !== undefined) {\n          // <Context.Consumer>\n          addendum = ' Did you accidentally pass the Context.Consumer instead?';\n        } else {\n          addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n        }\n\n        error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);\n      }\n    }\n  }\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    context = readContext(contextType);\n  } else {\n    context = maskedLegacyContext;\n  }\n\n  var instance = new ctor(props, context);\n\n  {\n    if (typeof ctor.getDerivedStateFromProps === 'function' && (instance.state === null || instance.state === undefined)) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutUninitializedState.has(componentName)) {\n        didWarnAboutUninitializedState.add(componentName);\n\n        error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n      }\n    } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n    // Warn about these lifecycles if they are present.\n    // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n    if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n      var foundWillMountName = null;\n      var foundWillReceivePropsName = null;\n      var foundWillUpdateName = null;\n\n      if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        foundWillMountName = 'componentWillMount';\n      } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        foundWillMountName = 'UNSAFE_componentWillMount';\n      }\n\n      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n        foundWillReceivePropsName = 'componentWillReceiveProps';\n      } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n        foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n      }\n\n      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n        foundWillUpdateName = 'componentWillUpdate';\n      } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n      }\n\n      if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n        var _componentName = getComponentNameFromType(ctor) || 'Component';\n\n        var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n        if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n          didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n          error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n  \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n  \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n  \" + foundWillUpdateName : '');\n        }\n      }\n    }\n  }\n\n  return instance;\n}\n\nfunction checkClassInstance(instance, ctor, newProps) {\n  {\n    var name = getComponentNameFromType(ctor) || 'Component';\n    var renderPresent = instance.render;\n\n    if (!renderPresent) {\n      if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n      } else {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n      }\n    }\n\n    if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n      error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n    }\n\n    if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n    }\n\n    if (instance.propTypes) {\n      error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n    }\n\n    if (instance.contextType) {\n      error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n    }\n\n    {\n      if (instance.contextTypes) {\n        error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n      }\n\n      if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n        didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n        error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n      }\n    }\n\n    if (typeof instance.componentShouldUpdate === 'function') {\n      error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n    }\n\n    if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n      error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');\n    }\n\n    if (typeof instance.componentDidUnmount === 'function') {\n      error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n    }\n\n    if (typeof instance.componentDidReceiveProps === 'function') {\n      error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n    }\n\n    if (typeof instance.componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n    }\n\n    if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n    }\n\n    var hasMutatedProps = instance.props !== newProps;\n\n    if (instance.props !== undefined && hasMutatedProps) {\n      error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n    }\n\n    if (instance.defaultProps) {\n      error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n      didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n      error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));\n    }\n\n    if (typeof instance.getDerivedStateFromProps === 'function') {\n      error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof instance.getDerivedStateFromError === 'function') {\n      error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n      error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n    }\n\n    var _state = instance.state;\n\n    if (_state && (typeof _state !== 'object' || isArray(_state))) {\n      error('%s.state: must be set to an object or null', name);\n    }\n\n    if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n      error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n    }\n  }\n}\n\nfunction callComponentWillMount(type, instance) {\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillMount === 'function') {\n    {\n      if ( instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        var componentName = getComponentNameFromType(type) || 'Unknown';\n\n        if (!didWarnAboutDeprecatedWillMount[componentName]) {\n          warn( // keep this warning in sync with ReactStrictModeWarning.js\n          'componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code from componentWillMount to componentDidMount (preferred in most cases) ' + 'or the constructor.\\n' + '\\nPlease update the following components: %s', componentName);\n\n          didWarnAboutDeprecatedWillMount[componentName] = true;\n        }\n      }\n    }\n\n    instance.componentWillMount();\n  }\n\n  if (typeof instance.UNSAFE_componentWillMount === 'function') {\n    instance.UNSAFE_componentWillMount();\n  }\n\n  if (oldState !== instance.state) {\n    {\n      error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentNameFromType(type) || 'Component');\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n}\n\nfunction processUpdateQueue(internalInstance, inst, props, maskedLegacyContext) {\n  if (internalInstance.queue !== null && internalInstance.queue.length > 0) {\n    var oldQueue = internalInstance.queue;\n    var oldReplace = internalInstance.replace;\n    internalInstance.queue = null;\n    internalInstance.replace = false;\n\n    if (oldReplace && oldQueue.length === 1) {\n      inst.state = oldQueue[0];\n    } else {\n      var nextState = oldReplace ? oldQueue[0] : inst.state;\n      var dontMutate = true;\n\n      for (var i = oldReplace ? 1 : 0; i < oldQueue.length; i++) {\n        var partial = oldQueue[i];\n        var partialState = typeof partial === 'function' ? partial.call(inst, nextState, props, maskedLegacyContext) : partial;\n\n        if (partialState != null) {\n          if (dontMutate) {\n            dontMutate = false;\n            nextState = assign({}, nextState, partialState);\n          } else {\n            assign(nextState, partialState);\n          }\n        }\n      }\n\n      inst.state = nextState;\n    }\n  } else {\n    internalInstance.queue = null;\n  }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(instance, ctor, newProps, maskedLegacyContext) {\n  {\n    checkClassInstance(instance, ctor, newProps);\n  }\n\n  var initialState = instance.state !== undefined ? instance.state : null;\n  instance.updater = classComponentUpdater;\n  instance.props = newProps;\n  instance.state = initialState; // We don't bother initializing the refs object on the server, since we're not going to resolve them anyway.\n  // The internal instance will be used to manage updates that happen during this mount.\n\n  var internalInstance = {\n    queue: [],\n    replace: false\n  };\n  set(instance, internalInstance);\n  var contextType = ctor.contextType;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    instance.context = readContext(contextType);\n  } else {\n    instance.context = maskedLegacyContext;\n  }\n\n  {\n    if (instance.state === newProps) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n        didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n        error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n      }\n    }\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    instance.state = applyDerivedStateFromProps(instance, ctor, getDerivedStateFromProps, initialState, newProps);\n  } // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n  if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n    callComponentWillMount(ctor, instance); // If we had additional state updates during this life-cycle, let's\n    // process them now.\n\n    processUpdateQueue(internalInstance, instance, newProps, maskedLegacyContext);\n  }\n}\n\n// Ids are base 32 strings whose binary representation corresponds to the\n// position of a node in a tree.\n// Every time the tree forks into multiple children, we add additional bits to\n// the left of the sequence that represent the position of the child within the\n// current level of children.\n//\n//      00101       00010001011010101\n//      ╰─┬─╯       ╰───────┬───────╯\n//   Fork 5 of 20       Parent id\n//\n// The leading 0s are important. In the above example, you only need 3 bits to\n// represent slot 5. However, you need 5 bits to represent all the forks at\n// the current level, so we must account for the empty bits at the end.\n//\n// For this same reason, slots are 1-indexed instead of 0-indexed. Otherwise,\n// the zeroth id at a level would be indistinguishable from its parent.\n//\n// If a node has only one child, and does not materialize an id (i.e. does not\n// contain a useId hook), then we don't need to allocate any space in the\n// sequence. It's treated as a transparent indirection. For example, these two\n// trees produce the same ids:\n//\n// <>                          <>\n//   <Indirection>               <A />\n//     <A />                     <B />\n//   </Indirection>            </>\n//   <B />\n// </>\n//\n// However, we cannot skip any node that materializes an id. Otherwise, a parent\n// id that does not fork would be indistinguishable from its child id. For\n// example, this tree does not fork, but the parent and child must have\n// different ids.\n//\n// <Parent>\n//   <Child />\n// </Parent>\n//\n// To handle this scenario, every time we materialize an id, we allocate a\n// new level with a single slot. You can think of this as a fork with only one\n// prong, or an array of children with length 1.\n//\n// It's possible for the size of the sequence to exceed 32 bits, the max\n// size for bitwise operations. When this happens, we make more room by\n// converting the right part of the id to a string and storing it in an overflow\n// variable. We use a base 32 string representation, because 32 is the largest\n// power of 2 that is supported by toString(). We want the base to be large so\n// that the resulting ids are compact, and we want the base to be a power of 2\n// because every log2(base) bits corresponds to a single character, i.e. every\n// log2(32) = 5 bits. That means we can lop bits off the end 5 at a time without\n// affecting the final result.\nvar emptyTreeContext = {\n  id: 1,\n  overflow: ''\n};\nfunction getTreeId(context) {\n  var overflow = context.overflow;\n  var idWithLeadingBit = context.id;\n  var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);\n  return id.toString(32) + overflow;\n}\nfunction pushTreeContext(baseContext, totalChildren, index) {\n  var baseIdWithLeadingBit = baseContext.id;\n  var baseOverflow = baseContext.overflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part\n  // of the id; we use it to account for leading 0s.\n\n  var baseLength = getBitLength(baseIdWithLeadingBit) - 1;\n  var baseId = baseIdWithLeadingBit & ~(1 << baseLength);\n  var slot = index + 1;\n  var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into\n  // consideration the leading 1 we use to mark the end of the sequence.\n\n  if (length > 30) {\n    // We overflowed the bitwise-safe range. Fall back to slower algorithm.\n    // This branch assumes the length of the base id is greater than 5; it won't\n    // work for smaller ids, because you need 5 bits per character.\n    //\n    // We encode the id in multiple steps: first the base id, then the\n    // remaining digits.\n    //\n    // Each 5 bit sequence corresponds to a single base 32 character. So for\n    // example, if the current id is 23 bits long, we can convert 20 of those\n    // bits into a string of 4 characters, with 3 bits left over.\n    //\n    // First calculate how many bits in the base id represent a complete\n    // sequence of characters.\n    var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.\n\n    var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.\n\n    var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.\n\n    var restOfBaseId = baseId >> numberOfOverflowBits;\n    var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because\n    // we made more room, this time it won't overflow.\n\n    var restOfLength = getBitLength(totalChildren) + restOfBaseLength;\n    var restOfNewBits = slot << restOfBaseLength;\n    var id = restOfNewBits | restOfBaseId;\n    var overflow = newOverflow + baseOverflow;\n    return {\n      id: 1 << restOfLength | id,\n      overflow: overflow\n    };\n  } else {\n    // Normal path\n    var newBits = slot << baseLength;\n\n    var _id = newBits | baseId;\n\n    var _overflow = baseOverflow;\n    return {\n      id: 1 << length | _id,\n      overflow: _overflow\n    };\n  }\n}\n\nfunction getBitLength(number) {\n  return 32 - clz32(number);\n}\n\nfunction getLeadingBit(id) {\n  return 1 << getBitLength(id) - 1;\n} // TODO: Math.clz32 is supported in Node 12+. Maybe we can drop the fallback.\n\n\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.\n// Based on:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nfunction clz32Fallback(x) {\n  var asUint = x >>> 0;\n\n  if (asUint === 0) {\n    return 32;\n  }\n\n  return 31 - (log(asUint) / LN2 | 0) | 0;\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n  ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar currentlyRenderingComponent = null;\nvar currentlyRenderingTask = null;\nvar firstWorkInProgressHook = null;\nvar workInProgressHook = null; // Whether the work-in-progress hook is a re-rendered hook\n\nvar isReRender = false; // Whether an update was scheduled during the currently executing render pass.\n\nvar didScheduleRenderPhaseUpdate = false; // Counts the number of useId hooks in this component\n\nvar localIdCounter = 0; // Lazily created map of render-phase updates\n\nvar renderPhaseUpdates = null; // Counter to prevent infinite loops.\n\nvar numberOfReRenders = 0;\nvar RE_RENDER_LIMIT = 25;\nvar isInHookUserCodeInDev = false; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev;\n\nfunction resolveCurrentlyRenderingComponent() {\n  if (currentlyRenderingComponent === null) {\n    throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n  }\n\n  {\n    if (isInHookUserCodeInDev) {\n      error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');\n    }\n  }\n\n  return currentlyRenderingComponent;\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (prevDeps === null) {\n    {\n      error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n    }\n\n    return false;\n  }\n\n  {\n    // Don't bother comparing lengths in prod because these arrays should be\n    // passed inline.\n    if (nextDeps.length !== prevDeps.length) {\n      error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + nextDeps.join(', ') + \"]\", \"[\" + prevDeps.join(', ') + \"]\");\n    }\n  }\n\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n    if (objectIs(nextDeps[i], prevDeps[i])) {\n      continue;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction createHook() {\n  if (numberOfReRenders > 0) {\n    throw new Error('Rendered more hooks than during the previous render');\n  }\n\n  return {\n    memoizedState: null,\n    queue: null,\n    next: null\n  };\n}\n\nfunction createWorkInProgressHook() {\n  if (workInProgressHook === null) {\n    // This is the first hook in the list\n    if (firstWorkInProgressHook === null) {\n      isReRender = false;\n      firstWorkInProgressHook = workInProgressHook = createHook();\n    } else {\n      // There's already a work-in-progress. Reuse it.\n      isReRender = true;\n      workInProgressHook = firstWorkInProgressHook;\n    }\n  } else {\n    if (workInProgressHook.next === null) {\n      isReRender = false; // Append to the end of the list\n\n      workInProgressHook = workInProgressHook.next = createHook();\n    } else {\n      // There's already a work-in-progress. Reuse it.\n      isReRender = true;\n      workInProgressHook = workInProgressHook.next;\n    }\n  }\n\n  return workInProgressHook;\n}\n\nfunction prepareToUseHooks(task, componentIdentity) {\n  currentlyRenderingComponent = componentIdentity;\n  currentlyRenderingTask = task;\n\n  {\n    isInHookUserCodeInDev = false;\n  } // The following should have already been reset\n  // didScheduleRenderPhaseUpdate = false;\n  // localIdCounter = 0;\n  // firstWorkInProgressHook = null;\n  // numberOfReRenders = 0;\n  // renderPhaseUpdates = null;\n  // workInProgressHook = null;\n\n\n  localIdCounter = 0;\n}\nfunction finishHooks(Component, props, children, refOrContext) {\n  // This must be called after every function component to prevent hooks from\n  // being used in classes.\n  while (didScheduleRenderPhaseUpdate) {\n    // Updates were scheduled during the render phase. They are stored in\n    // the `renderPhaseUpdates` map. Call the component again, reusing the\n    // work-in-progress hooks and applying the additional updates on top. Keep\n    // restarting until no more updates are scheduled.\n    didScheduleRenderPhaseUpdate = false;\n    localIdCounter = 0;\n    numberOfReRenders += 1; // Start over from the beginning of the list\n\n    workInProgressHook = null;\n    children = Component(props, refOrContext);\n  }\n\n  resetHooksState();\n  return children;\n}\nfunction checkDidRenderIdHook() {\n  // This should be called immediately after every finishHooks call.\n  // Conceptually, it's part of the return value of finishHooks; it's only a\n  // separate function to avoid using an array tuple.\n  var didRenderIdHook = localIdCounter !== 0;\n  return didRenderIdHook;\n} // Reset the internal hooks state if an error occurs while rendering a component\n\nfunction resetHooksState() {\n  {\n    isInHookUserCodeInDev = false;\n  }\n\n  currentlyRenderingComponent = null;\n  currentlyRenderingTask = null;\n  didScheduleRenderPhaseUpdate = false;\n  firstWorkInProgressHook = null;\n  numberOfReRenders = 0;\n  renderPhaseUpdates = null;\n  workInProgressHook = null;\n}\n\nfunction readContext$1(context) {\n  {\n    if (isInHookUserCodeInDev) {\n      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n    }\n  }\n\n  return readContext(context);\n}\n\nfunction useContext(context) {\n  {\n    currentHookNameInDev = 'useContext';\n  }\n\n  resolveCurrentlyRenderingComponent();\n  return readContext(context);\n}\n\nfunction basicStateReducer(state, action) {\n  // $FlowFixMe: Flow doesn't like mixed types\n  return typeof action === 'function' ? action(state) : action;\n}\n\nfunction useState(initialState) {\n  {\n    currentHookNameInDev = 'useState';\n  }\n\n  return useReducer(basicStateReducer, // useReducer has a special case to support lazy useState initializers\n  initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  {\n    if (reducer !== basicStateReducer) {\n      currentHookNameInDev = 'useReducer';\n    }\n  }\n\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n\n  if (isReRender) {\n    // This is a re-render. Apply the new render phase updates to the previous\n    // current hook.\n    var queue = workInProgressHook.queue;\n    var dispatch = queue.dispatch;\n\n    if (renderPhaseUpdates !== null) {\n      // Render phase updates are stored in a map of queue -> linked list\n      var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n      if (firstRenderPhaseUpdate !== undefined) {\n        renderPhaseUpdates.delete(queue);\n        var newState = workInProgressHook.memoizedState;\n        var update = firstRenderPhaseUpdate;\n\n        do {\n          // Process this render phase update. We don't have to check the\n          // priority because it will always be the same as the current\n          // render's.\n          var action = update.action;\n\n          {\n            isInHookUserCodeInDev = true;\n          }\n\n          newState = reducer(newState, action);\n\n          {\n            isInHookUserCodeInDev = false;\n          }\n\n          update = update.next;\n        } while (update !== null);\n\n        workInProgressHook.memoizedState = newState;\n        return [newState, dispatch];\n      }\n    }\n\n    return [workInProgressHook.memoizedState, dispatch];\n  } else {\n    {\n      isInHookUserCodeInDev = true;\n    }\n\n    var initialState;\n\n    if (reducer === basicStateReducer) {\n      // Special case for `useState`.\n      initialState = typeof initialArg === 'function' ? initialArg() : initialArg;\n    } else {\n      initialState = init !== undefined ? init(initialArg) : initialArg;\n    }\n\n    {\n      isInHookUserCodeInDev = false;\n    }\n\n    workInProgressHook.memoizedState = initialState;\n\n    var _queue = workInProgressHook.queue = {\n      last: null,\n      dispatch: null\n    };\n\n    var _dispatch = _queue.dispatch = dispatchAction.bind(null, currentlyRenderingComponent, _queue);\n\n    return [workInProgressHook.memoizedState, _dispatch];\n  }\n}\n\nfunction useMemo(nextCreate, deps) {\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n\n  if (workInProgressHook !== null) {\n    var prevState = workInProgressHook.memoizedState;\n\n    if (prevState !== null) {\n      if (nextDeps !== null) {\n        var prevDeps = prevState[1];\n\n        if (areHookInputsEqual(nextDeps, prevDeps)) {\n          return prevState[0];\n        }\n      }\n    }\n  }\n\n  {\n    isInHookUserCodeInDev = true;\n  }\n\n  var nextValue = nextCreate();\n\n  {\n    isInHookUserCodeInDev = false;\n  }\n\n  workInProgressHook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction useRef(initialValue) {\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n  var previousRef = workInProgressHook.memoizedState;\n\n  if (previousRef === null) {\n    var ref = {\n      current: initialValue\n    };\n\n    {\n      Object.seal(ref);\n    }\n\n    workInProgressHook.memoizedState = ref;\n    return ref;\n  } else {\n    return previousRef;\n  }\n}\n\nfunction useLayoutEffect(create, inputs) {\n  {\n    currentHookNameInDev = 'useLayoutEffect';\n\n    error('useLayoutEffect does nothing on the server, because its effect cannot ' + \"be encoded into the server renderer's output format. This will lead \" + 'to a mismatch between the initial, non-hydrated UI and the intended ' + 'UI. To avoid this, useLayoutEffect should only be used in ' + 'components that render exclusively on the client. ' + 'See https://reactjs.org/link/uselayouteffect-ssr for common fixes.');\n  }\n}\n\nfunction dispatchAction(componentIdentity, queue, action) {\n  if (numberOfReRenders >= RE_RENDER_LIMIT) {\n    throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');\n  }\n\n  if (componentIdentity === currentlyRenderingComponent) {\n    // This is a render phase update. Stash it in a lazily-created map of\n    // queue -> linked list of updates. After this render pass, we'll restart\n    // and apply the stashed updates on top of the work-in-progress hook.\n    didScheduleRenderPhaseUpdate = true;\n    var update = {\n      action: action,\n      next: null\n    };\n\n    if (renderPhaseUpdates === null) {\n      renderPhaseUpdates = new Map();\n    }\n\n    var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n    if (firstRenderPhaseUpdate === undefined) {\n      renderPhaseUpdates.set(queue, update);\n    } else {\n      // Append the update to the end of the list.\n      var lastRenderPhaseUpdate = firstRenderPhaseUpdate;\n\n      while (lastRenderPhaseUpdate.next !== null) {\n        lastRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n      }\n\n      lastRenderPhaseUpdate.next = update;\n    }\n  }\n}\n\nfunction useCallback(callback, deps) {\n  return useMemo(function () {\n    return callback;\n  }, deps);\n} // TODO Decide on how to implement this hook for server rendering.\n// If a mutation occurs during render, consider triggering a Suspense boundary\n// and falling back to client rendering.\n\nfunction useMutableSource(source, getSnapshot, subscribe) {\n  resolveCurrentlyRenderingComponent();\n  return getSnapshot(source._source);\n}\n\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  if (getServerSnapshot === undefined) {\n    throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n  }\n\n  return getServerSnapshot();\n}\n\nfunction useDeferredValue(value) {\n  resolveCurrentlyRenderingComponent();\n  return value;\n}\n\nfunction unsupportedStartTransition() {\n  throw new Error('startTransition cannot be called during server rendering.');\n}\n\nfunction useTransition() {\n  resolveCurrentlyRenderingComponent();\n  return [false, unsupportedStartTransition];\n}\n\nfunction useId() {\n  var task = currentlyRenderingTask;\n  var treeId = getTreeId(task.treeContext);\n  var responseState = currentResponseState;\n\n  if (responseState === null) {\n    throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component.');\n  }\n\n  var localId = localIdCounter++;\n  return makeId(responseState, treeId, localId);\n}\n\nfunction noop() {}\n\nvar Dispatcher = {\n  readContext: readContext$1,\n  useContext: useContext,\n  useMemo: useMemo,\n  useReducer: useReducer,\n  useRef: useRef,\n  useState: useState,\n  useInsertionEffect: noop,\n  useLayoutEffect: useLayoutEffect,\n  useCallback: useCallback,\n  // useImperativeHandle is not run in the server environment\n  useImperativeHandle: noop,\n  // Effects are not run in the server environment.\n  useEffect: noop,\n  // Debugging effect\n  useDebugValue: noop,\n  useDeferredValue: useDeferredValue,\n  useTransition: useTransition,\n  useId: useId,\n  // Subscriptions are not setup in a server environment.\n  useMutableSource: useMutableSource,\n  useSyncExternalStore: useSyncExternalStore\n};\n\nvar currentResponseState = null;\nfunction setCurrentResponseState(responseState) {\n  currentResponseState = responseState;\n}\n\nfunction getStackByComponentStackNode(componentStack) {\n  try {\n    var info = '';\n    var node = componentStack;\n\n    do {\n      switch (node.tag) {\n        case 0:\n          info += describeBuiltInComponentFrame(node.type, null, null);\n          break;\n\n        case 1:\n          info += describeFunctionComponentFrame(node.type, null, null);\n          break;\n\n        case 2:\n          info += describeClassComponentFrame(node.type, null, null);\n          break;\n      }\n\n      node = node.parent;\n    } while (node);\n\n    return info;\n  } catch (x) {\n    return '\\nError generating stack: ' + x.message + '\\n' + x.stack;\n  }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\nvar PENDING = 0;\nvar COMPLETED = 1;\nvar FLUSHED = 2;\nvar ABORTED = 3;\nvar ERRORED = 4;\nvar OPEN = 0;\nvar CLOSING = 1;\nvar CLOSED = 2;\n// This is a default heuristic for how to split up the HTML content into progressive\n// loading. Our goal is to be able to display additional new content about every 500ms.\n// Faster than that is unnecessary and should be throttled on the client. It also\n// adds unnecessary overhead to do more splits. We don't know if it's a higher or lower\n// end device but higher end suffer less from the overhead than lower end does from\n// not getting small enough pieces. We error on the side of low end.\n// We base this on low end 3G speeds which is about 500kbits per second. We assume\n// that there can be a reasonable drop off from max bandwidth which leaves you with\n// as little as 80%. We can receive half of that each 500ms - at best. In practice,\n// a little bandwidth is lost to processing and contention - e.g. CSS and images that\n// are downloaded along with the main content. So we estimate about half of that to be\n// the lower end throughput. In other words, we expect that you can at least show\n// about 12.5kb of content per 500ms. Not counting starting latency for the first\n// paint.\n// 500 * 1024 / 8 * .8 * 0.5 / 2\nvar DEFAULT_PROGRESSIVE_CHUNK_SIZE = 12800;\n\nfunction defaultErrorHandler(error) {\n  console['error'](error); // Don't transform to our wrapper\n\n  return null;\n}\n\nfunction noop$1() {}\n\nfunction createRequest(children, responseState, rootFormatContext, progressiveChunkSize, onError, onAllReady, onShellReady, onShellError, onFatalError) {\n  var pingedTasks = [];\n  var abortSet = new Set();\n  var request = {\n    destination: null,\n    responseState: responseState,\n    progressiveChunkSize: progressiveChunkSize === undefined ? DEFAULT_PROGRESSIVE_CHUNK_SIZE : progressiveChunkSize,\n    status: OPEN,\n    fatalError: null,\n    nextSegmentId: 0,\n    allPendingTasks: 0,\n    pendingRootTasks: 0,\n    completedRootSegment: null,\n    abortableTasks: abortSet,\n    pingedTasks: pingedTasks,\n    clientRenderedBoundaries: [],\n    completedBoundaries: [],\n    partialBoundaries: [],\n    onError: onError === undefined ? defaultErrorHandler : onError,\n    onAllReady: onAllReady === undefined ? noop$1 : onAllReady,\n    onShellReady: onShellReady === undefined ? noop$1 : onShellReady,\n    onShellError: onShellError === undefined ? noop$1 : onShellError,\n    onFatalError: onFatalError === undefined ? noop$1 : onFatalError\n  }; // This segment represents the root fallback.\n\n  var rootSegment = createPendingSegment(request, 0, null, rootFormatContext, // Root segments are never embedded in Text on either edge\n  false, false); // There is no parent so conceptually, we're unblocked to flush this segment.\n\n  rootSegment.parentFlushed = true;\n  var rootTask = createTask(request, children, null, rootSegment, abortSet, emptyContextObject, rootContextSnapshot, emptyTreeContext);\n  pingedTasks.push(rootTask);\n  return request;\n}\n\nfunction pingTask(request, task) {\n  var pingedTasks = request.pingedTasks;\n  pingedTasks.push(task);\n\n  if (pingedTasks.length === 1) {\n    scheduleWork(function () {\n      return performWork(request);\n    });\n  }\n}\n\nfunction createSuspenseBoundary(request, fallbackAbortableTasks) {\n  return {\n    id: UNINITIALIZED_SUSPENSE_BOUNDARY_ID,\n    rootSegmentID: -1,\n    parentFlushed: false,\n    pendingTasks: 0,\n    forceClientRender: false,\n    completedSegments: [],\n    byteSize: 0,\n    fallbackAbortableTasks: fallbackAbortableTasks,\n    errorDigest: null\n  };\n}\n\nfunction createTask(request, node, blockedBoundary, blockedSegment, abortSet, legacyContext, context, treeContext) {\n  request.allPendingTasks++;\n\n  if (blockedBoundary === null) {\n    request.pendingRootTasks++;\n  } else {\n    blockedBoundary.pendingTasks++;\n  }\n\n  var task = {\n    node: node,\n    ping: function () {\n      return pingTask(request, task);\n    },\n    blockedBoundary: blockedBoundary,\n    blockedSegment: blockedSegment,\n    abortSet: abortSet,\n    legacyContext: legacyContext,\n    context: context,\n    treeContext: treeContext\n  };\n\n  {\n    task.componentStack = null;\n  }\n\n  abortSet.add(task);\n  return task;\n}\n\nfunction createPendingSegment(request, index, boundary, formatContext, lastPushedText, textEmbedded) {\n  return {\n    status: PENDING,\n    id: -1,\n    // lazily assigned later\n    index: index,\n    parentFlushed: false,\n    chunks: [],\n    children: [],\n    formatContext: formatContext,\n    boundary: boundary,\n    lastPushedText: lastPushedText,\n    textEmbedded: textEmbedded\n  };\n} // DEV-only global reference to the currently executing task\n\n\nvar currentTaskInDEV = null;\n\nfunction getCurrentStackInDEV() {\n  {\n    if (currentTaskInDEV === null || currentTaskInDEV.componentStack === null) {\n      return '';\n    }\n\n    return getStackByComponentStackNode(currentTaskInDEV.componentStack);\n  }\n}\n\nfunction pushBuiltInComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 0,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction pushFunctionComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 1,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction pushClassComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 2,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction popComponentStackInDEV(task) {\n  {\n    if (task.componentStack === null) {\n      error('Unexpectedly popped too many stack frames. This is a bug in React.');\n    } else {\n      task.componentStack = task.componentStack.parent;\n    }\n  }\n} // stash the component stack of an unwinding error until it is processed\n\n\nvar lastBoundaryErrorComponentStackDev = null;\n\nfunction captureBoundaryErrorDetailsDev(boundary, error) {\n  {\n    var errorMessage;\n\n    if (typeof error === 'string') {\n      errorMessage = error;\n    } else if (error && typeof error.message === 'string') {\n      errorMessage = error.message;\n    } else {\n      // eslint-disable-next-line react-internal/safe-string-coercion\n      errorMessage = String(error);\n    }\n\n    var errorComponentStack = lastBoundaryErrorComponentStackDev || getCurrentStackInDEV();\n    lastBoundaryErrorComponentStackDev = null;\n    boundary.errorMessage = errorMessage;\n    boundary.errorComponentStack = errorComponentStack;\n  }\n}\n\nfunction logRecoverableError(request, error) {\n  // If this callback errors, we intentionally let that error bubble up to become a fatal error\n  // so that someone fixes the error reporting instead of hiding it.\n  var errorDigest = request.onError(error);\n\n  if (errorDigest != null && typeof errorDigest !== 'string') {\n    // eslint-disable-next-line react-internal/prod-error-codes\n    throw new Error(\"onError returned something with a type other than \\\"string\\\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \\\"\" + typeof errorDigest + \"\\\" instead\");\n  }\n\n  return errorDigest;\n}\n\nfunction fatalError(request, error) {\n  // This is called outside error handling code such as if the root errors outside\n  // a suspense boundary or if the root suspense boundary's fallback errors.\n  // It's also called if React itself or its host configs errors.\n  var onShellError = request.onShellError;\n  onShellError(error);\n  var onFatalError = request.onFatalError;\n  onFatalError(error);\n\n  if (request.destination !== null) {\n    request.status = CLOSED;\n    closeWithError(request.destination, error);\n  } else {\n    request.status = CLOSING;\n    request.fatalError = error;\n  }\n}\n\nfunction renderSuspenseBoundary(request, task, props) {\n  pushBuiltInComponentStackInDEV(task, 'Suspense');\n  var parentBoundary = task.blockedBoundary;\n  var parentSegment = task.blockedSegment; // Each time we enter a suspense boundary, we split out into a new segment for\n  // the fallback so that we can later replace that segment with the content.\n  // This also lets us split out the main content even if it doesn't suspend,\n  // in case it ends up generating a large subtree of content.\n\n  var fallback = props.fallback;\n  var content = props.children;\n  var fallbackAbortSet = new Set();\n  var newBoundary = createSuspenseBoundary(request, fallbackAbortSet);\n  var insertionIndex = parentSegment.chunks.length; // The children of the boundary segment is actually the fallback.\n\n  var boundarySegment = createPendingSegment(request, insertionIndex, newBoundary, parentSegment.formatContext, // boundaries never require text embedding at their edges because comment nodes bound them\n  false, false);\n  parentSegment.children.push(boundarySegment); // The parentSegment has a child Segment at this index so we reset the lastPushedText marker on the parent\n\n  parentSegment.lastPushedText = false; // This segment is the actual child content. We can start rendering that immediately.\n\n  var contentRootSegment = createPendingSegment(request, 0, null, parentSegment.formatContext, // boundaries never require text embedding at their edges because comment nodes bound them\n  false, false); // We mark the root segment as having its parent flushed. It's not really flushed but there is\n  // no parent segment so there's nothing to wait on.\n\n  contentRootSegment.parentFlushed = true; // Currently this is running synchronously. We could instead schedule this to pingedTasks.\n  // I suspect that there might be some efficiency benefits from not creating the suspended task\n  // and instead just using the stack if possible.\n  // TODO: Call this directly instead of messing with saving and restoring contexts.\n  // We can reuse the current context and task to render the content immediately without\n  // context switching. We just need to temporarily switch which boundary and which segment\n  // we're writing to. If something suspends, it'll spawn new suspended task with that context.\n\n  task.blockedBoundary = newBoundary;\n  task.blockedSegment = contentRootSegment;\n\n  try {\n    // We use the safe form because we don't handle suspending here. Only error handling.\n    renderNode(request, task, content);\n    pushSegmentFinale$1(contentRootSegment.chunks, request.responseState, contentRootSegment.lastPushedText, contentRootSegment.textEmbedded);\n    contentRootSegment.status = COMPLETED;\n    queueCompletedSegment(newBoundary, contentRootSegment);\n\n    if (newBoundary.pendingTasks === 0) {\n      // This must have been the last segment we were waiting on. This boundary is now complete.\n      // Therefore we won't need the fallback. We early return so that we don't have to create\n      // the fallback.\n      popComponentStackInDEV(task);\n      return;\n    }\n  } catch (error) {\n    contentRootSegment.status = ERRORED;\n    newBoundary.forceClientRender = true;\n    newBoundary.errorDigest = logRecoverableError(request, error);\n\n    {\n      captureBoundaryErrorDetailsDev(newBoundary, error);\n    } // We don't need to decrement any task numbers because we didn't spawn any new task.\n    // We don't need to schedule any task because we know the parent has written yet.\n    // We do need to fallthrough to create the fallback though.\n\n  } finally {\n    task.blockedBoundary = parentBoundary;\n    task.blockedSegment = parentSegment;\n  } // We create suspended task for the fallback because we don't want to actually work\n  // on it yet in case we finish the main content, so we queue for later.\n\n\n  var suspendedFallbackTask = createTask(request, fallback, parentBoundary, boundarySegment, fallbackAbortSet, task.legacyContext, task.context, task.treeContext);\n\n  {\n    suspendedFallbackTask.componentStack = task.componentStack;\n  } // TODO: This should be queued at a separate lower priority queue so that we only work\n  // on preparing fallbacks if we don't have any more main content to task on.\n\n\n  request.pingedTasks.push(suspendedFallbackTask);\n  popComponentStackInDEV(task);\n}\n\nfunction renderHostElement(request, task, type, props) {\n  pushBuiltInComponentStackInDEV(task, type);\n  var segment = task.blockedSegment;\n  var children = pushStartInstance(segment.chunks, type, props, request.responseState, segment.formatContext);\n  segment.lastPushedText = false;\n  var prevContext = segment.formatContext;\n  segment.formatContext = getChildFormatContext(prevContext, type, props); // We use the non-destructive form because if something suspends, we still\n  // need to pop back up and finish this subtree of HTML.\n\n  renderNode(request, task, children); // We expect that errors will fatal the whole task and that we don't need\n  // the correct context. Therefore this is not in a finally.\n\n  segment.formatContext = prevContext;\n  pushEndInstance(segment.chunks, type);\n  segment.lastPushedText = false;\n  popComponentStackInDEV(task);\n}\n\nfunction shouldConstruct$1(Component) {\n  return Component.prototype && Component.prototype.isReactComponent;\n}\n\nfunction renderWithHooks(request, task, Component, props, secondArg) {\n  var componentIdentity = {};\n  prepareToUseHooks(task, componentIdentity);\n  var result = Component(props, secondArg);\n  return finishHooks(Component, props, result, secondArg);\n}\n\nfunction finishClassComponent(request, task, instance, Component, props) {\n  var nextChildren = instance.render();\n\n  {\n    if (instance.props !== props) {\n      if (!didWarnAboutReassigningProps) {\n        error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromType(Component) || 'a component');\n      }\n\n      didWarnAboutReassigningProps = true;\n    }\n  }\n\n  {\n    var childContextTypes = Component.childContextTypes;\n\n    if (childContextTypes !== null && childContextTypes !== undefined) {\n      var previousContext = task.legacyContext;\n      var mergedContext = processChildContext(instance, Component, previousContext, childContextTypes);\n      task.legacyContext = mergedContext;\n      renderNodeDestructive(request, task, nextChildren);\n      task.legacyContext = previousContext;\n      return;\n    }\n  }\n\n  renderNodeDestructive(request, task, nextChildren);\n}\n\nfunction renderClassComponent(request, task, Component, props) {\n  pushClassComponentStackInDEV(task, Component);\n  var maskedContext =  getMaskedContext(Component, task.legacyContext) ;\n  var instance = constructClassInstance(Component, props, maskedContext);\n  mountClassInstance(instance, Component, props, maskedContext);\n  finishClassComponent(request, task, instance, Component, props);\n  popComponentStackInDEV(task);\n}\n\nvar didWarnAboutBadClass = {};\nvar didWarnAboutModulePatternComponent = {};\nvar didWarnAboutContextTypeOnFunctionComponent = {};\nvar didWarnAboutGetDerivedStateOnFunctionComponent = {};\nvar didWarnAboutReassigningProps = false;\nvar didWarnAboutDefaultPropsOnFunctionComponent = {};\nvar didWarnAboutGenerators = false;\nvar didWarnAboutMaps = false;\nvar hasWarnedAboutUsingContextAsConsumer = false; // This would typically be a function component but we still support module pattern\n// components for some reason.\n\nfunction renderIndeterminateComponent(request, task, Component, props) {\n  var legacyContext;\n\n  {\n    legacyContext = getMaskedContext(Component, task.legacyContext);\n  }\n\n  pushFunctionComponentStackInDEV(task, Component);\n\n  {\n    if (Component.prototype && typeof Component.prototype.render === 'function') {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutBadClass[componentName]) {\n        error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n        didWarnAboutBadClass[componentName] = true;\n      }\n    }\n  }\n\n  var value = renderWithHooks(request, task, Component, props, legacyContext);\n  var hasId = checkDidRenderIdHook();\n\n  {\n    // Support for module components is deprecated and is removed behind a flag.\n    // Whether or not it would crash later, we want to show a good message in DEV first.\n    if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n      var _componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n        didWarnAboutModulePatternComponent[_componentName] = true;\n      }\n    }\n  }\n\n  if ( // Run these checks in production only if the flag is off.\n  // Eventually we'll delete this branch altogether.\n   typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n    {\n      var _componentName2 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName2]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);\n\n        didWarnAboutModulePatternComponent[_componentName2] = true;\n      }\n    }\n\n    mountClassInstance(value, Component, props, legacyContext);\n    finishClassComponent(request, task, value, Component, props);\n  } else {\n\n    {\n      validateFunctionComponentInDev(Component);\n    } // We're now successfully past this task, and we don't have to pop back to\n    // the previous task every again, so we can use the destructive recursive form.\n\n\n    if (hasId) {\n      // This component materialized an id. We treat this as its own level, with\n      // a single \"child\" slot.\n      var prevTreeContext = task.treeContext;\n      var totalChildren = 1;\n      var index = 0;\n      task.treeContext = pushTreeContext(prevTreeContext, totalChildren, index);\n\n      try {\n        renderNodeDestructive(request, task, value);\n      } finally {\n        task.treeContext = prevTreeContext;\n      }\n    } else {\n      renderNodeDestructive(request, task, value);\n    }\n  }\n\n  popComponentStackInDEV(task);\n}\n\nfunction validateFunctionComponentInDev(Component) {\n  {\n    if (Component) {\n      if (Component.childContextTypes) {\n        error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n      }\n    }\n\n    if ( Component.defaultProps !== undefined) {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n        error('%s: Support for defaultProps will be removed from function components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n        didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n      }\n    }\n\n    if (typeof Component.getDerivedStateFromProps === 'function') {\n      var _componentName3 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {\n        error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);\n\n        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;\n      }\n    }\n\n    if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n      var _componentName4 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {\n        error('%s: Function components do not support contextType.', _componentName4);\n\n        didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;\n      }\n    }\n  }\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n  if (Component && Component.defaultProps) {\n    // Resolve default props. Taken from ReactElement\n    var props = assign({}, baseProps);\n    var defaultProps = Component.defaultProps;\n\n    for (var propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n\n    return props;\n  }\n\n  return baseProps;\n}\n\nfunction renderForwardRef(request, task, type, props, ref) {\n  pushFunctionComponentStackInDEV(task, type.render);\n  var children = renderWithHooks(request, task, type.render, props, ref);\n  var hasId = checkDidRenderIdHook();\n\n  if (hasId) {\n    // This component materialized an id. We treat this as its own level, with\n    // a single \"child\" slot.\n    var prevTreeContext = task.treeContext;\n    var totalChildren = 1;\n    var index = 0;\n    task.treeContext = pushTreeContext(prevTreeContext, totalChildren, index);\n\n    try {\n      renderNodeDestructive(request, task, children);\n    } finally {\n      task.treeContext = prevTreeContext;\n    }\n  } else {\n    renderNodeDestructive(request, task, children);\n  }\n\n  popComponentStackInDEV(task);\n}\n\nfunction renderMemo(request, task, type, props, ref) {\n  var innerType = type.type;\n  var resolvedProps = resolveDefaultProps(innerType, props);\n  renderElement(request, task, innerType, resolvedProps, ref);\n}\n\nfunction renderContextConsumer(request, task, context, props) {\n  // The logic below for Context differs depending on PROD or DEV mode. In\n  // DEV mode, we create a separate object for Context.Consumer that acts\n  // like a proxy to Context. This proxy object adds unnecessary code in PROD\n  // so we use the old behaviour (Context.Consumer references Context) to\n  // reduce size and overhead. The separate object references context via\n  // a property called \"_context\", which also gives us the ability to check\n  // in DEV mode if this property exists or not and warn if it does not.\n  {\n    if (context._context === undefined) {\n      // This may be because it's a Context (rather than a Consumer).\n      // Or it may be because it's older React where they're the same thing.\n      // We only want to warn if we're sure it's a new React.\n      if (context !== context.Consumer) {\n        if (!hasWarnedAboutUsingContextAsConsumer) {\n          hasWarnedAboutUsingContextAsConsumer = true;\n\n          error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n        }\n      }\n    } else {\n      context = context._context;\n    }\n  }\n\n  var render = props.children;\n\n  {\n    if (typeof render !== 'function') {\n      error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n    }\n  }\n\n  var newValue = readContext(context);\n  var newChildren = render(newValue);\n  renderNodeDestructive(request, task, newChildren);\n}\n\nfunction renderContextProvider(request, task, type, props) {\n  var context = type._context;\n  var value = props.value;\n  var children = props.children;\n  var prevSnapshot;\n\n  {\n    prevSnapshot = task.context;\n  }\n\n  task.context = pushProvider(context, value);\n  renderNodeDestructive(request, task, children);\n  task.context = popProvider(context);\n\n  {\n    if (prevSnapshot !== task.context) {\n      error('Popping the context provider did not return back to the original snapshot. This is a bug in React.');\n    }\n  }\n}\n\nfunction renderLazyComponent(request, task, lazyComponent, props, ref) {\n  pushBuiltInComponentStackInDEV(task, 'Lazy');\n  var payload = lazyComponent._payload;\n  var init = lazyComponent._init;\n  var Component = init(payload);\n  var resolvedProps = resolveDefaultProps(Component, props);\n  renderElement(request, task, Component, resolvedProps, ref);\n  popComponentStackInDEV(task);\n}\n\nfunction renderElement(request, task, type, props, ref) {\n  if (typeof type === 'function') {\n    if (shouldConstruct$1(type)) {\n      renderClassComponent(request, task, type, props);\n      return;\n    } else {\n      renderIndeterminateComponent(request, task, type, props);\n      return;\n    }\n  }\n\n  if (typeof type === 'string') {\n    renderHostElement(request, task, type, props);\n    return;\n  }\n\n  switch (type) {\n    // TODO: LegacyHidden acts the same as a fragment. This only works\n    // because we currently assume that every instance of LegacyHidden is\n    // accompanied by a host component wrapper. In the hidden mode, the host\n    // component is given a `hidden` attribute, which ensures that the\n    // initial HTML is not visible. To support the use of LegacyHidden as a\n    // true fragment, without an extra DOM node, we would have to hide the\n    // initial HTML in some other way.\n    // TODO: Add REACT_OFFSCREEN_TYPE here too with the same capability.\n    case REACT_LEGACY_HIDDEN_TYPE:\n    case REACT_DEBUG_TRACING_MODE_TYPE:\n    case REACT_STRICT_MODE_TYPE:\n    case REACT_PROFILER_TYPE:\n    case REACT_FRAGMENT_TYPE:\n      {\n        renderNodeDestructive(request, task, props.children);\n        return;\n      }\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      {\n        pushBuiltInComponentStackInDEV(task, 'SuspenseList'); // TODO: SuspenseList should control the boundaries.\n\n        renderNodeDestructive(request, task, props.children);\n        popComponentStackInDEV(task);\n        return;\n      }\n\n    case REACT_SCOPE_TYPE:\n      {\n\n        throw new Error('ReactDOMServer does not yet support scope components.');\n      }\n    // eslint-disable-next-line-no-fallthrough\n\n    case REACT_SUSPENSE_TYPE:\n      {\n        {\n          renderSuspenseBoundary(request, task, props);\n        }\n\n        return;\n      }\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        {\n          renderForwardRef(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_MEMO_TYPE:\n        {\n          renderMemo(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_PROVIDER_TYPE:\n        {\n          renderContextProvider(request, task, type, props);\n          return;\n        }\n\n      case REACT_CONTEXT_TYPE:\n        {\n          renderContextConsumer(request, task, type, props);\n          return;\n        }\n\n      case REACT_LAZY_TYPE:\n        {\n          renderLazyComponent(request, task, type, props);\n          return;\n        }\n    }\n  }\n\n  var info = '';\n\n  {\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n    }\n  }\n\n  throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + (\"but got: \" + (type == null ? type : typeof type) + \".\" + info));\n}\n\nfunction validateIterable(iterable, iteratorFn) {\n  {\n    // We don't support rendering Generators because it's a mutation.\n    // See https://github.com/facebook/react/issues/12995\n    if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n    iterable[Symbol.toStringTag] === 'Generator') {\n      if (!didWarnAboutGenerators) {\n        error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n      }\n\n      didWarnAboutGenerators = true;\n    } // Warn about using Maps as children\n\n\n    if (iterable.entries === iteratorFn) {\n      if (!didWarnAboutMaps) {\n        error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n      }\n\n      didWarnAboutMaps = true;\n    }\n  }\n}\n\nfunction renderNodeDestructive(request, task, node) {\n  {\n    // In Dev we wrap renderNodeDestructiveImpl in a try / catch so we can capture\n    // a component stack at the right place in the tree. We don't do this in renderNode\n    // becuase it is not called at every layer of the tree and we may lose frames\n    try {\n      return renderNodeDestructiveImpl(request, task, node);\n    } catch (x) {\n      if (typeof x === 'object' && x !== null && typeof x.then === 'function') ; else {\n        // This is an error, stash the component stack if it is null.\n        lastBoundaryErrorComponentStackDev = lastBoundaryErrorComponentStackDev !== null ? lastBoundaryErrorComponentStackDev : getCurrentStackInDEV();\n      } // rethrow so normal suspense logic can handle thrown value accordingly\n\n\n      throw x;\n    }\n  }\n} // This function by it self renders a node and consumes the task by mutating it\n// to update the current execution state.\n\n\nfunction renderNodeDestructiveImpl(request, task, node) {\n  // Stash the node we're working on. We'll pick up from this task in case\n  // something suspends.\n  task.node = node; // Handle object types\n\n  if (typeof node === 'object' && node !== null) {\n    switch (node.$$typeof) {\n      case REACT_ELEMENT_TYPE:\n        {\n          var element = node;\n          var type = element.type;\n          var props = element.props;\n          var ref = element.ref;\n          renderElement(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_PORTAL_TYPE:\n        throw new Error('Portals are not currently supported by the server renderer. ' + 'Render them conditionally so that they only appear on the client render.');\n      // eslint-disable-next-line-no-fallthrough\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyNode = node;\n          var payload = lazyNode._payload;\n          var init = lazyNode._init;\n          var resolvedNode;\n\n          {\n            try {\n              resolvedNode = init(payload);\n            } catch (x) {\n              if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n                // this Lazy initializer is suspending. push a temporary frame onto the stack so it can be\n                // popped off in spawnNewSuspendedTask. This aligns stack behavior between Lazy in element position\n                // vs Component position. We do not want the frame for Errors so we exclusively do this in\n                // the wakeable branch\n                pushBuiltInComponentStackInDEV(task, 'Lazy');\n              }\n\n              throw x;\n            }\n          }\n\n          renderNodeDestructive(request, task, resolvedNode);\n          return;\n        }\n    }\n\n    if (isArray(node)) {\n      renderChildrenArray(request, task, node);\n      return;\n    }\n\n    var iteratorFn = getIteratorFn(node);\n\n    if (iteratorFn) {\n      {\n        validateIterable(node, iteratorFn);\n      }\n\n      var iterator = iteratorFn.call(node);\n\n      if (iterator) {\n        // We need to know how many total children are in this set, so that we\n        // can allocate enough id slots to acommodate them. So we must exhaust\n        // the iterator before we start recursively rendering the children.\n        // TODO: This is not great but I think it's inherent to the id\n        // generation algorithm.\n        var step = iterator.next(); // If there are not entries, we need to push an empty so we start by checking that.\n\n        if (!step.done) {\n          var children = [];\n\n          do {\n            children.push(step.value);\n            step = iterator.next();\n          } while (!step.done);\n\n          renderChildrenArray(request, task, children);\n          return;\n        }\n\n        return;\n      }\n    }\n\n    var childString = Object.prototype.toString.call(node);\n    throw new Error(\"Objects are not valid as a React child (found: \" + (childString === '[object Object]' ? 'object with keys {' + Object.keys(node).join(', ') + '}' : childString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n  }\n\n  if (typeof node === 'string') {\n    var segment = task.blockedSegment;\n    segment.lastPushedText = pushTextInstance$1(task.blockedSegment.chunks, node, request.responseState, segment.lastPushedText);\n    return;\n  }\n\n  if (typeof node === 'number') {\n    var _segment = task.blockedSegment;\n    _segment.lastPushedText = pushTextInstance$1(task.blockedSegment.chunks, '' + node, request.responseState, _segment.lastPushedText);\n    return;\n  }\n\n  {\n    if (typeof node === 'function') {\n      error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n    }\n  }\n}\n\nfunction renderChildrenArray(request, task, children) {\n  var totalChildren = children.length;\n\n  for (var i = 0; i < totalChildren; i++) {\n    var prevTreeContext = task.treeContext;\n    task.treeContext = pushTreeContext(prevTreeContext, totalChildren, i);\n\n    try {\n      // We need to use the non-destructive form so that we can safely pop back\n      // up and render the sibling if something suspends.\n      renderNode(request, task, children[i]);\n    } finally {\n      task.treeContext = prevTreeContext;\n    }\n  }\n}\n\nfunction spawnNewSuspendedTask(request, task, x) {\n  // Something suspended, we'll need to create a new segment and resolve it later.\n  var segment = task.blockedSegment;\n  var insertionIndex = segment.chunks.length;\n  var newSegment = createPendingSegment(request, insertionIndex, null, segment.formatContext, // Adopt the parent segment's leading text embed\n  segment.lastPushedText, // Assume we are text embedded at the trailing edge\n  true);\n  segment.children.push(newSegment); // Reset lastPushedText for current Segment since the new Segment \"consumed\" it\n\n  segment.lastPushedText = false;\n  var newTask = createTask(request, task.node, task.blockedBoundary, newSegment, task.abortSet, task.legacyContext, task.context, task.treeContext);\n\n  {\n    if (task.componentStack !== null) {\n      // We pop one task off the stack because the node that suspended will be tried again,\n      // which will add it back onto the stack.\n      newTask.componentStack = task.componentStack.parent;\n    }\n  }\n\n  var ping = newTask.ping;\n  x.then(ping, ping);\n} // This is a non-destructive form of rendering a node. If it suspends it spawns\n// a new task and restores the context of this task to what it was before.\n\n\nfunction renderNode(request, task, node) {\n  // TODO: Store segment.children.length here and reset it in case something\n  // suspended partially through writing something.\n  // Snapshot the current context in case something throws to interrupt the\n  // process.\n  var previousFormatContext = task.blockedSegment.formatContext;\n  var previousLegacyContext = task.legacyContext;\n  var previousContext = task.context;\n  var previousComponentStack = null;\n\n  {\n    previousComponentStack = task.componentStack;\n  }\n\n  try {\n    return renderNodeDestructive(request, task, node);\n  } catch (x) {\n    resetHooksState();\n\n    if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n      spawnNewSuspendedTask(request, task, x); // Restore the context. We assume that this will be restored by the inner\n      // functions in case nothing throws so we don't use \"finally\" here.\n\n      task.blockedSegment.formatContext = previousFormatContext;\n      task.legacyContext = previousLegacyContext;\n      task.context = previousContext; // Restore all active ReactContexts to what they were before.\n\n      switchContext(previousContext);\n\n      {\n        task.componentStack = previousComponentStack;\n      }\n\n      return;\n    } else {\n      // Restore the context. We assume that this will be restored by the inner\n      // functions in case nothing throws so we don't use \"finally\" here.\n      task.blockedSegment.formatContext = previousFormatContext;\n      task.legacyContext = previousLegacyContext;\n      task.context = previousContext; // Restore all active ReactContexts to what they were before.\n\n      switchContext(previousContext);\n\n      {\n        task.componentStack = previousComponentStack;\n      } // We assume that we don't need the correct context.\n      // Let's terminate the rest of the tree and don't render any siblings.\n\n\n      throw x;\n    }\n  }\n}\n\nfunction erroredTask(request, boundary, segment, error) {\n  // Report the error to a global handler.\n  var errorDigest = logRecoverableError(request, error);\n\n  if (boundary === null) {\n    fatalError(request, error);\n  } else {\n    boundary.pendingTasks--;\n\n    if (!boundary.forceClientRender) {\n      boundary.forceClientRender = true;\n      boundary.errorDigest = errorDigest;\n\n      {\n        captureBoundaryErrorDetailsDev(boundary, error);\n      } // Regardless of what happens next, this boundary won't be displayed,\n      // so we can flush it, if the parent already flushed.\n\n\n      if (boundary.parentFlushed) {\n        // We don't have a preference where in the queue this goes since it's likely\n        // to error on the client anyway. However, intentionally client-rendered\n        // boundaries should be flushed earlier so that they can start on the client.\n        // We reuse the same queue for errors.\n        request.clientRenderedBoundaries.push(boundary);\n      }\n    }\n  }\n\n  request.allPendingTasks--;\n\n  if (request.allPendingTasks === 0) {\n    var onAllReady = request.onAllReady;\n    onAllReady();\n  }\n}\n\nfunction abortTaskSoft(task) {\n  // This aborts task without aborting the parent boundary that it blocks.\n  // It's used for when we didn't need this task to complete the tree.\n  // If task was needed, then it should use abortTask instead.\n  var request = this;\n  var boundary = task.blockedBoundary;\n  var segment = task.blockedSegment;\n  segment.status = ABORTED;\n  finishedTask(request, boundary, segment);\n}\n\nfunction abortTask(task, request, reason) {\n  // This aborts the task and aborts the parent that it blocks, putting it into\n  // client rendered mode.\n  var boundary = task.blockedBoundary;\n  var segment = task.blockedSegment;\n  segment.status = ABORTED;\n\n  if (boundary === null) {\n    request.allPendingTasks--; // We didn't complete the root so we have nothing to show. We can close\n    // the request;\n\n    if (request.status !== CLOSED) {\n      request.status = CLOSED;\n\n      if (request.destination !== null) {\n        close(request.destination);\n      }\n    }\n  } else {\n    boundary.pendingTasks--;\n\n    if (!boundary.forceClientRender) {\n      boundary.forceClientRender = true;\n\n      var _error = reason === undefined ? new Error('The render was aborted by the server without a reason.') : reason;\n\n      boundary.errorDigest = request.onError(_error);\n\n      {\n        var errorPrefix = 'The server did not finish this Suspense boundary: ';\n\n        if (_error && typeof _error.message === 'string') {\n          _error = errorPrefix + _error.message;\n        } else {\n          // eslint-disable-next-line react-internal/safe-string-coercion\n          _error = errorPrefix + String(_error);\n        }\n\n        var previousTaskInDev = currentTaskInDEV;\n        currentTaskInDEV = task;\n\n        try {\n          captureBoundaryErrorDetailsDev(boundary, _error);\n        } finally {\n          currentTaskInDEV = previousTaskInDev;\n        }\n      }\n\n      if (boundary.parentFlushed) {\n        request.clientRenderedBoundaries.push(boundary);\n      }\n    } // If this boundary was still pending then we haven't already cancelled its fallbacks.\n    // We'll need to abort the fallbacks, which will also error that parent boundary.\n\n\n    boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {\n      return abortTask(fallbackTask, request, reason);\n    });\n    boundary.fallbackAbortableTasks.clear();\n    request.allPendingTasks--;\n\n    if (request.allPendingTasks === 0) {\n      var onAllReady = request.onAllReady;\n      onAllReady();\n    }\n  }\n}\n\nfunction queueCompletedSegment(boundary, segment) {\n  if (segment.chunks.length === 0 && segment.children.length === 1 && segment.children[0].boundary === null) {\n    // This is an empty segment. There's nothing to write, so we can instead transfer the ID\n    // to the child. That way any existing references point to the child.\n    var childSegment = segment.children[0];\n    childSegment.id = segment.id;\n    childSegment.parentFlushed = true;\n\n    if (childSegment.status === COMPLETED) {\n      queueCompletedSegment(boundary, childSegment);\n    }\n  } else {\n    var completedSegments = boundary.completedSegments;\n    completedSegments.push(segment);\n  }\n}\n\nfunction finishedTask(request, boundary, segment) {\n  if (boundary === null) {\n    if (segment.parentFlushed) {\n      if (request.completedRootSegment !== null) {\n        throw new Error('There can only be one root segment. This is a bug in React.');\n      }\n\n      request.completedRootSegment = segment;\n    }\n\n    request.pendingRootTasks--;\n\n    if (request.pendingRootTasks === 0) {\n      // We have completed the shell so the shell can't error anymore.\n      request.onShellError = noop$1;\n      var onShellReady = request.onShellReady;\n      onShellReady();\n    }\n  } else {\n    boundary.pendingTasks--;\n\n    if (boundary.forceClientRender) ; else if (boundary.pendingTasks === 0) {\n      // This must have been the last segment we were waiting on. This boundary is now complete.\n      if (segment.parentFlushed) {\n        // Our parent segment already flushed, so we need to schedule this segment to be emitted.\n        // If it is a segment that was aborted, we'll write other content instead so we don't need\n        // to emit it.\n        if (segment.status === COMPLETED) {\n          queueCompletedSegment(boundary, segment);\n        }\n      }\n\n      if (boundary.parentFlushed) {\n        // The segment might be part of a segment that didn't flush yet, but if the boundary's\n        // parent flushed, we need to schedule the boundary to be emitted.\n        request.completedBoundaries.push(boundary);\n      } // We can now cancel any pending task on the fallback since we won't need to show it anymore.\n      // This needs to happen after we read the parentFlushed flags because aborting can finish\n      // work which can trigger user code, which can start flushing, which can change those flags.\n\n\n      boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request);\n      boundary.fallbackAbortableTasks.clear();\n    } else {\n      if (segment.parentFlushed) {\n        // Our parent already flushed, so we need to schedule this segment to be emitted.\n        // If it is a segment that was aborted, we'll write other content instead so we don't need\n        // to emit it.\n        if (segment.status === COMPLETED) {\n          queueCompletedSegment(boundary, segment);\n          var completedSegments = boundary.completedSegments;\n\n          if (completedSegments.length === 1) {\n            // This is the first time since we last flushed that we completed anything.\n            // We can schedule this boundary to emit its partially completed segments early\n            // in case the parent has already been flushed.\n            if (boundary.parentFlushed) {\n              request.partialBoundaries.push(boundary);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  request.allPendingTasks--;\n\n  if (request.allPendingTasks === 0) {\n    // This needs to be called at the very end so that we can synchronously write the result\n    // in the callback if needed.\n    var onAllReady = request.onAllReady;\n    onAllReady();\n  }\n}\n\nfunction retryTask(request, task) {\n  var segment = task.blockedSegment;\n\n  if (segment.status !== PENDING) {\n    // We completed this by other means before we had a chance to retry it.\n    return;\n  } // We restore the context to what it was when we suspended.\n  // We don't restore it after we leave because it's likely that we'll end up\n  // needing a very similar context soon again.\n\n\n  switchContext(task.context);\n  var prevTaskInDEV = null;\n\n  {\n    prevTaskInDEV = currentTaskInDEV;\n    currentTaskInDEV = task;\n  }\n\n  try {\n    // We call the destructive form that mutates this task. That way if something\n    // suspends again, we can reuse the same task instead of spawning a new one.\n    renderNodeDestructive(request, task, task.node);\n    pushSegmentFinale$1(segment.chunks, request.responseState, segment.lastPushedText, segment.textEmbedded);\n    task.abortSet.delete(task);\n    segment.status = COMPLETED;\n    finishedTask(request, task.blockedBoundary, segment);\n  } catch (x) {\n    resetHooksState();\n\n    if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n      // Something suspended again, let's pick it back up later.\n      var ping = task.ping;\n      x.then(ping, ping);\n    } else {\n      task.abortSet.delete(task);\n      segment.status = ERRORED;\n      erroredTask(request, task.blockedBoundary, segment, x);\n    }\n  } finally {\n    {\n      currentTaskInDEV = prevTaskInDEV;\n    }\n  }\n}\n\nfunction performWork(request) {\n  if (request.status === CLOSED) {\n    return;\n  }\n\n  var prevContext = getActiveContext();\n  var prevDispatcher = ReactCurrentDispatcher$1.current;\n  ReactCurrentDispatcher$1.current = Dispatcher;\n  var prevGetCurrentStackImpl;\n\n  {\n    prevGetCurrentStackImpl = ReactDebugCurrentFrame$1.getCurrentStack;\n    ReactDebugCurrentFrame$1.getCurrentStack = getCurrentStackInDEV;\n  }\n\n  var prevResponseState = currentResponseState;\n  setCurrentResponseState(request.responseState);\n\n  try {\n    var pingedTasks = request.pingedTasks;\n    var i;\n\n    for (i = 0; i < pingedTasks.length; i++) {\n      var task = pingedTasks[i];\n      retryTask(request, task);\n    }\n\n    pingedTasks.splice(0, i);\n\n    if (request.destination !== null) {\n      flushCompletedQueues(request, request.destination);\n    }\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  } finally {\n    setCurrentResponseState(prevResponseState);\n    ReactCurrentDispatcher$1.current = prevDispatcher;\n\n    {\n      ReactDebugCurrentFrame$1.getCurrentStack = prevGetCurrentStackImpl;\n    }\n\n    if (prevDispatcher === Dispatcher) {\n      // This means that we were in a reentrant work loop. This could happen\n      // in a renderer that supports synchronous work like renderToString,\n      // when it's called from within another renderer.\n      // Normally we don't bother switching the contexts to their root/default\n      // values when leaving because we'll likely need the same or similar\n      // context again. However, when we're inside a synchronous loop like this\n      // we'll to restore the context to what it was before returning.\n      switchContext(prevContext);\n    }\n  }\n}\n\nfunction flushSubtree(request, destination, segment) {\n  segment.parentFlushed = true;\n\n  switch (segment.status) {\n    case PENDING:\n      {\n        // We're emitting a placeholder for this segment to be filled in later.\n        // Therefore we'll need to assign it an ID - to refer to it by.\n        var segmentID = segment.id = request.nextSegmentId++; // When this segment finally completes it won't be embedded in text since it will flush separately\n\n        segment.lastPushedText = false;\n        segment.textEmbedded = false;\n        return writePlaceholder(destination, request.responseState, segmentID);\n      }\n\n    case COMPLETED:\n      {\n        segment.status = FLUSHED;\n        var r = true;\n        var chunks = segment.chunks;\n        var chunkIdx = 0;\n        var children = segment.children;\n\n        for (var childIdx = 0; childIdx < children.length; childIdx++) {\n          var nextChild = children[childIdx]; // Write all the chunks up until the next child.\n\n          for (; chunkIdx < nextChild.index; chunkIdx++) {\n            writeChunk(destination, chunks[chunkIdx]);\n          }\n\n          r = flushSegment(request, destination, nextChild);\n        } // Finally just write all the remaining chunks\n\n\n        for (; chunkIdx < chunks.length - 1; chunkIdx++) {\n          writeChunk(destination, chunks[chunkIdx]);\n        }\n\n        if (chunkIdx < chunks.length) {\n          r = writeChunkAndReturn(destination, chunks[chunkIdx]);\n        }\n\n        return r;\n      }\n\n    default:\n      {\n        throw new Error('Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React.');\n      }\n  }\n}\n\nfunction flushSegment(request, destination, segment) {\n  var boundary = segment.boundary;\n\n  if (boundary === null) {\n    // Not a suspense boundary.\n    return flushSubtree(request, destination, segment);\n  }\n\n  boundary.parentFlushed = true; // This segment is a Suspense boundary. We need to decide whether to\n  // emit the content or the fallback now.\n\n  if (boundary.forceClientRender) {\n    // Emit a client rendered suspense boundary wrapper.\n    // We never queue the inner boundary so we'll never emit its content or partial segments.\n    writeStartClientRenderedSuspenseBoundary$1(destination, request.responseState, boundary.errorDigest, boundary.errorMessage, boundary.errorComponentStack); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndClientRenderedSuspenseBoundary$1(destination, request.responseState);\n  } else if (boundary.pendingTasks > 0) {\n    // This boundary is still loading. Emit a pending suspense boundary wrapper.\n    // Assign an ID to refer to the future content by.\n    boundary.rootSegmentID = request.nextSegmentId++;\n\n    if (boundary.completedSegments.length > 0) {\n      // If this is at least partially complete, we can queue it to be partially emitted early.\n      request.partialBoundaries.push(boundary);\n    } /// This is the first time we should have referenced this ID.\n\n\n    var id = boundary.id = assignSuspenseBoundaryID(request.responseState);\n    writeStartPendingSuspenseBoundary(destination, request.responseState, id); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndPendingSuspenseBoundary(destination, request.responseState);\n  } else if (boundary.byteSize > request.progressiveChunkSize) {\n    // This boundary is large and will be emitted separately so that we can progressively show\n    // other content. We add it to the queue during the flush because we have to ensure that\n    // the parent flushes first so that there's something to inject it into.\n    // We also have to make sure that it's emitted into the queue in a deterministic slot.\n    // I.e. we can't insert it here when it completes.\n    // Assign an ID to refer to the future content by.\n    boundary.rootSegmentID = request.nextSegmentId++;\n    request.completedBoundaries.push(boundary); // Emit a pending rendered suspense boundary wrapper.\n\n    writeStartPendingSuspenseBoundary(destination, request.responseState, boundary.id); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndPendingSuspenseBoundary(destination, request.responseState);\n  } else {\n    // We can inline this boundary's content as a complete boundary.\n    writeStartCompletedSuspenseBoundary$1(destination, request.responseState);\n    var completedSegments = boundary.completedSegments;\n\n    if (completedSegments.length !== 1) {\n      throw new Error('A previously unvisited boundary must have exactly one root segment. This is a bug in React.');\n    }\n\n    var contentSegment = completedSegments[0];\n    flushSegment(request, destination, contentSegment);\n    return writeEndCompletedSuspenseBoundary$1(destination, request.responseState);\n  }\n}\n\nfunction flushClientRenderedBoundary(request, destination, boundary) {\n  return writeClientRenderBoundaryInstruction(destination, request.responseState, boundary.id, boundary.errorDigest, boundary.errorMessage, boundary.errorComponentStack);\n}\n\nfunction flushSegmentContainer(request, destination, segment) {\n  writeStartSegment(destination, request.responseState, segment.formatContext, segment.id);\n  flushSegment(request, destination, segment);\n  return writeEndSegment(destination, segment.formatContext);\n}\n\nfunction flushCompletedBoundary(request, destination, boundary) {\n  var completedSegments = boundary.completedSegments;\n  var i = 0;\n\n  for (; i < completedSegments.length; i++) {\n    var segment = completedSegments[i];\n    flushPartiallyCompletedSegment(request, destination, boundary, segment);\n  }\n\n  completedSegments.length = 0;\n  return writeCompletedBoundaryInstruction(destination, request.responseState, boundary.id, boundary.rootSegmentID);\n}\n\nfunction flushPartialBoundary(request, destination, boundary) {\n  var completedSegments = boundary.completedSegments;\n  var i = 0;\n\n  for (; i < completedSegments.length; i++) {\n    var segment = completedSegments[i];\n\n    if (!flushPartiallyCompletedSegment(request, destination, boundary, segment)) {\n      i++;\n      completedSegments.splice(0, i); // Only write as much as the buffer wants. Something higher priority\n      // might want to write later.\n\n      return false;\n    }\n  }\n\n  completedSegments.splice(0, i);\n  return true;\n}\n\nfunction flushPartiallyCompletedSegment(request, destination, boundary, segment) {\n  if (segment.status === FLUSHED) {\n    // We've already flushed this inline.\n    return true;\n  }\n\n  var segmentID = segment.id;\n\n  if (segmentID === -1) {\n    // This segment wasn't previously referred to. This happens at the root of\n    // a boundary. We make kind of a leap here and assume this is the root.\n    var rootSegmentID = segment.id = boundary.rootSegmentID;\n\n    if (rootSegmentID === -1) {\n      throw new Error('A root segment ID must have been assigned by now. This is a bug in React.');\n    }\n\n    return flushSegmentContainer(request, destination, segment);\n  } else {\n    flushSegmentContainer(request, destination, segment);\n    return writeCompletedSegmentInstruction(destination, request.responseState, segmentID);\n  }\n}\n\nfunction flushCompletedQueues(request, destination) {\n\n  try {\n    // The structure of this is to go through each queue one by one and write\n    // until the sink tells us to stop. When we should stop, we still finish writing\n    // that item fully and then yield. At that point we remove the already completed\n    // items up until the point we completed them.\n    // TODO: Emit preloading.\n    // TODO: It's kind of unfortunate to keep checking this array after we've already\n    // emitted the root.\n    var completedRootSegment = request.completedRootSegment;\n\n    if (completedRootSegment !== null && request.pendingRootTasks === 0) {\n      flushSegment(request, destination, completedRootSegment);\n      request.completedRootSegment = null;\n      writeCompletedRoot(destination, request.responseState);\n    } // We emit client rendering instructions for already emitted boundaries first.\n    // This is so that we can signal to the client to start client rendering them as\n    // soon as possible.\n\n\n    var clientRenderedBoundaries = request.clientRenderedBoundaries;\n    var i;\n\n    for (i = 0; i < clientRenderedBoundaries.length; i++) {\n      var boundary = clientRenderedBoundaries[i];\n\n      if (!flushClientRenderedBoundary(request, destination, boundary)) {\n        request.destination = null;\n        i++;\n        clientRenderedBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    clientRenderedBoundaries.splice(0, i); // Next we emit any complete boundaries. It's better to favor boundaries\n    // that are completely done since we can actually show them, than it is to emit\n    // any individual segments from a partially complete boundary.\n\n    var completedBoundaries = request.completedBoundaries;\n\n    for (i = 0; i < completedBoundaries.length; i++) {\n      var _boundary = completedBoundaries[i];\n\n      if (!flushCompletedBoundary(request, destination, _boundary)) {\n        request.destination = null;\n        i++;\n        completedBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    completedBoundaries.splice(0, i); // Allow anything written so far to flush to the underlying sink before\n    // we continue with lower priorities.\n\n    completeWriting(destination);\n    beginWriting(destination); // TODO: Here we'll emit data used by hydration.\n    // Next we emit any segments of any boundaries that are partially complete\n    // but not deeply complete.\n\n    var partialBoundaries = request.partialBoundaries;\n\n    for (i = 0; i < partialBoundaries.length; i++) {\n      var _boundary2 = partialBoundaries[i];\n\n      if (!flushPartialBoundary(request, destination, _boundary2)) {\n        request.destination = null;\n        i++;\n        partialBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    partialBoundaries.splice(0, i); // Next we check the completed boundaries again. This may have had\n    // boundaries added to it in case they were too larged to be inlined.\n    // New ones might be added in this loop.\n\n    var largeBoundaries = request.completedBoundaries;\n\n    for (i = 0; i < largeBoundaries.length; i++) {\n      var _boundary3 = largeBoundaries[i];\n\n      if (!flushCompletedBoundary(request, destination, _boundary3)) {\n        request.destination = null;\n        i++;\n        largeBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    largeBoundaries.splice(0, i);\n  } finally {\n\n    if (request.allPendingTasks === 0 && request.pingedTasks.length === 0 && request.clientRenderedBoundaries.length === 0 && request.completedBoundaries.length === 0 // We don't need to check any partially completed segments because\n    // either they have pending task or they're complete.\n    ) {\n        {\n          if (request.abortableTasks.size !== 0) {\n            error('There was still abortable task at the root when we closed. This is a bug in React.');\n          }\n        } // We're done.\n\n\n        close(destination);\n      }\n  }\n}\n\nfunction startWork(request) {\n  scheduleWork(function () {\n    return performWork(request);\n  });\n}\nfunction startFlowing(request, destination) {\n  if (request.status === CLOSING) {\n    request.status = CLOSED;\n    closeWithError(destination, request.fatalError);\n    return;\n  }\n\n  if (request.status === CLOSED) {\n    return;\n  }\n\n  if (request.destination !== null) {\n    // We're already flowing.\n    return;\n  }\n\n  request.destination = destination;\n\n  try {\n    flushCompletedQueues(request, destination);\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  }\n} // This is called to early terminate a request. It puts all pending boundaries in client rendered state.\n\nfunction abort(request, reason) {\n  try {\n    var abortableTasks = request.abortableTasks;\n    abortableTasks.forEach(function (task) {\n      return abortTask(task, request, reason);\n    });\n    abortableTasks.clear();\n\n    if (request.destination !== null) {\n      flushCompletedQueues(request, request.destination);\n    }\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  }\n}\n\nfunction onError() {// Non-fatal errors are ignored.\n}\n\nfunction renderToStringImpl(children, options, generateStaticMarkup, abortReason) {\n  var didFatal = false;\n  var fatalError = null;\n  var result = '';\n  var destination = {\n    push: function (chunk) {\n      if (chunk !== null) {\n        result += chunk;\n      }\n\n      return true;\n    },\n    destroy: function (error) {\n      didFatal = true;\n      fatalError = error;\n    }\n  };\n  var readyToStream = false;\n\n  function onShellReady() {\n    readyToStream = true;\n  }\n\n  var request = createRequest(children, createResponseState$1(generateStaticMarkup, options ? options.identifierPrefix : undefined), createRootFormatContext(), Infinity, onError, undefined, onShellReady, undefined, undefined);\n  startWork(request); // If anything suspended and is still pending, we'll abort it before writing.\n  // That way we write only client-rendered boundaries from the start.\n\n  abort(request, abortReason);\n  startFlowing(request, destination);\n\n  if (didFatal) {\n    throw fatalError;\n  }\n\n  if (!readyToStream) {\n    // Note: This error message is the one we use on the client. It doesn't\n    // really make sense here. But this is the legacy server renderer, anyway.\n    // We're going to delete it soon.\n    throw new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To fix, ' + 'updates that suspend should be wrapped with startTransition.');\n  }\n\n  return result;\n}\n\nfunction renderToString(children, options) {\n  return renderToStringImpl(children, options, false, 'The server used \"renderToString\" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server');\n}\n\nfunction renderToStaticMarkup(children, options) {\n  return renderToStringImpl(children, options, true, 'The server used \"renderToStaticMarkup\" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to \"renderToReadableStream\" which supports Suspense on the server');\n}\n\nfunction renderToNodeStream() {\n  throw new Error('ReactDOMServer.renderToNodeStream(): The streaming API is not available ' + 'in the browser. Use ReactDOMServer.renderToString() instead.');\n}\n\nfunction renderToStaticNodeStream() {\n  throw new Error('ReactDOMServer.renderToStaticNodeStream(): The streaming API is not available ' + 'in the browser. Use ReactDOMServer.renderToStaticMarkup() instead.');\n}\n\nexports.renderToNodeStream = renderToNodeStream;\nexports.renderToStaticMarkup = renderToStaticMarkup;\nexports.renderToStaticNodeStream = renderToStaticNodeStream;\nexports.renderToString = renderToString;\nexports.version = ReactVersion;\n  })();\n}\n","/**\n * @license React\n * react-dom-server.browser.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\nvar ReactVersion = '18.3.1';\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n  {\n    {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      printWarning('warn', format, args);\n    }\n  }\n}\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\nfunction scheduleWork(callback) {\n  callback();\n}\nvar VIEW_SIZE = 512;\nvar currentView = null;\nvar writtenBytes = 0;\nfunction beginWriting(destination) {\n  currentView = new Uint8Array(VIEW_SIZE);\n  writtenBytes = 0;\n}\nfunction writeChunk(destination, chunk) {\n  if (chunk.length === 0) {\n    return;\n  }\n\n  if (chunk.length > VIEW_SIZE) {\n    // this chunk may overflow a single view which implies it was not\n    // one that is cached by the streaming renderer. We will enqueu\n    // it directly and expect it is not re-used\n    if (writtenBytes > 0) {\n      destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes));\n      currentView = new Uint8Array(VIEW_SIZE);\n      writtenBytes = 0;\n    }\n\n    destination.enqueue(chunk);\n    return;\n  }\n\n  var bytesToWrite = chunk;\n  var allowableBytes = currentView.length - writtenBytes;\n\n  if (allowableBytes < bytesToWrite.length) {\n    // this chunk would overflow the current view. We enqueue a full view\n    // and start a new view with the remaining chunk\n    if (allowableBytes === 0) {\n      // the current view is already full, send it\n      destination.enqueue(currentView);\n    } else {\n      // fill up the current view and apply the remaining chunk bytes\n      // to a new view.\n      currentView.set(bytesToWrite.subarray(0, allowableBytes), writtenBytes); // writtenBytes += allowableBytes; // this can be skipped because we are going to immediately reset the view\n\n      destination.enqueue(currentView);\n      bytesToWrite = bytesToWrite.subarray(allowableBytes);\n    }\n\n    currentView = new Uint8Array(VIEW_SIZE);\n    writtenBytes = 0;\n  }\n\n  currentView.set(bytesToWrite, writtenBytes);\n  writtenBytes += bytesToWrite.length;\n}\nfunction writeChunkAndReturn(destination, chunk) {\n  writeChunk(destination, chunk); // in web streams there is no backpressure so we can alwas write more\n\n  return true;\n}\nfunction completeWriting(destination) {\n  if (currentView && writtenBytes > 0) {\n    destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes));\n    currentView = null;\n    writtenBytes = 0;\n  }\n}\nfunction close(destination) {\n  destination.close();\n}\nvar textEncoder = new TextEncoder();\nfunction stringToChunk(content) {\n  return textEncoder.encode(content);\n}\nfunction stringToPrecomputedChunk(content) {\n  return textEncoder.encode(content);\n}\nfunction closeWithError(destination, error) {\n  if (typeof destination.error === 'function') {\n    // $FlowFixMe: This is an Error object or the destination accepts other types.\n    destination.error(error);\n  } else {\n    // Earlier implementations doesn't support this method. In that environment you're\n    // supposed to throw from a promise returned but we don't return a promise in our\n    // approach. We could fork this implementation but this is environment is an edge\n    // case to begin with. It's even less common to run this in an older environment.\n    // Even then, this is not where errors are supposed to happen and they get reported\n    // to a global callback in addition to this anyway. So it's fine just to close this.\n    destination.close();\n  }\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\n\nfunction checkAttributeStringCoercion(value, attributeName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkCSSPropertyStringCoercion(value, propName) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\nfunction checkHtmlStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n    return true;\n  }\n\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n    return false;\n  }\n\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n\n  illegalAttributeNameCache[attributeName] = true;\n\n  {\n    error('Invalid attribute name: `%s`', attributeName);\n  }\n\n  return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n  if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n    return false;\n  }\n\n  switch (typeof value) {\n    case 'function': // $FlowIssue symbol is perfectly valid here\n\n    case 'symbol':\n      // eslint-disable-line\n      return true;\n\n    case 'boolean':\n      {\n        if (isCustomComponentTag) {\n          return false;\n        }\n\n        if (propertyInfo !== null) {\n          return !propertyInfo.acceptsBooleans;\n        } else {\n          var prefix = name.toLowerCase().slice(0, 5);\n          return prefix !== 'data-' && prefix !== 'aria-';\n        }\n      }\n\n    default:\n      return false;\n  }\n}\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var name = _ref[0],\n      attributeName = _ref[1];\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL\n  false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL\nfalse);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true, // sanitizeURL\n  true);\n});\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridArea: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\nvar hasReadOnlyValue = {\n  button: true,\n  checkbox: true,\n  image: true,\n  hidden: true,\n  radio: true,\n  reset: true,\n  submit: true\n};\nfunction checkControlledValueProps(tagName, props) {\n  {\n    if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {\n      error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n\n    if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {\n      error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n    }\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this list too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n\n    default:\n      return true;\n  }\n}\n\nvar ariaProperties = {\n  'aria-current': 0,\n  // state\n  'aria-description': 0,\n  'aria-details': 0,\n  'aria-disabled': 0,\n  // state\n  'aria-hidden': 0,\n  // state\n  'aria-invalid': 0,\n  // state\n  'aria-keyshortcuts': 0,\n  'aria-label': 0,\n  'aria-roledescription': 0,\n  // Widget Attributes\n  'aria-autocomplete': 0,\n  'aria-checked': 0,\n  'aria-expanded': 0,\n  'aria-haspopup': 0,\n  'aria-level': 0,\n  'aria-modal': 0,\n  'aria-multiline': 0,\n  'aria-multiselectable': 0,\n  'aria-orientation': 0,\n  'aria-placeholder': 0,\n  'aria-pressed': 0,\n  'aria-readonly': 0,\n  'aria-required': 0,\n  'aria-selected': 0,\n  'aria-sort': 0,\n  'aria-valuemax': 0,\n  'aria-valuemin': 0,\n  'aria-valuenow': 0,\n  'aria-valuetext': 0,\n  // Live Region Attributes\n  'aria-atomic': 0,\n  'aria-busy': 0,\n  'aria-live': 0,\n  'aria-relevant': 0,\n  // Drag-and-Drop Attributes\n  'aria-dropeffect': 0,\n  'aria-grabbed': 0,\n  // Relationship Attributes\n  'aria-activedescendant': 0,\n  'aria-colcount': 0,\n  'aria-colindex': 0,\n  'aria-colspan': 0,\n  'aria-controls': 0,\n  'aria-describedby': 0,\n  'aria-errormessage': 0,\n  'aria-flowto': 0,\n  'aria-labelledby': 0,\n  'aria-owns': 0,\n  'aria-posinset': 0,\n  'aria-rowcount': 0,\n  'aria-rowindex': 0,\n  'aria-rowspan': 0,\n  'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nfunction validateProperty(tagName, name) {\n  {\n    if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {\n      return true;\n    }\n\n    if (rARIACamel.test(name)) {\n      var ariaName = 'aria-' + name.slice(4).toLowerCase();\n      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (correctName == null) {\n        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n        warnedProperties[name] = true;\n        return true;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== correctName) {\n        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n\n    if (rARIA.test(name)) {\n      var lowerCasedName = name.toLowerCase();\n      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n      // DOM properties, then it is an invalid aria-* attribute.\n\n      if (standardName == null) {\n        warnedProperties[name] = true;\n        return false;\n      } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n      if (name !== standardName) {\n        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties[name] = true;\n        return true;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n  {\n    var invalidProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty(type, key);\n\n      if (!isValid) {\n        invalidProps.push(key);\n      }\n    }\n\n    var unknownPropString = invalidProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (invalidProps.length === 1) {\n      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    } else if (invalidProps.length > 1) {\n      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n    }\n  }\n}\n\nfunction validateProperties(type, props) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n  {\n    if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n      return;\n    }\n\n    if (props != null && props.value === null && !didWarnValueNull) {\n      didWarnValueNull = true;\n\n      if (type === 'select' && props.multiple) {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n      } else {\n        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n      }\n    }\n  }\n}\n\n// When adding attributes to the HTML or SVG allowed attribute list, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n  // HTML\n  accept: 'accept',\n  acceptcharset: 'acceptCharset',\n  'accept-charset': 'acceptCharset',\n  accesskey: 'accessKey',\n  action: 'action',\n  allowfullscreen: 'allowFullScreen',\n  alt: 'alt',\n  as: 'as',\n  async: 'async',\n  autocapitalize: 'autoCapitalize',\n  autocomplete: 'autoComplete',\n  autocorrect: 'autoCorrect',\n  autofocus: 'autoFocus',\n  autoplay: 'autoPlay',\n  autosave: 'autoSave',\n  capture: 'capture',\n  cellpadding: 'cellPadding',\n  cellspacing: 'cellSpacing',\n  challenge: 'challenge',\n  charset: 'charSet',\n  checked: 'checked',\n  children: 'children',\n  cite: 'cite',\n  class: 'className',\n  classid: 'classID',\n  classname: 'className',\n  cols: 'cols',\n  colspan: 'colSpan',\n  content: 'content',\n  contenteditable: 'contentEditable',\n  contextmenu: 'contextMenu',\n  controls: 'controls',\n  controlslist: 'controlsList',\n  coords: 'coords',\n  crossorigin: 'crossOrigin',\n  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n  data: 'data',\n  datetime: 'dateTime',\n  default: 'default',\n  defaultchecked: 'defaultChecked',\n  defaultvalue: 'defaultValue',\n  defer: 'defer',\n  dir: 'dir',\n  disabled: 'disabled',\n  disablepictureinpicture: 'disablePictureInPicture',\n  disableremoteplayback: 'disableRemotePlayback',\n  download: 'download',\n  draggable: 'draggable',\n  enctype: 'encType',\n  enterkeyhint: 'enterKeyHint',\n  for: 'htmlFor',\n  form: 'form',\n  formmethod: 'formMethod',\n  formaction: 'formAction',\n  formenctype: 'formEncType',\n  formnovalidate: 'formNoValidate',\n  formtarget: 'formTarget',\n  frameborder: 'frameBorder',\n  headers: 'headers',\n  height: 'height',\n  hidden: 'hidden',\n  high: 'high',\n  href: 'href',\n  hreflang: 'hrefLang',\n  htmlfor: 'htmlFor',\n  httpequiv: 'httpEquiv',\n  'http-equiv': 'httpEquiv',\n  icon: 'icon',\n  id: 'id',\n  imagesizes: 'imageSizes',\n  imagesrcset: 'imageSrcSet',\n  innerhtml: 'innerHTML',\n  inputmode: 'inputMode',\n  integrity: 'integrity',\n  is: 'is',\n  itemid: 'itemID',\n  itemprop: 'itemProp',\n  itemref: 'itemRef',\n  itemscope: 'itemScope',\n  itemtype: 'itemType',\n  keyparams: 'keyParams',\n  keytype: 'keyType',\n  kind: 'kind',\n  label: 'label',\n  lang: 'lang',\n  list: 'list',\n  loop: 'loop',\n  low: 'low',\n  manifest: 'manifest',\n  marginwidth: 'marginWidth',\n  marginheight: 'marginHeight',\n  max: 'max',\n  maxlength: 'maxLength',\n  media: 'media',\n  mediagroup: 'mediaGroup',\n  method: 'method',\n  min: 'min',\n  minlength: 'minLength',\n  multiple: 'multiple',\n  muted: 'muted',\n  name: 'name',\n  nomodule: 'noModule',\n  nonce: 'nonce',\n  novalidate: 'noValidate',\n  open: 'open',\n  optimum: 'optimum',\n  pattern: 'pattern',\n  placeholder: 'placeholder',\n  playsinline: 'playsInline',\n  poster: 'poster',\n  preload: 'preload',\n  profile: 'profile',\n  radiogroup: 'radioGroup',\n  readonly: 'readOnly',\n  referrerpolicy: 'referrerPolicy',\n  rel: 'rel',\n  required: 'required',\n  reversed: 'reversed',\n  role: 'role',\n  rows: 'rows',\n  rowspan: 'rowSpan',\n  sandbox: 'sandbox',\n  scope: 'scope',\n  scoped: 'scoped',\n  scrolling: 'scrolling',\n  seamless: 'seamless',\n  selected: 'selected',\n  shape: 'shape',\n  size: 'size',\n  sizes: 'sizes',\n  span: 'span',\n  spellcheck: 'spellCheck',\n  src: 'src',\n  srcdoc: 'srcDoc',\n  srclang: 'srcLang',\n  srcset: 'srcSet',\n  start: 'start',\n  step: 'step',\n  style: 'style',\n  summary: 'summary',\n  tabindex: 'tabIndex',\n  target: 'target',\n  title: 'title',\n  type: 'type',\n  usemap: 'useMap',\n  value: 'value',\n  width: 'width',\n  wmode: 'wmode',\n  wrap: 'wrap',\n  // SVG\n  about: 'about',\n  accentheight: 'accentHeight',\n  'accent-height': 'accentHeight',\n  accumulate: 'accumulate',\n  additive: 'additive',\n  alignmentbaseline: 'alignmentBaseline',\n  'alignment-baseline': 'alignmentBaseline',\n  allowreorder: 'allowReorder',\n  alphabetic: 'alphabetic',\n  amplitude: 'amplitude',\n  arabicform: 'arabicForm',\n  'arabic-form': 'arabicForm',\n  ascent: 'ascent',\n  attributename: 'attributeName',\n  attributetype: 'attributeType',\n  autoreverse: 'autoReverse',\n  azimuth: 'azimuth',\n  basefrequency: 'baseFrequency',\n  baselineshift: 'baselineShift',\n  'baseline-shift': 'baselineShift',\n  baseprofile: 'baseProfile',\n  bbox: 'bbox',\n  begin: 'begin',\n  bias: 'bias',\n  by: 'by',\n  calcmode: 'calcMode',\n  capheight: 'capHeight',\n  'cap-height': 'capHeight',\n  clip: 'clip',\n  clippath: 'clipPath',\n  'clip-path': 'clipPath',\n  clippathunits: 'clipPathUnits',\n  cliprule: 'clipRule',\n  'clip-rule': 'clipRule',\n  color: 'color',\n  colorinterpolation: 'colorInterpolation',\n  'color-interpolation': 'colorInterpolation',\n  colorinterpolationfilters: 'colorInterpolationFilters',\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorprofile: 'colorProfile',\n  'color-profile': 'colorProfile',\n  colorrendering: 'colorRendering',\n  'color-rendering': 'colorRendering',\n  contentscripttype: 'contentScriptType',\n  contentstyletype: 'contentStyleType',\n  cursor: 'cursor',\n  cx: 'cx',\n  cy: 'cy',\n  d: 'd',\n  datatype: 'datatype',\n  decelerate: 'decelerate',\n  descent: 'descent',\n  diffuseconstant: 'diffuseConstant',\n  direction: 'direction',\n  display: 'display',\n  divisor: 'divisor',\n  dominantbaseline: 'dominantBaseline',\n  'dominant-baseline': 'dominantBaseline',\n  dur: 'dur',\n  dx: 'dx',\n  dy: 'dy',\n  edgemode: 'edgeMode',\n  elevation: 'elevation',\n  enablebackground: 'enableBackground',\n  'enable-background': 'enableBackground',\n  end: 'end',\n  exponent: 'exponent',\n  externalresourcesrequired: 'externalResourcesRequired',\n  fill: 'fill',\n  fillopacity: 'fillOpacity',\n  'fill-opacity': 'fillOpacity',\n  fillrule: 'fillRule',\n  'fill-rule': 'fillRule',\n  filter: 'filter',\n  filterres: 'filterRes',\n  filterunits: 'filterUnits',\n  floodopacity: 'floodOpacity',\n  'flood-opacity': 'floodOpacity',\n  floodcolor: 'floodColor',\n  'flood-color': 'floodColor',\n  focusable: 'focusable',\n  fontfamily: 'fontFamily',\n  'font-family': 'fontFamily',\n  fontsize: 'fontSize',\n  'font-size': 'fontSize',\n  fontsizeadjust: 'fontSizeAdjust',\n  'font-size-adjust': 'fontSizeAdjust',\n  fontstretch: 'fontStretch',\n  'font-stretch': 'fontStretch',\n  fontstyle: 'fontStyle',\n  'font-style': 'fontStyle',\n  fontvariant: 'fontVariant',\n  'font-variant': 'fontVariant',\n  fontweight: 'fontWeight',\n  'font-weight': 'fontWeight',\n  format: 'format',\n  from: 'from',\n  fx: 'fx',\n  fy: 'fy',\n  g1: 'g1',\n  g2: 'g2',\n  glyphname: 'glyphName',\n  'glyph-name': 'glyphName',\n  glyphorientationhorizontal: 'glyphOrientationHorizontal',\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphorientationvertical: 'glyphOrientationVertical',\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphref: 'glyphRef',\n  gradienttransform: 'gradientTransform',\n  gradientunits: 'gradientUnits',\n  hanging: 'hanging',\n  horizadvx: 'horizAdvX',\n  'horiz-adv-x': 'horizAdvX',\n  horizoriginx: 'horizOriginX',\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 'ideographic',\n  imagerendering: 'imageRendering',\n  'image-rendering': 'imageRendering',\n  in2: 'in2',\n  in: 'in',\n  inlist: 'inlist',\n  intercept: 'intercept',\n  k1: 'k1',\n  k2: 'k2',\n  k3: 'k3',\n  k4: 'k4',\n  k: 'k',\n  kernelmatrix: 'kernelMatrix',\n  kernelunitlength: 'kernelUnitLength',\n  kerning: 'kerning',\n  keypoints: 'keyPoints',\n  keysplines: 'keySplines',\n  keytimes: 'keyTimes',\n  lengthadjust: 'lengthAdjust',\n  letterspacing: 'letterSpacing',\n  'letter-spacing': 'letterSpacing',\n  lightingcolor: 'lightingColor',\n  'lighting-color': 'lightingColor',\n  limitingconeangle: 'limitingConeAngle',\n  local: 'local',\n  markerend: 'markerEnd',\n  'marker-end': 'markerEnd',\n  markerheight: 'markerHeight',\n  markermid: 'markerMid',\n  'marker-mid': 'markerMid',\n  markerstart: 'markerStart',\n  'marker-start': 'markerStart',\n  markerunits: 'markerUnits',\n  markerwidth: 'markerWidth',\n  mask: 'mask',\n  maskcontentunits: 'maskContentUnits',\n  maskunits: 'maskUnits',\n  mathematical: 'mathematical',\n  mode: 'mode',\n  numoctaves: 'numOctaves',\n  offset: 'offset',\n  opacity: 'opacity',\n  operator: 'operator',\n  order: 'order',\n  orient: 'orient',\n  orientation: 'orientation',\n  origin: 'origin',\n  overflow: 'overflow',\n  overlineposition: 'overlinePosition',\n  'overline-position': 'overlinePosition',\n  overlinethickness: 'overlineThickness',\n  'overline-thickness': 'overlineThickness',\n  paintorder: 'paintOrder',\n  'paint-order': 'paintOrder',\n  panose1: 'panose1',\n  'panose-1': 'panose1',\n  pathlength: 'pathLength',\n  patterncontentunits: 'patternContentUnits',\n  patterntransform: 'patternTransform',\n  patternunits: 'patternUnits',\n  pointerevents: 'pointerEvents',\n  'pointer-events': 'pointerEvents',\n  points: 'points',\n  pointsatx: 'pointsAtX',\n  pointsaty: 'pointsAtY',\n  pointsatz: 'pointsAtZ',\n  prefix: 'prefix',\n  preservealpha: 'preserveAlpha',\n  preserveaspectratio: 'preserveAspectRatio',\n  primitiveunits: 'primitiveUnits',\n  property: 'property',\n  r: 'r',\n  radius: 'radius',\n  refx: 'refX',\n  refy: 'refY',\n  renderingintent: 'renderingIntent',\n  'rendering-intent': 'renderingIntent',\n  repeatcount: 'repeatCount',\n  repeatdur: 'repeatDur',\n  requiredextensions: 'requiredExtensions',\n  requiredfeatures: 'requiredFeatures',\n  resource: 'resource',\n  restart: 'restart',\n  result: 'result',\n  results: 'results',\n  rotate: 'rotate',\n  rx: 'rx',\n  ry: 'ry',\n  scale: 'scale',\n  security: 'security',\n  seed: 'seed',\n  shaperendering: 'shapeRendering',\n  'shape-rendering': 'shapeRendering',\n  slope: 'slope',\n  spacing: 'spacing',\n  specularconstant: 'specularConstant',\n  specularexponent: 'specularExponent',\n  speed: 'speed',\n  spreadmethod: 'spreadMethod',\n  startoffset: 'startOffset',\n  stddeviation: 'stdDeviation',\n  stemh: 'stemh',\n  stemv: 'stemv',\n  stitchtiles: 'stitchTiles',\n  stopcolor: 'stopColor',\n  'stop-color': 'stopColor',\n  stopopacity: 'stopOpacity',\n  'stop-opacity': 'stopOpacity',\n  strikethroughposition: 'strikethroughPosition',\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughthickness: 'strikethroughThickness',\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 'string',\n  stroke: 'stroke',\n  strokedasharray: 'strokeDasharray',\n  'stroke-dasharray': 'strokeDasharray',\n  strokedashoffset: 'strokeDashoffset',\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokelinecap: 'strokeLinecap',\n  'stroke-linecap': 'strokeLinecap',\n  strokelinejoin: 'strokeLinejoin',\n  'stroke-linejoin': 'strokeLinejoin',\n  strokemiterlimit: 'strokeMiterlimit',\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokewidth: 'strokeWidth',\n  'stroke-width': 'strokeWidth',\n  strokeopacity: 'strokeOpacity',\n  'stroke-opacity': 'strokeOpacity',\n  suppresscontenteditablewarning: 'suppressContentEditableWarning',\n  suppresshydrationwarning: 'suppressHydrationWarning',\n  surfacescale: 'surfaceScale',\n  systemlanguage: 'systemLanguage',\n  tablevalues: 'tableValues',\n  targetx: 'targetX',\n  targety: 'targetY',\n  textanchor: 'textAnchor',\n  'text-anchor': 'textAnchor',\n  textdecoration: 'textDecoration',\n  'text-decoration': 'textDecoration',\n  textlength: 'textLength',\n  textrendering: 'textRendering',\n  'text-rendering': 'textRendering',\n  to: 'to',\n  transform: 'transform',\n  typeof: 'typeof',\n  u1: 'u1',\n  u2: 'u2',\n  underlineposition: 'underlinePosition',\n  'underline-position': 'underlinePosition',\n  underlinethickness: 'underlineThickness',\n  'underline-thickness': 'underlineThickness',\n  unicode: 'unicode',\n  unicodebidi: 'unicodeBidi',\n  'unicode-bidi': 'unicodeBidi',\n  unicoderange: 'unicodeRange',\n  'unicode-range': 'unicodeRange',\n  unitsperem: 'unitsPerEm',\n  'units-per-em': 'unitsPerEm',\n  unselectable: 'unselectable',\n  valphabetic: 'vAlphabetic',\n  'v-alphabetic': 'vAlphabetic',\n  values: 'values',\n  vectoreffect: 'vectorEffect',\n  'vector-effect': 'vectorEffect',\n  version: 'version',\n  vertadvy: 'vertAdvY',\n  'vert-adv-y': 'vertAdvY',\n  vertoriginx: 'vertOriginX',\n  'vert-origin-x': 'vertOriginX',\n  vertoriginy: 'vertOriginY',\n  'vert-origin-y': 'vertOriginY',\n  vhanging: 'vHanging',\n  'v-hanging': 'vHanging',\n  videographic: 'vIdeographic',\n  'v-ideographic': 'vIdeographic',\n  viewbox: 'viewBox',\n  viewtarget: 'viewTarget',\n  visibility: 'visibility',\n  vmathematical: 'vMathematical',\n  'v-mathematical': 'vMathematical',\n  vocab: 'vocab',\n  widths: 'widths',\n  wordspacing: 'wordSpacing',\n  'word-spacing': 'wordSpacing',\n  writingmode: 'writingMode',\n  'writing-mode': 'writingMode',\n  x1: 'x1',\n  x2: 'x2',\n  x: 'x',\n  xchannelselector: 'xChannelSelector',\n  xheight: 'xHeight',\n  'x-height': 'xHeight',\n  xlinkactuate: 'xlinkActuate',\n  'xlink:actuate': 'xlinkActuate',\n  xlinkarcrole: 'xlinkArcrole',\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkhref: 'xlinkHref',\n  'xlink:href': 'xlinkHref',\n  xlinkrole: 'xlinkRole',\n  'xlink:role': 'xlinkRole',\n  xlinkshow: 'xlinkShow',\n  'xlink:show': 'xlinkShow',\n  xlinktitle: 'xlinkTitle',\n  'xlink:title': 'xlinkTitle',\n  xlinktype: 'xlinkType',\n  'xlink:type': 'xlinkType',\n  xmlbase: 'xmlBase',\n  'xml:base': 'xmlBase',\n  xmllang: 'xmlLang',\n  'xml:lang': 'xmlLang',\n  xmlns: 'xmlns',\n  'xml:space': 'xmlSpace',\n  xmlnsxlink: 'xmlnsXlink',\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlspace: 'xmlSpace',\n  y1: 'y1',\n  y2: 'y2',\n  y: 'y',\n  ychannelselector: 'yChannelSelector',\n  z: 'z',\n  zoomandpan: 'zoomAndPan'\n};\n\nvar validateProperty$1 = function () {};\n\n{\n  var warnedProperties$1 = {};\n  var EVENT_NAME_REGEX = /^on./;\n  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n  validateProperty$1 = function (tagName, name, value, eventRegistry) {\n    if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n      return true;\n    }\n\n    var lowerCasedName = name.toLowerCase();\n\n    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n      error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // We can't rely on the event system being injected on the server.\n\n\n    if (eventRegistry != null) {\n      var registrationNameDependencies = eventRegistry.registrationNameDependencies,\n          possibleRegistrationNames = eventRegistry.possibleRegistrationNames;\n\n      if (registrationNameDependencies.hasOwnProperty(name)) {\n        return true;\n      }\n\n      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n      if (registrationName != null) {\n        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n\n      if (EVENT_NAME_REGEX.test(name)) {\n        error('Unknown event handler property `%s`. It will be ignored.', name);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (EVENT_NAME_REGEX.test(name)) {\n      // If no event plugins have been injected, we are in a server environment.\n      // So we can't tell if the event name is correct for sure, but we can filter\n      // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n      if (INVALID_EVENT_NAME_REGEX.test(name)) {\n        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Let the ARIA attribute hook validate ARIA attributes\n\n\n    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n      return true;\n    }\n\n    if (lowerCasedName === 'innerhtml') {\n      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'aria') {\n      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    var propertyInfo = getPropertyInfo(name);\n    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n      var standardName = possibleStandardNames[lowerCasedName];\n\n      if (standardName !== name) {\n        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n        warnedProperties$1[name] = true;\n        return true;\n      }\n    } else if (!isReserved && name !== lowerCasedName) {\n      // Unknown attributes should have lowercase casing since that's how they\n      // will be cased anyway with server rendering.\n      error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      if (value) {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n      } else {\n        error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n      }\n\n      warnedProperties$1[name] = true;\n      return true;\n    } // Now that we've validated casing, do not validate\n    // data types for reserved props\n\n\n    if (isReserved) {\n      return true;\n    } // Warn when a known attribute is a bad type\n\n\n    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n      warnedProperties$1[name] = true;\n      return false;\n    } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n      error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n      warnedProperties$1[name] = true;\n      return true;\n    }\n\n    return true;\n  };\n}\n\nvar warnUnknownProperties = function (type, props, eventRegistry) {\n  {\n    var unknownProps = [];\n\n    for (var key in props) {\n      var isValid = validateProperty$1(type, key, props[key], eventRegistry);\n\n      if (!isValid) {\n        unknownProps.push(key);\n      }\n    }\n\n    var unknownPropString = unknownProps.map(function (prop) {\n      return '`' + prop + '`';\n    }).join(', ');\n\n    if (unknownProps.length === 1) {\n      error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    } else if (unknownProps.length > 1) {\n      error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n    }\n  }\n};\n\nfunction validateProperties$2(type, props, eventRegistry) {\n  if (isCustomComponent(type, props)) {\n    return;\n  }\n\n  warnUnknownProperties(type, props, eventRegistry);\n}\n\nvar warnValidStyle = function () {};\n\n{\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n  var warnedForInfinityValue = false;\n\n  var camelize = function (string) {\n    return string.replace(hyphenPattern, function (_, character) {\n      return character.toUpperCase();\n    });\n  };\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n    // is converted to lowercase `ms`.\n    camelize(name.replace(msPattern, 'ms-')));\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n\n    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n\n    error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n  };\n\n  var warnStyleValueIsNaN = function (name, value) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n\n    error('`NaN` is an invalid value for the `%s` css style property.', name);\n  };\n\n  var warnStyleValueIsInfinity = function (name, value) {\n    if (warnedForInfinityValue) {\n      return;\n    }\n\n    warnedForInfinityValue = true;\n\n    error('`Infinity` is an invalid value for the `%s` css style property.', name);\n  };\n\n  warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n\n    if (typeof value === 'number') {\n      if (isNaN(value)) {\n        warnStyleValueIsNaN(name, value);\n      } else if (!isFinite(value)) {\n        warnStyleValueIsInfinity(name, value);\n      }\n    }\n  };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n// code copied and modified from escape-html\nvar matchHtmlRegExp = /[\"'&<>]/;\n/**\n * Escapes special characters and HTML entities in a given html string.\n *\n * @param  {string} string HTML string to escape for later insertion\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  {\n    checkHtmlStringCoercion(string);\n  }\n\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        // \"\n        escape = '&quot;';\n        break;\n\n      case 38:\n        // &\n        escape = '&amp;';\n        break;\n\n      case 39:\n        // '\n        escape = '&#x27;'; // modified from escape-html; used to be '&#39'\n\n        break;\n\n      case 60:\n        // <\n        escape = '&lt;';\n        break;\n\n      case 62:\n        // >\n        escape = '&gt;';\n        break;\n\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n} // end code copied and modified from escape-html\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\n\n\nfunction escapeTextForBrowser(text) {\n  if (typeof text === 'boolean' || typeof text === 'number') {\n    // this shortcircuit helps perf for types that we know will never have\n    // special characters, especially given that this function is used often\n    // for numeric dom ids.\n    return '' + text;\n  }\n\n  return escapeHtml(text);\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern$1 = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern$1, '-ms-');\n}\n\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n  {\n    if (!didWarn && isJavaScriptProtocol.test(url)) {\n      didWarn = true;\n\n      error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\nvar startInlineScript = stringToPrecomputedChunk('<script>');\nvar endInlineScript = stringToPrecomputedChunk('</script>');\nvar startScriptSrc = stringToPrecomputedChunk('<script src=\"');\nvar startModuleSrc = stringToPrecomputedChunk('<script type=\"module\" src=\"');\nvar endAsyncScript = stringToPrecomputedChunk('\" async=\"\"></script>');\n/**\n * This escaping function is designed to work with bootstrapScriptContent only.\n * because we know we are escaping the entire script. We can avoid for instance\n * escaping html comment string sequences that are valid javascript as well because\n * if there are no sebsequent <script sequences the html parser will never enter\n * script data double escaped state (see: https://www.w3.org/TR/html53/syntax.html#script-data-double-escaped-state)\n *\n * While untrusted script content should be made safe before using this api it will\n * ensure that the script cannot be early terminated or never terminated state\n */\n\nfunction escapeBootstrapScriptContent(scriptText) {\n  {\n    checkHtmlStringCoercion(scriptText);\n  }\n\n  return ('' + scriptText).replace(scriptRegex, scriptReplacer);\n}\n\nvar scriptRegex = /(<\\/|<)(s)(cript)/gi;\n\nvar scriptReplacer = function (match, prefix, s, suffix) {\n  return \"\" + prefix + (s === 's' ? \"\\\\u0073\" : \"\\\\u0053\") + suffix;\n}; // Allows us to keep track of what we've already written so we can refer back to it.\n\n\nfunction createResponseState(identifierPrefix, nonce, bootstrapScriptContent, bootstrapScripts, bootstrapModules) {\n  var idPrefix = identifierPrefix === undefined ? '' : identifierPrefix;\n  var inlineScriptWithNonce = nonce === undefined ? startInlineScript : stringToPrecomputedChunk('<script nonce=\"' + escapeTextForBrowser(nonce) + '\">');\n  var bootstrapChunks = [];\n\n  if (bootstrapScriptContent !== undefined) {\n    bootstrapChunks.push(inlineScriptWithNonce, stringToChunk(escapeBootstrapScriptContent(bootstrapScriptContent)), endInlineScript);\n  }\n\n  if (bootstrapScripts !== undefined) {\n    for (var i = 0; i < bootstrapScripts.length; i++) {\n      bootstrapChunks.push(startScriptSrc, stringToChunk(escapeTextForBrowser(bootstrapScripts[i])), endAsyncScript);\n    }\n  }\n\n  if (bootstrapModules !== undefined) {\n    for (var _i = 0; _i < bootstrapModules.length; _i++) {\n      bootstrapChunks.push(startModuleSrc, stringToChunk(escapeTextForBrowser(bootstrapModules[_i])), endAsyncScript);\n    }\n  }\n\n  return {\n    bootstrapChunks: bootstrapChunks,\n    startInlineScript: inlineScriptWithNonce,\n    placeholderPrefix: stringToPrecomputedChunk(idPrefix + 'P:'),\n    segmentPrefix: stringToPrecomputedChunk(idPrefix + 'S:'),\n    boundaryPrefix: idPrefix + 'B:',\n    idPrefix: idPrefix,\n    nextSuspenseID: 0,\n    sentCompleteSegmentFunction: false,\n    sentCompleteBoundaryFunction: false,\n    sentClientRenderFunction: false\n  };\n} // Constants for the insertion mode we're currently writing in. We don't encode all HTML5 insertion\n// modes. We only include the variants as they matter for the sake of our purposes.\n// We don't actually provide the namespace therefore we use constants instead of the string.\n\nvar ROOT_HTML_MODE = 0; // Used for the root most element tag.\n\nvar HTML_MODE = 1;\nvar SVG_MODE = 2;\nvar MATHML_MODE = 3;\nvar HTML_TABLE_MODE = 4;\nvar HTML_TABLE_BODY_MODE = 5;\nvar HTML_TABLE_ROW_MODE = 6;\nvar HTML_COLGROUP_MODE = 7; // We have a greater than HTML_TABLE_MODE check elsewhere. If you add more cases here, make sure it\n// still makes sense\n\nfunction createFormatContext(insertionMode, selectedValue) {\n  return {\n    insertionMode: insertionMode,\n    selectedValue: selectedValue\n  };\n}\n\nfunction createRootFormatContext(namespaceURI) {\n  var insertionMode = namespaceURI === 'http://www.w3.org/2000/svg' ? SVG_MODE : namespaceURI === 'http://www.w3.org/1998/Math/MathML' ? MATHML_MODE : ROOT_HTML_MODE;\n  return createFormatContext(insertionMode, null);\n}\nfunction getChildFormatContext(parentContext, type, props) {\n  switch (type) {\n    case 'select':\n      return createFormatContext(HTML_MODE, props.value != null ? props.value : props.defaultValue);\n\n    case 'svg':\n      return createFormatContext(SVG_MODE, null);\n\n    case 'math':\n      return createFormatContext(MATHML_MODE, null);\n\n    case 'foreignObject':\n      return createFormatContext(HTML_MODE, null);\n    // Table parents are special in that their children can only be created at all if they're\n    // wrapped in a table parent. So we need to encode that we're entering this mode.\n\n    case 'table':\n      return createFormatContext(HTML_TABLE_MODE, null);\n\n    case 'thead':\n    case 'tbody':\n    case 'tfoot':\n      return createFormatContext(HTML_TABLE_BODY_MODE, null);\n\n    case 'colgroup':\n      return createFormatContext(HTML_COLGROUP_MODE, null);\n\n    case 'tr':\n      return createFormatContext(HTML_TABLE_ROW_MODE, null);\n  }\n\n  if (parentContext.insertionMode >= HTML_TABLE_MODE) {\n    // Whatever tag this was, it wasn't a table parent or other special parent, so we must have\n    // entered plain HTML again.\n    return createFormatContext(HTML_MODE, null);\n  }\n\n  if (parentContext.insertionMode === ROOT_HTML_MODE) {\n    // We've emitted the root and is now in plain HTML mode.\n    return createFormatContext(HTML_MODE, null);\n  }\n\n  return parentContext;\n}\nvar UNINITIALIZED_SUSPENSE_BOUNDARY_ID = null;\nfunction assignSuspenseBoundaryID(responseState) {\n  var generatedID = responseState.nextSuspenseID++;\n  return stringToPrecomputedChunk(responseState.boundaryPrefix + generatedID.toString(16));\n}\nfunction makeId(responseState, treeId, localId) {\n  var idPrefix = responseState.idPrefix;\n  var id = ':' + idPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end\n  // that represents the position of this useId hook among all the useId\n  // hooks for this fiber.\n\n  if (localId > 0) {\n    id += 'H' + localId.toString(32);\n  }\n\n  return id + ':';\n}\n\nfunction encodeHTMLTextNode(text) {\n  return escapeTextForBrowser(text);\n}\n\nvar textSeparator = stringToPrecomputedChunk('<!-- -->');\nfunction pushTextInstance(target, text, responseState, textEmbedded) {\n  if (text === '') {\n    // Empty text doesn't have a DOM node representation and the hydration is aware of this.\n    return textEmbedded;\n  }\n\n  if (textEmbedded) {\n    target.push(textSeparator);\n  }\n\n  target.push(stringToChunk(encodeHTMLTextNode(text)));\n  return true;\n} // Called when Fizz is done with a Segment. Currently the only purpose is to conditionally\n// emit a text separator when we don't know for sure it is safe to omit\n\nfunction pushSegmentFinale(target, responseState, lastPushedText, textEmbedded) {\n  if (lastPushedText && textEmbedded) {\n    target.push(textSeparator);\n  }\n}\nvar styleNameCache = new Map();\n\nfunction processStyleName(styleName) {\n  var chunk = styleNameCache.get(styleName);\n\n  if (chunk !== undefined) {\n    return chunk;\n  }\n\n  var result = stringToPrecomputedChunk(escapeTextForBrowser(hyphenateStyleName(styleName)));\n  styleNameCache.set(styleName, result);\n  return result;\n}\n\nvar styleAttributeStart = stringToPrecomputedChunk(' style=\"');\nvar styleAssign = stringToPrecomputedChunk(':');\nvar styleSeparator = stringToPrecomputedChunk(';');\n\nfunction pushStyle(target, responseState, style) {\n  if (typeof style !== 'object') {\n    throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n  }\n\n  var isFirst = true;\n\n  for (var styleName in style) {\n    if (!hasOwnProperty.call(style, styleName)) {\n      continue;\n    } // If you provide unsafe user data here they can inject arbitrary CSS\n    // which may be problematic (I couldn't repro this):\n    // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n    // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n    // This is not an XSS hole but instead a potential CSS injection issue\n    // which has lead to a greater discussion about how we're going to\n    // trust URLs moving forward. See #2115901\n\n\n    var styleValue = style[styleName];\n\n    if (styleValue == null || typeof styleValue === 'boolean' || styleValue === '') {\n      // TODO: We used to set empty string as a style with an empty value. Does that ever make sense?\n      continue;\n    }\n\n    var nameChunk = void 0;\n    var valueChunk = void 0;\n    var isCustomProperty = styleName.indexOf('--') === 0;\n\n    if (isCustomProperty) {\n      nameChunk = stringToChunk(escapeTextForBrowser(styleName));\n\n      {\n        checkCSSPropertyStringCoercion(styleValue, styleName);\n      }\n\n      valueChunk = stringToChunk(escapeTextForBrowser(('' + styleValue).trim()));\n    } else {\n      {\n        warnValidStyle$1(styleName, styleValue);\n      }\n\n      nameChunk = processStyleName(styleName);\n\n      if (typeof styleValue === 'number') {\n        if (styleValue !== 0 && !hasOwnProperty.call(isUnitlessNumber, styleName)) {\n          valueChunk = stringToChunk(styleValue + 'px'); // Presumes implicit 'px' suffix for unitless numbers\n        } else {\n          valueChunk = stringToChunk('' + styleValue);\n        }\n      } else {\n        {\n          checkCSSPropertyStringCoercion(styleValue, styleName);\n        }\n\n        valueChunk = stringToChunk(escapeTextForBrowser(('' + styleValue).trim()));\n      }\n    }\n\n    if (isFirst) {\n      isFirst = false; // If it's first, we don't need any separators prefixed.\n\n      target.push(styleAttributeStart, nameChunk, styleAssign, valueChunk);\n    } else {\n      target.push(styleSeparator, nameChunk, styleAssign, valueChunk);\n    }\n  }\n\n  if (!isFirst) {\n    target.push(attributeEnd);\n  }\n}\n\nvar attributeSeparator = stringToPrecomputedChunk(' ');\nvar attributeAssign = stringToPrecomputedChunk('=\"');\nvar attributeEnd = stringToPrecomputedChunk('\"');\nvar attributeEmptyString = stringToPrecomputedChunk('=\"\"');\n\nfunction pushAttribute(target, responseState, name, value) {\n  switch (name) {\n    case 'style':\n      {\n        pushStyle(target, responseState, value);\n        return;\n      }\n\n    case 'defaultValue':\n    case 'defaultChecked': // These shouldn't be set as attributes on generic HTML elements.\n\n    case 'innerHTML': // Must use dangerouslySetInnerHTML instead.\n\n    case 'suppressContentEditableWarning':\n    case 'suppressHydrationWarning':\n      // Ignored. These are built-in to React on the client.\n      return;\n  }\n\n  if ( // shouldIgnoreAttribute\n  // We have already filtered out null/undefined and reserved words.\n  name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n    return;\n  }\n\n  var propertyInfo = getPropertyInfo(name);\n\n  if (propertyInfo !== null) {\n    // shouldRemoveAttribute\n    switch (typeof value) {\n      case 'function': // $FlowIssue symbol is perfectly valid here\n\n      case 'symbol':\n        // eslint-disable-line\n        return;\n\n      case 'boolean':\n        {\n          if (!propertyInfo.acceptsBooleans) {\n            return;\n          }\n        }\n    }\n\n    var attributeName = propertyInfo.attributeName;\n    var attributeNameChunk = stringToChunk(attributeName); // TODO: If it's known we can cache the chunk.\n\n    switch (propertyInfo.type) {\n      case BOOLEAN:\n        if (value) {\n          target.push(attributeSeparator, attributeNameChunk, attributeEmptyString);\n        }\n\n        return;\n\n      case OVERLOADED_BOOLEAN:\n        if (value === true) {\n          target.push(attributeSeparator, attributeNameChunk, attributeEmptyString);\n        } else if (value === false) ; else {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        return;\n\n      case NUMERIC:\n        if (!isNaN(value)) {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        break;\n\n      case POSITIVE_NUMERIC:\n        if (!isNaN(value) && value >= 1) {\n          target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n        }\n\n        break;\n\n      default:\n        if (propertyInfo.sanitizeURL) {\n          {\n            checkAttributeStringCoercion(value, attributeName);\n          }\n\n          value = '' + value;\n          sanitizeURL(value);\n        }\n\n        target.push(attributeSeparator, attributeNameChunk, attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n    }\n  } else if (isAttributeNameSafe(name)) {\n    // shouldRemoveAttribute\n    switch (typeof value) {\n      case 'function': // $FlowIssue symbol is perfectly valid here\n\n      case 'symbol':\n        // eslint-disable-line\n        return;\n\n      case 'boolean':\n        {\n          var prefix = name.toLowerCase().slice(0, 5);\n\n          if (prefix !== 'data-' && prefix !== 'aria-') {\n            return;\n          }\n        }\n    }\n\n    target.push(attributeSeparator, stringToChunk(name), attributeAssign, stringToChunk(escapeTextForBrowser(value)), attributeEnd);\n  }\n}\n\nvar endOfStartTag = stringToPrecomputedChunk('>');\nvar endOfStartTagSelfClosing = stringToPrecomputedChunk('/>');\n\nfunction pushInnerHTML(target, innerHTML, children) {\n  if (innerHTML != null) {\n    if (children != null) {\n      throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n    }\n\n    if (typeof innerHTML !== 'object' || !('__html' in innerHTML)) {\n      throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n    }\n\n    var html = innerHTML.__html;\n\n    if (html !== null && html !== undefined) {\n      {\n        checkHtmlStringCoercion(html);\n      }\n\n      target.push(stringToChunk('' + html));\n    }\n  }\n} // TODO: Move these to ResponseState so that we warn for every request.\n// It would help debugging in stateful servers (e.g. service worker).\n\n\nvar didWarnDefaultInputValue = false;\nvar didWarnDefaultChecked = false;\nvar didWarnDefaultSelectValue = false;\nvar didWarnDefaultTextareaValue = false;\nvar didWarnInvalidOptionChildren = false;\nvar didWarnInvalidOptionInnerHTML = false;\nvar didWarnSelectedSetOnOption = false;\n\nfunction checkSelectProp(props, propName) {\n  {\n    var value = props[propName];\n\n    if (value != null) {\n      var array = isArray(value);\n\n      if (props.multiple && !array) {\n        error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.', propName);\n      } else if (!props.multiple && array) {\n        error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.', propName);\n      }\n    }\n  }\n}\n\nfunction pushStartSelect(target, props, responseState) {\n  {\n    checkControlledValueProps('select', props);\n    checkSelectProp(props, 'value');\n    checkSelectProp(props, 'defaultValue');\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultSelectValue) {\n      error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n      didWarnDefaultSelectValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('select'));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          // TODO: This doesn't really make sense for select since it can't use the controlled\n          // value in the innerHTML.\n          innerHTML = propValue;\n          break;\n\n        case 'defaultValue':\n        case 'value':\n          // These are set on the Context instead and applied to the nested options.\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nfunction flattenOptionChildren(children) {\n  var content = ''; // Flatten children and warn if they aren't strings or numbers;\n  // invalid types are ignored.\n\n  React.Children.forEach(children, function (child) {\n    if (child == null) {\n      return;\n    }\n\n    content += child;\n\n    {\n      if (!didWarnInvalidOptionChildren && typeof child !== 'string' && typeof child !== 'number') {\n        didWarnInvalidOptionChildren = true;\n\n        error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');\n      }\n    }\n  });\n  return content;\n}\n\nvar selectedMarkerAttribute = stringToPrecomputedChunk(' selected=\"\"');\n\nfunction pushStartOption(target, props, responseState, formatContext) {\n  var selectedValue = formatContext.selectedValue;\n  target.push(startChunkForTag('option'));\n  var children = null;\n  var value = null;\n  var selected = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'selected':\n          // ignore\n          selected = propValue;\n\n          {\n            // TODO: Remove support for `selected` in <option>.\n            if (!didWarnSelectedSetOnOption) {\n              error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n              didWarnSelectedSetOnOption = true;\n            }\n          }\n\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n        // eslint-disable-next-line-no-fallthrough\n\n        case 'value':\n          value = propValue;\n        // We intentionally fallthrough to also set the attribute on the node.\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (selectedValue != null) {\n    var stringValue;\n\n    if (value !== null) {\n      {\n        checkAttributeStringCoercion(value, 'value');\n      }\n\n      stringValue = '' + value;\n    } else {\n      {\n        if (innerHTML !== null) {\n          if (!didWarnInvalidOptionInnerHTML) {\n            didWarnInvalidOptionInnerHTML = true;\n\n            error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');\n          }\n        }\n      }\n\n      stringValue = flattenOptionChildren(children);\n    }\n\n    if (isArray(selectedValue)) {\n      // multiple\n      for (var i = 0; i < selectedValue.length; i++) {\n        {\n          checkAttributeStringCoercion(selectedValue[i], 'value');\n        }\n\n        var v = '' + selectedValue[i];\n\n        if (v === stringValue) {\n          target.push(selectedMarkerAttribute);\n          break;\n        }\n      }\n    } else {\n      {\n        checkAttributeStringCoercion(selectedValue, 'select.value');\n      }\n\n      if ('' + selectedValue === stringValue) {\n        target.push(selectedMarkerAttribute);\n      }\n    }\n  } else if (selected) {\n    target.push(selectedMarkerAttribute);\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nfunction pushInput(target, props, responseState) {\n  {\n    checkControlledValueProps('input', props);\n\n    if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnDefaultChecked) {\n      error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', 'A component', props.type);\n\n      didWarnDefaultChecked = true;\n    }\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultInputValue) {\n      error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', 'A component', props.type);\n\n      didWarnDefaultInputValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('input'));\n  var value = null;\n  var defaultValue = null;\n  var checked = null;\n  var defaultChecked = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error('input' + \" is a self-closing tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        case 'defaultChecked':\n          defaultChecked = propValue;\n          break;\n\n        case 'defaultValue':\n          defaultValue = propValue;\n          break;\n\n        case 'checked':\n          checked = propValue;\n          break;\n\n        case 'value':\n          value = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (checked !== null) {\n    pushAttribute(target, responseState, 'checked', checked);\n  } else if (defaultChecked !== null) {\n    pushAttribute(target, responseState, 'checked', defaultChecked);\n  }\n\n  if (value !== null) {\n    pushAttribute(target, responseState, 'value', value);\n  } else if (defaultValue !== null) {\n    pushAttribute(target, responseState, 'value', defaultValue);\n  }\n\n  target.push(endOfStartTagSelfClosing);\n  return null;\n}\n\nfunction pushStartTextArea(target, props, responseState) {\n  {\n    checkControlledValueProps('textarea', props);\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultTextareaValue) {\n      error('Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n      didWarnDefaultTextareaValue = true;\n    }\n  }\n\n  target.push(startChunkForTag('textarea'));\n  var value = null;\n  var defaultValue = null;\n  var children = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'value':\n          value = propValue;\n          break;\n\n        case 'defaultValue':\n          defaultValue = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  if (value === null && defaultValue !== null) {\n    value = defaultValue;\n  }\n\n  target.push(endOfStartTag); // TODO (yungsters): Remove support for children content in <textarea>.\n\n  if (children != null) {\n    {\n      error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n    }\n\n    if (value != null) {\n      throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');\n    }\n\n    if (isArray(children)) {\n      if (children.length > 1) {\n        throw new Error('<textarea> can only have at most one child.');\n      } // TODO: remove the coercion and the DEV check below because it will\n      // always be overwritten by the coercion several lines below it. #22309\n\n\n      {\n        checkHtmlStringCoercion(children[0]);\n      }\n\n      value = '' + children[0];\n    }\n\n    {\n      checkHtmlStringCoercion(children);\n    }\n\n    value = '' + children;\n  }\n\n  if (typeof value === 'string' && value[0] === '\\n') {\n    // text/html ignores the first character in these tags if it's a newline\n    // Prefer to break application/xml over text/html (for now) by adding\n    // a newline specifically to get eaten by the parser. (Alternately for\n    // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n    // \\r is normalized out by HTMLTextAreaElement#value.)\n    // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n    // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n    // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n    // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n    //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n    target.push(leadingNewline);\n  } // ToString and push directly instead of recurse over children.\n  // We don't really support complex children in the value anyway.\n  // This also currently avoids a trailing comment node which breaks textarea.\n\n\n  if (value !== null) {\n    {\n      checkAttributeStringCoercion(value, 'value');\n    }\n\n    target.push(stringToChunk(encodeHTMLTextNode('' + value)));\n  }\n\n  return null;\n}\n\nfunction pushSelfClosing(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error(tag + \" is a self-closing tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTagSelfClosing);\n  return null;\n}\n\nfunction pushStartMenuItem(target, props, responseState) {\n  target.push(startChunkForTag('menuitem'));\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n        case 'dangerouslySetInnerHTML':\n          throw new Error('menuitems cannot have `children` nor `dangerouslySetInnerHTML`.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  return null;\n}\n\nfunction pushStartTitle(target, props, responseState) {\n  target.push(startChunkForTag('title'));\n  var children = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          throw new Error('`dangerouslySetInnerHTML` does not make sense on <title>.');\n        // eslint-disable-next-line-no-fallthrough\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n\n  {\n    var child = Array.isArray(children) && children.length < 2 ? children[0] || null : children;\n\n    if (Array.isArray(children) && children.length > 1) {\n      error('A title element received an array with more than 1 element as children. ' + 'In browsers title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    } else if (child != null && child.$$typeof != null) {\n      error('A title element received a React element for children. ' + 'In the browser title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    } else if (child != null && typeof child !== 'string' && typeof child !== 'number') {\n      error('A title element received a value that was not a string or number for children. ' + 'In the browser title Elements can only have Text Nodes as children. If ' + 'the children being rendered output more than a single text node in aggregate the browser ' + 'will display markup and comments as text in the title and hydration will likely fail and ' + 'fall back to client rendering');\n    }\n  }\n\n  return children;\n}\n\nfunction pushStartGenericElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n\n  if (typeof children === 'string') {\n    // Special case children as a string to avoid the unnecessary comment.\n    // TODO: Remove this special case after the general optimization is in place.\n    target.push(stringToChunk(encodeHTMLTextNode(children)));\n    return null;\n  }\n\n  return children;\n}\n\nfunction pushStartCustomElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        case 'style':\n          pushStyle(target, responseState, propValue);\n          break;\n\n        case 'suppressContentEditableWarning':\n        case 'suppressHydrationWarning':\n          // Ignored. These are built-in to React on the client.\n          break;\n\n        default:\n          if (isAttributeNameSafe(propKey) && typeof propValue !== 'function' && typeof propValue !== 'symbol') {\n            target.push(attributeSeparator, stringToChunk(propKey), attributeAssign, stringToChunk(escapeTextForBrowser(propValue)), attributeEnd);\n          }\n\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag);\n  pushInnerHTML(target, innerHTML, children);\n  return children;\n}\n\nvar leadingNewline = stringToPrecomputedChunk('\\n');\n\nfunction pushStartPreformattedElement(target, props, tag, responseState) {\n  target.push(startChunkForTag(tag));\n  var children = null;\n  var innerHTML = null;\n\n  for (var propKey in props) {\n    if (hasOwnProperty.call(props, propKey)) {\n      var propValue = props[propKey];\n\n      if (propValue == null) {\n        continue;\n      }\n\n      switch (propKey) {\n        case 'children':\n          children = propValue;\n          break;\n\n        case 'dangerouslySetInnerHTML':\n          innerHTML = propValue;\n          break;\n\n        default:\n          pushAttribute(target, responseState, propKey, propValue);\n          break;\n      }\n    }\n  }\n\n  target.push(endOfStartTag); // text/html ignores the first character in these tags if it's a newline\n  // Prefer to break application/xml over text/html (for now) by adding\n  // a newline specifically to get eaten by the parser. (Alternately for\n  // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n  // \\r is normalized out by HTMLTextAreaElement#value.)\n  // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n  // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n  // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n  // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n  //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n  // TODO: This doesn't deal with the case where the child is an array\n  // or component that returns a string.\n\n  if (innerHTML != null) {\n    if (children != null) {\n      throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n    }\n\n    if (typeof innerHTML !== 'object' || !('__html' in innerHTML)) {\n      throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n    }\n\n    var html = innerHTML.__html;\n\n    if (html !== null && html !== undefined) {\n      if (typeof html === 'string' && html.length > 0 && html[0] === '\\n') {\n        target.push(leadingNewline, stringToChunk(html));\n      } else {\n        {\n          checkHtmlStringCoercion(html);\n        }\n\n        target.push(stringToChunk('' + html));\n      }\n    }\n  }\n\n  if (typeof children === 'string' && children[0] === '\\n') {\n    target.push(leadingNewline);\n  }\n\n  return children;\n} // We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\n\nvar validatedTagCache = new Map();\n\nfunction startChunkForTag(tag) {\n  var tagStartChunk = validatedTagCache.get(tag);\n\n  if (tagStartChunk === undefined) {\n    if (!VALID_TAG_REGEX.test(tag)) {\n      throw new Error(\"Invalid tag: \" + tag);\n    }\n\n    tagStartChunk = stringToPrecomputedChunk('<' + tag);\n    validatedTagCache.set(tag, tagStartChunk);\n  }\n\n  return tagStartChunk;\n}\n\nvar DOCTYPE = stringToPrecomputedChunk('<!DOCTYPE html>');\nfunction pushStartInstance(target, type, props, responseState, formatContext) {\n  {\n    validateProperties(type, props);\n    validateProperties$1(type, props);\n    validateProperties$2(type, props, null);\n\n    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n      error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n    }\n\n    if (formatContext.insertionMode !== SVG_MODE && formatContext.insertionMode !== MATHML_MODE) {\n      if (type.indexOf('-') === -1 && typeof props.is !== 'string' && type.toLowerCase() !== type) {\n        error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n      }\n    }\n  }\n\n  switch (type) {\n    // Special tags\n    case 'select':\n      return pushStartSelect(target, props, responseState);\n\n    case 'option':\n      return pushStartOption(target, props, responseState, formatContext);\n\n    case 'textarea':\n      return pushStartTextArea(target, props, responseState);\n\n    case 'input':\n      return pushInput(target, props, responseState);\n\n    case 'menuitem':\n      return pushStartMenuItem(target, props, responseState);\n\n    case 'title':\n      return pushStartTitle(target, props, responseState);\n    // Newline eating tags\n\n    case 'listing':\n    case 'pre':\n      {\n        return pushStartPreformattedElement(target, props, type, responseState);\n      }\n    // Omitted close tags\n\n    case 'area':\n    case 'base':\n    case 'br':\n    case 'col':\n    case 'embed':\n    case 'hr':\n    case 'img':\n    case 'keygen':\n    case 'link':\n    case 'meta':\n    case 'param':\n    case 'source':\n    case 'track':\n    case 'wbr':\n      {\n        return pushSelfClosing(target, props, type, responseState);\n      }\n    // These are reserved SVG and MathML elements, that are never custom elements.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      {\n        return pushStartGenericElement(target, props, type, responseState);\n      }\n\n    case 'html':\n      {\n        if (formatContext.insertionMode === ROOT_HTML_MODE) {\n          // If we're rendering the html tag and we're at the root (i.e. not in foreignObject)\n          // then we also emit the DOCTYPE as part of the root content as a convenience for\n          // rendering the whole document.\n          target.push(DOCTYPE);\n        }\n\n        return pushStartGenericElement(target, props, type, responseState);\n      }\n\n    default:\n      {\n        if (type.indexOf('-') === -1 && typeof props.is !== 'string') {\n          // Generic element\n          return pushStartGenericElement(target, props, type, responseState);\n        } else {\n          // Custom element\n          return pushStartCustomElement(target, props, type, responseState);\n        }\n      }\n  }\n}\nvar endTag1 = stringToPrecomputedChunk('</');\nvar endTag2 = stringToPrecomputedChunk('>');\nfunction pushEndInstance(target, type, props) {\n  switch (type) {\n    // Omitted close tags\n    // TODO: Instead of repeating this switch we could try to pass a flag from above.\n    // That would require returning a tuple. Which might be ok if it gets inlined.\n    case 'area':\n    case 'base':\n    case 'br':\n    case 'col':\n    case 'embed':\n    case 'hr':\n    case 'img':\n    case 'input':\n    case 'keygen':\n    case 'link':\n    case 'meta':\n    case 'param':\n    case 'source':\n    case 'track':\n    case 'wbr':\n      {\n        // No close tag needed.\n        break;\n      }\n\n    default:\n      {\n        target.push(endTag1, stringToChunk(type), endTag2);\n      }\n  }\n}\nfunction writeCompletedRoot(destination, responseState) {\n  var bootstrapChunks = responseState.bootstrapChunks;\n  var i = 0;\n\n  for (; i < bootstrapChunks.length - 1; i++) {\n    writeChunk(destination, bootstrapChunks[i]);\n  }\n\n  if (i < bootstrapChunks.length) {\n    return writeChunkAndReturn(destination, bootstrapChunks[i]);\n  }\n\n  return true;\n} // Structural Nodes\n// A placeholder is a node inside a hidden partial tree that can be filled in later, but before\n// display. It's never visible to users. We use the template tag because it can be used in every\n// type of parent. <script> tags also work in every other tag except <colgroup>.\n\nvar placeholder1 = stringToPrecomputedChunk('<template id=\"');\nvar placeholder2 = stringToPrecomputedChunk('\"></template>');\nfunction writePlaceholder(destination, responseState, id) {\n  writeChunk(destination, placeholder1);\n  writeChunk(destination, responseState.placeholderPrefix);\n  var formattedID = stringToChunk(id.toString(16));\n  writeChunk(destination, formattedID);\n  return writeChunkAndReturn(destination, placeholder2);\n} // Suspense boundaries are encoded as comments.\n\nvar startCompletedSuspenseBoundary = stringToPrecomputedChunk('<!--$-->');\nvar startPendingSuspenseBoundary1 = stringToPrecomputedChunk('<!--$?--><template id=\"');\nvar startPendingSuspenseBoundary2 = stringToPrecomputedChunk('\"></template>');\nvar startClientRenderedSuspenseBoundary = stringToPrecomputedChunk('<!--$!-->');\nvar endSuspenseBoundary = stringToPrecomputedChunk('<!--/$-->');\nvar clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk('<template');\nvar clientRenderedSuspenseBoundaryErrorAttrInterstitial = stringToPrecomputedChunk('\"');\nvar clientRenderedSuspenseBoundaryError1A = stringToPrecomputedChunk(' data-dgst=\"');\nvar clientRenderedSuspenseBoundaryError1B = stringToPrecomputedChunk(' data-msg=\"');\nvar clientRenderedSuspenseBoundaryError1C = stringToPrecomputedChunk(' data-stck=\"');\nvar clientRenderedSuspenseBoundaryError2 = stringToPrecomputedChunk('></template>');\nfunction writeStartCompletedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, startCompletedSuspenseBoundary);\n}\nfunction writeStartPendingSuspenseBoundary(destination, responseState, id) {\n  writeChunk(destination, startPendingSuspenseBoundary1);\n\n  if (id === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  writeChunk(destination, id);\n  return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);\n}\nfunction writeStartClientRenderedSuspenseBoundary(destination, responseState, errorDigest, errorMesssage, errorComponentStack) {\n  var result;\n  result = writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);\n  writeChunk(destination, clientRenderedSuspenseBoundaryError1);\n\n  if (errorDigest) {\n    writeChunk(destination, clientRenderedSuspenseBoundaryError1A);\n    writeChunk(destination, stringToChunk(escapeTextForBrowser(errorDigest)));\n    writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n  }\n\n  {\n    if (errorMesssage) {\n      writeChunk(destination, clientRenderedSuspenseBoundaryError1B);\n      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorMesssage)));\n      writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n    }\n\n    if (errorComponentStack) {\n      writeChunk(destination, clientRenderedSuspenseBoundaryError1C);\n      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorComponentStack)));\n      writeChunk(destination, clientRenderedSuspenseBoundaryErrorAttrInterstitial);\n    }\n  }\n\n  result = writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);\n  return result;\n}\nfunction writeEndCompletedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nfunction writeEndPendingSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nfunction writeEndClientRenderedSuspenseBoundary(destination, responseState) {\n  return writeChunkAndReturn(destination, endSuspenseBoundary);\n}\nvar startSegmentHTML = stringToPrecomputedChunk('<div hidden id=\"');\nvar startSegmentHTML2 = stringToPrecomputedChunk('\">');\nvar endSegmentHTML = stringToPrecomputedChunk('</div>');\nvar startSegmentSVG = stringToPrecomputedChunk('<svg aria-hidden=\"true\" style=\"display:none\" id=\"');\nvar startSegmentSVG2 = stringToPrecomputedChunk('\">');\nvar endSegmentSVG = stringToPrecomputedChunk('</svg>');\nvar startSegmentMathML = stringToPrecomputedChunk('<math aria-hidden=\"true\" style=\"display:none\" id=\"');\nvar startSegmentMathML2 = stringToPrecomputedChunk('\">');\nvar endSegmentMathML = stringToPrecomputedChunk('</math>');\nvar startSegmentTable = stringToPrecomputedChunk('<table hidden id=\"');\nvar startSegmentTable2 = stringToPrecomputedChunk('\">');\nvar endSegmentTable = stringToPrecomputedChunk('</table>');\nvar startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id=\"');\nvar startSegmentTableBody2 = stringToPrecomputedChunk('\">');\nvar endSegmentTableBody = stringToPrecomputedChunk('</tbody></table>');\nvar startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id=\"');\nvar startSegmentTableRow2 = stringToPrecomputedChunk('\">');\nvar endSegmentTableRow = stringToPrecomputedChunk('</tr></table>');\nvar startSegmentColGroup = stringToPrecomputedChunk('<table hidden><colgroup id=\"');\nvar startSegmentColGroup2 = stringToPrecomputedChunk('\">');\nvar endSegmentColGroup = stringToPrecomputedChunk('</colgroup></table>');\nfunction writeStartSegment(destination, responseState, formatContext, id) {\n  switch (formatContext.insertionMode) {\n    case ROOT_HTML_MODE:\n    case HTML_MODE:\n      {\n        writeChunk(destination, startSegmentHTML);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentHTML2);\n      }\n\n    case SVG_MODE:\n      {\n        writeChunk(destination, startSegmentSVG);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentSVG2);\n      }\n\n    case MATHML_MODE:\n      {\n        writeChunk(destination, startSegmentMathML);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentMathML2);\n      }\n\n    case HTML_TABLE_MODE:\n      {\n        writeChunk(destination, startSegmentTable);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTable2);\n      }\n    // TODO: For the rest of these, there will be extra wrapper nodes that never\n    // get deleted from the document. We need to delete the table too as part\n    // of the injected scripts. They are invisible though so it's not too terrible\n    // and it's kind of an edge case to suspend in a table. Totally supported though.\n\n    case HTML_TABLE_BODY_MODE:\n      {\n        writeChunk(destination, startSegmentTableBody);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTableBody2);\n      }\n\n    case HTML_TABLE_ROW_MODE:\n      {\n        writeChunk(destination, startSegmentTableRow);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentTableRow2);\n      }\n\n    case HTML_COLGROUP_MODE:\n      {\n        writeChunk(destination, startSegmentColGroup);\n        writeChunk(destination, responseState.segmentPrefix);\n        writeChunk(destination, stringToChunk(id.toString(16)));\n        return writeChunkAndReturn(destination, startSegmentColGroup2);\n      }\n\n    default:\n      {\n        throw new Error('Unknown insertion mode. This is a bug in React.');\n      }\n  }\n}\nfunction writeEndSegment(destination, formatContext) {\n  switch (formatContext.insertionMode) {\n    case ROOT_HTML_MODE:\n    case HTML_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentHTML);\n      }\n\n    case SVG_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentSVG);\n      }\n\n    case MATHML_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentMathML);\n      }\n\n    case HTML_TABLE_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTable);\n      }\n\n    case HTML_TABLE_BODY_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTableBody);\n      }\n\n    case HTML_TABLE_ROW_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentTableRow);\n      }\n\n    case HTML_COLGROUP_MODE:\n      {\n        return writeChunkAndReturn(destination, endSegmentColGroup);\n      }\n\n    default:\n      {\n        throw new Error('Unknown insertion mode. This is a bug in React.');\n      }\n  }\n} // Instruction Set\n// The following code is the source scripts that we then minify and inline below,\n// with renamed function names that we hope don't collide:\n// const COMMENT_NODE = 8;\n// const SUSPENSE_START_DATA = '$';\n// const SUSPENSE_END_DATA = '/$';\n// const SUSPENSE_PENDING_START_DATA = '$?';\n// const SUSPENSE_FALLBACK_START_DATA = '$!';\n//\n// function clientRenderBoundary(suspenseBoundaryID, errorDigest, errorMsg, errorComponentStack) {\n//   // Find the fallback's first element.\n//   const suspenseIdNode = document.getElementById(suspenseBoundaryID);\n//   if (!suspenseIdNode) {\n//     // The user must have already navigated away from this tree.\n//     // E.g. because the parent was hydrated.\n//     return;\n//   }\n//   // Find the boundary around the fallback. This is always the previous node.\n//   const suspenseNode = suspenseIdNode.previousSibling;\n//   // Tag it to be client rendered.\n//   suspenseNode.data = SUSPENSE_FALLBACK_START_DATA;\n//   // assign error metadata to first sibling\n//   let dataset = suspenseIdNode.dataset;\n//   if (errorDigest) dataset.dgst = errorDigest;\n//   if (errorMsg) dataset.msg = errorMsg;\n//   if (errorComponentStack) dataset.stck = errorComponentStack;\n//   // Tell React to retry it if the parent already hydrated.\n//   if (suspenseNode._reactRetry) {\n//     suspenseNode._reactRetry();\n//   }\n// }\n//\n// function completeBoundary(suspenseBoundaryID, contentID) {\n//   // Find the fallback's first element.\n//   const suspenseIdNode = document.getElementById(suspenseBoundaryID);\n//   const contentNode = document.getElementById(contentID);\n//   // We'll detach the content node so that regardless of what happens next we don't leave in the tree.\n//   // This might also help by not causing recalcing each time we move a child from here to the target.\n//   contentNode.parentNode.removeChild(contentNode);\n//   if (!suspenseIdNode) {\n//     // The user must have already navigated away from this tree.\n//     // E.g. because the parent was hydrated. That's fine there's nothing to do\n//     // but we have to make sure that we already deleted the container node.\n//     return;\n//   }\n//   // Find the boundary around the fallback. This is always the previous node.\n//   const suspenseNode = suspenseIdNode.previousSibling;\n//\n//   // Clear all the existing children. This is complicated because\n//   // there can be embedded Suspense boundaries in the fallback.\n//   // This is similar to clearSuspenseBoundary in ReactDOMHostConfig.\n//   // TODO: We could avoid this if we never emitted suspense boundaries in fallback trees.\n//   // They never hydrate anyway. However, currently we support incrementally loading the fallback.\n//   const parentInstance = suspenseNode.parentNode;\n//   let node = suspenseNode.nextSibling;\n//   let depth = 0;\n//   do {\n//     if (node && node.nodeType === COMMENT_NODE) {\n//       const data = node.data;\n//       if (data === SUSPENSE_END_DATA) {\n//         if (depth === 0) {\n//           break;\n//         } else {\n//           depth--;\n//         }\n//       } else if (\n//         data === SUSPENSE_START_DATA ||\n//         data === SUSPENSE_PENDING_START_DATA ||\n//         data === SUSPENSE_FALLBACK_START_DATA\n//       ) {\n//         depth++;\n//       }\n//     }\n//\n//     const nextNode = node.nextSibling;\n//     parentInstance.removeChild(node);\n//     node = nextNode;\n//   } while (node);\n//\n//   const endOfBoundary = node;\n//\n//   // Insert all the children from the contentNode between the start and end of suspense boundary.\n//   while (contentNode.firstChild) {\n//     parentInstance.insertBefore(contentNode.firstChild, endOfBoundary);\n//   }\n//   suspenseNode.data = SUSPENSE_START_DATA;\n//   if (suspenseNode._reactRetry) {\n//     suspenseNode._reactRetry();\n//   }\n// }\n//\n// function completeSegment(containerID, placeholderID) {\n//   const segmentContainer = document.getElementById(containerID);\n//   const placeholderNode = document.getElementById(placeholderID);\n//   // We always expect both nodes to exist here because, while we might\n//   // have navigated away from the main tree, we still expect the detached\n//   // tree to exist.\n//   segmentContainer.parentNode.removeChild(segmentContainer);\n//   while (segmentContainer.firstChild) {\n//     placeholderNode.parentNode.insertBefore(\n//       segmentContainer.firstChild,\n//       placeholderNode,\n//     );\n//   }\n//   placeholderNode.parentNode.removeChild(placeholderNode);\n// }\n\nvar completeSegmentFunction = 'function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)}';\nvar completeBoundaryFunction = 'function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c&&8===c.nodeType){var d=c.data;if(\"/$\"===d)if(0===e)break;else e--;else\"$\"!==d&&\"$?\"!==d&&\"$!\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\"$\";a._reactRetry&&a._reactRetry()}}';\nvar clientRenderFunction = 'function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data=\"$!\",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())}';\nvar completeSegmentScript1Full = stringToPrecomputedChunk(completeSegmentFunction + ';$RS(\"');\nvar completeSegmentScript1Partial = stringToPrecomputedChunk('$RS(\"');\nvar completeSegmentScript2 = stringToPrecomputedChunk('\",\"');\nvar completeSegmentScript3 = stringToPrecomputedChunk('\")</script>');\nfunction writeCompletedSegmentInstruction(destination, responseState, contentSegmentID) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentCompleteSegmentFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentCompleteSegmentFunction = true;\n    writeChunk(destination, completeSegmentScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, completeSegmentScript1Partial);\n  }\n\n  writeChunk(destination, responseState.segmentPrefix);\n  var formattedID = stringToChunk(contentSegmentID.toString(16));\n  writeChunk(destination, formattedID);\n  writeChunk(destination, completeSegmentScript2);\n  writeChunk(destination, responseState.placeholderPrefix);\n  writeChunk(destination, formattedID);\n  return writeChunkAndReturn(destination, completeSegmentScript3);\n}\nvar completeBoundaryScript1Full = stringToPrecomputedChunk(completeBoundaryFunction + ';$RC(\"');\nvar completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC(\"');\nvar completeBoundaryScript2 = stringToPrecomputedChunk('\",\"');\nvar completeBoundaryScript3 = stringToPrecomputedChunk('\")</script>');\nfunction writeCompletedBoundaryInstruction(destination, responseState, boundaryID, contentSegmentID) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentCompleteBoundaryFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentCompleteBoundaryFunction = true;\n    writeChunk(destination, completeBoundaryScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, completeBoundaryScript1Partial);\n  }\n\n  if (boundaryID === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  var formattedContentID = stringToChunk(contentSegmentID.toString(16));\n  writeChunk(destination, boundaryID);\n  writeChunk(destination, completeBoundaryScript2);\n  writeChunk(destination, responseState.segmentPrefix);\n  writeChunk(destination, formattedContentID);\n  return writeChunkAndReturn(destination, completeBoundaryScript3);\n}\nvar clientRenderScript1Full = stringToPrecomputedChunk(clientRenderFunction + ';$RX(\"');\nvar clientRenderScript1Partial = stringToPrecomputedChunk('$RX(\"');\nvar clientRenderScript1A = stringToPrecomputedChunk('\"');\nvar clientRenderScript2 = stringToPrecomputedChunk(')</script>');\nvar clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(',');\nfunction writeClientRenderBoundaryInstruction(destination, responseState, boundaryID, errorDigest, errorMessage, errorComponentStack) {\n  writeChunk(destination, responseState.startInlineScript);\n\n  if (!responseState.sentClientRenderFunction) {\n    // The first time we write this, we'll need to include the full implementation.\n    responseState.sentClientRenderFunction = true;\n    writeChunk(destination, clientRenderScript1Full);\n  } else {\n    // Future calls can just reuse the same function.\n    writeChunk(destination, clientRenderScript1Partial);\n  }\n\n  if (boundaryID === null) {\n    throw new Error('An ID must have been assigned before we can complete the boundary.');\n  }\n\n  writeChunk(destination, boundaryID);\n  writeChunk(destination, clientRenderScript1A);\n\n  if (errorDigest || errorMessage || errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorDigest || '')));\n  }\n\n  if (errorMessage || errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorMessage || '')));\n  }\n\n  if (errorComponentStack) {\n    writeChunk(destination, clientRenderErrorScriptArgInterstitial);\n    writeChunk(destination, stringToChunk(escapeJSStringsForInstructionScripts(errorComponentStack)));\n  }\n\n  return writeChunkAndReturn(destination, clientRenderScript2);\n}\nvar regexForJSStringsInScripts = /[<\\u2028\\u2029]/g;\n\nfunction escapeJSStringsForInstructionScripts(input) {\n  var escaped = JSON.stringify(input);\n  return escaped.replace(regexForJSStringsInScripts, function (match) {\n    switch (match) {\n      // santizing breaking out of strings and script tags\n      case '<':\n        return \"\\\\u003c\";\n\n      case \"\\u2028\":\n        return \"\\\\u2028\";\n\n      case \"\\u2029\":\n        return \"\\\\u2029\";\n\n      default:\n        {\n          // eslint-disable-next-line react-internal/prod-error-codes\n          throw new Error('escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React');\n        }\n    }\n  });\n}\n\nvar assign = Object.assign;\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SCOPE_TYPE = Symbol.for('react.scope');\nvar REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');\nvar REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');\nvar REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED = Symbol.for('react.default_value');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\n\nfunction describeClassComponentFrame(ctor, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(ctor, true);\n  }\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n  warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n  Object.freeze(emptyContextObject);\n}\n\nfunction getMaskedContext(type, unmaskedContext) {\n  {\n    var contextTypes = type.contextTypes;\n\n    if (!contextTypes) {\n      return emptyContextObject;\n    }\n\n    var context = {};\n\n    for (var key in contextTypes) {\n      context[key] = unmaskedContext[key];\n    }\n\n    {\n      var name = getComponentNameFromType(type) || 'Unknown';\n      checkPropTypes(contextTypes, context, 'context', name);\n    }\n\n    return context;\n  }\n}\nfunction processChildContext(instance, type, parentContext, childContextTypes) {\n  {\n    // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n    // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n    if (typeof instance.getChildContext !== 'function') {\n      {\n        var componentName = getComponentNameFromType(type) || 'Unknown';\n\n        if (!warnedAboutMissingGetChildContext[componentName]) {\n          warnedAboutMissingGetChildContext[componentName] = true;\n\n          error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n        }\n      }\n\n      return parentContext;\n    }\n\n    var childContext = instance.getChildContext();\n\n    for (var contextKey in childContext) {\n      if (!(contextKey in childContextTypes)) {\n        throw new Error((getComponentNameFromType(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\");\n      }\n    }\n\n    {\n      var name = getComponentNameFromType(type) || 'Unknown';\n      checkPropTypes(childContextTypes, childContext, 'child context', name);\n    }\n\n    return assign({}, parentContext, childContext);\n  }\n}\n\nvar rendererSigil;\n\n{\n  // Use this to detect multiple renderers using the same context\n  rendererSigil = {};\n} // Used to store the parent path of all context overrides in a shared linked list.\n// Forming a reverse tree.\n\n\nvar rootContextSnapshot = null; // We assume that this runtime owns the \"current\" field on all ReactContext instances.\n// This global (actually thread local) state represents what state all those \"current\",\n// fields are currently in.\n\nvar currentActiveSnapshot = null;\n\nfunction popNode(prev) {\n  {\n    prev.context._currentValue = prev.parentValue;\n  }\n}\n\nfunction pushNode(next) {\n  {\n    next.context._currentValue = next.value;\n  }\n}\n\nfunction popToNearestCommonAncestor(prev, next) {\n  if (prev === next) ; else {\n    popNode(prev);\n    var parentPrev = prev.parent;\n    var parentNext = next.parent;\n\n    if (parentPrev === null) {\n      if (parentNext !== null) {\n        throw new Error('The stacks must reach the root at the same time. This is a bug in React.');\n      }\n    } else {\n      if (parentNext === null) {\n        throw new Error('The stacks must reach the root at the same time. This is a bug in React.');\n      }\n\n      popToNearestCommonAncestor(parentPrev, parentNext);\n    } // On the way back, we push the new ones that weren't common.\n\n\n    pushNode(next);\n  }\n}\n\nfunction popAllPrevious(prev) {\n  popNode(prev);\n  var parentPrev = prev.parent;\n\n  if (parentPrev !== null) {\n    popAllPrevious(parentPrev);\n  }\n}\n\nfunction pushAllNext(next) {\n  var parentNext = next.parent;\n\n  if (parentNext !== null) {\n    pushAllNext(parentNext);\n  }\n\n  pushNode(next);\n}\n\nfunction popPreviousToCommonLevel(prev, next) {\n  popNode(prev);\n  var parentPrev = prev.parent;\n\n  if (parentPrev === null) {\n    throw new Error('The depth must equal at least at zero before reaching the root. This is a bug in React.');\n  }\n\n  if (parentPrev.depth === next.depth) {\n    // We found the same level. Now we just need to find a shared ancestor.\n    popToNearestCommonAncestor(parentPrev, next);\n  } else {\n    // We must still be deeper.\n    popPreviousToCommonLevel(parentPrev, next);\n  }\n}\n\nfunction popNextToCommonLevel(prev, next) {\n  var parentNext = next.parent;\n\n  if (parentNext === null) {\n    throw new Error('The depth must equal at least at zero before reaching the root. This is a bug in React.');\n  }\n\n  if (prev.depth === parentNext.depth) {\n    // We found the same level. Now we just need to find a shared ancestor.\n    popToNearestCommonAncestor(prev, parentNext);\n  } else {\n    // We must still be deeper.\n    popNextToCommonLevel(prev, parentNext);\n  }\n\n  pushNode(next);\n} // Perform context switching to the new snapshot.\n// To make it cheap to read many contexts, while not suspending, we make the switch eagerly by\n// updating all the context's current values. That way reads, always just read the current value.\n// At the cost of updating contexts even if they're never read by this subtree.\n\n\nfunction switchContext(newSnapshot) {\n  // The basic algorithm we need to do is to pop back any contexts that are no longer on the stack.\n  // We also need to update any new contexts that are now on the stack with the deepest value.\n  // The easiest way to update new contexts is to just reapply them in reverse order from the\n  // perspective of the backpointers. To avoid allocating a lot when switching, we use the stack\n  // for that. Therefore this algorithm is recursive.\n  // 1) First we pop which ever snapshot tree was deepest. Popping old contexts as we go.\n  // 2) Then we find the nearest common ancestor from there. Popping old contexts as we go.\n  // 3) Then we reapply new contexts on the way back up the stack.\n  var prev = currentActiveSnapshot;\n  var next = newSnapshot;\n\n  if (prev !== next) {\n    if (prev === null) {\n      // $FlowFixMe: This has to be non-null since it's not equal to prev.\n      pushAllNext(next);\n    } else if (next === null) {\n      popAllPrevious(prev);\n    } else if (prev.depth === next.depth) {\n      popToNearestCommonAncestor(prev, next);\n    } else if (prev.depth > next.depth) {\n      popPreviousToCommonLevel(prev, next);\n    } else {\n      popNextToCommonLevel(prev, next);\n    }\n\n    currentActiveSnapshot = next;\n  }\n}\nfunction pushProvider(context, nextValue) {\n  var prevValue;\n\n  {\n    prevValue = context._currentValue;\n    context._currentValue = nextValue;\n\n    {\n      if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer = rendererSigil;\n    }\n  }\n\n  var prevNode = currentActiveSnapshot;\n  var newNode = {\n    parent: prevNode,\n    depth: prevNode === null ? 0 : prevNode.depth + 1,\n    context: context,\n    parentValue: prevValue,\n    value: nextValue\n  };\n  currentActiveSnapshot = newNode;\n  return newNode;\n}\nfunction popProvider(context) {\n  var prevSnapshot = currentActiveSnapshot;\n\n  if (prevSnapshot === null) {\n    throw new Error('Tried to pop a Context at the root of the app. This is a bug in React.');\n  }\n\n  {\n    if (prevSnapshot.context !== context) {\n      error('The parent context is not the expected context. This is probably a bug in React.');\n    }\n  }\n\n  {\n    var value = prevSnapshot.parentValue;\n\n    if (value === REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED) {\n      prevSnapshot.context._currentValue = prevSnapshot.context._defaultValue;\n    } else {\n      prevSnapshot.context._currentValue = value;\n    }\n\n    {\n      if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n        error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n      }\n\n      context._currentRenderer = rendererSigil;\n    }\n  }\n\n  return currentActiveSnapshot = prevSnapshot.parent;\n}\nfunction getActiveContext() {\n  return currentActiveSnapshot;\n}\nfunction readContext(context) {\n  var value =  context._currentValue ;\n  return value;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n  return key._reactInternals;\n}\nfunction set(key, value) {\n  key._reactInternals = value;\n}\n\nvar didWarnAboutNoopUpdateForComponent = {};\nvar didWarnAboutDeprecatedWillMount = {};\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n  didWarnAboutUninitializedState = new Set();\n  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n  didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n  didWarnAboutDirectlyAssigningPropsToState = new Set();\n  didWarnAboutUndefinedDerivedState = new Set();\n  didWarnAboutContextTypeAndContextTypes = new Set();\n  didWarnAboutInvalidateContextType = new Set();\n  var didWarnOnInvalidCallback = new Set();\n\n  warnOnInvalidCallback = function (callback, callerName) {\n    if (callback === null || typeof callback === 'function') {\n      return;\n    }\n\n    var key = callerName + '_' + callback;\n\n    if (!didWarnOnInvalidCallback.has(key)) {\n      didWarnOnInvalidCallback.add(key);\n\n      error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n    }\n  };\n\n  warnOnUndefinedDerivedState = function (type, partialState) {\n    if (partialState === undefined) {\n      var componentName = getComponentNameFromType(type) || 'Component';\n\n      if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n        didWarnAboutUndefinedDerivedState.add(componentName);\n\n        error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n      }\n    }\n  };\n}\n\nfunction warnNoop(publicInstance, callerName) {\n  {\n    var _constructor = publicInstance.constructor;\n    var componentName = _constructor && getComponentNameFromType(_constructor) || 'ReactClass';\n    var warningKey = componentName + '.' + callerName;\n\n    if (didWarnAboutNoopUpdateForComponent[warningKey]) {\n      return;\n    }\n\n    error('%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\\n\\nPlease check the code for the %s component.', callerName, callerName, componentName);\n\n    didWarnAboutNoopUpdateForComponent[warningKey] = true;\n  }\n}\n\nvar classComponentUpdater = {\n  isMounted: function (inst) {\n    return false;\n  },\n  enqueueSetState: function (inst, payload, callback) {\n    var internals = get(inst);\n\n    if (internals.queue === null) {\n      warnNoop(inst, 'setState');\n    } else {\n      internals.queue.push(payload);\n\n      {\n        if (callback !== undefined && callback !== null) {\n          warnOnInvalidCallback(callback, 'setState');\n        }\n      }\n    }\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    var internals = get(inst);\n    internals.replace = true;\n    internals.queue = [payload];\n\n    {\n      if (callback !== undefined && callback !== null) {\n        warnOnInvalidCallback(callback, 'setState');\n      }\n    }\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    var internals = get(inst);\n\n    if (internals.queue === null) {\n      warnNoop(inst, 'forceUpdate');\n    } else {\n      {\n        if (callback !== undefined && callback !== null) {\n          warnOnInvalidCallback(callback, 'setState');\n        }\n      }\n    }\n  }\n};\n\nfunction applyDerivedStateFromProps(instance, ctor, getDerivedStateFromProps, prevState, nextProps) {\n  var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n  {\n    warnOnUndefinedDerivedState(ctor, partialState);\n  } // Merge the partial state and the previous state.\n\n\n  var newState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);\n  return newState;\n}\n\nfunction constructClassInstance(ctor, props, maskedLegacyContext) {\n  var context = emptyContextObject;\n  var contextType = ctor.contextType;\n\n  {\n    if ('contextType' in ctor) {\n      var isValid = // Allow null for conditional declaration\n      contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n      if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n        didWarnAboutInvalidateContextType.add(ctor);\n        var addendum = '';\n\n        if (contextType === undefined) {\n          addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n        } else if (typeof contextType !== 'object') {\n          addendum = ' However, it is set to a ' + typeof contextType + '.';\n        } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n          addendum = ' Did you accidentally pass the Context.Provider instead?';\n        } else if (contextType._context !== undefined) {\n          // <Context.Consumer>\n          addendum = ' Did you accidentally pass the Context.Consumer instead?';\n        } else {\n          addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n        }\n\n        error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);\n      }\n    }\n  }\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    context = readContext(contextType);\n  } else {\n    context = maskedLegacyContext;\n  }\n\n  var instance = new ctor(props, context);\n\n  {\n    if (typeof ctor.getDerivedStateFromProps === 'function' && (instance.state === null || instance.state === undefined)) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutUninitializedState.has(componentName)) {\n        didWarnAboutUninitializedState.add(componentName);\n\n        error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n      }\n    } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n    // Warn about these lifecycles if they are present.\n    // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n    if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n      var foundWillMountName = null;\n      var foundWillReceivePropsName = null;\n      var foundWillUpdateName = null;\n\n      if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        foundWillMountName = 'componentWillMount';\n      } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n        foundWillMountName = 'UNSAFE_componentWillMount';\n      }\n\n      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n        foundWillReceivePropsName = 'componentWillReceiveProps';\n      } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n        foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n      }\n\n      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n        foundWillUpdateName = 'componentWillUpdate';\n      } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n        foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n      }\n\n      if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n        var _componentName = getComponentNameFromType(ctor) || 'Component';\n\n        var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n        if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n          didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n          error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n  \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n  \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n  \" + foundWillUpdateName : '');\n        }\n      }\n    }\n  }\n\n  return instance;\n}\n\nfunction checkClassInstance(instance, ctor, newProps) {\n  {\n    var name = getComponentNameFromType(ctor) || 'Component';\n    var renderPresent = instance.render;\n\n    if (!renderPresent) {\n      if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n      } else {\n        error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n      }\n    }\n\n    if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n      error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n    }\n\n    if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n    }\n\n    if (instance.propTypes) {\n      error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n    }\n\n    if (instance.contextType) {\n      error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n    }\n\n    {\n      if (instance.contextTypes) {\n        error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n      }\n\n      if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n        didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n        error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n      }\n    }\n\n    if (typeof instance.componentShouldUpdate === 'function') {\n      error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n    }\n\n    if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n      error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');\n    }\n\n    if (typeof instance.componentDidUnmount === 'function') {\n      error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n    }\n\n    if (typeof instance.componentDidReceiveProps === 'function') {\n      error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n    }\n\n    if (typeof instance.componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n    }\n\n    if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n      error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n    }\n\n    var hasMutatedProps = instance.props !== newProps;\n\n    if (instance.props !== undefined && hasMutatedProps) {\n      error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n    }\n\n    if (instance.defaultProps) {\n      error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n    }\n\n    if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n      didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n      error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));\n    }\n\n    if (typeof instance.getDerivedStateFromProps === 'function') {\n      error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof instance.getDerivedStateFromError === 'function') {\n      error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n    }\n\n    if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n      error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n    }\n\n    var _state = instance.state;\n\n    if (_state && (typeof _state !== 'object' || isArray(_state))) {\n      error('%s.state: must be set to an object or null', name);\n    }\n\n    if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n      error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n    }\n  }\n}\n\nfunction callComponentWillMount(type, instance) {\n  var oldState = instance.state;\n\n  if (typeof instance.componentWillMount === 'function') {\n    {\n      if ( instance.componentWillMount.__suppressDeprecationWarning !== true) {\n        var componentName = getComponentNameFromType(type) || 'Unknown';\n\n        if (!didWarnAboutDeprecatedWillMount[componentName]) {\n          warn( // keep this warning in sync with ReactStrictModeWarning.js\n          'componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code from componentWillMount to componentDidMount (preferred in most cases) ' + 'or the constructor.\\n' + '\\nPlease update the following components: %s', componentName);\n\n          didWarnAboutDeprecatedWillMount[componentName] = true;\n        }\n      }\n    }\n\n    instance.componentWillMount();\n  }\n\n  if (typeof instance.UNSAFE_componentWillMount === 'function') {\n    instance.UNSAFE_componentWillMount();\n  }\n\n  if (oldState !== instance.state) {\n    {\n      error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentNameFromType(type) || 'Component');\n    }\n\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n  }\n}\n\nfunction processUpdateQueue(internalInstance, inst, props, maskedLegacyContext) {\n  if (internalInstance.queue !== null && internalInstance.queue.length > 0) {\n    var oldQueue = internalInstance.queue;\n    var oldReplace = internalInstance.replace;\n    internalInstance.queue = null;\n    internalInstance.replace = false;\n\n    if (oldReplace && oldQueue.length === 1) {\n      inst.state = oldQueue[0];\n    } else {\n      var nextState = oldReplace ? oldQueue[0] : inst.state;\n      var dontMutate = true;\n\n      for (var i = oldReplace ? 1 : 0; i < oldQueue.length; i++) {\n        var partial = oldQueue[i];\n        var partialState = typeof partial === 'function' ? partial.call(inst, nextState, props, maskedLegacyContext) : partial;\n\n        if (partialState != null) {\n          if (dontMutate) {\n            dontMutate = false;\n            nextState = assign({}, nextState, partialState);\n          } else {\n            assign(nextState, partialState);\n          }\n        }\n      }\n\n      inst.state = nextState;\n    }\n  } else {\n    internalInstance.queue = null;\n  }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(instance, ctor, newProps, maskedLegacyContext) {\n  {\n    checkClassInstance(instance, ctor, newProps);\n  }\n\n  var initialState = instance.state !== undefined ? instance.state : null;\n  instance.updater = classComponentUpdater;\n  instance.props = newProps;\n  instance.state = initialState; // We don't bother initializing the refs object on the server, since we're not going to resolve them anyway.\n  // The internal instance will be used to manage updates that happen during this mount.\n\n  var internalInstance = {\n    queue: [],\n    replace: false\n  };\n  set(instance, internalInstance);\n  var contextType = ctor.contextType;\n\n  if (typeof contextType === 'object' && contextType !== null) {\n    instance.context = readContext(contextType);\n  } else {\n    instance.context = maskedLegacyContext;\n  }\n\n  {\n    if (instance.state === newProps) {\n      var componentName = getComponentNameFromType(ctor) || 'Component';\n\n      if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n        didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n        error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n      }\n    }\n  }\n\n  var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n  if (typeof getDerivedStateFromProps === 'function') {\n    instance.state = applyDerivedStateFromProps(instance, ctor, getDerivedStateFromProps, initialState, newProps);\n  } // In order to support react-lifecycles-compat polyfilled components,\n  // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n  if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n    callComponentWillMount(ctor, instance); // If we had additional state updates during this life-cycle, let's\n    // process them now.\n\n    processUpdateQueue(internalInstance, instance, newProps, maskedLegacyContext);\n  }\n}\n\n// Ids are base 32 strings whose binary representation corresponds to the\n// position of a node in a tree.\n// Every time the tree forks into multiple children, we add additional bits to\n// the left of the sequence that represent the position of the child within the\n// current level of children.\n//\n//      00101       00010001011010101\n//      ╰─┬─╯       ╰───────┬───────╯\n//   Fork 5 of 20       Parent id\n//\n// The leading 0s are important. In the above example, you only need 3 bits to\n// represent slot 5. However, you need 5 bits to represent all the forks at\n// the current level, so we must account for the empty bits at the end.\n//\n// For this same reason, slots are 1-indexed instead of 0-indexed. Otherwise,\n// the zeroth id at a level would be indistinguishable from its parent.\n//\n// If a node has only one child, and does not materialize an id (i.e. does not\n// contain a useId hook), then we don't need to allocate any space in the\n// sequence. It's treated as a transparent indirection. For example, these two\n// trees produce the same ids:\n//\n// <>                          <>\n//   <Indirection>               <A />\n//     <A />                     <B />\n//   </Indirection>            </>\n//   <B />\n// </>\n//\n// However, we cannot skip any node that materializes an id. Otherwise, a parent\n// id that does not fork would be indistinguishable from its child id. For\n// example, this tree does not fork, but the parent and child must have\n// different ids.\n//\n// <Parent>\n//   <Child />\n// </Parent>\n//\n// To handle this scenario, every time we materialize an id, we allocate a\n// new level with a single slot. You can think of this as a fork with only one\n// prong, or an array of children with length 1.\n//\n// It's possible for the size of the sequence to exceed 32 bits, the max\n// size for bitwise operations. When this happens, we make more room by\n// converting the right part of the id to a string and storing it in an overflow\n// variable. We use a base 32 string representation, because 32 is the largest\n// power of 2 that is supported by toString(). We want the base to be large so\n// that the resulting ids are compact, and we want the base to be a power of 2\n// because every log2(base) bits corresponds to a single character, i.e. every\n// log2(32) = 5 bits. That means we can lop bits off the end 5 at a time without\n// affecting the final result.\nvar emptyTreeContext = {\n  id: 1,\n  overflow: ''\n};\nfunction getTreeId(context) {\n  var overflow = context.overflow;\n  var idWithLeadingBit = context.id;\n  var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);\n  return id.toString(32) + overflow;\n}\nfunction pushTreeContext(baseContext, totalChildren, index) {\n  var baseIdWithLeadingBit = baseContext.id;\n  var baseOverflow = baseContext.overflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part\n  // of the id; we use it to account for leading 0s.\n\n  var baseLength = getBitLength(baseIdWithLeadingBit) - 1;\n  var baseId = baseIdWithLeadingBit & ~(1 << baseLength);\n  var slot = index + 1;\n  var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into\n  // consideration the leading 1 we use to mark the end of the sequence.\n\n  if (length > 30) {\n    // We overflowed the bitwise-safe range. Fall back to slower algorithm.\n    // This branch assumes the length of the base id is greater than 5; it won't\n    // work for smaller ids, because you need 5 bits per character.\n    //\n    // We encode the id in multiple steps: first the base id, then the\n    // remaining digits.\n    //\n    // Each 5 bit sequence corresponds to a single base 32 character. So for\n    // example, if the current id is 23 bits long, we can convert 20 of those\n    // bits into a string of 4 characters, with 3 bits left over.\n    //\n    // First calculate how many bits in the base id represent a complete\n    // sequence of characters.\n    var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.\n\n    var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.\n\n    var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.\n\n    var restOfBaseId = baseId >> numberOfOverflowBits;\n    var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because\n    // we made more room, this time it won't overflow.\n\n    var restOfLength = getBitLength(totalChildren) + restOfBaseLength;\n    var restOfNewBits = slot << restOfBaseLength;\n    var id = restOfNewBits | restOfBaseId;\n    var overflow = newOverflow + baseOverflow;\n    return {\n      id: 1 << restOfLength | id,\n      overflow: overflow\n    };\n  } else {\n    // Normal path\n    var newBits = slot << baseLength;\n\n    var _id = newBits | baseId;\n\n    var _overflow = baseOverflow;\n    return {\n      id: 1 << length | _id,\n      overflow: _overflow\n    };\n  }\n}\n\nfunction getBitLength(number) {\n  return 32 - clz32(number);\n}\n\nfunction getLeadingBit(id) {\n  return 1 << getBitLength(id) - 1;\n} // TODO: Math.clz32 is supported in Node 12+. Maybe we can drop the fallback.\n\n\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.\n// Based on:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nfunction clz32Fallback(x) {\n  var asUint = x >>> 0;\n\n  if (asUint === 0) {\n    return 32;\n  }\n\n  return 31 - (log(asUint) / LN2 | 0) | 0;\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n  ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar currentlyRenderingComponent = null;\nvar currentlyRenderingTask = null;\nvar firstWorkInProgressHook = null;\nvar workInProgressHook = null; // Whether the work-in-progress hook is a re-rendered hook\n\nvar isReRender = false; // Whether an update was scheduled during the currently executing render pass.\n\nvar didScheduleRenderPhaseUpdate = false; // Counts the number of useId hooks in this component\n\nvar localIdCounter = 0; // Lazily created map of render-phase updates\n\nvar renderPhaseUpdates = null; // Counter to prevent infinite loops.\n\nvar numberOfReRenders = 0;\nvar RE_RENDER_LIMIT = 25;\nvar isInHookUserCodeInDev = false; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev;\n\nfunction resolveCurrentlyRenderingComponent() {\n  if (currentlyRenderingComponent === null) {\n    throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n  }\n\n  {\n    if (isInHookUserCodeInDev) {\n      error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');\n    }\n  }\n\n  return currentlyRenderingComponent;\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (prevDeps === null) {\n    {\n      error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n    }\n\n    return false;\n  }\n\n  {\n    // Don't bother comparing lengths in prod because these arrays should be\n    // passed inline.\n    if (nextDeps.length !== prevDeps.length) {\n      error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + nextDeps.join(', ') + \"]\", \"[\" + prevDeps.join(', ') + \"]\");\n    }\n  }\n\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n    if (objectIs(nextDeps[i], prevDeps[i])) {\n      continue;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction createHook() {\n  if (numberOfReRenders > 0) {\n    throw new Error('Rendered more hooks than during the previous render');\n  }\n\n  return {\n    memoizedState: null,\n    queue: null,\n    next: null\n  };\n}\n\nfunction createWorkInProgressHook() {\n  if (workInProgressHook === null) {\n    // This is the first hook in the list\n    if (firstWorkInProgressHook === null) {\n      isReRender = false;\n      firstWorkInProgressHook = workInProgressHook = createHook();\n    } else {\n      // There's already a work-in-progress. Reuse it.\n      isReRender = true;\n      workInProgressHook = firstWorkInProgressHook;\n    }\n  } else {\n    if (workInProgressHook.next === null) {\n      isReRender = false; // Append to the end of the list\n\n      workInProgressHook = workInProgressHook.next = createHook();\n    } else {\n      // There's already a work-in-progress. Reuse it.\n      isReRender = true;\n      workInProgressHook = workInProgressHook.next;\n    }\n  }\n\n  return workInProgressHook;\n}\n\nfunction prepareToUseHooks(task, componentIdentity) {\n  currentlyRenderingComponent = componentIdentity;\n  currentlyRenderingTask = task;\n\n  {\n    isInHookUserCodeInDev = false;\n  } // The following should have already been reset\n  // didScheduleRenderPhaseUpdate = false;\n  // localIdCounter = 0;\n  // firstWorkInProgressHook = null;\n  // numberOfReRenders = 0;\n  // renderPhaseUpdates = null;\n  // workInProgressHook = null;\n\n\n  localIdCounter = 0;\n}\nfunction finishHooks(Component, props, children, refOrContext) {\n  // This must be called after every function component to prevent hooks from\n  // being used in classes.\n  while (didScheduleRenderPhaseUpdate) {\n    // Updates were scheduled during the render phase. They are stored in\n    // the `renderPhaseUpdates` map. Call the component again, reusing the\n    // work-in-progress hooks and applying the additional updates on top. Keep\n    // restarting until no more updates are scheduled.\n    didScheduleRenderPhaseUpdate = false;\n    localIdCounter = 0;\n    numberOfReRenders += 1; // Start over from the beginning of the list\n\n    workInProgressHook = null;\n    children = Component(props, refOrContext);\n  }\n\n  resetHooksState();\n  return children;\n}\nfunction checkDidRenderIdHook() {\n  // This should be called immediately after every finishHooks call.\n  // Conceptually, it's part of the return value of finishHooks; it's only a\n  // separate function to avoid using an array tuple.\n  var didRenderIdHook = localIdCounter !== 0;\n  return didRenderIdHook;\n} // Reset the internal hooks state if an error occurs while rendering a component\n\nfunction resetHooksState() {\n  {\n    isInHookUserCodeInDev = false;\n  }\n\n  currentlyRenderingComponent = null;\n  currentlyRenderingTask = null;\n  didScheduleRenderPhaseUpdate = false;\n  firstWorkInProgressHook = null;\n  numberOfReRenders = 0;\n  renderPhaseUpdates = null;\n  workInProgressHook = null;\n}\n\nfunction readContext$1(context) {\n  {\n    if (isInHookUserCodeInDev) {\n      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n    }\n  }\n\n  return readContext(context);\n}\n\nfunction useContext(context) {\n  {\n    currentHookNameInDev = 'useContext';\n  }\n\n  resolveCurrentlyRenderingComponent();\n  return readContext(context);\n}\n\nfunction basicStateReducer(state, action) {\n  // $FlowFixMe: Flow doesn't like mixed types\n  return typeof action === 'function' ? action(state) : action;\n}\n\nfunction useState(initialState) {\n  {\n    currentHookNameInDev = 'useState';\n  }\n\n  return useReducer(basicStateReducer, // useReducer has a special case to support lazy useState initializers\n  initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n  {\n    if (reducer !== basicStateReducer) {\n      currentHookNameInDev = 'useReducer';\n    }\n  }\n\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n\n  if (isReRender) {\n    // This is a re-render. Apply the new render phase updates to the previous\n    // current hook.\n    var queue = workInProgressHook.queue;\n    var dispatch = queue.dispatch;\n\n    if (renderPhaseUpdates !== null) {\n      // Render phase updates are stored in a map of queue -> linked list\n      var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n      if (firstRenderPhaseUpdate !== undefined) {\n        renderPhaseUpdates.delete(queue);\n        var newState = workInProgressHook.memoizedState;\n        var update = firstRenderPhaseUpdate;\n\n        do {\n          // Process this render phase update. We don't have to check the\n          // priority because it will always be the same as the current\n          // render's.\n          var action = update.action;\n\n          {\n            isInHookUserCodeInDev = true;\n          }\n\n          newState = reducer(newState, action);\n\n          {\n            isInHookUserCodeInDev = false;\n          }\n\n          update = update.next;\n        } while (update !== null);\n\n        workInProgressHook.memoizedState = newState;\n        return [newState, dispatch];\n      }\n    }\n\n    return [workInProgressHook.memoizedState, dispatch];\n  } else {\n    {\n      isInHookUserCodeInDev = true;\n    }\n\n    var initialState;\n\n    if (reducer === basicStateReducer) {\n      // Special case for `useState`.\n      initialState = typeof initialArg === 'function' ? initialArg() : initialArg;\n    } else {\n      initialState = init !== undefined ? init(initialArg) : initialArg;\n    }\n\n    {\n      isInHookUserCodeInDev = false;\n    }\n\n    workInProgressHook.memoizedState = initialState;\n\n    var _queue = workInProgressHook.queue = {\n      last: null,\n      dispatch: null\n    };\n\n    var _dispatch = _queue.dispatch = dispatchAction.bind(null, currentlyRenderingComponent, _queue);\n\n    return [workInProgressHook.memoizedState, _dispatch];\n  }\n}\n\nfunction useMemo(nextCreate, deps) {\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n  var nextDeps = deps === undefined ? null : deps;\n\n  if (workInProgressHook !== null) {\n    var prevState = workInProgressHook.memoizedState;\n\n    if (prevState !== null) {\n      if (nextDeps !== null) {\n        var prevDeps = prevState[1];\n\n        if (areHookInputsEqual(nextDeps, prevDeps)) {\n          return prevState[0];\n        }\n      }\n    }\n  }\n\n  {\n    isInHookUserCodeInDev = true;\n  }\n\n  var nextValue = nextCreate();\n\n  {\n    isInHookUserCodeInDev = false;\n  }\n\n  workInProgressHook.memoizedState = [nextValue, nextDeps];\n  return nextValue;\n}\n\nfunction useRef(initialValue) {\n  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();\n  workInProgressHook = createWorkInProgressHook();\n  var previousRef = workInProgressHook.memoizedState;\n\n  if (previousRef === null) {\n    var ref = {\n      current: initialValue\n    };\n\n    {\n      Object.seal(ref);\n    }\n\n    workInProgressHook.memoizedState = ref;\n    return ref;\n  } else {\n    return previousRef;\n  }\n}\n\nfunction useLayoutEffect(create, inputs) {\n  {\n    currentHookNameInDev = 'useLayoutEffect';\n\n    error('useLayoutEffect does nothing on the server, because its effect cannot ' + \"be encoded into the server renderer's output format. This will lead \" + 'to a mismatch between the initial, non-hydrated UI and the intended ' + 'UI. To avoid this, useLayoutEffect should only be used in ' + 'components that render exclusively on the client. ' + 'See https://reactjs.org/link/uselayouteffect-ssr for common fixes.');\n  }\n}\n\nfunction dispatchAction(componentIdentity, queue, action) {\n  if (numberOfReRenders >= RE_RENDER_LIMIT) {\n    throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');\n  }\n\n  if (componentIdentity === currentlyRenderingComponent) {\n    // This is a render phase update. Stash it in a lazily-created map of\n    // queue -> linked list of updates. After this render pass, we'll restart\n    // and apply the stashed updates on top of the work-in-progress hook.\n    didScheduleRenderPhaseUpdate = true;\n    var update = {\n      action: action,\n      next: null\n    };\n\n    if (renderPhaseUpdates === null) {\n      renderPhaseUpdates = new Map();\n    }\n\n    var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);\n\n    if (firstRenderPhaseUpdate === undefined) {\n      renderPhaseUpdates.set(queue, update);\n    } else {\n      // Append the update to the end of the list.\n      var lastRenderPhaseUpdate = firstRenderPhaseUpdate;\n\n      while (lastRenderPhaseUpdate.next !== null) {\n        lastRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n      }\n\n      lastRenderPhaseUpdate.next = update;\n    }\n  }\n}\n\nfunction useCallback(callback, deps) {\n  return useMemo(function () {\n    return callback;\n  }, deps);\n} // TODO Decide on how to implement this hook for server rendering.\n// If a mutation occurs during render, consider triggering a Suspense boundary\n// and falling back to client rendering.\n\nfunction useMutableSource(source, getSnapshot, subscribe) {\n  resolveCurrentlyRenderingComponent();\n  return getSnapshot(source._source);\n}\n\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  if (getServerSnapshot === undefined) {\n    throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n  }\n\n  return getServerSnapshot();\n}\n\nfunction useDeferredValue(value) {\n  resolveCurrentlyRenderingComponent();\n  return value;\n}\n\nfunction unsupportedStartTransition() {\n  throw new Error('startTransition cannot be called during server rendering.');\n}\n\nfunction useTransition() {\n  resolveCurrentlyRenderingComponent();\n  return [false, unsupportedStartTransition];\n}\n\nfunction useId() {\n  var task = currentlyRenderingTask;\n  var treeId = getTreeId(task.treeContext);\n  var responseState = currentResponseState;\n\n  if (responseState === null) {\n    throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component.');\n  }\n\n  var localId = localIdCounter++;\n  return makeId(responseState, treeId, localId);\n}\n\nfunction noop() {}\n\nvar Dispatcher = {\n  readContext: readContext$1,\n  useContext: useContext,\n  useMemo: useMemo,\n  useReducer: useReducer,\n  useRef: useRef,\n  useState: useState,\n  useInsertionEffect: noop,\n  useLayoutEffect: useLayoutEffect,\n  useCallback: useCallback,\n  // useImperativeHandle is not run in the server environment\n  useImperativeHandle: noop,\n  // Effects are not run in the server environment.\n  useEffect: noop,\n  // Debugging effect\n  useDebugValue: noop,\n  useDeferredValue: useDeferredValue,\n  useTransition: useTransition,\n  useId: useId,\n  // Subscriptions are not setup in a server environment.\n  useMutableSource: useMutableSource,\n  useSyncExternalStore: useSyncExternalStore\n};\n\nvar currentResponseState = null;\nfunction setCurrentResponseState(responseState) {\n  currentResponseState = responseState;\n}\n\nfunction getStackByComponentStackNode(componentStack) {\n  try {\n    var info = '';\n    var node = componentStack;\n\n    do {\n      switch (node.tag) {\n        case 0:\n          info += describeBuiltInComponentFrame(node.type, null, null);\n          break;\n\n        case 1:\n          info += describeFunctionComponentFrame(node.type, null, null);\n          break;\n\n        case 2:\n          info += describeClassComponentFrame(node.type, null, null);\n          break;\n      }\n\n      node = node.parent;\n    } while (node);\n\n    return info;\n  } catch (x) {\n    return '\\nError generating stack: ' + x.message + '\\n' + x.stack;\n  }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\nvar PENDING = 0;\nvar COMPLETED = 1;\nvar FLUSHED = 2;\nvar ABORTED = 3;\nvar ERRORED = 4;\nvar OPEN = 0;\nvar CLOSING = 1;\nvar CLOSED = 2;\n// This is a default heuristic for how to split up the HTML content into progressive\n// loading. Our goal is to be able to display additional new content about every 500ms.\n// Faster than that is unnecessary and should be throttled on the client. It also\n// adds unnecessary overhead to do more splits. We don't know if it's a higher or lower\n// end device but higher end suffer less from the overhead than lower end does from\n// not getting small enough pieces. We error on the side of low end.\n// We base this on low end 3G speeds which is about 500kbits per second. We assume\n// that there can be a reasonable drop off from max bandwidth which leaves you with\n// as little as 80%. We can receive half of that each 500ms - at best. In practice,\n// a little bandwidth is lost to processing and contention - e.g. CSS and images that\n// are downloaded along with the main content. So we estimate about half of that to be\n// the lower end throughput. In other words, we expect that you can at least show\n// about 12.5kb of content per 500ms. Not counting starting latency for the first\n// paint.\n// 500 * 1024 / 8 * .8 * 0.5 / 2\nvar DEFAULT_PROGRESSIVE_CHUNK_SIZE = 12800;\n\nfunction defaultErrorHandler(error) {\n  console['error'](error); // Don't transform to our wrapper\n\n  return null;\n}\n\nfunction noop$1() {}\n\nfunction createRequest(children, responseState, rootFormatContext, progressiveChunkSize, onError, onAllReady, onShellReady, onShellError, onFatalError) {\n  var pingedTasks = [];\n  var abortSet = new Set();\n  var request = {\n    destination: null,\n    responseState: responseState,\n    progressiveChunkSize: progressiveChunkSize === undefined ? DEFAULT_PROGRESSIVE_CHUNK_SIZE : progressiveChunkSize,\n    status: OPEN,\n    fatalError: null,\n    nextSegmentId: 0,\n    allPendingTasks: 0,\n    pendingRootTasks: 0,\n    completedRootSegment: null,\n    abortableTasks: abortSet,\n    pingedTasks: pingedTasks,\n    clientRenderedBoundaries: [],\n    completedBoundaries: [],\n    partialBoundaries: [],\n    onError: onError === undefined ? defaultErrorHandler : onError,\n    onAllReady: onAllReady === undefined ? noop$1 : onAllReady,\n    onShellReady: onShellReady === undefined ? noop$1 : onShellReady,\n    onShellError: onShellError === undefined ? noop$1 : onShellError,\n    onFatalError: onFatalError === undefined ? noop$1 : onFatalError\n  }; // This segment represents the root fallback.\n\n  var rootSegment = createPendingSegment(request, 0, null, rootFormatContext, // Root segments are never embedded in Text on either edge\n  false, false); // There is no parent so conceptually, we're unblocked to flush this segment.\n\n  rootSegment.parentFlushed = true;\n  var rootTask = createTask(request, children, null, rootSegment, abortSet, emptyContextObject, rootContextSnapshot, emptyTreeContext);\n  pingedTasks.push(rootTask);\n  return request;\n}\n\nfunction pingTask(request, task) {\n  var pingedTasks = request.pingedTasks;\n  pingedTasks.push(task);\n\n  if (pingedTasks.length === 1) {\n    scheduleWork(function () {\n      return performWork(request);\n    });\n  }\n}\n\nfunction createSuspenseBoundary(request, fallbackAbortableTasks) {\n  return {\n    id: UNINITIALIZED_SUSPENSE_BOUNDARY_ID,\n    rootSegmentID: -1,\n    parentFlushed: false,\n    pendingTasks: 0,\n    forceClientRender: false,\n    completedSegments: [],\n    byteSize: 0,\n    fallbackAbortableTasks: fallbackAbortableTasks,\n    errorDigest: null\n  };\n}\n\nfunction createTask(request, node, blockedBoundary, blockedSegment, abortSet, legacyContext, context, treeContext) {\n  request.allPendingTasks++;\n\n  if (blockedBoundary === null) {\n    request.pendingRootTasks++;\n  } else {\n    blockedBoundary.pendingTasks++;\n  }\n\n  var task = {\n    node: node,\n    ping: function () {\n      return pingTask(request, task);\n    },\n    blockedBoundary: blockedBoundary,\n    blockedSegment: blockedSegment,\n    abortSet: abortSet,\n    legacyContext: legacyContext,\n    context: context,\n    treeContext: treeContext\n  };\n\n  {\n    task.componentStack = null;\n  }\n\n  abortSet.add(task);\n  return task;\n}\n\nfunction createPendingSegment(request, index, boundary, formatContext, lastPushedText, textEmbedded) {\n  return {\n    status: PENDING,\n    id: -1,\n    // lazily assigned later\n    index: index,\n    parentFlushed: false,\n    chunks: [],\n    children: [],\n    formatContext: formatContext,\n    boundary: boundary,\n    lastPushedText: lastPushedText,\n    textEmbedded: textEmbedded\n  };\n} // DEV-only global reference to the currently executing task\n\n\nvar currentTaskInDEV = null;\n\nfunction getCurrentStackInDEV() {\n  {\n    if (currentTaskInDEV === null || currentTaskInDEV.componentStack === null) {\n      return '';\n    }\n\n    return getStackByComponentStackNode(currentTaskInDEV.componentStack);\n  }\n}\n\nfunction pushBuiltInComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 0,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction pushFunctionComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 1,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction pushClassComponentStackInDEV(task, type) {\n  {\n    task.componentStack = {\n      tag: 2,\n      parent: task.componentStack,\n      type: type\n    };\n  }\n}\n\nfunction popComponentStackInDEV(task) {\n  {\n    if (task.componentStack === null) {\n      error('Unexpectedly popped too many stack frames. This is a bug in React.');\n    } else {\n      task.componentStack = task.componentStack.parent;\n    }\n  }\n} // stash the component stack of an unwinding error until it is processed\n\n\nvar lastBoundaryErrorComponentStackDev = null;\n\nfunction captureBoundaryErrorDetailsDev(boundary, error) {\n  {\n    var errorMessage;\n\n    if (typeof error === 'string') {\n      errorMessage = error;\n    } else if (error && typeof error.message === 'string') {\n      errorMessage = error.message;\n    } else {\n      // eslint-disable-next-line react-internal/safe-string-coercion\n      errorMessage = String(error);\n    }\n\n    var errorComponentStack = lastBoundaryErrorComponentStackDev || getCurrentStackInDEV();\n    lastBoundaryErrorComponentStackDev = null;\n    boundary.errorMessage = errorMessage;\n    boundary.errorComponentStack = errorComponentStack;\n  }\n}\n\nfunction logRecoverableError(request, error) {\n  // If this callback errors, we intentionally let that error bubble up to become a fatal error\n  // so that someone fixes the error reporting instead of hiding it.\n  var errorDigest = request.onError(error);\n\n  if (errorDigest != null && typeof errorDigest !== 'string') {\n    // eslint-disable-next-line react-internal/prod-error-codes\n    throw new Error(\"onError returned something with a type other than \\\"string\\\". onError should return a string and may return null or undefined but must not return anything else. It received something of type \\\"\" + typeof errorDigest + \"\\\" instead\");\n  }\n\n  return errorDigest;\n}\n\nfunction fatalError(request, error) {\n  // This is called outside error handling code such as if the root errors outside\n  // a suspense boundary or if the root suspense boundary's fallback errors.\n  // It's also called if React itself or its host configs errors.\n  var onShellError = request.onShellError;\n  onShellError(error);\n  var onFatalError = request.onFatalError;\n  onFatalError(error);\n\n  if (request.destination !== null) {\n    request.status = CLOSED;\n    closeWithError(request.destination, error);\n  } else {\n    request.status = CLOSING;\n    request.fatalError = error;\n  }\n}\n\nfunction renderSuspenseBoundary(request, task, props) {\n  pushBuiltInComponentStackInDEV(task, 'Suspense');\n  var parentBoundary = task.blockedBoundary;\n  var parentSegment = task.blockedSegment; // Each time we enter a suspense boundary, we split out into a new segment for\n  // the fallback so that we can later replace that segment with the content.\n  // This also lets us split out the main content even if it doesn't suspend,\n  // in case it ends up generating a large subtree of content.\n\n  var fallback = props.fallback;\n  var content = props.children;\n  var fallbackAbortSet = new Set();\n  var newBoundary = createSuspenseBoundary(request, fallbackAbortSet);\n  var insertionIndex = parentSegment.chunks.length; // The children of the boundary segment is actually the fallback.\n\n  var boundarySegment = createPendingSegment(request, insertionIndex, newBoundary, parentSegment.formatContext, // boundaries never require text embedding at their edges because comment nodes bound them\n  false, false);\n  parentSegment.children.push(boundarySegment); // The parentSegment has a child Segment at this index so we reset the lastPushedText marker on the parent\n\n  parentSegment.lastPushedText = false; // This segment is the actual child content. We can start rendering that immediately.\n\n  var contentRootSegment = createPendingSegment(request, 0, null, parentSegment.formatContext, // boundaries never require text embedding at their edges because comment nodes bound them\n  false, false); // We mark the root segment as having its parent flushed. It's not really flushed but there is\n  // no parent segment so there's nothing to wait on.\n\n  contentRootSegment.parentFlushed = true; // Currently this is running synchronously. We could instead schedule this to pingedTasks.\n  // I suspect that there might be some efficiency benefits from not creating the suspended task\n  // and instead just using the stack if possible.\n  // TODO: Call this directly instead of messing with saving and restoring contexts.\n  // We can reuse the current context and task to render the content immediately without\n  // context switching. We just need to temporarily switch which boundary and which segment\n  // we're writing to. If something suspends, it'll spawn new suspended task with that context.\n\n  task.blockedBoundary = newBoundary;\n  task.blockedSegment = contentRootSegment;\n\n  try {\n    // We use the safe form because we don't handle suspending here. Only error handling.\n    renderNode(request, task, content);\n    pushSegmentFinale(contentRootSegment.chunks, request.responseState, contentRootSegment.lastPushedText, contentRootSegment.textEmbedded);\n    contentRootSegment.status = COMPLETED;\n    queueCompletedSegment(newBoundary, contentRootSegment);\n\n    if (newBoundary.pendingTasks === 0) {\n      // This must have been the last segment we were waiting on. This boundary is now complete.\n      // Therefore we won't need the fallback. We early return so that we don't have to create\n      // the fallback.\n      popComponentStackInDEV(task);\n      return;\n    }\n  } catch (error) {\n    contentRootSegment.status = ERRORED;\n    newBoundary.forceClientRender = true;\n    newBoundary.errorDigest = logRecoverableError(request, error);\n\n    {\n      captureBoundaryErrorDetailsDev(newBoundary, error);\n    } // We don't need to decrement any task numbers because we didn't spawn any new task.\n    // We don't need to schedule any task because we know the parent has written yet.\n    // We do need to fallthrough to create the fallback though.\n\n  } finally {\n    task.blockedBoundary = parentBoundary;\n    task.blockedSegment = parentSegment;\n  } // We create suspended task for the fallback because we don't want to actually work\n  // on it yet in case we finish the main content, so we queue for later.\n\n\n  var suspendedFallbackTask = createTask(request, fallback, parentBoundary, boundarySegment, fallbackAbortSet, task.legacyContext, task.context, task.treeContext);\n\n  {\n    suspendedFallbackTask.componentStack = task.componentStack;\n  } // TODO: This should be queued at a separate lower priority queue so that we only work\n  // on preparing fallbacks if we don't have any more main content to task on.\n\n\n  request.pingedTasks.push(suspendedFallbackTask);\n  popComponentStackInDEV(task);\n}\n\nfunction renderHostElement(request, task, type, props) {\n  pushBuiltInComponentStackInDEV(task, type);\n  var segment = task.blockedSegment;\n  var children = pushStartInstance(segment.chunks, type, props, request.responseState, segment.formatContext);\n  segment.lastPushedText = false;\n  var prevContext = segment.formatContext;\n  segment.formatContext = getChildFormatContext(prevContext, type, props); // We use the non-destructive form because if something suspends, we still\n  // need to pop back up and finish this subtree of HTML.\n\n  renderNode(request, task, children); // We expect that errors will fatal the whole task and that we don't need\n  // the correct context. Therefore this is not in a finally.\n\n  segment.formatContext = prevContext;\n  pushEndInstance(segment.chunks, type);\n  segment.lastPushedText = false;\n  popComponentStackInDEV(task);\n}\n\nfunction shouldConstruct$1(Component) {\n  return Component.prototype && Component.prototype.isReactComponent;\n}\n\nfunction renderWithHooks(request, task, Component, props, secondArg) {\n  var componentIdentity = {};\n  prepareToUseHooks(task, componentIdentity);\n  var result = Component(props, secondArg);\n  return finishHooks(Component, props, result, secondArg);\n}\n\nfunction finishClassComponent(request, task, instance, Component, props) {\n  var nextChildren = instance.render();\n\n  {\n    if (instance.props !== props) {\n      if (!didWarnAboutReassigningProps) {\n        error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromType(Component) || 'a component');\n      }\n\n      didWarnAboutReassigningProps = true;\n    }\n  }\n\n  {\n    var childContextTypes = Component.childContextTypes;\n\n    if (childContextTypes !== null && childContextTypes !== undefined) {\n      var previousContext = task.legacyContext;\n      var mergedContext = processChildContext(instance, Component, previousContext, childContextTypes);\n      task.legacyContext = mergedContext;\n      renderNodeDestructive(request, task, nextChildren);\n      task.legacyContext = previousContext;\n      return;\n    }\n  }\n\n  renderNodeDestructive(request, task, nextChildren);\n}\n\nfunction renderClassComponent(request, task, Component, props) {\n  pushClassComponentStackInDEV(task, Component);\n  var maskedContext =  getMaskedContext(Component, task.legacyContext) ;\n  var instance = constructClassInstance(Component, props, maskedContext);\n  mountClassInstance(instance, Component, props, maskedContext);\n  finishClassComponent(request, task, instance, Component, props);\n  popComponentStackInDEV(task);\n}\n\nvar didWarnAboutBadClass = {};\nvar didWarnAboutModulePatternComponent = {};\nvar didWarnAboutContextTypeOnFunctionComponent = {};\nvar didWarnAboutGetDerivedStateOnFunctionComponent = {};\nvar didWarnAboutReassigningProps = false;\nvar didWarnAboutDefaultPropsOnFunctionComponent = {};\nvar didWarnAboutGenerators = false;\nvar didWarnAboutMaps = false;\nvar hasWarnedAboutUsingContextAsConsumer = false; // This would typically be a function component but we still support module pattern\n// components for some reason.\n\nfunction renderIndeterminateComponent(request, task, Component, props) {\n  var legacyContext;\n\n  {\n    legacyContext = getMaskedContext(Component, task.legacyContext);\n  }\n\n  pushFunctionComponentStackInDEV(task, Component);\n\n  {\n    if (Component.prototype && typeof Component.prototype.render === 'function') {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutBadClass[componentName]) {\n        error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n        didWarnAboutBadClass[componentName] = true;\n      }\n    }\n  }\n\n  var value = renderWithHooks(request, task, Component, props, legacyContext);\n  var hasId = checkDidRenderIdHook();\n\n  {\n    // Support for module components is deprecated and is removed behind a flag.\n    // Whether or not it would crash later, we want to show a good message in DEV first.\n    if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n      var _componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n        didWarnAboutModulePatternComponent[_componentName] = true;\n      }\n    }\n  }\n\n  if ( // Run these checks in production only if the flag is off.\n  // Eventually we'll delete this branch altogether.\n   typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n    {\n      var _componentName2 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutModulePatternComponent[_componentName2]) {\n        error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);\n\n        didWarnAboutModulePatternComponent[_componentName2] = true;\n      }\n    }\n\n    mountClassInstance(value, Component, props, legacyContext);\n    finishClassComponent(request, task, value, Component, props);\n  } else {\n\n    {\n      validateFunctionComponentInDev(Component);\n    } // We're now successfully past this task, and we don't have to pop back to\n    // the previous task every again, so we can use the destructive recursive form.\n\n\n    if (hasId) {\n      // This component materialized an id. We treat this as its own level, with\n      // a single \"child\" slot.\n      var prevTreeContext = task.treeContext;\n      var totalChildren = 1;\n      var index = 0;\n      task.treeContext = pushTreeContext(prevTreeContext, totalChildren, index);\n\n      try {\n        renderNodeDestructive(request, task, value);\n      } finally {\n        task.treeContext = prevTreeContext;\n      }\n    } else {\n      renderNodeDestructive(request, task, value);\n    }\n  }\n\n  popComponentStackInDEV(task);\n}\n\nfunction validateFunctionComponentInDev(Component) {\n  {\n    if (Component) {\n      if (Component.childContextTypes) {\n        error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n      }\n    }\n\n    if ( Component.defaultProps !== undefined) {\n      var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n        error('%s: Support for defaultProps will be removed from function components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n        didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n      }\n    }\n\n    if (typeof Component.getDerivedStateFromProps === 'function') {\n      var _componentName3 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {\n        error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);\n\n        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;\n      }\n    }\n\n    if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n      var _componentName4 = getComponentNameFromType(Component) || 'Unknown';\n\n      if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {\n        error('%s: Function components do not support contextType.', _componentName4);\n\n        didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;\n      }\n    }\n  }\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n  if (Component && Component.defaultProps) {\n    // Resolve default props. Taken from ReactElement\n    var props = assign({}, baseProps);\n    var defaultProps = Component.defaultProps;\n\n    for (var propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n\n    return props;\n  }\n\n  return baseProps;\n}\n\nfunction renderForwardRef(request, task, type, props, ref) {\n  pushFunctionComponentStackInDEV(task, type.render);\n  var children = renderWithHooks(request, task, type.render, props, ref);\n  var hasId = checkDidRenderIdHook();\n\n  if (hasId) {\n    // This component materialized an id. We treat this as its own level, with\n    // a single \"child\" slot.\n    var prevTreeContext = task.treeContext;\n    var totalChildren = 1;\n    var index = 0;\n    task.treeContext = pushTreeContext(prevTreeContext, totalChildren, index);\n\n    try {\n      renderNodeDestructive(request, task, children);\n    } finally {\n      task.treeContext = prevTreeContext;\n    }\n  } else {\n    renderNodeDestructive(request, task, children);\n  }\n\n  popComponentStackInDEV(task);\n}\n\nfunction renderMemo(request, task, type, props, ref) {\n  var innerType = type.type;\n  var resolvedProps = resolveDefaultProps(innerType, props);\n  renderElement(request, task, innerType, resolvedProps, ref);\n}\n\nfunction renderContextConsumer(request, task, context, props) {\n  // The logic below for Context differs depending on PROD or DEV mode. In\n  // DEV mode, we create a separate object for Context.Consumer that acts\n  // like a proxy to Context. This proxy object adds unnecessary code in PROD\n  // so we use the old behaviour (Context.Consumer references Context) to\n  // reduce size and overhead. The separate object references context via\n  // a property called \"_context\", which also gives us the ability to check\n  // in DEV mode if this property exists or not and warn if it does not.\n  {\n    if (context._context === undefined) {\n      // This may be because it's a Context (rather than a Consumer).\n      // Or it may be because it's older React where they're the same thing.\n      // We only want to warn if we're sure it's a new React.\n      if (context !== context.Consumer) {\n        if (!hasWarnedAboutUsingContextAsConsumer) {\n          hasWarnedAboutUsingContextAsConsumer = true;\n\n          error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n        }\n      }\n    } else {\n      context = context._context;\n    }\n  }\n\n  var render = props.children;\n\n  {\n    if (typeof render !== 'function') {\n      error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n    }\n  }\n\n  var newValue = readContext(context);\n  var newChildren = render(newValue);\n  renderNodeDestructive(request, task, newChildren);\n}\n\nfunction renderContextProvider(request, task, type, props) {\n  var context = type._context;\n  var value = props.value;\n  var children = props.children;\n  var prevSnapshot;\n\n  {\n    prevSnapshot = task.context;\n  }\n\n  task.context = pushProvider(context, value);\n  renderNodeDestructive(request, task, children);\n  task.context = popProvider(context);\n\n  {\n    if (prevSnapshot !== task.context) {\n      error('Popping the context provider did not return back to the original snapshot. This is a bug in React.');\n    }\n  }\n}\n\nfunction renderLazyComponent(request, task, lazyComponent, props, ref) {\n  pushBuiltInComponentStackInDEV(task, 'Lazy');\n  var payload = lazyComponent._payload;\n  var init = lazyComponent._init;\n  var Component = init(payload);\n  var resolvedProps = resolveDefaultProps(Component, props);\n  renderElement(request, task, Component, resolvedProps, ref);\n  popComponentStackInDEV(task);\n}\n\nfunction renderElement(request, task, type, props, ref) {\n  if (typeof type === 'function') {\n    if (shouldConstruct$1(type)) {\n      renderClassComponent(request, task, type, props);\n      return;\n    } else {\n      renderIndeterminateComponent(request, task, type, props);\n      return;\n    }\n  }\n\n  if (typeof type === 'string') {\n    renderHostElement(request, task, type, props);\n    return;\n  }\n\n  switch (type) {\n    // TODO: LegacyHidden acts the same as a fragment. This only works\n    // because we currently assume that every instance of LegacyHidden is\n    // accompanied by a host component wrapper. In the hidden mode, the host\n    // component is given a `hidden` attribute, which ensures that the\n    // initial HTML is not visible. To support the use of LegacyHidden as a\n    // true fragment, without an extra DOM node, we would have to hide the\n    // initial HTML in some other way.\n    // TODO: Add REACT_OFFSCREEN_TYPE here too with the same capability.\n    case REACT_LEGACY_HIDDEN_TYPE:\n    case REACT_DEBUG_TRACING_MODE_TYPE:\n    case REACT_STRICT_MODE_TYPE:\n    case REACT_PROFILER_TYPE:\n    case REACT_FRAGMENT_TYPE:\n      {\n        renderNodeDestructive(request, task, props.children);\n        return;\n      }\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      {\n        pushBuiltInComponentStackInDEV(task, 'SuspenseList'); // TODO: SuspenseList should control the boundaries.\n\n        renderNodeDestructive(request, task, props.children);\n        popComponentStackInDEV(task);\n        return;\n      }\n\n    case REACT_SCOPE_TYPE:\n      {\n\n        throw new Error('ReactDOMServer does not yet support scope components.');\n      }\n    // eslint-disable-next-line-no-fallthrough\n\n    case REACT_SUSPENSE_TYPE:\n      {\n        {\n          renderSuspenseBoundary(request, task, props);\n        }\n\n        return;\n      }\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        {\n          renderForwardRef(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_MEMO_TYPE:\n        {\n          renderMemo(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_PROVIDER_TYPE:\n        {\n          renderContextProvider(request, task, type, props);\n          return;\n        }\n\n      case REACT_CONTEXT_TYPE:\n        {\n          renderContextConsumer(request, task, type, props);\n          return;\n        }\n\n      case REACT_LAZY_TYPE:\n        {\n          renderLazyComponent(request, task, type, props);\n          return;\n        }\n    }\n  }\n\n  var info = '';\n\n  {\n    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n      info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n    }\n  }\n\n  throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + (\"but got: \" + (type == null ? type : typeof type) + \".\" + info));\n}\n\nfunction validateIterable(iterable, iteratorFn) {\n  {\n    // We don't support rendering Generators because it's a mutation.\n    // See https://github.com/facebook/react/issues/12995\n    if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n    iterable[Symbol.toStringTag] === 'Generator') {\n      if (!didWarnAboutGenerators) {\n        error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n      }\n\n      didWarnAboutGenerators = true;\n    } // Warn about using Maps as children\n\n\n    if (iterable.entries === iteratorFn) {\n      if (!didWarnAboutMaps) {\n        error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n      }\n\n      didWarnAboutMaps = true;\n    }\n  }\n}\n\nfunction renderNodeDestructive(request, task, node) {\n  {\n    // In Dev we wrap renderNodeDestructiveImpl in a try / catch so we can capture\n    // a component stack at the right place in the tree. We don't do this in renderNode\n    // becuase it is not called at every layer of the tree and we may lose frames\n    try {\n      return renderNodeDestructiveImpl(request, task, node);\n    } catch (x) {\n      if (typeof x === 'object' && x !== null && typeof x.then === 'function') ; else {\n        // This is an error, stash the component stack if it is null.\n        lastBoundaryErrorComponentStackDev = lastBoundaryErrorComponentStackDev !== null ? lastBoundaryErrorComponentStackDev : getCurrentStackInDEV();\n      } // rethrow so normal suspense logic can handle thrown value accordingly\n\n\n      throw x;\n    }\n  }\n} // This function by it self renders a node and consumes the task by mutating it\n// to update the current execution state.\n\n\nfunction renderNodeDestructiveImpl(request, task, node) {\n  // Stash the node we're working on. We'll pick up from this task in case\n  // something suspends.\n  task.node = node; // Handle object types\n\n  if (typeof node === 'object' && node !== null) {\n    switch (node.$$typeof) {\n      case REACT_ELEMENT_TYPE:\n        {\n          var element = node;\n          var type = element.type;\n          var props = element.props;\n          var ref = element.ref;\n          renderElement(request, task, type, props, ref);\n          return;\n        }\n\n      case REACT_PORTAL_TYPE:\n        throw new Error('Portals are not currently supported by the server renderer. ' + 'Render them conditionally so that they only appear on the client render.');\n      // eslint-disable-next-line-no-fallthrough\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyNode = node;\n          var payload = lazyNode._payload;\n          var init = lazyNode._init;\n          var resolvedNode;\n\n          {\n            try {\n              resolvedNode = init(payload);\n            } catch (x) {\n              if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n                // this Lazy initializer is suspending. push a temporary frame onto the stack so it can be\n                // popped off in spawnNewSuspendedTask. This aligns stack behavior between Lazy in element position\n                // vs Component position. We do not want the frame for Errors so we exclusively do this in\n                // the wakeable branch\n                pushBuiltInComponentStackInDEV(task, 'Lazy');\n              }\n\n              throw x;\n            }\n          }\n\n          renderNodeDestructive(request, task, resolvedNode);\n          return;\n        }\n    }\n\n    if (isArray(node)) {\n      renderChildrenArray(request, task, node);\n      return;\n    }\n\n    var iteratorFn = getIteratorFn(node);\n\n    if (iteratorFn) {\n      {\n        validateIterable(node, iteratorFn);\n      }\n\n      var iterator = iteratorFn.call(node);\n\n      if (iterator) {\n        // We need to know how many total children are in this set, so that we\n        // can allocate enough id slots to acommodate them. So we must exhaust\n        // the iterator before we start recursively rendering the children.\n        // TODO: This is not great but I think it's inherent to the id\n        // generation algorithm.\n        var step = iterator.next(); // If there are not entries, we need to push an empty so we start by checking that.\n\n        if (!step.done) {\n          var children = [];\n\n          do {\n            children.push(step.value);\n            step = iterator.next();\n          } while (!step.done);\n\n          renderChildrenArray(request, task, children);\n          return;\n        }\n\n        return;\n      }\n    }\n\n    var childString = Object.prototype.toString.call(node);\n    throw new Error(\"Objects are not valid as a React child (found: \" + (childString === '[object Object]' ? 'object with keys {' + Object.keys(node).join(', ') + '}' : childString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n  }\n\n  if (typeof node === 'string') {\n    var segment = task.blockedSegment;\n    segment.lastPushedText = pushTextInstance(task.blockedSegment.chunks, node, request.responseState, segment.lastPushedText);\n    return;\n  }\n\n  if (typeof node === 'number') {\n    var _segment = task.blockedSegment;\n    _segment.lastPushedText = pushTextInstance(task.blockedSegment.chunks, '' + node, request.responseState, _segment.lastPushedText);\n    return;\n  }\n\n  {\n    if (typeof node === 'function') {\n      error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n    }\n  }\n}\n\nfunction renderChildrenArray(request, task, children) {\n  var totalChildren = children.length;\n\n  for (var i = 0; i < totalChildren; i++) {\n    var prevTreeContext = task.treeContext;\n    task.treeContext = pushTreeContext(prevTreeContext, totalChildren, i);\n\n    try {\n      // We need to use the non-destructive form so that we can safely pop back\n      // up and render the sibling if something suspends.\n      renderNode(request, task, children[i]);\n    } finally {\n      task.treeContext = prevTreeContext;\n    }\n  }\n}\n\nfunction spawnNewSuspendedTask(request, task, x) {\n  // Something suspended, we'll need to create a new segment and resolve it later.\n  var segment = task.blockedSegment;\n  var insertionIndex = segment.chunks.length;\n  var newSegment = createPendingSegment(request, insertionIndex, null, segment.formatContext, // Adopt the parent segment's leading text embed\n  segment.lastPushedText, // Assume we are text embedded at the trailing edge\n  true);\n  segment.children.push(newSegment); // Reset lastPushedText for current Segment since the new Segment \"consumed\" it\n\n  segment.lastPushedText = false;\n  var newTask = createTask(request, task.node, task.blockedBoundary, newSegment, task.abortSet, task.legacyContext, task.context, task.treeContext);\n\n  {\n    if (task.componentStack !== null) {\n      // We pop one task off the stack because the node that suspended will be tried again,\n      // which will add it back onto the stack.\n      newTask.componentStack = task.componentStack.parent;\n    }\n  }\n\n  var ping = newTask.ping;\n  x.then(ping, ping);\n} // This is a non-destructive form of rendering a node. If it suspends it spawns\n// a new task and restores the context of this task to what it was before.\n\n\nfunction renderNode(request, task, node) {\n  // TODO: Store segment.children.length here and reset it in case something\n  // suspended partially through writing something.\n  // Snapshot the current context in case something throws to interrupt the\n  // process.\n  var previousFormatContext = task.blockedSegment.formatContext;\n  var previousLegacyContext = task.legacyContext;\n  var previousContext = task.context;\n  var previousComponentStack = null;\n\n  {\n    previousComponentStack = task.componentStack;\n  }\n\n  try {\n    return renderNodeDestructive(request, task, node);\n  } catch (x) {\n    resetHooksState();\n\n    if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n      spawnNewSuspendedTask(request, task, x); // Restore the context. We assume that this will be restored by the inner\n      // functions in case nothing throws so we don't use \"finally\" here.\n\n      task.blockedSegment.formatContext = previousFormatContext;\n      task.legacyContext = previousLegacyContext;\n      task.context = previousContext; // Restore all active ReactContexts to what they were before.\n\n      switchContext(previousContext);\n\n      {\n        task.componentStack = previousComponentStack;\n      }\n\n      return;\n    } else {\n      // Restore the context. We assume that this will be restored by the inner\n      // functions in case nothing throws so we don't use \"finally\" here.\n      task.blockedSegment.formatContext = previousFormatContext;\n      task.legacyContext = previousLegacyContext;\n      task.context = previousContext; // Restore all active ReactContexts to what they were before.\n\n      switchContext(previousContext);\n\n      {\n        task.componentStack = previousComponentStack;\n      } // We assume that we don't need the correct context.\n      // Let's terminate the rest of the tree and don't render any siblings.\n\n\n      throw x;\n    }\n  }\n}\n\nfunction erroredTask(request, boundary, segment, error) {\n  // Report the error to a global handler.\n  var errorDigest = logRecoverableError(request, error);\n\n  if (boundary === null) {\n    fatalError(request, error);\n  } else {\n    boundary.pendingTasks--;\n\n    if (!boundary.forceClientRender) {\n      boundary.forceClientRender = true;\n      boundary.errorDigest = errorDigest;\n\n      {\n        captureBoundaryErrorDetailsDev(boundary, error);\n      } // Regardless of what happens next, this boundary won't be displayed,\n      // so we can flush it, if the parent already flushed.\n\n\n      if (boundary.parentFlushed) {\n        // We don't have a preference where in the queue this goes since it's likely\n        // to error on the client anyway. However, intentionally client-rendered\n        // boundaries should be flushed earlier so that they can start on the client.\n        // We reuse the same queue for errors.\n        request.clientRenderedBoundaries.push(boundary);\n      }\n    }\n  }\n\n  request.allPendingTasks--;\n\n  if (request.allPendingTasks === 0) {\n    var onAllReady = request.onAllReady;\n    onAllReady();\n  }\n}\n\nfunction abortTaskSoft(task) {\n  // This aborts task without aborting the parent boundary that it blocks.\n  // It's used for when we didn't need this task to complete the tree.\n  // If task was needed, then it should use abortTask instead.\n  var request = this;\n  var boundary = task.blockedBoundary;\n  var segment = task.blockedSegment;\n  segment.status = ABORTED;\n  finishedTask(request, boundary, segment);\n}\n\nfunction abortTask(task, request, reason) {\n  // This aborts the task and aborts the parent that it blocks, putting it into\n  // client rendered mode.\n  var boundary = task.blockedBoundary;\n  var segment = task.blockedSegment;\n  segment.status = ABORTED;\n\n  if (boundary === null) {\n    request.allPendingTasks--; // We didn't complete the root so we have nothing to show. We can close\n    // the request;\n\n    if (request.status !== CLOSED) {\n      request.status = CLOSED;\n\n      if (request.destination !== null) {\n        close(request.destination);\n      }\n    }\n  } else {\n    boundary.pendingTasks--;\n\n    if (!boundary.forceClientRender) {\n      boundary.forceClientRender = true;\n\n      var _error = reason === undefined ? new Error('The render was aborted by the server without a reason.') : reason;\n\n      boundary.errorDigest = request.onError(_error);\n\n      {\n        var errorPrefix = 'The server did not finish this Suspense boundary: ';\n\n        if (_error && typeof _error.message === 'string') {\n          _error = errorPrefix + _error.message;\n        } else {\n          // eslint-disable-next-line react-internal/safe-string-coercion\n          _error = errorPrefix + String(_error);\n        }\n\n        var previousTaskInDev = currentTaskInDEV;\n        currentTaskInDEV = task;\n\n        try {\n          captureBoundaryErrorDetailsDev(boundary, _error);\n        } finally {\n          currentTaskInDEV = previousTaskInDev;\n        }\n      }\n\n      if (boundary.parentFlushed) {\n        request.clientRenderedBoundaries.push(boundary);\n      }\n    } // If this boundary was still pending then we haven't already cancelled its fallbacks.\n    // We'll need to abort the fallbacks, which will also error that parent boundary.\n\n\n    boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {\n      return abortTask(fallbackTask, request, reason);\n    });\n    boundary.fallbackAbortableTasks.clear();\n    request.allPendingTasks--;\n\n    if (request.allPendingTasks === 0) {\n      var onAllReady = request.onAllReady;\n      onAllReady();\n    }\n  }\n}\n\nfunction queueCompletedSegment(boundary, segment) {\n  if (segment.chunks.length === 0 && segment.children.length === 1 && segment.children[0].boundary === null) {\n    // This is an empty segment. There's nothing to write, so we can instead transfer the ID\n    // to the child. That way any existing references point to the child.\n    var childSegment = segment.children[0];\n    childSegment.id = segment.id;\n    childSegment.parentFlushed = true;\n\n    if (childSegment.status === COMPLETED) {\n      queueCompletedSegment(boundary, childSegment);\n    }\n  } else {\n    var completedSegments = boundary.completedSegments;\n    completedSegments.push(segment);\n  }\n}\n\nfunction finishedTask(request, boundary, segment) {\n  if (boundary === null) {\n    if (segment.parentFlushed) {\n      if (request.completedRootSegment !== null) {\n        throw new Error('There can only be one root segment. This is a bug in React.');\n      }\n\n      request.completedRootSegment = segment;\n    }\n\n    request.pendingRootTasks--;\n\n    if (request.pendingRootTasks === 0) {\n      // We have completed the shell so the shell can't error anymore.\n      request.onShellError = noop$1;\n      var onShellReady = request.onShellReady;\n      onShellReady();\n    }\n  } else {\n    boundary.pendingTasks--;\n\n    if (boundary.forceClientRender) ; else if (boundary.pendingTasks === 0) {\n      // This must have been the last segment we were waiting on. This boundary is now complete.\n      if (segment.parentFlushed) {\n        // Our parent segment already flushed, so we need to schedule this segment to be emitted.\n        // If it is a segment that was aborted, we'll write other content instead so we don't need\n        // to emit it.\n        if (segment.status === COMPLETED) {\n          queueCompletedSegment(boundary, segment);\n        }\n      }\n\n      if (boundary.parentFlushed) {\n        // The segment might be part of a segment that didn't flush yet, but if the boundary's\n        // parent flushed, we need to schedule the boundary to be emitted.\n        request.completedBoundaries.push(boundary);\n      } // We can now cancel any pending task on the fallback since we won't need to show it anymore.\n      // This needs to happen after we read the parentFlushed flags because aborting can finish\n      // work which can trigger user code, which can start flushing, which can change those flags.\n\n\n      boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request);\n      boundary.fallbackAbortableTasks.clear();\n    } else {\n      if (segment.parentFlushed) {\n        // Our parent already flushed, so we need to schedule this segment to be emitted.\n        // If it is a segment that was aborted, we'll write other content instead so we don't need\n        // to emit it.\n        if (segment.status === COMPLETED) {\n          queueCompletedSegment(boundary, segment);\n          var completedSegments = boundary.completedSegments;\n\n          if (completedSegments.length === 1) {\n            // This is the first time since we last flushed that we completed anything.\n            // We can schedule this boundary to emit its partially completed segments early\n            // in case the parent has already been flushed.\n            if (boundary.parentFlushed) {\n              request.partialBoundaries.push(boundary);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  request.allPendingTasks--;\n\n  if (request.allPendingTasks === 0) {\n    // This needs to be called at the very end so that we can synchronously write the result\n    // in the callback if needed.\n    var onAllReady = request.onAllReady;\n    onAllReady();\n  }\n}\n\nfunction retryTask(request, task) {\n  var segment = task.blockedSegment;\n\n  if (segment.status !== PENDING) {\n    // We completed this by other means before we had a chance to retry it.\n    return;\n  } // We restore the context to what it was when we suspended.\n  // We don't restore it after we leave because it's likely that we'll end up\n  // needing a very similar context soon again.\n\n\n  switchContext(task.context);\n  var prevTaskInDEV = null;\n\n  {\n    prevTaskInDEV = currentTaskInDEV;\n    currentTaskInDEV = task;\n  }\n\n  try {\n    // We call the destructive form that mutates this task. That way if something\n    // suspends again, we can reuse the same task instead of spawning a new one.\n    renderNodeDestructive(request, task, task.node);\n    pushSegmentFinale(segment.chunks, request.responseState, segment.lastPushedText, segment.textEmbedded);\n    task.abortSet.delete(task);\n    segment.status = COMPLETED;\n    finishedTask(request, task.blockedBoundary, segment);\n  } catch (x) {\n    resetHooksState();\n\n    if (typeof x === 'object' && x !== null && typeof x.then === 'function') {\n      // Something suspended again, let's pick it back up later.\n      var ping = task.ping;\n      x.then(ping, ping);\n    } else {\n      task.abortSet.delete(task);\n      segment.status = ERRORED;\n      erroredTask(request, task.blockedBoundary, segment, x);\n    }\n  } finally {\n    {\n      currentTaskInDEV = prevTaskInDEV;\n    }\n  }\n}\n\nfunction performWork(request) {\n  if (request.status === CLOSED) {\n    return;\n  }\n\n  var prevContext = getActiveContext();\n  var prevDispatcher = ReactCurrentDispatcher$1.current;\n  ReactCurrentDispatcher$1.current = Dispatcher;\n  var prevGetCurrentStackImpl;\n\n  {\n    prevGetCurrentStackImpl = ReactDebugCurrentFrame$1.getCurrentStack;\n    ReactDebugCurrentFrame$1.getCurrentStack = getCurrentStackInDEV;\n  }\n\n  var prevResponseState = currentResponseState;\n  setCurrentResponseState(request.responseState);\n\n  try {\n    var pingedTasks = request.pingedTasks;\n    var i;\n\n    for (i = 0; i < pingedTasks.length; i++) {\n      var task = pingedTasks[i];\n      retryTask(request, task);\n    }\n\n    pingedTasks.splice(0, i);\n\n    if (request.destination !== null) {\n      flushCompletedQueues(request, request.destination);\n    }\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  } finally {\n    setCurrentResponseState(prevResponseState);\n    ReactCurrentDispatcher$1.current = prevDispatcher;\n\n    {\n      ReactDebugCurrentFrame$1.getCurrentStack = prevGetCurrentStackImpl;\n    }\n\n    if (prevDispatcher === Dispatcher) {\n      // This means that we were in a reentrant work loop. This could happen\n      // in a renderer that supports synchronous work like renderToString,\n      // when it's called from within another renderer.\n      // Normally we don't bother switching the contexts to their root/default\n      // values when leaving because we'll likely need the same or similar\n      // context again. However, when we're inside a synchronous loop like this\n      // we'll to restore the context to what it was before returning.\n      switchContext(prevContext);\n    }\n  }\n}\n\nfunction flushSubtree(request, destination, segment) {\n  segment.parentFlushed = true;\n\n  switch (segment.status) {\n    case PENDING:\n      {\n        // We're emitting a placeholder for this segment to be filled in later.\n        // Therefore we'll need to assign it an ID - to refer to it by.\n        var segmentID = segment.id = request.nextSegmentId++; // When this segment finally completes it won't be embedded in text since it will flush separately\n\n        segment.lastPushedText = false;\n        segment.textEmbedded = false;\n        return writePlaceholder(destination, request.responseState, segmentID);\n      }\n\n    case COMPLETED:\n      {\n        segment.status = FLUSHED;\n        var r = true;\n        var chunks = segment.chunks;\n        var chunkIdx = 0;\n        var children = segment.children;\n\n        for (var childIdx = 0; childIdx < children.length; childIdx++) {\n          var nextChild = children[childIdx]; // Write all the chunks up until the next child.\n\n          for (; chunkIdx < nextChild.index; chunkIdx++) {\n            writeChunk(destination, chunks[chunkIdx]);\n          }\n\n          r = flushSegment(request, destination, nextChild);\n        } // Finally just write all the remaining chunks\n\n\n        for (; chunkIdx < chunks.length - 1; chunkIdx++) {\n          writeChunk(destination, chunks[chunkIdx]);\n        }\n\n        if (chunkIdx < chunks.length) {\n          r = writeChunkAndReturn(destination, chunks[chunkIdx]);\n        }\n\n        return r;\n      }\n\n    default:\n      {\n        throw new Error('Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React.');\n      }\n  }\n}\n\nfunction flushSegment(request, destination, segment) {\n  var boundary = segment.boundary;\n\n  if (boundary === null) {\n    // Not a suspense boundary.\n    return flushSubtree(request, destination, segment);\n  }\n\n  boundary.parentFlushed = true; // This segment is a Suspense boundary. We need to decide whether to\n  // emit the content or the fallback now.\n\n  if (boundary.forceClientRender) {\n    // Emit a client rendered suspense boundary wrapper.\n    // We never queue the inner boundary so we'll never emit its content or partial segments.\n    writeStartClientRenderedSuspenseBoundary(destination, request.responseState, boundary.errorDigest, boundary.errorMessage, boundary.errorComponentStack); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndClientRenderedSuspenseBoundary(destination, request.responseState);\n  } else if (boundary.pendingTasks > 0) {\n    // This boundary is still loading. Emit a pending suspense boundary wrapper.\n    // Assign an ID to refer to the future content by.\n    boundary.rootSegmentID = request.nextSegmentId++;\n\n    if (boundary.completedSegments.length > 0) {\n      // If this is at least partially complete, we can queue it to be partially emitted early.\n      request.partialBoundaries.push(boundary);\n    } /// This is the first time we should have referenced this ID.\n\n\n    var id = boundary.id = assignSuspenseBoundaryID(request.responseState);\n    writeStartPendingSuspenseBoundary(destination, request.responseState, id); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndPendingSuspenseBoundary(destination, request.responseState);\n  } else if (boundary.byteSize > request.progressiveChunkSize) {\n    // This boundary is large and will be emitted separately so that we can progressively show\n    // other content. We add it to the queue during the flush because we have to ensure that\n    // the parent flushes first so that there's something to inject it into.\n    // We also have to make sure that it's emitted into the queue in a deterministic slot.\n    // I.e. we can't insert it here when it completes.\n    // Assign an ID to refer to the future content by.\n    boundary.rootSegmentID = request.nextSegmentId++;\n    request.completedBoundaries.push(boundary); // Emit a pending rendered suspense boundary wrapper.\n\n    writeStartPendingSuspenseBoundary(destination, request.responseState, boundary.id); // Flush the fallback.\n\n    flushSubtree(request, destination, segment);\n    return writeEndPendingSuspenseBoundary(destination, request.responseState);\n  } else {\n    // We can inline this boundary's content as a complete boundary.\n    writeStartCompletedSuspenseBoundary(destination, request.responseState);\n    var completedSegments = boundary.completedSegments;\n\n    if (completedSegments.length !== 1) {\n      throw new Error('A previously unvisited boundary must have exactly one root segment. This is a bug in React.');\n    }\n\n    var contentSegment = completedSegments[0];\n    flushSegment(request, destination, contentSegment);\n    return writeEndCompletedSuspenseBoundary(destination, request.responseState);\n  }\n}\n\nfunction flushClientRenderedBoundary(request, destination, boundary) {\n  return writeClientRenderBoundaryInstruction(destination, request.responseState, boundary.id, boundary.errorDigest, boundary.errorMessage, boundary.errorComponentStack);\n}\n\nfunction flushSegmentContainer(request, destination, segment) {\n  writeStartSegment(destination, request.responseState, segment.formatContext, segment.id);\n  flushSegment(request, destination, segment);\n  return writeEndSegment(destination, segment.formatContext);\n}\n\nfunction flushCompletedBoundary(request, destination, boundary) {\n  var completedSegments = boundary.completedSegments;\n  var i = 0;\n\n  for (; i < completedSegments.length; i++) {\n    var segment = completedSegments[i];\n    flushPartiallyCompletedSegment(request, destination, boundary, segment);\n  }\n\n  completedSegments.length = 0;\n  return writeCompletedBoundaryInstruction(destination, request.responseState, boundary.id, boundary.rootSegmentID);\n}\n\nfunction flushPartialBoundary(request, destination, boundary) {\n  var completedSegments = boundary.completedSegments;\n  var i = 0;\n\n  for (; i < completedSegments.length; i++) {\n    var segment = completedSegments[i];\n\n    if (!flushPartiallyCompletedSegment(request, destination, boundary, segment)) {\n      i++;\n      completedSegments.splice(0, i); // Only write as much as the buffer wants. Something higher priority\n      // might want to write later.\n\n      return false;\n    }\n  }\n\n  completedSegments.splice(0, i);\n  return true;\n}\n\nfunction flushPartiallyCompletedSegment(request, destination, boundary, segment) {\n  if (segment.status === FLUSHED) {\n    // We've already flushed this inline.\n    return true;\n  }\n\n  var segmentID = segment.id;\n\n  if (segmentID === -1) {\n    // This segment wasn't previously referred to. This happens at the root of\n    // a boundary. We make kind of a leap here and assume this is the root.\n    var rootSegmentID = segment.id = boundary.rootSegmentID;\n\n    if (rootSegmentID === -1) {\n      throw new Error('A root segment ID must have been assigned by now. This is a bug in React.');\n    }\n\n    return flushSegmentContainer(request, destination, segment);\n  } else {\n    flushSegmentContainer(request, destination, segment);\n    return writeCompletedSegmentInstruction(destination, request.responseState, segmentID);\n  }\n}\n\nfunction flushCompletedQueues(request, destination) {\n  beginWriting();\n\n  try {\n    // The structure of this is to go through each queue one by one and write\n    // until the sink tells us to stop. When we should stop, we still finish writing\n    // that item fully and then yield. At that point we remove the already completed\n    // items up until the point we completed them.\n    // TODO: Emit preloading.\n    // TODO: It's kind of unfortunate to keep checking this array after we've already\n    // emitted the root.\n    var completedRootSegment = request.completedRootSegment;\n\n    if (completedRootSegment !== null && request.pendingRootTasks === 0) {\n      flushSegment(request, destination, completedRootSegment);\n      request.completedRootSegment = null;\n      writeCompletedRoot(destination, request.responseState);\n    } // We emit client rendering instructions for already emitted boundaries first.\n    // This is so that we can signal to the client to start client rendering them as\n    // soon as possible.\n\n\n    var clientRenderedBoundaries = request.clientRenderedBoundaries;\n    var i;\n\n    for (i = 0; i < clientRenderedBoundaries.length; i++) {\n      var boundary = clientRenderedBoundaries[i];\n\n      if (!flushClientRenderedBoundary(request, destination, boundary)) {\n        request.destination = null;\n        i++;\n        clientRenderedBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    clientRenderedBoundaries.splice(0, i); // Next we emit any complete boundaries. It's better to favor boundaries\n    // that are completely done since we can actually show them, than it is to emit\n    // any individual segments from a partially complete boundary.\n\n    var completedBoundaries = request.completedBoundaries;\n\n    for (i = 0; i < completedBoundaries.length; i++) {\n      var _boundary = completedBoundaries[i];\n\n      if (!flushCompletedBoundary(request, destination, _boundary)) {\n        request.destination = null;\n        i++;\n        completedBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    completedBoundaries.splice(0, i); // Allow anything written so far to flush to the underlying sink before\n    // we continue with lower priorities.\n\n    completeWriting(destination);\n    beginWriting(destination); // TODO: Here we'll emit data used by hydration.\n    // Next we emit any segments of any boundaries that are partially complete\n    // but not deeply complete.\n\n    var partialBoundaries = request.partialBoundaries;\n\n    for (i = 0; i < partialBoundaries.length; i++) {\n      var _boundary2 = partialBoundaries[i];\n\n      if (!flushPartialBoundary(request, destination, _boundary2)) {\n        request.destination = null;\n        i++;\n        partialBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    partialBoundaries.splice(0, i); // Next we check the completed boundaries again. This may have had\n    // boundaries added to it in case they were too larged to be inlined.\n    // New ones might be added in this loop.\n\n    var largeBoundaries = request.completedBoundaries;\n\n    for (i = 0; i < largeBoundaries.length; i++) {\n      var _boundary3 = largeBoundaries[i];\n\n      if (!flushCompletedBoundary(request, destination, _boundary3)) {\n        request.destination = null;\n        i++;\n        largeBoundaries.splice(0, i);\n        return;\n      }\n    }\n\n    largeBoundaries.splice(0, i);\n  } finally {\n    completeWriting(destination);\n\n    if (request.allPendingTasks === 0 && request.pingedTasks.length === 0 && request.clientRenderedBoundaries.length === 0 && request.completedBoundaries.length === 0 // We don't need to check any partially completed segments because\n    // either they have pending task or they're complete.\n    ) {\n        {\n          if (request.abortableTasks.size !== 0) {\n            error('There was still abortable task at the root when we closed. This is a bug in React.');\n          }\n        } // We're done.\n\n\n        close(destination);\n      }\n  }\n}\n\nfunction startWork(request) {\n  scheduleWork(function () {\n    return performWork(request);\n  });\n}\nfunction startFlowing(request, destination) {\n  if (request.status === CLOSING) {\n    request.status = CLOSED;\n    closeWithError(destination, request.fatalError);\n    return;\n  }\n\n  if (request.status === CLOSED) {\n    return;\n  }\n\n  if (request.destination !== null) {\n    // We're already flowing.\n    return;\n  }\n\n  request.destination = destination;\n\n  try {\n    flushCompletedQueues(request, destination);\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  }\n} // This is called to early terminate a request. It puts all pending boundaries in client rendered state.\n\nfunction abort(request, reason) {\n  try {\n    var abortableTasks = request.abortableTasks;\n    abortableTasks.forEach(function (task) {\n      return abortTask(task, request, reason);\n    });\n    abortableTasks.clear();\n\n    if (request.destination !== null) {\n      flushCompletedQueues(request, request.destination);\n    }\n  } catch (error) {\n    logRecoverableError(request, error);\n    fatalError(request, error);\n  }\n}\n\nfunction renderToReadableStream(children, options) {\n  return new Promise(function (resolve, reject) {\n    var onFatalError;\n    var onAllReady;\n    var allReady = new Promise(function (res, rej) {\n      onAllReady = res;\n      onFatalError = rej;\n    });\n\n    function onShellReady() {\n      var stream = new ReadableStream({\n        type: 'bytes',\n        pull: function (controller) {\n          startFlowing(request, controller);\n        },\n        cancel: function (reason) {\n          abort(request);\n        }\n      }, // $FlowFixMe size() methods are not allowed on byte streams.\n      {\n        highWaterMark: 0\n      }); // TODO: Move to sub-classing ReadableStream.\n\n      stream.allReady = allReady;\n      resolve(stream);\n    }\n\n    function onShellError(error) {\n      // If the shell errors the caller of `renderToReadableStream` won't have access to `allReady`.\n      // However, `allReady` will be rejected by `onFatalError` as well.\n      // So we need to catch the duplicate, uncatchable fatal error in `allReady` to prevent a `UnhandledPromiseRejection`.\n      allReady.catch(function () {});\n      reject(error);\n    }\n\n    var request = createRequest(children, createResponseState(options ? options.identifierPrefix : undefined, options ? options.nonce : undefined, options ? options.bootstrapScriptContent : undefined, options ? options.bootstrapScripts : undefined, options ? options.bootstrapModules : undefined), createRootFormatContext(options ? options.namespaceURI : undefined), options ? options.progressiveChunkSize : undefined, options ? options.onError : undefined, onAllReady, onShellReady, onShellError, onFatalError);\n\n    if (options && options.signal) {\n      var signal = options.signal;\n\n      var listener = function () {\n        abort(request, signal.reason);\n        signal.removeEventListener('abort', listener);\n      };\n\n      signal.addEventListener('abort', listener);\n    }\n\n    startWork(request);\n  });\n}\n\nexports.renderToReadableStream = renderToReadableStream;\nexports.version = ReactVersion;\n  })();\n}\n","'use strict';\n\nvar l, s;\nif (process.env.NODE_ENV === 'production') {\n  l = require('./cjs/react-dom-server-legacy.browser.production.min.js');\n  s = require('./cjs/react-dom-server.browser.production.min.js');\n} else {\n  l = require('./cjs/react-dom-server-legacy.browser.development.js');\n  s = require('./cjs/react-dom-server.browser.development.js');\n}\n\nexports.version = l.version;\nexports.renderToString = l.renderToString;\nexports.renderToStaticMarkup = l.renderToStaticMarkup;\nexports.renderToNodeStream = l.renderToNodeStream;\nexports.renderToStaticNodeStream = l.renderToStaticNodeStream;\nexports.renderToReadableStream = s.renderToReadableStream;\n","import { Font } from \"opentype.js\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { PapyrusNode } from \"../types\";\n\nlet domImpl: any = undefined;\nlet fetchImpl: ((input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) | undefined = undefined;\n\n/**\n * We use this to register a window in environments where one wouldn't be available.\n */\nexport function registerWindowImplementation(impl: any) {\n    domImpl = impl;\n}\n\nexport function registerFetchImplementation(impl: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>) {\n    fetchImpl = impl;\n}\n\nfunction getWindow(): Window {\n    if (!domImpl) {\n        console.log(\n            \"DOM constructor is not registered. Assuming browser environment. If not, please register DOM constructor before calling this function.\",\n        );\n        return window;\n    }\n    return new domImpl().window;\n}\n\nexport function fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n    if (!fetchImpl) {\n        if (typeof window !== \"undefined\" && window.fetch) {\n            return window.fetch(input, init);\n        }\n        if (typeof global !== \"undefined\" && global.fetch) {\n            return global.fetch(input, init);\n        }\n        throw new Error(\"Fetch implementation is not registered. Please register it before calling this function.\");\n    }\n    return fetchImpl(input, init);\n}\n\nconst arrayBufferMimeTypeCache: Map<string, string> = new Map();\nconst arrayBufferFileCache: Map<string, Promise<ArrayBuffer>> = new Map();\nconst textFileCache: Map<string, Promise<string>> = new Map();\n\nconst getFromArrayBufferCache = async (url: string): Promise<ArrayBuffer> => {\n    const cachedPromise = arrayBufferFileCache.get(url);\n    if (cachedPromise) return cachedPromise;\n    const getData = async () => {\n        const resp = await fetch(url);\n        arrayBufferMimeTypeCache.set(url, resp.headers?.get(\"content-type\") || \"\");\n        return await resp.arrayBuffer();\n    };\n    const ab = getData();\n    arrayBufferFileCache.set(url, ab);\n    return ab;\n};\n\nconst getFromTextCache = async (url: string): Promise<string> => {\n    const cachedPromise = textFileCache.get(url);\n    if (cachedPromise) return cachedPromise;\n    const getData = async () => {\n        const resp = await fetch(url);\n        return await resp.text();\n    };\n    const ab = getData();\n    textFileCache.set(url, ab);\n    return ab;\n};\n\n// Whether each capability in the list is present.\n// The Web API has all sorts of stuff that aren't present on the server.\nconst hasCapabilities = (capabilities: string[]): boolean => {\n    return capabilities.every((cap) => cap !== \"undefined\");\n};\n\nexport const createElement = (tag: string): HTMLElement => {\n    if (hasCapabilities([typeof document])) {\n        return document.createElement(tag);\n    }\n    const doc = getWindow().document;\n    return doc.createElement(tag);\n};\n\nexport const createElementNS = (namespace: string, tag: string) => {\n    if (hasCapabilities([typeof document])) {\n        return document.createElementNS(namespace, tag);\n    }\n    const doc = getWindow().document;\n    const elem = doc.createElement(tag);\n    elem.setAttribute(\"xmlns\", namespace);\n    return elem;\n};\n\nexport const domParser = () => {\n    if (hasCapabilities([typeof DOMParser])) {\n        return new DOMParser();\n    }\n    const w = getWindow();\n    return new (w as any).DOMParser();\n};\n\nexport const domParserConstructor = (): typeof DOMParser => {\n    if (hasCapabilities([typeof DOMParser])) {\n        return DOMParser;\n    }\n    const w = getWindow();\n    return (w as any).DOMParser;\n};\n\nexport const fetchAsArrayBuffer = (externalUrl: string, allowCache?: boolean): Promise<ArrayBuffer> => {\n    return new Promise((resolve, reject) => {\n        if (!allowCache) {\n            fetch(externalUrl)\n                .then((response) => {\n                    response.arrayBuffer().then(resolve).catch(reject);\n                })\n                .catch((err) => {\n                    reject(err);\n                });\n        } else {\n            getFromArrayBufferCache(externalUrl).then(resolve).catch(reject);\n        }\n    });\n};\n\nexport const fetchAsString = (externalUrl: string, allowCache?: boolean): Promise<string> => {\n    return new Promise((resolve, reject) => {\n        if (!allowCache) {\n            fetch(externalUrl)\n                .then((response) => {\n                    response.text().then(resolve).catch(reject);\n                })\n                .catch(reject);\n        } else {\n            getFromTextCache(externalUrl).then(resolve).catch(reject);\n        }\n    });\n};\n\nexport const renderPapyrusComponentAsString = (component: PapyrusNode) => {\n    const svg = renderToStaticMarkup(component as any);\n    return svg;\n};\n\n/**\n * Cache for fontfaces to prevent multiple loads of the same font.\n * This is required since the browser will still attempt to load it again every time, even if it would hit the cache.\n * Spawning off many requests for items that would hit cache still takes time, and can actually get blocked by the browser.\n */\nconst fontFaceCache: Map<string, Promise<FontFace>> = new Map();\n\n/**\n * Loads a given font as a font face set in the browser. This function has\n * no effect in a server environment, in the browser it gives the browser access to a font face for\n * use in font rendering.\n * If the font has already been loaded, this function will return the existing promise.\n * @param font An opentype font object.\n * @param externalUrl An external URL that can be used to access the original font file.\n * @returns A promise resolved when the font has been loaded. Rejected if an error occured.\n */\nexport const loadFontFaceSet = async (font: Font, externalUrl: string): Promise<FontFace | undefined> => {\n    if (hasCapabilities([typeof FontFace])) {\n        if (fontFaceCache.has(externalUrl)) {\n            return fontFaceCache.get(externalUrl);\n        }\n        const familyName = font.names.fullName[\"en\"];\n        const fontFace = new FontFace(familyName, `url(${externalUrl})`);\n        (document.fonts as any).add(fontFace);\n        const promise = fontFace.load();\n        fontFaceCache.set(externalUrl, promise);\n        return promise;\n    }\n    return undefined;\n};\n\nexport const xmlSerializer = (): XMLSerializer => {\n    if (hasCapabilities([typeof XMLSerializer])) {\n        return new XMLSerializer();\n    }\n    const w = getWindow();\n    return new (w as any).XMLSerializer();\n};\n\nexport const toBase64 = (input: string): string => {\n    return btoa(input);\n};\n\n// The file-type library guesses an array buffer's mime type using magic numbers.\n// It therefore only works on binary formats, not text formats like SVG.\n// SVG is currently the only text case that this function must handle.\n// If that ever changes then this function will have to become smarter.\nexport const getMimeTypeOfArrayBuffer = (arrayBuffer: ArrayBuffer): string => {\n    function getMimeTypeFromArrayBuffer() {\n        const uint8arr = new Uint8Array(arrayBuffer);\n        const len = 4;\n        if (uint8arr.length >= len) {\n            const signatureArr = new Array(len);\n            for (let i = 0; i < len; i++) signatureArr[i] = new Uint8Array(arrayBuffer)[i].toString(16);\n            const signature = signatureArr.join(\"\").toUpperCase();\n\n            switch (signature) {\n                case \"89504E47\":\n                    return \"image/png\";\n                case \"47494638\":\n                    return \"image/gif\";\n                case \"25504446\":\n                    return \"application/pdf\";\n                case \"504B0304\":\n                    return \"application/zip\";\n            }\n\n            // Some magic numbers are shorter.\n            const sig = signature.slice(0, 4);\n            switch (sig) {\n                case \"FFD8\":\n                    return \"image/jpeg\";\n            }\n        }\n        return null;\n    }\n    const mimeTypeData = getMimeTypeFromArrayBuffer();\n    if (!mimeTypeData) {\n        return \"image/svg+xml\";\n    }\n    return mimeTypeData;\n};\n\nexport const dataUrlFromExternalUrl = async (url: string): Promise<string> => {\n    const blob = await getFromArrayBufferCache(url);\n    const type = arrayBufferMimeTypeCache.get(url) || getMimeTypeOfArrayBuffer(blob);\n    return await webBlobToDataUrl(new Blob([blob], { type }));\n};\n\nconst uint8ArrayToString = (array: Uint8Array): string => {\n    let binary = \"\";\n    const len = array.byteLength;\n    for (let i = 0; i < len; i++) {\n        binary += String.fromCharCode(array[i]);\n    }\n    return binary;\n};\n\nexport const arrayBufferToDataUrl = async (arrayBuffer: ArrayBuffer): Promise<string> => {\n    const mimeType = getMimeTypeOfArrayBuffer(arrayBuffer);\n\n    const uint8Array = new Uint8Array(arrayBuffer);\n    const binaryString = uint8ArrayToString(uint8Array);\n    const b64 = btoa(binaryString);\n\n    return `data:${mimeType};base64,${b64}`;\n};\n\nexport const svgToDataUrl = (svgString: string): string => {\n    return `data:image/svg+xml;base64,${btoa(svgString)}`;\n};\n\nexport const dataUrlToArrayBuffer = (dataUrl: string): ArrayBuffer => {\n    // strip newlines\n    const uri = dataUrl.replace(/\\r?\\n/g, \"\");\n\n    // split the URI up into the \"metadata\" and the \"data\" portions\n    const firstComma = uri.indexOf(\",\");\n    if (firstComma === -1 || firstComma <= 4) {\n        throw new TypeError(\"malformed data: URI\");\n    }\n\n    // remove the \"data:\" scheme and parse the metadata\n    const meta = uri.substring(5, firstComma).split(\";\");\n\n    let base64 = false;\n    for (let i = 1; i < meta.length; i++) {\n        if (meta[i] === \"base64\") {\n            base64 = true;\n        }\n    }\n    // get the encoded data portion and decode URI-encoded chars\n    const data = decodeURI(uri.substring(firstComma + 1));\n\n    // convert the data to an array buffer.\n    if (base64) {\n        const buf = new Uint8Array(\n            atob(data)\n                .split(\"\")\n                .map((c) => c.charCodeAt(0)),\n        );\n        return buf.buffer;\n    } else {\n        const buf = new Uint8Array(data.split(\"\").map((c) => c.charCodeAt(0)));\n        return buf.buffer;\n    }\n};\n\nconst webBlobToDataUrl = (blob: Blob): Promise<string> => {\n    return new Promise((resolve, reject) => {\n        const a = new FileReader();\n        a.onload = function (e: any) {\n            const target = e.target;\n            if (!target || !target.result) {\n                reject();\n            } else {\n                resolve(target.result.toString());\n            }\n        };\n        a.readAsDataURL(blob);\n    });\n};\n","import { wrap } from \"optimism\";\nimport { Kind, visit } from \"graphql\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { stripTypename, isPlainObject, cacheSizes, } from \"../../utilities/index.js\";\nimport { WeakCache } from \"@wry/caches\";\nexport var KEEP = \"__KEEP\";\nexport function removeTypenameFromVariables(options) {\n    if (options === void 0) { options = Object.create(null); }\n    return Object.assign(new ApolloLink(function (operation, forward) {\n        var except = options.except;\n        var query = operation.query, variables = operation.variables;\n        if (variables) {\n            operation.variables =\n                except ?\n                    maybeStripTypenameUsingConfig(query, variables, except)\n                    : stripTypename(variables);\n        }\n        return forward(operation);\n    }), globalThis.__DEV__ !== false ?\n        {\n            getMemoryInternals: function () {\n                var _a;\n                return {\n                    removeTypenameFromVariables: {\n                        getVariableDefinitions: (_a = getVariableDefinitions === null || getVariableDefinitions === void 0 ? void 0 : getVariableDefinitions.size) !== null && _a !== void 0 ? _a : 0,\n                    },\n                };\n            },\n        }\n        : {});\n}\nfunction maybeStripTypenameUsingConfig(query, variables, config) {\n    var variableDefinitions = getVariableDefinitions(query);\n    return Object.fromEntries(Object.entries(variables).map(function (keyVal) {\n        var key = keyVal[0], value = keyVal[1];\n        var typename = variableDefinitions[key];\n        var typenameConfig = config[typename];\n        keyVal[1] =\n            typenameConfig ?\n                maybeStripTypename(value, typenameConfig)\n                : stripTypename(value);\n        return keyVal;\n    }));\n}\nfunction maybeStripTypename(value, config) {\n    if (config === KEEP) {\n        return value;\n    }\n    if (Array.isArray(value)) {\n        return value.map(function (item) { return maybeStripTypename(item, config); });\n    }\n    if (isPlainObject(value)) {\n        var modified_1 = {};\n        Object.keys(value).forEach(function (key) {\n            var child = value[key];\n            if (key === \"__typename\") {\n                return;\n            }\n            var fieldConfig = config[key];\n            modified_1[key] =\n                fieldConfig ?\n                    maybeStripTypename(child, fieldConfig)\n                    : stripTypename(child);\n        });\n        return modified_1;\n    }\n    return value;\n}\nvar getVariableDefinitions = wrap(function (document) {\n    var definitions = {};\n    visit(document, {\n        VariableDefinition: function (node) {\n            definitions[node.variable.name.value] = unwrapType(node.type);\n        },\n    });\n    return definitions;\n}, {\n    max: cacheSizes[\"removeTypenameFromVariables.getVariableDefinitions\"] ||\n        2000 /* defaultCacheSizes[\"removeTypenameFromVariables.getVariableDefinitions\"] */,\n    cache: WeakCache,\n});\nfunction unwrapType(node) {\n    switch (node.kind) {\n        case Kind.NON_NULL_TYPE:\n            return unwrapType(node.type);\n        case Kind.LIST_TYPE:\n            return unwrapType(node.type);\n        case Kind.NAMED_TYPE:\n            return node.name.value;\n    }\n}\n//# sourceMappingURL=removeTypenameFromVariables.js.map","export function buildDelayFunction(delayOptions) {\n    var _a = delayOptions || {}, _b = _a.initial, initial = _b === void 0 ? 300 : _b, _c = _a.jitter, jitter = _c === void 0 ? true : _c, _d = _a.max, max = _d === void 0 ? Infinity : _d;\n    // If we're jittering, baseDelay is half of the maximum delay for that\n    // attempt (and is, on average, the delay we will encounter).\n    // If we're not jittering, adjust baseDelay so that the first attempt\n    // lines up with initialDelay, for everyone's sanity.\n    var baseDelay = jitter ? initial : initial / 2;\n    return function delayFunction(count) {\n        var delay = Math.min(max, baseDelay * Math.pow(2, count));\n        if (jitter) {\n            // We opt for a full jitter approach for a mostly uniform distribution,\n            // but bound it within initialDelay and delay for everyone's sanity.\n            delay = Math.random() * delay;\n        }\n        return delay;\n    };\n}\n//# sourceMappingURL=delayFunction.js.map","export function buildRetryFunction(retryOptions) {\n    var _a = retryOptions || {}, retryIf = _a.retryIf, _b = _a.max, max = _b === void 0 ? 5 : _b;\n    return function retryFunction(count, operation, error) {\n        if (count >= max)\n            return false;\n        return retryIf ? retryIf(error, operation) : !!error;\n    };\n}\n//# sourceMappingURL=retryFunction.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { buildDelayFunction } from \"./delayFunction.js\";\nimport { buildRetryFunction } from \"./retryFunction.js\";\nimport { ApolloError, graphQLResultHasProtocolErrors, PROTOCOL_ERRORS_SYMBOL, } from \"../../errors/index.js\";\n/**\n * Tracking and management of operations that may be (or currently are) retried.\n */\nvar RetryableOperation = /** @class */ (function () {\n    function RetryableOperation(observer, operation, forward, delayFor, retryIf) {\n        var _this = this;\n        this.observer = observer;\n        this.operation = operation;\n        this.forward = forward;\n        this.delayFor = delayFor;\n        this.retryIf = retryIf;\n        this.retryCount = 0;\n        this.currentSubscription = null;\n        this.onError = function (error) { return __awaiter(_this, void 0, void 0, function () {\n            var shouldRetry;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        this.retryCount += 1;\n                        return [4 /*yield*/, this.retryIf(this.retryCount, this.operation, error)];\n                    case 1:\n                        shouldRetry = _a.sent();\n                        if (shouldRetry) {\n                            this.scheduleRetry(this.delayFor(this.retryCount, this.operation, error));\n                            return [2 /*return*/];\n                        }\n                        this.observer.error(error);\n                        return [2 /*return*/];\n                }\n            });\n        }); };\n        this.try();\n    }\n    /**\n     * Stop retrying for the operation, and cancel any in-progress requests.\n     */\n    RetryableOperation.prototype.cancel = function () {\n        if (this.currentSubscription) {\n            this.currentSubscription.unsubscribe();\n        }\n        clearTimeout(this.timerId);\n        this.timerId = undefined;\n        this.currentSubscription = null;\n    };\n    RetryableOperation.prototype.try = function () {\n        var _this = this;\n        this.currentSubscription = this.forward(this.operation).subscribe({\n            next: function (result) {\n                var _a;\n                if (graphQLResultHasProtocolErrors(result)) {\n                    _this.onError(new ApolloError({\n                        protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL],\n                    }));\n                    // Unsubscribe from the current subscription to prevent the `complete`\n                    // handler to be called as a result of the stream closing.\n                    (_a = _this.currentSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n                    return;\n                }\n                _this.observer.next(result);\n            },\n            error: this.onError,\n            complete: this.observer.complete.bind(this.observer),\n        });\n    };\n    RetryableOperation.prototype.scheduleRetry = function (delay) {\n        var _this = this;\n        if (this.timerId) {\n            throw new Error(\"RetryLink BUG! Encountered overlapping retries\");\n        }\n        this.timerId = setTimeout(function () {\n            _this.timerId = undefined;\n            _this.try();\n        }, delay);\n    };\n    return RetryableOperation;\n}());\nvar RetryLink = /** @class */ (function (_super) {\n    __extends(RetryLink, _super);\n    function RetryLink(options) {\n        var _this = _super.call(this) || this;\n        var _a = options || {}, attempts = _a.attempts, delay = _a.delay;\n        _this.delayFor =\n            typeof delay === \"function\" ? delay : buildDelayFunction(delay);\n        _this.retryIf =\n            typeof attempts === \"function\" ? attempts : buildRetryFunction(attempts);\n        return _this;\n    }\n    RetryLink.prototype.request = function (operation, nextLink) {\n        var _this = this;\n        return new Observable(function (observer) {\n            var retryable = new RetryableOperation(observer, operation, nextLink, _this.delayFor, _this.retryIf);\n            return function () {\n                retryable.cancel();\n            };\n        });\n    };\n    return RetryLink;\n}(ApolloLink));\nexport { RetryLink };\n//# sourceMappingURL=retryLink.js.map","import { ApolloClient, createHttpLink, from, InMemoryCache } from \"@apollo/client/core\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { onError } from \"@apollo/client/link/error\";\nimport { spiffCoreConfiguration } from \"../Configuration\";\nimport { fetch } from \"../util/crossplatform\";\nimport { removeTypenameFromVariables } from \"@apollo/client/link/remove-typename\";\nimport { RetryLink } from \"@apollo/client/link/retry\";\nimport { SpiffCommerceClient } from \"../client\";\nimport { Integration } from \"..\";\n\n/**\n * The different types of authentication for server calls.\n */\ninterface AuthenticationObject {\n    activeIntegration?: string;\n    applicationKey?: string;\n    bearer?: string;\n    customerToken?: string;\n    partnerId?: string;\n}\n\nlet localCustomerToken: string | undefined = undefined;\nexport const setLocalCustomerToken = (customerToken: string) => {\n    localCustomerToken = customerToken;\n};\n\nlet applicationKey: string | undefined = undefined;\nexport const setApplicationKey = (key: string) => {\n    applicationKey = key;\n};\n\nexport const getApplicationKey = () => {\n    return applicationKey;\n};\n\nlet bearerAuthenticationToken: string | undefined = undefined;\nexport const setBearerAuthenticationToken = (token: string) => {\n    bearerAuthenticationToken = token;\n};\n\n/**\n *  Request authentication from the parent window.\n * @returns A promise resolving to an authentication object containing\n *          the required credentials.\n */\nconst getHubAuthentication = (): Promise<AuthenticationObject> => {\n    return new Promise((resolve) => {\n        const hubUrl = spiffCoreConfiguration.getHubUrl();\n        const onAuthenticationReceived = (event: MessageEvent<AuthenticationObject>) => {\n            if (event.origin !== hubUrl) return;\n            window.removeEventListener(\"message\", onAuthenticationReceived);\n            resolve(event.data);\n        };\n        if (window.parent !== window) {\n            window.addEventListener(\"message\", onAuthenticationReceived, false);\n            window.parent.postMessage(\"ready\", hubUrl);\n        }\n    });\n};\n\n/**\n * Retrieve stored authentication values for server calls.\n */\nconst getServerAuth = async (): Promise<AuthenticationObject> => {\n    const localAuthObj = {\n        applicationKey: applicationKey,\n        customerToken: localCustomerToken,\n        bearer: bearerAuthenticationToken,\n    };\n\n    // When in an internal iframe, get authentication from the parent window.\n    if (\n        typeof window !== \"undefined\" &&\n        (window.location.href.includes(\"/workflows/product/\") || window.location.href.includes(\"hub=true\"))\n    ) {\n        return { ...(await getHubAuthentication()), ...localAuthObj };\n    } else {\n        return localAuthObj;\n    }\n};\n\nasync function followRedirectFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n    const serverUrl = spiffCoreConfiguration.getServerUrl();\n    const moonlightUrl = serverUrl.includes(\".aumelbdev.spiffcommerce.com\")\n        ? \"https://moonlight.aumelbdev.spiffcommerce.com\"\n        : serverUrl.includes(\".us.spiffcommerce.com\")\n          ? \"https://moonlight.us.spiffcommerce.com\"\n          : \"https://moonlight.au.spiffcommerce.com\";\n\n    let result = await fetch(input, { ...init, redirect: \"manual\" });\n    if (result.type === \"opaqueredirect\" || result.status === 307) {\n        if (typeof input !== \"string\" && \"url\" in input) {\n            result = await fetch({ ...input, url: `${moonlightUrl}/graphql` }, init);\n        } else {\n            result = await fetch(`${moonlightUrl}/graphql`, init);\n        }\n    }\n    return result;\n}\n\nclass GraphQlManager {\n    private shadowGraphqlClient: ApolloClient<any>;\n    private spiffClient?: SpiffCommerceClient;\n\n    constructor() {\n        this.shadowGraphqlClient = this.constructShadowGraphqlClient();\n        spiffCoreConfiguration.addServerUrlCallback(() => {\n            this.shadowGraphqlClient = this.constructShadowGraphqlClient();\n        });\n    }\n\n    setSpiffCommerceClient(client: SpiffCommerceClient) {\n        this.spiffClient = client;\n        this.shadowGraphqlClient = this.constructShadowGraphqlClient();\n    }\n\n    getShadowGraphqlClient() {\n        return this.shadowGraphqlClient;\n    }\n\n    private constructShadowGraphqlClient() {\n        const httpLink = createHttpLink({\n            uri: `${spiffCoreConfiguration.getServerUrl()}/graphql`,\n            fetch: followRedirectFetch,\n        });\n        const authLink = setContext(async (_request, operationContext) => {\n            const { headers } = operationContext;\n            const newHeaders = headers || {};\n            const auth = await getServerAuth();\n\n            // Request context values take precedence over stored values.\n            // These are passed on the query and mutate functions.\n            let bearer = operationContext.bearer ?? auth.bearer;\n            let useBeta = false;\n            if (this.spiffClient) {\n                try {\n                    bearer = await this.spiffClient.loggedInBearerToken();\n                } catch (_) {\n                    // No user logged-in through core.\n                }\n                try {\n                    // Avoids making a separate graphql request by calling the internal function\n                    if (!operationContext.skipIntegrationCheck) {\n                        useBeta = await this.spiffClient.getBetaEnabled();\n                    }\n                } catch (_) {\n                    // No-op\n                }\n            }\n            const partnerId = operationContext.partnerId ?? auth.partnerId;\n            const activeIntegration = operationContext.activeIntegration ?? auth.activeIntegration;\n            const transactionOwnerId = operationContext.transactionOwnerId;\n            const customerToken = operationContext.customerToken ?? auth.customerToken;\n            const applicationKey = operationContext.applicationKey ?? auth.applicationKey;\n            const bundleOwnerId = operationContext.bundleOwnerId;\n\n            /**\n             * Sentry is an optional dependency. If it's available, we check if there's an\n             * active trace & attach any sentry related headers to the request.\n             */\n            try {\n                if (window && window[\"__SENTRY__\"]) {\n                    const hub = window[\"__SENTRY__\"].hub;\n                    if (hub) {\n                        const traceHeaders = hub.traceHeaders();\n                        Object.entries(traceHeaders).forEach(([key, value]) => {\n                            newHeaders[key] = value;\n                        });\n                    }\n                }\n            } catch (e) {\n                // Sentry is not available\n            }\n\n            if (bearer) {\n                newHeaders[\"Authorization\"] = `Bearer ${bearer}`;\n            }\n            if (partnerId) {\n                newHeaders[\"partnerId\"] = partnerId;\n            }\n            if (activeIntegration) {\n                newHeaders[\"activeIntegration\"] = activeIntegration;\n            }\n            if (transactionOwnerId) {\n                newHeaders[\"transactionOwnerId\"] = transactionOwnerId;\n            }\n            if (customerToken) {\n                newHeaders[\"customerToken\"] = customerToken;\n            }\n            if (applicationKey) {\n                newHeaders[\"X-Application-Key\"] = applicationKey;\n            }\n            if (bundleOwnerId) {\n                newHeaders[\"bundleOwnerId\"] = bundleOwnerId;\n            }\n\n            if (useBeta) {\n                newHeaders[\"X-Spiff-Beta\"] = \"true\";\n            }\n\n            newHeaders[\"Allow-Moonlight-Redirect\"] = \"true\";\n\n            return {\n                headers: newHeaders,\n            };\n        });\n\n        const errorLink = onError(({ operation, graphQLErrors, networkError }) => {\n            const errors = graphQLErrors || [];\n            const context = operation.getContext();\n            // Ignore network errors for aborted requests\n            if (networkError && !context?.fetchOptions?.signal?.aborted) {\n                console.log(\"GraphQL Network error\");\n            }\n            errors.forEach(() => console.log(\"GraphQL Error: \" + operation.operationName));\n        });\n\n        const removeTypenameLink = removeTypenameFromVariables();\n\n        // Configure retries, primarily for Moonlight since it returns 429 when throttling.\n        const retryLink = new RetryLink({\n            attempts: {\n                max: 5,\n                retryIf(error, _operation) {\n                    // Allow retries for \"Too Many Requests\" responses.\n                    if (error && error.result && error.result.status === 429) {\n                        return true;\n                    }\n                    return false;\n                },\n            },\n            delay: (attempt, _operation, _error) => {\n                // Random range between 0.5x - 2x the delay.\n                const mul = Math.random() * (2 - 0.5) + 0.5;\n                return attempt * 200 * mul;\n            },\n        });\n\n        return new ApolloClient({\n            link: from([removeTypenameLink, errorLink, authLink, httpLink, retryLink]),\n            cache: new InMemoryCache(),\n            name: \"Core\",\n        });\n    }\n}\n\nconst graphQlManager = new GraphQlManager();\nexport { graphQlManager };\n","import { domParserConstructor } from \"./util/crossplatform\";\n\ninterface CustomImage {\n    height: number;\n    naturalHeight: number;\n    naturalWidth: number;\n    src: string | ArrayBuffer;\n    width: number;\n}\n\ninterface CustomContext {\n    drawImage(image: CustomCanvas | CustomImage, dx: number, dy: number): void;\n    drawImage(image: CustomCanvas | CustomImage, dx: number, dy: number, dw: number, dh: number): void;\n    drawImage(\n        image: CustomCanvas | CustomImage,\n        sx: number,\n        sy: number,\n        sw: number,\n        sh: number,\n        dx: number,\n        dy: number,\n        dw: number,\n        dh: number,\n    ): void;\n    rotate(angle: number): void;\n    scale(x: number, y: number): void;\n    translate(x: number, y: number): void;\n}\n\ninterface CustomCanvas {\n    height: number;\n    getContext(type: string): CustomContext | null;\n    toDataURL(): string;\n    toDataURL(type?: string, quality?: number): string;\n    width: number;\n}\n\nlet createCanvasInternal: ((width?: number, height?: number, type?: \"pdf\" | \"svg\") => CustomCanvas) | undefined;\nlet loadImageInternal: ((src: string | ArrayBuffer, allowCrossOrigin?: boolean) => Promise<CustomImage>) | undefined;\n\nconst createCanvas = (width?: number, height?: number, type?: \"pdf\" | \"svg\"): CustomCanvas => {\n    if (createCanvasInternal !== undefined) {\n        return createCanvasInternal(width, height, type);\n    }\n    try {\n        const module = documentCanvasModule(true);\n        setCanvasModule(module!);\n        return module!.createCanvas(width, height, type);\n    } catch (e) {\n        throw new Error(\"Canvas module not set\");\n    }\n};\nconst loadImage = (src: string | ArrayBuffer, allowCrossOrigin?: boolean): Promise<CustomImage> => {\n    if (loadImageInternal !== undefined) {\n        return loadImageInternal(src, allowCrossOrigin);\n    }\n    try {\n        const module = documentCanvasModule(true);\n        setCanvasModule(module!);\n        return module!.loadImage(src, allowCrossOrigin);\n    } catch (e) {\n        throw new Error(\"Canvas module not set\");\n    }\n};\n\ninterface CustomCanvasModule {\n    createCanvas: typeof createCanvas;\n    loadImage: typeof loadImage;\n}\n\nfunction setCanvasModule(module?: CustomCanvasModule) {\n    createCanvasInternal = module?.createCanvas;\n    loadImageInternal = module?.loadImage;\n}\n\nfunction documentCanvasModule(throwOnError: boolean): CustomCanvasModule | undefined {\n    try {\n        const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n        if (ctx) {\n            return {\n                createCanvas: (width?: number, height?: number, _type?: \"pdf\" | \"svg\") => {\n                    const canvas: HTMLCanvasElement = document.createElement(\"canvas\");\n                    if (width !== undefined && width !== null) {\n                        canvas.width = width;\n                    }\n                    if (height !== undefined && height !== null) {\n                        canvas.height = height;\n                    }\n                    return canvas as any;\n                },\n                loadImage: (src: string | ArrayBuffer, allowCrossOrigin?: boolean) => {\n                    return new Promise((resolve, reject) => {\n                        const image = document.createElement(\"img\");\n                        if (allowCrossOrigin !== false) {\n                            image.crossOrigin = \"Anonymous\";\n                        }\n                        image.onload = () => {\n                            resolve(image);\n                        };\n                        image.onerror = reject;\n                        image.src = src as string;\n                    });\n                },\n            };\n        }\n    } catch (e) {\n        if (throwOnError) {\n            throw e;\n        }\n    }\n    return undefined;\n}\n\n// DOMParser constructor to be used by Pith.from().\nlet domParser: typeof DOMParser | undefined;\nfunction getDomParser(): typeof DOMParser {\n    if (domParser === undefined) {\n        domParser = domParserConstructor();\n    }\n    return domParser;\n}\nfunction setDomParser(parser: typeof DOMParser) {\n    domParser = parser;\n}\n\nexport { createCanvas, documentCanvasModule, getDomParser, loadImage, setCanvasModule, setDomParser };\nexport type { CustomCanvas, CustomContext, CustomImage, CustomCanvasModule };\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define(\"exifr\",[\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).exifr={})}(this,(function(e){\"use strict\";function t(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}var s=\"undefined\"!=typeof self?self:global;const i=\"undefined\"!=typeof navigator,n=i&&\"undefined\"==typeof HTMLImageElement,r=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),a=s.Buffer,h=!!a,f=e=>void 0!==e;function l(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(f).length)}function o(e){let t=new Error(e);throw delete t.stack,t}function u(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const d=e=>String.fromCharCode.apply(null,e),c=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;class p{static from(e,t){return e instanceof this&&e.le===t?e:new p(e,void 0,void 0,t)}constructor(e,t=0,s,i){if(\"boolean\"==typeof i&&(this.le=i),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===s&&(s=e.byteLength-t);let i=new DataView(e,t,s);this._swapDataView(i)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof p){void 0===s&&(s=e.byteLength-t),(t+=e.byteOffset)+s>e.byteOffset+e.byteLength&&o(\"Creating view outside of available memory in ArrayBuffer\");let i=new DataView(e.buffer,t,s);this._swapDataView(i)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else o(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,s=p){return e instanceof DataView||e instanceof p?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||o(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new s(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new p(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return i=s,c?c.decode(i):h?Buffer.from(i).toString(\"utf8\"):decodeURIComponent(escape(d(i)));var i}getLatin1String(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return d(s)}getUnicodeString(e=0,t=this.byteLength){const s=[];for(let i=0;i<t&&e+i<this.byteLength;i+=2)s.push(this.getUint16(e+i));return d(s)}getInt8(e){return this.dataView.getInt8(e)}getUint8(e){return this.dataView.getUint8(e)}getInt16(e,t=this.le){return this.dataView.getInt16(e,t)}getInt32(e,t=this.le){return this.dataView.getInt32(e,t)}getUint16(e,t=this.le){return this.dataView.getUint16(e,t)}getUint32(e,t=this.le){return this.dataView.getUint32(e,t)}getFloat32(e,t=this.le){return this.dataView.getFloat32(e,t)}getFloat64(e,t=this.le){return this.dataView.getFloat64(e,t)}getFloat(e,t=this.le){return this.dataView.getFloat32(e,t)}getDouble(e,t=this.le){return this.dataView.getFloat64(e,t)}getUintBytes(e,t,s){switch(t){case 1:return this.getUint8(e,s);case 2:return this.getUint16(e,s);case 4:return this.getUint32(e,s);case 8:return this.getUint64&&this.getUint64(e,s)}}getUint(e,t,s){switch(t){case 8:return this.getUint8(e,s);case 16:return this.getUint16(e,s);case 32:return this.getUint32(e,s);case 64:return this.getUint64&&this.getUint64(e,s)}}toString(e){return this.dataView.toString(e,this.constructor.name)}ensureChunk(){}}function g(e,t){o(`${e} '${t}' was not loaded, try using full build of exifr.`)}class m extends Map{constructor(e){super(),this.kind=e}get(e,t){return this.has(e)||g(this.kind,e),t&&(e in t||function(e,t){o(`Unknown ${e} '${t}'.`)}(this.kind,e),t[e].enabled||g(this.kind,e)),super.get(e)}keyList(){return Array.from(this.keys())}}var y=new m(\"file parser\"),b=new m(\"segment parser\"),w=new m(\"file reader\");let k=s.fetch;const O=\"Invalid input argument\";function v(e,t){return(s=e).startsWith(\"data:\")||s.length>1e4?A(e,t,\"base64\"):r&&e.includes(\"://\")?S(e,t,\"url\",U):r?A(e,t,\"fs\"):i?S(e,t,\"url\",U):void o(O);var s}async function S(e,t,s,i){return w.has(s)?A(e,t,s):i?async function(e,t){let s=await t(e);return new p(s)}(e,i):void o(`Parser ${s} is not loaded`)}async function A(e,t,s){let i=new(w.get(s))(e,t);return await i.read(),i}const U=e=>k(e).then((e=>e.arrayBuffer())),x=e=>new Promise(((t,s)=>{let i=new FileReader;i.onloadend=()=>t(i.result||new ArrayBuffer),i.onerror=s,i.readAsArrayBuffer(e)}));class C extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function B(e,t,s){let i=new C;for(let[e,t]of s)i.set(e,t);if(Array.isArray(t))for(let s of t)e.set(s,i);else e.set(t,i);return i}function V(e,t,s){let i,n=e.get(t);for(i of s)n.set(i[0],i[1])}const I=new Map,L=new Map,T=new Map,P=37500,z=37510,F=33723,j=34675,E=34665,_=34853,D=40965,M=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],N=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],R=[\"tiff\",...N],$=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],K=[...R,...$],W=[\"makerNote\",\"userComment\"],X=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],H=[...X,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class Y{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class G extends Y{get needed(){return this.enabled||this.deps.size>0}constructor(e,s,i,n){if(super(),t(this,\"enabled\",!1),t(this,\"skip\",new Set),t(this,\"pick\",new Set),t(this,\"deps\",new Set),t(this,\"translateKeys\",!1),t(this,\"translateValues\",!1),t(this,\"reviveValues\",!1),this.key=e,this.enabled=s,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=$.includes(e),this.canBeFiltered&&(this.dict=I.get(e)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if(\"object\"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:e,skip:t}=i;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:o(`Invalid options argument: ${i}`)}applyInheritables(e){let t,s;for(t of X)s=e[t],void 0!==s&&(this[t]=s)}translateTagSet(e,t){if(this.dict){let s,i,{tagKeys:n,tagValues:r}=this.dict;for(s of e)\"string\"==typeof s?(i=r.indexOf(s),-1===i&&(i=n.indexOf(Number(s))),-1!==i&&t.add(Number(n[i]))):t.add(s)}else for(let s of e)t.add(s)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,te(this.pick,this.deps)):this.enabled&&this.pick.size>0&&te(this.pick,this.deps)}}var J={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},q=new Map;class Q extends Y{static useCached(e){let t=q.get(e);return void 0!==t||(t=new this(e),q.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):o(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=i?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of M)this[e]=J[e];for(e of H)this[e]=J[e];for(e of W)this[e]=J[e];for(e of K)this[e]=new G(e,J[e],void 0,this)}setupFromTrue(){let e;for(e of M)this[e]=J[e];for(e of H)this[e]=J[e];for(e of W)this[e]=!0;for(e of K)this[e]=new G(e,!0,void 0,this)}setupFromArray(e){let t;for(t of M)this[t]=J[t];for(t of H)this[t]=J[t];for(t of W)this[t]=J[t];for(t of K)this[t]=new G(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,$)}setupFromObject(e){let t;for(t of($.ifd0=$.ifd0||$.image,$.ifd1=$.ifd1||$.thumbnail,Object.assign(this,e),M))this[t]=ee(e[t],J[t]);for(t of H)this[t]=ee(e[t],J[t]);for(t of W)this[t]=ee(e[t],J[t]);for(t of R)this[t]=new G(t,J[t],e[t],this);for(t of $)this[t]=new G(t,J[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,$,K),!0===e.tiff?this.batchEnableWithBool($,!0):!1===e.tiff?this.batchEnableWithUserValue($,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,$):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,$)}batchEnableWithBool(e,t){for(let s of e)this[s].enabled=t}batchEnableWithUserValue(e,t){for(let s of e){let e=t[s];this[s].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,s,i=s){if(e&&e.length){for(let e of i)this[e].enabled=!1;let t=Z(e,s);for(let[e,s]of t)te(this[e].pick,s),this[e].enabled=!0}else if(t&&t.length){let e=Z(t,s);for(let[t,s]of e)te(this[t].skip,s)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:s,iptc:i,icc:n}=this;this.makerNote?t.deps.add(P):t.skip.add(P),this.userComment?t.deps.add(z):t.skip.add(z),s.enabled||e.skip.add(700),i.enabled||e.skip.add(F),n.enabled||e.skip.add(j)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:s,interop:i}=this;i.needed&&(t.deps.add(D),e.deps.add(D)),t.needed&&e.deps.add(E),s.needed&&e.deps.add(_),this.tiff.enabled=$.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of $)this[e].finalizeFilters()}get onlyTiff(){return!N.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of R)this[e].enabled&&!b.has(e)&&g(\"segment parser\",e)}}function Z(e,t){let s,i,n,r,a=[];for(n of t){for(r of(s=I.get(n),i=[],s))(e.includes(r[0])||e.includes(r[1]))&&i.push(r[0]);i.length&&a.push([n,i])}return a}function ee(e,t){return void 0!==e?e:void 0!==t?t:void 0}function te(e,t){for(let s of t)e.add(s)}t(Q,\"default\",J);class se{constructor(e){t(this,\"parsers\",{}),t(this,\"output\",{}),t(this,\"errors\",[]),t(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=Q.useCached(e)}async read(e){this.file=await function(e,t){return\"string\"==typeof e?v(e,t):i&&!n&&e instanceof HTMLImageElement?v(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new p(e):i&&e instanceof Blob?S(e,t,\"blob\",x):void o(O)}(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[s,i]of y)if(i.canHandle(e,t))return this.fileParser=new i(this.options,this.file,this.parsers),e[s]=!0;this.file.close&&this.file.close(),o(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),l(s=e)?void 0:s;var s}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let s=await t.parse();t.assignToOutput(e,s)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,s=b.get(\"tiff\",e);var i;if(t.tiff?i={start:0,type:\"tiff\"}:t.jpeg&&(i=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===i)return;let n=await this.fileParser.ensureSegmentChunk(i),r=this.parsers.tiff=new s(n,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function ie(e,t){let s=new se(t);return await s.read(e),s.parse()}var ne=Object.freeze({__proto__:null,parse:ie,Exifr:se,fileParsers:y,segmentParsers:b,fileReaders:w,tagKeys:I,tagValues:L,tagRevivers:T,createDictionary:B,extendDictionary:V,fetchUrlAsArrayBuffer:U,readBlobAsArrayBuffer:x,chunkedProps:M,otherSegments:N,segments:R,tiffBlocks:$,segmentsAndBlocks:K,tiffExtractables:W,inheritables:X,allFormatters:H,Options:Q});class re{static findPosition(e,t){let s=e.getUint16(t+2)+2,i=\"function\"==typeof this.headerLength?this.headerLength(e,t,s):this.headerLength,n=t+i,r=s-i;return{offset:t,length:s,headerLength:i,start:n,size:r,end:n+r}}static parse(e,t={}){return new this(e,new Q({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof p?e:new p(e)}constructor(e,s={},i){t(this,\"errors\",[]),t(this,\"raw\",new Map),t(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(e),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=s,this.localOptions=s[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let s=T.get(t),i=L.get(t),n=I.get(t),r=this.options[t],a=r.reviveValues&&!!s,h=r.translateValues&&!!i,f=r.translateKeys&&!!n,l={};for(let[t,r]of e)a&&s.has(t)?r=s.get(t)(r):h&&i.has(t)&&(r=this.translateValue(r,i.get(t))),f&&n.has(t)&&(t=n.get(t)||t),l[t]=r;return l}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,s){if(this.globalOptions.mergeOutput)return Object.assign(e,s);e[t]?Object.assign(e[t],s):e[t]=s}}t(re,\"headerLength\",4),t(re,\"type\",void 0),t(re,\"multiSegment\",!1),t(re,\"canHandle\",(()=>!1));function ae(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function he(e){return e>=224&&e<=239}function fe(e,t,s){for(let[i,n]of b)if(n.canHandle(e,t,s))return i}class le extends class{constructor(e,s,i){t(this,\"errors\",[]),t(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,s=e.size||65536;if(this.file.chunked)if(this.file.available(t,s))e.chunk=this.file.subarray(t,s);else try{e.chunk=await this.file.readChunk(t,s)}catch(t){o(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+s?e.chunk=this.file.subarray(t,s):void 0===e.size?e.chunk=this.file.subarray(t):o(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(e),this.options=e,this.file=s,this.parsers=i}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let s=new(b.get(e))(t,this.options,this.file);return this.parsers[e]=s}createParsers(e){for(let t of e){let{type:e,chunk:s}=t,i=this.options[e];if(i&&i.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,s)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}{constructor(...e){super(...e),t(this,\"appSegments\",[]),t(this,\"jpegSegments\",[]),t(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(b.keyList())):(e=void 0===e?b.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&b.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:s,findAll:i,wanted:n,remaining:r}=this;if(!i&&this.file.chunked&&(i=Array.from(n).some((e=>{let t=b.get(e),s=this.options[e];return t.multiSegment&&s.multiSegment})),i&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,s.byteLength),!this.options.onlyTiff&&s.chunked){let t=!1;for(;r.size>0&&!t&&(s.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:i}=s,n=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>i&&!n?!await s.readNextChunk(e):!await s.readNextChunk(i),void 0===(e=this.findAppSegmentsInRange(e,s.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let s,i,n,r,a,h,{file:f,findAll:l,wanted:o,remaining:u,options:d}=this;for(;e<t;e++)if(255===f.getUint8(e))if(s=f.getUint8(e+1),he(s)){if(i=f.getUint16(e+2),n=fe(f,e,i),n&&o.has(n)&&(r=b.get(n),a=r.findPosition(f,e),h=d[n],a.type=n,this.appSegments.push(a),!l&&(r.multiSegment&&h.multiSegment?(this.unfinishedMultiSegment=a.chunkNumber<a.chunkCount,this.unfinishedMultiSegment||u.delete(n)):u.delete(n),0===u.size)))break;d.recordUnknownSegments&&(a=re.findPosition(f,e),a.marker=s,this.unknownSegments.push(a)),e+=i+1}else if(ae(s)){if(i=f.getUint16(e+2),218===s&&!1!==d.stopAfterSos)return;d.recordJpegSegments&&this.jpegSegments.push({offset:e,length:i,marker:s}),e+=i+1}return e}mergeMultiSegments(){if(!this.appSegments.some((e=>e.multiSegment)))return;let e=function(e,t){let s,i,n,r=new Map;for(let a=0;a<e.length;a++)s=e[a],i=s[t],r.has(i)?n=r.get(i):r.set(i,n=[]),n.push(s);return Array.from(r)}(this.appSegments,\"type\");this.mergedAppSegments=e.map((([e,t])=>{let s=b.get(e,this.options);if(s.handleMultiSegments){return{type:e,chunk:s.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}t(le,\"type\",\"jpeg\"),y.set(\"jpeg\",le);const oe=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class ue extends re{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,s=new Map){let{pick:i,skip:n}=this.options[t];i=new Set(i);let r=i.size>0,a=0===n.size,h=this.chunk.getUint16(e);e+=2;for(let f=0;f<h;f++){let h=this.chunk.getUint16(e);if(r){if(i.has(h)&&(s.set(h,this.parseTag(e,h,t)),i.delete(h),0===i.size))break}else!a&&n.has(h)||s.set(h,this.parseTag(e,h,t));e+=12}return s}parseTag(e,t,s){let{chunk:i}=this,n=i.getUint16(e+2),r=i.getUint32(e+4),a=oe[n];if(a*r<=4?e+=8:e=i.getUint32(e+8),(n<1||n>13)&&o(`Invalid TIFF value type. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e}`),e>i.byteLength&&o(`Invalid TIFF value offset. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e} is outside of chunk size ${i.byteLength}`),1===n)return i.getUint8Array(e,r);if(2===n)return\"\"===(h=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(h=i.getString(e,r)).trim())?void 0:h;var h;if(7===n)return i.getUint8Array(e,r);if(1===r)return this.parseTagValue(n,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(n))(r),s=a;for(let i=0;i<r;i++)t[i]=this.parseTagValue(n,e),e+=s;return t}}parseTagValue(e,t){let{chunk:s}=this;switch(e){case 1:return s.getUint8(t);case 3:return s.getUint16(t);case 4:return s.getUint32(t);case 5:return s.getUint32(t)/s.getUint32(t+4);case 6:return s.getInt8(t);case 8:return s.getInt16(t);case 9:return s.getInt32(t);case 10:return s.getInt32(t)/s.getInt32(t+4);case 11:return s.getFloat(t);case 12:return s.getDouble(t);case 13:return s.getUint32(t);default:o(`Invalid tiff type ${e}`)}}}class de extends ue{static canHandle(e,t){return 225===e.getUint8(t+1)&&1165519206===e.getUint32(t+4)&&0===e.getUint16(t+8)}async parse(){this.parseHeader();let{options:e}=this;return e.ifd0.enabled&&await this.parseIfd0Block(),e.exif.enabled&&await this.safeParse(\"parseExifBlock\"),e.gps.enabled&&await this.safeParse(\"parseGpsBlock\"),e.interop.enabled&&await this.safeParse(\"parseInteropBlock\"),e.ifd1.enabled&&await this.safeParse(\"parseThumbnailBlock\"),this.createOutput()}safeParse(e){let t=this[e]();return void 0!==t.catch&&(t=t.catch(this.handleError)),t}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let e=this.chunk.getUint16(this.ifd0Offset),t=this.ifd0Offset+2+12*e;this.ifd1Offset=this.chunk.getUint32(t)}}parseBlock(e,t){let s=new Map;return this[t]=s,this.parseTags(e,t,s),s}async parseIfd0Block(){if(this.ifd0)return;let{file:e}=this;this.findIfd0Offset(),this.ifd0Offset<8&&o(\"Malformed EXIF data\"),!e.chunked&&this.ifd0Offset>e.byteLength&&o(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,u(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(E),this.interopOffset=t.get(D),this.gpsOffset=t.get(_),this.xmp=t.get(700),this.iptc=t.get(F),this.icc=t.get(j),this.options.sanitize&&(t.delete(E),t.delete(D),t.delete(_),t.delete(700),t.delete(F),t.delete(j)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,u(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(D)),this.makerNote=e.get(P),this.userComment=e.get(z),this.options.sanitize&&(e.delete(D),e.delete(P),e.delete(z)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let s=e.get(t);s&&1===s.length&&e.set(t,s[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",ce(...e.get(2),e.get(1))),e.set(\"longitude\",ce(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,s,i={};for(t of $)if(e=this[t],!l(e))if(s=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(i,s)}else i[t]=s;return this.makerNote&&(i.makerNote=this.makerNote),this.userComment&&(i.userComment=this.userComment),i}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[s,i]of Object.entries(t))this.assignObjectToOutput(e,s,i)}}function ce(e,t,s,i){var n=e+t/60+s/3600;return\"S\"!==i&&\"W\"!==i||(n*=-1),n}t(de,\"type\",\"tiff\"),t(de,\"headerLength\",10),b.set(\"tiff\",de);var pe=Object.freeze({__proto__:null,default:ne,Exifr:se,fileParsers:y,segmentParsers:b,fileReaders:w,tagKeys:I,tagValues:L,tagRevivers:T,createDictionary:B,extendDictionary:V,fetchUrlAsArrayBuffer:U,readBlobAsArrayBuffer:x,chunkedProps:M,otherSegments:N,segments:R,tiffBlocks:$,segmentsAndBlocks:K,tiffExtractables:W,inheritables:X,allFormatters:H,Options:Q,parse:ie});const ge={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},me=Object.assign({},ge,{firstChunkSize:4e4,gps:[1,2,3,4]});const ye=Object.assign({},ge,{tiff:!1,ifd1:!0,mergeOutput:!1});const be=Object.assign({},ge,{firstChunkSize:4e4,ifd0:[274]});async function we(e){let t=new se(be);await t.read(e);let s=await t.parse();if(s&&s.ifd0)return s.ifd0[274]}const ke=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});if(e.rotateCanvas=!0,e.rotateCss=!0,\"object\"==typeof navigator){let t=navigator.userAgent;if(t.includes(\"iPad\")||t.includes(\"iPhone\")){let s=t.match(/OS (\\d+)_(\\d+)/);if(s){let[,t,i]=s,n=Number(t)+.1*Number(i);e.rotateCanvas=n<13.4,e.rotateCss=!1}}else if(t.includes(\"OS X 10\")){let[,s]=t.match(/OS X 10[_.](\\d+)/);e.rotateCanvas=e.rotateCss=Number(s)<15}if(t.includes(\"Chrome/\")){let[,s]=t.match(/Chrome\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(s)<81}else if(t.includes(\"Firefox/\")){let[,s]=t.match(/Firefox\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(s)<77}}class Oe extends p{constructor(...e){super(...e),t(this,\"ranges\",new ve),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,s){if(0===e&&0===this.byteLength&&s){let e=new DataView(s.buffer||s,s.byteOffset,s.byteLength);this._swapDataView(e)}else{let s=e+t;if(s>this.byteLength){let{dataView:e}=this._extend(s);this._swapDataView(e)}}}_extend(e){let t;t=h?a.allocUnsafe(e):new Uint8Array(e);let s=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:s}}subarray(e,t,s=!1){return t=t||this._lengthToEnd(e),s&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,s=!1){s&&this._tryExtend(t,e.byteLength,e);let i=super.set(e,t);return this.ranges.add(t,i.byteLength),i}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class ve{constructor(){t(this,\"list\",[])}get length(){return this.list.length}add(e,t,s=0){let i=e+t,n=this.list.filter((t=>Se(e,t.offset,i)||Se(e,t.end,i)));if(n.length>0){e=Math.min(e,...n.map((e=>e.offset))),i=Math.max(i,...n.map((e=>e.end))),t=i-e;let s=n.shift();s.offset=e,s.length=t,s.end=i,this.list=this.list.filter((e=>!n.includes(e)))}else this.list.push({offset:e,length:t,end:i})}available(e,t){let s=e+t;return this.list.some((t=>t.offset<=e&&s<=t.end))}}function Se(e,t,s){return e<=t&&t<=s}class Ae extends Oe{constructor(e,s){super(0),t(this,\"chunksRead\",0),this.input=e,this.options=s}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,s=await this.readChunk(e,t);return!!s&&s.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}w.set(\"blob\",class extends Ae{async readWhole(){this.chunked=!1;let e=await x(this.input);this._swapArrayBuffer(e)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(e,t){let s=t?e+t:void 0,i=this.input.slice(e,s),n=await x(i);return this.set(n,e,!0)}}),e.Exifr=se,e.Options=Q,e.allFormatters=H,e.chunkedProps=M,e.createDictionary=B,e.default=pe,e.extendDictionary=V,e.fetchUrlAsArrayBuffer=U,e.fileParsers=y,e.fileReaders=w,e.gps=async function(e){let t=new se(me);await t.read(e);let s=await t.parse();if(s&&s.gps){let{latitude:e,longitude:t}=s.gps;return{latitude:e,longitude:t}}},e.gpsOnlyOptions=me,e.inheritables=X,e.orientation=we,e.orientationOnlyOptions=be,e.otherSegments=N,e.parse=ie,e.readBlobAsArrayBuffer=x,e.rotation=async function(t){let s=await we(t);return Object.assign({canvas:e.rotateCanvas,css:e.rotateCss},ke[s])},e.rotations=ke,e.segmentParsers=b,e.segments=R,e.segmentsAndBlocks=K,e.tagKeys=I,e.tagRevivers=T,e.tagValues=L,e.thumbnail=async function(e){let t=new se(ye);await t.read(e);let s=await t.extractThumbnail();return s&&h?a.from(s):s},e.thumbnailOnlyOptions=ye,e.thumbnailUrl=async function(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}},e.tiffBlocks=$,e.tiffExtractables=W,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","import { createCanvas, loadImage, CustomCanvas as Canvas, CustomImage as Image } from \"../customCanvas\";\nimport { arrayBufferToDataUrl, getMimeTypeOfArrayBuffer } from \"./crossplatform\";\n// Use cross-platform version of \"mini\" file. Also the default export doesn't work for some reason.\nimport { orientation as exifOrientation } from \"exifr/dist/mini.umd.cjs\";\n\n/**\n * Logic for scaling and orienting images.\n * Much of this file is taken literally or spiritually from\n * the Blueimp image load library.\n */\n\nlet supportsAutoOrientation: boolean | null = null;\n\n/*\nGet EXIF orientation value.\nExif orientation values to correctly display the letter F:\n\n    1             2\n  ██████        ██████\n  ██                ██\n  ████            ████\n  ██                ██\n  ██                ██\n\n    3             4\n      ██        ██\n      ██        ██\n    ████        ████\n      ██        ██\n  ██████        ██████\n\n    5             6\n██████████    ██\n██  ██        ██  ██\n██            ██████████\n\n    7             8\n        ██    ██████████\n    ██  ██        ██  ██\n██████████            ██\n\n*/\n\nexport const getExifOrientation = (arrayBuffer: ArrayBuffer): Promise<number> => {\n    return new Promise((resolve) => {\n        const mimeType = getMimeTypeOfArrayBuffer(arrayBuffer);\n        if (mimeType !== \"image/jpeg\") {\n            return resolve(1);\n        }\n        exifOrientation(arrayBuffer)\n            .then((orientation: number | undefined) => {\n                if (!orientation) return resolve(1); // No EXIF data.\n                return resolve(orientation);\n            })\n            .catch(() => {\n                return resolve(1);\n            });\n    });\n};\n\n// Whether the execution environment lacks automatic image orientation.\n// Checks whether the test URL with EXIF orientation gets oriented correctly.\nconst requiresCanvasOrientation = async (): Promise<boolean> => {\n    if (supportsAutoOrientation !== null) {\n        return !supportsAutoOrientation;\n    }\n    // black+white 3x2 JPEG, with the following meta information set:\n    // - EXIF Orientation: 6 (Rotated 90° CCW)\n    // Image data layout (B=black, F=white):\n    // BFF\n    // BBB\n    const testImageUrl =\n        \"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA\" +\n        \"AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA\" +\n        \"QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\" +\n        \"BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAIAAwMBEQACEQEDEQH/x\" +\n        \"ABRAAEAAAAAAAAAAAAAAAAAAAAKEAEBAQADAQEAAAAAAAAAAAAGBQQDCAkCBwEBAAAAAAA\" +\n        \"AAAAAAAAAAAAAABEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AG8T9NfSMEVMhQ\" +\n        \"voP3fFiRZ+MTHDifa/95OFSZU5OzRzxkyejv8ciEfhSceSXGjS8eSdLnZc2HDm4M3BxcXw\" +\n        \"H/9k=\";\n    const img = await loadImage(testImageUrl);\n    supportsAutoOrientation = img.width === 2 && img.height === 3;\n    return !supportsAutoOrientation;\n};\n\n// Width and height to use for the canvas.\nexport const canvasDims = (img: Image): [number, number] => {\n    const maxDimension = 8192;\n    const aspectRatio = img.naturalWidth / img.naturalHeight;\n    if (img.naturalHeight <= maxDimension && img.naturalWidth <= maxDimension) {\n        return [img.naturalWidth, img.naturalHeight];\n    }\n    if (img.naturalHeight > img.naturalWidth) {\n        return [aspectRatio * maxDimension, maxDimension];\n    }\n    return [maxDimension, maxDimension / aspectRatio];\n};\n\nconst getScaledAndOrientedCanvas = async (arrayBuffer: ArrayBuffer): Promise<Canvas> => {\n    const dataUrl = await arrayBufferToDataUrl(arrayBuffer);\n    const img = await loadImage(dataUrl);\n    const [canvasWidth, canvasHeight] = canvasDims(img);\n    const needToOrient = await requiresCanvasOrientation();\n    if (!needToOrient) {\n        const canvas = createCanvas(canvasWidth, canvasHeight);\n        canvas.getContext(\"2d\")?.drawImage(img, 0, 0, canvasWidth, canvasHeight);\n        return canvas;\n    }\n    const orientation = await getExifOrientation(arrayBuffer);\n    const [orientedWidth, orientedHeight] = orientation > 4 ? [canvasHeight, canvasWidth] : [canvasWidth, canvasHeight];\n    const canvas = createCanvas(orientedWidth, orientedHeight);\n    const ctx = canvas.getContext(\"2d\")!;\n\n    // Orient the canvas.\n    switch (orientation) {\n        case 2:\n            ctx.translate(orientedWidth, 0);\n            ctx.scale(-1, 1);\n            break;\n        case 3:\n            ctx.translate(orientedWidth, orientedHeight);\n            ctx.rotate(Math.PI);\n            break;\n        case 4:\n            ctx.translate(0, orientedHeight);\n            ctx.scale(1, -1);\n            break;\n        case 5:\n            ctx.rotate(-0.5 * Math.PI);\n            ctx.scale(-1, 1);\n            break;\n        case 6:\n            ctx.rotate(-0.5 * Math.PI);\n            ctx.translate(-orientedWidth, 0);\n            break;\n        case 7:\n            ctx.rotate(-0.5 * Math.PI);\n            ctx.translate(-orientedWidth, orientedHeight);\n            ctx.scale(1, -1);\n            break;\n        case 8:\n            ctx.rotate(0.5 * Math.PI);\n            ctx.translate(0, -orientedHeight);\n            break;\n        default:\n            break;\n    }\n\n    ctx.drawImage(img, 0, 0, orientedWidth, orientedHeight);\n    return canvas;\n};\n\nexport const getAttributesFromArrayBuffer = async (arrayBuffer: ArrayBuffer) => {\n    const canvas = await getScaledAndOrientedCanvas(arrayBuffer);\n    const mimeTypeData = getMimeTypeOfArrayBuffer(arrayBuffer);\n    if (mimeTypeData === \"image/jpeg\") {\n        return {\n            dataUrl: canvas.toDataURL(\"image/jpeg\", 1.0),\n            height: canvas.height,\n            width: canvas.width,\n        };\n    }\n    return {\n        dataUrl: canvas.toDataURL(),\n        height: canvas.height,\n        width: canvas.width,\n    };\n};\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g\n\nmodule.exports = function(css, options){\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   */\n\n  function updatePosition(str) {\n    var lines = str.match(/\\n/g);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf('\\n');\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   */\n\n  function position() {\n    var start = { line: lineno, column: column };\n    return function(node){\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node\n   */\n\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string\n   */\n\n  Position.prototype.content = css;\n\n  /**\n   * Error `msg`.\n   */\n\n  var errorsList = [];\n\n  function error(msg) {\n    var err = new Error(options.source + ':' + lineno + ':' + column + ': ' + msg);\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Parse stylesheet.\n   */\n\n  function stylesheet() {\n    var rulesList = rules();\n\n    return {\n      type: 'stylesheet',\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList\n      }\n    };\n  }\n\n  /**\n   * Opening brace.\n   */\n\n  function open() {\n    return match(/^{\\s*/);\n  }\n\n  /**\n   * Closing brace.\n   */\n\n  function close() {\n    return match(/^}/);\n  }\n\n  /**\n   * Parse ruleset.\n   */\n\n  function rules() {\n    var node;\n    var rules = [];\n    whitespace();\n    comments(rules);\n    while (css.length && css.charAt(0) != '}' && (node = atrule() || rule())) {\n      if (node !== false) {\n        rules.push(node);\n        comments(rules);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Match `re` and return captures.\n   */\n\n  function match(re) {\n    var m = re.exec(css);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n\n  function whitespace() {\n    match(/^\\s*/);\n  }\n\n  /**\n   * Parse comments;\n   */\n\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while (c = comment()) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   */\n\n  function comment() {\n    var pos = position();\n    if ('/' != css.charAt(0) || '*' != css.charAt(1)) return;\n\n    var i = 2;\n    while (\"\" != css.charAt(i) && ('*' != css.charAt(i) || '/' != css.charAt(i + 1))) ++i;\n    i += 2;\n\n    if (\"\" === css.charAt(i-1)) {\n      return error('End of comment missing');\n    }\n\n    var str = css.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i);\n    column += 2;\n\n    return pos({\n      type: 'comment',\n      comment: str\n    });\n  }\n\n  /**\n   * Parse selector.\n   */\n\n  function selector() {\n    var m = match(/^([^{]+)/);\n    if (!m) return;\n    /* @fix Remove all comments from selectors\n     * http://ostermiller.org/findcomment.html */\n    return trim(m[0])\n      .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\n      .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function(m) {\n        return m.replace(/,/g, '\\u200C');\n      })\n      .split(/\\s*(?![^(]*\\)),\\s*/)\n      .map(function(s) {\n        return s.replace(/\\u200C/g, ',');\n      });\n  }\n\n  /**\n   * Parse declaration.\n   */\n\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!prop) return;\n    prop = trim(prop[0]);\n\n    // :\n    if (!match(/^:\\s*/)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n\n    var ret = pos({\n      type: 'declaration',\n      property: prop.replace(commentre, ''),\n      value: val ? trim(val[0]).replace(commentre, '') : ''\n    });\n\n    // ;\n    match(/^[;\\s]*/);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   */\n\n  function declarations() {\n    var decls = [];\n\n    if (!open()) return error(\"missing '{'\");\n    comments(decls);\n\n    // declarations\n    var decl;\n    while (decl = declaration()) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    if (!close()) return error(\"missing '}'\");\n    return decls;\n  }\n\n  /**\n   * Parse keyframe.\n   */\n\n  function keyframe() {\n    var m;\n    var vals = [];\n    var pos = position();\n\n    while (m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/)) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n\n    if (!vals.length) return;\n\n    return pos({\n      type: 'keyframe',\n      values: vals,\n      declarations: declarations()\n    });\n  }\n\n  /**\n   * Parse keyframes.\n   */\n\n  function atkeyframes() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?keyframes\\s*/);\n\n    if (!m) return;\n    var vendor = m[1];\n\n    // identifier\n    var m = match(/^([-\\w]+)\\s*/);\n    if (!m) return error(\"@keyframes missing name\");\n    var name = m[1];\n\n    if (!open()) return error(\"@keyframes missing '{'\");\n\n    var frame;\n    var frames = comments();\n    while (frame = keyframe()) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n\n    if (!close()) return error(\"@keyframes missing '}'\");\n\n    return pos({\n      type: 'keyframes',\n      name: name,\n      vendor: vendor,\n      keyframes: frames\n    });\n  }\n\n  /**\n   * Parse supports.\n   */\n\n  function atsupports() {\n    var pos = position();\n    var m = match(/^@supports *([^{]+)/);\n\n    if (!m) return;\n    var supports = trim(m[1]);\n\n    if (!open()) return error(\"@supports missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@supports missing '}'\");\n\n    return pos({\n      type: 'supports',\n      supports: supports,\n      rules: style\n    });\n  }\n\n  /**\n   * Parse host.\n   */\n\n  function athost() {\n    var pos = position();\n    var m = match(/^@host\\s*/);\n\n    if (!m) return;\n\n    if (!open()) return error(\"@host missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@host missing '}'\");\n\n    return pos({\n      type: 'host',\n      rules: style\n    });\n  }\n\n  /**\n   * Parse media.\n   */\n\n  function atmedia() {\n    var pos = position();\n    var m = match(/^@media *([^{]+)/);\n\n    if (!m) return;\n    var media = trim(m[1]);\n\n    if (!open()) return error(\"@media missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@media missing '}'\");\n\n    return pos({\n      type: 'media',\n      media: media,\n      rules: style\n    });\n  }\n\n\n  /**\n   * Parse custom-media.\n   */\n\n  function atcustommedia() {\n    var pos = position();\n    var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) return;\n\n    return pos({\n      type: 'custom-media',\n      name: trim(m[1]),\n      media: trim(m[2])\n    });\n  }\n\n  /**\n   * Parse paged media.\n   */\n\n  function atpage() {\n    var pos = position();\n    var m = match(/^@page */);\n    if (!m) return;\n\n    var sel = selector() || [];\n\n    if (!open()) return error(\"@page missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@page missing '}'\");\n\n    return pos({\n      type: 'page',\n      selectors: sel,\n      declarations: decls\n    });\n  }\n\n  /**\n   * Parse document.\n   */\n\n  function atdocument() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) return;\n\n    var vendor = trim(m[1]);\n    var doc = trim(m[2]);\n\n    if (!open()) return error(\"@document missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@document missing '}'\");\n\n    return pos({\n      type: 'document',\n      document: doc,\n      vendor: vendor,\n      rules: style\n    });\n  }\n\n  /**\n   * Parse font-face.\n   */\n\n  function atfontface() {\n    var pos = position();\n    var m = match(/^@font-face\\s*/);\n    if (!m) return;\n\n    if (!open()) return error(\"@font-face missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@font-face missing '}'\");\n\n    return pos({\n      type: 'font-face',\n      declarations: decls\n    });\n  }\n\n  /**\n   * Parse import\n   */\n\n  var atimport = _compileAtrule('import');\n\n  /**\n   * Parse charset\n   */\n\n  var atcharset = _compileAtrule('charset');\n\n  /**\n   * Parse namespace\n   */\n\n  var atnamespace = _compileAtrule('namespace');\n\n  /**\n   * Parse non-block at-rules\n   */\n\n\n  function _compileAtrule(name) {\n    var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\n    return function() {\n      var pos = position();\n      var m = match(re);\n      if (!m) return;\n      var ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    }\n  }\n\n  /**\n   * Parse at rule.\n   */\n\n  function atrule() {\n    if (css[0] != '@') return;\n\n    return atkeyframes()\n      || atmedia()\n      || atcustommedia()\n      || atsupports()\n      || atimport()\n      || atcharset()\n      || atnamespace()\n      || atdocument()\n      || atpage()\n      || athost()\n      || atfontface();\n  }\n\n  /**\n   * Parse rule.\n   */\n\n  function rule() {\n    var pos = position();\n    var sel = selector();\n\n    if (!sel) return error('selector missing');\n    comments();\n\n    return pos({\n      type: 'rule',\n      selectors: sel,\n      declarations: declarations()\n    });\n  }\n\n  return addParent(stylesheet());\n};\n\n/**\n * Trim `str`.\n */\n\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\n}\n\n/**\n * Adds non-enumerable parent node reference to each node.\n */\n\nfunction addParent(obj, parent) {\n  var isNode = obj && typeof obj.type === 'string';\n  var childParent = isNode ? obj : parent;\n\n  for (var k in obj) {\n    var value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach(function(v) { addParent(v, childParent); });\n    } else if (value && typeof value === 'object') {\n      addParent(value, childParent);\n    }\n  }\n\n  if (isNode) {\n    Object.defineProperty(obj, 'parent', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null\n    });\n  }\n\n  return obj;\n}\n","exports.parse = require('./lib/parse');\n","/**\n * Fuse.js v7.3.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2026 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n  return !Array.isArray ? getTag(value) === '[object Array]' : Array.isArray(value);\n}\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (typeof value === 'bigint') {\n    return value.toString();\n  }\n  const result = value + '';\n  return result == '0' && 1 / value == -Infinity ? '-0' : result;\n}\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\nfunction isString(value) {\n  return typeof value === 'string';\n}\nfunction isNumber(value) {\n  return typeof value === 'number';\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n  return value === true || value === false || isObjectLike(value) && getTag(value) == '[object Boolean]';\n}\nfunction isObject(value) {\n  return typeof value === 'object';\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n  return isObject(value) && value !== null;\n}\nfunction isDefined(value) {\n  return value !== undefined && value !== null;\n}\nfunction isBlank(value) {\n  return !value.trim().length;\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n  return value == null ? value === undefined ? '[object Undefined]' : '[object Null]' : Object.prototype.toString.call(value);\n}\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = key => `Invalid value for key ${key}`;\nconst PATTERN_LENGTH_TOO_LARGE = max => `Pattern length exceeds max of ${max}.`;\nconst MISSING_KEY_PROPERTY = name => `Missing ${name} property in key`;\nconst INVALID_KEY_WEIGHT_VALUE = key => `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\nclass KeyStore {\n  constructor(keys) {\n    this._keys = [];\n    this._keyMap = {};\n    let totalWeight = 0;\n    keys.forEach(key => {\n      const obj = createKey(key);\n      this._keys.push(obj);\n      this._keyMap[obj.id] = obj;\n      totalWeight += obj.weight;\n    });\n\n    // Normalize weights so that their sum is equal to 1\n    this._keys.forEach(key => {\n      key.weight /= totalWeight;\n    });\n  }\n  get(keyId) {\n    return this._keyMap[keyId];\n  }\n  keys() {\n    return this._keys;\n  }\n  toJSON() {\n    return JSON.stringify(this._keys);\n  }\n}\nfunction createKey(key) {\n  let path = null;\n  let id = null;\n  let src = null;\n  let weight = 1;\n  let getFn = null;\n  if (isString(key) || isArray(key)) {\n    src = key;\n    path = createKeyPath(key);\n    id = createKeyId(key);\n  } else {\n    if (!hasOwn.call(key, 'name')) {\n      throw new Error(MISSING_KEY_PROPERTY('name'));\n    }\n    const name = key.name;\n    src = name;\n    if (hasOwn.call(key, 'weight')) {\n      weight = key.weight;\n      if (weight <= 0) {\n        throw new Error(INVALID_KEY_WEIGHT_VALUE(name));\n      }\n    }\n    path = createKeyPath(name);\n    id = createKeyId(name);\n    getFn = key.getFn;\n  }\n  return {\n    path: path,\n    id: id,\n    weight,\n    src: src,\n    getFn\n  };\n}\nfunction createKeyPath(key) {\n  return isArray(key) ? key : key.split('.');\n}\nfunction createKeyId(key) {\n  return isArray(key) ? key.join('.') : key;\n}\n\nfunction get(obj, path) {\n  const list = [];\n  let arr = false;\n  const deepGet = (obj, path, index, arrayIndex) => {\n    if (!isDefined(obj)) {\n      return;\n    }\n    if (!path[index]) {\n      // If there's no path left, we've arrived at the object we care about.\n      list.push(arrayIndex !== undefined ? {\n        v: obj,\n        i: arrayIndex\n      } : obj);\n    } else {\n      const key = path[index];\n      const value = obj[key];\n      if (!isDefined(value)) {\n        return;\n      }\n\n      // If we're at the last value in the path, and if it's a string/number/bool,\n      // add it to the list\n      if (index === path.length - 1 && (isString(value) || isNumber(value) || isBoolean(value) || typeof value === 'bigint')) {\n        list.push(arrayIndex !== undefined ? {\n          v: toString(value),\n          i: arrayIndex\n        } : toString(value));\n      } else if (isArray(value)) {\n        arr = true;\n        // Search each item in the array.\n        for (let i = 0, len = value.length; i < len; i += 1) {\n          deepGet(value[i], path, index + 1, i);\n        }\n      } else if (path.length) {\n        // An object. Recurse further.\n        deepGet(value, path, index + 1, arrayIndex);\n      }\n    }\n  };\n\n  // Backwards compatibility (since path used to be a string)\n  deepGet(obj, isString(path) ? path.split('.') : path, 0);\n  return arr ? list : list[0];\n}\n\nconst MatchOptions = {\n  includeMatches: false,\n  findAllMatches: false,\n  minMatchCharLength: 1\n};\nconst BasicOptions = {\n  isCaseSensitive: false,\n  ignoreDiacritics: false,\n  includeScore: false,\n  keys: [],\n  shouldSort: true,\n  sortFn: (a, b) => a.score === b.score ? a.idx < b.idx ? -1 : 1 : a.score < b.score ? -1 : 1\n};\nconst FuzzyOptions = {\n  location: 0,\n  threshold: 0.6,\n  distance: 100\n};\nconst AdvancedOptions = {\n  useExtendedSearch: false,\n  useTokenSearch: false,\n  getFn: get,\n  ignoreLocation: false,\n  ignoreFieldNorm: false,\n  fieldNormWeight: 1\n};\nconst Config = Object.freeze({\n  ...BasicOptions,\n  ...MatchOptions,\n  ...FuzzyOptions,\n  ...AdvancedOptions\n});\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n  const cache = new Map();\n  const m = Math.pow(10, mantissa);\n  return {\n    get(value) {\n      const numTokens = value.match(SPACE).length;\n      if (cache.has(numTokens)) {\n        return cache.get(numTokens);\n      }\n\n      // Default function is 1/sqrt(x), weight makes that variable\n      const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n      // In place of `toFixed(mantissa)`, for faster computation\n      const n = parseFloat(Math.round(norm * m) / m);\n      cache.set(numTokens, n);\n      return n;\n    },\n    clear() {\n      cache.clear();\n    }\n  };\n}\n\nclass FuseIndex {\n  constructor({\n    getFn = Config.getFn,\n    fieldNormWeight = Config.fieldNormWeight\n  } = {}) {\n    this.norm = norm(fieldNormWeight, 3);\n    this.getFn = getFn;\n    this.isCreated = false;\n    this.docs = [];\n    this.keys = [];\n    this._keysMap = {};\n    this.setIndexRecords();\n  }\n  setSources(docs = []) {\n    this.docs = docs;\n  }\n  setIndexRecords(records = []) {\n    this.records = records;\n  }\n  setKeys(keys = []) {\n    this.keys = keys;\n    this._keysMap = {};\n    keys.forEach((key, idx) => {\n      this._keysMap[key.id] = idx;\n    });\n  }\n  create() {\n    if (this.isCreated || !this.docs.length) {\n      return;\n    }\n    this.isCreated = true;\n\n    // List is Array<String>\n    if (isString(this.docs[0])) {\n      this.docs.forEach((doc, docIndex) => {\n        this._addString(doc, docIndex);\n      });\n    } else {\n      // List is Array<Object>\n      this.docs.forEach((doc, docIndex) => {\n        this._addObject(doc, docIndex);\n      });\n    }\n    this.norm.clear();\n  }\n  // Adds a doc to the end of the index\n  add(doc) {\n    const idx = this.size();\n    if (isString(doc)) {\n      this._addString(doc, idx);\n    } else {\n      this._addObject(doc, idx);\n    }\n  }\n  // Removes the doc at the specified index of the index\n  removeAt(idx) {\n    this.records.splice(idx, 1);\n\n    // Change ref index of every subsquent doc\n    for (let i = idx, len = this.size(); i < len; i += 1) {\n      this.records[i].i -= 1;\n    }\n  }\n  // Removes docs at the specified indices (must be sorted ascending)\n  removeAll(indices) {\n    // Remove in reverse order to avoid index shifting during splice\n    for (let i = indices.length - 1; i >= 0; i -= 1) {\n      this.records.splice(indices[i], 1);\n    }\n    // Single re-index pass\n    for (let i = 0, len = this.records.length; i < len; i += 1) {\n      this.records[i].i = i;\n    }\n  }\n  getValueForItemAtKeyId(item, keyId) {\n    return item[this._keysMap[keyId]];\n  }\n  size() {\n    return this.records.length;\n  }\n  _addString(doc, docIndex) {\n    if (!isDefined(doc) || isBlank(doc)) {\n      return;\n    }\n    const record = {\n      v: doc,\n      i: docIndex,\n      n: this.norm.get(doc)\n    };\n    this.records.push(record);\n  }\n  _addObject(doc, docIndex) {\n    const record = {\n      i: docIndex,\n      $: {}\n    };\n\n    // Iterate over every key (i.e, path), and fetch the value at that key\n    this.keys.forEach((key, keyIndex) => {\n      const value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n      if (!isDefined(value)) {\n        return;\n      }\n      if (isArray(value)) {\n        const subRecords = [];\n        for (let i = 0, len = value.length; i < len; i += 1) {\n          const item = value[i];\n          if (!isDefined(item)) {\n            continue;\n          }\n          if (isString(item)) {\n            // Custom getFn returning plain string array (backward compat)\n            if (!isBlank(item)) {\n              const subRecord = {\n                v: item,\n                i: i,\n                n: this.norm.get(item)\n              };\n              subRecords.push(subRecord);\n            }\n          } else if (isDefined(item.v)) {\n            // Default get() returns {v, i} objects with original array indices\n            const text = isString(item.v) ? item.v : toString(item.v);\n            if (!isBlank(text)) {\n              const subRecord = {\n                v: text,\n                i: item.i,\n                n: this.norm.get(text)\n              };\n              subRecords.push(subRecord);\n            }\n          }\n        }\n        record.$[keyIndex] = subRecords;\n      } else if (isString(value) && !isBlank(value)) {\n        const subRecord = {\n          v: value,\n          n: this.norm.get(value)\n        };\n        record.$[keyIndex] = subRecord;\n      }\n    });\n    this.records.push(record);\n  }\n  toJSON() {\n    return {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      keys: this.keys.map(({\n        getFn,\n        ...key\n      }) => key),\n      records: this.records\n    };\n  }\n}\nfunction createIndex(keys, docs, {\n  getFn = Config.getFn,\n  fieldNormWeight = Config.fieldNormWeight\n} = {}) {\n  const myIndex = new FuseIndex({\n    getFn,\n    fieldNormWeight\n  });\n  myIndex.setKeys(keys.map(createKey));\n  myIndex.setSources(docs);\n  myIndex.create();\n  return myIndex;\n}\nfunction parseIndex(data, {\n  getFn = Config.getFn,\n  fieldNormWeight = Config.fieldNormWeight\n} = {}) {\n  const {\n    keys,\n    records\n  } = data;\n  const myIndex = new FuseIndex({\n    getFn,\n    fieldNormWeight\n  });\n  myIndex.setKeys(keys);\n  myIndex.setIndexRecords(records);\n  return myIndex;\n}\n\nfunction convertMaskToIndices(matchmask = [], minMatchCharLength = Config.minMatchCharLength) {\n  const indices = [];\n  let start = -1;\n  let end = -1;\n  let i = 0;\n  for (let len = matchmask.length; i < len; i += 1) {\n    const match = matchmask[i];\n    if (match && start === -1) {\n      start = i;\n    } else if (!match && start !== -1) {\n      end = i - 1;\n      if (end - start + 1 >= minMatchCharLength) {\n        indices.push([start, end]);\n      }\n      start = -1;\n    }\n  }\n\n  // (i-1 - start) + 1 => i - start\n  if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n    indices.push([start, i - 1]);\n  }\n  return indices;\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(text, pattern, patternAlphabet, {\n  location = Config.location,\n  distance = Config.distance,\n  threshold = Config.threshold,\n  findAllMatches = Config.findAllMatches,\n  minMatchCharLength = Config.minMatchCharLength,\n  includeMatches = Config.includeMatches,\n  ignoreLocation = Config.ignoreLocation\n} = {}) {\n  if (pattern.length > MAX_BITS) {\n    throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS));\n  }\n  const patternLen = pattern.length;\n  // Set starting location at beginning text and initialize the alphabet.\n  const textLen = text.length;\n  // Handle the case when location > text.length\n  const expectedLocation = Math.max(0, Math.min(location, textLen));\n  // Highest score beyond which we give up.\n  let currentThreshold = threshold;\n  // Is there a nearby exact match? (speedup)\n  let bestLocation = expectedLocation;\n\n  // Inlined score computation — avoids object allocation per call in hot loops.\n  // See ./computeScore.ts for the documented version of this formula.\n  const calcScore = (errors, currentLocation) => {\n    const accuracy = errors / patternLen;\n    if (ignoreLocation) return accuracy;\n    const proximity = Math.abs(expectedLocation - currentLocation);\n    if (!distance) return proximity ? 1.0 : accuracy;\n    return accuracy + proximity / distance;\n  };\n\n  // Performance: only computer matches when the minMatchCharLength > 1\n  // OR if `includeMatches` is true.\n  const computeMatches = minMatchCharLength > 1 || includeMatches;\n  // A mask of the matches, used for building the indices\n  const matchMask = computeMatches ? Array(textLen) : [];\n  let index;\n\n  // Get all exact matches, here for speed up\n  while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n    const score = calcScore(0, index);\n    currentThreshold = Math.min(score, currentThreshold);\n    bestLocation = index + patternLen;\n    if (computeMatches) {\n      let i = 0;\n      while (i < patternLen) {\n        matchMask[index + i] = 1;\n        i += 1;\n      }\n    }\n  }\n\n  // Reset the best location\n  bestLocation = -1;\n  let lastBitArr = [];\n  let finalScore = 1;\n  let binMax = patternLen + textLen;\n  const mask = 1 << patternLen - 1;\n  for (let i = 0; i < patternLen; i += 1) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from the match location we can stray\n    // at this error level.\n    let binMin = 0;\n    let binMid = binMax;\n    while (binMin < binMid) {\n      const score = calcScore(i, expectedLocation + binMid);\n      if (score <= currentThreshold) {\n        binMin = binMid;\n      } else {\n        binMax = binMid;\n      }\n      binMid = Math.floor((binMax - binMin) / 2 + binMin);\n    }\n\n    // Use the result from this iteration as the maximum for the next.\n    binMax = binMid;\n    let start = Math.max(1, expectedLocation - binMid + 1);\n    const finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n    // Initialize the bit array\n    const bitArr = Array(finish + 2);\n    bitArr[finish + 1] = (1 << i) - 1;\n    for (let j = finish; j >= start; j -= 1) {\n      const currentLocation = j - 1;\n      const charMatch = patternAlphabet[text[currentLocation]];\n      if (computeMatches) {\n        // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n        matchMask[currentLocation] = +!!charMatch;\n      }\n\n      // First pass: exact match\n      bitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch;\n\n      // Subsequent passes: fuzzy match\n      if (i) {\n        bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1];\n      }\n      if (bitArr[j] & mask) {\n        finalScore = calcScore(i, currentLocation);\n\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (finalScore <= currentThreshold) {\n          // Indeed it is\n          currentThreshold = finalScore;\n          bestLocation = currentLocation;\n\n          // Already passed `loc`, downhill from here on in.\n          if (bestLocation <= expectedLocation) {\n            break;\n          }\n\n          // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n          start = Math.max(1, 2 * expectedLocation - bestLocation);\n        }\n      }\n    }\n\n    // No hope for a (better) match at greater error levels.\n    const score = calcScore(i + 1, expectedLocation);\n    if (score > currentThreshold) {\n      break;\n    }\n    lastBitArr = bitArr;\n  }\n  const result = {\n    isMatch: bestLocation >= 0,\n    // Count exact matches (those with a score of 0) to be \"almost\" exact\n    score: Math.max(0.001, finalScore)\n  };\n  if (computeMatches) {\n    const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n    if (!indices.length) {\n      result.isMatch = false;\n    } else if (includeMatches) {\n      result.indices = indices;\n    }\n  }\n  return result;\n}\n\nfunction createPatternAlphabet(pattern) {\n  const mask = {};\n  for (let i = 0, len = pattern.length; i < len; i += 1) {\n    const char = pattern.charAt(i);\n    mask[char] = (mask[char] || 0) | 1 << len - i - 1;\n  }\n  return mask;\n}\n\nfunction mergeIndices(indices) {\n  if (indices.length <= 1) return indices;\n  indices.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n  const merged = [indices[0]];\n  for (let i = 1, len = indices.length; i < len; i += 1) {\n    const last = merged[merged.length - 1];\n    const curr = indices[i];\n    if (curr[0] <= last[1] + 1) {\n      last[1] = Math.max(last[1], curr[1]);\n    } else {\n      merged.push(curr);\n    }\n  }\n  return merged;\n}\n\n// Characters that survive NFD normalization unchanged and need explicit mapping\nconst NON_DECOMPOSABLE_MAP = {\n  '\\u0142': 'l',\n  // ł\n  '\\u0141': 'L',\n  // Ł\n  '\\u0111': 'd',\n  // đ\n  '\\u0110': 'D',\n  // Đ\n  '\\u00F8': 'o',\n  // ø\n  '\\u00D8': 'O',\n  // Ø\n  '\\u0127': 'h',\n  // ħ\n  '\\u0126': 'H',\n  // Ħ\n  '\\u0167': 't',\n  // ŧ\n  '\\u0166': 'T',\n  // Ŧ\n  '\\u0131': 'i',\n  // ı\n  '\\u00DF': 'ss' // ß\n};\nconst NON_DECOMPOSABLE_RE = new RegExp('[' + Object.keys(NON_DECOMPOSABLE_MAP).join('') + ']', 'g');\nconst stripDiacritics = String.prototype.normalize ? str => str.normalize('NFD').replace(/[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]/g, '').replace(NON_DECOMPOSABLE_RE, ch => NON_DECOMPOSABLE_MAP[ch]) : str => str;\n\nclass BitapSearch {\n  constructor(pattern, {\n    location = Config.location,\n    threshold = Config.threshold,\n    distance = Config.distance,\n    includeMatches = Config.includeMatches,\n    findAllMatches = Config.findAllMatches,\n    minMatchCharLength = Config.minMatchCharLength,\n    isCaseSensitive = Config.isCaseSensitive,\n    ignoreDiacritics = Config.ignoreDiacritics,\n    ignoreLocation = Config.ignoreLocation\n  } = {}) {\n    this.options = {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreDiacritics,\n      ignoreLocation\n    };\n    pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n    pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n    this.pattern = pattern;\n    this.chunks = [];\n    if (!this.pattern.length) {\n      return;\n    }\n    const addChunk = (pattern, startIndex) => {\n      this.chunks.push({\n        pattern,\n        alphabet: createPatternAlphabet(pattern),\n        startIndex\n      });\n    };\n    const len = this.pattern.length;\n    if (len > MAX_BITS) {\n      let i = 0;\n      const remainder = len % MAX_BITS;\n      const end = len - remainder;\n      while (i < end) {\n        addChunk(this.pattern.substr(i, MAX_BITS), i);\n        i += MAX_BITS;\n      }\n      if (remainder) {\n        const startIndex = len - MAX_BITS;\n        addChunk(this.pattern.substr(startIndex), startIndex);\n      }\n    } else {\n      addChunk(this.pattern, 0);\n    }\n  }\n  searchIn(text) {\n    const {\n      isCaseSensitive,\n      ignoreDiacritics,\n      includeMatches\n    } = this.options;\n    text = isCaseSensitive ? text : text.toLowerCase();\n    text = ignoreDiacritics ? stripDiacritics(text) : text;\n\n    // Exact match\n    if (this.pattern === text) {\n      const result = {\n        isMatch: true,\n        score: 0\n      };\n      if (includeMatches) {\n        result.indices = [[0, text.length - 1]];\n      }\n      return result;\n    }\n\n    // Otherwise, use Bitap algorithm\n    const {\n      location,\n      distance,\n      threshold,\n      findAllMatches,\n      minMatchCharLength,\n      ignoreLocation\n    } = this.options;\n    const allIndices = [];\n    let totalScore = 0;\n    let hasMatches = false;\n    this.chunks.forEach(({\n      pattern,\n      alphabet,\n      startIndex\n    }) => {\n      const {\n        isMatch,\n        score,\n        indices\n      } = search(text, pattern, alphabet, {\n        location: location + startIndex,\n        distance,\n        threshold,\n        findAllMatches,\n        minMatchCharLength,\n        includeMatches,\n        ignoreLocation\n      });\n      if (isMatch) {\n        hasMatches = true;\n      }\n      totalScore += score;\n      if (isMatch && indices) {\n        allIndices.push(...indices);\n      }\n    });\n    const result = {\n      isMatch: hasMatches,\n      score: hasMatches ? totalScore / this.chunks.length : 1\n    };\n    if (hasMatches && includeMatches) {\n      result.indices = mergeIndices(allIndices);\n    }\n    return result;\n  }\n}\n\nclass BaseMatch {\n  constructor(pattern) {\n    this.pattern = pattern;\n  }\n  static isMultiMatch(pattern) {\n    return getMatch(pattern, this.multiRegex);\n  }\n  static isSingleMatch(pattern) {\n    return getMatch(pattern, this.singleRegex);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  search(_text) {\n    return {\n      isMatch: false,\n      score: 1\n    };\n  }\n}\nfunction getMatch(pattern, exp) {\n  const matches = pattern.match(exp);\n  return matches ? matches[1] : null;\n}\n\n// Token: 'file\n// Match type: exact-match\n// Description: Items that are `file`\n\nclass ExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'exact';\n  }\n  static get multiRegex() {\n    return /^=\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^=(.*)$/;\n  }\n  search(text) {\n    const isMatch = text === this.pattern;\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    };\n  }\n}\n\n// Token: !fire\n// Match type: inverse-exact-match\n// Description: Items that do not include `fire`\n\nclass InverseExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-exact';\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^!(.*)$/;\n  }\n  search(text) {\n    const index = text.indexOf(this.pattern);\n    const isMatch = index === -1;\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    };\n  }\n}\n\n// Token: ^file\n// Match type: prefix-exact-match\n// Description: Items that start with `file`\nclass PrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'prefix-exact';\n  }\n  static get multiRegex() {\n    return /^\\^\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^\\^(.*)$/;\n  }\n  search(text) {\n    const isMatch = text.startsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    };\n  }\n}\n\n// Token: !^fire\n// Match type: inverse-prefix-exact-match\n// Description: Items that do not start with `fire`\n\nclass InversePrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-prefix-exact';\n  }\n  static get multiRegex() {\n    return /^!\\^\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^!\\^(.*)$/;\n  }\n  search(text) {\n    const isMatch = !text.startsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    };\n  }\n}\n\n// Token: .file$\n// Match type: suffix-exact-match\n// Description: Items that end with `.file`\nclass SuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'suffix-exact';\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"\\$$/;\n  }\n  static get singleRegex() {\n    return /^(.*)\\$$/;\n  }\n  search(text) {\n    const isMatch = text.endsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [text.length - this.pattern.length, text.length - 1]\n    };\n  }\n}\n\n// Token: !.file$\n// Match type: inverse-suffix-exact-match\n// Description: Items that do not end with `.file`\nclass InverseSuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-suffix-exact';\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"\\$$/;\n  }\n  static get singleRegex() {\n    return /^!(.*)\\$$/;\n  }\n  search(text) {\n    const isMatch = !text.endsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    };\n  }\n}\n\nclass FuzzyMatch extends BaseMatch {\n  constructor(pattern, {\n    location = Config.location,\n    threshold = Config.threshold,\n    distance = Config.distance,\n    includeMatches = Config.includeMatches,\n    findAllMatches = Config.findAllMatches,\n    minMatchCharLength = Config.minMatchCharLength,\n    isCaseSensitive = Config.isCaseSensitive,\n    ignoreDiacritics = Config.ignoreDiacritics,\n    ignoreLocation = Config.ignoreLocation\n  } = {}) {\n    super(pattern);\n    this._bitapSearch = new BitapSearch(pattern, {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreDiacritics,\n      ignoreLocation\n    });\n  }\n  static get type() {\n    return 'fuzzy';\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^(.*)$/;\n  }\n  search(text) {\n    return this._bitapSearch.searchIn(text);\n  }\n}\n\n// Token: 'file\n// Match type: include-match\n// Description: Items that include `file`\n\nclass IncludeMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'include';\n  }\n  static get multiRegex() {\n    return /^'\"(.*)\"$/;\n  }\n  static get singleRegex() {\n    return /^'(.*)$/;\n  }\n  search(text) {\n    let location = 0;\n    let index;\n    const indices = [];\n    const patternLen = this.pattern.length;\n\n    // Get all exact matches\n    while ((index = text.indexOf(this.pattern, location)) > -1) {\n      location = index + patternLen;\n      indices.push([index, location - 1]);\n    }\n    const isMatch = !!indices.length;\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices\n    };\n  }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [ExactMatch, IncludeMatch, PrefixExactMatch, InversePrefixExactMatch, InverseSuffixExactMatch, SuffixExactMatch, InverseExactMatch, FuzzyMatch];\nconst searchersLen = searchers.length;\nconst ESCAPED_PIPE = '\\u0000'; // placeholder for escaped \\|\nconst OR_TOKEN = '|';\n\n// Tokenize a query string into individual search terms.\n// Respects multi-match quoted tokens like =\"said \"test\"\" or ^\"hello world\"$\n// where inner spaces and quotes are part of the token.\nfunction tokenize(pattern) {\n  const tokens = [];\n  const len = pattern.length;\n  let i = 0;\n  while (i < len) {\n    // Skip spaces\n    while (i < len && pattern[i] === ' ') i++;\n    if (i >= len) break;\n\n    // Scan past prefix characters (=, !, ^, ') to see if a quote follows\n    let j = i;\n    while (j < len && pattern[j] !== ' ' && pattern[j] !== '\"') j++;\n    if (j < len && pattern[j] === '\"') {\n      // Multi-match token: prefix + \"content\" (possibly with inner quotes)\n      // Find the closing \" that ends this token:\n      // it must be followed by optional $, then space or end-of-string\n      j++; // skip opening quote\n      while (j < len) {\n        if (pattern[j] === '\"') {\n          // Check if this is the closing quote\n          const next = j + 1;\n          if (next >= len || pattern[next] === ' ') {\n            j++; // include closing quote\n            break;\n          }\n          if (pattern[next] === '$' && (next + 1 >= len || pattern[next + 1] === ' ')) {\n            j += 2; // include \"$\n            break;\n          }\n        }\n        j++;\n      }\n      tokens.push(pattern.substring(i, j));\n      i = j;\n    } else {\n      // Regular (unquoted) token: read until space or end\n      while (j < len && pattern[j] !== ' ') j++;\n      tokens.push(pattern.substring(i, j));\n      i = j;\n    }\n  }\n  return tokens;\n}\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n  // Replace escaped \\| with placeholder before splitting on |\n  const escaped = pattern.replace(/\\\\\\|/g, ESCAPED_PIPE);\n  return escaped.split(OR_TOKEN).map(item => {\n    // Restore escaped pipes in each OR group\n    const restored = item.replace(/\\u0000/g, '|');\n    const query = tokenize(restored.trim()).filter(item => item && !!item.trim());\n    const results = [];\n    for (let i = 0, len = query.length; i < len; i += 1) {\n      const queryItem = query[i];\n\n      // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n      let found = false;\n      let idx = -1;\n      while (!found && ++idx < searchersLen) {\n        const searcher = searchers[idx];\n        const token = searcher.isMultiMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          found = true;\n        }\n      }\n      if (found) {\n        continue;\n      }\n\n      // 2. Handle single query matches (i.e, once that are *not* quoted)\n      idx = -1;\n      while (++idx < searchersLen) {\n        const searcher = searchers[idx];\n        const token = searcher.isSingleMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          break;\n        }\n      }\n    }\n    return results;\n  });\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\nclass ExtendedSearch {\n  constructor(pattern, {\n    isCaseSensitive = Config.isCaseSensitive,\n    ignoreDiacritics = Config.ignoreDiacritics,\n    includeMatches = Config.includeMatches,\n    minMatchCharLength = Config.minMatchCharLength,\n    ignoreLocation = Config.ignoreLocation,\n    findAllMatches = Config.findAllMatches,\n    location = Config.location,\n    threshold = Config.threshold,\n    distance = Config.distance\n  } = {}) {\n    this.query = null;\n    this.options = {\n      isCaseSensitive,\n      ignoreDiacritics,\n      includeMatches,\n      minMatchCharLength,\n      findAllMatches,\n      ignoreLocation,\n      location,\n      threshold,\n      distance\n    };\n    pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n    pattern = ignoreDiacritics ? stripDiacritics(pattern) : pattern;\n    this.pattern = pattern;\n    this.query = parseQuery(this.pattern, this.options);\n  }\n  static condition(_, options) {\n    return options.useExtendedSearch;\n  }\n\n  // Note: searchIn operates on a single text value and sets hasInverse on the\n  // result when inverse patterns are involved. _searchObjectList uses this to\n  // switch from \"ANY key\" to \"ALL keys\" aggregation. See #712.\n  searchIn(text) {\n    const query = this.query;\n    if (!query) {\n      return {\n        isMatch: false,\n        score: 1\n      };\n    }\n    const {\n      includeMatches,\n      isCaseSensitive,\n      ignoreDiacritics\n    } = this.options;\n    text = isCaseSensitive ? text : text.toLowerCase();\n    text = ignoreDiacritics ? stripDiacritics(text) : text;\n    let numMatches = 0;\n    const allIndices = [];\n    let totalScore = 0;\n    let hasInverse = false;\n\n    // ORs\n    for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n      const searchers = query[i];\n\n      // Reset indices\n      allIndices.length = 0;\n      numMatches = 0;\n      hasInverse = false;\n\n      // ANDs\n      for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n        const searcher = searchers[j];\n        const {\n          isMatch,\n          indices,\n          score\n        } = searcher.search(text);\n        if (isMatch) {\n          numMatches += 1;\n          totalScore += score;\n          const type = searcher.constructor.type;\n          if (type.startsWith('inverse')) {\n            hasInverse = true;\n          }\n          if (includeMatches) {\n            if (MultiMatchSet.has(type)) {\n              allIndices.push(...indices);\n            } else {\n              allIndices.push(indices);\n            }\n          }\n        } else {\n          totalScore = 0;\n          numMatches = 0;\n          allIndices.length = 0;\n          hasInverse = false;\n          break;\n        }\n      }\n\n      // OR condition, so if TRUE, return\n      if (numMatches) {\n        const result = {\n          isMatch: true,\n          score: totalScore / numMatches\n        };\n        if (hasInverse) {\n          result.hasInverse = true;\n        }\n        if (includeMatches) {\n          result.indices = mergeIndices(allIndices);\n        }\n        return result;\n      }\n    }\n\n    // Nothing was matched\n    return {\n      isMatch: false,\n      score: 1\n    };\n  }\n}\n\nconst registeredSearchers = [];\nfunction register(...args) {\n  registeredSearchers.push(...args);\n}\nfunction createSearcher(pattern, options) {\n  for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n    const searcherClass = registeredSearchers[i];\n    if (searcherClass.condition(pattern, options)) {\n      return new searcherClass(pattern, options);\n    }\n  }\n  return new BitapSearch(pattern, options);\n}\n\nconst LogicalOperator = {\n  AND: '$and',\n  OR: '$or'\n};\nconst KeyType = {\n  PATH: '$path',\n  PATTERN: '$val'\n};\nconst isExpression = query => !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\nconst isPath = query => !!query[KeyType.PATH];\nconst isLeaf = query => !isArray(query) && isObject(query) && !isExpression(query);\nconst convertToExplicit = query => ({\n  [LogicalOperator.AND]: Object.keys(query).map(key => ({\n    [key]: query[key]\n  }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, {\n  auto = true\n} = {}) {\n  const next = query => {\n    // Keyless string entry: search across all keys\n    if (isString(query)) {\n      const obj = {\n        keyId: null,\n        pattern: query\n      };\n      if (auto) {\n        obj.searcher = createSearcher(query, options);\n      }\n      return obj;\n    }\n    const keys = Object.keys(query);\n    const isQueryPath = isPath(query);\n    if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n      return next(convertToExplicit(query));\n    }\n    if (isLeaf(query)) {\n      const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n      const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n      if (!isString(pattern)) {\n        throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key));\n      }\n      const obj = {\n        keyId: createKeyId(key),\n        pattern\n      };\n      if (auto) {\n        obj.searcher = createSearcher(pattern, options);\n      }\n      return obj;\n    }\n    const node = {\n      children: [],\n      operator: keys[0]\n    };\n    keys.forEach(key => {\n      const value = query[key];\n      if (isArray(value)) {\n        value.forEach(item => {\n          node.children.push(next(item));\n        });\n      }\n    });\n    return node;\n  };\n  if (!isExpression(query)) {\n    query = convertToExplicit(query);\n  }\n  return next(query);\n}\n\nfunction computeScoreSingle(matches, {\n  ignoreFieldNorm = Config.ignoreFieldNorm\n}) {\n  let totalScore = 1;\n  matches.forEach(({\n    key,\n    norm,\n    score\n  }) => {\n    const weight = key ? key.weight : null;\n    totalScore *= Math.pow(score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm));\n  });\n  return totalScore;\n}\nfunction computeScore(results, {\n  ignoreFieldNorm = Config.ignoreFieldNorm\n}) {\n  results.forEach(result => {\n    result.score = computeScoreSingle(result.matches, {\n      ignoreFieldNorm\n    });\n  });\n}\n\n// Max-heap by score: keeps the worst (highest) score at the top\n// so we can efficiently evict it when a better result arrives.\nclass MaxHeap {\n  constructor(limit) {\n    this.limit = limit;\n    this.heap = [];\n  }\n  get size() {\n    return this.heap.length;\n  }\n  shouldInsert(score) {\n    return this.size < this.limit || score < this.heap[0].score;\n  }\n  insert(item) {\n    if (this.size < this.limit) {\n      this.heap.push(item);\n      this._bubbleUp(this.size - 1);\n    } else if (item.score < this.heap[0].score) {\n      this.heap[0] = item;\n      this._sinkDown(0);\n    }\n  }\n  extractSorted(sortFn) {\n    return this.heap.sort(sortFn);\n  }\n  _bubbleUp(i) {\n    const heap = this.heap;\n    while (i > 0) {\n      const parent = i - 1 >> 1;\n      if (heap[i].score <= heap[parent].score) break;\n      const tmp = heap[i];\n      heap[i] = heap[parent];\n      heap[parent] = tmp;\n      i = parent;\n    }\n  }\n  _sinkDown(i) {\n    const heap = this.heap;\n    const len = heap.length;\n    let largest = i;\n    do {\n      i = largest;\n      const left = 2 * i + 1;\n      const right = 2 * i + 2;\n      if (left < len && heap[left].score > heap[largest].score) {\n        largest = left;\n      }\n      if (right < len && heap[right].score > heap[largest].score) {\n        largest = right;\n      }\n      if (largest !== i) {\n        const tmp = heap[i];\n        heap[i] = heap[largest];\n        heap[largest] = tmp;\n      }\n    } while (largest !== i);\n  }\n}\n\nfunction transformMatches(result, data) {\n  const matches = result.matches;\n  data.matches = [];\n  if (!isDefined(matches)) {\n    return;\n  }\n  matches.forEach(match => {\n    if (!isDefined(match.indices) || !match.indices.length) {\n      return;\n    }\n    const {\n      indices,\n      value\n    } = match;\n    const obj = {\n      indices,\n      value\n    };\n    if (match.key) {\n      obj.key = match.key.src;\n    }\n    if (match.idx > -1) {\n      obj.refIndex = match.idx;\n    }\n    data.matches.push(obj);\n  });\n}\n\nfunction transformScore(result, data) {\n  data.score = result.score;\n}\n\nfunction format(results, docs, {\n  includeMatches = Config.includeMatches,\n  includeScore = Config.includeScore\n} = {}) {\n  const transformers = [];\n  if (includeMatches) transformers.push(transformMatches);\n  if (includeScore) transformers.push(transformScore);\n  return results.map(result => {\n    const {\n      idx\n    } = result;\n    const data = {\n      item: docs[idx],\n      refIndex: idx\n    };\n    if (transformers.length) {\n      transformers.forEach(transformer => {\n        transformer(result, data);\n      });\n    }\n    return data;\n  });\n}\n\nconst WORD = /\\b\\w+\\b/g;\nfunction createAnalyzer({\n  isCaseSensitive = false,\n  ignoreDiacritics = false\n} = {}) {\n  return {\n    tokenize(text) {\n      if (!isCaseSensitive) {\n        text = text.toLowerCase();\n      }\n      if (ignoreDiacritics) {\n        text = stripDiacritics(text);\n      }\n      return text.match(WORD) || [];\n    }\n  };\n}\n\nfunction buildInvertedIndex(records, keyCount, analyzer) {\n  const terms = new Map();\n  const df = new Map();\n  let fieldCount = 0;\n  function addField(text, docIdx, keyIdx, subIdx) {\n    const tokens = analyzer.tokenize(text);\n    if (!tokens.length) return;\n    fieldCount++;\n\n    // Count term frequencies in this field\n    const termFreqs = new Map();\n    for (const token of tokens) {\n      termFreqs.set(token, (termFreqs.get(token) || 0) + 1);\n    }\n\n    // Track which terms we've already counted for df in this field\n    for (const [term, tf] of termFreqs) {\n      const posting = {\n        docIdx,\n        keyIdx,\n        subIdx,\n        tf\n      };\n      let postings = terms.get(term);\n      if (!postings) {\n        postings = [];\n        terms.set(term, postings);\n      }\n      postings.push(posting);\n      df.set(term, (df.get(term) || 0) + 1);\n    }\n  }\n  for (const record of records) {\n    const {\n      i: docIdx,\n      v,\n      $: fields\n    } = record;\n\n    // String list\n    if (v !== undefined) {\n      addField(v, docIdx, -1, -1);\n      continue;\n    }\n\n    // Object list\n    if (fields) {\n      for (let keyIdx = 0; keyIdx < keyCount; keyIdx++) {\n        const value = fields[keyIdx];\n        if (!value) continue;\n        if (Array.isArray(value)) {\n          for (const sub of value) {\n            addField(sub.v, docIdx, keyIdx, sub.i ?? -1);\n          }\n        } else {\n          addField(value.v, docIdx, keyIdx, -1);\n        }\n      }\n    }\n  }\n  return {\n    terms,\n    fieldCount,\n    df\n  };\n}\nfunction addToInvertedIndex(index, record, keyCount, analyzer) {\n  const {\n    i: docIdx,\n    v,\n    $: fields\n  } = record;\n  function addField(text, keyIdx, subIdx) {\n    const tokens = analyzer.tokenize(text);\n    if (!tokens.length) return;\n    index.fieldCount++;\n    const termFreqs = new Map();\n    for (const token of tokens) {\n      termFreqs.set(token, (termFreqs.get(token) || 0) + 1);\n    }\n    for (const [term, tf] of termFreqs) {\n      const posting = {\n        docIdx,\n        keyIdx,\n        subIdx,\n        tf\n      };\n      let postings = index.terms.get(term);\n      if (!postings) {\n        postings = [];\n        index.terms.set(term, postings);\n      }\n      postings.push(posting);\n      index.df.set(term, (index.df.get(term) || 0) + 1);\n    }\n  }\n  if (v !== undefined) {\n    addField(v, -1, -1);\n    return;\n  }\n  if (fields) {\n    for (let keyIdx = 0; keyIdx < keyCount; keyIdx++) {\n      const value = fields[keyIdx];\n      if (!value) continue;\n      if (Array.isArray(value)) {\n        for (const sub of value) {\n          addField(sub.v, keyIdx, sub.i ?? -1);\n        }\n      } else {\n        addField(value.v, keyIdx, -1);\n      }\n    }\n  }\n}\nfunction removeFromInvertedIndex(index, docIdx) {\n  for (const [term, postings] of index.terms) {\n    const filtered = postings.filter(p => p.docIdx !== docIdx);\n    const removed = postings.length - filtered.length;\n    if (removed > 0) {\n      index.fieldCount -= removed;\n      index.df.set(term, (index.df.get(term) || 0) - removed);\n      if (filtered.length === 0) {\n        index.terms.delete(term);\n        index.df.delete(term);\n      } else {\n        index.terms.set(term, filtered);\n      }\n    }\n  }\n}\n\nclass Fuse {\n  // Statics are assigned in entry.ts\n\n  constructor(docs, options, index) {\n    this.options = {\n      ...Config,\n      ...options\n    };\n    if (this.options.useExtendedSearch && false) ;\n    if (this.options.useTokenSearch && false) ;\n    this._keyStore = new KeyStore(this.options.keys);\n    this._docs = docs;\n    this._myIndex = null;\n    this._invertedIndex = null;\n    this.setCollection(docs, index);\n    this._lastQuery = null;\n    this._lastSearcher = null;\n  }\n  _getSearcher(query) {\n    if (this._lastQuery === query) {\n      return this._lastSearcher;\n    }\n    const opts = this._invertedIndex ? {\n      ...this.options,\n      _invertedIndex: this._invertedIndex\n    } : this.options;\n    const searcher = createSearcher(query, opts);\n    this._lastQuery = query;\n    this._lastSearcher = searcher;\n    return searcher;\n  }\n  setCollection(docs, index) {\n    this._docs = docs;\n    if (index && !(index instanceof FuseIndex)) {\n      throw new Error(INCORRECT_INDEX_TYPE);\n    }\n    this._myIndex = index || createIndex(this.options.keys, this._docs, {\n      getFn: this.options.getFn,\n      fieldNormWeight: this.options.fieldNormWeight\n    });\n    if (this.options.useTokenSearch) {\n      const analyzer = createAnalyzer({\n        isCaseSensitive: this.options.isCaseSensitive,\n        ignoreDiacritics: this.options.ignoreDiacritics\n      });\n      this._invertedIndex = buildInvertedIndex(this._myIndex.records, this._myIndex.keys.length, analyzer);\n    }\n  }\n  add(doc) {\n    if (!isDefined(doc)) {\n      return;\n    }\n    this._docs.push(doc);\n    this._myIndex.add(doc);\n    if (this._invertedIndex) {\n      const record = this._myIndex.records[this._myIndex.records.length - 1];\n      const analyzer = createAnalyzer({\n        isCaseSensitive: this.options.isCaseSensitive,\n        ignoreDiacritics: this.options.ignoreDiacritics\n      });\n      addToInvertedIndex(this._invertedIndex, record, this._myIndex.keys.length, analyzer);\n    }\n  }\n  remove(predicate = () => false) {\n    const results = [];\n    const indicesToRemove = [];\n    for (let i = 0, len = this._docs.length; i < len; i += 1) {\n      if (predicate(this._docs[i], i)) {\n        results.push(this._docs[i]);\n        indicesToRemove.push(i);\n      }\n    }\n    if (indicesToRemove.length) {\n      if (this._invertedIndex) {\n        for (const idx of indicesToRemove) {\n          removeFromInvertedIndex(this._invertedIndex, idx);\n        }\n      }\n\n      // Remove from docs in reverse to preserve indices\n      for (let i = indicesToRemove.length - 1; i >= 0; i -= 1) {\n        this._docs.splice(indicesToRemove[i], 1);\n      }\n      this._myIndex.removeAll(indicesToRemove);\n    }\n    return results;\n  }\n  removeAt(idx) {\n    if (this._invertedIndex) {\n      removeFromInvertedIndex(this._invertedIndex, idx);\n    }\n    const doc = this._docs.splice(idx, 1)[0];\n    this._myIndex.removeAt(idx);\n    return doc;\n  }\n  getIndex() {\n    return this._myIndex;\n  }\n  search(query, options) {\n    const {\n      limit = -1\n    } = options || {};\n    const {\n      includeMatches,\n      includeScore,\n      shouldSort,\n      sortFn,\n      ignoreFieldNorm\n    } = this.options;\n\n    // Empty string query returns all docs (useful for search UIs)\n    if (isString(query) && !query.trim()) {\n      let docs = this._docs.map((item, idx) => ({\n        item,\n        refIndex: idx\n      }));\n      if (isNumber(limit) && limit > -1) {\n        docs = docs.slice(0, limit);\n      }\n      return docs;\n    }\n    const useHeap = isNumber(limit) && limit > 0 && isString(query);\n    let results;\n    if (useHeap) {\n      const heap = new MaxHeap(limit);\n      if (isString(this._docs[0])) {\n        this._searchStringList(query, {\n          heap,\n          ignoreFieldNorm\n        });\n      } else {\n        this._searchObjectList(query, {\n          heap,\n          ignoreFieldNorm\n        });\n      }\n      results = heap.extractSorted(sortFn);\n    } else {\n      results = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query);\n      computeScore(results, {\n        ignoreFieldNorm\n      });\n      if (shouldSort) {\n        results.sort(sortFn);\n      }\n      if (isNumber(limit) && limit > -1) {\n        results = results.slice(0, limit);\n      }\n    }\n    return format(results, this._docs, {\n      includeMatches,\n      includeScore\n    });\n  }\n  _searchStringList(query, {\n    heap,\n    ignoreFieldNorm\n  } = {}) {\n    const searcher = this._getSearcher(query);\n    const {\n      records\n    } = this._myIndex;\n    const results = heap ? null : [];\n\n    // Iterate over every string in the index\n    records.forEach(({\n      v: text,\n      i: idx,\n      n: norm\n    }) => {\n      if (!isDefined(text)) {\n        return;\n      }\n      const {\n        isMatch,\n        score,\n        indices\n      } = searcher.searchIn(text);\n      if (isMatch) {\n        const result = {\n          item: text,\n          idx,\n          matches: [{\n            score,\n            value: text,\n            norm: norm,\n            indices\n          }]\n        };\n        if (heap) {\n          result.score = computeScoreSingle(result.matches, {\n            ignoreFieldNorm\n          });\n          if (heap.shouldInsert(result.score)) {\n            heap.insert(result);\n          }\n        } else {\n          results.push(result);\n        }\n      }\n    });\n    return results;\n  }\n  _searchLogical(query) {\n    const expression = parse(query, this.options);\n    const evaluate = (node, item, idx) => {\n      if (!('children' in node)) {\n        const {\n          keyId,\n          searcher\n        } = node;\n        let matches;\n        if (keyId === null) {\n          // Keyless entry: search across all keys\n          matches = [];\n          this._myIndex.keys.forEach((key, keyIndex) => {\n            matches.push(...this._findMatches({\n              key,\n              value: item[keyIndex],\n              searcher: searcher\n            }));\n          });\n        } else {\n          matches = this._findMatches({\n            key: this._keyStore.get(keyId),\n            value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n            searcher: searcher\n          });\n        }\n        if (matches && matches.length) {\n          return [{\n            idx,\n            item,\n            matches\n          }];\n        }\n        return [];\n      }\n      const {\n        children,\n        operator\n      } = node;\n      const res = [];\n      for (let i = 0, len = children.length; i < len; i += 1) {\n        const child = children[i];\n        const result = evaluate(child, item, idx);\n        if (result.length) {\n          res.push(...result);\n        } else if (operator === LogicalOperator.AND) {\n          return [];\n        }\n      }\n      return res;\n    };\n    const records = this._myIndex.records;\n    const resultMap = new Map();\n    const results = [];\n    records.forEach(({\n      $: item,\n      i: idx\n    }) => {\n      if (isDefined(item)) {\n        const expResults = evaluate(expression, item, idx);\n        if (expResults.length) {\n          // Dedupe when adding\n          if (!resultMap.has(idx)) {\n            resultMap.set(idx, {\n              idx,\n              item,\n              matches: []\n            });\n            results.push(resultMap.get(idx));\n          }\n          expResults.forEach(({\n            matches\n          }) => {\n            resultMap.get(idx).matches.push(...matches);\n          });\n        }\n      }\n    });\n    return results;\n  }\n\n  // When a search involves inverse patterns (e.g. !Syrup), the aggregation\n  // across keys switches from \"ANY key matches\" to \"ALL keys must match.\"\n  // This is signaled by hasInverse on the SearchResult from ExtendedSearch.\n  //\n  // For mixed patterns like \"^hello !Syrup\", a key failure is ambiguous —\n  // it could be the positive or inverse term that failed. In that case we\n  // conservatively exclude the item, which is strictly better than the old\n  // behavior of including it. See: https://github.com/krisk/Fuse/issues/712\n  _searchObjectList(query, {\n    heap,\n    ignoreFieldNorm\n  } = {}) {\n    const searcher = this._getSearcher(query);\n    const {\n      keys,\n      records\n    } = this._myIndex;\n    const results = heap ? null : [];\n\n    // List is Array<Object>\n    records.forEach(({\n      $: item,\n      i: idx\n    }) => {\n      if (!isDefined(item)) {\n        return;\n      }\n      const matches = [];\n      let anyKeyFailed = false;\n      let hasInverse = false;\n\n      // Iterate over every key (i.e, path), and fetch the value at that key\n      keys.forEach((key, keyIndex) => {\n        const keyMatches = this._findMatches({\n          key,\n          value: item[keyIndex],\n          searcher\n        });\n        if (keyMatches.length) {\n          matches.push(...keyMatches);\n          if (keyMatches[0].hasInverse) {\n            hasInverse = true;\n          }\n        } else {\n          anyKeyFailed = true;\n        }\n      });\n\n      // If the search involves inverse patterns, ALL keys must match\n      if (hasInverse && anyKeyFailed) {\n        return;\n      }\n      if (matches.length) {\n        const result = {\n          idx,\n          item,\n          matches\n        };\n        if (heap) {\n          result.score = computeScoreSingle(result.matches, {\n            ignoreFieldNorm\n          });\n          if (heap.shouldInsert(result.score)) {\n            heap.insert(result);\n          }\n        } else {\n          results.push(result);\n        }\n      }\n    });\n    return results;\n  }\n  _findMatches({\n    key,\n    value,\n    searcher\n  }) {\n    if (!isDefined(value)) {\n      return [];\n    }\n    const matches = [];\n    if (isArray(value)) {\n      value.forEach(({\n        v: text,\n        i: idx,\n        n: norm\n      }) => {\n        if (!isDefined(text)) {\n          return;\n        }\n        const {\n          isMatch,\n          score,\n          indices,\n          hasInverse\n        } = searcher.searchIn(text);\n        if (isMatch) {\n          matches.push({\n            score,\n            key,\n            value: text,\n            idx,\n            norm,\n            indices,\n            hasInverse\n          });\n        }\n      });\n    } else {\n      const {\n        v: text,\n        n: norm\n      } = value;\n      const {\n        isMatch,\n        score,\n        indices,\n        hasInverse\n      } = searcher.searchIn(text);\n      if (isMatch) {\n        matches.push({\n          score,\n          key,\n          value: text,\n          norm,\n          indices,\n          hasInverse\n        });\n      }\n    }\n    return matches;\n  }\n}\n\nclass TokenSearch {\n  static condition(_, options) {\n    return options.useTokenSearch;\n  }\n  constructor(pattern, options) {\n    this.options = options;\n    this.analyzer = createAnalyzer({\n      isCaseSensitive: options.isCaseSensitive,\n      ignoreDiacritics: options.ignoreDiacritics\n    });\n    const queryTerms = this.analyzer.tokenize(pattern);\n    const invertedIndex = options._invertedIndex;\n    const {\n      df,\n      fieldCount\n    } = invertedIndex;\n    this.termSearchers = [];\n    this.idfWeights = [];\n    for (const term of queryTerms) {\n      this.termSearchers.push(new BitapSearch(term, {\n        location: options.location,\n        threshold: options.threshold,\n        distance: options.distance,\n        includeMatches: options.includeMatches,\n        findAllMatches: options.findAllMatches,\n        minMatchCharLength: options.minMatchCharLength,\n        isCaseSensitive: options.isCaseSensitive,\n        ignoreDiacritics: options.ignoreDiacritics,\n        ignoreLocation: true\n      }));\n      const docFreq = df.get(term) || 0;\n      const idf = Math.log(1 + (fieldCount - docFreq + 0.5) / (docFreq + 0.5));\n      this.idfWeights.push(idf);\n    }\n  }\n  searchIn(text) {\n    if (!this.termSearchers.length) {\n      return {\n        isMatch: false,\n        score: 1\n      };\n    }\n    const allIndices = [];\n    let weightedScore = 0;\n    let maxPossibleScore = 0;\n    let matchedCount = 0;\n    for (let i = 0; i < this.termSearchers.length; i++) {\n      const result = this.termSearchers[i].searchIn(text);\n      const idf = this.idfWeights[i];\n      maxPossibleScore += idf;\n      if (result.isMatch) {\n        matchedCount++;\n        weightedScore += idf * (1 - result.score);\n        if (result.indices) {\n          allIndices.push(...result.indices);\n        }\n      }\n    }\n    if (matchedCount === 0) {\n      return {\n        isMatch: false,\n        score: 1\n      };\n    }\n    const normalized = maxPossibleScore > 0 ? 1 - weightedScore / maxPossibleScore : 0;\n    const searchResult = {\n      isMatch: true,\n      score: Math.max(0.001, normalized)\n    };\n    if (this.options.includeMatches && allIndices.length) {\n      searchResult.indices = mergeIndices(allIndices);\n    }\n    return searchResult;\n  }\n}\n\nFuse.version = '7.3.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\nFuse.match = function (pattern, text, options) {\n  const searcher = createSearcher(pattern, {\n    ...Config,\n    ...options\n  });\n  return searcher.searchIn(text);\n};\n{\n  Fuse.parseQuery = parse;\n}\n{\n  register(ExtendedSearch);\n}\n{\n  register(TokenSearch);\n}\nFuse.use = function (...plugins) {\n  plugins.forEach(plugin => register(plugin));\n};\n\n// Re-export public types\n\nexport { Fuse as default };\n","import Fuse, { FuseResult } from \"fuse.js\";\nimport { ColorDefinition, SpotColorDefinition } from \"../types\";\n\n// TODO: Should we move these lists onto a spreadsheet in the cloud and then process them when required?\nconst pmsValues = [\n    \"Yellow C\",\n    \"Yellow 012 C\",\n    \"Orange 021 C\",\n    \"Warm Red C\",\n    \"Red 032 C\",\n    \"Rubine Red C\",\n    \"Rhodamine Red C\",\n    \"Purple C\",\n    \"Violet C\",\n    \"Blue 072 C\",\n    \"Reflex Blue C\",\n    \"Process Blue C\",\n    \"Green C\",\n    \"Black C\",\n    \"Yellow 0131 C\",\n    \"Red 0331 C\",\n    \"Magenta 0521 C\",\n    \"Violet 0631 C\",\n    \"Blue 0821 C\",\n    \"Green 0921 C\",\n    \"Black 0961 C\",\n    \"801 C\",\n    \"802 C\",\n    \"803 C\",\n    \"804 C\",\n    \"805 C\",\n    \"806 C\",\n    \"807 C\",\n    \"871 C\",\n    \"872 C\",\n    \"873 C\",\n    \"874 C\",\n    \"875 C\",\n    \"876 C\",\n    \"877 C\",\n    \"Medium Yellow C\",\n    \"Bright Orange C\",\n    \"Bright Red C\",\n    \"Strong Red C\",\n    \"Pink C\",\n    \"Medium Purple C\",\n    \"Dark Blue C\",\n    \"Medium Blue C\",\n    \"Bright Green C\",\n    \"Neutral Black C\",\n    \"100 C\",\n    \"101 C\",\n    \"102 C\",\n    \"103 C\",\n    \"104 C\",\n    \"105 C\",\n    \"7401 C\",\n    \"7402 C\",\n    \"7403 C\",\n    \"7404 C\",\n    \"7405 C\",\n    \"7406 C\",\n    \"7407 C\",\n    \"106 C\",\n    \"107 C\",\n    \"108 C\",\n    \"109 C\",\n    \"110 C\",\n    \"111 C\",\n    \"112 C\",\n    \"113 C\",\n    \"114 C\",\n    \"115 C\",\n    \"116 C\",\n    \"117 C\",\n    \"118 C\",\n    \"119 C\",\n    \"127 C\",\n    \"128 C\",\n    \"129 C\",\n    \"130 C\",\n    \"131 C\",\n    \"132 C\",\n    \"133 C\",\n    \"1205 C\",\n    \"1215 C\",\n    \"1225 C\",\n    \"1235 C\",\n    \"1245 C\",\n    \"1255 C\",\n    \"1265 C\",\n    \"120 C\",\n    \"121 C\",\n    \"122 C\",\n    \"123 C\",\n    \"124 C\",\n    \"125 C\",\n    \"126 C\",\n    \"7548 C\",\n    \"7549 C\",\n    \"7550 C\",\n    \"7551 C\",\n    \"7552 C\",\n    \"7553 C\",\n    \"7554 C\",\n    \"7555 C\",\n    \"7556 C\",\n    \"7557 C\",\n    \"7558 C\",\n    \"7559 C\",\n    \"7560 C\",\n    \"7561 C\",\n    \"134 C\",\n    \"135 C\",\n    \"136 C\",\n    \"137 C\",\n    \"138 C\",\n    \"139 C\",\n    \"140 C\",\n    \"1345 C\",\n    \"1355 C\",\n    \"1365 C\",\n    \"1375 C\",\n    \"1385 C\",\n    \"1395 C\",\n    \"1405 C\",\n    \"141 C\",\n    \"142 C\",\n    \"143 C\",\n    \"144 C\",\n    \"145 C\",\n    \"146 C\",\n    \"147 C\",\n    \"7408 C\",\n    \"7409 C\",\n    \"7410 C\",\n    \"7411 C\",\n    \"7412 C\",\n    \"7413 C\",\n    \"7414 C\",\n    \"7562 C\",\n    \"7563 C\",\n    \"7564 C\",\n    \"7565 C\",\n    \"7566 C\",\n    \"7567 C\",\n    \"7568 C\",\n    \"7569 C\",\n    \"7570 C\",\n    \"7571 C\",\n    \"7572 C\",\n    \"7573 C\",\n    \"7574 C\",\n    \"7575 C\",\n    \"712 C\",\n    \"713 C\",\n    \"714 C\",\n    \"715 C\",\n    \"716 C\",\n    \"717 C\",\n    \"718 C\",\n    \"148 C\",\n    \"149 C\",\n    \"150 C\",\n    \"151 C\",\n    \"152 C\",\n    \"153 C\",\n    \"154 C\",\n    \"155 C\",\n    \"156 C\",\n    \"157 C\",\n    \"158 C\",\n    \"159 C\",\n    \"160 C\",\n    \"161 C\",\n    \"1485 C\",\n    \"1495 C\",\n    \"1505 C\",\n    \"1525 C\",\n    \"1535 C\",\n    \"1545 C\",\n    \"1555 C\",\n    \"1565 C\",\n    \"1575 C\",\n    \"1585 C\",\n    \"1595 C\",\n    \"1605 C\",\n    \"1615 C\",\n    \"162 C\",\n    \"163 C\",\n    \"164 C\",\n    \"165 C\",\n    \"166 C\",\n    \"167 C\",\n    \"168 C\",\n    \"7576 C\",\n    \"7577 C\",\n    \"7578 C\",\n    \"7579 C\",\n    \"7580 C\",\n    \"7581 C\",\n    \"7582 C\",\n    \"1625 C\",\n    \"1635 C\",\n    \"1645 C\",\n    \"1655 C\",\n    \"1665 C\",\n    \"1675 C\",\n    \"1685 C\",\n    \"169 C\",\n    \"170 C\",\n    \"171 C\",\n    \"172 C\",\n    \"173 C\",\n    \"174 C\",\n    \"175 C\",\n    \"7583 C\",\n    \"7584 C\",\n    \"7585 C\",\n    \"7586 C\",\n    \"7587 C\",\n    \"7588 C\",\n    \"7589 C\",\n    \"7590 C\",\n    \"7591 C\",\n    \"7592 C\",\n    \"7593 C\",\n    \"7594 C\",\n    \"7595 C\",\n    \"7596 C\",\n    \"7597 C\",\n    \"7598 C\",\n    \"7599 C\",\n    \"7600 C\",\n    \"7601 C\",\n    \"7602 C\",\n    \"7603 C\",\n    \"7604 C\",\n    \"7605 C\",\n    \"7606 C\",\n    \"7607 C\",\n    \"7608 C\",\n    \"7609 C\",\n    \"7610 C\",\n    \"7611 C\",\n    \"7612 C\",\n    \"7613 C\",\n    \"7614 C\",\n    \"7615 C\",\n    \"7616 C\",\n    \"7617 C\",\n    \"7520 C\",\n    \"7521 C\",\n    \"7522 C\",\n    \"7523 C\",\n    \"7524 C\",\n    \"7525 C\",\n    \"7526 C\",\n    \"489 C\",\n    \"488 C\",\n    \"487 C\",\n    \"486 C\",\n    \"485 C\",\n    \"484 C\",\n    \"483 C\",\n    \"176 C\",\n    \"177 C\",\n    \"178 C\",\n    \"179 C\",\n    \"180 C\",\n    \"181 C\",\n    \"1765 C\",\n    \"1775 C\",\n    \"1785 C\",\n    \"1788 C\",\n    \"1795 C\",\n    \"1805 C\",\n    \"1815 C\",\n    \"1767 C\",\n    \"1777 C\",\n    \"1787 C\",\n    \"1797 C\",\n    \"1807 C\",\n    \"1817 C\",\n    \"7618 C\",\n    \"7619 C\",\n    \"7620 C\",\n    \"7621 C\",\n    \"7622 C\",\n    \"7623 C\",\n    \"7624 C\",\n    \"7625 C\",\n    \"7626 C\",\n    \"7627 C\",\n    \"7628 C\",\n    \"7629 C\",\n    \"7630 C\",\n    \"7631 C\",\n    \"7415 C\",\n    \"7416 C\",\n    \"7417 C\",\n    \"7418 C\",\n    \"7419 C\",\n    \"7420 C\",\n    \"7421 C\",\n    \"182 C\",\n    \"183 C\",\n    \"184 C\",\n    \"185 C\",\n    \"186 C\",\n    \"187 C\",\n    \"188 C\",\n    \"196 C\",\n    \"197 C\",\n    \"198 C\",\n    \"199 C\",\n    \"200 C\",\n    \"201 C\",\n    \"202 C\",\n    \"189 C\",\n    \"190 C\",\n    \"191 C\",\n    \"192 C\",\n    \"193 C\",\n    \"194 C\",\n    \"195 C\",\n    \"1895 C\",\n    \"1905 C\",\n    \"1915 C\",\n    \"1925 C\",\n    \"1935 C\",\n    \"1945 C\",\n    \"1955 C\",\n    \"705 C\",\n    \"706 C\",\n    \"707 C\",\n    \"708 C\",\n    \"709 C\",\n    \"710 C\",\n    \"711 C\",\n    \"698 C\",\n    \"699 C\",\n    \"700 C\",\n    \"701 C\",\n    \"702 C\",\n    \"703 C\",\n    \"704 C\",\n    \"203 C\",\n    \"204 C\",\n    \"205 C\",\n    \"206 C\",\n    \"207 C\",\n    \"208 C\",\n    \"209 C\",\n    \"210 C\",\n    \"211 C\",\n    \"212 C\",\n    \"213 C\",\n    \"214 C\",\n    \"215 C\",\n    \"216 C\",\n    \"7422 C\",\n    \"7423 C\",\n    \"7424 C\",\n    \"7425 C\",\n    \"7426 C\",\n    \"7427 C\",\n    \"7428 C\",\n    \"7632 C\",\n    \"7633 C\",\n    \"7634 C\",\n    \"7635 C\",\n    \"7636 C\",\n    \"7637 C\",\n    \"7638 C\",\n    \"217 C\",\n    \"218 C\",\n    \"219 C\",\n    \"220 C\",\n    \"221 C\",\n    \"222 C\",\n    \"7639 C\",\n    \"7640 C\",\n    \"7641 C\",\n    \"7642 C\",\n    \"7643 C\",\n    \"7644 C\",\n    \"7645 C\",\n    \"223 C\",\n    \"224 C\",\n    \"225 C\",\n    \"226 C\",\n    \"227 C\",\n    \"228 C\",\n    \"229 C\",\n    \"230 C\",\n    \"231 C\",\n    \"232 C\",\n    \"233 C\",\n    \"234 C\",\n    \"235 C\",\n    \"670 C\",\n    \"671 C\",\n    \"672 C\",\n    \"673 C\",\n    \"674 C\",\n    \"675 C\",\n    \"676 C\",\n    \"677 C\",\n    \"678 C\",\n    \"679 C\",\n    \"680 C\",\n    \"681 C\",\n    \"682 C\",\n    \"683 C\",\n    \"684 C\",\n    \"685 C\",\n    \"686 C\",\n    \"687 C\",\n    \"688 C\",\n    \"689 C\",\n    \"690 C\",\n    \"510 C\",\n    \"509 C\",\n    \"508 C\",\n    \"507 C\",\n    \"506 C\",\n    \"505 C\",\n    \"504 C\",\n    \"7429 C\",\n    \"7430 C\",\n    \"7431 C\",\n    \"7432 C\",\n    \"7433 C\",\n    \"7434 C\",\n    \"7435 C\",\n    \"691 C\",\n    \"692 C\",\n    \"693 C\",\n    \"694 C\",\n    \"695 C\",\n    \"696 C\",\n    \"697 C\",\n    \"496 C\",\n    \"495 C\",\n    \"494 C\",\n    \"493 C\",\n    \"492 C\",\n    \"491 C\",\n    \"490 C\",\n    \"503 C\",\n    \"502 C\",\n    \"501 C\",\n    \"500 C\",\n    \"499 C\",\n    \"498 C\",\n    \"497 C\",\n    \"5035 C\",\n    \"5025 C\",\n    \"5015 C\",\n    \"5005 C\",\n    \"4995 C\",\n    \"4985 C\",\n    \"4975 C\",\n    \"236 C\",\n    \"237 C\",\n    \"238 C\",\n    \"239 C\",\n    \"240 C\",\n    \"241 C\",\n    \"242 C\",\n    \"2365 C\",\n    \"2375 C\",\n    \"2385 C\",\n    \"2395 C\",\n    \"2405 C\",\n    \"2415 C\",\n    \"2425 C\",\n    \"243 C\",\n    \"244 C\",\n    \"245 C\",\n    \"246 C\",\n    \"247 C\",\n    \"248 C\",\n    \"249 C\",\n    \"7646 C\",\n    \"7647 C\",\n    \"7648 C\",\n    \"7649 C\",\n    \"7650 C\",\n    \"7651 C\",\n    \"7652 C\",\n    \"250 C\",\n    \"251 C\",\n    \"252 C\",\n    \"253 C\",\n    \"254 C\",\n    \"255 C\",\n    \"517 C\",\n    \"516 C\",\n    \"515 C\",\n    \"514 C\",\n    \"513 C\",\n    \"512 C\",\n    \"511 C\",\n    \"7436 C\",\n    \"7437 C\",\n    \"7438 C\",\n    \"7439 C\",\n    \"7440 C\",\n    \"7441 C\",\n    \"7442 C\",\n    \"2562 C\",\n    \"2572 C\",\n    \"2582 C\",\n    \"2592 C\",\n    \"2602 C\",\n    \"2612 C\",\n    \"2622 C\",\n    \"7653 C\",\n    \"7654 C\",\n    \"7655 C\",\n    \"7656 C\",\n    \"7657 C\",\n    \"7658 C\",\n    \"7659 C\",\n    \"524 C\",\n    \"523 C\",\n    \"522 C\",\n    \"521 C\",\n    \"520 C\",\n    \"519 C\",\n    \"518 C\",\n    \"5245 C\",\n    \"5235 C\",\n    \"5225 C\",\n    \"5215 C\",\n    \"5205 C\",\n    \"5195 C\",\n    \"5185 C\",\n    \"5175 C\",\n    \"5165 C\",\n    \"5155 C\",\n    \"5145 C\",\n    \"5135 C\",\n    \"5125 C\",\n    \"5115 C\",\n    \"531 C\",\n    \"530 C\",\n    \"529 C\",\n    \"528 C\",\n    \"527 C\",\n    \"526 C\",\n    \"525 C\",\n    \"256 C\",\n    \"257 C\",\n    \"258 C\",\n    \"259 C\",\n    \"260 C\",\n    \"261 C\",\n    \"262 C\",\n    \"2563 C\",\n    \"2573 C\",\n    \"2583 C\",\n    \"2593 C\",\n    \"2603 C\",\n    \"2613 C\",\n    \"2623 C\",\n    \"7660 C\",\n    \"7661 C\",\n    \"7662 C\",\n    \"7663 C\",\n    \"7664 C\",\n    \"7665 C\",\n    \"7666 C\",\n    \"2567 C\",\n    \"2577 C\",\n    \"2587 C\",\n    \"2597 C\",\n    \"2607 C\",\n    \"2617 C\",\n    \"2627 C\",\n    \"263 C\",\n    \"264 C\",\n    \"265 C\",\n    \"266 C\",\n    \"267 C\",\n    \"268 C\",\n    \"269 C\",\n    \"2635 C\",\n    \"2645 C\",\n    \"2655 C\",\n    \"2665 C\",\n    \"2685 C\",\n    \"2695 C\",\n    \"270 C\",\n    \"271 C\",\n    \"272 C\",\n    \"273 C\",\n    \"274 C\",\n    \"275 C\",\n    \"276 C\",\n    \"2705 C\",\n    \"2715 C\",\n    \"2725 C\",\n    \"2735 C\",\n    \"2745 C\",\n    \"2755 C\",\n    \"2765 C\",\n    \"7667 C\",\n    \"7668 C\",\n    \"7669 C\",\n    \"7670 C\",\n    \"7671 C\",\n    \"7672 C\",\n    \"7673 C\",\n    \"7443 C\",\n    \"7444 C\",\n    \"7445 C\",\n    \"7446 C\",\n    \"7447 C\",\n    \"7448 C\",\n    \"7449 C\",\n    \"7674 C\",\n    \"7675 C\",\n    \"7676 C\",\n    \"7677 C\",\n    \"7678 C\",\n    \"7679 C\",\n    \"7680 C\",\n    \"663 C\",\n    \"664 C\",\n    \"665 C\",\n    \"666 C\",\n    \"667 C\",\n    \"668 C\",\n    \"669 C\",\n    \"5315 C\",\n    \"5305 C\",\n    \"5295 C\",\n    \"5285 C\",\n    \"5275 C\",\n    \"5265 C\",\n    \"5255 C\",\n    \"538 C\",\n    \"537 C\",\n    \"536 C\",\n    \"535 C\",\n    \"534 C\",\n    \"533 C\",\n    \"532 C\",\n    \"7541 C\",\n    \"7542 C\",\n    \"7543 C\",\n    \"7544 C\",\n    \"7545 C\",\n    \"7546 C\",\n    \"7547 C\",\n    \"552 C\",\n    \"551 C\",\n    \"550 C\",\n    \"549 C\",\n    \"548 C\",\n    \"547 C\",\n    \"546 C\",\n    \"5455 C\",\n    \"5445 C\",\n    \"5435 C\",\n    \"5425 C\",\n    \"5415 C\",\n    \"5405 C\",\n    \"5395 C\",\n    \"642 C\",\n    \"643 C\",\n    \"644 C\",\n    \"645 C\",\n    \"646 C\",\n    \"647 C\",\n    \"648 C\",\n    \"649 C\",\n    \"650 C\",\n    \"651 C\",\n    \"652 C\",\n    \"653 C\",\n    \"654 C\",\n    \"655 C\",\n    \"656 C\",\n    \"657 C\",\n    \"658 C\",\n    \"659 C\",\n    \"660 C\",\n    \"661 C\",\n    \"662 C\",\n    \"7450 C\",\n    \"7451 C\",\n    \"7452 C\",\n    \"7453 C\",\n    \"7454 C\",\n    \"7455 C\",\n    \"7456 C\",\n    \"2706 C\",\n    \"2716 C\",\n    \"2726 C\",\n    \"2736 C\",\n    \"2746 C\",\n    \"2756 C\",\n    \"2766 C\",\n    \"2708 C\",\n    \"2718 C\",\n    \"2728 C\",\n    \"2738 C\",\n    \"2748 C\",\n    \"2758 C\",\n    \"2768 C\",\n    \"2707 C\",\n    \"2717 C\",\n    \"2727 C\",\n    \"2747 C\",\n    \"2757 C\",\n    \"2767 C\",\n    \"277 C\",\n    \"278 C\",\n    \"279 C\",\n    \"280 C\",\n    \"281 C\",\n    \"282 C\",\n    \"283 C\",\n    \"284 C\",\n    \"285 C\",\n    \"286 C\",\n    \"287 C\",\n    \"288 C\",\n    \"289 C\",\n    \"7681 C\",\n    \"7682 C\",\n    \"7683 C\",\n    \"7684 C\",\n    \"7685 C\",\n    \"7686 C\",\n    \"7687 C\",\n    \"545 C\",\n    \"544 C\",\n    \"543 C\",\n    \"542 C\",\n    \"541 C\",\n    \"540 C\",\n    \"539 C\",\n    \"290 C\",\n    \"291 C\",\n    \"292 C\",\n    \"293 C\",\n    \"294 C\",\n    \"295 C\",\n    \"296 C\",\n    \"2905 C\",\n    \"2915 C\",\n    \"2925 C\",\n    \"2935 C\",\n    \"2945 C\",\n    \"2955 C\",\n    \"2965 C\",\n    \"297 C\",\n    \"298 C\",\n    \"299 C\",\n    \"300 C\",\n    \"301 C\",\n    \"302 C\",\n    \"303 C\",\n    \"7688 C\",\n    \"7689 C\",\n    \"7690 C\",\n    \"7691 C\",\n    \"7692 C\",\n    \"7693 C\",\n    \"7694 C\",\n    \"2975 C\",\n    \"2985 C\",\n    \"2995 C\",\n    \"3005 C\",\n    \"3015 C\",\n    \"3025 C\",\n    \"3035 C\",\n    \"7695 C\",\n    \"7696 C\",\n    \"7697 C\",\n    \"7698 C\",\n    \"7699 C\",\n    \"7700 C\",\n    \"7701 C\",\n    \"7457 C\",\n    \"7458 C\",\n    \"7459 C\",\n    \"7460 C\",\n    \"7461 C\",\n    \"7462 C\",\n    \"7463 C\",\n    \"304 C\",\n    \"305 C\",\n    \"306 C\",\n    \"307 C\",\n    \"308 C\",\n    \"309 C\",\n    \"635 C\",\n    \"636 C\",\n    \"637 C\",\n    \"638 C\",\n    \"639 C\",\n    \"640 C\",\n    \"641 C\",\n    \"7702 C\",\n    \"7703 C\",\n    \"7704 C\",\n    \"7705 C\",\n    \"7706 C\",\n    \"7707 C\",\n    \"7708 C\",\n    \"628 C\",\n    \"629 C\",\n    \"630 C\",\n    \"631 C\",\n    \"632 C\",\n    \"633 C\",\n    \"634 C\",\n    \"310 C\",\n    \"311 C\",\n    \"312 C\",\n    \"313 C\",\n    \"314 C\",\n    \"315 C\",\n    \"316 C\",\n    \"3105 C\",\n    \"3115 C\",\n    \"3125 C\",\n    \"3135 C\",\n    \"3145 C\",\n    \"3155 C\",\n    \"3165 C\",\n    \"7709 C\",\n    \"7710 C\",\n    \"7711 C\",\n    \"7712 C\",\n    \"7713 C\",\n    \"7714 C\",\n    \"7715 C\",\n    \"317 C\",\n    \"318 C\",\n    \"319 C\",\n    \"320 C\",\n    \"321 C\",\n    \"322 C\",\n    \"323 C\",\n    \"7464 C\",\n    \"7465 C\",\n    \"7466 C\",\n    \"7467 C\",\n    \"7468 C\",\n    \"7469 C\",\n    \"7470 C\",\n    \"7471 C\",\n    \"7472 C\",\n    \"7473 C\",\n    \"7474 C\",\n    \"7475 C\",\n    \"7476 C\",\n    \"7477 C\",\n    \"5523 C\",\n    \"5513 C\",\n    \"5503 C\",\n    \"5493 C\",\n    \"5483 C\",\n    \"5473 C\",\n    \"5463 C\",\n    \"7716 C\",\n    \"7717 C\",\n    \"7718 C\",\n    \"7719 C\",\n    \"7720 C\",\n    \"7721 C\",\n    \"7722 C\",\n    \"324 C\",\n    \"325 C\",\n    \"326 C\",\n    \"327 C\",\n    \"328 C\",\n    \"329 C\",\n    \"330 C\",\n    \"3242 C\",\n    \"3252 C\",\n    \"3262 C\",\n    \"3272 C\",\n    \"3282 C\",\n    \"3292 C\",\n    \"3302 C\",\n    \"3245 C\",\n    \"3255 C\",\n    \"3265 C\",\n    \"3275 C\",\n    \"3285 C\",\n    \"3295 C\",\n    \"3305 C\",\n    \"3248 C\",\n    \"3258 C\",\n    \"3268 C\",\n    \"3278 C\",\n    \"3288 C\",\n    \"3298 C\",\n    \"3308 C\",\n    \"566 C\",\n    \"565 C\",\n    \"564 C\",\n    \"563 C\",\n    \"562 C\",\n    \"561 C\",\n    \"560 C\",\n    \"573 C\",\n    \"572 C\",\n    \"571 C\",\n    \"570 C\",\n    \"569 C\",\n    \"568 C\",\n    \"567 C\",\n    \"559 C\",\n    \"558 C\",\n    \"557 C\",\n    \"556 C\",\n    \"555 C\",\n    \"554 C\",\n    \"553 C\",\n    \"5595 C\",\n    \"5585 C\",\n    \"5575 C\",\n    \"5565 C\",\n    \"5555 C\",\n    \"5545 C\",\n    \"5535 C\",\n    \"5665 C\",\n    \"5655 C\",\n    \"5645 C\",\n    \"5635 C\",\n    \"5625 C\",\n    \"5615 C\",\n    \"5605 C\",\n    \"5527 C\",\n    \"5517 C\",\n    \"5507 C\",\n    \"5497 C\",\n    \"5487 C\",\n    \"5477 C\",\n    \"5467 C\",\n    \"621 C\",\n    \"622 C\",\n    \"623 C\",\n    \"624 C\",\n    \"625 C\",\n    \"626 C\",\n    \"627 C\",\n    \"331 C\",\n    \"332 C\",\n    \"333 C\",\n    \"334 C\",\n    \"335 C\",\n    \"336 C\",\n    \"337 C\",\n    \"338 C\",\n    \"339 C\",\n    \"340 C\",\n    \"341 C\",\n    \"342 C\",\n    \"343 C\",\n    \"7723 C\",\n    \"7724 C\",\n    \"7725 C\",\n    \"7726 C\",\n    \"7727 C\",\n    \"7728 C\",\n    \"7729 C\",\n    \"3375 C\",\n    \"3385 C\",\n    \"3395 C\",\n    \"3405 C\",\n    \"3415 C\",\n    \"3425 C\",\n    \"3435 C\",\n    \"344 C\",\n    \"345 C\",\n    \"346 C\",\n    \"347 C\",\n    \"348 C\",\n    \"349 C\",\n    \"350 C\",\n    \"351 C\",\n    \"352 C\",\n    \"353 C\",\n    \"354 C\",\n    \"355 C\",\n    \"356 C\",\n    \"357 C\",\n    \"7478 C\",\n    \"7479 C\",\n    \"7480 C\",\n    \"7481 C\",\n    \"7482 C\",\n    \"7483 C\",\n    \"7484 C\",\n    \"7730 C\",\n    \"7731 C\",\n    \"7732 C\",\n    \"7733 C\",\n    \"7734 C\",\n    \"7735 C\",\n    \"7736 C\",\n    \"7737 C\",\n    \"7738 C\",\n    \"7739 C\",\n    \"7740 C\",\n    \"7741 C\",\n    \"7742 C\",\n    \"7743 C\",\n    \"358 C\",\n    \"359 C\",\n    \"360 C\",\n    \"361 C\",\n    \"362 C\",\n    \"363 C\",\n    \"364 C\",\n    \"7485 C\",\n    \"7486 C\",\n    \"7487 C\",\n    \"7488 C\",\n    \"7489 C\",\n    \"7490 C\",\n    \"7491 C\",\n    \"365 C\",\n    \"366 C\",\n    \"367 C\",\n    \"368 C\",\n    \"369 C\",\n    \"370 C\",\n    \"371 C\",\n    \"372 C\",\n    \"373 C\",\n    \"374 C\",\n    \"375 C\",\n    \"376 C\",\n    \"377 C\",\n    \"378 C\",\n    \"580 C\",\n    \"579 C\",\n    \"578 C\",\n    \"577 C\",\n    \"576 C\",\n    \"575 C\",\n    \"574 C\",\n    \"5807 C\",\n    \"5797 C\",\n    \"5787 C\",\n    \"5777 C\",\n    \"5767 C\",\n    \"5757 C\",\n    \"5747 C\",\n    \"5875 C\",\n    \"5865 C\",\n    \"5855 C\",\n    \"5845 C\",\n    \"5835 C\",\n    \"5825 C\",\n    \"5815 C\",\n    \"5803 C\",\n    \"5793 C\",\n    \"5783 C\",\n    \"5773 C\",\n    \"5763 C\",\n    \"5753 C\",\n    \"5743 C\",\n    \"7492 C\",\n    \"7493 C\",\n    \"7494 C\",\n    \"7495 C\",\n    \"7496 C\",\n    \"7497 C\",\n    \"7498 C\",\n    \"7744 C\",\n    \"7745 C\",\n    \"7746 C\",\n    \"7747 C\",\n    \"7748 C\",\n    \"7749 C\",\n    \"7750 C\",\n    \"379 C\",\n    \"380 C\",\n    \"381 C\",\n    \"382 C\",\n    \"383 C\",\n    \"384 C\",\n    \"385 C\",\n    \"386 C\",\n    \"387 C\",\n    \"388 C\",\n    \"389 C\",\n    \"390 C\",\n    \"391 C\",\n    \"392 C\",\n    \"587 C\",\n    \"586 C\",\n    \"585 C\",\n    \"584 C\",\n    \"583 C\",\n    \"582 C\",\n    \"581 C\",\n    \"393 C\",\n    \"394 C\",\n    \"395 C\",\n    \"396 C\",\n    \"397 C\",\n    \"398 C\",\n    \"399 C\",\n    \"3935 C\",\n    \"3945 C\",\n    \"3955 C\",\n    \"3965 C\",\n    \"3975 C\",\n    \"3985 C\",\n    \"3995 C\",\n    \"600 C\",\n    \"601 C\",\n    \"602 C\",\n    \"603 C\",\n    \"604 C\",\n    \"605 C\",\n    \"606 C\",\n    \"607 C\",\n    \"608 C\",\n    \"609 C\",\n    \"610 C\",\n    \"611 C\",\n    \"612 C\",\n    \"613 C\",\n    \"461 C\",\n    \"460 C\",\n    \"459 C\",\n    \"458 C\",\n    \"457 C\",\n    \"456 C\",\n    \"455 C\",\n    \"614 C\",\n    \"615 C\",\n    \"616 C\",\n    \"617 C\",\n    \"618 C\",\n    \"619 C\",\n    \"620 C\",\n    \"7751 C\",\n    \"7752 C\",\n    \"7753 C\",\n    \"7754 C\",\n    \"7755 C\",\n    \"7756 C\",\n    \"7757 C\",\n    \"7758 C\",\n    \"7759 C\",\n    \"7760 C\",\n    \"7761 C\",\n    \"7762 C\",\n    \"7763 C\",\n    \"7764 C\",\n    \"7765 C\",\n    \"7766 C\",\n    \"7767 C\",\n    \"7768 C\",\n    \"7769 C\",\n    \"7770 C\",\n    \"7771 C\",\n    \"4545 C\",\n    \"4535 C\",\n    \"4525 C\",\n    \"4515 C\",\n    \"4505 C\",\n    \"4495 C\",\n    \"4485 C\",\n    \"454 C\",\n    \"453 C\",\n    \"452 C\",\n    \"451 C\",\n    \"450 C\",\n    \"449 C\",\n    \"448 C\",\n    \"7499 C\",\n    \"7500 C\",\n    \"7501 C\",\n    \"7502 C\",\n    \"7503 C\",\n    \"7504 C\",\n    \"7505 C\",\n    \"468 C\",\n    \"467 C\",\n    \"466 C\",\n    \"465 C\",\n    \"464 C\",\n    \"463 C\",\n    \"462 C\",\n    \"7506 C\",\n    \"7507 C\",\n    \"7508 C\",\n    \"7509 C\",\n    \"7510 C\",\n    \"7511 C\",\n    \"7512 C\",\n    \"719 C\",\n    \"720 C\",\n    \"721 C\",\n    \"722 C\",\n    \"723 C\",\n    \"724 C\",\n    \"725 C\",\n    \"475 C\",\n    \"474 C\",\n    \"473 C\",\n    \"472 C\",\n    \"471 C\",\n    \"470 C\",\n    \"469 C\",\n    \"726 C\",\n    \"727 C\",\n    \"728 C\",\n    \"729 C\",\n    \"730 C\",\n    \"731 C\",\n    \"732 C\",\n    \"4685 C\",\n    \"4675 C\",\n    \"4665 C\",\n    \"4655 C\",\n    \"4645 C\",\n    \"4635 C\",\n    \"4625 C\",\n    \"7513 C\",\n    \"7514 C\",\n    \"7515 C\",\n    \"7516 C\",\n    \"7517 C\",\n    \"7518 C\",\n    \"7519 C\",\n    \"4755 C\",\n    \"4745 C\",\n    \"4735 C\",\n    \"4725 C\",\n    \"4715 C\",\n    \"4705 C\",\n    \"4695 C\",\n    \"482 C\",\n    \"481 C\",\n    \"480 C\",\n    \"479 C\",\n    \"478 C\",\n    \"477 C\",\n    \"476 C\",\n    \"7527 C\",\n    \"7528 C\",\n    \"7529 C\",\n    \"7530 C\",\n    \"7531 C\",\n    \"7532 C\",\n    \"7533 C\",\n    \"7534 C\",\n    \"7535 C\",\n    \"7536 C\",\n    \"7537 C\",\n    \"7538 C\",\n    \"7539 C\",\n    \"7540 C\",\n    \"427 C\",\n    \"428 C\",\n    \"429 C\",\n    \"430 C\",\n    \"431 C\",\n    \"432 C\",\n    \"433 C\",\n    \"420 C\",\n    \"421 C\",\n    \"422 C\",\n    \"423 C\",\n    \"424 C\",\n    \"425 C\",\n    \"426 C\",\n    \"441 C\",\n    \"442 C\",\n    \"443 C\",\n    \"444 C\",\n    \"445 C\",\n    \"446 C\",\n    \"447 C\",\n    \"413 C\",\n    \"414 C\",\n    \"415 C\",\n    \"416 C\",\n    \"417 C\",\n    \"418 C\",\n    \"419 C\",\n    \"400 C\",\n    \"401 C\",\n    \"402 C\",\n    \"403 C\",\n    \"404 C\",\n    \"405 C\",\n    \"406 C\",\n    \"407 C\",\n    \"408 C\",\n    \"409 C\",\n    \"410 C\",\n    \"411 C\",\n    \"412 C\",\n    \"434 C\",\n    \"435 C\",\n    \"436 C\",\n    \"437 C\",\n    \"438 C\",\n    \"439 C\",\n    \"440 C\",\n    \"Warm Gray 1 C\",\n    \"Warm Gray 2 C\",\n    \"Warm Gray 3 C\",\n    \"Warm Gray 4 C\",\n    \"Warm Gray 5 C\",\n    \"Warm Gray 6 C\",\n    \"Warm Gray 7 C\",\n    \"Warm Gray 8 C\",\n    \"Warm Gray 9 C\",\n    \"Warm Gray 10 C\",\n    \"Warm Gray 11 C\",\n    \"Cool Gray 1 C\",\n    \"Cool Gray 2 C\",\n    \"Cool Gray 3 C\",\n    \"Cool Gray 4 C\",\n    \"Cool Gray 5 C\",\n    \"Cool Gray 6 C\",\n    \"Cool Gray 7 C\",\n    \"Cool Gray 8 C\",\n    \"Cool Gray 9 C\",\n    \"Cool Gray 10 C\",\n    \"Cool Gray 11 C\",\n    \"Black 2 C\",\n    \"Black 3 C\",\n    \"Black 4 C\",\n    \"Black 5 C\",\n    \"Black 6 C\",\n    \"Black 7 C\",\n];\n\nconst hexValues = [\n    \"FEDD00\",\n    \"FFD700\",\n    \"FE5000\",\n    \"F9423A\",\n    \"EF3340\",\n    \"CE0058\",\n    \"E10098\",\n    \"BB29BB\",\n    \"440099\",\n    \"10069F\",\n    \"001489\",\n    \"0085CA\",\n    \"00AB84\",\n    \"2D2926\",\n    \"F2F0A1\",\n    \"FCAEBB\",\n    \"F1B2DC\",\n    \"BF9BDE\",\n    \"74D1EA\",\n    \"9DE7D7\",\n    \"9E978E\",\n    \"009ACE\",\n    \"44D62C\",\n    \"FFE900\",\n    \"FFAA4D\",\n    \"FF7276\",\n    \"FF3EB5\",\n    \"EA27C2\",\n    \"84754E\",\n    \"85714D\",\n    \"866D4B\",\n    \"8B6F4E\",\n    \"87674F\",\n    \"8B634B\",\n    \"8A8D8F\",\n    \"FFD900\",\n    \"FF5E00\",\n    \"F93822\",\n    \"CE0056\",\n    \"D62598\",\n    \"4E008E\",\n    \"00239C\",\n    \"0084CA\",\n    \"00B08B\",\n    \"222223\",\n    \"F6EB61\",\n    \"F7EA48\",\n    \"FCE300\",\n    \"C5A900\",\n    \"AF9800\",\n    \"897A27\",\n    \"F5E1A4\",\n    \"ECD898\",\n    \"EED484\",\n    \"F4DA40\",\n    \"F2CD00\",\n    \"F1C400\",\n    \"CBA052\",\n    \"F9E547\",\n    \"FBE122\",\n    \"FEDB00\",\n    \"FFD100\",\n    \"DAAA00\",\n    \"AA8A00\",\n    \"9C8412\",\n    \"FAE053\",\n    \"FBDD40\",\n    \"FDDA24\",\n    \"FFCD00\",\n    \"C99700\",\n    \"AC8400\",\n    \"897322\",\n    \"F3DD6D\",\n    \"F3D54E\",\n    \"F3D03E\",\n    \"F2A900\",\n    \"CC8A00\",\n    \"A07400\",\n    \"6C571B\",\n    \"F8E08E\",\n    \"FBD872\",\n    \"FFC845\",\n    \"FFB81C\",\n    \"C69214\",\n    \"AD841F\",\n    \"886B25\",\n    \"FBDB65\",\n    \"FDD757\",\n    \"FED141\",\n    \"FFC72C\",\n    \"EAAA00\",\n    \"B58500\",\n    \"9A7611\",\n    \"FFC600\",\n    \"FFB500\",\n    \"D19000\",\n    \"B47E00\",\n    \"73531D\",\n    \"5A4522\",\n    \"4B3D2A\",\n    \"D29F13\",\n    \"B78B20\",\n    \"9F7D23\",\n    \"967126\",\n    \"8F6A2A\",\n    \"7D622E\",\n    \"6C5D34\",\n    \"FDD26E\",\n    \"FFC658\",\n    \"FFBF3F\",\n    \"FFA300\",\n    \"DE7C00\",\n    \"AF6D04\",\n    \"74531C\",\n    \"FDD086\",\n    \"FFC56E\",\n    \"FFB549\",\n    \"FF9E1B\",\n    \"D57800\",\n    \"996017\",\n    \"6E4C1E\",\n    \"F2C75C\",\n    \"F1BE48\",\n    \"F1B434\",\n    \"ED8B00\",\n    \"CF7F00\",\n    \"A76D11\",\n    \"715C2A\",\n    \"F6BE00\",\n    \"F0B323\",\n    \"FEAD77\",\n    \"E6A65D\",\n    \"D38235\",\n    \"DC8633\",\n    \"C16C18\",\n    \"BD9B60\",\n    \"D69A2D\",\n    \"DB8A06\",\n    \"CD7925\",\n    \"AD6433\",\n    \"89532F\",\n    \"775135\",\n    \"D78825\",\n    \"D3832B\",\n    \"C67D30\",\n    \"B67233\",\n    \"A7662B\",\n    \"9E6A38\",\n    \"835D32\",\n    \"FCC89B\",\n    \"FDBE87\",\n    \"FDAA63\",\n    \"F68D2E\",\n    \"EA7600\",\n    \"D45D00\",\n    \"BE4D00\",\n    \"FECB8B\",\n    \"FFC27B\",\n    \"FFB25B\",\n    \"FF8200\",\n    \"E57200\",\n    \"BE6A14\",\n    \"9B5A1A\",\n    \"EFD19F\",\n    \"EFBE7D\",\n    \"ECA154\",\n    \"E87722\",\n    \"CB6015\",\n    \"A1561C\",\n    \"603D20\",\n    \"FFAE62\",\n    \"FF8F1C\",\n    \"FF6900\",\n    \"B94700\",\n    \"94450B\",\n    \"653819\",\n    \"FFB990\",\n    \"FFA06A\",\n    \"FF7F32\",\n    \"FF6A13\",\n    \"D86018\",\n    \"A65523\",\n    \"8B4720\",\n    \"FFBE9F\",\n    \"FF9D6E\",\n    \"FF7F41\",\n    \"FF671F\",\n    \"E35205\",\n    \"BE531C\",\n    \"73381D\",\n    \"DB864E\",\n    \"E07E3C\",\n    \"DC6B2F\",\n    \"DC582A\",\n    \"C05131\",\n    \"864A33\",\n    \"674736\",\n    \"FFA38B\",\n    \"FF8D6D\",\n    \"FF6A39\",\n    \"FC4C02\",\n    \"DC4405\",\n    \"A9431E\",\n    \"833921\",\n    \"FFB3AB\",\n    \"FF8674\",\n    \"FF5C39\",\n    \"FA4616\",\n    \"CF4520\",\n    \"963821\",\n    \"6B3529\",\n    \"C4622D\",\n    \"BA5826\",\n    \"AF5C37\",\n    \"9E5330\",\n    \"924C2E\",\n    \"7B4D35\",\n    \"5C4738\",\n    \"D4B59E\",\n    \"C07D59\",\n    \"B15533\",\n    \"9D432C\",\n    \"7C3A2D\",\n    \"6B3D2E\",\n    \"5C3D31\",\n    \"D14124\",\n    \"BD472A\",\n    \"B33D26\",\n    \"8D3F2B\",\n    \"83412C\",\n    \"7B4931\",\n    \"674230\",\n    \"E4D5D3\",\n    \"E1BBB4\",\n    \"D6938A\",\n    \"C26E60\",\n    \"A4493D\",\n    \"823B34\",\n    \"683431\",\n    \"DDBCB0\",\n    \"CA9A8E\",\n    \"BC8A7E\",\n    \"A37F74\",\n    \"866761\",\n    \"6B4C4C\",\n    \"583D3E\",\n    \"EABEB0\",\n    \"C09C83\",\n    \"B46A55\",\n    \"AB5C57\",\n    \"A45248\",\n    \"9A6A4F\",\n    \"8A391B\",\n    \"ECC3B2\",\n    \"ECBAA8\",\n    \"EAA794\",\n    \"E8927C\",\n    \"DA291C\",\n    \"9A3324\",\n    \"653024\",\n    \"FFB1BB\",\n    \"FF808B\",\n    \"FF585D\",\n    \"E03C31\",\n    \"BE3A34\",\n    \"81312F\",\n    \"FFA3B5\",\n    \"FF8DA1\",\n    \"F8485E\",\n    \"EE2737\",\n    \"D22630\",\n    \"AF272F\",\n    \"7C2529\",\n    \"FCAFC0\",\n    \"FB637E\",\n    \"F4364C\",\n    \"CB333B\",\n    \"A4343A\",\n    \"643335\",\n    \"C66E4E\",\n    \"C04C36\",\n    \"B7312C\",\n    \"AB2328\",\n    \"93272C\",\n    \"8A2A2B\",\n    \"802F2D\",\n    \"E1523D\",\n    \"C63527\",\n    \"A72B2A\",\n    \"9E2A2B\",\n    \"6D3332\",\n    \"633231\",\n    \"572D2D\",\n    \"E6BAA8\",\n    \"E56A54\",\n    \"E04E39\",\n    \"CD545B\",\n    \"B04A5A\",\n    \"9B2242\",\n    \"651D32\",\n    \"FABBCB\",\n    \"FC9BB3\",\n    \"F65275\",\n    \"E4002B\",\n    \"C8102E\",\n    \"A6192E\",\n    \"76232F\",\n    \"ECC7CD\",\n    \"E89CAE\",\n    \"DF4661\",\n    \"D50032\",\n    \"BA0C2F\",\n    \"9D2235\",\n    \"862633\",\n    \"F8A3BC\",\n    \"F67599\",\n    \"EF426F\",\n    \"E40046\",\n    \"BF0D3E\",\n    \"9B2743\",\n    \"782F40\",\n    \"F5B6CD\",\n    \"F59BBB\",\n    \"EF4A81\",\n    \"E0004D\",\n    \"C5003E\",\n    \"A6093D\",\n    \"8A1538\",\n    \"F5DADF\",\n    \"F7CED7\",\n    \"F9B5C4\",\n    \"F890A5\",\n    \"EF6079\",\n    \"E03E52\",\n    \"CB2C30\",\n    \"F2D4D7\",\n    \"F4C3CC\",\n    \"F2ACB9\",\n    \"E68699\",\n    \"D25B73\",\n    \"B83A4B\",\n    \"9E2A2F\",\n    \"ECB3CB\",\n    \"E782A9\",\n    \"E0457B\",\n    \"CE0037\",\n    \"A50034\",\n    \"861F41\",\n    \"6F263D\",\n    \"F99FC9\",\n    \"F57EB6\",\n    \"F04E98\",\n    \"E31C79\",\n    \"CE0F69\",\n    \"AC145A\",\n    \"7D2248\",\n    \"F4CDD4\",\n    \"E06287\",\n    \"E24585\",\n    \"B52555\",\n    \"A4123F\",\n    \"971B2F\",\n    \"6A2C3E\",\n    \"D6C9CA\",\n    \"C4A4A7\",\n    \"C16784\",\n    \"C63663\",\n    \"BC204B\",\n    \"912F46\",\n    \"7E2D40\",\n    \"EABEDB\",\n    \"E56DB1\",\n    \"DA1884\",\n    \"A50050\",\n    \"910048\",\n    \"6C1D45\",\n    \"936D73\",\n    \"934054\",\n    \"8E2C48\",\n    \"732E4A\",\n    \"672E45\",\n    \"582D40\",\n    \"502B3A\",\n    \"EF95CF\",\n    \"EB6FBD\",\n    \"DF1995\",\n    \"D0006F\",\n    \"AA0061\",\n    \"890C58\",\n    \"672146\",\n    \"F4A6D7\",\n    \"F277C6\",\n    \"E93CAC\",\n    \"C6007E\",\n    \"A20067\",\n    \"840B55\",\n    \"EAD3E2\",\n    \"E6BCD8\",\n    \"DFA0C9\",\n    \"D986BA\",\n    \"C6579A\",\n    \"AE2573\",\n    \"960051\",\n    \"E5CEDB\",\n    \"E3C8D8\",\n    \"DEBED2\",\n    \"C996B6\",\n    \"B06C96\",\n    \"994878\",\n    \"7C2855\",\n    \"E4C6D4\",\n    \"DCB6C9\",\n    \"D0A1BA\",\n    \"BE84A3\",\n    \"A76389\",\n    \"893B67\",\n    \"612141\",\n    \"EBBECB\",\n    \"E8B3C3\",\n    \"E4A9BB\",\n    \"D592AA\",\n    \"84344E\",\n    \"6F2C3F\",\n    \"572932\",\n    \"E2BCCB\",\n    \"DCA9BF\",\n    \"C9809E\",\n    \"B55C80\",\n    \"A73A64\",\n    \"9B3259\",\n    \"872651\",\n    \"E9CDD0\",\n    \"E4BEC3\",\n    \"D7A3AB\",\n    \"C48490\",\n    \"B46B7A\",\n    \"984856\",\n    \"893C47\",\n    \"F2C6CF\",\n    \"F1BDC8\",\n    \"E9A2B2\",\n    \"DC8699\",\n    \"8F3237\",\n    \"7F3035\",\n    \"5D2A2C\",\n    \"E9C4C7\",\n    \"E5BAC1\",\n    \"DAA5AD\",\n    \"C6858F\",\n    \"7A3E3A\",\n    \"6A3735\",\n    \"512F2E\",\n    \"DFC2C3\",\n    \"DBB7BB\",\n    \"CCA1A6\",\n    \"B07C83\",\n    \"9C6169\",\n    \"874B52\",\n    \"3F2021\",\n    \"F1A7DC\",\n    \"EC86D0\",\n    \"E45DBF\",\n    \"DB3EB1\",\n    \"C5299B\",\n    \"AF1685\",\n    \"80225F\",\n    \"EFBAE1\",\n    \"E277CD\",\n    \"D539B5\",\n    \"C800A1\",\n    \"B0008E\",\n    \"9E007E\",\n    \"830065\",\n    \"EAB8E4\",\n    \"E59BDC\",\n    \"DD7FD3\",\n    \"C724B1\",\n    \"BB16A3\",\n    \"A51890\",\n    \"80276C\",\n    \"A56E87\",\n    \"A83D72\",\n    \"991E66\",\n    \"8A1B61\",\n    \"722257\",\n    \"6A2A5B\",\n    \"5E2751\",\n    \"E7BAE4\",\n    \"DD9CDF\",\n    \"C964CF\",\n    \"AD1AAC\",\n    \"981D97\",\n    \"72246C\",\n    \"EBC6DF\",\n    \"E6BEDD\",\n    \"E2ACD7\",\n    \"D48BC8\",\n    \"93328E\",\n    \"833177\",\n    \"612C51\",\n    \"EEDAEA\",\n    \"CCAED0\",\n    \"D59ED7\",\n    \"B288B9\",\n    \"A277A6\",\n    \"9F5CC0\",\n    \"963CBD\",\n    \"D7A9E3\",\n    \"C98BDB\",\n    \"AC4FC6\",\n    \"9B26B6\",\n    \"87189D\",\n    \"772583\",\n    \"653165\",\n    \"948794\",\n    \"A2789C\",\n    \"A15A95\",\n    \"8E3A80\",\n    \"6E2B62\",\n    \"6A3460\",\n    \"5D3754\",\n    \"D5C2D8\",\n    \"C9B1D0\",\n    \"BA9CC5\",\n    \"A57FB2\",\n    \"642F6C\",\n    \"59315F\",\n    \"4B3048\",\n    \"DBCDD3\",\n    \"D0BEC7\",\n    \"C6B0BC\",\n    \"AF95A6\",\n    \"86647A\",\n    \"66435A\",\n    \"4A3041\",\n    \"D8C8D1\",\n    \"D3C0CD\",\n    \"BFA5B8\",\n    \"9B7793\",\n    \"7E5475\",\n    \"693C5E\",\n    \"512A44\",\n    \"DFC8E7\",\n    \"D7B9E4\",\n    \"CAA2DD\",\n    \"B580D1\",\n    \"8031A7\",\n    \"702F8A\",\n    \"572C5F\",\n    \"D6BFDD\",\n    \"C6A1CF\",\n    \"8C4799\",\n    \"6D2077\",\n    \"642667\",\n    \"5D285F\",\n    \"51284F\",\n    \"CBA3D8\",\n    \"B884CB\",\n    \"A05EB5\",\n    \"84329B\",\n    \"702082\",\n    \"671E75\",\n    \"5F2167\",\n    \"9991A4\",\n    \"8D6E97\",\n    \"7A4183\",\n    \"6B3077\",\n    \"653279\",\n    \"5E366E\",\n    \"5C4E63\",\n    \"C1A0DA\",\n    \"A77BCA\",\n    \"8246AF\",\n    \"5C068C\",\n    \"500778\",\n    \"470A68\",\n    \"3C1053\",\n    \"D7C6E6\",\n    \"C1A7E2\",\n    \"9063CD\",\n    \"753BBD\",\n    \"5F259F\",\n    \"582C83\",\n    \"512D6D\",\n    \"C5B4E3\",\n    \"AD96DC\",\n    \"9678D3\",\n    \"7D55C7\",\n    \"330072\",\n    \"2E1A47\",\n    \"B4B5DF\",\n    \"9595D2\",\n    \"7474C1\",\n    \"24135F\",\n    \"211551\",\n    \"201747\",\n    \"221C35\",\n    \"A7A4E0\",\n    \"8B84D7\",\n    \"685BC7\",\n    \"2E008B\",\n    \"280071\",\n    \"250E62\",\n    \"201547\",\n    \"6E7CA0\",\n    \"686E9F\",\n    \"615E9B\",\n    \"565294\",\n    \"514689\",\n    \"4C4184\",\n    \"535486\",\n    \"DDDAE8\",\n    \"B6B8DC\",\n    \"A7A2C3\",\n    \"8986CA\",\n    \"5D4777\",\n    \"4B384C\",\n    \"41273B\",\n    \"878CB4\",\n    \"7C7FAB\",\n    \"7566A0\",\n    \"6F5091\",\n    \"68478D\",\n    \"563D82\",\n    \"523178\",\n    \"E5E1E6\",\n    \"E0DBE3\",\n    \"C6BCD0\",\n    \"A192B2\",\n    \"7C6992\",\n    \"614B79\",\n    \"3F2A56\",\n    \"D8D7DF\",\n    \"C6C4D2\",\n    \"B3B0C4\",\n    \"8D89A5\",\n    \"595478\",\n    \"403A60\",\n    \"1E1A34\",\n    \"C5CFDA\",\n    \"BBC7D6\",\n    \"A2B2C8\",\n    \"8E9FBC\",\n    \"1B365D\",\n    \"1F2A44\",\n    \"1C1F2A\",\n    \"D9E1E2\",\n    \"A4BCC2\",\n    \"98A4AE\",\n    \"768692\",\n    \"425563\",\n    \"253746\",\n    \"131E29\",\n    \"B9D3DC\",\n    \"A3C7D2\",\n    \"8DB9CA\",\n    \"6BA4B8\",\n    \"003D4C\",\n    \"00313C\",\n    \"072B31\",\n    \"BFCED6\",\n    \"B7C9D3\",\n    \"A6BBC8\",\n    \"7A99AC\",\n    \"5B7F95\",\n    \"4F758B\",\n    \"081F2C\",\n    \"D1DDE6\",\n    \"C6D6E3\",\n    \"9BB8D3\",\n    \"7DA1C4\",\n    \"5E8AB4\",\n    \"236192\",\n    \"002E5D\",\n    \"DBE2E9\",\n    \"CED9E5\",\n    \"A7BCD6\",\n    \"7D9BC1\",\n    \"326295\",\n    \"003A70\",\n    \"002554\",\n    \"DDE5ED\",\n    \"C8D8EB\",\n    \"B1C9E8\",\n    \"7BA4DB\",\n    \"407EC9\",\n    \"003594\",\n    \"001A70\",\n    \"BDC5DB\",\n    \"89ABE3\",\n    \"8094DD\",\n    \"7BA6DE\",\n    \"5F8FB4\",\n    \"3A5DAE\",\n    \"606EB2\",\n    \"CBD3EB\",\n    \"9FAEE5\",\n    \"485CC7\",\n    \"1E22AA\",\n    \"171C8F\",\n    \"151F6D\",\n    \"141B4D\",\n    \"B8CCEA\",\n    \"5C88DA\",\n    \"0047BB\",\n    \"06038D\",\n    \"001871\",\n    \"001E62\",\n    \"071D49\",\n    \"C3D7EE\",\n    \"A7C6ED\",\n    \"307FE2\",\n    \"001A72\",\n    \"001E60\",\n    \"13294B\",\n    \"ABCAE9\",\n    \"8BB8E8\",\n    \"418FDE\",\n    \"012169\",\n    \"00205B\",\n    \"041E42\",\n    \"92C1E9\",\n    \"6CACE4\",\n    \"0072CE\",\n    \"0033A0\",\n    \"003087\",\n    \"002D72\",\n    \"0C2340\",\n    \"94A9CB\",\n    \"6787B7\",\n    \"426DA9\",\n    \"385E9D\",\n    \"2C5697\",\n    \"1D4F91\",\n    \"1D428A\",\n    \"C6DAE7\",\n    \"BDD6E6\",\n    \"A4C8E1\",\n    \"7BAFD4\",\n    \"003C71\",\n    \"003057\",\n    \"00263A\",\n    \"B9D9EB\",\n    \"9BCBEB\",\n    \"69B3E7\",\n    \"003DA5\",\n    \"002F6C\",\n    \"002855\",\n    \"041C2C\",\n    \"8DC8E8\",\n    \"62B5E5\",\n    \"009CDE\",\n    \"0057B8\",\n    \"004C97\",\n    \"003865\",\n    \"00263E\",\n    \"71C5E8\",\n    \"41B6E6\",\n    \"00A3E0\",\n    \"005EB8\",\n    \"004B87\",\n    \"003B5C\",\n    \"002A3A\",\n    \"4698CB\",\n    \"298FC2\",\n    \"0076A8\",\n    \"006298\",\n    \"005587\",\n    \"004976\",\n    \"01426A\",\n    \"99D6EA\",\n    \"5BC2E7\",\n    \"00A9E0\",\n    \"0077C8\",\n    \"00629B\",\n    \"004F71\",\n    \"003E51\",\n    \"7BA7BC\",\n    \"6399AE\",\n    \"4E87A0\",\n    \"41748D\",\n    \"34657F\",\n    \"165C7D\",\n    \"005776\",\n    \"BBDDE6\",\n    \"71B2C9\",\n    \"4298B5\",\n    \"0086BF\",\n    \"007DBA\",\n    \"00558C\",\n    \"002B49\",\n    \"9ADBE8\",\n    \"59CBE8\",\n    \"00B5E2\",\n    \"006BA6\",\n    \"00587C\",\n    \"003B49\",\n    \"A4DBE8\",\n    \"8BD3E6\",\n    \"4EC3E0\",\n    \"00AFD7\",\n    \"0095C8\",\n    \"0082BA\",\n    \"0067A0\",\n    \"48A9C5\",\n    \"009CBD\",\n    \"0085AD\",\n    \"007096\",\n    \"006A8E\",\n    \"00617F\",\n    \"005670\",\n    \"B8DDE1\",\n    \"9BD3DD\",\n    \"77C5D5\",\n    \"3EB1C8\",\n    \"0093B2\",\n    \"007396\",\n    \"005F83\",\n    \"6AD1E3\",\n    \"05C3DE\",\n    \"00A9CE\",\n    \"0092BC\",\n    \"007FA3\",\n    \"00677F\",\n    \"004851\",\n    \"68D2DF\",\n    \"00C1D5\",\n    \"00AEC7\",\n    \"008EAA\",\n    \"00778B\",\n    \"006272\",\n    \"004F59\",\n    \"63B1BC\",\n    \"00A7B5\",\n    \"0097A9\",\n    \"00859B\",\n    \"007D8A\",\n    \"007680\",\n    \"006269\",\n    \"B1E4E3\",\n    \"88DBDF\",\n    \"2DCCD3\",\n    \"009CA6\",\n    \"008C95\",\n    \"007377\",\n    \"005F61\",\n    \"A0D1CA\",\n    \"40C1AC\",\n    \"00B0B9\",\n    \"00A3AD\",\n    \"007398\",\n    \"005F86\",\n    \"005A70\",\n    \"7EDDD3\",\n    \"5CB8B2\",\n    \"279989\",\n    \"007681\",\n    \"487A7B\",\n    \"0D5257\",\n    \"244C5A\",\n    \"B6CFD0\",\n    \"ABC7CA\",\n    \"94B7BB\",\n    \"7FA9AE\",\n    \"4F868E\",\n    \"115E67\",\n    \"07272D\",\n    \"00968F\",\n    \"00857D\",\n    \"007672\",\n    \"006D68\",\n    \"00635B\",\n    \"005E5D\",\n    \"005151\",\n    \"9CDBD9\",\n    \"64CCC9\",\n    \"00B2A9\",\n    \"008675\",\n    \"007367\",\n    \"00685E\",\n    \"00534C\",\n    \"71DBD4\",\n    \"2AD2C9\",\n    \"00BFB3\",\n    \"00A499\",\n    \"008578\",\n    \"00594F\",\n    \"004C45\",\n    \"7CE0D3\",\n    \"2CD5C4\",\n    \"00C7B1\",\n    \"00B398\",\n    \"009681\",\n    \"007864\",\n    \"004E42\",\n    \"6DCDB8\",\n    \"49C5B1\",\n    \"00AB8E\",\n    \"009B77\",\n    \"008264\",\n    \"006A52\",\n    \"034638\",\n    \"B9DCD2\",\n    \"A1D6CA\",\n    \"86C8BC\",\n    \"6BBBAE\",\n    \"006F62\",\n    \"00594C\",\n    \"1D3C34\",\n    \"B5E3D8\",\n    \"A5DFD3\",\n    \"98DBCE\",\n    \"6BCABA\",\n    \"00816D\",\n    \"006C5B\",\n    \"173F35\",\n    \"ADCAB8\",\n    \"9ABEAA\",\n    \"85B09A\",\n    \"6FA287\",\n    \"28724F\",\n    \"205C40\",\n    \"284734\",\n    \"BFCEC2\",\n    \"A7BDB1\",\n    \"92ACA0\",\n    \"7F9C90\",\n    \"5C7F71\",\n    \"43695B\",\n    \"183028\",\n    \"BAC5B9\",\n    \"B0BDB0\",\n    \"A3B2A4\",\n    \"94A596\",\n    \"708573\",\n    \"5E7461\",\n    \"22372B\",\n    \"BCC9C5\",\n    \"B1C0BC\",\n    \"9DB0AC\",\n    \"829995\",\n    \"5D7975\",\n    \"3E5D58\",\n    \"18332F\",\n    \"D1E0D7\",\n    \"B7CDC2\",\n    \"9AB9AD\",\n    \"789F90\",\n    \"507F70\",\n    \"285C4D\",\n    \"13322B\",\n    \"A7E6D7\",\n    \"8CE2D0\",\n    \"3CDBC0\",\n    \"009775\",\n    \"007B5F\",\n    \"00664F\",\n    \"8FD6BD\",\n    \"6ECEB2\",\n    \"00B388\",\n    \"00965E\",\n    \"007A53\",\n    \"006747\",\n    \"115740\",\n    \"50A684\",\n    \"00966C\",\n    \"008755\",\n    \"007B4B\",\n    \"006F44\",\n    \"006845\",\n    \"005844\",\n    \"7AE1BF\",\n    \"47D7AC\",\n    \"00C389\",\n    \"00AF66\",\n    \"007749\",\n    \"006341\",\n    \"154734\",\n    \"A0DAB3\",\n    \"91D6AC\",\n    \"71CC98\",\n    \"009A44\",\n    \"00843D\",\n    \"046A38\",\n    \"2C5234\",\n    \"A2E4B8\",\n    \"8FE2B0\",\n    \"80E0A7\",\n    \"00B140\",\n    \"009639\",\n    \"007A33\",\n    \"215732\",\n    \"9BE3BF\",\n    \"26D07C\",\n    \"00BF6F\",\n    \"00B74F\",\n    \"009F4D\",\n    \"275D38\",\n    \"00573F\",\n    \"4B9560\",\n    \"228848\",\n    \"007A3E\",\n    \"007041\",\n    \"286140\",\n    \"36573B\",\n    \"395542\",\n    \"6BA539\",\n    \"48A23F\",\n    \"319B42\",\n    \"3A913F\",\n    \"44883E\",\n    \"4A773C\",\n    \"44693D\",\n    \"ADDC91\",\n    \"A1D884\",\n    \"6CC24A\",\n    \"43B02A\",\n    \"509E2F\",\n    \"4C8C2B\",\n    \"4A7729\",\n    \"D0DEBB\",\n    \"BCE194\",\n    \"8EDD65\",\n    \"78D64B\",\n    \"74AA50\",\n    \"719949\",\n    \"79863C\",\n    \"C2E189\",\n    \"B7DD79\",\n    \"A4D65E\",\n    \"78BE20\",\n    \"64A70B\",\n    \"658D1B\",\n    \"546223\",\n    \"D4EB8E\",\n    \"CDEA80\",\n    \"C5E86C\",\n    \"97D700\",\n    \"84BD00\",\n    \"7A9A01\",\n    \"59621D\",\n    \"C4D6A4\",\n    \"BCD19B\",\n    \"B7CE95\",\n    \"A9C47F\",\n    \"789D4A\",\n    \"67823A\",\n    \"4E5B31\",\n    \"D0D1AB\",\n    \"C6C89B\",\n    \"BABD8B\",\n    \"A2A569\",\n    \"8A8D4A\",\n    \"6D712E\",\n    \"3D441E\",\n    \"D2CE9E\",\n    \"CBC793\",\n    \"C0BB87\",\n    \"AFA96E\",\n    \"A09958\",\n    \"89813D\",\n    \"555025\",\n    \"C3C6A8\",\n    \"B3B995\",\n    \"A3AA83\",\n    \"899064\",\n    \"737B4C\",\n    \"5E6738\",\n    \"3E4827\",\n    \"BFCC80\",\n    \"BBC592\",\n    \"9CAF88\",\n    \"8F993E\",\n    \"76881D\",\n    \"7A7256\",\n    \"5B6236\",\n    \"BABC16\",\n    \"ABAD23\",\n    \"999B30\",\n    \"888D30\",\n    \"7C8034\",\n    \"727337\",\n    \"656635\",\n    \"E2E868\",\n    \"DBE442\",\n    \"CEDC00\",\n    \"C4D600\",\n    \"A8AD00\",\n    \"949300\",\n    \"787121\",\n    \"E9EC6B\",\n    \"E3E935\",\n    \"E0E721\",\n    \"D0DF00\",\n    \"B5BD00\",\n    \"9A9500\",\n    \"827A04\",\n    \"E3E48D\",\n    \"E0E27C\",\n    \"DBDE70\",\n    \"D2D755\",\n    \"B7BF10\",\n    \"8E8C13\",\n    \"625D20\",\n    \"F0EC74\",\n    \"EDE939\",\n    \"ECE81A\",\n    \"E1E000\",\n    \"BFB800\",\n    \"ADA400\",\n    \"A09200\",\n    \"F3EA5D\",\n    \"F3E500\",\n    \"EFDF00\",\n    \"EEDC00\",\n    \"BBA600\",\n    \"9A8700\",\n    \"685C20\",\n    \"F1EB9C\",\n    \"F0E991\",\n    \"F0E87B\",\n    \"EDE04B\",\n    \"EADA24\",\n    \"E1CD00\",\n    \"CFB500\",\n    \"EBE49A\",\n    \"E9E186\",\n    \"E6DE77\",\n    \"E1D555\",\n    \"D7C826\",\n    \"C4B000\",\n    \"B39B00\",\n    \"E9DF97\",\n    \"E4D77E\",\n    \"DECD63\",\n    \"D9C756\",\n    \"B89D18\",\n    \"A28E2A\",\n    \"695B24\",\n    \"DCD59A\",\n    \"D6CF8D\",\n    \"D0C883\",\n    \"C0B561\",\n    \"AC9F3C\",\n    \"9F912A\",\n    \"8A7B19\",\n    \"CAB64B\",\n    \"CFB023\",\n    \"C1A01E\",\n    \"A08629\",\n    \"897630\",\n    \"736635\",\n    \"675E33\",\n    \"D4C304\",\n    \"C4B200\",\n    \"91852C\",\n    \"747136\",\n    \"5D6439\",\n    \"585C3B\",\n    \"535435\",\n    \"BBB323\",\n    \"B4A91F\",\n    \"AA9D2E\",\n    \"8F7E35\",\n    \"716135\",\n    \"635939\",\n    \"4E4934\",\n    \"D5CB9F\",\n    \"CFC493\",\n    \"C5B783\",\n    \"B3A369\",\n    \"998542\",\n    \"8C7732\",\n    \"614F25\",\n    \"CAC7A7\",\n    \"BFBB98\",\n    \"B0AA7E\",\n    \"9B945F\",\n    \"594A25\",\n    \"524727\",\n    \"4A412A\",\n    \"F1E6B2\",\n    \"DFD1A7\",\n    \"D9C89E\",\n    \"CEB888\",\n    \"A89968\",\n    \"94795D\",\n    \"816040\",\n    \"DDCBA4\",\n    \"D3BC8D\",\n    \"C6AA76\",\n    \"B9975B\",\n    \"8B5B29\",\n    \"744F28\",\n    \"5C462B\",\n    \"EFDBB2\",\n    \"FCD299\",\n    \"E1B87F\",\n    \"D6A461\",\n    \"C6893F\",\n    \"B77729\",\n    \"A6631B\",\n    \"EDC8A3\",\n    \"E7B78A\",\n    \"DDA46F\",\n    \"C88242\",\n    \"B36924\",\n    \"934D11\",\n    \"7D3F16\",\n    \"F3CFB3\",\n    \"F1C6A7\",\n    \"F0BF9B\",\n    \"E59E6D\",\n    \"B86125\",\n    \"A45A2A\",\n    \"693F23\",\n    \"E0C09F\",\n    \"D9B48F\",\n    \"CDA077\",\n    \"B58150\",\n    \"9E652E\",\n    \"774212\",\n    \"623412\",\n    \"E0C6AD\",\n    \"DCBFA6\",\n    \"CDA788\",\n    \"BF9474\",\n    \"AD7C59\",\n    \"946037\",\n    \"4F2C1D\",\n    \"E1B7A7\",\n    \"D5A286\",\n    \"C58B68\",\n    \"99552B\",\n    \"85431E\",\n    \"6D4F47\",\n    \"5E4B3C\",\n    \"D7C4B7\",\n    \"CDB5A7\",\n    \"C0A392\",\n    \"AE8A79\",\n    \"956C58\",\n    \"7C4D3A\",\n    \"5B3427\",\n    \"DBC8B6\",\n    \"D3BBA8\",\n    \"C6A992\",\n    \"AA8066\",\n    \"703F2A\",\n    \"623B2A\",\n    \"4E3629\",\n    \"D6D2C4\",\n    \"C5B9AC\",\n    \"B7A99A\",\n    \"A39382\",\n    \"7A6855\",\n    \"63513D\",\n    \"473729\",\n    \"D1CCBD\",\n    \"B7B09C\",\n    \"A69F88\",\n    \"A7ACA2\",\n    \"949A90\",\n    \"8E9089\",\n    \"4B4F54\",\n    \"D0D3D4\",\n    \"C1C6C8\",\n    \"A2AAAD\",\n    \"7C878E\",\n    \"5B6770\",\n    \"333F48\",\n    \"1D252D\",\n    \"C7C9C7\",\n    \"B2B4B2\",\n    \"9EA2A2\",\n    \"898D8D\",\n    \"707372\",\n    \"54585A\",\n    \"25282A\",\n    \"BEC6C4\",\n    \"A2ACAB\",\n    \"919D9D\",\n    \"717C7D\",\n    \"505759\",\n    \"3F4444\",\n    \"373A36\",\n    \"BABBB1\",\n    \"A8A99E\",\n    \"919388\",\n    \"7E7F74\",\n    \"65665C\",\n    \"51534A\",\n    \"212322\",\n    \"C4BFB6\",\n    \"AFA9A0\",\n    \"9D968D\",\n    \"8C857B\",\n    \"776E64\",\n    \"696158\",\n    \"C4BCB7\",\n    \"B2A8A2\",\n    \"978C87\",\n    \"857874\",\n    \"746661\",\n    \"5E514D\",\n    \"382F2D\",\n    \"D0C4C5\",\n    \"C1B2B6\",\n    \"AB989D\",\n    \"7B6469\",\n    \"584446\",\n    \"453536\",\n    \"382E2C\",\n    \"D7D2CB\",\n    \"CBC4BC\",\n    \"BFB8AF\",\n    \"B6ADA5\",\n    \"ACA39A\",\n    \"A59C94\",\n    \"968C83\",\n    \"8C8279\",\n    \"83786F\",\n    \"796E65\",\n    \"6E6259\",\n    \"D9D9D6\",\n    \"D0D0CE\",\n    \"C8C9C7\",\n    \"BBBCBC\",\n    \"B1B3B3\",\n    \"A7A8AA\",\n    \"97999B\",\n    \"888B8D\",\n    \"75787B\",\n    \"63666A\",\n    \"53565A\",\n    \"332F21\",\n    \"212721\",\n    \"31261D\",\n    \"3E2B2E\",\n    \"101820\",\n    \"3D3935\",\n];\n\nconst rgbValues = hexValues.map((h) => [\n    parseInt(h.substring(0, 2), 16),\n    parseInt(h.substring(2, 4), 16),\n    parseInt(h.substring(4, 6), 16),\n]);\n\nfunction pmsToRgb(color: string) {\n    const idx = pmsValues.indexOf(color);\n    return idx >= 0 ? hexValues[idx] : \"\";\n}\n\nfunction rgbToPms(color: string) {\n    const idx = hexValues.indexOf(color);\n    return idx >= 0 ? pmsValues[idx] : \"\";\n}\n\n/**\n * Matches an input hex code (RRGGBB) to a number of PMS values. If an exact match is found, it will always be the first value in the resulting array.\n * @param hex A string containing the hexadecimal representation of a color, presented as RRGGBB (case sensitive).\n * @param maxDistance The maximum distance the input can be from a PMS color to be considered a match.\n * @returns An array of PMS color strings.\n */\nfunction matchHexToPms(hex: string, maxDistance = 64): { pms: string; hex: string }[] {\n    const pmsColors: { pms: string; hex: string; distance: number }[] = [];\n    const distances: number[] = [];\n    const match = rgbToPms(hex);\n    if (match) {\n        pmsColors.push({\n            pms: match,\n            hex,\n            distance: 0,\n        });\n    }\n    const r = parseInt(hex.substring(0, 2), 16);\n    const g = parseInt(hex.substring(2, 4), 16);\n    const b = parseInt(hex.substring(4, 6), 16);\n    let r1: number, g1: number, b1: number;\n    for (let idx = 0; idx < hexValues.length; idx++) {\n        r1 = rgbValues[idx][0];\n        g1 = rgbValues[idx][1];\n        b1 = rgbValues[idx][2];\n        const dist = Math.sqrt(Math.pow(r - r1, 2) + Math.pow(g - g1, 2) + Math.pow(b - b1, 2));\n        distances.push(dist);\n    }\n    for (let idx = 0; idx < distances.length; idx++) {\n        if (distances[idx] <= maxDistance && !pmsColors.some((it) => it.pms === pmsValues[idx])) {\n            pmsColors.push({ pms: pmsValues[idx], hex: hexValues[idx], distance: distances[idx] });\n        }\n    }\n    return pmsColors.sort((a, b) => a.distance - b.distance);\n}\n\n// TODO: add extra keywords\nconst pmsHexData = pmsValues.map((pms, idx) => ({ pms, hex: hexValues[idx] }));\nconst fuse = new Fuse(pmsHexData, { keys: [\"pms\"] });\ntype PmsSearchResult = FuseResult<{ pms: string; hex: string }>;\n/**\n * Searches for the input string across all of the known PMS values.\n * @param input The string to find.\n * @returns An array of objects that contain information on the matched PMS values.\n */\nfunction findPmsColors(input: string, limit?: number): PmsSearchResult[] {\n    return fuse.search(input, !limit ? undefined : { limit });\n}\n\n/**\n * Converts rgba(r, g, b, a) or rgb(r, g, b) string to hex (RRGGBB).\n * Ignores alpha channel.\n */\nfunction rgbaToHex(rgba: string): string {\n    const match = rgba.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n    if (!match) {\n        return \"\";\n    }\n    const r = parseInt(match[1], 10);\n    const g = parseInt(match[2], 10);\n    const b = parseInt(match[3], 10);\n    return [r, g, b]\n        .map((x) => x.toString(16).padStart(2, \"0\"))\n        .join(\"\")\n        .toUpperCase();\n}\n\nlet colorContext: CanvasRenderingContext2D | null = null;\n/**\n * Converts an arbitrary browser color value into a hexadecimal string (RRGGBB).\n * If the provided color string is anything other than a hex code, it will use a canvas to determine the hex value.\n * @returns\n */\nfunction browserColorToHex(color: string): string {\n    if (color.startsWith(\"#\")) {\n        // Browser hex code\n        return sanitizeHexCode(color);\n    }\n    // Handle rgba/rgb directly to avoid canvas issues with alpha=0\n    if (color.startsWith(\"rgba\") || color.startsWith(\"rgb\")) {\n        const hex = rgbaToHex(color);\n        if (hex) {\n            return hex;\n        }\n    }\n\n    // If color is neither a hex code or an rgb(a) string, all we can do is try this as a final best effort.\n    if (!document) {\n        throw new Error(\"browserColorToHex is only supported on browsers\");\n    }\n    if (!colorContext) {\n        colorContext = document.createElement(\"canvas\").getContext(\"2d\");\n    }\n    if (!colorContext) {\n        throw new Error(\"Failed to create canvas context required to convert colors\");\n    }\n    colorContext.fillStyle = color;\n    // Setting fillStyle to the colorContext is expected to immediately convert it. Not tested ony anything except browsers, so marked as unsupported.\n    const sanitized = sanitizeHexCode(colorContext.fillStyle);\n    if (!sanitized) {\n        console.error(`Unknown browser color ${color}`);\n    }\n    return sanitized;\n}\n\nfunction sanitizeHexCode(hexCode: string): string {\n    const hex = hexCode.substring(1).toUpperCase();\n    if (hex.length === 6) {\n        return hex;\n    }\n    if (hex.length === 3) {\n        // hex code ABC is the same as AABBCC\n        return `${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`;\n    }\n    return \"\";\n}\n\nexport const colorDefinitionPrintValue = (colorDefinition: ColorDefinition): string => {\n    const spot = spotColorDefinitionString(colorDefinition.spotColor);\n    if (spot) {\n        return `${colorDefinition.browserValue} ${spot}`;\n    }\n    return colorDefinition.browserValue;\n};\n\nexport const spotColorDefinitionString = (spotColorDefinition?: SpotColorDefinition): string => {\n    if (!spotColorDefinition) {\n        return \"\";\n    }\n\n    if (spotColorDefinition.profileName.includes(\"/\") && spotColorDefinition.profileName.includes(\".icc\")) {\n        const profileNameStrWithoutSpaces = spotColorDefinition.profileName.replace(/\\s/g, \"-\");\n        const amountToSlice = profileNameStrWithoutSpaces.lastIndexOf(\"/\");\n        const profileNameFiltered = profileNameStrWithoutSpaces.slice(amountToSlice + 1); // Removes all characters before the last instance of /\n        const finalFilteredName = profileNameFiltered.slice(0, -4); // Removes last 4 characters in the string which is the file extension (eg .icc)\n\n        return `icc-named-color(${finalFilteredName}, ${spotColorDefinition.namedColor})`;\n    }\n\n    return `icc-named-color(${spotColorDefinition.profileName}, ${spotColorDefinition.namedColor})`;\n};\n\n/**\n * Converts a color value found in an SVG file into a color definition. This\n * logic will split out the browser value eg. \"#ffffff\" and the spot color value if available eg.\n * icc-named-color(cub, PANTONE_AAA_100_C)\n * @param value A color definition based on the data provided in the value.\n */\nexport const svgColorValueToDefinition = (value: string): ColorDefinition => {\n    const parts = value.split(/[ ](?=[^)]*?(?:\\(|$))/);\n    // When no parts exists we have an invalid value,\n    // default to black in the same way browsers would.\n    if (parts.length === 0) {\n        return { browserValue: \"#000000\" };\n    }\n    // When only one part exists, we should have been given just a browser value.\n    if (parts.length === 1) {\n        return { browserValue: parts[0] };\n    }\n    // If multiple parts exist then we have a browser value and a spot color.\n    const matchedFunctionArgs = parts[1].match(/\\(([^)]+)\\)/gm);\n    if (!matchedFunctionArgs) {\n        throw new Error(\"Unhandled state of color value in SVG\");\n    }\n    const params = matchedFunctionArgs[0].replace(/[() ]/g, \"\").split(\",\");\n    return {\n        browserValue: parts[0],\n        spotColor: { profileName: params[0], namedColor: params[1] },\n    };\n};\n\nexport { matchHexToPms, rgbToPms, pmsToRgb, browserColorToHex, rgbaToHex, findPmsColors };\nexport type { PmsSearchResult };\n","import { Declaration, parse, Rule } from \"css\";\nimport { colorDefinitionPrintValue, svgColorValueToDefinition } from \"./color\";\nimport { domParser, xmlSerializer } from \"./crossplatform\";\nimport { ColorDefinition } from \"../types\";\n\nconst fillableTagNames = [\n    \"altGlyph\",\n    \"circle\",\n    \"ellipse\",\n    \"path\",\n    \"polygon\",\n    \"polyline\",\n    \"rect\",\n    \"text\",\n    \"textPath\",\n    \"tref\",\n    \"tspan\",\n];\n\n/** These fields in an inline style should be moved to an attribute */\nconst replaceableStyleNames = [\"fill\", \"stroke\"];\n\n/*\n * Apply a function to a DOM node and all its children.\n */\nconst traverse = (node: Element, f: (node: Element) => void) => {\n    f(node);\n    if (node.children.length > 0) {\n        Array.from(node.children).forEach((child) => traverse(child, f));\n    }\n};\n\n/*\n * Succesively check a node's parents for a value, stopping when one is found or when we pass the root.\n */\nconst checkAncestors = <T>(node: Element, f: (node: Element) => undefined | T): undefined | T => {\n    const candidate = f(node);\n    if (candidate) {\n        return candidate;\n    }\n    const parent = node.parentElement;\n    if (!parent) {\n        return undefined;\n    }\n    return checkAncestors(parent, f);\n};\n\n/**\n * Whether an SVG element matches a CSS selector.\n */\nconst matchingSelector = (node: Element, selector: string): boolean => {\n    try {\n        return node.matches(selector);\n    } catch (e) {\n        // Currently the only known type of failure is if a\n        // class name contains a backtick.\n        return node.classList.contains(selector.substring(1));\n    }\n};\n\n/*\n * Prepare SVG to be embedded.\n */\nconst sanitizeSvgTree = (root: Element, preserveAspectRatio = false) => {\n    // Set this so region height and width are respected.\n    !preserveAspectRatio && root.setAttribute(\"preserveAspectRatio\", \"none\");\n\n    // Discard script tags.\n    // Convert style tags to per-element styles.\n    const rules: Rule[] = [];\n    traverse(root, (node) => {\n        if (node.tagName === \"script\") {\n            node.remove();\n            return;\n        }\n        if (node.tagName === \"style\") {\n            try {\n                const tree = parse(node.innerHTML);\n                tree.stylesheet?.rules.forEach((rule: Rule) => {\n                    rules.push(rule);\n                });\n                node.remove();\n            } catch (e) {\n                console.error(e);\n            }\n            return;\n        }\n        const nodeStyle = node.attributes.getNamedItem(\"style\")?.value?.trim();\n        if (nodeStyle) {\n            const styles: string[] = [];\n            const styleStrings = nodeStyle.split(\";\");\n            styleStrings.forEach((style) => {\n                const trimmed = style.trim();\n                if (trimmed) {\n                    const [field, value] = trimmed.split(\":\");\n                    const fieldDowncased = field.toLowerCase();\n                    const idx = replaceableStyleNames.indexOf(fieldDowncased);\n                    if (idx > -1) {\n                        node.setAttribute(fieldDowncased, value.trim());\n                    } else {\n                        styles.push(trimmed);\n                    }\n                }\n            });\n            if (styles.length > 0) {\n                node.setAttribute(\"style\", styles.join(\";\"));\n            } else {\n                node.removeAttribute(\"style\");\n            }\n        }\n    });\n    traverse(root, (node) => {\n        rules.forEach((rule) => {\n            rule.selectors?.forEach((selector) => {\n                if (matchingSelector(node, selector)) {\n                    rule.declarations?.forEach((decl: Declaration) => {\n                        if (decl.property && decl.value) {\n                            node.setAttribute(decl.property, decl.value);\n                        }\n                    });\n                }\n            });\n        });\n    });\n};\n\n/*\n * SVG files shouldn't contain a width and height. Only a viewbox.\n * The platform handles width and height independant.\n */\nconst sanitizeSVGDimensions = (root: Element) => {\n    const nonPixelUnitsRegex = /pt|pc|mm|cm|in/gm;\n    const viewBox = root.getAttribute(\"viewBox\");\n    const width = root.getAttribute(\"width\");\n    const height = root.getAttribute(\"height\");\n    if (!viewBox) throw new Error(\"viewBox not specified on SVG!\");\n    if (width) root.setAttribute(\"width\", width.replace(nonPixelUnitsRegex, \"\"));\n    if (height) root.setAttribute(\"height\", height.replace(nonPixelUnitsRegex, \"\"));\n};\n\nconst svgStringToElement = (svg: string): Element | null => {\n    const parser = domParser();\n    const parsedSvg = parser.parseFromString(svg, \"image/svg+xml\");\n    return parsedSvg.firstElementChild;\n};\n\nconst setSvgDimensions = (svgRoot: Element, width: number, height: number) => {\n    svgRoot.setAttribute(\"height\", `${height}px`);\n    svgRoot.setAttribute(\"width\", `${width}px`);\n};\n\nconst setSvgColors = (svgRoot: Element, colors: { [key: string]: ColorDefinition }, includeSpotColors?: boolean) => {\n    traverse(svgRoot, (node) => {\n        // Handle fills set directly on elements.\n        const fill = node.attributes.getNamedItem(\"fill\");\n        if (fill && fill.value !== \"none\") {\n            node.classList.forEach((className) => {\n                if (className.startsWith(\"spiff-fill\")) {\n                    const color = colors[className.replace(\"spiff-fill-\", \"\")];\n                    if (color) {\n                        node.setAttribute(\n                            \"fill\",\n                            includeSpotColors ? colorDefinitionPrintValue(color) : color.browserValue,\n                        );\n                    } else {\n                        // legacy\n                        const color = colors[className];\n                        if (color) {\n                            node.setAttribute(\n                                \"fill\",\n                                includeSpotColors ? colorDefinitionPrintValue(color) : color.browserValue,\n                            );\n                        }\n                    }\n                }\n            });\n        }\n        const stroke = node.attributes.getNamedItem(\"stroke\");\n        if (stroke && stroke.value !== \"none\") {\n            node.classList.forEach((className) => {\n                if (className.startsWith(\"spiff-stroke\")) {\n                    const color = colors[className.replace(\"spiff-stroke-\", \"\")];\n                    if (color) {\n                        node.setAttribute(\n                            \"stroke\",\n                            includeSpotColors ? colorDefinitionPrintValue(color) : color.browserValue,\n                        );\n                    } else {\n                        // legacy\n                        const color = colors[className];\n                        if (color) {\n                            node.setAttribute(\n                                \"fill\", // Should this be \"stroke\"? Is this code still relevant anyway?\n                                includeSpotColors ? colorDefinitionPrintValue(color) : color.browserValue,\n                            );\n                        }\n                    }\n                }\n            });\n        }\n    });\n};\n\nconst svgElementToString = (svgRoot: Element): string => {\n    const serialiser = xmlSerializer();\n    return serialiser.serializeToString(svgRoot);\n};\n\nconst modifySVGWithElementProperties = (\n    svg: string,\n    width: number,\n    height: number,\n    colors: { [key: string]: ColorDefinition },\n    includeSpotColors?: boolean,\n): string => {\n    const svgRoot = svgStringToElement(svg);\n    if (!svgRoot) {\n        throw new Error(\"Failed to read SVG.\");\n    }\n    setSvgDimensions(svgRoot, width, height);\n    setSvgColors(svgRoot, colors, includeSpotColors);\n    return svgElementToString(svgRoot);\n};\n\nconst modifySVGColors = (\n    svg: string,\n    colors: { [key: string]: ColorDefinition },\n    includeSpotColors?: boolean,\n): string => {\n    const svgRoot = svgStringToElement(svg);\n    if (!svgRoot) {\n        throw new Error(\"Failed to read SVG.\");\n    }\n    setSvgColors(svgRoot, colors, includeSpotColors);\n    return svgElementToString(svgRoot);\n};\n\nconst parseSvg = (svgBody: string): any => {\n    // Get the raw SVG without a doctype.\n    const svgRegex = /<svg.*<\\/svg>/s;\n    const svgMatches = svgBody.match(svgRegex) || [];\n    const svg = svgMatches?.length > 0 ? svgMatches[0] : \"\";\n\n    // Parse the SVG into a tree.\n    const parser = domParser();\n    return parser.parseFromString(svg, \"image/svg+xml\");\n};\n\nconst generateSVGWithUnknownColors = async (\n    svgBody: string,\n): Promise<{ svg: string; colors: { [key: string]: ColorDefinition } }> => {\n    const parsedSvg = parseSvg(svgBody);\n    const root = parsedSvg.firstElementChild;\n    if (!root) {\n        throw new Error(\"Failed to read SVG.\");\n    }\n\n    sanitizeSvgTree(root);\n\n    // Annotate elements which have fills with a new class name.\n    const colors: { [key: string]: ColorDefinition } = {};\n    traverse(root, (node) => {\n        // A fillable element's fill is:\n        // * The fill in its style; otherwise\n        // * The fill in its fill attribute; otherwise\n        // * The fill of its closest ancestor (style takes priority over attribute); otherwise\n        // * Black (none of its ancestors have an explicit fill).\n        // Historically we have not cared about the first case, but for the third case the\n        // code for attaching explicit fills to elements without explicit fills needs to\n        // successively check its ancestors.\n\n        if (fillableTagNames.includes(node.tagName) && !node.attributes.getNamedItem(\"fill\")) {\n            let fill = \"black\";\n            const parent = node.parentElement;\n            if (parent) {\n                const ancestorFill = checkAncestors(parent, (node: Element) => {\n                    const inlineStyles = (node as SVGElement).style;\n                    const inlineFill = inlineStyles.fill;\n                    if (inlineFill) {\n                        return inlineFill;\n                    }\n                    const attribute = node.getAttribute(\"fill\");\n                    if (attribute) {\n                        return attribute;\n                    }\n                    return undefined;\n                });\n                if (ancestorFill) {\n                    fill = ancestorFill;\n                }\n            }\n            node.setAttribute(\"fill\", fill);\n        }\n\n        const fill = node.attributes.getNamedItem(\"fill\");\n        if (fill && fill.value !== \"none\" && !fill.value.startsWith(\"url(\")) {\n            const fillValue = svgColorValueToDefinition(fill.value);\n            const alphanumericFill = fillValue.browserValue.replace(/\\W/g, \"\");\n            const className = `spiff-fill-${alphanumericFill}`;\n            node.setAttribute(\"fill\", fillValue.browserValue);\n            node.classList.add(className);\n            colors[alphanumericFill] = fillValue;\n        }\n        const stroke = node.attributes.getNamedItem(\"stroke\");\n        if (stroke && stroke.value !== \"none\" && !stroke.value.startsWith(\"url(\")) {\n            const strokeValue = svgColorValueToDefinition(stroke.value);\n            const alphanumericFill = strokeValue.browserValue.replace(/\\W/g, \"\");\n            const className = `spiff-stroke-${alphanumericFill}`;\n            node.classList.add(className);\n            node.setAttribute(\"stroke\", strokeValue.browserValue);\n            colors[alphanumericFill] = strokeValue;\n        }\n    });\n\n    const serialiser = xmlSerializer();\n    const rebuiltSvg = serialiser.serializeToString(root);\n\n    return {\n        colors,\n        svg: rebuiltSvg,\n    };\n};\n\nexport {\n    sanitizeSvgTree,\n    sanitizeSVGDimensions,\n    traverse,\n    modifySVGWithElementProperties,\n    modifySVGColors,\n    generateSVGWithUnknownColors,\n};\n","import { gql } from \"@apollo/client/core\";\nimport { Asset, AssetType, FileInfo, MaterialResource } from \"../types\";\nimport { ParseError, UnhandledBehaviorError } from \"../util/exception\";\nimport { persistenceService } from \"./persistence\";\nimport { graphQlManager } from \"./server\";\nimport { getAttributesFromArrayBuffer } from \"../util/image\";\nimport { sanitizeSVGDimensions } from \"../util/illustration\";\nimport { xmlSerializer } from \"../util/crossplatform\";\n\ninterface AssetCreation {\n    asset: Asset;\n    uploadUrl: string;\n}\n\ninterface AssetCreationInfo {\n    assetResponse: AssetCreation;\n    mimeType: string;\n}\n\nconst assetMetadataFragment = gql`\n    fragment AssetMetadataFields on Asset {\n        metadata {\n            key\n            value\n        }\n    }\n`;\n\nconst assetVersionsFragment = gql`\n    fragment AssetVersionsFields on Asset {\n        versions {\n            name\n            link\n        }\n    }\n`;\n\nexport const assetFragment = (includeMetadata: boolean, includeVersions: boolean) => {\n    return gql`\n        ${(includeMetadata && assetMetadataFragment) || \"\"}\n        ${(includeVersions && assetVersionsFragment) || \"\"}\n        fragment AssetFields on Asset {\n            name\n            key\n            type\n            createdAt\n            mimeType\n            fileLink\n            assetConfiguration {\n                assetKey\n                colorOption {\n                    id\n                    name\n                    variants {\n                        id\n                        name\n                        enabled\n                        namedColor\n                        color\n                    }\n                }\n                channelNumbers {\n                    id\n                    number\n                }\n                defaultColorVariants {\n                    channelNumber\n                    variant {\n                        id\n                        name\n                        enabled\n                        namedColor\n                        color\n                    }\n                }\n            }\n            ${(includeVersions && \"...AssetVersionsFields\") || \"\"}\n            ${(includeMetadata && \"...AssetMetadataFields\") || \"\"}\n           \n        }\n    `;\n};\n\nexport const materialFragment = gql`\n    fragment MaterialFields on Material {\n        id\n        name\n        createdAt\n        clearCoat\n        clearCoatIor\n        refractionIntensity\n        reflectionIntensity\n        reflectionRotation\n        albedoMap {\n            key\n            fileLink\n        }\n        alphaMap {\n            key\n            fileLink\n        }\n        ambientMap {\n            key\n            fileLink\n        }\n        emissionMap {\n            key\n            fileLink\n        }\n        metallicMap {\n            key\n            fileLink\n        }\n        normalMap {\n            key\n            fileLink\n        }\n        refractionMap {\n            key\n            fileLink\n        }\n        reflectionMap {\n            key\n            fileLink\n        }\n        roughnessMap {\n            key\n            fileLink\n        }\n    }\n`;\n\nconst getMaterialsQuery = gql`\n    ${materialFragment}\n    query GetMaterials($ids: [String]) {\n        materials(id: $ids) {\n            ...MaterialFields\n        }\n    }\n`;\n\nconst createAssetMutation = gql`\n    mutation CreateAsset($name: String!, $type: String!, $mimeType: String!, $anonymous: Boolean, $temporary: Boolean) {\n        assetCreate(name: $name, type: $type, mimeType: $mimeType, anonymous: $anonymous, temporary: $temporary) {\n            uploadUrl\n            asset {\n                name\n                key\n                type\n                createdAt\n                mimeType\n                fileLink\n            }\n        }\n    }\n`;\n\nconst removeBackgroundFromAssetMutation = gql`\n    ${assetFragment(false, false)}\n    mutation RemoveBackgroundFromAsset($key: String!) {\n        assetRemoveBackground(key: $key) {\n            ...AssetFields\n        }\n    }\n`;\n\nconst vectorizeAssetMutation = gql`\n    ${assetFragment(false, false)}\n    mutation VectorizeAsset($key: String!, $options: AssetVectorizeOptions) {\n        assetVectorize(key: $key, options: $options) {\n            ...AssetFields\n        }\n    }\n`;\n\nconst enhanceWithAIMutation = gql`\n    ${assetFragment(false, false)}\n    mutation EnhanceWithAI($key: String!, $options: AssetEnhanceOptions) {\n        assetEnhanceWithAI(key: $key, options: $options) {\n            ...AssetFields\n        }\n    }\n`;\n\nexport const getAssets = async (assetKeys: string[], includeVersions: boolean = true): Promise<Asset[]> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{ assets: Asset[] }>({\n        query: gql`\n            ${assetFragment(false, includeVersions)}\n            query GetAssets($keys: [String]!) {\n                assets(keys: $keys) {\n                    ...AssetFields\n                }\n            }\n        `,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            keys: assetKeys,\n        },\n    });\n    return response.data.assets;\n};\n\nconst getMaterials = async (ids: string[]): Promise<MaterialResource[]> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{ materials: MaterialResource[] }>({\n        query: getMaterialsQuery,\n        errorPolicy: \"all\",\n        variables: {\n            ids,\n        },\n    });\n    return response.data.materials;\n};\n\nconst createAsset = async (\n    name: string,\n    type: string,\n    mimeType: string,\n    anonymous?: boolean,\n    temporary?: boolean,\n): Promise<undefined | AssetCreation> => {\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{ assetCreate: AssetCreation }>({\n        mutation: createAssetMutation,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            name,\n            type,\n            mimeType,\n            anonymous,\n            temporary,\n        },\n    });\n    return response.data?.assetCreate;\n};\n\n/**\n * An asset manager provides a way to create and\n * manage assets on the Spiff Commerce Platform.\n */\nexport interface AssetManager {\n    /**\n     * Uploads a file to the Spiff Commerce Platform.\n     */\n    uploadFile: (file: File, onProgress: (val: number) => void) => Promise<Asset>;\n\n    /**\n     * From an existing asset, generates a new asset that has the background replaced with transparency.\n     * This process is idempotent, i.e. it will only run once for a given asset.\n     * @param asset The existing asset to remove the background from.\n     * @returns A promise that resolves with a new asset.\n     */\n    removeBackgroundFromAsset(asset: Asset): Promise<Asset>;\n}\n\nclass AssetService implements AssetManager {\n    private cache = new Map<string, Promise<Asset>>();\n    /**\n     * Promise cache for BG removal processes. Values only present while process is active.\n     * Use BGRMStorage and the regular asset promise cache to cache the actual objects.\n     */\n    private bgrmProcessCache = new Map<string, Promise<Asset>>();\n    private materialCache = new Map<string, Promise<MaterialResource>>();\n\n    /**\n     * Allows for retrieving an asset, returns the option from a cache if possible.\n     */\n    async getLocalOrFromServer(assetKey: string): Promise<Asset> {\n        if (this.cache.has(assetKey)) {\n            const asset = this.cache.get(assetKey);\n            if (!asset) throw new UnhandledBehaviorError(\"Failed to get asset from cache!\");\n            return asset;\n        }\n        const assetResolver = async () => {\n            const asset = (await getAssets([assetKey]))[0];\n            return asset;\n        };\n        const resolver = assetResolver();\n        this.cache.set(assetKey, resolver);\n        return resolver;\n    }\n\n    /**\n     * Retrieves the asset from the server, bypassing cache (but still writing the result to cache)\n     */\n    async getFromServer(assetKey: string): Promise<Asset> {\n        const assetResolver = async () => {\n            const asset = (await getAssets([assetKey]))[0];\n            return asset;\n        };\n        const resolver = assetResolver();\n        this.cache.set(assetKey, resolver);\n        return resolver;\n    }\n\n    keyFromURL(url: string): string | undefined {\n        let key: string | undefined = undefined;\n        try {\n            key = new URL(url).pathname;\n        } catch (e) {\n            key = undefined;\n        }\n        if (key !== undefined && key.startsWith(\"/\")) {\n            key = key.replace(\"/\", \"\");\n        }\n        return key?.split(\"?\")[0];\n    }\n\n    /**\n     * Caches an asset if it doesn't already exist.\n     */\n    cacheAsset(asset: Asset) {\n        if (!asset.key) throw new UnhandledBehaviorError(\"Asset has no key!\");\n        if (this.cache.has(asset.key)) {\n            return;\n        }\n        this.cache.set(asset.key, Promise.resolve(asset));\n    }\n\n    /**\n     * Caches a material if it doesn't already exist.\n     */\n    cacheMaterial(material: MaterialResource) {\n        if (!material.id) throw new UnhandledBehaviorError(\"Material has no id!\");\n        if (this.materialCache.has(material.id)) {\n            return;\n        }\n        this.materialCache.set(material.id, Promise.resolve(material));\n    }\n\n    /**\n     * Allows for retrieving a material, returns the option from a cache if possible.\n     * @param id The option ID to be retrieved.\n     */\n    async getMaterialLocalOrFromServer(id: string): Promise<MaterialResource> {\n        if (this.materialCache.has(id)) {\n            return this.materialCache.get(id)!;\n        }\n        const materialResolver = async () => {\n            const material = (await getMaterials([id]))[0];\n            return material;\n        };\n        const resolver = materialResolver();\n        this.materialCache.set(id, resolver);\n        return resolver;\n    }\n\n    /**\n     * Upload a user asset to the server. Using callbacks to notify important events.\n     * The asset will be stored via the persistence service for future access, if available.\n     */\n    async uploadAssetWithProgress(\n        file: FileInfo,\n        assetType: AssetType,\n        onProgress: (val: number) => void,\n        anonymous?: boolean,\n        temporary?: boolean,\n    ): Promise<Asset> {\n        // We request the server to create a new asset entity.\n        const creationResponse = await this.dispatchCreateAssetRequest(file, assetType, anonymous, temporary);\n        if (!creationResponse) {\n            throw new Error(\"Failed to create asset.\");\n        }\n\n        // Organise a request & set up header and associated authentication. We use the provided\n        // presigned URL to upload the users asset data to the server. The asset isn't valid until this is done.\n        await new Promise<Asset>((resolve, reject) => {\n            const req = new XMLHttpRequest();\n            req.open(\"PUT\", creationResponse.assetResponse.uploadUrl, true);\n            req.setRequestHeader(\"Content-Type\", creationResponse.mimeType);\n            req.setRequestHeader(\"Cache-Control\", \"public,max-age=31536000,immutable\");\n            req.upload.onprogress = (event) => {\n                if (event.lengthComputable) {\n                    onProgress((event.loaded * 100) / event.total);\n                }\n            };\n            req.onload = () => {\n                const responseData = creationResponse.assetResponse.asset;\n                AssetStorage.add(creationResponse.assetResponse.asset);\n                resolve(responseData);\n            };\n            req.onerror = reject;\n            this.postProcessFileUpload(file, creationResponse.mimeType)\n                .then((processedInfo) => req.send(processedInfo.blob))\n                .catch(reject);\n        });\n        this.cacheAsset(creationResponse.assetResponse.asset);\n        return creationResponse.assetResponse.asset;\n    }\n\n    async uploadAsset(file: FileInfo, assetType: AssetType, anonymous?: boolean, temporary?: boolean): Promise<Asset> {\n        return this.uploadAssetWithProgress(file, assetType, () => {}, anonymous, temporary);\n    }\n\n    async uploadFile(file: File, onProgress: (val: number) => void): Promise<Asset> {\n        const isRaster = this.isRaster(file);\n        const assetType = !isRaster ? AssetType.Illustration : AssetType.Image;\n        const fileInfo = await this.loadImageAsFileInfo(file);\n        return await this.uploadAssetWithProgress(fileInfo, assetType, onProgress, true);\n    }\n\n    async removeBackgroundFromAsset(asset: Asset): Promise<Asset> {\n        const originalKey = asset.key!;\n        if (this.bgrmProcessCache.has(originalKey)) {\n            return this.bgrmProcessCache.get(originalKey)!;\n        }\n        if (AssetTransformationStorage.has(BGRM_ASSET_PERSISTENCE_KEY, originalKey)) {\n            const promise = this.getLocalOrFromServer(\n                AssetTransformationStorage.get(BGRM_ASSET_PERSISTENCE_KEY, originalKey)!,\n            );\n            this.bgrmProcessCache.set(originalKey, promise);\n            return promise;\n        }\n        const processFunc = async (): Promise<Asset> => {\n            const removeResponse = await graphQlManager\n                .getShadowGraphqlClient()\n                .mutate<{ assetRemoveBackground: Asset }>({\n                    mutation: removeBackgroundFromAssetMutation,\n                    fetchPolicy: \"no-cache\",\n                    errorPolicy: \"all\",\n                    variables: {\n                        key: originalKey,\n                    },\n                });\n            this.bgrmProcessCache.delete(originalKey);\n            console.log(removeResponse);\n            if (!removeResponse.data?.assetRemoveBackground?.key) {\n                throw new Error(\"Failed to remove background from image\");\n            }\n            AssetStorage.add(removeResponse.data.assetRemoveBackground);\n            AssetTransformationStorage.add(\n                BGRM_ASSET_PERSISTENCE_KEY,\n                originalKey,\n                removeResponse.data.assetRemoveBackground.key!,\n            );\n            this.cache.set(\n                removeResponse.data.assetRemoveBackground.key!,\n                Promise.resolve(removeResponse.data.assetRemoveBackground),\n            );\n            return removeResponse.data.assetRemoveBackground;\n        };\n        const promise = processFunc();\n        this.bgrmProcessCache.set(originalKey, promise);\n        return promise;\n    }\n\n    async vectorizeAsset(asset: Asset, maxColors: number | undefined = undefined): Promise<Asset> {\n        const originalKey = asset.key!;\n        if (this.bgrmProcessCache.has(originalKey)) {\n            return this.bgrmProcessCache.get(originalKey)!;\n        }\n        if (AssetTransformationStorage.has(VECTORIZE_ASSET_PERSISTENCE_KEY, originalKey)) {\n            const promise = this.getLocalOrFromServer(\n                AssetTransformationStorage.get(VECTORIZE_ASSET_PERSISTENCE_KEY, originalKey)!,\n            );\n            this.bgrmProcessCache.set(originalKey, promise);\n            return promise;\n        }\n        const processFunc = async (): Promise<Asset> => {\n            const vectorizeResponse = await graphQlManager.getShadowGraphqlClient().mutate<{ assetVectorize: Asset }>({\n                mutation: vectorizeAssetMutation,\n                fetchPolicy: \"no-cache\",\n                errorPolicy: \"all\",\n                variables: {\n                    key: originalKey,\n                    options: {\n                        maxColorCount: maxColors,\n                    },\n                },\n            });\n            this.bgrmProcessCache.delete(originalKey);\n            if (!vectorizeResponse.data?.assetVectorize?.key) {\n                throw new Error(\"Failed to vectorize image\");\n            }\n            AssetStorage.add(vectorizeResponse.data.assetVectorize);\n            AssetTransformationStorage.add(\n                VECTORIZE_ASSET_PERSISTENCE_KEY,\n                originalKey,\n                vectorizeResponse.data.assetVectorize.key!,\n            );\n            this.cache.set(\n                vectorizeResponse.data.assetVectorize.key!,\n                Promise.resolve(vectorizeResponse.data.assetVectorize),\n            );\n            return vectorizeResponse.data.assetVectorize;\n        };\n        const promise = processFunc();\n        this.bgrmProcessCache.set(originalKey, promise);\n        return promise;\n    }\n\n    async enhanceWithAI(\n        asset: Asset,\n        options?: {\n            additionalInstructions?: string;\n            quality?: string;\n            targetWidth?: number;\n            targetHeight?: number;\n            seed?: number;\n            cfgScale?: number;\n            negativePrompt?: string;\n        },\n    ): Promise<Asset> {\n        const originalKey = asset.key!;\n        if (this.bgrmProcessCache.has(originalKey)) {\n            return this.bgrmProcessCache.get(originalKey)!;\n        }\n        if (AssetTransformationStorage.has(ENHANCE_AI_ASSET_PERSISTENCE_KEY, originalKey)) {\n            const promise = this.getLocalOrFromServer(\n                AssetTransformationStorage.get(ENHANCE_AI_ASSET_PERSISTENCE_KEY, originalKey)!,\n            );\n            this.bgrmProcessCache.set(originalKey, promise);\n            return promise;\n        }\n        const processFunc = async (): Promise<Asset> => {\n            const enhanceResponse = await graphQlManager\n                .getShadowGraphqlClient()\n                .mutate<{ assetEnhanceWithAI: Asset }>({\n                    mutation: enhanceWithAIMutation,\n                    fetchPolicy: \"no-cache\",\n                    errorPolicy: \"all\",\n                    variables: {\n                        key: originalKey,\n                        options: options || {},\n                    },\n                });\n            this.bgrmProcessCache.delete(originalKey);\n            if (!enhanceResponse.data?.assetEnhanceWithAI?.key) {\n                throw new Error(\"Failed to enhance image with AI\");\n            }\n            AssetStorage.add(enhanceResponse.data.assetEnhanceWithAI);\n            AssetTransformationStorage.add(\n                ENHANCE_AI_ASSET_PERSISTENCE_KEY,\n                originalKey,\n                enhanceResponse.data.assetEnhanceWithAI.key!,\n            );\n            this.cache.set(\n                enhanceResponse.data.assetEnhanceWithAI.key!,\n                Promise.resolve(enhanceResponse.data.assetEnhanceWithAI),\n            );\n            return enhanceResponse.data.assetEnhanceWithAI;\n        };\n        const promise = processFunc();\n        this.bgrmProcessCache.set(originalKey, promise);\n        return promise;\n    }\n\n    removePersistedAsset(assetKey: string) {\n        AssetStorage.remove(assetKey);\n        AssetTransformationStorage.delete(BGRM_ASSET_PERSISTENCE_KEY, assetKey);\n        AssetTransformationStorage.delete(VECTORIZE_ASSET_PERSISTENCE_KEY, assetKey);\n        AssetTransformationStorage.delete(ENHANCE_AI_ASSET_PERSISTENCE_KEY, assetKey);\n        AssetTransformationStorage.deleteForTransformedKey(BGRM_ASSET_PERSISTENCE_KEY, assetKey);\n        AssetTransformationStorage.deleteForTransformedKey(VECTORIZE_ASSET_PERSISTENCE_KEY, assetKey);\n        AssetTransformationStorage.deleteForTransformedKey(ENHANCE_AI_ASSET_PERSISTENCE_KEY, assetKey);\n    }\n\n    getPersistedAssets(): PersistedAsset[] {\n        return AssetStorage.list();\n    }\n\n    registerPersistedAssetListener(callback: () => void) {\n        AssetStorage.addCallback(callback);\n    }\n\n    unRegisterPersistedAssetListener(callback: () => void) {\n        AssetStorage.removeCallback(callback);\n    }\n\n    /**\n     * Convert a File object for an image into a FileInfo.\n     */\n    loadImageAsFileInfo = async (file: File): Promise<FileInfo> => {\n        // Rasters are slightly more involved.\n        const arrayBuffer = await file.arrayBuffer();\n        const attributes = await getAttributesFromArrayBuffer(arrayBuffer);\n        const dataUrlToBlob = (dataUrl: string, type: string) => {\n            const binary = atob(dataUrl.split(\",\")[1]);\n            const array: number[] = [];\n            for (let i = 0; i < binary.length; i++) {\n                array.push(binary.charCodeAt(i));\n            }\n            return new Blob([new Uint8Array(array)], { type });\n        };\n        return {\n            name: file.name.substring(file.name.lastIndexOf(\"/\") + 1),\n            blob: dataUrlToBlob(attributes.dataUrl, file.type),\n        };\n    };\n\n    private isRaster(file: File): boolean {\n        return !(\n            file.type === \"image/svg+xml\" ||\n            file.type === \"application/pdf\" ||\n            file.type === \"application/postscript\"\n        );\n    }\n\n    private async postProcessFileUpload(file: FileInfo, type: string) {\n        if (type === \"image/svg+xml\") {\n            const text = await file.blob.text();\n            const parser = new window.DOMParser();\n            const svgDom = parser.parseFromString(text, \"image/svg+xml\");\n            const root = svgDom.documentElement;\n            if (!root) throw new ParseError(\"Failed to read SVG.\");\n            sanitizeSVGDimensions(root);\n            const serialiser = xmlSerializer();\n            const rebuiltSvg = serialiser.serializeToString(root);\n            return {\n                name: file.name,\n                blob: new Blob([rebuiltSvg], { type: \"image/svg+xml\" }),\n            };\n        }\n        return file;\n    }\n\n    /**\n     * Handles mimeType resolution & asset creation request\n     * @param file A file info object containing data about the file and its name\n     * @param assetType The type of asset we're expecting to upload\n     */\n    private async dispatchCreateAssetRequest(\n        file: FileInfo,\n        assetType: AssetType,\n        anonymous?: boolean,\n        temporary?: boolean,\n    ): Promise<undefined | AssetCreationInfo> {\n        // Send a request for asset creation to server\n        // We get a presigned upload URL back\n        const mimeType = file.blob.type ? file.blob.type : this.guessMIME(file.name);\n        const assetResponse = await createAsset(file.name, assetType, mimeType, anonymous, temporary);\n        if (!assetResponse) {\n            return undefined;\n        }\n\n        return {\n            assetResponse,\n            mimeType,\n        };\n    }\n\n    private guessMIME(ext: string): string {\n        const extension = ext.split(\".\").pop();\n        switch (extension) {\n            case \"glb\":\n                return \"model/gltf-binary\";\n            case \"ttf\":\n                return \"font/ttf\";\n            case \"mkv\":\n                return \"video/x-matroska\";\n            default:\n                throw new UnhandledBehaviorError(\"Unexpected mimetype: \" + extension);\n        }\n    }\n}\n\ninterface PersistedAsset {\n    assetKey: string;\n    src: string;\n}\n\nconst ASSET_PERSISTENCE_KEY = \"persistentAssets\";\n/**\n * Some bundled functionality for dealing with assets in persistence.\n */\nclass AssetStorage {\n    private static callbacks: (() => void)[] = [];\n\n    /**\n     * Add a new asset to persistence\n     * @param asset The asset to add.\n     */\n    static add(asset: Asset) {\n        if (!asset.fileLink) {\n            console.error(\"Failed to find cdn link on asset, cannot persist!\");\n            return;\n        }\n        // Create a new map to store data\n        const newPersistentAssetsMap = new Map<string, string>();\n        newPersistentAssetsMap.set(asset.key || \"\", asset.fileLink);\n        // Merge existing keys if available, into the new map.\n        const oldPersistentAssets = persistenceService.getMap(ASSET_PERSISTENCE_KEY);\n        if (oldPersistentAssets) {\n            oldPersistentAssets.forEach((value, key) => {\n                newPersistentAssetsMap.set(key, value);\n            });\n        }\n        // Save the new map with all keys.\n        persistenceService.setMap(ASSET_PERSISTENCE_KEY, newPersistentAssetsMap);\n        AssetStorage.executeCallbacks();\n    }\n    /**\n     * Remove an existing asset from persistence. Noop if the asset doesn't exist.\n     * @param assetKey The key to remove.\n     */\n    static remove(assetKey: string) {\n        const uploadedAssetsMap = persistenceService.getMap(ASSET_PERSISTENCE_KEY);\n        if (!uploadedAssetsMap) return;\n        const entryToRemove = Array.from(uploadedAssetsMap.entries()).find((m) => m[0] === assetKey);\n        if (!entryToRemove) return;\n        uploadedAssetsMap.delete(entryToRemove[0]);\n        persistenceService.setMap(ASSET_PERSISTENCE_KEY, uploadedAssetsMap);\n        AssetStorage.executeCallbacks();\n    }\n    /**\n     * Get a list of all persisted assets.\n     */\n    static list(): PersistedAsset[] {\n        const uploadedAssetsMap = persistenceService.getMap(ASSET_PERSISTENCE_KEY);\n        if (!uploadedAssetsMap) return [];\n        return Array.from(uploadedAssetsMap.entries()).map((m) => ({ assetKey: m[0], src: m[1] }));\n    }\n    /**\n     * Adds a callback that will be called whenever assets are added/removed from persistence.\n     */\n    static addCallback(callback: () => void) {\n        AssetStorage.callbacks.push(callback);\n    }\n    /**\n     * Removes an existing callback.\n     */\n    static removeCallback(callback: () => void) {\n        AssetStorage.callbacks = AssetStorage.callbacks.filter((cb) => cb !== callback);\n    }\n\n    private static executeCallbacks() {\n        AssetStorage.callbacks.forEach((cb) => cb());\n    }\n}\n\nconst BGRM_ASSET_PERSISTENCE_KEY = \"bgrmPersistentAssets\";\nconst VECTORIZE_ASSET_PERSISTENCE_KEY = \"vectorizePersistentAssets\";\nconst ENHANCE_AI_ASSET_PERSISTENCE_KEY = \"enhanceAIPersistentAssets\";\n\ntype AssetTransformMapType =\n    | typeof BGRM_ASSET_PERSISTENCE_KEY\n    | typeof VECTORIZE_ASSET_PERSISTENCE_KEY\n    | typeof ENHANCE_AI_ASSET_PERSISTENCE_KEY;\n\nclass AssetTransformationStorage {\n    static has(mapKey: AssetTransformMapType, originalKey: string): boolean {\n        return AssetTransformationStorage.getMap(mapKey).has(originalKey);\n    }\n    static get(mapKey: AssetTransformMapType, originalKey: string): string | undefined {\n        return AssetTransformationStorage.getMap(mapKey).get(originalKey);\n    }\n    static keys(mapKey: AssetTransformMapType): IterableIterator<string> {\n        return AssetTransformationStorage.getMap(mapKey).keys();\n    }\n    static values(mapKey: AssetTransformMapType): IterableIterator<string> {\n        return AssetTransformationStorage.getMap(mapKey).values();\n    }\n    static add(mapKey: AssetTransformMapType, originalKey: string, transformedKey: string) {\n        const cache = AssetTransformationStorage.getMap(mapKey);\n        cache.set(originalKey, transformedKey);\n        AssetTransformationStorage.setMap(mapKey, cache);\n    }\n    static delete(mapKey: AssetTransformMapType, originalKey: string) {\n        const cache = AssetTransformationStorage.getMap(mapKey);\n        cache.delete(originalKey);\n        AssetTransformationStorage.setMap(mapKey, cache);\n    }\n    static deleteForTransformedKey(mapKey: AssetTransformMapType, transformedKey: string) {\n        const cache = AssetTransformationStorage.getMap(mapKey);\n        const originalKey = Array.from(cache.keys()).find((key) => cache.get(key) === transformedKey);\n        if (originalKey) {\n            cache.delete(originalKey);\n            AssetTransformationStorage.setMap(mapKey, cache);\n        }\n    }\n\n    private static getMap(mapKey: AssetTransformMapType): Map<string, string> {\n        return persistenceService.getMap(mapKey) || new Map();\n    }\n    private static setMap(mapKey: AssetTransformMapType, map: Map<string, string>) {\n        persistenceService.setMap(mapKey, map);\n    }\n}\n\nexport const assetService = new AssetService();\n","/**\n * A simple cache for promises. Helpful to avoid making multiple requests for the same data.\n */\nclass PromiseCache {\n    private cache: Record<string, Promise<any>> = {};\n    private disabled = false;\n\n    /**\n     * Gets a promise from the cache, or undefined if it doesn't exist.\n     */\n    public get(key: object): Promise<any> | undefined {\n        if (this.disabled) return undefined;\n        const keyString = JSON.stringify(key);\n        return this.cache[keyString];\n    }\n\n    /**\n     * Sets a promise in the cache and returns it.\n     */\n    public set(key: object, promise: Promise<any>): Promise<any> {\n        if (this.disabled) return promise;\n        const keyString = JSON.stringify(key);\n        this.cache[keyString] = promise;\n        return promise;\n    }\n\n    /**\n     * Some environments don't want workflows to be cached. An example is a server\n     * that doesn't launch a fresh instance per request. This method allows disabling\n     * caching in a transparent way.\n     */\n    public disable(value: boolean): void {\n        this.disabled = value;\n    }\n}\n\nconst promiseCache = new PromiseCache();\nexport default promiseCache;\n","import { Asset } from \"..\";\n\n/**\n * Utility function to generate a transformed URL for an asset.\n * This is used to generate URLs for thumbnails and other transformed versions of an asset.\n * The transformation is done by the asset service and the parameters are passed as query parameters in the URL. The exact transformations\n *  that are applied depend on the asset type and the transformations that are configured for it.\n * @param asset The asset for which a transformed URL is desired.\n * @param resolution The desired resolution for the asset. This is a hint that may or may not be respected depending on the asset type and the transformations that are configured for it.\n * @param quality The desired quality for the asset. This is a hint that may or may not be respected depending on the asset type and the transformations that are configured for it.\n * @returns The transformed URL for the asset or undefined if the asset does not have a file link.\n */\nconst getTransformedAssetURL = (\n    asset: Asset | string,\n    resolution: number = 512,\n    format?: \"jpg\" | \"png\" | \"webp\",\n    quality?: number,\n): string | undefined => {\n    const full = typeof asset === \"string\" ? asset : asset.fileLink;\n    if (!full) {\n        return undefined;\n    }\n    const separator = full.includes(\"?\") ? \"&\" : \"?\";\n    const params = [`w=${resolution}`, `h=${resolution}`];\n    if (quality !== undefined) {\n        params.push(`q=${quality}`);\n    }\n    if (format) {\n        params.push(`format=${format}`);\n    }\n    return `${full}${separator}${params.join(\"&\")}`;\n};\n\nexport { getTransformedAssetURL };\n","import { gql } from \"@apollo/client/core\";\nimport { assetFragment, assetService, materialFragment } from \"./asset\";\nimport promiseCache from \"./promiseCache\";\nimport { graphQlManager } from \"./server\";\nimport { AnyStepData, OptionResource, Step, VariantResource } from \"../types\";\nimport { getTransformedAssetURL } from \"../util/asset\";\n\nexport const optionMinimalFragment = gql`\n    fragment OptionMinimalFields on Option {\n        id\n        defaultVariant {\n            id\n        }\n    }\n`;\n\nexport const optionFragment = gql`\n    fragment OptionFields on Option {\n        id\n        name\n        public\n        currencyCode\n        type\n        workflowId\n        displayType\n        integrationOptions {\n            id\n            integrationId\n        }\n        variants {\n            id\n            name\n            enabled\n            color\n            namedColor\n            priceModifier\n            asset {\n                ...AssetFields\n            }\n            thumbnail {\n                ...AssetFields\n            }\n            material {\n                ...MaterialFields\n            }\n            category\n        }\n        defaultVariant {\n            id\n        }\n        colorProfile {\n            ...AssetFields\n        }\n    }\n`;\n\nconst getTagsQuery = gql`\n    query GetTagsMany($ids: [String!]!) {\n        tagsMany(entityIds: $ids) {\n            id\n            entityId\n            name\n        }\n    }\n`;\n\nconst getOptionsInternal = async (ids: string[]): Promise<OptionResource[]> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{ options: OptionResource[] }>({\n        query: gql`\n            ${assetFragment(false, false)}\n            ${materialFragment}\n            ${optionFragment}\n            query GetOptions($ids: [String]!) {\n                options(ids: $ids) {\n                    ...OptionFields\n                }\n            }\n        `,\n        errorPolicy: \"all\",\n        variables: {\n            ids,\n        },\n    });\n    response.data.options.forEach((option) => {\n        option.colorProfile && assetService.cacheAsset(option.colorProfile);\n        option.variants?.forEach((variant) => {\n            variant.asset && assetService.cacheAsset(variant.asset);\n            variant.thumbnail && assetService.cacheAsset(variant.thumbnail);\n            variant.material && assetService.cacheMaterial(variant.material);\n        });\n    });\n    return response.data.options;\n};\n\nconst findOptionFromPromise = async (\n    id: string,\n    promise: Promise<OptionResource[]>,\n): Promise<OptionResource | undefined> => {\n    const options = await promise;\n    return options.find((option) => option.id === id);\n};\n\nconst getOptions = async (ids: string[]): Promise<OptionResource[]> => {\n    const promises = new Map(ids.map((id) => [id, promiseCache.get({ id })]));\n    const uncachedIds = ids.filter((id) => promises.get(id) === undefined);\n    if (uncachedIds.length > 0) {\n        const batchPromise = getOptionsInternal(uncachedIds);\n        uncachedIds.forEach((id) =>\n            promises.set(id, promiseCache.set({ id }, findOptionFromPromise(id, batchPromise))),\n        );\n    }\n    const results = await Promise.all(ids.map((id) => promises.get(id)!));\n    return results.filter((option): option is OptionResource => option !== undefined);\n};\n\nconst getAssetImageUrl = (asset: VariantResource[\"asset\"]): string | undefined => {\n    if (!asset || !asset.fileLink) return;\n    return getTransformedAssetURL(asset, 512, \"webp\");\n};\n\nconst findDefaultVariant = (\n    variants: VariantResource[],\n    option: OptionResource,\n    overrideDefaultVariantId?: string,\n): VariantResource | undefined => {\n    if (variants.length === 1) {\n        return variants[0];\n    }\n    if (overrideDefaultVariantId) {\n        const v = variants.find((v) => v.id === overrideDefaultVariantId);\n        if (v) {\n            return v;\n        }\n    }\n    if (option.defaultVariant === undefined) {\n        return;\n    }\n    return variants.find((variant) => variant.id === option.defaultVariant?.id);\n};\n\nclass OptionService {\n    /**\n     * Allows for retrieving an option, returns the option from a cache if possible.\n     * @param id The option ID to be retrieved.\n     */\n    async getOption(id: string): Promise<OptionResource | undefined> {\n        if (!id) {\n            return undefined;\n        }\n        const options = await getOptions([id]);\n        return options[0];\n    }\n\n    async getOptions(ids: string[]): Promise<OptionResource[]> {\n        return getOptions(ids);\n    }\n\n    async getOptionForStep(stepData: Step<AnyStepData>): Promise<OptionResource | undefined> {\n        return this.ensureFullOption(stepData.option);\n    }\n\n    /**\n     * Utility function to get the full option from either the network or return the existing option if it can be considered to have the \"full\" state.\n     *\n     * @returns The full option resource, or `undefined` if invalid.\n     */\n    async ensureFullOption(option: OptionResource | undefined): Promise<OptionResource | undefined> {\n        if (option?.variants) {\n            return option;\n        }\n        if (!option?.id) {\n            return undefined;\n        }\n        const options = await getOptions([option.id]);\n        return options[0];\n    }\n\n    /**\n     * Returns the URL of the image to be used for a given variant. The priority is:\n     * 1. The variant's thumbnail (if it exists)\n     * 2. The variant's asset (if it exists)\n     * 3. The variant's material ID (if it exists) // TODO: Does this really make sense?\n     * 4. An empty string if none of the above exist\n     * @param variant The variant for which to retrieve the image URL.\n     * @returns A promise that resolves to the URL of the image to be used for the given variant, or an empty string if no image is available.\n     */\n    async getAssetTileImageForVariant(variant: VariantResource): Promise<string> {\n        const thumbnailUrl = getAssetImageUrl(variant.thumbnail) ?? getAssetImageUrl(variant.asset);\n        if (thumbnailUrl) {\n            return thumbnailUrl;\n        }\n\n        if (variant.material) {\n            return variant.material.id;\n        }\n\n        return \"\";\n    }\n\n    /**\n     * Returns the default variant for a given option. If there is only one variant, that variant is returned. If there are multiple variants, the variant with the ID matching overrideDefaultVariantId is returned (if provided). If overrideDefaultVariantId is not provided or does not match any variant, the variant marked as defaultVariant on the option is returned.\n     * @param option The option for which to retrieve the default variant.\n     * @param overrideDefaultVariantId An optional variant ID to override the default variant selection. This is used in certain cases where we want to specify a default variant that is different from the one marked as defaultVariant on the option.\n     * @returns The default variant for the given option, or undefined if no default variant can be determined.\n     */\n    getDefaultVariant = async (\n        option: OptionResource,\n        overrideDefaultVariantId?: string,\n    ): Promise<VariantResource | undefined> => {\n        // Check passed object first to avoid unnecessary cache lookups and network requests.\n        const existingVariants = option?.variants;\n        if (existingVariants) {\n            return findDefaultVariant(existingVariants, option, overrideDefaultVariantId);\n        }\n        // If variants are not present on the passed object, attempt to retrieve them via cache/network.\n        const loadedOption = await this.getOption(option.id!);\n        const variants = loadedOption?.variants;\n        if (!variants) {\n            return;\n        }\n        return findDefaultVariant(variants, option, overrideDefaultVariantId);\n    };\n\n    getTagsForAssets = async (\n        variants: VariantResource[],\n    ): Promise<{ id: string; entityId: string; name: string }[][]> => {\n        const assetIds = variants?.map((v) => v.asset?.key) || [];\n        const materialIds = variants?.map((v) => v.material?.id) || [];\n        const ids = [...assetIds, ...materialIds].filter((id) => !!id);\n        if (ids.length === 0) {\n            return [];\n        }\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .query<{ tagsMany: { id: string; entityId: string; name: string }[][] }>({\n                query: getTagsQuery,\n                errorPolicy: \"all\",\n                variables: {\n                    ids,\n                },\n            });\n        return response.data.tagsMany;\n    };\n}\n\nconst optionService = new OptionService();\nexport { optionService };\n","import { gql } from \"@apollo/client/core\";\nimport { assetFragment } from \"./services/asset\";\nimport { optionMinimalFragment, optionFragment } from \"./services/option\";\n\nexport const activeIntegrationFragment = gql`\n    fragment ActiveIntegrationFields on Integration {\n        id\n        logo\n        name\n        theme {\n            id\n            configuration\n            primaryColor\n            secondaryColor\n            textColor\n        }\n        partner {\n            id\n            name\n            activeAddons\n            currencyCode\n            beta\n        }\n    }\n`;\n\nexport const additionalProductFragment = gql`\n    fragment AdditionalIntegrationProductFields on IntegrationProduct {\n        id\n        product {\n            id\n            basePrice\n            enabled\n            name\n            description\n            sku\n            skuCode\n            weight\n            imageUrl\n            modelUrl\n            overlayImageUrl\n            preloadImageUrl\n        }\n    }\n`;\n\nexport const recipientFragment = gql`\n    fragment RecipientFields on Recipient {\n        id\n        firstName\n        lastName\n        address\n        suburb\n        state\n        email\n        postalCode\n        country\n        mobile\n        company\n        apartment\n        customField1\n        customField2\n        customField3\n        customField4\n        customField5\n        conversionConfigurationId\n    }\n`;\n\nexport const conversionConfigurationFragment = gql`\n    fragment ConversionConfigurationFields on ConversionConfiguration {\n        id\n        partnerId\n        name\n        locations\n        mandatory\n        requestedData\n        requestedDataItems {\n            type\n            mandatory\n            title\n            uniqueIdentifier\n            customFieldIndex\n            optionId\n            option {\n                id\n                name\n                variants {\n                    id\n                    name\n                    enabled\n                }\n                defaultVariant {\n                    id\n                }\n            }\n        }\n    }\n`;\n\nexport const createManyTransactionsMutation = gql`\n    ${recipientFragment}\n    mutation CreateTransactions(\n        $inputs: [TransactionCreateInput]!\n        $marketplaceThemeInstallId: String\n        $marketplaceThemeInstallConfigurationId: String\n    ) {\n        transactionCreateMany(\n            inputs: $inputs\n            marketplaceThemeInstallId: $marketplaceThemeInstallId\n            marketplaceThemeInstallConfigurationId: $marketplaceThemeInstallConfigurationId\n        ) {\n            id\n            designName\n            transactionOwnerId\n            workflowId\n            customLogoLink\n            quantity\n            workflowFooterLogoLink\n            restApiIntegrationLink\n            workflowState\n            workflowViewerLink\n            workflowViewerReadOnlyLink\n            recipient {\n                ...RecipientFields\n            }\n            integrationProductId\n        }\n    }\n`;\n\nexport const stakeholderFragment = gql`\n    fragment StakeholderFields on Stakeholder {\n        id\n        type\n        authorizationDate\n        authorizationNote\n        authorizationStatus\n    }\n`;\n\nexport const transactionShareActionFragment = gql`\n    fragment TransactionShareActionFields on TransactionShareAction {\n        id\n        title\n        type\n        stakeholderType\n        precedence\n        url\n    }\n`;\n\nexport const readIntegrationProductsQuery = gql`\n    ${additionalProductFragment}\n    ${conversionConfigurationFragment}\n    ${activeIntegrationFragment}\n    query ReadIntegrationProducts($ids: [String!]!) {\n        integrationProducts(ids: $ids) {\n            id\n            externalProductId\n            externalVariantId\n            additionalExternalProductId\n            additionalExternalVariantId\n            additionalIntegrationProduct {\n                ...AdditionalIntegrationProductFields\n            }\n            product {\n                id\n                basePrice\n                enabled\n                minimumOrderQuantity\n                name\n                description\n                partner {\n                    id\n                    name\n                    currencyCode\n                    customerDetailsPromptMarkdown\n                }\n                productImages {\n                    id\n                    precedence\n                    asset {\n                        key\n                        fileLink\n                        name\n                        type\n                    }\n                }\n                integrationProducts {\n                    id\n                    integration {\n                        id\n                        type\n                    }\n                    externalProductId\n                    externalVariantId\n                    additionalExternalProductId\n                    additionalExternalVariantId\n                    additionalIntegrationProduct {\n                        ...AdditionalIntegrationProductFields\n                    }\n                }\n                profanities {\n                    id\n                    word\n                }\n                sku\n                skuCode\n                weight\n                workflows {\n                    id\n                    friendlyName\n                    isPresent\n                    workflowName\n                    imageUrl\n                }\n                imageUrl\n                modelUrl\n                overlayImageUrl\n                preloadImageUrl\n                promptForCustomerDetails\n                conversionConfiguration {\n                    ...ConversionConfigurationFields\n                }\n                productTags {\n                    id\n                    name\n                }\n                priceBreaks {\n                    id\n                    minQty\n                    percentage\n                }\n            }\n            integration {\n                ...ActiveIntegrationFields\n            }\n        }\n    }\n`;\n\nexport const readTransactionsQuery = gql`\n    ${stakeholderFragment}\n    ${transactionShareActionFragment}\n    ${recipientFragment}\n    query ReadTransactions($ids: [String]!) {\n        transactions(ids: $ids) {\n            customLogoLink\n            designName\n            externalDesignProductId\n            externalDesignProductVariantId\n            externalCartProductId\n            externalCartProductVariantId\n            id\n            completed\n            lastSyncedAt\n            priceModifierTotal\n            restApiIntegrationLink\n            workflowFooterLogoLink\n            workflowId\n            workflowState\n            workflowViewerLink\n            workflowViewerReadOnlyLink\n            previewImageLink\n            isOrdered\n            quantity\n            printFileUrl1\n            printFileUrl2\n            printFileUrl3\n            printFileUrl4\n            printFileUrl5\n            printFileName1\n            printFileName2\n            printFileName3\n            printFileName4\n            printFileName5\n            stakeholders {\n                ...StakeholderFields\n            }\n            currentStakeholder {\n                ...StakeholderFields\n            }\n            hasAuthenticatedActions\n            transactionShareActions {\n                ...TransactionShareActionFields\n            }\n            addressValidationStatus\n            recipient {\n                ...RecipientFields\n            }\n            integrationProductId\n        }\n    }\n`;\n\nexport const updateTransactionWorkflowStateQuery = gql`\n    mutation UpdateTransactionWorkflowState($id: String!, $workflowState: String!) {\n        transactionUpdate(id: $id, workflowState: $workflowState) {\n            id\n        }\n    }\n`;\n\nexport const updateTransactionQuantityQuery = gql`\n    mutation UpdateTransactionQuantity($id: String!, $quantity: Int) {\n        transactionUpdate(id: $id, quantity: $quantity) {\n            id\n        }\n    }\n`;\n\nexport const updateTransactionWorkflowQuery = gql`\n    mutation UpdateTransactionWorkflow($id: String!, $workflowId: String!) {\n        transactionUpdate(id: $id, workflowId: $workflowId) {\n            id\n        }\n    }\n`;\n\nexport const getConversionConfigurationQuery = gql`\n    ${conversionConfigurationFragment}\n    query ReadConversionConfigurationQuery($id: String!) {\n        conversionConfiguration(id: $id) {\n            ...ConversionConfigurationFields\n        }\n    }\n`;\n\nexport const getTransactionQuery = gql`\n    ${conversionConfigurationFragment}\n    query ReadTransactionForDesignCreation($id: String!) {\n        transactions(ids: [$id]) {\n            id\n            completed\n            createdAt\n            designName\n            product {\n                name\n                sku\n                basePrice\n                minimumOrderQuantity\n                promptForCustomerDetails\n                partner {\n                    id\n                    name\n                    customerDetailsPromptMarkdown\n                }\n                conversionConfiguration {\n                    ...ConversionConfigurationFields\n                }\n                productTags {\n                    id\n                    name\n                }\n                priceBreaks {\n                    id\n                    minQty\n                    percentage\n                }\n            }\n            bundle {\n                id\n                metadata {\n                    key\n                    value\n                }\n                bundleStakeholders {\n                    type\n                    customer {\n                        emailAddress\n                    }\n                }\n            }\n            externalCartProductId\n            externalCartProductVariantId\n            externalDesignProductId\n            externalDesignProductVariantId\n            lastSyncedAt\n            previewImageLink\n            priceModifierTotal\n            quantity\n            workflowId\n            workflowState\n            workflowViewerLink\n            workflowViewerReadOnlyLink\n        }\n    }\n`;\n\nexport const getTransactionShareActionsQuery = gql`\n    ${transactionShareActionFragment}\n    query ReadTransactionForShareActions($id: String!) {\n        transactions(ids: [$id]) {\n            id\n            hasAuthenticatedActions\n            transactionShareActions {\n                ...TransactionShareActionFields\n            }\n        }\n    }\n`;\n\nexport const confirmWorkflowStates = gql`\n    query ConfirmWorkflowStates($transactions: [TransactionConfirmInput!]!) {\n        transactionConfirmWorkflowStates(transactions: $transactions)\n    }\n`;\n\nconst getIntegrationProductFragment = (fetchIntegrationProducts?: boolean) => gql`\n    ${additionalProductFragment}\n    fragment IntegrationProductFields on IntegrationProduct {\n        id\n        externalProductId\n        externalVariantId\n        additionalExternalProductId\n        additionalExternalVariantId\n        additionalIntegrationProduct {\n            ...AdditionalIntegrationProductFields\n        }\n        integration {\n            id\n            enabled\n            externalIntegrationId\n            type\n            isCurrent\n        }\n        product {\n            id\n            basePrice\n            enabled\n            minimumOrderQuantity\n            imageUrl\n            modelUrl\n            name\n            description\n            overlayImageUrl\n            preloadImageUrl\n            sku\n            skuCode\n            workflows {\n                id\n                index\n                friendlyName\n                isPresent\n                workflowName\n                imageUrl\n            }\n            productTags {\n                id\n                name\n            }\n            productImages {\n                id\n                precedence\n                asset {\n                    key\n                    fileLink\n                    name\n                    type\n                }\n            }\n            priceBreaks {\n                id\n                minQty\n                percentage\n            }\n            ${\n                fetchIntegrationProducts\n                    ? `\n                integrationProducts {\n                    id\n                    externalProductId\n                    externalVariantId\n                    additionalExternalProductId\n                    additionalExternalVariantId\n                    additionalIntegrationProduct {\n                        ...AdditionalIntegrationProductFields\n                    }\n                    integration {\n                        id\n                        enabled\n                        externalIntegrationId\n                        type\n                        isCurrent\n                    }\n                }\n            `\n                    : \"\"\n            }\n        }\n    }\n`;\n\nexport const getIntegrationProductsQuery = (includeIntegrations?: boolean) => gql`\n    ${getIntegrationProductFragment(includeIntegrations)}\n    query GetIntegrationProducts($ids: [String!]!) {\n        integrationProducts(ids: $ids) {\n            ...IntegrationProductFields\n        }\n    }\n`;\n\nexport const getIntegrationProductFromExternalIdsQuery = (includeIntegrations?: boolean) => gql`\n    ${getIntegrationProductFragment(includeIntegrations)}\n    query GetIntegrationProductFromExternalIds($externalIntegrationId: String!, $externalProductId: String!) {\n        integrationProductFromExternalIds(\n            externalIntegrationId: $externalIntegrationId\n            externalProductId: $externalProductId\n        ) {\n            ...IntegrationProductFields\n        }\n    }\n`;\n\nexport const getTransactionStakeholdersQuery = gql`\n    ${stakeholderFragment}\n    query ReadTransactionForStakeholders($id: String!) {\n        transactions(ids: [$id]) {\n            stakeholders {\n                ...StakeholderFields\n            }\n            currentStakeholder {\n                ...StakeholderFields\n            }\n        }\n    }\n`;\n\nexport const finalizeUpdateTransactionMutation = gql`\n    mutation FinalizeUpdateTransaction($transactionId: String!) {\n        transactionFinalizeUpdate(transactionId: $transactionId)\n    }\n`;\n\nexport const regionFragment = gql`\n    fragment RegionFields on Region {\n        width\n        top\n        left\n        height\n        layer\n        layerIndex\n        rotation\n        panelId\n        immutable\n        adjustmentBoundary {\n            width\n            x\n            y\n            height\n        }\n    }\n`;\n\nexport const lookAtAnimationFragment = gql`\n    fragment LookAtAnimationFields on LookAtAnimation {\n        latDeg\n        lonDeg\n        radius\n        target {\n            x\n            y\n            z\n        }\n    }\n`;\n\nexport const renderingPipelineConfigurationFragment = gql`\n    fragment RenderingPipelineConfigurationFields on RenderingPipelineConfiguration {\n        antiAliasing {\n            samples\n            fxaaEnabled\n        }\n        bloom {\n            enabled\n            kernel\n            scale\n            threshold\n            weight\n        }\n        chromaticAberration {\n            enabled\n            aberrationAmount\n            direction {\n                x\n                y\n            }\n            radialIntensity\n        }\n        colorCurves {\n            enabled\n            globalDensity\n            globalExposure\n            globalHue\n            globalSaturation\n            highlightsDensity\n            highlightsExposure\n            highlightsHue\n            highlightsSaturation\n            midtonesDensity\n            midtonesExposure\n            midtonesHue\n            midtonesSaturation\n            shadowsDensity\n            shadowsExposure\n            shadowsHue\n            shadowsSaturation\n        }\n        depthOfField {\n            enabled\n            blurLevel\n            focusDistance\n            focalLength\n            fStop\n            lensSize\n        }\n        grain {\n            enabled\n            animated\n            intensity\n        }\n        misc {\n            contrast\n            exposure\n            toneMappingEnabled\n            toneMappingType\n        }\n        sharpen {\n            enabled\n            colorAmount\n            edgeAmount\n        }\n        vignette {\n            enabled\n            blendMode\n            cameraFov\n            center {\n                x\n                y\n            }\n            colorRgba {\n                r\n                g\n                b\n                a\n            }\n            colorHex\n            stretch\n            weight\n        }\n    }\n`;\n\nexport const modelAnimationFragment = gql`\n    fragment ModelAnimationFields on ModelAnimation {\n        from\n        to\n        loop\n        name\n    }\n`;\n\nexport const getWorkflowsQuery = (includeAssetMetadata: boolean) => {\n    return gql`\n        ${assetFragment(includeAssetMetadata, false)}\n        ${optionMinimalFragment}\n        ${regionFragment}\n        ${lookAtAnimationFragment}\n        ${renderingPipelineConfigurationFragment}\n        ${modelAnimationFragment}\n        query GetWorkflows($ids: [String!]!) {\n            workflows(ids: $ids) {\n                partner {\n                    termsMarkdown\n                }\n                allowProofDownload\n                defaultPreviewPanelIndex\n                finalizeStepConfig {\n                    termsMarkdown\n                    lookAtAnimation {\n                        ...LookAtAnimationFields\n                    }\n                    modelAnimation {\n                        ...ModelAnimationFields\n                    }\n                }\n                globalPreviewConfig {\n                    autoRotation\n                    backgroundColor\n                    backgroundImage\n                    clearColor\n                    disableActionBar\n                    disableAutomaticOrientation\n                    emissiveGlowIntensity\n                    enableAR\n                    environmentFile\n                    environmentIntensity\n                    environmentRotationY\n                    idleTimeBeforeRotation\n                    lowerAlphaLimitDeg\n                    lowerBetaLimitDeg\n                    maxZoomOverride\n                    minZoomOverride\n                    noPan\n                    upperAlphaLimitDeg\n                    upperBetaLimitDeg\n                    renderingPipelineConfiguration {\n                        ...RenderingPipelineConfigurationFields\n                    }\n                }\n                id\n                name\n                panels {\n                    editableArea {\n                        height\n                        width\n                        x\n                        y\n                    }\n                    height\n                    width\n                    index\n                    name\n                    title\n                    useEditableArea\n                    transparentBackground\n                    previewRegion {\n                        ...RegionFields\n                    }\n                }\n                previewAsset {\n                    ...AssetFields\n                }\n                showModelOnFinishStep\n                showPlusInVariantPrices\n                showPricing\n                skuCode\n                stepGroups {\n                    name\n                    stepNames\n                }\n                steps {\n                    stepName\n                    type\n                    tags\n                    globalPropertyAspectConfigurations {\n                        aspectName\n                        globalPropertyConfigurationId\n                    }\n                    conversionConfigurationFieldLinks {\n                        identifier\n                        conversionConfigurationId\n                    }\n                    overrideDefaultVariantId\n                    option {\n                        ...OptionMinimalFields\n                    }\n                    stepTitle\n                    helpText\n                    mandatory\n                    relevantPanelName\n                    silent\n                    conditions {\n                        requiredVariantMetafields {\n                            variantMetafieldConfigurationId\n                            variantMetafieldValue\n                        }\n                        requiredVariantSelections\n                        targetStepName\n                        action\n                        type\n                    }\n                    data {\n                        __typename\n                        ... on InformationStepData {\n                            content\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                        }\n                        ... on DigitalContentStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            baseUrl\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on FrameStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            colorOption {\n                                ...OptionMinimalFields\n                            }\n                            colorPickerEnabled\n                            initialZoomLevel\n                            disablePlaceholder\n                            displayImageOnFinishStep\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            forceImageCover\n                            hideImageInCart\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            shouldVectorize\n                            vectorizeMaxColors\n                            vectorizationMinimumPixelThreshold\n                            maxColors\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            overlayImageKey\n                            overlayImageUrl\n                            placeholderImageKey\n                            placeholderImageUrl\n                            regions {\n                                ...RegionFields\n                            }\n                            whitelistedExtensions\n                        }\n                        ... on IllustrationStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            colorOption {\n                                ...OptionMinimalFields\n                            }\n                            colorPickerEnabled\n                            pmsPickerEnabled\n                            displayColorsOnFinishStep\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            enableVariantSearch\n                            hideColorsInCart\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on MaterialStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            targetMaterials\n                        }\n                        ... on ModelStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            replaceProductModel\n                        }\n                        ... on ModuleStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            displayTextOnFinishStep\n                            hideTextInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            maxLength\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            module\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on PictureStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            enableVariantSearch\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on ProductOverlayStepData {\n                            regions {\n                                ...RegionFields\n                            }\n                            overlayType\n                        }\n                        ... on QuestionStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            allowMultipleSelections\n                            displaySelectionsOnFinishStep\n                            displayType\n                            hideSelectionsInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                        }\n                        ... on ShapeStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            displaySelectionOnFinishStep\n                            enableVariantCategories\n                            excludeFromPrint\n                            hideSelectionInCart\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on SilentIllustrationStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            asset {\n                                ...AssetFields\n                            }\n                            excludeFromPrint\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            regions {\n                                ...RegionFields\n                            }\n                        }\n                        ... on TextStepData {\n                            advancedEditorAnimation {\n                                x\n                                y\n                                zoom\n                                layoutName\n                            }\n                            allowNewlines\n                            colorOption {\n                                ...OptionMinimalFields\n                            }\n                            colorPickerEnabled\n                            curved\n                            defaultText\n                            deleteDefaultOnFocus\n                            displayColorOnFinishStep\n                            displayImageFillOnFinishStep\n                            displayStrokeOnFinishStep\n                            displayTextOnFinishStep\n                            enableVariantCategories\n                            hideColorInCart\n                            hideImageFillInCart\n                            hideSelectionInCart\n                            hideStrokeInCart\n                            hideTextInCart\n                            imageFillOption {\n                                ...OptionMinimalFields\n                            }\n                            imageFillScale\n                            lookAtAnimation {\n                                ...LookAtAnimationFields\n                            }\n                            maxLength\n                            maxSize\n                            minSize\n                            modelAnimation {\n                                ...ModelAnimationFields\n                            }\n                            paths\n                            regions {\n                                ...RegionFields\n                            }\n                            replaceableText\n                            size\n                            strokeEnabled\n                            strokeOption {\n                                ...OptionMinimalFields\n                            }\n                            strokeThickness\n                            textAlign\n                            uppercase\n                            userCanReplaceText\n                            vertical\n                            verticalAlign\n                        }\n                    }\n                }\n            }\n        }\n    `;\n};\n\nconst marketplaceThemeInstallConfigurationFragment = gql`\n    ${conversionConfigurationFragment}\n    fragment MarketplaceThemeInstallConfigurationFields on MarketplaceThemeInstallConfiguration {\n        id\n        themeInstallId\n        fields {\n            type\n            key\n            value\n            asset {\n                key\n                name\n                fileLink\n                type\n            }\n            conversionConfiguration {\n                ...ConversionConfigurationFields\n            }\n            listValues\n            objectValues\n            schema\n            root\n        }\n        themeVersion {\n            id\n            version\n            status\n            createdAt\n            updatedAt\n            launchData {\n                targetFiles {\n                    filename\n                    type\n                    mimeType\n                    fileLink\n                    preload\n                }\n            }\n            configurationSchema {\n                customSchemas {\n                    name\n                    type\n                    title\n                    fields\n                    extends\n                    schemas\n                }\n                fields {\n                    key\n                    type\n                    title\n                    required\n                    defaultValue\n                    options {\n                        key\n                        value\n                    }\n                    assetType\n                    multiLine\n                    limit\n                    items\n                    fields\n                    schema\n                    root\n                }\n            }\n        }\n    }\n`;\n\nexport const getMarketplaceThemeInstallConfigurationQuery = gql`\n    ${marketplaceThemeInstallConfigurationFragment}\n    query GetMarketplaceThemeInstallConfiguration($themeConfigurationId: String!, $themeInstallId: String!) {\n        marketplaceThemeInstallConfiguration(id: $themeConfigurationId, themeInstallId: $themeInstallId, raw: false) {\n            ...MarketplaceThemeInstallConfigurationFields\n        }\n    }\n`;\n\nexport const currentIntegrationQuery = gql`\n    ${activeIntegrationFragment}\n    ${marketplaceThemeInstallConfigurationFragment}\n    query GetCurrentIntegration($themeConfigurationId: String) {\n        currentIntegration {\n            id\n            type\n            marketplaceThemeInstallConfiguration(id: $themeConfigurationId, raw: false) {\n                ...MarketplaceThemeInstallConfigurationFields\n            }\n            ...ActiveIntegrationFields\n        }\n    }\n`;\n\nexport const getTransactionForMarketplaceThemeQuery = gql`\n    ${marketplaceThemeInstallConfigurationFragment}\n    query ReadTransactionForMarketplaceTheme($id: String!) {\n        transactions(ids: [$id]) {\n            marketplaceThemeInstallConfiguration(raw: false) {\n                ...MarketplaceThemeInstallConfigurationFields\n            }\n        }\n    }\n`;\n\nexport const getBundleForMarketplaceThemeQuery = gql`\n    ${marketplaceThemeInstallConfigurationFragment}\n    query ReadBundleForMarketplaceTheme($id: String!) {\n        bundles(ids: [$id]) {\n            marketplaceThemeInstallConfiguration(raw: false) {\n                ...MarketplaceThemeInstallConfigurationFields\n            }\n        }\n    }\n`;\n\nexport const createOrderMutation = gql`\n    mutation CreateOrder($orderItems: [OrderItemInput]!) {\n        orderCreate(orderItems: $orderItems, paid: false, generateInternalId: true) {\n            id\n            internalId\n        }\n    }\n`;\n\nexport const currencyConversionQuery = gql`\n    query CurrencyConversion($from: String!, $to: String!) {\n        currencyConversion(from: $from, to: $to) {\n            rateFrom\n            rateTo\n            timestamp\n        }\n    }\n`;\n","// Generated by CoffeeScript 1.12.2\n(function() {\n  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n  if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n    module.exports = function() {\n      return performance.now();\n    };\n  } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n    module.exports = function() {\n      return (getNanoSeconds() - nodeLoadTime) / 1e6;\n    };\n    hrtime = process.hrtime;\n    getNanoSeconds = function() {\n      var hr;\n      hr = hrtime();\n      return hr[0] * 1e9 + hr[1];\n    };\n    moduleLoadTime = getNanoSeconds();\n    upTime = process.uptime() * 1e9;\n    nodeLoadTime = moduleLoadTime - upTime;\n  } else if (Date.now) {\n    module.exports = function() {\n      return Date.now() - loadTime;\n    };\n    loadTime = Date.now();\n  } else {\n    module.exports = function() {\n      return new Date().getTime() - loadTime;\n    };\n    loadTime = new Date().getTime();\n  }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var now = require('performance-now')\n  , root = typeof window === 'undefined' ? global : window\n  , vendors = ['moz', 'webkit']\n  , suffix = 'AnimationFrame'\n  , raf = root['request' + suffix]\n  , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n  raf = root[vendors[i] + 'Request' + suffix]\n  caf = root[vendors[i] + 'Cancel' + suffix]\n      || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n  var last = 0\n    , id = 0\n    , queue = []\n    , frameDuration = 1000 / 60\n\n  raf = function(callback) {\n    if(queue.length === 0) {\n      var _now = now()\n        , next = Math.max(0, frameDuration - (_now - last))\n      last = next + _now\n      setTimeout(function() {\n        var cp = queue.slice(0)\n        // Clear queue here to prevent\n        // callbacks from appending listeners\n        // to the current frame's queue\n        queue.length = 0\n        for(var i = 0; i < cp.length; i++) {\n          if(!cp[i].cancelled) {\n            try{\n              cp[i].callback(last)\n            } catch(e) {\n              setTimeout(function() { throw e }, 0)\n            }\n          }\n        }\n      }, Math.round(next))\n    }\n    queue.push({\n      handle: ++id,\n      callback: callback,\n      cancelled: false\n    })\n    return id\n  }\n\n  caf = function(handle) {\n    for(var i = 0; i < queue.length; i++) {\n      if(queue[i].handle === handle) {\n        queue[i].cancelled = true\n      }\n    }\n  }\n}\n\nmodule.exports = function(fn) {\n  // Wrap in a new function to prevent\n  // `cancel` potentially being assigned\n  // to the native rAF function\n  return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n  caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n  if (!object) {\n    object = root;\n  }\n  object.requestAnimationFrame = raf\n  object.cancelAnimationFrame = caf\n}\n","/*\n\tBased on rgbcolor.js by Stoyan Stefanov <sstoo@gmail.com>\n\thttp://www.phpied.com/rgb-color-parser-in-javascript/\n*/\n\nmodule.exports = function(color_string) {\n    this.ok = false;\n    this.alpha = 1.0;\n\n    // strip any leading #\n    if (color_string.charAt(0) == '#') { // remove # if any\n        color_string = color_string.substr(1,6);\n    }\n\n    color_string = color_string.replace(/ /g,'');\n    color_string = color_string.toLowerCase();\n\n    // before getting into regexps, try simple matches\n    // and overwrite the input\n    var simple_colors = {\n        aliceblue: 'f0f8ff',\n        antiquewhite: 'faebd7',\n        aqua: '00ffff',\n        aquamarine: '7fffd4',\n        azure: 'f0ffff',\n        beige: 'f5f5dc',\n        bisque: 'ffe4c4',\n        black: '000000',\n        blanchedalmond: 'ffebcd',\n        blue: '0000ff',\n        blueviolet: '8a2be2',\n        brown: 'a52a2a',\n        burlywood: 'deb887',\n        cadetblue: '5f9ea0',\n        chartreuse: '7fff00',\n        chocolate: 'd2691e',\n        coral: 'ff7f50',\n        cornflowerblue: '6495ed',\n        cornsilk: 'fff8dc',\n        crimson: 'dc143c',\n        cyan: '00ffff',\n        darkblue: '00008b',\n        darkcyan: '008b8b',\n        darkgoldenrod: 'b8860b',\n        darkgray: 'a9a9a9',\n        darkgreen: '006400',\n        darkkhaki: 'bdb76b',\n        darkmagenta: '8b008b',\n        darkolivegreen: '556b2f',\n        darkorange: 'ff8c00',\n        darkorchid: '9932cc',\n        darkred: '8b0000',\n        darksalmon: 'e9967a',\n        darkseagreen: '8fbc8f',\n        darkslateblue: '483d8b',\n        darkslategray: '2f4f4f',\n        darkturquoise: '00ced1',\n        darkviolet: '9400d3',\n        deeppink: 'ff1493',\n        deepskyblue: '00bfff',\n        dimgray: '696969',\n        dodgerblue: '1e90ff',\n        feldspar: 'd19275',\n        firebrick: 'b22222',\n        floralwhite: 'fffaf0',\n        forestgreen: '228b22',\n        fuchsia: 'ff00ff',\n        gainsboro: 'dcdcdc',\n        ghostwhite: 'f8f8ff',\n        gold: 'ffd700',\n        goldenrod: 'daa520',\n        gray: '808080',\n        green: '008000',\n        greenyellow: 'adff2f',\n        honeydew: 'f0fff0',\n        hotpink: 'ff69b4',\n        indianred : 'cd5c5c',\n        indigo : '4b0082',\n        ivory: 'fffff0',\n        khaki: 'f0e68c',\n        lavender: 'e6e6fa',\n        lavenderblush: 'fff0f5',\n        lawngreen: '7cfc00',\n        lemonchiffon: 'fffacd',\n        lightblue: 'add8e6',\n        lightcoral: 'f08080',\n        lightcyan: 'e0ffff',\n        lightgoldenrodyellow: 'fafad2',\n        lightgrey: 'd3d3d3',\n        lightgreen: '90ee90',\n        lightpink: 'ffb6c1',\n        lightsalmon: 'ffa07a',\n        lightseagreen: '20b2aa',\n        lightskyblue: '87cefa',\n        lightslateblue: '8470ff',\n        lightslategray: '778899',\n        lightsteelblue: 'b0c4de',\n        lightyellow: 'ffffe0',\n        lime: '00ff00',\n        limegreen: '32cd32',\n        linen: 'faf0e6',\n        magenta: 'ff00ff',\n        maroon: '800000',\n        mediumaquamarine: '66cdaa',\n        mediumblue: '0000cd',\n        mediumorchid: 'ba55d3',\n        mediumpurple: '9370d8',\n        mediumseagreen: '3cb371',\n        mediumslateblue: '7b68ee',\n        mediumspringgreen: '00fa9a',\n        mediumturquoise: '48d1cc',\n        mediumvioletred: 'c71585',\n        midnightblue: '191970',\n        mintcream: 'f5fffa',\n        mistyrose: 'ffe4e1',\n        moccasin: 'ffe4b5',\n        navajowhite: 'ffdead',\n        navy: '000080',\n        oldlace: 'fdf5e6',\n        olive: '808000',\n        olivedrab: '6b8e23',\n        orange: 'ffa500',\n        orangered: 'ff4500',\n        orchid: 'da70d6',\n        palegoldenrod: 'eee8aa',\n        palegreen: '98fb98',\n        paleturquoise: 'afeeee',\n        palevioletred: 'd87093',\n        papayawhip: 'ffefd5',\n        peachpuff: 'ffdab9',\n        peru: 'cd853f',\n        pink: 'ffc0cb',\n        plum: 'dda0dd',\n        powderblue: 'b0e0e6',\n        purple: '800080',\n        rebeccapurple: '663399',\n        red: 'ff0000',\n        rosybrown: 'bc8f8f',\n        royalblue: '4169e1',\n        saddlebrown: '8b4513',\n        salmon: 'fa8072',\n        sandybrown: 'f4a460',\n        seagreen: '2e8b57',\n        seashell: 'fff5ee',\n        sienna: 'a0522d',\n        silver: 'c0c0c0',\n        skyblue: '87ceeb',\n        slateblue: '6a5acd',\n        slategray: '708090',\n        snow: 'fffafa',\n        springgreen: '00ff7f',\n        steelblue: '4682b4',\n        tan: 'd2b48c',\n        teal: '008080',\n        thistle: 'd8bfd8',\n        tomato: 'ff6347',\n        turquoise: '40e0d0',\n        violet: 'ee82ee',\n        violetred: 'd02090',\n        wheat: 'f5deb3',\n        white: 'ffffff',\n        whitesmoke: 'f5f5f5',\n        yellow: 'ffff00',\n        yellowgreen: '9acd32'\n    };\n    color_string = simple_colors[color_string] || color_string;\n    // emd of simple type-in colors\n\n    // array of color definition objects\n    var color_defs = [\n        {\n            re: /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$/,\n            example: ['rgba(123, 234, 45, 0.8)', 'rgba(255,234,245,1.0)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3]),\n                    parseFloat(bits[4])\n                ];\n            }\n        },\n        {\n            re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1]),\n                    parseInt(bits[2]),\n                    parseInt(bits[3])\n                ];\n            }\n        },\n        {\n            re: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n            example: ['#00ff00', '336699'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1], 16),\n                    parseInt(bits[2], 16),\n                    parseInt(bits[3], 16)\n                ];\n            }\n        },\n        {\n            re: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n            example: ['#fb0', 'f0f'],\n            process: function (bits){\n                return [\n                    parseInt(bits[1] + bits[1], 16),\n                    parseInt(bits[2] + bits[2], 16),\n                    parseInt(bits[3] + bits[3], 16)\n                ];\n            }\n        }\n    ];\n\n    // search through the definitions to find a match\n    for (var i = 0; i < color_defs.length; i++) {\n        var re = color_defs[i].re;\n        var processor = color_defs[i].process;\n        var bits = re.exec(color_string);\n        if (bits) {\n            var channels = processor(bits);\n            this.r = channels[0];\n            this.g = channels[1];\n            this.b = channels[2];\n            if (channels.length > 3) {\n                this.alpha = channels[3];\n            }\n            this.ok = true;\n        }\n\n    }\n\n    // validate/cleanup values\n    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n    this.alpha = (this.alpha < 0) ? 0 : ((this.alpha > 1.0 || isNaN(this.alpha)) ? 1.0 : this.alpha);\n\n    // some getters\n    this.toRGB = function () {\n        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n    }\n    this.toRGBA = function () {\n        return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.alpha + ')';\n    }\n    this.toHex = function () {\n        var r = this.r.toString(16);\n        var g = this.g.toString(16);\n        var b = this.b.toString(16);\n        if (r.length == 1) r = '0' + r;\n        if (g.length == 1) g = '0' + g;\n        if (b.length == 1) b = '0' + b;\n        return '#' + r + g + b;\n    }\n\n    // help\n    this.getHelpXML = function () {\n\n        var examples = new Array();\n        // add regexps\n        for (var i = 0; i < color_defs.length; i++) {\n            var example = color_defs[i].example;\n            for (var j = 0; j < example.length; j++) {\n                examples[examples.length] = example[j];\n            }\n        }\n        // add type-in colors\n        for (var sc in simple_colors) {\n            examples[examples.length] = sc;\n        }\n\n        var xml = document.createElement('ul');\n        xml.setAttribute('id', 'rgbcolor-examples');\n        for (var i = 0; i < examples.length; i++) {\n            try {\n                var list_item = document.createElement('li');\n                var list_color = new RGBColor(examples[i]);\n                var example_div = document.createElement('div');\n                example_div.style.cssText =\n                        'margin: 3px; '\n                        + 'border: 1px solid black; '\n                        + 'background:' + list_color.toHex() + '; '\n                        + 'color:' + list_color.toHex()\n                ;\n                example_div.appendChild(document.createTextNode('test'));\n                var list_item_value = document.createTextNode(\n                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n                );\n                list_item.appendChild(example_div);\n                list_item.appendChild(list_item_value);\n                xml.appendChild(list_item);\n\n            } catch(e){}\n        }\n        return xml;\n\n    }\n\n}\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar t=function(r,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])})(r,e)};function r(r,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function i(){this.constructor=r}t(r,e),r.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function e(t){var r=\"\";Array.isArray(t)||(t=[t]);for(var e=0;e<t.length;e++){var i=t[e];if(i.type===_.CLOSE_PATH)r+=\"z\";else if(i.type===_.HORIZ_LINE_TO)r+=(i.relative?\"h\":\"H\")+i.x;else if(i.type===_.VERT_LINE_TO)r+=(i.relative?\"v\":\"V\")+i.y;else if(i.type===_.MOVE_TO)r+=(i.relative?\"m\":\"M\")+i.x+\" \"+i.y;else if(i.type===_.LINE_TO)r+=(i.relative?\"l\":\"L\")+i.x+\" \"+i.y;else if(i.type===_.CURVE_TO)r+=(i.relative?\"c\":\"C\")+i.x1+\" \"+i.y1+\" \"+i.x2+\" \"+i.y2+\" \"+i.x+\" \"+i.y;else if(i.type===_.SMOOTH_CURVE_TO)r+=(i.relative?\"s\":\"S\")+i.x2+\" \"+i.y2+\" \"+i.x+\" \"+i.y;else if(i.type===_.QUAD_TO)r+=(i.relative?\"q\":\"Q\")+i.x1+\" \"+i.y1+\" \"+i.x+\" \"+i.y;else if(i.type===_.SMOOTH_QUAD_TO)r+=(i.relative?\"t\":\"T\")+i.x+\" \"+i.y;else{if(i.type!==_.ARC)throw new Error('Unexpected command type \"'+i.type+'\" at index '+e+\".\");r+=(i.relative?\"a\":\"A\")+i.rX+\" \"+i.rY+\" \"+i.xRot+\" \"+ +i.lArcFlag+\" \"+ +i.sweepFlag+\" \"+i.x+\" \"+i.y}}return r}function i(t,r){var e=t[0],i=t[1];return[e*Math.cos(r)-i*Math.sin(r),e*Math.sin(r)+i*Math.cos(r)]}function a(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];for(var e=0;e<t.length;e++)if(\"number\"!=typeof t[e])throw new Error(\"assertNumbers arguments[\"+e+\"] is not a number. \"+typeof t[e]+\" == typeof \"+t[e]);return!0}var n=Math.PI;function o(t,r,e){t.lArcFlag=0===t.lArcFlag?0:1,t.sweepFlag=0===t.sweepFlag?0:1;var a=t.rX,o=t.rY,s=t.x,u=t.y;a=Math.abs(t.rX),o=Math.abs(t.rY);var h=i([(r-s)/2,(e-u)/2],-t.xRot/180*n),c=h[0],y=h[1],p=Math.pow(c,2)/Math.pow(a,2)+Math.pow(y,2)/Math.pow(o,2);1<p&&(a*=Math.sqrt(p),o*=Math.sqrt(p)),t.rX=a,t.rY=o;var m=Math.pow(a,2)*Math.pow(y,2)+Math.pow(o,2)*Math.pow(c,2),O=(t.lArcFlag!==t.sweepFlag?1:-1)*Math.sqrt(Math.max(0,(Math.pow(a,2)*Math.pow(o,2)-m)/m)),l=a*y/o*O,T=-o*c/a*O,v=i([l,T],t.xRot/180*n);t.cX=v[0]+(r+s)/2,t.cY=v[1]+(e+u)/2,t.phi1=Math.atan2((y-T)/o,(c-l)/a),t.phi2=Math.atan2((-y-T)/o,(-c-l)/a),0===t.sweepFlag&&t.phi2>t.phi1&&(t.phi2-=2*n),1===t.sweepFlag&&t.phi2<t.phi1&&(t.phi2+=2*n),t.phi1*=180/n,t.phi2*=180/n}function s(t,r,e){a(t,r,e);var i=t*t+r*r-e*e;if(0>i)return[];if(0===i)return[[t*e/(t*t+r*r),r*e/(t*t+r*r)]];var n=Math.sqrt(i);return[[(t*e+r*n)/(t*t+r*r),(r*e-t*n)/(t*t+r*r)],[(t*e-r*n)/(t*t+r*r),(r*e+t*n)/(t*t+r*r)]]}var u,h=Math.PI/180;function c(t,r,e){return(1-e)*t+e*r}function y(t,r,e,i){return t+Math.cos(i/180*n)*r+Math.sin(i/180*n)*e}function p(t,r,e,i){var a=1e-6,n=r-t,o=e-r,s=3*n+3*(i-e)-6*o,u=6*(o-n),h=3*n;return Math.abs(s)<a?[-h/u]:function(t,r,e){void 0===e&&(e=1e-6);var i=t*t/4-r;if(i<-e)return[];if(i<=e)return[-t/2];var a=Math.sqrt(i);return[-t/2-a,-t/2+a]}(u/s,h/s,a)}function m(t,r,e,i,a){var n=1-a;return t*(n*n*n)+r*(3*n*n*a)+e*(3*n*a*a)+i*(a*a*a)}!function(t){function r(){return u((function(t,r,e){return t.relative&&(void 0!==t.x1&&(t.x1+=r),void 0!==t.y1&&(t.y1+=e),void 0!==t.x2&&(t.x2+=r),void 0!==t.y2&&(t.y2+=e),void 0!==t.x&&(t.x+=r),void 0!==t.y&&(t.y+=e),t.relative=!1),t}))}function e(){var t=NaN,r=NaN,e=NaN,i=NaN;return u((function(a,n,o){return a.type&_.SMOOTH_CURVE_TO&&(a.type=_.CURVE_TO,t=isNaN(t)?n:t,r=isNaN(r)?o:r,a.x1=a.relative?n-t:2*n-t,a.y1=a.relative?o-r:2*o-r),a.type&_.CURVE_TO?(t=a.relative?n+a.x2:a.x2,r=a.relative?o+a.y2:a.y2):(t=NaN,r=NaN),a.type&_.SMOOTH_QUAD_TO&&(a.type=_.QUAD_TO,e=isNaN(e)?n:e,i=isNaN(i)?o:i,a.x1=a.relative?n-e:2*n-e,a.y1=a.relative?o-i:2*o-i),a.type&_.QUAD_TO?(e=a.relative?n+a.x1:a.x1,i=a.relative?o+a.y1:a.y1):(e=NaN,i=NaN),a}))}function n(){var t=NaN,r=NaN;return u((function(e,i,a){if(e.type&_.SMOOTH_QUAD_TO&&(e.type=_.QUAD_TO,t=isNaN(t)?i:t,r=isNaN(r)?a:r,e.x1=e.relative?i-t:2*i-t,e.y1=e.relative?a-r:2*a-r),e.type&_.QUAD_TO){t=e.relative?i+e.x1:e.x1,r=e.relative?a+e.y1:e.y1;var n=e.x1,o=e.y1;e.type=_.CURVE_TO,e.x1=((e.relative?0:i)+2*n)/3,e.y1=((e.relative?0:a)+2*o)/3,e.x2=(e.x+2*n)/3,e.y2=(e.y+2*o)/3}else t=NaN,r=NaN;return e}))}function u(t){var r=0,e=0,i=NaN,a=NaN;return function(n){if(isNaN(i)&&!(n.type&_.MOVE_TO))throw new Error(\"path must start with moveto\");var o=t(n,r,e,i,a);return n.type&_.CLOSE_PATH&&(r=i,e=a),void 0!==n.x&&(r=n.relative?r+n.x:n.x),void 0!==n.y&&(e=n.relative?e+n.y:n.y),n.type&_.MOVE_TO&&(i=r,a=e),o}}function O(t,r,e,i,n,o){return a(t,r,e,i,n,o),u((function(a,s,u,h){var c=a.x1,y=a.x2,p=a.relative&&!isNaN(h),m=void 0!==a.x?a.x:p?0:s,O=void 0!==a.y?a.y:p?0:u;function l(t){return t*t}a.type&_.HORIZ_LINE_TO&&0!==r&&(a.type=_.LINE_TO,a.y=a.relative?0:u),a.type&_.VERT_LINE_TO&&0!==e&&(a.type=_.LINE_TO,a.x=a.relative?0:s),void 0!==a.x&&(a.x=a.x*t+O*e+(p?0:n)),void 0!==a.y&&(a.y=m*r+a.y*i+(p?0:o)),void 0!==a.x1&&(a.x1=a.x1*t+a.y1*e+(p?0:n)),void 0!==a.y1&&(a.y1=c*r+a.y1*i+(p?0:o)),void 0!==a.x2&&(a.x2=a.x2*t+a.y2*e+(p?0:n)),void 0!==a.y2&&(a.y2=y*r+a.y2*i+(p?0:o));var T=t*i-r*e;if(void 0!==a.xRot&&(1!==t||0!==r||0!==e||1!==i))if(0===T)delete a.rX,delete a.rY,delete a.xRot,delete a.lArcFlag,delete a.sweepFlag,a.type=_.LINE_TO;else{var v=a.xRot*Math.PI/180,f=Math.sin(v),N=Math.cos(v),x=1/l(a.rX),d=1/l(a.rY),E=l(N)*x+l(f)*d,A=2*f*N*(x-d),C=l(f)*x+l(N)*d,M=E*i*i-A*r*i+C*r*r,R=A*(t*i+r*e)-2*(E*e*i+C*t*r),g=E*e*e-A*t*e+C*t*t,I=(Math.atan2(R,M-g)+Math.PI)%Math.PI/2,S=Math.sin(I),L=Math.cos(I);a.rX=Math.abs(T)/Math.sqrt(M*l(L)+R*S*L+g*l(S)),a.rY=Math.abs(T)/Math.sqrt(M*l(S)-R*S*L+g*l(L)),a.xRot=180*I/Math.PI}return void 0!==a.sweepFlag&&0>T&&(a.sweepFlag=+!a.sweepFlag),a}))}function l(){return function(t){var r={};for(var e in t)r[e]=t[e];return r}}t.ROUND=function(t){function r(r){return Math.round(r*t)/t}return void 0===t&&(t=1e13),a(t),function(t){return void 0!==t.x1&&(t.x1=r(t.x1)),void 0!==t.y1&&(t.y1=r(t.y1)),void 0!==t.x2&&(t.x2=r(t.x2)),void 0!==t.y2&&(t.y2=r(t.y2)),void 0!==t.x&&(t.x=r(t.x)),void 0!==t.y&&(t.y=r(t.y)),void 0!==t.rX&&(t.rX=r(t.rX)),void 0!==t.rY&&(t.rY=r(t.rY)),t}},t.TO_ABS=r,t.TO_REL=function(){return u((function(t,r,e){return t.relative||(void 0!==t.x1&&(t.x1-=r),void 0!==t.y1&&(t.y1-=e),void 0!==t.x2&&(t.x2-=r),void 0!==t.y2&&(t.y2-=e),void 0!==t.x&&(t.x-=r),void 0!==t.y&&(t.y-=e),t.relative=!0),t}))},t.NORMALIZE_HVZ=function(t,r,e){return void 0===t&&(t=!0),void 0===r&&(r=!0),void 0===e&&(e=!0),u((function(i,a,n,o,s){if(isNaN(o)&&!(i.type&_.MOVE_TO))throw new Error(\"path must start with moveto\");return r&&i.type&_.HORIZ_LINE_TO&&(i.type=_.LINE_TO,i.y=i.relative?0:n),e&&i.type&_.VERT_LINE_TO&&(i.type=_.LINE_TO,i.x=i.relative?0:a),t&&i.type&_.CLOSE_PATH&&(i.type=_.LINE_TO,i.x=i.relative?o-a:o,i.y=i.relative?s-n:s),i.type&_.ARC&&(0===i.rX||0===i.rY)&&(i.type=_.LINE_TO,delete i.rX,delete i.rY,delete i.xRot,delete i.lArcFlag,delete i.sweepFlag),i}))},t.NORMALIZE_ST=e,t.QT_TO_C=n,t.INFO=u,t.SANITIZE=function(t){void 0===t&&(t=0),a(t);var r=NaN,e=NaN,i=NaN,n=NaN;return u((function(a,o,s,u,h){var c=Math.abs,y=!1,p=0,m=0;if(a.type&_.SMOOTH_CURVE_TO&&(p=isNaN(r)?0:o-r,m=isNaN(e)?0:s-e),a.type&(_.CURVE_TO|_.SMOOTH_CURVE_TO)?(r=a.relative?o+a.x2:a.x2,e=a.relative?s+a.y2:a.y2):(r=NaN,e=NaN),a.type&_.SMOOTH_QUAD_TO?(i=isNaN(i)?o:2*o-i,n=isNaN(n)?s:2*s-n):a.type&_.QUAD_TO?(i=a.relative?o+a.x1:a.x1,n=a.relative?s+a.y1:a.y2):(i=NaN,n=NaN),a.type&_.LINE_COMMANDS||a.type&_.ARC&&(0===a.rX||0===a.rY||!a.lArcFlag)||a.type&_.CURVE_TO||a.type&_.SMOOTH_CURVE_TO||a.type&_.QUAD_TO||a.type&_.SMOOTH_QUAD_TO){var O=void 0===a.x?0:a.relative?a.x:a.x-o,l=void 0===a.y?0:a.relative?a.y:a.y-s;p=isNaN(i)?void 0===a.x1?p:a.relative?a.x:a.x1-o:i-o,m=isNaN(n)?void 0===a.y1?m:a.relative?a.y:a.y1-s:n-s;var T=void 0===a.x2?0:a.relative?a.x:a.x2-o,v=void 0===a.y2?0:a.relative?a.y:a.y2-s;c(O)<=t&&c(l)<=t&&c(p)<=t&&c(m)<=t&&c(T)<=t&&c(v)<=t&&(y=!0)}return a.type&_.CLOSE_PATH&&c(o-u)<=t&&c(s-h)<=t&&(y=!0),y?[]:a}))},t.MATRIX=O,t.ROTATE=function(t,r,e){void 0===r&&(r=0),void 0===e&&(e=0),a(t,r,e);var i=Math.sin(t),n=Math.cos(t);return O(n,i,-i,n,r-r*n+e*i,e-r*i-e*n)},t.TRANSLATE=function(t,r){return void 0===r&&(r=0),a(t,r),O(1,0,0,1,t,r)},t.SCALE=function(t,r){return void 0===r&&(r=t),a(t,r),O(t,0,0,r,0,0)},t.SKEW_X=function(t){return a(t),O(1,0,Math.atan(t),1,0,0)},t.SKEW_Y=function(t){return a(t),O(1,Math.atan(t),0,1,0,0)},t.X_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(-1,0,0,1,t,0)},t.Y_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(1,0,0,-1,0,t)},t.A_TO_C=function(){return u((function(t,r,e){return _.ARC===t.type?function(t,r,e){var a,n,s,u;t.cX||o(t,r,e);for(var y=Math.min(t.phi1,t.phi2),p=Math.max(t.phi1,t.phi2)-y,m=Math.ceil(p/90),O=new Array(m),l=r,T=e,v=0;v<m;v++){var f=c(t.phi1,t.phi2,v/m),N=c(t.phi1,t.phi2,(v+1)/m),x=N-f,d=4/3*Math.tan(x*h/4),E=[Math.cos(f*h)-d*Math.sin(f*h),Math.sin(f*h)+d*Math.cos(f*h)],A=E[0],C=E[1],M=[Math.cos(N*h),Math.sin(N*h)],R=M[0],g=M[1],I=[R+d*Math.sin(N*h),g-d*Math.cos(N*h)],S=I[0],L=I[1];O[v]={relative:t.relative,type:_.CURVE_TO};var H=function(r,e){var a=i([r*t.rX,e*t.rY],t.xRot),n=a[0],o=a[1];return[t.cX+n,t.cY+o]};a=H(A,C),O[v].x1=a[0],O[v].y1=a[1],n=H(S,L),O[v].x2=n[0],O[v].y2=n[1],s=H(R,g),O[v].x=s[0],O[v].y=s[1],t.relative&&(O[v].x1-=l,O[v].y1-=T,O[v].x2-=l,O[v].y2-=T,O[v].x-=l,O[v].y-=T),l=(u=[O[v].x,O[v].y])[0],T=u[1]}return O}(t,t.relative?0:r,t.relative?0:e):t}))},t.ANNOTATE_ARCS=function(){return u((function(t,r,e){return t.relative&&(r=0,e=0),_.ARC===t.type&&o(t,r,e),t}))},t.CLONE=l,t.CALCULATE_BOUNDS=function(){var t=function(t){var r={};for(var e in t)r[e]=t[e];return r},i=r(),a=n(),h=e(),c=u((function(r,e,n){var u=h(a(i(t(r))));function O(t){t>c.maxX&&(c.maxX=t),t<c.minX&&(c.minX=t)}function l(t){t>c.maxY&&(c.maxY=t),t<c.minY&&(c.minY=t)}if(u.type&_.DRAWING_COMMANDS&&(O(e),l(n)),u.type&_.HORIZ_LINE_TO&&O(u.x),u.type&_.VERT_LINE_TO&&l(u.y),u.type&_.LINE_TO&&(O(u.x),l(u.y)),u.type&_.CURVE_TO){O(u.x),l(u.y);for(var T=0,v=p(e,u.x1,u.x2,u.x);T<v.length;T++){0<(w=v[T])&&1>w&&O(m(e,u.x1,u.x2,u.x,w))}for(var f=0,N=p(n,u.y1,u.y2,u.y);f<N.length;f++){0<(w=N[f])&&1>w&&l(m(n,u.y1,u.y2,u.y,w))}}if(u.type&_.ARC){O(u.x),l(u.y),o(u,e,n);for(var x=u.xRot/180*Math.PI,d=Math.cos(x)*u.rX,E=Math.sin(x)*u.rX,A=-Math.sin(x)*u.rY,C=Math.cos(x)*u.rY,M=u.phi1<u.phi2?[u.phi1,u.phi2]:-180>u.phi2?[u.phi2+360,u.phi1+360]:[u.phi2,u.phi1],R=M[0],g=M[1],I=function(t){var r=t[0],e=t[1],i=180*Math.atan2(e,r)/Math.PI;return i<R?i+360:i},S=0,L=s(A,-d,0).map(I);S<L.length;S++){(w=L[S])>R&&w<g&&O(y(u.cX,d,A,w))}for(var H=0,U=s(C,-E,0).map(I);H<U.length;H++){var w;(w=U[H])>R&&w<g&&l(y(u.cY,E,C,w))}}return r}));return c.minX=1/0,c.maxX=-1/0,c.minY=1/0,c.maxY=-1/0,c}}(u||(u={}));var O,l=function(){function t(){}return t.prototype.round=function(t){return this.transform(u.ROUND(t))},t.prototype.toAbs=function(){return this.transform(u.TO_ABS())},t.prototype.toRel=function(){return this.transform(u.TO_REL())},t.prototype.normalizeHVZ=function(t,r,e){return this.transform(u.NORMALIZE_HVZ(t,r,e))},t.prototype.normalizeST=function(){return this.transform(u.NORMALIZE_ST())},t.prototype.qtToC=function(){return this.transform(u.QT_TO_C())},t.prototype.aToC=function(){return this.transform(u.A_TO_C())},t.prototype.sanitize=function(t){return this.transform(u.SANITIZE(t))},t.prototype.translate=function(t,r){return this.transform(u.TRANSLATE(t,r))},t.prototype.scale=function(t,r){return this.transform(u.SCALE(t,r))},t.prototype.rotate=function(t,r,e){return this.transform(u.ROTATE(t,r,e))},t.prototype.matrix=function(t,r,e,i,a,n){return this.transform(u.MATRIX(t,r,e,i,a,n))},t.prototype.skewX=function(t){return this.transform(u.SKEW_X(t))},t.prototype.skewY=function(t){return this.transform(u.SKEW_Y(t))},t.prototype.xSymmetry=function(t){return this.transform(u.X_AXIS_SYMMETRY(t))},t.prototype.ySymmetry=function(t){return this.transform(u.Y_AXIS_SYMMETRY(t))},t.prototype.annotateArcs=function(){return this.transform(u.ANNOTATE_ARCS())},t}(),T=function(t){return\" \"===t||\"\\t\"===t||\"\\r\"===t||\"\\n\"===t},v=function(t){return\"0\".charCodeAt(0)<=t.charCodeAt(0)&&t.charCodeAt(0)<=\"9\".charCodeAt(0)},f=function(t){function e(){var r=t.call(this)||this;return r.curNumber=\"\",r.curCommandType=-1,r.curCommandRelative=!1,r.canParseCommandOrComma=!0,r.curNumberHasExp=!1,r.curNumberHasExpDigits=!1,r.curNumberHasDecimal=!1,r.curArgs=[],r}return r(e,t),e.prototype.finish=function(t){if(void 0===t&&(t=[]),this.parse(\" \",t),0!==this.curArgs.length||!this.canParseCommandOrComma)throw new SyntaxError(\"Unterminated command at the path end.\");return t},e.prototype.parse=function(t,r){var e=this;void 0===r&&(r=[]);for(var i=function(t){r.push(t),e.curArgs.length=0,e.canParseCommandOrComma=!0},a=0;a<t.length;a++){var n=t[a],o=!(this.curCommandType!==_.ARC||3!==this.curArgs.length&&4!==this.curArgs.length||1!==this.curNumber.length||\"0\"!==this.curNumber&&\"1\"!==this.curNumber),s=v(n)&&(\"0\"===this.curNumber&&\"0\"===n||o);if(!v(n)||s)if(\"e\"!==n&&\"E\"!==n)if(\"-\"!==n&&\"+\"!==n||!this.curNumberHasExp||this.curNumberHasExpDigits)if(\".\"!==n||this.curNumberHasExp||this.curNumberHasDecimal||o){if(this.curNumber&&-1!==this.curCommandType){var u=Number(this.curNumber);if(isNaN(u))throw new SyntaxError(\"Invalid number ending at \"+a);if(this.curCommandType===_.ARC)if(0===this.curArgs.length||1===this.curArgs.length){if(0>u)throw new SyntaxError('Expected positive number, got \"'+u+'\" at index \"'+a+'\"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&\"0\"!==this.curNumber&&\"1\"!==this.curNumber)throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+a+'\"');this.curArgs.push(u),this.curArgs.length===N[this.curCommandType]&&(_.HORIZ_LINE_TO===this.curCommandType?i({type:_.HORIZ_LINE_TO,relative:this.curCommandRelative,x:u}):_.VERT_LINE_TO===this.curCommandType?i({type:_.VERT_LINE_TO,relative:this.curCommandRelative,y:u}):this.curCommandType===_.MOVE_TO||this.curCommandType===_.LINE_TO||this.curCommandType===_.SMOOTH_QUAD_TO?(i({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),_.MOVE_TO===this.curCommandType&&(this.curCommandType=_.LINE_TO)):this.curCommandType===_.CURVE_TO?i({type:_.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===_.SMOOTH_CURVE_TO?i({type:_.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===_.QUAD_TO?i({type:_.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===_.ARC&&i({type:_.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!T(n))if(\",\"===n&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(\"+\"!==n&&\"-\"!==n&&\".\"!==n)if(s)this.curNumber=n,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError(\"Unterminated command at index \"+a+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,\"z\"!==n&&\"Z\"!==n)if(\"h\"===n||\"H\"===n)this.curCommandType=_.HORIZ_LINE_TO,this.curCommandRelative=\"h\"===n;else if(\"v\"===n||\"V\"===n)this.curCommandType=_.VERT_LINE_TO,this.curCommandRelative=\"v\"===n;else if(\"m\"===n||\"M\"===n)this.curCommandType=_.MOVE_TO,this.curCommandRelative=\"m\"===n;else if(\"l\"===n||\"L\"===n)this.curCommandType=_.LINE_TO,this.curCommandRelative=\"l\"===n;else if(\"c\"===n||\"C\"===n)this.curCommandType=_.CURVE_TO,this.curCommandRelative=\"c\"===n;else if(\"s\"===n||\"S\"===n)this.curCommandType=_.SMOOTH_CURVE_TO,this.curCommandRelative=\"s\"===n;else if(\"q\"===n||\"Q\"===n)this.curCommandType=_.QUAD_TO,this.curCommandRelative=\"q\"===n;else if(\"t\"===n||\"T\"===n)this.curCommandType=_.SMOOTH_QUAD_TO,this.curCommandRelative=\"t\"===n;else{if(\"a\"!==n&&\"A\"!==n)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\".\");this.curCommandType=_.ARC,this.curCommandRelative=\"a\"===n}else r.push({type:_.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=n,this.curNumberHasDecimal=\".\"===n}else this.curNumber+=n,this.curNumberHasDecimal=!0;else this.curNumber+=n;else this.curNumber+=n,this.curNumberHasExp=!0;else this.curNumber+=n,this.curNumberHasExpDigits=this.curNumberHasExp}return r},e.prototype.transform=function(t){return Object.create(this,{parse:{value:function(r,e){void 0===e&&(e=[]);for(var i=0,a=Object.getPrototypeOf(this).parse.call(this,r);i<a.length;i++){var n=a[i],o=t(n);Array.isArray(o)?e.push.apply(e,o):e.push(o)}return e}}})},e}(l),_=function(t){function i(r){var e=t.call(this)||this;return e.commands=\"string\"==typeof r?i.parse(r):r,e}return r(i,t),i.prototype.encode=function(){return i.encode(this.commands)},i.prototype.getBounds=function(){var t=u.CALCULATE_BOUNDS();return this.transform(t),t},i.prototype.transform=function(t){for(var r=[],e=0,i=this.commands;e<i.length;e++){var a=t(i[e]);Array.isArray(a)?r.push.apply(r,a):r.push(a)}return this.commands=r,this},i.encode=function(t){return e(t)},i.parse=function(t){var r=new f,e=[];return r.parse(t,e),r.finish(e),e},i.CLOSE_PATH=1,i.MOVE_TO=2,i.HORIZ_LINE_TO=4,i.VERT_LINE_TO=8,i.LINE_TO=16,i.CURVE_TO=32,i.SMOOTH_CURVE_TO=64,i.QUAD_TO=128,i.SMOOTH_QUAD_TO=256,i.ARC=512,i.LINE_COMMANDS=i.LINE_TO|i.HORIZ_LINE_TO|i.VERT_LINE_TO,i.DRAWING_COMMANDS=i.HORIZ_LINE_TO|i.VERT_LINE_TO|i.LINE_TO|i.CURVE_TO|i.SMOOTH_CURVE_TO|i.QUAD_TO|i.SMOOTH_QUAD_TO|i.ARC,i}(l),N=((O={})[_.MOVE_TO]=2,O[_.LINE_TO]=2,O[_.HORIZ_LINE_TO]=1,O[_.VERT_LINE_TO]=1,O[_.CLOSE_PATH]=0,O[_.QUAD_TO]=4,O[_.SMOOTH_QUAD_TO]=2,O[_.CURVE_TO]=6,O[_.SMOOTH_CURVE_TO]=4,O[_.ARC]=7,O);export{N as COMMAND_ARG_COUNTS,_ as SVGPathData,f as SVGPathDataParser,u as SVGPathDataTransformer,e as encodeSVGPath};\n//# sourceMappingURL=SVGPathData.module.js.map\n","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\n/* eslint-disable no-bitwise -- used for calculations */\n\n/* eslint-disable unicorn/prefer-query-selector -- aiming at\n  backward-compatibility */\n\n/**\n* StackBlur - a fast almost Gaussian Blur For Canvas\n*\n* In case you find this class useful - especially in commercial projects -\n* I am not totally unhappy for a small donation to my PayPal account\n* mario@quasimondo.de\n*\n* Or support me on flattr:\n* {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}.\n*\n* @module StackBlur\n* @author Mario Klingemann\n* Contact: mario@quasimondo.com\n* Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}\n* Twitter: @quasimondo\n*\n* @copyright (c) 2010 Mario Klingemann\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\nvar mulTable = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\nvar shgTable = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\n/**\n * @param {string|HTMLImageElement} img\n * @param {string|HTMLCanvasElement} canvas\n * @param {Float} radius\n * @param {boolean} blurAlphaChannel\n * @param {boolean} useOffset\n * @param {boolean} skipStyles\n * @returns {undefined}\n */\n\nfunction processImage(img, canvas, radius, blurAlphaChannel, useOffset, skipStyles) {\n  if (typeof img === 'string') {\n    img = document.getElementById(img);\n  }\n\n  if (!img || Object.prototype.toString.call(img).slice(8, -1) === 'HTMLImageElement' && !('naturalWidth' in img)) {\n    return;\n  }\n\n  var dimensionType = useOffset ? 'offset' : 'natural';\n  var w = img[dimensionType + 'Width'];\n  var h = img[dimensionType + 'Height']; // add ImageBitmap support,can blur texture source\n\n  if (Object.prototype.toString.call(img).slice(8, -1) === 'ImageBitmap') {\n    w = img.width;\n    h = img.height;\n  }\n\n  if (typeof canvas === 'string') {\n    canvas = document.getElementById(canvas);\n  }\n\n  if (!canvas || !('getContext' in canvas)) {\n    return;\n  }\n\n  if (!skipStyles) {\n    canvas.style.width = w + 'px';\n    canvas.style.height = h + 'px';\n  }\n\n  canvas.width = w;\n  canvas.height = h;\n  var context = canvas.getContext('2d');\n  context.clearRect(0, 0, w, h);\n  context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h);\n\n  if (isNaN(radius) || radius < 1) {\n    return;\n  }\n\n  if (blurAlphaChannel) {\n    processCanvasRGBA(canvas, 0, 0, w, h, radius);\n  } else {\n    processCanvasRGB(canvas, 0, 0, w, h, radius);\n  }\n}\n/**\n * @param {string|HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @throws {Error|TypeError}\n * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}\n */\n\n\nfunction getImageDataFromCanvas(canvas, topX, topY, width, height) {\n  if (typeof canvas === 'string') {\n    canvas = document.getElementById(canvas);\n  }\n\n  if (!canvas || _typeof(canvas) !== 'object' || !('getContext' in canvas)) {\n    throw new TypeError('Expecting canvas with `getContext` method ' + 'in processCanvasRGB(A) calls!');\n  }\n\n  var context = canvas.getContext('2d');\n\n  try {\n    return context.getImageData(topX, topY, width, height);\n  } catch (e) {\n    throw new Error('unable to access image data: ' + e);\n  }\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGBA(canvas, topX, topY, width, height, radius) {\n  if (isNaN(radius) || radius < 1) {\n    return;\n  }\n\n  radius |= 0;\n  var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n  imageData = processImageDataRGBA(imageData, topX, topY, width, height, radius);\n  canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGBA(imageData, topX, topY, width, height, radius) {\n  var pixels = imageData.data;\n  var div = 2 * radius + 1; // const w4 = width << 2;\n\n  var widthMinus1 = width - 1;\n  var heightMinus1 = height - 1;\n  var radiusPlus1 = radius + 1;\n  var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n  var stackStart = new BlurStack();\n  var stack = stackStart;\n  var stackEnd;\n\n  for (var i = 1; i < div; i++) {\n    stack = stack.next = new BlurStack();\n\n    if (i === radiusPlus1) {\n      stackEnd = stack;\n    }\n  }\n\n  stack.next = stackStart;\n  var stackIn = null,\n      stackOut = null,\n      yw = 0,\n      yi = 0;\n  var mulSum = mulTable[radius];\n  var shgSum = shgTable[radius];\n\n  for (var y = 0; y < height; y++) {\n    stack = stackStart;\n    var pr = pixels[yi],\n        pg = pixels[yi + 1],\n        pb = pixels[yi + 2],\n        pa = pixels[yi + 3];\n\n    for (var _i = 0; _i < radiusPlus1; _i++) {\n      stack.r = pr;\n      stack.g = pg;\n      stack.b = pb;\n      stack.a = pa;\n      stack = stack.next;\n    }\n\n    var rInSum = 0,\n        gInSum = 0,\n        bInSum = 0,\n        aInSum = 0,\n        rOutSum = radiusPlus1 * pr,\n        gOutSum = radiusPlus1 * pg,\n        bOutSum = radiusPlus1 * pb,\n        aOutSum = radiusPlus1 * pa,\n        rSum = sumFactor * pr,\n        gSum = sumFactor * pg,\n        bSum = sumFactor * pb,\n        aSum = sumFactor * pa;\n\n    for (var _i2 = 1; _i2 < radiusPlus1; _i2++) {\n      var p = yi + ((widthMinus1 < _i2 ? widthMinus1 : _i2) << 2);\n      var r = pixels[p],\n          g = pixels[p + 1],\n          b = pixels[p + 2],\n          a = pixels[p + 3];\n      var rbs = radiusPlus1 - _i2;\n      rSum += (stack.r = r) * rbs;\n      gSum += (stack.g = g) * rbs;\n      bSum += (stack.b = b) * rbs;\n      aSum += (stack.a = a) * rbs;\n      rInSum += r;\n      gInSum += g;\n      bInSum += b;\n      aInSum += a;\n      stack = stack.next;\n    }\n\n    stackIn = stackStart;\n    stackOut = stackEnd;\n\n    for (var x = 0; x < width; x++) {\n      var paInitial = aSum * mulSum >>> shgSum;\n      pixels[yi + 3] = paInitial;\n\n      if (paInitial !== 0) {\n        var _a2 = 255 / paInitial;\n\n        pixels[yi] = (rSum * mulSum >>> shgSum) * _a2;\n        pixels[yi + 1] = (gSum * mulSum >>> shgSum) * _a2;\n        pixels[yi + 2] = (bSum * mulSum >>> shgSum) * _a2;\n      } else {\n        pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n      }\n\n      rSum -= rOutSum;\n      gSum -= gOutSum;\n      bSum -= bOutSum;\n      aSum -= aOutSum;\n      rOutSum -= stackIn.r;\n      gOutSum -= stackIn.g;\n      bOutSum -= stackIn.b;\n      aOutSum -= stackIn.a;\n\n      var _p = x + radius + 1;\n\n      _p = yw + (_p < widthMinus1 ? _p : widthMinus1) << 2;\n      rInSum += stackIn.r = pixels[_p];\n      gInSum += stackIn.g = pixels[_p + 1];\n      bInSum += stackIn.b = pixels[_p + 2];\n      aInSum += stackIn.a = pixels[_p + 3];\n      rSum += rInSum;\n      gSum += gInSum;\n      bSum += bInSum;\n      aSum += aInSum;\n      stackIn = stackIn.next;\n      var _stackOut = stackOut,\n          _r = _stackOut.r,\n          _g = _stackOut.g,\n          _b = _stackOut.b,\n          _a = _stackOut.a;\n      rOutSum += _r;\n      gOutSum += _g;\n      bOutSum += _b;\n      aOutSum += _a;\n      rInSum -= _r;\n      gInSum -= _g;\n      bInSum -= _b;\n      aInSum -= _a;\n      stackOut = stackOut.next;\n      yi += 4;\n    }\n\n    yw += width;\n  }\n\n  for (var _x = 0; _x < width; _x++) {\n    yi = _x << 2;\n\n    var _pr = pixels[yi],\n        _pg = pixels[yi + 1],\n        _pb = pixels[yi + 2],\n        _pa = pixels[yi + 3],\n        _rOutSum = radiusPlus1 * _pr,\n        _gOutSum = radiusPlus1 * _pg,\n        _bOutSum = radiusPlus1 * _pb,\n        _aOutSum = radiusPlus1 * _pa,\n        _rSum = sumFactor * _pr,\n        _gSum = sumFactor * _pg,\n        _bSum = sumFactor * _pb,\n        _aSum = sumFactor * _pa;\n\n    stack = stackStart;\n\n    for (var _i3 = 0; _i3 < radiusPlus1; _i3++) {\n      stack.r = _pr;\n      stack.g = _pg;\n      stack.b = _pb;\n      stack.a = _pa;\n      stack = stack.next;\n    }\n\n    var yp = width;\n    var _gInSum = 0,\n        _bInSum = 0,\n        _aInSum = 0,\n        _rInSum = 0;\n\n    for (var _i4 = 1; _i4 <= radius; _i4++) {\n      yi = yp + _x << 2;\n\n      var _rbs = radiusPlus1 - _i4;\n\n      _rSum += (stack.r = _pr = pixels[yi]) * _rbs;\n      _gSum += (stack.g = _pg = pixels[yi + 1]) * _rbs;\n      _bSum += (stack.b = _pb = pixels[yi + 2]) * _rbs;\n      _aSum += (stack.a = _pa = pixels[yi + 3]) * _rbs;\n      _rInSum += _pr;\n      _gInSum += _pg;\n      _bInSum += _pb;\n      _aInSum += _pa;\n      stack = stack.next;\n\n      if (_i4 < heightMinus1) {\n        yp += width;\n      }\n    }\n\n    yi = _x;\n    stackIn = stackStart;\n    stackOut = stackEnd;\n\n    for (var _y = 0; _y < height; _y++) {\n      var _p2 = yi << 2;\n\n      pixels[_p2 + 3] = _pa = _aSum * mulSum >>> shgSum;\n\n      if (_pa > 0) {\n        _pa = 255 / _pa;\n        pixels[_p2] = (_rSum * mulSum >>> shgSum) * _pa;\n        pixels[_p2 + 1] = (_gSum * mulSum >>> shgSum) * _pa;\n        pixels[_p2 + 2] = (_bSum * mulSum >>> shgSum) * _pa;\n      } else {\n        pixels[_p2] = pixels[_p2 + 1] = pixels[_p2 + 2] = 0;\n      }\n\n      _rSum -= _rOutSum;\n      _gSum -= _gOutSum;\n      _bSum -= _bOutSum;\n      _aSum -= _aOutSum;\n      _rOutSum -= stackIn.r;\n      _gOutSum -= stackIn.g;\n      _bOutSum -= stackIn.b;\n      _aOutSum -= stackIn.a;\n      _p2 = _x + ((_p2 = _y + radiusPlus1) < heightMinus1 ? _p2 : heightMinus1) * width << 2;\n      _rSum += _rInSum += stackIn.r = pixels[_p2];\n      _gSum += _gInSum += stackIn.g = pixels[_p2 + 1];\n      _bSum += _bInSum += stackIn.b = pixels[_p2 + 2];\n      _aSum += _aInSum += stackIn.a = pixels[_p2 + 3];\n      stackIn = stackIn.next;\n      _rOutSum += _pr = stackOut.r;\n      _gOutSum += _pg = stackOut.g;\n      _bOutSum += _pb = stackOut.b;\n      _aOutSum += _pa = stackOut.a;\n      _rInSum -= _pr;\n      _gInSum -= _pg;\n      _bInSum -= _pb;\n      _aInSum -= _pa;\n      stackOut = stackOut.next;\n      yi += width;\n    }\n  }\n\n  return imageData;\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGB(canvas, topX, topY, width, height, radius) {\n  if (isNaN(radius) || radius < 1) {\n    return;\n  }\n\n  radius |= 0;\n  var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n  imageData = processImageDataRGB(imageData, topX, topY, width, height, radius);\n  canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGB(imageData, topX, topY, width, height, radius) {\n  var pixels = imageData.data;\n  var div = 2 * radius + 1; // const w4 = width << 2;\n\n  var widthMinus1 = width - 1;\n  var heightMinus1 = height - 1;\n  var radiusPlus1 = radius + 1;\n  var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n  var stackStart = new BlurStack();\n  var stack = stackStart;\n  var stackEnd;\n\n  for (var i = 1; i < div; i++) {\n    stack = stack.next = new BlurStack();\n\n    if (i === radiusPlus1) {\n      stackEnd = stack;\n    }\n  }\n\n  stack.next = stackStart;\n  var stackIn = null;\n  var stackOut = null;\n  var mulSum = mulTable[radius];\n  var shgSum = shgTable[radius];\n  var p, rbs;\n  var yw = 0,\n      yi = 0;\n\n  for (var y = 0; y < height; y++) {\n    var pr = pixels[yi],\n        pg = pixels[yi + 1],\n        pb = pixels[yi + 2],\n        rOutSum = radiusPlus1 * pr,\n        gOutSum = radiusPlus1 * pg,\n        bOutSum = radiusPlus1 * pb,\n        rSum = sumFactor * pr,\n        gSum = sumFactor * pg,\n        bSum = sumFactor * pb;\n    stack = stackStart;\n\n    for (var _i5 = 0; _i5 < radiusPlus1; _i5++) {\n      stack.r = pr;\n      stack.g = pg;\n      stack.b = pb;\n      stack = stack.next;\n    }\n\n    var rInSum = 0,\n        gInSum = 0,\n        bInSum = 0;\n\n    for (var _i6 = 1; _i6 < radiusPlus1; _i6++) {\n      p = yi + ((widthMinus1 < _i6 ? widthMinus1 : _i6) << 2);\n      rSum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - _i6);\n      gSum += (stack.g = pg = pixels[p + 1]) * rbs;\n      bSum += (stack.b = pb = pixels[p + 2]) * rbs;\n      rInSum += pr;\n      gInSum += pg;\n      bInSum += pb;\n      stack = stack.next;\n    }\n\n    stackIn = stackStart;\n    stackOut = stackEnd;\n\n    for (var x = 0; x < width; x++) {\n      pixels[yi] = rSum * mulSum >>> shgSum;\n      pixels[yi + 1] = gSum * mulSum >>> shgSum;\n      pixels[yi + 2] = bSum * mulSum >>> shgSum;\n      rSum -= rOutSum;\n      gSum -= gOutSum;\n      bSum -= bOutSum;\n      rOutSum -= stackIn.r;\n      gOutSum -= stackIn.g;\n      bOutSum -= stackIn.b;\n      p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2;\n      rInSum += stackIn.r = pixels[p];\n      gInSum += stackIn.g = pixels[p + 1];\n      bInSum += stackIn.b = pixels[p + 2];\n      rSum += rInSum;\n      gSum += gInSum;\n      bSum += bInSum;\n      stackIn = stackIn.next;\n      rOutSum += pr = stackOut.r;\n      gOutSum += pg = stackOut.g;\n      bOutSum += pb = stackOut.b;\n      rInSum -= pr;\n      gInSum -= pg;\n      bInSum -= pb;\n      stackOut = stackOut.next;\n      yi += 4;\n    }\n\n    yw += width;\n  }\n\n  for (var _x2 = 0; _x2 < width; _x2++) {\n    yi = _x2 << 2;\n\n    var _pr2 = pixels[yi],\n        _pg2 = pixels[yi + 1],\n        _pb2 = pixels[yi + 2],\n        _rOutSum2 = radiusPlus1 * _pr2,\n        _gOutSum2 = radiusPlus1 * _pg2,\n        _bOutSum2 = radiusPlus1 * _pb2,\n        _rSum2 = sumFactor * _pr2,\n        _gSum2 = sumFactor * _pg2,\n        _bSum2 = sumFactor * _pb2;\n\n    stack = stackStart;\n\n    for (var _i7 = 0; _i7 < radiusPlus1; _i7++) {\n      stack.r = _pr2;\n      stack.g = _pg2;\n      stack.b = _pb2;\n      stack = stack.next;\n    }\n\n    var _rInSum2 = 0,\n        _gInSum2 = 0,\n        _bInSum2 = 0;\n\n    for (var _i8 = 1, yp = width; _i8 <= radius; _i8++) {\n      yi = yp + _x2 << 2;\n      _rSum2 += (stack.r = _pr2 = pixels[yi]) * (rbs = radiusPlus1 - _i8);\n      _gSum2 += (stack.g = _pg2 = pixels[yi + 1]) * rbs;\n      _bSum2 += (stack.b = _pb2 = pixels[yi + 2]) * rbs;\n      _rInSum2 += _pr2;\n      _gInSum2 += _pg2;\n      _bInSum2 += _pb2;\n      stack = stack.next;\n\n      if (_i8 < heightMinus1) {\n        yp += width;\n      }\n    }\n\n    yi = _x2;\n    stackIn = stackStart;\n    stackOut = stackEnd;\n\n    for (var _y2 = 0; _y2 < height; _y2++) {\n      p = yi << 2;\n      pixels[p] = _rSum2 * mulSum >>> shgSum;\n      pixels[p + 1] = _gSum2 * mulSum >>> shgSum;\n      pixels[p + 2] = _bSum2 * mulSum >>> shgSum;\n      _rSum2 -= _rOutSum2;\n      _gSum2 -= _gOutSum2;\n      _bSum2 -= _bOutSum2;\n      _rOutSum2 -= stackIn.r;\n      _gOutSum2 -= stackIn.g;\n      _bOutSum2 -= stackIn.b;\n      p = _x2 + ((p = _y2 + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2;\n      _rSum2 += _rInSum2 += stackIn.r = pixels[p];\n      _gSum2 += _gInSum2 += stackIn.g = pixels[p + 1];\n      _bSum2 += _bInSum2 += stackIn.b = pixels[p + 2];\n      stackIn = stackIn.next;\n      _rOutSum2 += _pr2 = stackOut.r;\n      _gOutSum2 += _pg2 = stackOut.g;\n      _bOutSum2 += _pb2 = stackOut.b;\n      _rInSum2 -= _pr2;\n      _gInSum2 -= _pg2;\n      _bInSum2 -= _pb2;\n      stackOut = stackOut.next;\n      yi += width;\n    }\n  }\n\n  return imageData;\n}\n/**\n *\n */\n\n\nvar BlurStack =\n/**\n * Set properties.\n */\nfunction BlurStack() {\n  _classCallCheck(this, BlurStack);\n\n  this.r = 0;\n  this.g = 0;\n  this.b = 0;\n  this.a = 0;\n  this.next = null;\n};\n\nexport { BlurStack, processCanvasRGB as canvasRGB, processCanvasRGBA as canvasRGBA, processImage as image, processImageDataRGB as imageDataRGB, processImageDataRGBA as imageDataRGBA };\n","import requestAnimationFrame from 'raf';\nimport RGBColor from 'rgbcolor';\nimport { SVGPathData } from 'svg-pathdata';\nimport { canvasRGBA } from 'stackblur-canvas';\n\n/**\n * Options preset for `OffscreenCanvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @returns Preset object.\n */\nfunction offscreen({ DOMParser: DOMParserFallback } = {}) {\n    const preset = {\n        window: null,\n        ignoreAnimation: true,\n        ignoreMouse: true,\n        DOMParser: DOMParserFallback,\n        createCanvas(width, height) {\n            return new OffscreenCanvas(width, height);\n        },\n        async createImage(url) {\n            const response = await fetch(url);\n            const blob = await response.blob();\n            const img = await createImageBitmap(blob);\n            return img;\n        }\n    };\n    if (typeof globalThis.DOMParser !== 'undefined'\n        || typeof DOMParserFallback === 'undefined') {\n        Reflect.deleteProperty(preset, 'DOMParser');\n    }\n    return preset;\n}\n\n/**\n * Options preset for `node-canvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @param config.canvas - `node-canvas` exports.\n * @param config.fetch - WHATWG-compatible `fetch` function.\n * @returns Preset object.\n */\nfunction node({ DOMParser, canvas, fetch }) {\n    return {\n        window: null,\n        ignoreAnimation: true,\n        ignoreMouse: true,\n        DOMParser,\n        fetch,\n        createCanvas: canvas.createCanvas,\n        createImage: canvas.loadImage\n    };\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    node: node,\n    offscreen: offscreen\n});\n\nfunction imGet(img, x, y, width, _height, rgba) {\n    return img[y * width * 4 + x * 4 + rgba];\n}\nfunction imSet(img, x, y, width, _height, rgba, val) {\n    img[y * width * 4 + x * 4 + rgba] = val;\n}\n\n/**\n * HTML-safe compress white-spaces.\n * @param str - String to compress.\n * @returns String.\n */\nfunction compressSpaces(str) {\n    return str.replace(/(?!\\u3000)\\s+/gm, ' ');\n}\n/**\n * HTML-safe left trim.\n * @param str - String to trim.\n * @returns String.\n */\nfunction trimLeft(str) {\n    return str.replace(/^[\\n \\t]+/, '');\n}\n/**\n * HTML-safe right trim.\n * @param str - String to trim.\n * @returns String.\n */\nfunction trimRight(str) {\n    return str.replace(/[\\n \\t]+$/, '');\n}\n/**\n * String to numbers array.\n * @param str - Numbers string.\n * @returns Numbers array.\n */\nfunction toNumbers(str) {\n    const matches = str.match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm);\n    return matches ? matches.map(parseFloat) : [];\n}\n/**\n * String to matrix value.\n * @param str - Numbers string.\n * @returns Matrix value.\n */\nfunction toMatrixValue(str) {\n    const numbers = toNumbers(str);\n    const matrix = [\n        numbers[0] || 0,\n        numbers[1] || 0,\n        numbers[2] || 0,\n        numbers[3] || 0,\n        numbers[4] || 0,\n        numbers[5] || 0\n    ];\n    return matrix;\n}\n// Microsoft Edge fix\nconst allUppercase = /^[A-Z-]+$/;\n/**\n * Normalize attribute name.\n * @param name - Attribute name.\n * @returns Normalized attribute name.\n */\nfunction normalizeAttributeName(name) {\n    if (allUppercase.test(name)) {\n        return name.toLowerCase();\n    }\n    return name;\n}\n/**\n * Parse external URL.\n * @param url - CSS url string.\n * @returns Parsed URL.\n */\nfunction parseExternalUrl(url) {\n    //                      single quotes [2]\n    //                      v         double quotes [3]\n    //                      v         v         no quotes [4]\n    //                      v         v         v\n    const urlMatch = /url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(url);\n    if (!urlMatch) {\n        return '';\n    }\n    return urlMatch[2] || urlMatch[3] || urlMatch[4] || '';\n}\n/**\n * Transform floats to integers in rgb colors.\n * @param color - Color to normalize.\n * @returns Normalized color.\n */\nfunction normalizeColor(color) {\n    if (!color.startsWith('rgb')) {\n        return color;\n    }\n    let rgbParts = 3;\n    const normalizedColor = color.replace(/\\d+(\\.\\d+)?/g, (num, isFloat) => (rgbParts-- && isFloat\n        ? String(Math.round(parseFloat(num)))\n        : num));\n    return normalizedColor;\n}\n\n// slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\nconst attributeRegex = /(\\[[^\\]]+\\])/g;\nconst idRegex = /(#[^\\s+>~.[:]+)/g;\nconst classRegex = /(\\.[^\\s+>~.[:]+)/g;\nconst pseudoElementRegex = /(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi;\nconst pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^)]*\\))/gi;\nconst pseudoClassRegex = /(:[^\\s+>~.[:]+)/g;\nconst elementRegex = /([^\\s+>~.[:]+)/g;\nfunction findSelectorMatch(selector, regex) {\n    const matches = regex.exec(selector);\n    if (!matches) {\n        return [selector, 0];\n    }\n    return [selector.replace(regex, ' '), matches.length];\n}\n/**\n * Measure selector specificity.\n * @param selector - Selector to measure.\n * @returns Specificity.\n */\nfunction getSelectorSpecificity(selector) {\n    const specificity = [\n        0,\n        0,\n        0\n    ];\n    let currentSelector = selector\n        .replace(/:not\\(([^)]*)\\)/g, '     $1 ')\n        .replace(/{[\\s\\S]*/gm, ' ');\n    let delta = 0;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex);\n    specificity[1] += delta;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex);\n    specificity[0] += delta;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex);\n    specificity[1] += delta;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex);\n    specificity[2] += delta;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex);\n    specificity[1] += delta;\n    [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex);\n    specificity[1] += delta;\n    currentSelector = currentSelector\n        .replace(/[*\\s+>~]/g, ' ')\n        .replace(/[#.]/g, ' ');\n    [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex); // lgtm [js/useless-assignment-to-local]\n    specificity[2] += delta;\n    return specificity.join('');\n}\n\nconst PSEUDO_ZERO = .00000001;\n/**\n * Vector magnitude.\n * @param v\n * @returns Number result.\n */\nfunction vectorMagnitude(v) {\n    return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2));\n}\n/**\n * Ratio between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nfunction vectorsRatio(u, v) {\n    return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v));\n}\n/**\n * Angle between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nfunction vectorsAngle(u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v));\n}\nfunction CB1(t) {\n    return t * t * t;\n}\nfunction CB2(t) {\n    return 3 * t * t * (1 - t);\n}\nfunction CB3(t) {\n    return 3 * t * (1 - t) * (1 - t);\n}\nfunction CB4(t) {\n    return (1 - t) * (1 - t) * (1 - t);\n}\nfunction QB1(t) {\n    return t * t;\n}\nfunction QB2(t) {\n    return 2 * t * (1 - t);\n}\nfunction QB3(t) {\n    return (1 - t) * (1 - t);\n}\n\n/* eslint-disable @typescript-eslint/prefer-ts-expect-error */\nclass Property {\n    document;\n    name;\n    value;\n    static empty(document) {\n        return new Property(document, 'EMPTY', '');\n    }\n    static textBaselineMapping = {\n        'baseline': 'alphabetic',\n        'before-edge': 'top',\n        'text-before-edge': 'top',\n        'middle': 'middle',\n        'central': 'middle',\n        'after-edge': 'bottom',\n        'text-after-edge': 'bottom',\n        'ideographic': 'ideographic',\n        'alphabetic': 'alphabetic',\n        'hanging': 'hanging',\n        'mathematical': 'alphabetic'\n    };\n    isNormalizedColor = false;\n    constructor(document, name, value) {\n        this.document = document;\n        this.name = name;\n        this.value = value;\n    }\n    split(separator = ' ') {\n        const { document, name } = this;\n        return compressSpaces(this.getString())\n            .trim()\n            .split(separator)\n            .map(value => new Property(document, name, value));\n    }\n    hasValue(zeroIsValue) {\n        const value = this.value;\n        return value !== null\n            && value !== ''\n            && (zeroIsValue || value !== 0)\n            && typeof value !== 'undefined';\n    }\n    isString(regexp) {\n        const { value } = this;\n        const result = typeof value === 'string';\n        if (!result || !regexp) {\n            return result;\n        }\n        return regexp.test(value);\n    }\n    isUrlDefinition() {\n        return this.isString(/^url\\(/);\n    }\n    isPixels() {\n        if (!this.hasValue()) {\n            return false;\n        }\n        const asString = this.getString();\n        switch (true) {\n            case asString.endsWith('px'):\n            case /^[0-9]+$/.test(asString):\n                return true;\n            default:\n                return false;\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        return this;\n    }\n    getValue(def) {\n        if (typeof def === 'undefined' || this.hasValue()) {\n            return this.value;\n        }\n        return def;\n    }\n    getNumber(def) {\n        if (!this.hasValue()) {\n            if (typeof def === 'undefined') {\n                return 0;\n            }\n            // @ts-ignore Parse unknown value.\n            return parseFloat(def);\n        }\n        const { value } = this;\n        // @ts-ignore Parse unknown value.\n        let n = parseFloat(value);\n        if (this.isString(/%$/)) {\n            n /= 100.0;\n        }\n        return n;\n    }\n    getString(def) {\n        if (typeof def === 'undefined' || this.hasValue()) {\n            return typeof this.value === 'undefined'\n                ? ''\n                : String(this.value);\n        }\n        return String(def);\n    }\n    getColor(def) {\n        let color = this.getString(def);\n        if (this.isNormalizedColor) {\n            return color;\n        }\n        this.isNormalizedColor = true;\n        color = normalizeColor(color);\n        this.value = color;\n        return color;\n    }\n    getDpi() {\n        return 96.0; // TODO: compute?\n    }\n    getRem() {\n        return this.document.rootEmSize;\n    }\n    getEm() {\n        return this.document.emSize;\n    }\n    getUnits() {\n        return this.getString().replace(/[0-9.-]/g, '');\n    }\n    getPixels(axisOrIsFontSize, processPercent = false) {\n        if (!this.hasValue()) {\n            return 0;\n        }\n        const [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean'\n            ? [undefined, axisOrIsFontSize]\n            : [axisOrIsFontSize];\n        const { viewPort } = this.document.screen;\n        switch (true) {\n            case this.isString(/vmin$/):\n                return this.getNumber()\n                    / 100.0\n                    * Math.min(viewPort.computeSize('x'), viewPort.computeSize('y'));\n            case this.isString(/vmax$/):\n                return this.getNumber()\n                    / 100.0\n                    * Math.max(viewPort.computeSize('x'), viewPort.computeSize('y'));\n            case this.isString(/vw$/):\n                return this.getNumber()\n                    / 100.0\n                    * viewPort.computeSize('x');\n            case this.isString(/vh$/):\n                return this.getNumber()\n                    / 100.0\n                    * viewPort.computeSize('y');\n            case this.isString(/rem$/):\n                return this.getNumber() * this.getRem( /* viewPort */);\n            case this.isString(/em$/):\n                return this.getNumber() * this.getEm( /* viewPort */);\n            case this.isString(/ex$/):\n                return this.getNumber() * this.getEm( /* viewPort */) / 2.0;\n            case this.isString(/px$/):\n                return this.getNumber();\n            case this.isString(/pt$/):\n                return this.getNumber() * this.getDpi( /* viewPort */) * (1.0 / 72.0);\n            case this.isString(/pc$/):\n                return this.getNumber() * 15;\n            case this.isString(/cm$/):\n                return this.getNumber() * this.getDpi( /* viewPort */) / 2.54;\n            case this.isString(/mm$/):\n                return this.getNumber() * this.getDpi( /* viewPort */) / 25.4;\n            case this.isString(/in$/):\n                return this.getNumber() * this.getDpi( /* viewPort */);\n            case this.isString(/%$/) && isFontSize:\n                return this.getNumber() * this.getEm( /* viewPort */);\n            case this.isString(/%$/):\n                return this.getNumber() * viewPort.computeSize(axis);\n            default: {\n                const n = this.getNumber();\n                if (processPercent && n < 1.0) {\n                    return n * viewPort.computeSize(axis);\n                }\n                return n;\n            }\n        }\n    }\n    getMilliseconds() {\n        if (!this.hasValue()) {\n            return 0;\n        }\n        if (this.isString(/ms$/)) {\n            return this.getNumber();\n        }\n        return this.getNumber() * 1000;\n    }\n    getRadians() {\n        if (!this.hasValue()) {\n            return 0;\n        }\n        switch (true) {\n            case this.isString(/deg$/):\n                return this.getNumber() * (Math.PI / 180.0);\n            case this.isString(/grad$/):\n                return this.getNumber() * (Math.PI / 200.0);\n            case this.isString(/rad$/):\n                return this.getNumber();\n            default:\n                return this.getNumber() * (Math.PI / 180.0);\n        }\n    }\n    getDefinition() {\n        const asString = this.getString();\n        const match = /#([^)'\"]+)/.exec(asString);\n        const name = match?.[1] || asString;\n        return this.document.definitions[name];\n    }\n    getFillStyleDefinition(element, opacity) {\n        let def = this.getDefinition();\n        if (!def) {\n            return null;\n        }\n        // gradient\n        if (typeof def.createGradient === 'function' && 'getBoundingBox' in element) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return def.createGradient(this.document.ctx, element, opacity);\n        }\n        // pattern\n        if (typeof def.createPattern === 'function') {\n            if (def.getHrefAttribute().hasValue()) {\n                const patternTransform = def.getAttribute('patternTransform');\n                def = def.getHrefAttribute().getDefinition();\n                if (def && patternTransform.hasValue()) {\n                    def.getAttribute('patternTransform', true).setValue(patternTransform.value);\n                }\n            }\n            if (def) {\n                return def.createPattern(this.document.ctx, element, opacity);\n            }\n        }\n        return null;\n    }\n    getTextBaseline() {\n        if (!this.hasValue()) {\n            return null;\n        }\n        const key = this.getString();\n        return Property.textBaselineMapping[key] || null;\n    }\n    addOpacity(opacity) {\n        let value = this.getColor();\n        const len = value.length;\n        let commas = 0;\n        // Simulate old RGBColor version, which can't parse rgba.\n        for (let i = 0; i < len; i++) {\n            if (value[i] === ',') {\n                commas++;\n            }\n            if (commas === 3) {\n                break;\n            }\n        }\n        if (opacity.hasValue() && this.isString() && commas !== 3) {\n            const color = new RGBColor(value);\n            if (color.ok) {\n                color.alpha = opacity.getNumber();\n                value = color.toRGBA();\n            }\n        }\n        return new Property(this.document, this.name, value);\n    }\n}\n\nclass ViewPort {\n    static DEFAULT_VIEWPORT_WIDTH = 800;\n    static DEFAULT_VIEWPORT_HEIGHT = 600;\n    viewPorts = [];\n    clear() {\n        this.viewPorts = [];\n    }\n    setCurrent(width, height) {\n        this.viewPorts.push({\n            width,\n            height\n        });\n    }\n    removeCurrent() {\n        this.viewPorts.pop();\n    }\n    getRoot() {\n        const [root] = this.viewPorts;\n        if (!root) {\n            return getDefault();\n        }\n        return root;\n    }\n    getCurrent() {\n        const { viewPorts } = this;\n        const current = viewPorts[viewPorts.length - 1];\n        if (!current) {\n            return getDefault();\n        }\n        return current;\n    }\n    get width() {\n        return this.getCurrent().width;\n    }\n    get height() {\n        return this.getCurrent().height;\n    }\n    computeSize(d) {\n        if (typeof d === 'number') {\n            return d;\n        }\n        if (d === 'x') {\n            return this.width;\n        }\n        if (d === 'y') {\n            return this.height;\n        }\n        return Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2)) / Math.sqrt(2);\n    }\n}\nfunction getDefault() {\n    return {\n        width: ViewPort.DEFAULT_VIEWPORT_WIDTH,\n        height: ViewPort.DEFAULT_VIEWPORT_HEIGHT\n    };\n}\n\nclass Point {\n    x;\n    y;\n    static parse(point, defaultValue = 0) {\n        const [x = defaultValue, y = defaultValue] = toNumbers(point);\n        return new Point(x, y);\n    }\n    static parseScale(scale, defaultValue = 1) {\n        const [x = defaultValue, y = x] = toNumbers(scale);\n        return new Point(x, y);\n    }\n    static parsePath(path) {\n        const points = toNumbers(path);\n        const len = points.length;\n        const pathPoints = [];\n        for (let i = 0; i < len; i += 2) {\n            pathPoints.push(new Point(points[i], points[i + 1]));\n        }\n        return pathPoints;\n    }\n    constructor(x, y) {\n        this.x = x;\n        this.y = y;\n    }\n    angleTo(point) {\n        return Math.atan2(point.y - this.y, point.x - this.x);\n    }\n    applyTransform(transform) {\n        const { x, y } = this;\n        const xp = x * transform[0] + y * transform[2] + transform[4];\n        const yp = x * transform[1] + y * transform[3] + transform[5];\n        this.x = xp;\n        this.y = yp;\n    }\n}\n\nclass Mouse {\n    screen;\n    working = false;\n    events = [];\n    eventElements = [];\n    constructor(screen) {\n        this.screen = screen;\n        this.onClick = this.onClick.bind(this);\n        this.onMouseMove = this.onMouseMove.bind(this);\n    }\n    isWorking() {\n        return this.working;\n    }\n    start() {\n        if (this.working) {\n            return;\n        }\n        const { screen, onClick, onMouseMove } = this;\n        const canvas = screen.ctx.canvas;\n        canvas.onclick = onClick;\n        canvas.onmousemove = onMouseMove;\n        this.working = true;\n    }\n    stop() {\n        if (!this.working) {\n            return;\n        }\n        const canvas = this.screen.ctx.canvas;\n        this.working = false;\n        canvas.onclick = null;\n        canvas.onmousemove = null;\n    }\n    hasEvents() {\n        return this.working && this.events.length > 0;\n    }\n    runEvents() {\n        if (!this.working) {\n            return;\n        }\n        const { screen: document, events, eventElements } = this;\n        const { style } = document.ctx.canvas;\n        let element;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (style) {\n            style.cursor = '';\n        }\n        events.forEach(({ run }, i) => {\n            element = eventElements[i];\n            while (element) {\n                run(element);\n                element = element.parent;\n            }\n        });\n        // done running, clear\n        this.events = [];\n        this.eventElements = [];\n    }\n    checkPath(element, ctx) {\n        if (!this.working || !ctx) {\n            return;\n        }\n        const { events, eventElements } = this;\n        events.forEach(({ x, y }, i) => {\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n                eventElements[i] = element;\n            }\n        });\n    }\n    checkBoundingBox(element, boundingBox) {\n        if (!this.working || !boundingBox) {\n            return;\n        }\n        const { events, eventElements } = this;\n        events.forEach(({ x, y }, i) => {\n            if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n                eventElements[i] = element;\n            }\n        });\n    }\n    mapXY(x, y) {\n        const { window, ctx } = this.screen;\n        const point = new Point(x, y);\n        let element = ctx.canvas;\n        while (element) {\n            point.x -= element.offsetLeft;\n            point.y -= element.offsetTop;\n            element = element.offsetParent;\n        }\n        if (window?.scrollX) {\n            point.x += window.scrollX;\n        }\n        if (window?.scrollY) {\n            point.y += window.scrollY;\n        }\n        return point;\n    }\n    onClick(event) {\n        const { x, y } = this.mapXY(event.clientX, event.clientY);\n        this.events.push({\n            type: 'onclick',\n            x,\n            y,\n            run(eventTarget) {\n                if (eventTarget.onClick) {\n                    eventTarget.onClick();\n                }\n            }\n        });\n    }\n    onMouseMove(event) {\n        const { x, y } = this.mapXY(event.clientX, event.clientY);\n        this.events.push({\n            type: 'onmousemove',\n            x,\n            y,\n            run(eventTarget) {\n                if (eventTarget.onMouseMove) {\n                    eventTarget.onMouseMove();\n                }\n            }\n        });\n    }\n}\n\nconst defaultWindow = typeof window !== 'undefined'\n    ? window\n    : null;\nconst defaultFetch$1 = typeof fetch !== 'undefined'\n    ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error.\n    : undefined;\nclass Screen {\n    ctx;\n    static defaultWindow = defaultWindow;\n    static defaultFetch = defaultFetch$1;\n    static FRAMERATE = 30;\n    static MAX_VIRTUAL_PIXELS = 30000;\n    window;\n    fetch;\n    viewPort = new ViewPort();\n    mouse = new Mouse(this);\n    animations = [];\n    readyPromise;\n    resolveReady;\n    waits = [];\n    frameDuration = 0;\n    isReadyLock = false;\n    isFirstRender = true;\n    intervalId = null;\n    constructor(ctx, { fetch = defaultFetch$1, window = defaultWindow } = {}) {\n        this.ctx = ctx;\n        this.window = window;\n        if (!fetch) {\n            throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`);\n        }\n        this.fetch = fetch;\n    }\n    wait(checker) {\n        this.waits.push(checker);\n    }\n    ready() {\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        if (!this.readyPromise) {\n            return Promise.resolve();\n        }\n        return this.readyPromise;\n    }\n    isReady() {\n        if (this.isReadyLock) {\n            return true;\n        }\n        const isReadyLock = this.waits.every(_ => _());\n        if (isReadyLock) {\n            this.waits = [];\n            if (this.resolveReady) {\n                this.resolveReady();\n            }\n        }\n        this.isReadyLock = isReadyLock;\n        return isReadyLock;\n    }\n    setDefaults(ctx) {\n        // initial values and defaults\n        ctx.strokeStyle = 'rgba(0,0,0,0)';\n        ctx.lineCap = 'butt';\n        ctx.lineJoin = 'miter';\n        ctx.miterLimit = 4;\n    }\n    setViewBox({ document, ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX = 0, minY = 0, refX, refY, clip = false, clipX = 0, clipY = 0 }) {\n        // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n        const cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\\s/, ''); // ignore defer\n        const [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(' ');\n        const align = aspectRatioAlign || 'xMidYMid';\n        const meetOrSlice = aspectRatioMeetOrSlice || 'meet';\n        // calculate scale\n        const scaleX = width / desiredWidth;\n        const scaleY = height / desiredHeight;\n        const scaleMin = Math.min(scaleX, scaleY);\n        const scaleMax = Math.max(scaleX, scaleY);\n        let finalDesiredWidth = desiredWidth;\n        let finalDesiredHeight = desiredHeight;\n        if (meetOrSlice === 'meet') {\n            finalDesiredWidth *= scaleMin;\n            finalDesiredHeight *= scaleMin;\n        }\n        if (meetOrSlice === 'slice') {\n            finalDesiredWidth *= scaleMax;\n            finalDesiredHeight *= scaleMax;\n        }\n        const refXProp = new Property(document, 'refX', refX);\n        const refYProp = new Property(document, 'refY', refY);\n        const hasRefs = refXProp.hasValue() && refYProp.hasValue();\n        if (hasRefs) {\n            ctx.translate(-scaleMin * refXProp.getPixels('x'), -scaleMin * refYProp.getPixels('y'));\n        }\n        if (clip) {\n            const scaledClipX = scaleMin * clipX;\n            const scaledClipY = scaleMin * clipY;\n            ctx.beginPath();\n            ctx.moveTo(scaledClipX, scaledClipY);\n            ctx.lineTo(width, scaledClipY);\n            ctx.lineTo(width, height);\n            ctx.lineTo(scaledClipX, height);\n            ctx.closePath();\n            ctx.clip();\n        }\n        if (!hasRefs) {\n            const isMeetMinY = meetOrSlice === 'meet' && scaleMin === scaleY;\n            const isSliceMaxY = meetOrSlice === 'slice' && scaleMax === scaleY;\n            const isMeetMinX = meetOrSlice === 'meet' && scaleMin === scaleX;\n            const isSliceMaxX = meetOrSlice === 'slice' && scaleMax === scaleX;\n            if (align.startsWith('xMid') && (isMeetMinY || isSliceMaxY)) {\n                ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0);\n            }\n            if (align.endsWith('YMid') && (isMeetMinX || isSliceMaxX)) {\n                ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0);\n            }\n            if (align.startsWith('xMax') && (isMeetMinY || isSliceMaxY)) {\n                ctx.translate(width - finalDesiredWidth, 0);\n            }\n            if (align.endsWith('YMax') && (isMeetMinX || isSliceMaxX)) {\n                ctx.translate(0, height - finalDesiredHeight);\n            }\n        }\n        // scale\n        switch (true) {\n            case align === 'none':\n                ctx.scale(scaleX, scaleY);\n                break;\n            case meetOrSlice === 'meet':\n                ctx.scale(scaleMin, scaleMin);\n                break;\n            case meetOrSlice === 'slice':\n                ctx.scale(scaleMax, scaleMax);\n                break;\n        }\n        // translate\n        ctx.translate(-minX, -minY);\n    }\n    start(element, { enableRedraw = false, ignoreMouse = false, ignoreAnimation = false, ignoreDimensions = false, ignoreClear = false, forceRedraw, scaleWidth, scaleHeight, offsetX, offsetY } = {}) {\n        const { mouse } = this;\n        const frameDuration = 1000 / Screen.FRAMERATE;\n        this.isReadyLock = false;\n        this.frameDuration = frameDuration;\n        this.readyPromise = new Promise((resolve) => {\n            this.resolveReady = resolve;\n        });\n        if (this.isReady()) {\n            this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n        }\n        if (!enableRedraw) {\n            return;\n        }\n        let now = Date.now();\n        let then = now;\n        let delta = 0;\n        const tick = () => {\n            now = Date.now();\n            delta = now - then;\n            if (delta >= frameDuration) {\n                then = now - (delta % frameDuration);\n                if (this.shouldUpdate(ignoreAnimation, forceRedraw)) {\n                    this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n                    mouse.runEvents();\n                }\n            }\n            this.intervalId = requestAnimationFrame(tick);\n        };\n        if (!ignoreMouse) {\n            mouse.start();\n        }\n        this.intervalId = requestAnimationFrame(tick);\n    }\n    stop() {\n        if (this.intervalId) {\n            requestAnimationFrame.cancel(this.intervalId);\n            this.intervalId = null;\n        }\n        this.mouse.stop();\n    }\n    shouldUpdate(ignoreAnimation, forceRedraw) {\n        // need update from animations?\n        if (!ignoreAnimation) {\n            const { frameDuration } = this;\n            const shouldUpdate = this.animations.reduce((shouldUpdate, animation) => animation.update(frameDuration) || shouldUpdate, false);\n            if (shouldUpdate) {\n                return true;\n            }\n        }\n        // need update from redraw?\n        if (typeof forceRedraw === 'function' && forceRedraw()) {\n            return true;\n        }\n        if (!this.isReadyLock && this.isReady()) {\n            return true;\n        }\n        // need update from mouse events?\n        if (this.mouse.hasEvents()) {\n            return true;\n        }\n        return false;\n    }\n    render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY) {\n        const { viewPort, ctx, isFirstRender } = this;\n        const canvas = ctx.canvas;\n        viewPort.clear();\n        if (canvas.width && canvas.height) {\n            viewPort.setCurrent(canvas.width, canvas.height);\n        }\n        const widthStyle = element.getStyle('width');\n        const heightStyle = element.getStyle('height');\n        if (!ignoreDimensions && (isFirstRender\n            || typeof scaleWidth !== 'number' && typeof scaleHeight !== 'number')) {\n            // set canvas size\n            if (widthStyle.hasValue()) {\n                canvas.width = widthStyle.getPixels('x');\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                if (canvas.style) {\n                    canvas.style.width = `${canvas.width}px`;\n                }\n            }\n            if (heightStyle.hasValue()) {\n                canvas.height = heightStyle.getPixels('y');\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                if (canvas.style) {\n                    canvas.style.height = `${canvas.height}px`;\n                }\n            }\n        }\n        let cWidth = canvas.clientWidth || canvas.width;\n        let cHeight = canvas.clientHeight || canvas.height;\n        if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) {\n            cWidth = widthStyle.getPixels('x');\n            cHeight = heightStyle.getPixels('y');\n        }\n        viewPort.setCurrent(cWidth, cHeight);\n        if (typeof offsetX === 'number') {\n            element.getAttribute('x', true).setValue(offsetX);\n        }\n        if (typeof offsetY === 'number') {\n            element.getAttribute('y', true).setValue(offsetY);\n        }\n        if (typeof scaleWidth === 'number'\n            || typeof scaleHeight === 'number') {\n            const viewBox = toNumbers(element.getAttribute('viewBox').getString());\n            let xRatio = 0;\n            let yRatio = 0;\n            if (typeof scaleWidth === 'number') {\n                const widthStyle = element.getStyle('width');\n                if (widthStyle.hasValue()) {\n                    xRatio = widthStyle.getPixels('x') / scaleWidth;\n                }\n                else if (viewBox[2] && !isNaN(viewBox[2])) {\n                    xRatio = viewBox[2] / scaleWidth;\n                }\n            }\n            if (typeof scaleHeight === 'number') {\n                const heightStyle = element.getStyle('height');\n                if (heightStyle.hasValue()) {\n                    yRatio = heightStyle.getPixels('y') / scaleHeight;\n                }\n                else if (viewBox[3] && !isNaN(viewBox[3])) {\n                    yRatio = viewBox[3] / scaleHeight;\n                }\n            }\n            if (!xRatio) {\n                xRatio = yRatio;\n            }\n            if (!yRatio) {\n                yRatio = xRatio;\n            }\n            element.getAttribute('width', true).setValue(scaleWidth);\n            element.getAttribute('height', true).setValue(scaleHeight);\n            const transformStyle = element.getStyle('transform', true, true);\n            transformStyle.setValue(`${transformStyle.getString()} scale(${1.0 / xRatio}, ${1.0 / yRatio})`);\n        }\n        // clear and render\n        if (!ignoreClear) {\n            ctx.clearRect(0, 0, cWidth, cHeight);\n        }\n        element.render(ctx);\n        if (isFirstRender) {\n            this.isFirstRender = false;\n        }\n    }\n}\n\nconst { defaultFetch } = Screen;\nconst DefaultDOMParser = typeof DOMParser !== 'undefined'\n    ? DOMParser\n    : undefined;\nclass Parser {\n    fetch;\n    DOMParser;\n    constructor({ fetch = defaultFetch, DOMParser = DefaultDOMParser } = {}) {\n        if (!fetch) {\n            throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`);\n        }\n        if (!DOMParser) {\n            throw new Error(`Can't find 'DOMParser' in 'globalThis', please provide it via options`);\n        }\n        this.fetch = fetch;\n        this.DOMParser = DOMParser;\n    }\n    async parse(resource) {\n        if (resource.startsWith('<')) {\n            return this.parseFromString(resource);\n        }\n        return this.load(resource);\n    }\n    parseFromString(xml) {\n        const parser = new this.DOMParser();\n        try {\n            return this.checkDocument(parser.parseFromString(xml, 'image/svg+xml'));\n        }\n        catch (err) {\n            return this.checkDocument(parser.parseFromString(xml, 'text/xml'));\n        }\n    }\n    checkDocument(document) {\n        const parserError = document.getElementsByTagName('parsererror')[0];\n        if (parserError) {\n            throw new Error(parserError.textContent || 'Unknown parse error');\n        }\n        return document;\n    }\n    async load(url) {\n        const response = await this.fetch(url);\n        const xml = await response.text();\n        return this.parseFromString(xml);\n    }\n}\n\nclass Translate {\n    type = 'translate';\n    point;\n    constructor(_, point) {\n        this.point = Point.parse(point);\n    }\n    apply(ctx) {\n        const { x, y } = this.point;\n        ctx.translate(x || 0.0, y || 0.0);\n    }\n    unapply(ctx) {\n        const { x, y } = this.point;\n        ctx.translate(-1.0 * x || 0.0, -1.0 * y || 0.0);\n    }\n    applyToPoint(point) {\n        const { x, y } = this.point;\n        point.applyTransform([\n            1,\n            0,\n            0,\n            1,\n            x || 0.0,\n            y || 0.0\n        ]);\n    }\n}\n\nclass Rotate {\n    type = 'rotate';\n    angle;\n    originX;\n    originY;\n    cx;\n    cy;\n    constructor(document, rotate, transformOrigin) {\n        const numbers = toNumbers(rotate);\n        this.angle = new Property(document, 'angle', numbers[0]);\n        this.originX = transformOrigin[0];\n        this.originY = transformOrigin[1];\n        this.cx = numbers[1] || 0;\n        this.cy = numbers[2] || 0;\n    }\n    apply(ctx) {\n        const { cx, cy, originX, originY, angle } = this;\n        const tx = cx + originX.getPixels('x');\n        const ty = cy + originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.rotate(angle.getRadians());\n        ctx.translate(-tx, -ty);\n    }\n    unapply(ctx) {\n        const { cx, cy, originX, originY, angle } = this;\n        const tx = cx + originX.getPixels('x');\n        const ty = cy + originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.rotate(-1.0 * angle.getRadians());\n        ctx.translate(-tx, -ty);\n    }\n    applyToPoint(point) {\n        const { cx, cy, angle } = this;\n        const rad = angle.getRadians();\n        point.applyTransform([\n            1,\n            0,\n            0,\n            1,\n            cx || 0.0,\n            cy || 0.0 // this.p.y\n        ]);\n        point.applyTransform([\n            Math.cos(rad),\n            Math.sin(rad),\n            -Math.sin(rad),\n            Math.cos(rad),\n            0,\n            0\n        ]);\n        point.applyTransform([\n            1,\n            0,\n            0,\n            1,\n            -cx || 0.0,\n            -cy || 0.0 // -this.p.y\n        ]);\n    }\n}\n\nclass Scale {\n    type = 'scale';\n    scale;\n    originX;\n    originY;\n    constructor(_, scale, transformOrigin) {\n        const scaleSize = Point.parseScale(scale);\n        // Workaround for node-canvas\n        if (scaleSize.x === 0\n            || scaleSize.y === 0) {\n            scaleSize.x = PSEUDO_ZERO;\n            scaleSize.y = PSEUDO_ZERO;\n        }\n        this.scale = scaleSize;\n        this.originX = transformOrigin[0];\n        this.originY = transformOrigin[1];\n    }\n    apply(ctx) {\n        const { scale: { x, y }, originX, originY } = this;\n        const tx = originX.getPixels('x');\n        const ty = originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.scale(x, y || x);\n        ctx.translate(-tx, -ty);\n    }\n    unapply(ctx) {\n        const { scale: { x, y }, originX, originY } = this;\n        const tx = originX.getPixels('x');\n        const ty = originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.scale(1.0 / x, 1.0 / y || x);\n        ctx.translate(-tx, -ty);\n    }\n    applyToPoint(point) {\n        const { x, y } = this.scale;\n        point.applyTransform([\n            x || 0.0,\n            0,\n            0,\n            y || 0.0,\n            0,\n            0\n        ]);\n    }\n}\n\nclass Matrix {\n    type = 'matrix';\n    matrix;\n    originX;\n    originY;\n    constructor(_, matrix, transformOrigin) {\n        this.matrix = toMatrixValue(matrix);\n        this.originX = transformOrigin[0];\n        this.originY = transformOrigin[1];\n    }\n    apply(ctx) {\n        const { originX, originY, matrix } = this;\n        const tx = originX.getPixels('x');\n        const ty = originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n        ctx.translate(-tx, -ty);\n    }\n    unapply(ctx) {\n        const { originX, originY, matrix } = this;\n        const a = matrix[0];\n        const b = matrix[2];\n        const c = matrix[4];\n        const d = matrix[1];\n        const e = matrix[3];\n        const f = matrix[5];\n        const g = 0.0;\n        const h = 0.0;\n        const i = 1.0;\n        const det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g));\n        const tx = originX.getPixels('x');\n        const ty = originY.getPixels('y');\n        ctx.translate(tx, ty);\n        ctx.transform(det * (e * i - f * h), det * (f * g - d * i), det * (c * h - b * i), det * (a * i - c * g), det * (b * f - c * e), det * (c * d - a * f));\n        ctx.translate(-tx, -ty);\n    }\n    applyToPoint(point) {\n        point.applyTransform(this.matrix);\n    }\n}\n\nclass Skew extends Matrix {\n    type = 'skew';\n    angle;\n    constructor(document, skew, transformOrigin) {\n        super(document, skew, transformOrigin);\n        this.angle = new Property(document, 'angle', skew);\n    }\n}\n\nclass SkewX extends Skew {\n    type = 'skewX';\n    constructor(document, skew, transformOrigin) {\n        super(document, skew, transformOrigin);\n        this.matrix = [\n            1,\n            0,\n            Math.tan(this.angle.getRadians()),\n            1,\n            0,\n            0\n        ];\n    }\n}\n\nclass SkewY extends Skew {\n    type = 'skewY';\n    constructor(document, skew, transformOrigin) {\n        super(document, skew, transformOrigin);\n        this.matrix = [\n            1,\n            Math.tan(this.angle.getRadians()),\n            0,\n            1,\n            0,\n            0\n        ];\n    }\n}\n\nfunction parseTransforms(transform) {\n    return compressSpaces(transform)\n        .trim()\n        .replace(/\\)([a-zA-Z])/g, ') $1')\n        .replace(/\\)(\\s?,\\s?)/g, ') ')\n        .split(/\\s(?=[a-z])/);\n}\nfunction parseTransform(transform) {\n    const [type = '', value = ''] = transform.split('(');\n    return [type.trim(), value.trim().replace(')', '')];\n}\nclass Transform {\n    document;\n    static fromElement(document, element) {\n        const transformStyle = element.getStyle('transform', false, true);\n        if (transformStyle.hasValue()) {\n            const [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle('transform-origin', false, true).split();\n            if (transformOriginXProperty && transformOriginYProperty) {\n                const transformOrigin = [transformOriginXProperty, transformOriginYProperty];\n                return new Transform(document, transformStyle.getString(), transformOrigin);\n            }\n        }\n        return null;\n    }\n    static transformTypes = {\n        translate: Translate,\n        rotate: Rotate,\n        scale: Scale,\n        matrix: Matrix,\n        skewX: SkewX,\n        skewY: SkewY\n    };\n    transforms = [];\n    constructor(document, transform, transformOrigin) {\n        this.document = document;\n        const data = parseTransforms(transform);\n        data.forEach((transform) => {\n            if (transform === 'none') {\n                return;\n            }\n            const [type, value] = parseTransform(transform);\n            const TransformType = Transform.transformTypes[type];\n            if (TransformType) {\n                this.transforms.push(new TransformType(this.document, value, transformOrigin));\n            }\n        });\n    }\n    apply(ctx) {\n        this.transforms.forEach(transform => transform.apply(ctx));\n    }\n    unapply(ctx) {\n        this.transforms.forEach(transform => transform.unapply(ctx));\n    }\n    // TODO: applyToPoint unused ... remove?\n    applyToPoint(point) {\n        this.transforms.forEach(transform => transform.applyToPoint(point));\n    }\n}\n\nclass Element {\n    document;\n    node;\n    captureTextNodes;\n    static ignoreChildTypes = ['title'];\n    type = '';\n    attributes = {};\n    styles = {};\n    stylesSpecificity = {};\n    animationFrozen = false;\n    animationFrozenValue = '';\n    parent = null;\n    children = [];\n    constructor(document, node, captureTextNodes = false) {\n        this.document = document;\n        this.node = node;\n        this.captureTextNodes = captureTextNodes;\n        if (!node || node.nodeType !== 1) { // ELEMENT_NODE\n            return;\n        }\n        // add attributes\n        Array.from(node.attributes).forEach((attribute) => {\n            const nodeName = normalizeAttributeName(attribute.nodeName);\n            this.attributes[nodeName] = new Property(document, nodeName, attribute.value);\n        });\n        this.addStylesFromStyleDefinition();\n        // add inline styles\n        if (this.getAttribute('style').hasValue()) {\n            const styles = this.getAttribute('style')\n                .getString()\n                .split(';')\n                .map(_ => _.trim());\n            styles.forEach((style) => {\n                if (!style) {\n                    return;\n                }\n                const [name, value] = style.split(':').map(_ => _.trim());\n                if (name) {\n                    this.styles[name] = new Property(document, name, value);\n                }\n            });\n        }\n        const { definitions } = document;\n        const id = this.getAttribute('id');\n        // add id\n        if (id.hasValue()) {\n            if (!definitions[id.getString()]) {\n                definitions[id.getString()] = this;\n            }\n        }\n        Array.from(node.childNodes).forEach((childNode) => {\n            if (childNode.nodeType === 1) {\n                this.addChild(childNode); // ELEMENT_NODE\n            }\n            else if (captureTextNodes && (childNode.nodeType === 3\n                || childNode.nodeType === 4)) {\n                const textNode = document.createTextNode(childNode);\n                if (textNode.getText().length > 0) {\n                    this.addChild(textNode); // TEXT_NODE\n                }\n            }\n        });\n    }\n    getAttribute(name, createIfNotExists = false) {\n        const attr = this.attributes[name];\n        if (!attr && createIfNotExists) {\n            const attr = new Property(this.document, name, '');\n            this.attributes[name] = attr;\n            return attr;\n        }\n        return attr || Property.empty(this.document);\n    }\n    getHrefAttribute() {\n        let href;\n        for (const key in this.attributes) {\n            if (key === 'href' || key.endsWith(':href')) {\n                href = this.attributes[key];\n                break;\n            }\n        }\n        return href || Property.empty(this.document);\n    }\n    getStyle(name, createIfNotExists = false, skipAncestors = false) {\n        const style = this.styles[name];\n        if (style) {\n            return style;\n        }\n        const attr = this.getAttribute(name);\n        if (attr.hasValue()) {\n            this.styles[name] = attr; // move up to me to cache\n            return attr;\n        }\n        if (!skipAncestors) {\n            const { parent } = this;\n            if (parent) {\n                const parentStyle = parent.getStyle(name);\n                if (parentStyle.hasValue()) {\n                    return parentStyle;\n                }\n            }\n        }\n        if (createIfNotExists) {\n            const style = new Property(this.document, name, '');\n            this.styles[name] = style;\n            return style;\n        }\n        return Property.empty(this.document);\n    }\n    render(ctx) {\n        // don't render display=none\n        // don't render visibility=hidden\n        if (this.getStyle('display').getString() === 'none'\n            || this.getStyle('visibility').getString() === 'hidden') {\n            return;\n        }\n        ctx.save();\n        if (this.getStyle('mask').hasValue()) { // mask\n            const mask = this.getStyle('mask').getDefinition();\n            if (mask) {\n                this.applyEffects(ctx);\n                mask.apply(ctx, this);\n            }\n        }\n        else if (this.getStyle('filter').getValue('none') !== 'none') { // filter\n            const filter = this.getStyle('filter').getDefinition();\n            if (filter) {\n                this.applyEffects(ctx);\n                filter.apply(ctx, this);\n            }\n        }\n        else {\n            this.setContext(ctx);\n            this.renderChildren(ctx);\n            this.clearContext(ctx);\n        }\n        ctx.restore();\n    }\n    setContext(_) {\n        // NO RENDER\n    }\n    applyEffects(ctx) {\n        // transform\n        const transform = Transform.fromElement(this.document, this);\n        if (transform) {\n            transform.apply(ctx);\n        }\n        // clip\n        const clipPathStyleProp = this.getStyle('clip-path', false, true);\n        if (clipPathStyleProp.hasValue()) {\n            const clip = clipPathStyleProp.getDefinition();\n            if (clip) {\n                clip.apply(ctx);\n            }\n        }\n    }\n    clearContext(_) {\n        // NO RENDER\n    }\n    renderChildren(ctx) {\n        this.children.forEach((child) => {\n            child.render(ctx);\n        });\n    }\n    addChild(childNode) {\n        const child = childNode instanceof Element\n            ? childNode\n            : this.document.createElement(childNode);\n        child.parent = this;\n        if (!Element.ignoreChildTypes.includes(child.type)) {\n            this.children.push(child);\n        }\n    }\n    matchesSelector(selector) {\n        const { node } = this;\n        if (!node) {\n            return false;\n        }\n        if (typeof node.matches === 'function') {\n            return node.matches(selector);\n        }\n        const styleClasses = node.getAttribute?.('class');\n        if (!styleClasses || styleClasses === '') {\n            return false;\n        }\n        return styleClasses.split(' ').some(styleClass => `.${styleClass}` === selector);\n    }\n    addStylesFromStyleDefinition() {\n        const { styles, stylesSpecificity } = this.document;\n        let styleProp;\n        for (const selector in styles) {\n            if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n                const style = styles[selector];\n                const specificity = stylesSpecificity[selector];\n                if (style) {\n                    for (const name in style) {\n                        let existingSpecificity = this.stylesSpecificity[name];\n                        if (typeof existingSpecificity === 'undefined') {\n                            existingSpecificity = '000';\n                        }\n                        if (specificity && specificity >= existingSpecificity) {\n                            styleProp = style[name];\n                            if (styleProp) {\n                                this.styles[name] = styleProp;\n                            }\n                            this.stylesSpecificity[name] = specificity;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    removeStyles(element, ignoreStyles) {\n        const toRestore = ignoreStyles.reduce((toRestore, name) => {\n            const styleProp = element.getStyle(name);\n            if (!styleProp.hasValue()) {\n                return toRestore;\n            }\n            const value = styleProp.getString();\n            styleProp.setValue('');\n            return [...toRestore, [name, value]];\n        }, []);\n        return toRestore;\n    }\n    restoreStyles(element, styles) {\n        styles.forEach(([name, value]) => {\n            element.getStyle(name, true).setValue(value);\n        });\n    }\n    isFirstChild() {\n        return this.parent?.children.indexOf(this) === 0;\n    }\n}\n/**\n * Abstract class for the various Fe tags that can be found in filters.\n */\nclass FeElement extends Element {\n}\n\nclass UnknownElement extends Element {\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n    }\n}\n\nfunction wrapFontFamily(fontFamily) {\n    const trimmed = fontFamily.trim();\n    return /^('|\")/.test(trimmed)\n        ? trimmed\n        : `\"${trimmed}\"`;\n}\nfunction prepareFontFamily(fontFamily) {\n    return typeof process === 'undefined'\n        ? fontFamily\n        : fontFamily\n            .trim()\n            .split(',')\n            .map(wrapFontFamily)\n            .join(',');\n}\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n * @param fontStyle\n * @returns CSS font style.\n */\nfunction prepareFontStyle(fontStyle) {\n    if (!fontStyle) {\n        return '';\n    }\n    const targetFontStyle = fontStyle.trim().toLowerCase();\n    switch (targetFontStyle) {\n        case 'normal':\n        case 'italic':\n        case 'oblique':\n        case 'inherit':\n        case 'initial':\n        case 'unset':\n            return targetFontStyle;\n        default:\n            if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n                return targetFontStyle;\n            }\n            return '';\n    }\n}\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n * @param fontWeight\n * @returns CSS font weight.\n */\nfunction prepareFontWeight(fontWeight) {\n    if (!fontWeight) {\n        return '';\n    }\n    const targetFontWeight = fontWeight.trim().toLowerCase();\n    switch (targetFontWeight) {\n        case 'normal':\n        case 'bold':\n        case 'lighter':\n        case 'bolder':\n        case 'inherit':\n        case 'initial':\n        case 'unset':\n            return targetFontWeight;\n        default:\n            if (/^[\\d.]+$/.test(targetFontWeight)) {\n                return targetFontWeight;\n            }\n            return '';\n    }\n}\nclass Font {\n    static parse(font = '', inherit) {\n        let fontStyle = '';\n        let fontVariant = '';\n        let fontWeight = '';\n        let fontSize = '';\n        let fontFamily = '';\n        const parts = compressSpaces(font).trim().split(' ');\n        const set = {\n            fontSize: false,\n            fontStyle: false,\n            fontWeight: false,\n            fontVariant: false\n        };\n        parts.forEach((part) => {\n            switch (true) {\n                case !set.fontStyle && Font.styles.includes(part):\n                    if (part !== 'inherit') {\n                        fontStyle = part;\n                    }\n                    set.fontStyle = true;\n                    break;\n                case !set.fontVariant && Font.variants.includes(part):\n                    if (part !== 'inherit') {\n                        fontVariant = part;\n                    }\n                    set.fontStyle = true;\n                    set.fontVariant = true;\n                    break;\n                case !set.fontWeight && Font.weights.includes(part):\n                    if (part !== 'inherit') {\n                        fontWeight = part;\n                    }\n                    set.fontStyle = true;\n                    set.fontVariant = true;\n                    set.fontWeight = true;\n                    break;\n                case !set.fontSize:\n                    if (part !== 'inherit') {\n                        fontSize = part.split('/')[0] || '';\n                    }\n                    set.fontStyle = true;\n                    set.fontVariant = true;\n                    set.fontWeight = true;\n                    set.fontSize = true;\n                    break;\n                default:\n                    if (part !== 'inherit') {\n                        fontFamily += part;\n                    }\n            }\n        });\n        return new Font(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit);\n    }\n    static styles = 'normal|italic|oblique|inherit';\n    static variants = 'normal|small-caps|inherit';\n    static weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit';\n    fontFamily;\n    fontSize;\n    fontStyle;\n    fontWeight;\n    fontVariant;\n    constructor(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) {\n        const inheritFont = inherit\n            ? typeof inherit === 'string'\n                ? Font.parse(inherit)\n                : inherit\n            : {};\n        this.fontFamily = fontFamily || inheritFont.fontFamily;\n        this.fontSize = fontSize || inheritFont.fontSize;\n        this.fontStyle = fontStyle || inheritFont.fontStyle;\n        this.fontWeight = fontWeight || inheritFont.fontWeight;\n        this.fontVariant = fontVariant || inheritFont.fontVariant;\n    }\n    toString() {\n        return [\n            prepareFontStyle(this.fontStyle),\n            this.fontVariant,\n            prepareFontWeight(this.fontWeight),\n            this.fontSize,\n            // Wrap fontFamily only on nodejs and only for canvas.ctx\n            prepareFontFamily(this.fontFamily)\n        ].join(' ').trim();\n    }\n}\n\nclass BoundingBox {\n    x1;\n    y1;\n    x2;\n    y2;\n    constructor(x1 = Number.NaN, y1 = Number.NaN, x2 = Number.NaN, y2 = Number.NaN) {\n        this.x1 = x1;\n        this.y1 = y1;\n        this.x2 = x2;\n        this.y2 = y2;\n        this.addPoint(x1, y1);\n        this.addPoint(x2, y2);\n    }\n    get x() {\n        return this.x1;\n    }\n    get y() {\n        return this.y1;\n    }\n    get width() {\n        return this.x2 - this.x1;\n    }\n    get height() {\n        return this.y2 - this.y1;\n    }\n    addPoint(x, y) {\n        if (typeof x !== 'undefined') {\n            if (isNaN(this.x1) || isNaN(this.x2)) {\n                this.x1 = x;\n                this.x2 = x;\n            }\n            if (x < this.x1) {\n                this.x1 = x;\n            }\n            if (x > this.x2) {\n                this.x2 = x;\n            }\n        }\n        if (typeof y !== 'undefined') {\n            if (isNaN(this.y1) || isNaN(this.y2)) {\n                this.y1 = y;\n                this.y2 = y;\n            }\n            if (y < this.y1) {\n                this.y1 = y;\n            }\n            if (y > this.y2) {\n                this.y2 = y;\n            }\n        }\n    }\n    addX(x) {\n        this.addPoint(x, 0);\n    }\n    addY(y) {\n        this.addPoint(0, y);\n    }\n    addBoundingBox(boundingBox) {\n        if (!boundingBox) {\n            return;\n        }\n        const { x1, y1, x2, y2 } = boundingBox;\n        this.addPoint(x1, y1);\n        this.addPoint(x2, y2);\n    }\n    sumCubic(t, p0, p1, p2, p3) {\n        return (Math.pow(1 - t, 3) * p0\n            + 3 * Math.pow(1 - t, 2) * t * p1\n            + 3 * (1 - t) * Math.pow(t, 2) * p2\n            + Math.pow(t, 3) * p3);\n    }\n    bezierCurveAdd(forX, p0, p1, p2, p3) {\n        const b = 6 * p0 - 12 * p1 + 6 * p2;\n        const a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n        const c = 3 * p1 - 3 * p0;\n        if (a === 0) {\n            if (b === 0) {\n                return;\n            }\n            const t = -c / b;\n            if (0 < t && t < 1) {\n                if (forX) {\n                    this.addX(this.sumCubic(t, p0, p1, p2, p3));\n                }\n                else {\n                    this.addY(this.sumCubic(t, p0, p1, p2, p3));\n                }\n            }\n            return;\n        }\n        const b2ac = Math.pow(b, 2) - 4 * c * a;\n        if (b2ac < 0) {\n            return;\n        }\n        const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n        if (0 < t1 && t1 < 1) {\n            if (forX) {\n                this.addX(this.sumCubic(t1, p0, p1, p2, p3));\n            }\n            else {\n                this.addY(this.sumCubic(t1, p0, p1, p2, p3));\n            }\n        }\n        const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n        if (0 < t2 && t2 < 1) {\n            if (forX) {\n                this.addX(this.sumCubic(t2, p0, p1, p2, p3));\n            }\n            else {\n                this.addY(this.sumCubic(t2, p0, p1, p2, p3));\n            }\n        }\n    }\n    // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n    addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n        this.addPoint(p0x, p0y);\n        this.addPoint(p3x, p3y);\n        this.bezierCurveAdd(true, p0x, p1x, p2x, p3x);\n        this.bezierCurveAdd(false, p0y, p1y, p2y, p3y);\n    }\n    addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n        const cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n        const cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n        const cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n        const cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n        this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y);\n    }\n    isPointInBox(x, y) {\n        const { x1, y1, x2, y2 } = this;\n        return (x1 <= x\n            && x <= x2\n            && y1 <= y\n            && y <= y2);\n    }\n}\n\nclass RenderedElement extends Element {\n    modifiedEmSizeStack = false;\n    calculateOpacity() {\n        let opacity = 1.0;\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let element = this;\n        while (element) {\n            const opacityStyle = element.getStyle('opacity', false, true); // no ancestors on style call\n            if (opacityStyle.hasValue(true)) {\n                opacity *= opacityStyle.getNumber();\n            }\n            element = element.parent;\n        }\n        return opacity;\n    }\n    setContext(ctx, fromMeasure = false) {\n        if (!fromMeasure) { // causes stack overflow when measuring text with gradients\n            // fill\n            const fillStyleProp = this.getStyle('fill');\n            const fillOpacityStyleProp = this.getStyle('fill-opacity');\n            const strokeStyleProp = this.getStyle('stroke');\n            const strokeOpacityProp = this.getStyle('stroke-opacity');\n            if (fillStyleProp.isUrlDefinition()) {\n                const fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp);\n                if (fillStyle) {\n                    ctx.fillStyle = fillStyle;\n                }\n            }\n            else if (fillStyleProp.hasValue()) {\n                if (fillStyleProp.getString() === 'currentColor') {\n                    fillStyleProp.setValue(this.getStyle('color').getColor());\n                }\n                const fillStyle = fillStyleProp.getColor();\n                if (fillStyle !== 'inherit') {\n                    ctx.fillStyle = fillStyle === 'none'\n                        ? 'rgba(0,0,0,0)'\n                        : fillStyle;\n                }\n            }\n            if (fillOpacityStyleProp.hasValue()) {\n                const fillStyle = new Property(this.document, 'fill', ctx.fillStyle)\n                    .addOpacity(fillOpacityStyleProp)\n                    .getColor();\n                ctx.fillStyle = fillStyle;\n            }\n            // stroke\n            if (strokeStyleProp.isUrlDefinition()) {\n                const strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp);\n                if (strokeStyle) {\n                    ctx.strokeStyle = strokeStyle;\n                }\n            }\n            else if (strokeStyleProp.hasValue()) {\n                if (strokeStyleProp.getString() === 'currentColor') {\n                    strokeStyleProp.setValue(this.getStyle('color').getColor());\n                }\n                const strokeStyle = strokeStyleProp.getString();\n                if (strokeStyle !== 'inherit') {\n                    ctx.strokeStyle = strokeStyle === 'none'\n                        ? 'rgba(0,0,0,0)'\n                        : strokeStyle;\n                }\n            }\n            if (strokeOpacityProp.hasValue()) {\n                const strokeStyle = new Property(this.document, 'stroke', ctx.strokeStyle)\n                    .addOpacity(strokeOpacityProp)\n                    .getString();\n                ctx.strokeStyle = strokeStyle;\n            }\n            const strokeWidthStyleProp = this.getStyle('stroke-width');\n            if (strokeWidthStyleProp.hasValue()) {\n                const newLineWidth = strokeWidthStyleProp.getPixels();\n                ctx.lineWidth = !newLineWidth\n                    ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-)\n                    : newLineWidth;\n            }\n            const strokeLinecapStyleProp = this.getStyle('stroke-linecap');\n            const strokeLinejoinStyleProp = this.getStyle('stroke-linejoin');\n            const strokeMiterlimitProp = this.getStyle('stroke-miterlimit');\n            // NEED TEST\n            // const pointOrderStyleProp = this.getStyle('paint-order');\n            const strokeDasharrayStyleProp = this.getStyle('stroke-dasharray');\n            const strokeDashoffsetProp = this.getStyle('stroke-dashoffset');\n            if (strokeLinecapStyleProp.hasValue()) {\n                ctx.lineCap = strokeLinecapStyleProp.getString();\n            }\n            if (strokeLinejoinStyleProp.hasValue()) {\n                ctx.lineJoin = strokeLinejoinStyleProp.getString();\n            }\n            if (strokeMiterlimitProp.hasValue()) {\n                ctx.miterLimit = strokeMiterlimitProp.getNumber();\n            }\n            // NEED TEST\n            // if (pointOrderStyleProp.hasValue()) {\n            //   // ?\n            //   ctx.paintOrder = pointOrderStyleProp.getValue();\n            // }\n            if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n                const gaps = toNumbers(strokeDasharrayStyleProp.getString());\n                if (typeof ctx.setLineDash !== 'undefined') {\n                    ctx.setLineDash(gaps);\n                }\n                else \n                // @ts-ignore Handle browser prefix.\n                if (typeof ctx.webkitLineDash !== 'undefined') {\n                    // @ts-ignore Handle browser prefix.\n                    ctx.webkitLineDash = gaps;\n                }\n                else \n                // @ts-ignore Handle browser prefix.\n                if (typeof ctx.mozDash !== 'undefined' && !(gaps.length === 1 && gaps[0] === 0)) {\n                    // @ts-ignore Handle browser prefix.\n                    ctx.mozDash = gaps;\n                }\n                const offset = strokeDashoffsetProp.getPixels();\n                if (typeof ctx.lineDashOffset !== 'undefined') {\n                    ctx.lineDashOffset = offset;\n                }\n                else \n                // @ts-ignore Handle browser prefix.\n                if (typeof ctx.webkitLineDashOffset !== 'undefined') {\n                    // @ts-ignore Handle browser prefix.\n                    ctx.webkitLineDashOffset = offset;\n                }\n                else \n                // @ts-ignore Handle browser prefix.\n                if (typeof ctx.mozDashOffset !== 'undefined') {\n                    // @ts-ignore Handle browser prefix.\n                    ctx.mozDashOffset = offset;\n                }\n            }\n        }\n        // font\n        this.modifiedEmSizeStack = false;\n        if (typeof ctx.font !== 'undefined') {\n            const fontStyleProp = this.getStyle('font');\n            const fontStyleStyleProp = this.getStyle('font-style');\n            const fontVariantStyleProp = this.getStyle('font-variant');\n            const fontWeightStyleProp = this.getStyle('font-weight');\n            const fontSizeStyleProp = this.getStyle('font-size');\n            const fontFamilyStyleProp = this.getStyle('font-family');\n            const font = new Font(fontStyleStyleProp.getString(), fontVariantStyleProp.getString(), fontWeightStyleProp.getString(), fontSizeStyleProp.hasValue()\n                ? `${fontSizeStyleProp.getPixels(true)}px`\n                : '', fontFamilyStyleProp.getString(), Font.parse(fontStyleProp.getString(), ctx.font));\n            fontStyleStyleProp.setValue(font.fontStyle);\n            fontVariantStyleProp.setValue(font.fontVariant);\n            fontWeightStyleProp.setValue(font.fontWeight);\n            fontSizeStyleProp.setValue(font.fontSize);\n            fontFamilyStyleProp.setValue(font.fontFamily);\n            ctx.font = font.toString();\n            if (fontSizeStyleProp.isPixels()) {\n                this.document.emSize = fontSizeStyleProp.getPixels();\n                this.modifiedEmSizeStack = true;\n            }\n        }\n        if (!fromMeasure) {\n            // effects\n            this.applyEffects(ctx);\n            // opacity\n            ctx.globalAlpha = this.calculateOpacity();\n        }\n    }\n    clearContext(ctx) {\n        super.clearContext(ctx);\n        if (this.modifiedEmSizeStack) {\n            this.document.popEmSize();\n        }\n    }\n}\n\nclass TextElement extends RenderedElement {\n    type = 'text';\n    x = 0;\n    y = 0;\n    leafTexts = [];\n    textChunkStart = 0;\n    minX = Number.POSITIVE_INFINITY;\n    maxX = Number.NEGATIVE_INFINITY;\n    measureCache = -1;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, new.target === TextElement\n            ? true\n            : captureTextNodes);\n    }\n    setContext(ctx, fromMeasure = false) {\n        super.setContext(ctx, fromMeasure);\n        const textBaseline = this.getStyle('dominant-baseline').getTextBaseline()\n            || this.getStyle('alignment-baseline').getTextBaseline();\n        if (textBaseline) {\n            ctx.textBaseline = textBaseline;\n        }\n    }\n    initializeCoordinates() {\n        this.x = 0;\n        this.y = 0;\n        this.leafTexts = [];\n        this.textChunkStart = 0;\n        this.minX = Number.POSITIVE_INFINITY;\n        this.maxX = Number.NEGATIVE_INFINITY;\n    }\n    getBoundingBox(ctx) {\n        if (this.type !== 'text') {\n            return this.getTElementBoundingBox(ctx);\n        }\n        // first, calculate child positions\n        this.initializeCoordinates();\n        this.adjustChildCoordinatesRecursive(ctx);\n        let boundingBox = null;\n        // then calculate bounding box\n        this.children.forEach((_, i) => {\n            const childBoundingBox = this.getChildBoundingBox(ctx, this, this, i);\n            if (!boundingBox) {\n                boundingBox = childBoundingBox;\n            }\n            else {\n                boundingBox.addBoundingBox(childBoundingBox);\n            }\n        });\n        return boundingBox;\n    }\n    getFontSize() {\n        const { document, parent } = this;\n        const inheritFontSize = Font.parse(document.ctx.font).fontSize;\n        const fontSize = parent.getStyle('font-size').getNumber(inheritFontSize);\n        return fontSize;\n    }\n    getTElementBoundingBox(ctx) {\n        const fontSize = this.getFontSize();\n        return new BoundingBox(this.x, this.y - fontSize, this.x + this.measureText(ctx), this.y);\n    }\n    getGlyph(font, text, i) {\n        const char = text[i];\n        let glyph;\n        if (font.isArabic) {\n            const len = text.length;\n            const prevChar = text[i - 1];\n            const nextChar = text[i + 1];\n            let arabicForm = 'isolated';\n            if ((i === 0 || prevChar === ' ') && i < len - 1 && nextChar !== ' ') {\n                arabicForm = 'terminal';\n            }\n            if (i > 0 && prevChar !== ' ' && i < len - 1 && nextChar !== ' ') {\n                arabicForm = 'medial';\n            }\n            if (i > 0 && prevChar !== ' ' && (i === len - 1 || nextChar === ' ')) {\n                arabicForm = 'initial';\n            }\n            glyph = font.arabicGlyphs[char]?.[arabicForm] || font.glyphs[char];\n        }\n        else {\n            glyph = font.glyphs[char];\n        }\n        if (!glyph) {\n            glyph = font.missingGlyph;\n        }\n        return glyph;\n    }\n    getText() {\n        return '';\n    }\n    getTextFromNode(node) {\n        const textNode = (node || this.node);\n        return textNode.textContent;\n    }\n    renderChildren(ctx) {\n        if (this.type !== 'text') {\n            this.renderTElementChildren(ctx);\n            return;\n        }\n        // first, calculate child positions\n        this.initializeCoordinates();\n        this.adjustChildCoordinatesRecursive(ctx);\n        // then render\n        this.children.forEach((_, i) => {\n            this.renderChild(ctx, this, this, i);\n        });\n        const { mouse } = this.document.screen;\n        // Do not calc bounding box if mouse is not working.\n        if (mouse.isWorking()) {\n            mouse.checkBoundingBox(this, this.getBoundingBox(ctx));\n        }\n    }\n    renderTElementChildren(ctx) {\n        const { document, parent } = this;\n        const renderText = this.getText();\n        const customFont = parent.getStyle('font-family').getDefinition();\n        if (customFont?.fontFace) {\n            const { unitsPerEm } = customFont.fontFace;\n            const ctxFont = Font.parse(document.ctx.font);\n            const fontSize = parent.getStyle('font-size').getNumber(ctxFont.fontSize);\n            const fontStyle = parent.getStyle('font-style').getString(ctxFont.fontStyle);\n            const scale = fontSize / unitsPerEm;\n            const text = customFont.isRTL\n                ? renderText.split('').reverse().join('')\n                : renderText;\n            const dx = toNumbers(parent.getAttribute('dx').getString());\n            const len = text.length;\n            for (let i = 0; i < len; i++) {\n                const glyph = this.getGlyph(customFont, text, i);\n                ctx.translate(this.x, this.y);\n                ctx.scale(scale, -scale);\n                const lw = ctx.lineWidth;\n                ctx.lineWidth = ctx.lineWidth * unitsPerEm / fontSize;\n                if (fontStyle === 'italic') {\n                    ctx.transform(1, 0, .4, 1, 0, 0);\n                }\n                glyph.render(ctx);\n                if (fontStyle === 'italic') {\n                    ctx.transform(1, 0, -.4, 1, 0, 0);\n                }\n                ctx.lineWidth = lw;\n                ctx.scale(1 / scale, -1 / scale);\n                ctx.translate(-this.x, -this.y);\n                this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / unitsPerEm;\n                if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n                    this.x += dx[i];\n                }\n            }\n            return;\n        }\n        const { x, y } = this;\n        // NEED TEST\n        // if (ctx.paintOrder === 'stroke') {\n        //   if (ctx.strokeStyle) {\n        //     ctx.strokeText(renderText, x, y);\n        //   }\n        //   if (ctx.fillStyle) {\n        //     ctx.fillText(renderText, x, y);\n        //   }\n        // } else {\n        if (ctx.fillStyle) {\n            ctx.fillText(renderText, x, y);\n        }\n        if (ctx.strokeStyle) {\n            ctx.strokeText(renderText, x, y);\n        }\n        // }\n    }\n    applyAnchoring() {\n        if (this.textChunkStart >= this.leafTexts.length) {\n            return;\n        }\n        // This is basically the \"Apply anchoring\" part of https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm.\n        // The difference is that we apply the anchoring as soon as a chunk is finished. This saves some extra looping.\n        // Vertical text is not supported.\n        const firstElement = this.leafTexts[this.textChunkStart];\n        const textAnchor = firstElement.getStyle('text-anchor').getString('start');\n        const isRTL = false; // we treat RTL like LTR\n        let shift = 0;\n        if (textAnchor === 'start' && !isRTL || textAnchor === 'end' && isRTL) {\n            shift = firstElement.x - this.minX;\n        }\n        else if (textAnchor === 'end' && !isRTL || textAnchor === 'start' && isRTL) {\n            shift = firstElement.x - this.maxX;\n        }\n        else {\n            shift = firstElement.x - (this.minX + this.maxX) / 2;\n        }\n        for (let i = this.textChunkStart; i < this.leafTexts.length; i++) {\n            this.leafTexts[i].x += shift;\n        }\n        // start new chunk\n        this.minX = Number.POSITIVE_INFINITY;\n        this.maxX = Number.NEGATIVE_INFINITY;\n        this.textChunkStart = this.leafTexts.length;\n    }\n    adjustChildCoordinatesRecursive(ctx) {\n        this.children.forEach((_, i) => {\n            this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i);\n        });\n        this.applyAnchoring();\n    }\n    adjustChildCoordinatesRecursiveCore(ctx, textParent, parent, i) {\n        const child = parent.children[i];\n        if (child.children.length > 0) {\n            child.children.forEach((_, i) => {\n                textParent.adjustChildCoordinatesRecursiveCore(ctx, textParent, child, i);\n            });\n        }\n        else {\n            // only leafs are relevant\n            this.adjustChildCoordinates(ctx, textParent, parent, i);\n        }\n    }\n    adjustChildCoordinates(ctx, textParent, parent, i) {\n        const child = parent.children[i];\n        if (typeof child.measureText !== 'function') {\n            return child;\n        }\n        ctx.save();\n        child.setContext(ctx, true);\n        const xAttr = child.getAttribute('x');\n        const yAttr = child.getAttribute('y');\n        const dxAttr = child.getAttribute('dx');\n        const dyAttr = child.getAttribute('dy');\n        const customFont = child.getStyle('font-family').getDefinition();\n        const isRTL = Boolean(customFont?.isRTL);\n        if (i === 0) {\n            // First children inherit attributes from parent(s). Positional attributes\n            // are only inherited from a parent to it's first child.\n            if (!xAttr.hasValue()) {\n                xAttr.setValue(child.getInheritedAttribute('x'));\n            }\n            if (!yAttr.hasValue()) {\n                yAttr.setValue(child.getInheritedAttribute('y'));\n            }\n            if (!dxAttr.hasValue()) {\n                dxAttr.setValue(child.getInheritedAttribute('dx'));\n            }\n            if (!dyAttr.hasValue()) {\n                dyAttr.setValue(child.getInheritedAttribute('dy'));\n            }\n        }\n        const width = child.measureText(ctx);\n        if (isRTL) {\n            textParent.x -= width;\n        }\n        if (xAttr.hasValue()) {\n            // an \"x\" attribute marks the start of a new chunk\n            textParent.applyAnchoring();\n            child.x = xAttr.getPixels('x');\n            if (dxAttr.hasValue()) {\n                child.x += dxAttr.getPixels('x');\n            }\n        }\n        else {\n            if (dxAttr.hasValue()) {\n                textParent.x += dxAttr.getPixels('x');\n            }\n            child.x = textParent.x;\n        }\n        textParent.x = child.x;\n        if (!isRTL) {\n            textParent.x += width;\n        }\n        if (yAttr.hasValue()) {\n            child.y = yAttr.getPixels('y');\n            if (dyAttr.hasValue()) {\n                child.y += dyAttr.getPixels('y');\n            }\n        }\n        else {\n            if (dyAttr.hasValue()) {\n                textParent.y += dyAttr.getPixels('y');\n            }\n            child.y = textParent.y;\n        }\n        textParent.y = child.y;\n        // update the current chunk and it's bounds\n        textParent.leafTexts.push(child);\n        textParent.minX = Math.min(textParent.minX, child.x, child.x + width);\n        textParent.maxX = Math.max(textParent.maxX, child.x, child.x + width);\n        child.clearContext(ctx);\n        ctx.restore();\n        return child;\n    }\n    getChildBoundingBox(ctx, textParent, parent, i) {\n        const child = parent.children[i];\n        // not a text node?\n        if (typeof child.getBoundingBox !== 'function') {\n            return null;\n        }\n        const boundingBox = child.getBoundingBox(ctx);\n        if (boundingBox) {\n            child.children.forEach((_, i) => {\n                const childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i);\n                boundingBox.addBoundingBox(childBoundingBox);\n            });\n        }\n        return boundingBox;\n    }\n    renderChild(ctx, textParent, parent, i) {\n        const child = parent.children[i];\n        child.render(ctx);\n        child.children.forEach((_, i) => {\n            textParent.renderChild(ctx, textParent, child, i);\n        });\n    }\n    measureText(ctx) {\n        const { measureCache } = this;\n        if (~measureCache) {\n            return measureCache;\n        }\n        const renderText = this.getText();\n        const measure = this.measureTargetText(ctx, renderText);\n        this.measureCache = measure;\n        return measure;\n    }\n    measureTargetText(ctx, targetText) {\n        if (!targetText.length) {\n            return 0;\n        }\n        const { parent } = this;\n        const customFont = parent.getStyle('font-family').getDefinition();\n        if (customFont) {\n            const fontSize = this.getFontSize();\n            const text = customFont.isRTL\n                ? targetText.split('').reverse().join('')\n                : targetText;\n            const dx = toNumbers(parent.getAttribute('dx').getString());\n            const len = text.length;\n            let measure = 0;\n            for (let i = 0; i < len; i++) {\n                const glyph = this.getGlyph(customFont, text, i);\n                measure += (glyph.horizAdvX || customFont.horizAdvX)\n                    * fontSize\n                    / customFont.fontFace.unitsPerEm;\n                if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n                    measure += dx[i];\n                }\n            }\n            return measure;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!ctx.measureText) {\n            return targetText.length * 10;\n        }\n        ctx.save();\n        this.setContext(ctx, true);\n        const { width: measure } = ctx.measureText(targetText);\n        this.clearContext(ctx);\n        ctx.restore();\n        return measure;\n    }\n    /**\n     * Inherits positional attributes from {@link TextElement} parent(s). Attributes\n     * are only inherited from a parent to its first child.\n     * @param name - The attribute name.\n     * @returns The attribute value or null.\n     */\n    getInheritedAttribute(name) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n        let current = this;\n        while (current instanceof TextElement && current.isFirstChild() && current.parent) {\n            const parentAttr = current.parent.getAttribute(name);\n            if (parentAttr.hasValue(true)) {\n                return parentAttr.getString('0');\n            }\n            current = current.parent;\n        }\n        return null;\n    }\n}\n\nclass TSpanElement extends TextElement {\n    type = 'tspan';\n    text;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, new.target === TSpanElement\n            ? true\n            : captureTextNodes);\n        // if this node has children, then they own the text\n        this.text = this.children.length > 0\n            ? ''\n            : this.getTextFromNode();\n    }\n    getText() {\n        return this.text;\n    }\n}\n\nclass TextNode extends TSpanElement {\n    type = 'textNode';\n}\n\nclass PathParser extends SVGPathData {\n    control = new Point(0, 0);\n    start = new Point(0, 0);\n    current = new Point(0, 0);\n    command = null;\n    i = -1;\n    previousCommand = null;\n    points = [];\n    angles = [];\n    constructor(path) {\n        super(path\n            // Fix spaces after signs.\n            .replace(/([+\\-.])\\s+/gm, '$1')\n            // Remove invalid part.\n            .replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g, ''));\n    }\n    reset() {\n        this.i = -1;\n        this.command = null;\n        this.previousCommand = null;\n        this.start = new Point(0, 0);\n        this.control = new Point(0, 0);\n        this.current = new Point(0, 0);\n        this.points = [];\n        this.angles = [];\n    }\n    isEnd() {\n        const { i, commands } = this;\n        return i >= commands.length - 1;\n    }\n    next() {\n        const command = this.commands[++this.i];\n        this.previousCommand = this.command;\n        this.command = command;\n        return command;\n    }\n    getPoint(xProp = 'x', yProp = 'y') {\n        const point = new Point(this.command[xProp], this.command[yProp]);\n        return this.makeAbsolute(point);\n    }\n    getAsControlPoint(xProp, yProp) {\n        const point = this.getPoint(xProp, yProp);\n        this.control = point;\n        return point;\n    }\n    getAsCurrentPoint(xProp, yProp) {\n        const point = this.getPoint(xProp, yProp);\n        this.current = point;\n        return point;\n    }\n    getReflectedControlPoint() {\n        const previousCommand = this.previousCommand.type;\n        if (previousCommand !== SVGPathData.CURVE_TO\n            && previousCommand !== SVGPathData.SMOOTH_CURVE_TO\n            && previousCommand !== SVGPathData.QUAD_TO\n            && previousCommand !== SVGPathData.SMOOTH_QUAD_TO) {\n            return this.current;\n        }\n        // reflect point\n        const { current: { x: cx, y: cy }, control: { x: ox, y: oy } } = this;\n        const point = new Point(2 * cx - ox, 2 * cy - oy);\n        return point;\n    }\n    makeAbsolute(point) {\n        if (this.command.relative) {\n            const { x, y } = this.current;\n            point.x += x;\n            point.y += y;\n        }\n        return point;\n    }\n    addMarker(point, from, priorTo) {\n        const { points, angles } = this;\n        // if the last angle isn't filled in because we didn't have this point yet ...\n        if (priorTo && angles.length > 0 && !angles[angles.length - 1]) {\n            angles[angles.length - 1] = points[points.length - 1].angleTo(priorTo);\n        }\n        this.addMarkerAngle(point, from ? from.angleTo(point) : null);\n    }\n    addMarkerAngle(point, angle) {\n        this.points.push(point);\n        this.angles.push(angle);\n    }\n    getMarkerPoints() {\n        return this.points;\n    }\n    getMarkerAngles() {\n        const { angles } = this;\n        const len = angles.length;\n        for (let i = 0; i < len; i++) {\n            if (!angles[i]) {\n                for (let j = i + 1; j < len; j++) {\n                    if (angles[j]) {\n                        angles[i] = angles[j];\n                        break;\n                    }\n                }\n            }\n        }\n        return angles;\n    }\n}\n\nclass PathElement extends RenderedElement {\n    type = 'path';\n    pathParser;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.pathParser = new PathParser(this.getAttribute('d').getString());\n    }\n    path(ctx) {\n        const { pathParser } = this;\n        const boundingBox = new BoundingBox();\n        pathParser.reset();\n        if (ctx) {\n            ctx.beginPath();\n        }\n        while (!pathParser.isEnd()) {\n            switch (pathParser.next().type) {\n                case PathParser.MOVE_TO:\n                    this.pathM(ctx, boundingBox);\n                    break;\n                case PathParser.LINE_TO:\n                    this.pathL(ctx, boundingBox);\n                    break;\n                case PathParser.HORIZ_LINE_TO:\n                    this.pathH(ctx, boundingBox);\n                    break;\n                case PathParser.VERT_LINE_TO:\n                    this.pathV(ctx, boundingBox);\n                    break;\n                case PathParser.CURVE_TO:\n                    this.pathC(ctx, boundingBox);\n                    break;\n                case PathParser.SMOOTH_CURVE_TO:\n                    this.pathS(ctx, boundingBox);\n                    break;\n                case PathParser.QUAD_TO:\n                    this.pathQ(ctx, boundingBox);\n                    break;\n                case PathParser.SMOOTH_QUAD_TO:\n                    this.pathT(ctx, boundingBox);\n                    break;\n                case PathParser.ARC:\n                    this.pathA(ctx, boundingBox);\n                    break;\n                case PathParser.CLOSE_PATH:\n                    this.pathZ(ctx, boundingBox);\n                    break;\n            }\n        }\n        return boundingBox;\n    }\n    getBoundingBox(_ctx) {\n        return this.path();\n    }\n    getMarkers() {\n        const { pathParser } = this;\n        const points = pathParser.getMarkerPoints();\n        const angles = pathParser.getMarkerAngles();\n        if (!points || !angles) {\n            return null;\n        }\n        const markers = points.map((point, i) => [point, angles[i]]);\n        return markers;\n    }\n    renderChildren(ctx) {\n        this.path(ctx);\n        this.document.screen.mouse.checkPath(this, ctx);\n        const fillRuleStyleProp = this.getStyle('fill-rule');\n        if (ctx.fillStyle !== '') {\n            if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n                ctx.fill(fillRuleStyleProp.getString());\n            }\n            else {\n                ctx.fill();\n            }\n        }\n        if (ctx.strokeStyle !== '') {\n            if (this.getAttribute('vector-effect').getString() === 'non-scaling-stroke') {\n                ctx.save();\n                ctx.setTransform(1, 0, 0, 1, 0, 0);\n                ctx.stroke();\n                ctx.restore();\n            }\n            else {\n                ctx.stroke();\n            }\n        }\n        const markers = this.getMarkers();\n        if (markers) {\n            const markersLastIndex = markers.length - 1;\n            const markerStartStyleProp = this.getStyle('marker-start');\n            const markerMidStyleProp = this.getStyle('marker-mid');\n            const markerEndStyleProp = this.getStyle('marker-end');\n            if (markerStartStyleProp.isUrlDefinition()) {\n                const marker = markerStartStyleProp.getDefinition();\n                const [point, angle] = markers[0];\n                if (marker) {\n                    marker.render(ctx, point, angle === null ? undefined : angle);\n                }\n            }\n            if (markerMidStyleProp.isUrlDefinition()) {\n                const marker = markerMidStyleProp.getDefinition();\n                for (let i = 1; i < markersLastIndex; i++) {\n                    const [point, angle] = markers[i];\n                    if (marker) {\n                        marker.render(ctx, point, angle === null ? undefined : angle);\n                    }\n                }\n            }\n            if (markerEndStyleProp.isUrlDefinition()) {\n                const marker = markerEndStyleProp.getDefinition();\n                const [point, angle] = markers[markersLastIndex];\n                if (marker) {\n                    marker.render(ctx, point, angle === null ? undefined : angle);\n                }\n            }\n        }\n    }\n    static pathM(pathParser) {\n        const point = pathParser.getAsCurrentPoint();\n        pathParser.start = pathParser.current;\n        return {\n            point\n        };\n    }\n    pathM(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { point } = PathElement.pathM(pathParser);\n        const { x, y } = point;\n        pathParser.addMarker(point);\n        boundingBox.addPoint(x, y);\n        if (ctx) {\n            ctx.moveTo(x, y);\n        }\n    }\n    static pathL(pathParser) {\n        const { current } = pathParser;\n        const point = pathParser.getAsCurrentPoint();\n        return {\n            current,\n            point\n        };\n    }\n    pathL(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, point } = PathElement.pathL(pathParser);\n        const { x, y } = point;\n        pathParser.addMarker(point, current);\n        boundingBox.addPoint(x, y);\n        if (ctx) {\n            ctx.lineTo(x, y);\n        }\n    }\n    static pathH(pathParser) {\n        const { current, command } = pathParser;\n        const point = new Point((command?.relative ? current.x : 0) + command.x, current.y);\n        pathParser.current = point;\n        return {\n            current,\n            point\n        };\n    }\n    pathH(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, point } = PathElement.pathH(pathParser);\n        const { x, y } = point;\n        pathParser.addMarker(point, current);\n        boundingBox.addPoint(x, y);\n        if (ctx) {\n            ctx.lineTo(x, y);\n        }\n    }\n    static pathV(pathParser) {\n        const { current, command } = pathParser;\n        const point = new Point(current.x, (command.relative ? current.y : 0) + command.y);\n        pathParser.current = point;\n        return {\n            current,\n            point\n        };\n    }\n    pathV(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, point } = PathElement.pathV(pathParser);\n        const { x, y } = point;\n        pathParser.addMarker(point, current);\n        boundingBox.addPoint(x, y);\n        if (ctx) {\n            ctx.lineTo(x, y);\n        }\n    }\n    static pathC(pathParser) {\n        const { current } = pathParser;\n        const point = pathParser.getPoint('x1', 'y1');\n        const controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n        const currentPoint = pathParser.getAsCurrentPoint();\n        return {\n            current,\n            point,\n            controlPoint,\n            currentPoint\n        };\n    }\n    pathC(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, point, controlPoint, currentPoint } = PathElement.pathC(pathParser);\n        pathParser.addMarker(currentPoint, controlPoint, point);\n        boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        if (ctx) {\n            ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        }\n    }\n    static pathS(pathParser) {\n        const { current } = pathParser;\n        const point = pathParser.getReflectedControlPoint();\n        const controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n        const currentPoint = pathParser.getAsCurrentPoint();\n        return {\n            current,\n            point,\n            controlPoint,\n            currentPoint\n        };\n    }\n    pathS(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, point, controlPoint, currentPoint } = PathElement.pathS(pathParser);\n        pathParser.addMarker(currentPoint, controlPoint, point);\n        boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        if (ctx) {\n            ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        }\n    }\n    static pathQ(pathParser) {\n        const { current } = pathParser;\n        const controlPoint = pathParser.getAsControlPoint('x1', 'y1');\n        const currentPoint = pathParser.getAsCurrentPoint();\n        return {\n            current,\n            controlPoint,\n            currentPoint\n        };\n    }\n    pathQ(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, controlPoint, currentPoint } = PathElement.pathQ(pathParser);\n        pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n        boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        if (ctx) {\n            ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        }\n    }\n    static pathT(pathParser) {\n        const { current } = pathParser;\n        const controlPoint = pathParser.getReflectedControlPoint();\n        pathParser.control = controlPoint;\n        const currentPoint = pathParser.getAsCurrentPoint();\n        return {\n            current,\n            controlPoint,\n            currentPoint\n        };\n    }\n    pathT(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { current, controlPoint, currentPoint } = PathElement.pathT(pathParser);\n        pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n        boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        if (ctx) {\n            ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        }\n    }\n    static pathA(pathParser) {\n        const { current, command } = pathParser;\n        let { rX, rY, xRot, lArcFlag, sweepFlag } = command;\n        const xAxisRotation = xRot * (Math.PI / 180.0);\n        const currentPoint = pathParser.getAsCurrentPoint();\n        // Conversion from endpoint to center parameterization\n        // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n        // x1', y1'\n        const currp = new Point(Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n            + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0, -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n            + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0);\n        // adjust radii\n        const l = Math.pow(currp.x, 2) / Math.pow(rX, 2)\n            + Math.pow(currp.y, 2) / Math.pow(rY, 2);\n        if (l > 1) {\n            rX *= Math.sqrt(l);\n            rY *= Math.sqrt(l);\n        }\n        // cx', cy'\n        let s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(((Math.pow(rX, 2) * Math.pow(rY, 2))\n            - (Math.pow(rX, 2) * Math.pow(currp.y, 2))\n            - (Math.pow(rY, 2) * Math.pow(currp.x, 2))) / (Math.pow(rX, 2) * Math.pow(currp.y, 2)\n            + Math.pow(rY, 2) * Math.pow(currp.x, 2)));\n        if (isNaN(s)) {\n            s = 0;\n        }\n        const cpp = new Point(s * rX * currp.y / rY, s * -rY * currp.x / rX);\n        // cx, cy\n        const centp = new Point((current.x + currentPoint.x) / 2.0\n            + Math.cos(xAxisRotation) * cpp.x\n            - Math.sin(xAxisRotation) * cpp.y, (current.y + currentPoint.y) / 2.0\n            + Math.sin(xAxisRotation) * cpp.x\n            + Math.cos(xAxisRotation) * cpp.y);\n        // initial angle\n        const a1 = vectorsAngle([1, 0], [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY]); // θ1\n        // angle delta\n        const u = [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY];\n        const v = [(-currp.x - cpp.x) / rX, (-currp.y - cpp.y) / rY];\n        let ad = vectorsAngle(u, v); // Δθ\n        if (vectorsRatio(u, v) <= -1) {\n            ad = Math.PI;\n        }\n        if (vectorsRatio(u, v) >= 1) {\n            ad = 0;\n        }\n        return {\n            currentPoint,\n            rX,\n            rY,\n            sweepFlag,\n            xAxisRotation,\n            centp,\n            a1,\n            ad\n        };\n    }\n    pathA(ctx, boundingBox) {\n        const { pathParser } = this;\n        const { currentPoint, rX, rY, sweepFlag, xAxisRotation, centp, a1, ad } = PathElement.pathA(pathParser);\n        // for markers\n        const dir = 1 - sweepFlag ? 1.0 : -1.0;\n        const ah = a1 + dir * (ad / 2.0);\n        const halfWay = new Point(centp.x + rX * Math.cos(ah), centp.y + rY * Math.sin(ah));\n        pathParser.addMarkerAngle(halfWay, ah - dir * Math.PI / 2);\n        pathParser.addMarkerAngle(currentPoint, ah - dir * Math.PI);\n        boundingBox.addPoint(currentPoint.x, currentPoint.y); // TODO: this is too naive, make it better\n        if (ctx && !isNaN(a1) && !isNaN(ad)) {\n            const r = rX > rY ? rX : rY;\n            const sx = rX > rY ? 1 : rX / rY;\n            const sy = rX > rY ? rY / rX : 1;\n            ctx.translate(centp.x, centp.y);\n            ctx.rotate(xAxisRotation);\n            ctx.scale(sx, sy);\n            ctx.arc(0, 0, r, a1, a1 + ad, Boolean(1 - sweepFlag));\n            ctx.scale(1 / sx, 1 / sy);\n            ctx.rotate(-xAxisRotation);\n            ctx.translate(-centp.x, -centp.y);\n        }\n    }\n    static pathZ(pathParser) {\n        pathParser.current = pathParser.start;\n    }\n    pathZ(ctx, boundingBox) {\n        PathElement.pathZ(this.pathParser);\n        if (ctx) {\n            // only close path if it is not a straight line\n            if (boundingBox.x1 !== boundingBox.x2\n                && boundingBox.y1 !== boundingBox.y2) {\n                ctx.closePath();\n            }\n        }\n    }\n}\n\nclass SVGElement extends RenderedElement {\n    type = 'svg';\n    root = false;\n    setContext(ctx) {\n        const { document } = this;\n        const { screen, window } = document;\n        const canvas = ctx.canvas;\n        screen.setDefaults(ctx);\n        if ('style' in canvas\n            && typeof ctx.font !== 'undefined'\n            && window\n            && typeof window.getComputedStyle !== 'undefined') {\n            ctx.font = window.getComputedStyle(canvas).getPropertyValue('font');\n            const fontSizeProp = new Property(document, 'fontSize', Font.parse(ctx.font).fontSize);\n            if (fontSizeProp.hasValue()) {\n                document.rootEmSize = fontSizeProp.getPixels('y');\n                document.emSize = document.rootEmSize;\n            }\n        }\n        // create new view port\n        if (!this.getAttribute('x').hasValue()) {\n            this.getAttribute('x', true).setValue(0);\n        }\n        if (!this.getAttribute('y').hasValue()) {\n            this.getAttribute('y', true).setValue(0);\n        }\n        let { width, height } = screen.viewPort;\n        if (!this.getStyle('width').hasValue()) {\n            this.getStyle('width', true).setValue('100%');\n        }\n        if (!this.getStyle('height').hasValue()) {\n            this.getStyle('height', true).setValue('100%');\n        }\n        if (!this.getStyle('color').hasValue()) {\n            this.getStyle('color', true).setValue('black');\n        }\n        const refXAttr = this.getAttribute('refX');\n        const refYAttr = this.getAttribute('refY');\n        const viewBoxAttr = this.getAttribute('viewBox');\n        const viewBox = viewBoxAttr.hasValue()\n            ? toNumbers(viewBoxAttr.getString())\n            : null;\n        const clip = !this.root\n            && this.getStyle('overflow').getValue('hidden') !== 'visible';\n        let minX = 0;\n        let minY = 0;\n        let clipX = 0;\n        let clipY = 0;\n        if (viewBox) {\n            minX = viewBox[0];\n            minY = viewBox[1];\n        }\n        if (!this.root) {\n            width = this.getStyle('width').getPixels('x');\n            height = this.getStyle('height').getPixels('y');\n            if (this.type === 'marker') {\n                clipX = minX;\n                clipY = minY;\n                minX = 0;\n                minY = 0;\n            }\n        }\n        screen.viewPort.setCurrent(width, height);\n        // Default value of transform-origin is center only for root SVG elements\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin\n        if (this.node // is not temporary SVGElement\n            && (!this.parent || this.node.parentNode?.nodeName === 'foreignObject')\n            && this.getStyle('transform', false, true).hasValue()\n            && !this.getStyle('transform-origin', false, true).hasValue()) {\n            this.getStyle('transform-origin', true, true).setValue('50% 50%');\n        }\n        super.setContext(ctx);\n        ctx.translate(this.getAttribute('x').getPixels('x'), this.getAttribute('y').getPixels('y'));\n        if (viewBox) {\n            width = viewBox[2];\n            height = viewBox[3];\n        }\n        document.setViewBox({\n            ctx,\n            aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n            width: screen.viewPort.width,\n            desiredWidth: width,\n            height: screen.viewPort.height,\n            desiredHeight: height,\n            minX,\n            minY,\n            refX: refXAttr.getValue(),\n            refY: refYAttr.getValue(),\n            clip,\n            clipX,\n            clipY\n        });\n        if (viewBox) {\n            screen.viewPort.removeCurrent();\n            screen.viewPort.setCurrent(width, height);\n        }\n    }\n    clearContext(ctx) {\n        super.clearContext(ctx);\n        this.document.screen.viewPort.removeCurrent();\n    }\n    /**\n     * Resize SVG to fit in given size.\n     * @param width\n     * @param height\n     * @param preserveAspectRatio\n     */\n    resize(width, height = width, preserveAspectRatio = false) {\n        const widthAttr = this.getAttribute('width', true);\n        const heightAttr = this.getAttribute('height', true);\n        const viewBoxAttr = this.getAttribute('viewBox');\n        const styleAttr = this.getAttribute('style');\n        const originWidth = widthAttr.getNumber(0);\n        const originHeight = heightAttr.getNumber(0);\n        if (preserveAspectRatio) {\n            if (typeof preserveAspectRatio === 'string') {\n                this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio);\n            }\n            else {\n                const preserveAspectRatioAttr = this.getAttribute('preserveAspectRatio');\n                if (preserveAspectRatioAttr.hasValue()) {\n                    preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\\s*(\\S.*\\S)\\s*$/, '$1'));\n                }\n            }\n        }\n        widthAttr.setValue(width);\n        heightAttr.setValue(height);\n        if (!viewBoxAttr.hasValue()) {\n            viewBoxAttr.setValue(`0 0 ${originWidth || width} ${originHeight || height}`);\n        }\n        if (styleAttr.hasValue()) {\n            const widthStyle = this.getStyle('width');\n            const heightStyle = this.getStyle('height');\n            if (widthStyle.hasValue()) {\n                widthStyle.setValue(`${width}px`);\n            }\n            if (heightStyle.hasValue()) {\n                heightStyle.setValue(`${height}px`);\n            }\n        }\n    }\n}\n\nclass RectElement extends PathElement {\n    type = 'rect';\n    path(ctx) {\n        const x = this.getAttribute('x').getPixels('x');\n        const y = this.getAttribute('y').getPixels('y');\n        const width = this.getStyle('width', false, true).getPixels('x');\n        const height = this.getStyle('height', false, true).getPixels('y');\n        const rxAttr = this.getAttribute('rx');\n        const ryAttr = this.getAttribute('ry');\n        let rx = rxAttr.getPixels('x');\n        let ry = ryAttr.getPixels('y');\n        if (rxAttr.hasValue() && !ryAttr.hasValue()) {\n            ry = rx;\n        }\n        if (ryAttr.hasValue() && !rxAttr.hasValue()) {\n            rx = ry;\n        }\n        rx = Math.min(rx, width / 2.0);\n        ry = Math.min(ry, height / 2.0);\n        if (ctx) {\n            const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n            ctx.beginPath(); // always start the path so we don't fill prior paths\n            if (height > 0 && width > 0) {\n                ctx.moveTo(x + rx, y);\n                ctx.lineTo(x + width - rx, y);\n                ctx.bezierCurveTo(x + width - rx + (KAPPA * rx), y, x + width, y + ry - (KAPPA * ry), x + width, y + ry);\n                ctx.lineTo(x + width, y + height - ry);\n                ctx.bezierCurveTo(x + width, y + height - ry + (KAPPA * ry), x + width - rx + (KAPPA * rx), y + height, x + width - rx, y + height);\n                ctx.lineTo(x + rx, y + height);\n                ctx.bezierCurveTo(x + rx - (KAPPA * rx), y + height, x, y + height - ry + (KAPPA * ry), x, y + height - ry);\n                ctx.lineTo(x, y + ry);\n                ctx.bezierCurveTo(x, y + ry - (KAPPA * ry), x + rx - (KAPPA * rx), y, x + rx, y);\n                ctx.closePath();\n            }\n        }\n        return new BoundingBox(x, y, x + width, y + height);\n    }\n    getMarkers() {\n        return null;\n    }\n}\n\nclass CircleElement extends PathElement {\n    type = 'circle';\n    path(ctx) {\n        const cx = this.getAttribute('cx').getPixels('x');\n        const cy = this.getAttribute('cy').getPixels('y');\n        const r = this.getAttribute('r').getPixels();\n        if (ctx && r > 0) {\n            ctx.beginPath();\n            ctx.arc(cx, cy, r, 0, Math.PI * 2, false);\n            ctx.closePath();\n        }\n        return new BoundingBox(cx - r, cy - r, cx + r, cy + r);\n    }\n    getMarkers() {\n        return null;\n    }\n}\n\nclass EllipseElement extends PathElement {\n    type = 'ellipse';\n    path(ctx) {\n        const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n        const rx = this.getAttribute('rx').getPixels('x');\n        const ry = this.getAttribute('ry').getPixels('y');\n        const cx = this.getAttribute('cx').getPixels('x');\n        const cy = this.getAttribute('cy').getPixels('y');\n        if (ctx && rx > 0 && ry > 0) {\n            ctx.beginPath();\n            ctx.moveTo(cx + rx, cy);\n            ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);\n            ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);\n            ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);\n            ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy);\n            ctx.closePath();\n        }\n        return new BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n    }\n    getMarkers() {\n        return null;\n    }\n}\n\nclass LineElement extends PathElement {\n    type = 'line';\n    getPoints() {\n        return [\n            new Point(this.getAttribute('x1').getPixels('x'), this.getAttribute('y1').getPixels('y')),\n            new Point(this.getAttribute('x2').getPixels('x'), this.getAttribute('y2').getPixels('y'))\n        ];\n    }\n    path(ctx) {\n        const [{ x: x0, y: y0 }, { x: x1, y: y1 }] = this.getPoints();\n        if (ctx) {\n            ctx.beginPath();\n            ctx.moveTo(x0, y0);\n            ctx.lineTo(x1, y1);\n        }\n        return new BoundingBox(x0, y0, x1, y1);\n    }\n    getMarkers() {\n        const [p0, p1] = this.getPoints();\n        const a = p0.angleTo(p1);\n        return [[p0, a], [p1, a]];\n    }\n}\n\nclass PolylineElement extends PathElement {\n    type = 'polyline';\n    points = [];\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.points = Point.parsePath(this.getAttribute('points').getString());\n    }\n    path(ctx) {\n        const { points } = this;\n        const [{ x: x0, y: y0 }] = points;\n        const boundingBox = new BoundingBox(x0, y0);\n        if (ctx) {\n            ctx.beginPath();\n            ctx.moveTo(x0, y0);\n        }\n        points.forEach(({ x, y }) => {\n            boundingBox.addPoint(x, y);\n            if (ctx) {\n                ctx.lineTo(x, y);\n            }\n        });\n        return boundingBox;\n    }\n    getMarkers() {\n        const { points } = this;\n        const lastIndex = points.length - 1;\n        const markers = [];\n        points.forEach((point, i) => {\n            if (i === lastIndex) {\n                return;\n            }\n            markers.push([point, point.angleTo(points[i + 1])]);\n        });\n        if (markers.length > 0) {\n            markers.push([points[points.length - 1], markers[markers.length - 1][1]]);\n        }\n        return markers;\n    }\n}\n\nclass PolygonElement extends PolylineElement {\n    type = 'polygon';\n    path(ctx) {\n        const boundingBox = super.path(ctx);\n        const [{ x, y }] = this.points;\n        if (ctx) {\n            ctx.lineTo(x, y);\n            ctx.closePath();\n        }\n        return boundingBox;\n    }\n}\n\nclass PatternElement extends Element {\n    type = 'pattern';\n    createPattern(ctx, _, parentOpacityProp) {\n        const styleWidth = this.getStyle('width').getPixels('x', true);\n        const styleHeight = this.getStyle('height').getPixels('y', true);\n        const nonRepeatingWidth = this.getAttribute('data-frame-width');\n        const nonRepeatingHeight = this.getAttribute('data-frame-height');\n        const width = nonRepeatingWidth.hasValue() ? nonRepeatingWidth.getPixels('x', true) : styleWidth;\n        const height = nonRepeatingHeight.hasValue() ? nonRepeatingHeight.getPixels('y', true) : styleHeight;\n        const disableRepeat = nonRepeatingWidth.hasValue() && nonRepeatingHeight.hasValue();\n        // render me using a temporary svg element\n        const patternSvg = new SVGElement(this.document, undefined);\n        patternSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n        patternSvg.attributes.width = new Property(this.document, 'width', `${width}px`);\n        patternSvg.attributes.height = new Property(this.document, 'height', `${height}px`);\n        patternSvg.attributes.transform = new Property(this.document, 'transform', this.getAttribute('patternTransform').getValue());\n        patternSvg.children = this.children;\n        const patternCanvas = this.document.createCanvas(width, height);\n        const patternCtx = patternCanvas.getContext('2d');\n        patternCtx.imageSmoothingEnabled = true;\n        patternCtx.imageSmoothingQuality = 'high';\n        const xAttr = this.getAttribute('x');\n        const yAttr = this.getAttribute('y');\n        if (xAttr.hasValue() && yAttr.hasValue()) {\n            patternCtx.translate(xAttr.getPixels('x', true), yAttr.getPixels('y', true));\n        }\n        if (parentOpacityProp.hasValue()) {\n            this.styles['fill-opacity'] = parentOpacityProp;\n        }\n        else {\n            Reflect.deleteProperty(this.styles, 'fill-opacity');\n        }\n        // render 3x3 grid so when we transform there's no white space on edges\n        for (let x = -1; x <= 1; x++) {\n            for (let y = -1; y <= 1; y++) {\n                patternCtx.save();\n                patternSvg.attributes.x = new Property(this.document, 'x', x * patternCanvas.width);\n                patternSvg.attributes.y = new Property(this.document, 'y', y * patternCanvas.height);\n                patternSvg.render(patternCtx);\n                patternCtx.restore();\n            }\n        }\n        const pattern = ctx.createPattern(patternCanvas, disableRepeat ? 'no-repeat' : 'repeat');\n        return pattern;\n    }\n}\n\nclass MarkerElement extends Element {\n    type = 'marker';\n    render(ctx, point, angle) {\n        if (!point) {\n            return;\n        }\n        const { x, y } = point;\n        const orient = this.getAttribute('orient').getString('auto');\n        const markerUnits = this.getAttribute('markerUnits').getString('strokeWidth');\n        ctx.translate(x, y);\n        if (orient === 'auto' && angle) {\n            ctx.rotate(angle);\n        }\n        if (markerUnits === 'strokeWidth') {\n            ctx.scale(ctx.lineWidth, ctx.lineWidth);\n        }\n        ctx.save();\n        // render me using a temporary svg element\n        const markerSvg = new SVGElement(this.document);\n        markerSvg.type = this.type;\n        markerSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n        markerSvg.attributes.refX = new Property(this.document, 'refX', this.getAttribute('refX').getValue());\n        markerSvg.attributes.refY = new Property(this.document, 'refY', this.getAttribute('refY').getValue());\n        markerSvg.attributes.width = new Property(this.document, 'width', this.getAttribute('markerWidth').getValue());\n        markerSvg.attributes.height = new Property(this.document, 'height', this.getAttribute('markerHeight').getValue());\n        markerSvg.attributes.overflow = new Property(this.document, 'overflow', this.getAttribute('overflow').getValue());\n        markerSvg.attributes.fill = new Property(this.document, 'fill', this.getAttribute('fill').getColor('black'));\n        markerSvg.attributes.stroke = new Property(this.document, 'stroke', this.getAttribute('stroke').getValue('none'));\n        markerSvg.children = this.children;\n        markerSvg.render(ctx);\n        ctx.restore();\n        if (markerUnits === 'strokeWidth') {\n            ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth);\n        }\n        if (orient === 'auto' && angle) {\n            ctx.rotate(-angle);\n        }\n        ctx.translate(-x, -y);\n    }\n}\n\nclass DefsElement extends Element {\n    type = 'defs';\n    render() {\n        // NOOP\n    }\n}\n\nclass GElement extends RenderedElement {\n    type = 'g';\n    getBoundingBox(ctx) {\n        const boundingBox = new BoundingBox();\n        this.children.forEach((child) => {\n            if (child instanceof PathElement) {\n                boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n            }\n        });\n        return boundingBox;\n    }\n}\n\nclass GradientElement extends Element {\n    attributesToInherit = ['gradientUnits'];\n    stops = [];\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const { stops, children } = this;\n        children.forEach((child) => {\n            if (child.type === 'stop') {\n                stops.push(child);\n            }\n        });\n    }\n    getGradientUnits() {\n        return this.getAttribute('gradientUnits').getString('objectBoundingBox');\n    }\n    createGradient(ctx, element, parentOpacityProp) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n        let stopsContainer = this;\n        if (this.getHrefAttribute().hasValue()) {\n            stopsContainer = this.getHrefAttribute().getDefinition();\n            this.inheritStopContainer(stopsContainer);\n        }\n        const { stops } = stopsContainer;\n        const gradient = this.getGradient(ctx, element);\n        if (!gradient) {\n            return this.addParentOpacity(parentOpacityProp, stops[stops.length - 1].color);\n        }\n        stops.forEach((stop) => {\n            gradient.addColorStop(stop.offset, this.addParentOpacity(parentOpacityProp, stop.color));\n        });\n        if (this.getAttribute('gradientTransform').hasValue()) {\n            // render as transformed pattern on temporary canvas\n            const { document } = this;\n            const { MAX_VIRTUAL_PIXELS } = Screen;\n            const { viewPort } = document.screen;\n            const rootView = viewPort.getRoot();\n            const rect = new RectElement(document);\n            rect.attributes.x = new Property(document, 'x', -MAX_VIRTUAL_PIXELS / 3.0);\n            rect.attributes.y = new Property(document, 'y', -MAX_VIRTUAL_PIXELS / 3.0);\n            rect.attributes.width = new Property(document, 'width', MAX_VIRTUAL_PIXELS);\n            rect.attributes.height = new Property(document, 'height', MAX_VIRTUAL_PIXELS);\n            const group = new GElement(document);\n            group.attributes.transform = new Property(document, 'transform', this.getAttribute('gradientTransform').getValue());\n            group.children = [rect];\n            const patternSvg = new SVGElement(document);\n            patternSvg.attributes.x = new Property(document, 'x', 0);\n            patternSvg.attributes.y = new Property(document, 'y', 0);\n            patternSvg.attributes.width = new Property(document, 'width', rootView.width);\n            patternSvg.attributes.height = new Property(document, 'height', rootView.height);\n            patternSvg.children = [group];\n            const patternCanvas = document.createCanvas(rootView.width, rootView.height);\n            const patternCtx = patternCanvas.getContext('2d');\n            patternCtx.fillStyle = gradient;\n            patternSvg.render(patternCtx);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n            return patternCtx.createPattern(patternCanvas, 'no-repeat');\n        }\n        return gradient;\n    }\n    inheritStopContainer(stopsContainer) {\n        this.attributesToInherit.forEach((attributeToInherit) => {\n            if (!this.getAttribute(attributeToInherit).hasValue()\n                && stopsContainer.getAttribute(attributeToInherit).hasValue()) {\n                this.getAttribute(attributeToInherit, true)\n                    .setValue(stopsContainer.getAttribute(attributeToInherit).getValue());\n            }\n        });\n    }\n    addParentOpacity(parentOpacityProp, color) {\n        if (parentOpacityProp.hasValue()) {\n            const colorProp = new Property(this.document, 'color', color);\n            return colorProp.addOpacity(parentOpacityProp).getColor();\n        }\n        return color;\n    }\n}\n\nclass LinearGradientElement extends GradientElement {\n    type = 'linearGradient';\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.attributesToInherit.push('x1', 'y1', 'x2', 'y2');\n    }\n    getGradient(ctx, element) {\n        const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n        const boundingBox = isBoundingBoxUnits\n            ? element.getBoundingBox(ctx)\n            : null;\n        if (isBoundingBoxUnits || !boundingBox) {\n            return null;\n        }\n        if (!this.getAttribute('x1').hasValue()\n            && !this.getAttribute('y1').hasValue()\n            && !this.getAttribute('x2').hasValue()\n            && !this.getAttribute('y2').hasValue()) {\n            this.getAttribute('x1', true).setValue(0);\n            this.getAttribute('y1', true).setValue(0);\n            this.getAttribute('x2', true).setValue(1);\n            this.getAttribute('y2', true).setValue(0);\n        }\n        const x1 = isBoundingBoxUnits\n            ? boundingBox.x + boundingBox.width * this.getAttribute('x1').getNumber()\n            : this.getAttribute('x1').getPixels('x');\n        const y1 = isBoundingBoxUnits\n            ? boundingBox.y + boundingBox.height * this.getAttribute('y1').getNumber()\n            : this.getAttribute('y1').getPixels('y');\n        const x2 = isBoundingBoxUnits\n            ? boundingBox.x + boundingBox.width * this.getAttribute('x2').getNumber()\n            : this.getAttribute('x2').getPixels('x');\n        const y2 = isBoundingBoxUnits\n            ? boundingBox.y + boundingBox.height * this.getAttribute('y2').getNumber()\n            : this.getAttribute('y2').getPixels('y');\n        if (x1 === x2 && y1 === y2) {\n            return null;\n        }\n        return ctx.createLinearGradient(x1, y1, x2, y2);\n    }\n}\n\nclass RadialGradientElement extends GradientElement {\n    type = 'radialGradient';\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.attributesToInherit.push('cx', 'cy', 'r', 'fx', 'fy', 'fr');\n    }\n    getGradient(ctx, element) {\n        const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n        const boundingBox = element.getBoundingBox(ctx);\n        if (isBoundingBoxUnits && !boundingBox) {\n            return null;\n        }\n        if (!this.getAttribute('cx').hasValue()) {\n            this.getAttribute('cx', true).setValue('50%');\n        }\n        if (!this.getAttribute('cy').hasValue()) {\n            this.getAttribute('cy', true).setValue('50%');\n        }\n        if (!this.getAttribute('r').hasValue()) {\n            this.getAttribute('r', true).setValue('50%');\n        }\n        const cx = isBoundingBoxUnits\n            ? boundingBox.x + boundingBox.width * this.getAttribute('cx').getNumber()\n            : this.getAttribute('cx').getPixels('x');\n        const cy = isBoundingBoxUnits\n            ? boundingBox.y + boundingBox.height * this.getAttribute('cy').getNumber()\n            : this.getAttribute('cy').getPixels('y');\n        let fx = cx;\n        let fy = cy;\n        if (this.getAttribute('fx').hasValue()) {\n            fx = isBoundingBoxUnits\n                ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber()\n                : this.getAttribute('fx').getPixels('x');\n        }\n        if (this.getAttribute('fy').hasValue()) {\n            fy = isBoundingBoxUnits\n                ? boundingBox.y + boundingBox.height * this.getAttribute('fy').getNumber()\n                : this.getAttribute('fy').getPixels('y');\n        }\n        const r = isBoundingBoxUnits\n            ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute('r').getNumber()\n            : this.getAttribute('r').getPixels();\n        const fr = this.getAttribute('fr').getPixels();\n        return ctx.createRadialGradient(fx, fy, fr, cx, cy, r);\n    }\n}\n\nclass StopElement extends Element {\n    type = 'stop';\n    offset;\n    color;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const offset = Math.max(0, Math.min(1, this.getAttribute('offset').getNumber()));\n        const stopOpacity = this.getStyle('stop-opacity');\n        let stopColor = this.getStyle('stop-color', true);\n        if (stopColor.getString() === '') {\n            stopColor.setValue('#000');\n        }\n        if (stopOpacity.hasValue()) {\n            stopColor = stopColor.addOpacity(stopOpacity);\n        }\n        this.offset = offset;\n        this.color = stopColor.getColor();\n    }\n}\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nclass AnimateElement extends Element {\n    type = 'animate';\n    begin;\n    maxDuration;\n    from;\n    to;\n    values;\n    duration = 0;\n    initialValue;\n    initialUnits = '';\n    removed = false;\n    frozen = false;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        document.screen.animations.push(this);\n        this.begin = this.getAttribute('begin').getMilliseconds();\n        this.maxDuration = this.begin + this.getAttribute('dur').getMilliseconds();\n        this.from = this.getAttribute('from');\n        this.to = this.getAttribute('to');\n        this.values = new Property(document, 'values', null);\n        const valuesAttr = this.getAttribute('values');\n        if (valuesAttr.hasValue()) {\n            this.values.setValue(valuesAttr.getString().split(';'));\n        }\n    }\n    getProperty() {\n        const attributeType = this.getAttribute('attributeType').getString();\n        const attributeName = this.getAttribute('attributeName').getString();\n        if (attributeType === 'CSS') {\n            return this.parent?.getStyle(attributeName, true);\n        }\n        return this.parent?.getAttribute(attributeName, true);\n    }\n    calcValue() {\n        const { initialUnits } = this;\n        const { progress, from, to } = this.getProgress();\n        // tween value linearly\n        let newValue = from.getNumber() + (to.getNumber() - from.getNumber()) * progress;\n        if (initialUnits === '%') {\n            newValue *= 100.0; // numValue() returns 0-1 whereas properties are 0-100\n        }\n        return `${newValue}${initialUnits}`;\n    }\n    update(delta) {\n        const { parent } = this;\n        const prop = this.getProperty();\n        if (!prop) {\n            return false;\n        }\n        // set initial value\n        if (!this.initialValue) {\n            this.initialValue = prop.getString();\n            this.initialUnits = prop.getUnits();\n        }\n        // if we're past the end time\n        if (this.duration > this.maxDuration) {\n            const fill = this.getAttribute('fill').getString('remove');\n            // loop for indefinitely repeating animations\n            if (this.getAttribute('repeatCount').getString() === 'indefinite'\n                || this.getAttribute('repeatDur').getString() === 'indefinite') {\n                this.duration = 0;\n            }\n            else if (fill === 'freeze' && !this.frozen) {\n                this.frozen = true;\n                if (parent && prop) {\n                    parent.animationFrozen = true;\n                    parent.animationFrozenValue = prop.getString();\n                }\n            }\n            else if (fill === 'remove' && !this.removed) {\n                this.removed = true;\n                if (parent && prop) {\n                    prop.setValue(parent.animationFrozen\n                        ? parent.animationFrozenValue\n                        : this.initialValue);\n                }\n                return true;\n            }\n            return false;\n        }\n        this.duration += delta;\n        // if we're past the begin time\n        let updated = false;\n        if (this.begin < this.duration) {\n            let newValue = this.calcValue(); // tween\n            const typeAttr = this.getAttribute('type');\n            if (typeAttr.hasValue()) {\n                // for transform, etc.\n                const type = typeAttr.getString();\n                newValue = `${type}(${newValue})`;\n            }\n            prop.setValue(newValue);\n            updated = true;\n        }\n        return updated;\n    }\n    getProgress() {\n        const { document, values } = this;\n        let progress = (this.duration - this.begin) / (this.maxDuration - this.begin);\n        let from;\n        let to;\n        if (values.hasValue()) {\n            const p = progress * (values.getValue().length - 1);\n            const lb = Math.floor(p);\n            const ub = Math.ceil(p);\n            let value;\n            value = values.getValue()[lb];\n            from = new Property(document, 'from', value ? parseFloat(value) : 0);\n            value = values.getValue()[ub];\n            to = new Property(document, 'to', value ? parseFloat(value) : 0);\n            progress = (p - lb) / (ub - lb);\n        }\n        else {\n            from = this.from;\n            to = this.to;\n        }\n        return {\n            progress,\n            from,\n            to\n        };\n    }\n}\n\nclass AnimateColorElement extends AnimateElement {\n    type = 'animateColor';\n    calcValue() {\n        const { progress, from, to } = this.getProgress();\n        const colorFrom = new RGBColor(from.getColor());\n        const colorTo = new RGBColor(to.getColor());\n        if (colorFrom.ok && colorTo.ok) {\n            // tween color linearly\n            const r = colorFrom.r + (colorTo.r - colorFrom.r) * progress;\n            const g = colorFrom.g + (colorTo.g - colorFrom.g) * progress;\n            const b = colorFrom.b + (colorTo.b - colorFrom.b) * progress;\n            // ? alpha\n            return `rgb(${Math.floor(r)}, ${Math.floor(g)}, ${Math.floor(b)})`;\n        }\n        return this.getAttribute('from').getColor();\n    }\n}\n\nclass AnimateTransformElement extends AnimateElement {\n    type = 'animateTransform';\n    calcValue() {\n        const { progress, from, to } = this.getProgress();\n        // tween value linearly\n        const transformFrom = toNumbers(from.getString());\n        const transformTo = toNumbers(to.getString());\n        const newValue = transformFrom.map((from, i) => {\n            const to = transformTo[i];\n            return from + (to - from) * progress;\n        }).join(' ');\n        return newValue;\n    }\n}\n\nclass FontFaceElement extends Element {\n    type = 'font-face';\n    ascent;\n    descent;\n    unitsPerEm;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.ascent = this.getAttribute('ascent').getNumber();\n        this.descent = this.getAttribute('descent').getNumber();\n        this.unitsPerEm = this.getAttribute('units-per-em').getNumber();\n    }\n}\n\nclass GlyphElement extends PathElement {\n    type = 'glyph';\n    horizAdvX;\n    unicode;\n    arabicForm;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n        this.unicode = this.getAttribute('unicode').getString();\n        this.arabicForm = this.getAttribute('arabic-form').getString();\n    }\n}\n\nclass MissingGlyphElement extends GlyphElement {\n    type = 'missing-glyph';\n    horizAdvX = 0;\n}\n\nclass FontElement extends Element {\n    type = 'font';\n    isArabic = false;\n    missingGlyph;\n    glyphs = {};\n    arabicGlyphs = {};\n    horizAdvX;\n    isRTL = false;\n    fontFace;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n        const { definitions } = document;\n        const { children } = this;\n        for (const child of children) {\n            if (child instanceof FontFaceElement) {\n                this.fontFace = child;\n                const fontFamilyStyle = child.getStyle('font-family');\n                if (fontFamilyStyle.hasValue()) {\n                    definitions[fontFamilyStyle.getString()] = this;\n                }\n            }\n            else if (child instanceof MissingGlyphElement) {\n                this.missingGlyph = child;\n            }\n            else if (child instanceof GlyphElement) {\n                if (child.arabicForm) {\n                    this.isRTL = true;\n                    this.isArabic = true;\n                    const arabicGlyph = this.arabicGlyphs[child.unicode];\n                    if (typeof arabicGlyph === 'undefined') {\n                        this.arabicGlyphs[child.unicode] = {\n                            [child.arabicForm]: child\n                        };\n                    }\n                    else {\n                        arabicGlyph[child.arabicForm] = child;\n                    }\n                }\n                else {\n                    this.glyphs[child.unicode] = child;\n                }\n            }\n        }\n    }\n    render() {\n        // NO RENDER\n    }\n}\n\nclass TRefElement extends TextElement {\n    type = 'tref';\n    getText() {\n        const element = this.getHrefAttribute().getDefinition();\n        if (element) {\n            const firstChild = element.children[0];\n            if (firstChild) {\n                return firstChild.getText();\n            }\n        }\n        return '';\n    }\n}\n\nclass AElement extends TextElement {\n    type = 'a';\n    hasText;\n    text;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const { childNodes } = node;\n        const firstChild = childNodes[0];\n        const hasText = childNodes.length > 0\n            && Array.from(childNodes).every(node => node.nodeType === 3);\n        this.hasText = hasText;\n        this.text = hasText\n            ? this.getTextFromNode(firstChild)\n            : '';\n    }\n    getText() {\n        return this.text;\n    }\n    renderChildren(ctx) {\n        if (this.hasText) {\n            // render as text element\n            super.renderChildren(ctx);\n            const { document, x, y } = this;\n            const { mouse } = document.screen;\n            const fontSize = new Property(document, 'fontSize', Font.parse(document.ctx.font).fontSize);\n            // Do not calc bounding box if mouse is not working.\n            if (mouse.isWorking()) {\n                mouse.checkBoundingBox(this, new BoundingBox(x, y - fontSize.getPixels('y'), x + this.measureText(ctx), y));\n            }\n        }\n        else if (this.children.length > 0) {\n            // render as temporary group\n            const g = new GElement(this.document);\n            g.children = this.children;\n            g.parent = this;\n            g.render(ctx);\n        }\n    }\n    onClick() {\n        const { window } = this.document;\n        if (window) {\n            window.open(this.getHrefAttribute().getString());\n        }\n    }\n    onMouseMove() {\n        const ctx = this.document.ctx;\n        ctx.canvas.style.cursor = 'pointer';\n    }\n}\n\nclass TextPathElement extends TextElement {\n    type = 'textPath';\n    textWidth = 0;\n    textHeight = 0;\n    pathLength = -1;\n    glyphInfo = null;\n    text;\n    dataArray;\n    letterSpacingCache = [];\n    equidistantCache = null;\n    measuresCache = new Map([['', 0]]);\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const pathElement = this.getHrefAttribute().getDefinition();\n        this.text = this.getTextFromNode();\n        this.dataArray = this.parsePathData(pathElement);\n    }\n    getText() {\n        return this.text;\n    }\n    path(ctx) {\n        const { dataArray } = this;\n        if (ctx) {\n            ctx.beginPath();\n        }\n        dataArray.forEach(({ type, points }) => {\n            switch (type) {\n                case PathParser.LINE_TO:\n                    if (ctx) {\n                        ctx.lineTo(points[0], points[1]);\n                    }\n                    break;\n                case PathParser.MOVE_TO:\n                    if (ctx) {\n                        ctx.moveTo(points[0], points[1]);\n                    }\n                    break;\n                case PathParser.CURVE_TO:\n                    if (ctx) {\n                        ctx.bezierCurveTo(points[0], points[1], points[2], points[3], points[4], points[5]);\n                    }\n                    break;\n                case PathParser.QUAD_TO:\n                    if (ctx) {\n                        ctx.quadraticCurveTo(points[0], points[1], points[2], points[3]);\n                    }\n                    break;\n                case PathParser.ARC: {\n                    const [cx, cy, rx, ry, theta, dTheta, psi, fs] = points;\n                    const r = rx > ry ? rx : ry;\n                    const scaleX = rx > ry ? 1 : rx / ry;\n                    const scaleY = rx > ry ? ry / rx : 1;\n                    if (ctx) {\n                        ctx.translate(cx, cy);\n                        ctx.rotate(psi);\n                        ctx.scale(scaleX, scaleY);\n                        ctx.arc(0, 0, r, theta, theta + dTheta, Boolean(1 - fs));\n                        ctx.scale(1 / scaleX, 1 / scaleY);\n                        ctx.rotate(-psi);\n                        ctx.translate(-cx, -cy);\n                    }\n                    break;\n                }\n                case PathParser.CLOSE_PATH:\n                    if (ctx) {\n                        ctx.closePath();\n                    }\n                    break;\n            }\n        });\n    }\n    renderChildren(ctx) {\n        this.setTextData(ctx);\n        ctx.save();\n        const textDecoration = this.parent?.getStyle('text-decoration').getString();\n        const fontSize = this.getFontSize();\n        const { glyphInfo } = this;\n        const fill = ctx.fillStyle;\n        if (textDecoration === 'underline') {\n            ctx.beginPath();\n        }\n        glyphInfo.forEach((glyph, i) => {\n            const { p0, p1, rotation, text: partialText } = glyph;\n            ctx.save();\n            ctx.translate(p0.x, p0.y);\n            ctx.rotate(rotation);\n            if (ctx.fillStyle) {\n                ctx.fillText(partialText, 0, 0);\n            }\n            if (ctx.strokeStyle) {\n                ctx.strokeText(partialText, 0, 0);\n            }\n            ctx.restore();\n            if (textDecoration === 'underline') {\n                if (i === 0) {\n                    ctx.moveTo(p0.x, p0.y + fontSize / 8);\n                }\n                ctx.lineTo(p1.x, p1.y + fontSize / 5);\n            }\n            // // To assist with debugging visually, uncomment following\n            //\n            // ctx.beginPath();\n            // if (i % 2)\n            //   ctx.strokeStyle = 'red';\n            // else\n            //   ctx.strokeStyle = 'green';\n            // ctx.moveTo(p0.x, p0.y);\n            // ctx.lineTo(p1.x, p1.y);\n            // ctx.stroke();\n            // ctx.closePath();\n        });\n        if (textDecoration === 'underline') {\n            ctx.lineWidth = fontSize / 20;\n            ctx.strokeStyle = fill;\n            ctx.stroke();\n            ctx.closePath();\n        }\n        ctx.restore();\n    }\n    getLetterSpacingAt(idx = 0) {\n        return this.letterSpacingCache[idx] || 0;\n    }\n    findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, inputOffset, dy, c, charI) {\n        let offset = inputOffset;\n        let glyphWidth = this.measureText(ctx, c);\n        if (c === ' '\n            && anchor === 'justify'\n            && textFullWidth < fullPathWidth) {\n            glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber;\n        }\n        if (charI > -1) {\n            offset += this.getLetterSpacingAt(charI);\n        }\n        const splineStep = this.textHeight / 20;\n        const p0 = this.getEquidistantPointOnPath(offset, splineStep, 0);\n        const p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0);\n        const segment = {\n            p0,\n            p1\n        };\n        const rotation = p0 && p1\n            ? Math.atan2(p1.y - p0.y, p1.x - p0.x)\n            : 0;\n        if (dy) {\n            const dyX = Math.cos(Math.PI / 2 + rotation) * dy;\n            const dyY = Math.cos(-rotation) * dy;\n            segment.p0 = {\n                ...p0,\n                distance: p0.distance || 0,\n                x: p0.x + dyX,\n                y: p0.y + dyY\n            };\n            segment.p1 = {\n                ...p1,\n                distance: p1.distance || 0,\n                x: p1.x + dyX,\n                y: p1.y + dyY\n            };\n        }\n        offset += glyphWidth;\n        return {\n            offset,\n            segment,\n            rotation\n        };\n    }\n    measureText(ctx, text) {\n        const { measuresCache } = this;\n        const targetText = text || this.getText();\n        if (measuresCache.has(targetText)) {\n            return measuresCache.get(targetText);\n        }\n        const measure = this.measureTargetText(ctx, targetText);\n        measuresCache.set(targetText, measure);\n        return measure;\n    }\n    // This method supposes what all custom fonts already loaded.\n    // If some font will be loaded after this method call, <textPath> will not be rendered correctly.\n    // You need to call this method manually to update glyphs cache.\n    setTextData(ctx) {\n        if (this.glyphInfo) {\n            return;\n        }\n        const renderText = this.getText();\n        const chars = renderText.split('');\n        const spacesNumber = renderText.split(' ').length - 1;\n        const dx = this.parent?.getAttribute('dx').split().map(_ => _.getPixels('x'));\n        const dy = this.parent?.getAttribute('dy').getPixels('y');\n        const anchor = this.getAttribute('text-anchor').getString('start');\n        const thisSpacing = this.getStyle('letter-spacing');\n        const parentSpacing = this.parent?.getStyle('letter-spacing');\n        let letterSpacing = 0;\n        if (!thisSpacing.hasValue()\n            || thisSpacing.getValue() === 'inherit') {\n            letterSpacing = parentSpacing.getPixels();\n        }\n        else if (thisSpacing.hasValue()) {\n            if (thisSpacing.getValue() !== 'initial'\n                && thisSpacing.getValue() !== 'unset') {\n                letterSpacing = thisSpacing.getPixels();\n            }\n        }\n        // fill letter-spacing cache\n        const letterSpacingCache = [];\n        const textLen = renderText.length;\n        this.letterSpacingCache = letterSpacingCache;\n        for (let i = 0; i < textLen; i++) {\n            letterSpacingCache.push(typeof dx[i] !== 'undefined'\n                ? dx[i]\n                : letterSpacing);\n        }\n        const dxSum = letterSpacingCache.reduce((acc, cur, i) => (i === 0\n            ? 0\n            : acc + cur || 0), 0);\n        const textWidth = this.measureText(ctx);\n        const textFullWidth = Math.max(textWidth + dxSum, 0);\n        this.textWidth = textWidth;\n        this.textHeight = this.getFontSize();\n        this.glyphInfo = [];\n        const fullPathWidth = this.getPathLength();\n        const startOffset = this.getAttribute('startOffset').getNumber(0) * fullPathWidth;\n        let offset = 0;\n        if (anchor === 'middle'\n            || anchor === 'center') {\n            offset = -textFullWidth / 2;\n        }\n        if (anchor === 'end'\n            || anchor === 'right') {\n            offset = -textFullWidth;\n        }\n        offset += startOffset;\n        chars.forEach((char, i) => {\n            // Find such segment what distance between p0 and p1 is approx. width of glyph\n            const { offset: nextOffset, segment, rotation } = this.findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, offset, dy, char, i);\n            offset = nextOffset;\n            if (!segment.p0 || !segment.p1) {\n                return;\n            }\n            // const width = this.getLineLength(\n            //   segment.p0.x,\n            //   segment.p0.y,\n            //   segment.p1.x,\n            //   segment.p1.y\n            // );\n            // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used.\n            // Can foresee having a rough pair table built in that the developer can override as needed.\n            // Or use \"dx\" attribute of the <text> node as a naive replacement\n            // const kern = 0;\n            // placeholder for future implementation\n            // const midpoint = this.getPointOnLine(\n            //   kern + width / 2.0,\n            //   segment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y\n            // );\n            this.glyphInfo.push({\n                // transposeX: midpoint.x,\n                // transposeY: midpoint.y,\n                text: chars[i],\n                p0: segment.p0,\n                p1: segment.p1,\n                rotation\n            });\n        });\n    }\n    parsePathData(path) {\n        this.pathLength = -1; // reset path length\n        if (!path) {\n            return [];\n        }\n        const pathCommands = [];\n        const { pathParser } = path;\n        pathParser.reset();\n        // convert l, H, h, V, and v to L\n        while (!pathParser.isEnd()) {\n            const { current } = pathParser;\n            const startX = current ? current.x : 0;\n            const startY = current ? current.y : 0;\n            const command = pathParser.next();\n            let nextCommandType = command.type;\n            let points = [];\n            switch (command.type) {\n                case PathParser.MOVE_TO:\n                    this.pathM(pathParser, points);\n                    break;\n                case PathParser.LINE_TO:\n                    nextCommandType = this.pathL(pathParser, points);\n                    break;\n                case PathParser.HORIZ_LINE_TO:\n                    nextCommandType = this.pathH(pathParser, points);\n                    break;\n                case PathParser.VERT_LINE_TO:\n                    nextCommandType = this.pathV(pathParser, points);\n                    break;\n                case PathParser.CURVE_TO:\n                    this.pathC(pathParser, points);\n                    break;\n                case PathParser.SMOOTH_CURVE_TO:\n                    nextCommandType = this.pathS(pathParser, points);\n                    break;\n                case PathParser.QUAD_TO:\n                    this.pathQ(pathParser, points);\n                    break;\n                case PathParser.SMOOTH_QUAD_TO:\n                    nextCommandType = this.pathT(pathParser, points);\n                    break;\n                case PathParser.ARC:\n                    points = this.pathA(pathParser);\n                    break;\n                case PathParser.CLOSE_PATH:\n                    PathElement.pathZ(pathParser);\n                    break;\n            }\n            if (command.type !== PathParser.CLOSE_PATH) {\n                pathCommands.push({\n                    type: nextCommandType,\n                    points,\n                    start: {\n                        x: startX,\n                        y: startY\n                    },\n                    pathLength: this.calcLength(startX, startY, nextCommandType, points)\n                });\n            }\n            else {\n                pathCommands.push({\n                    type: PathParser.CLOSE_PATH,\n                    points: [],\n                    pathLength: 0\n                });\n            }\n        }\n        return pathCommands;\n    }\n    pathM(pathParser, points) {\n        const { x, y } = PathElement.pathM(pathParser).point;\n        points.push(x, y);\n    }\n    pathL(pathParser, points) {\n        const { x, y } = PathElement.pathL(pathParser).point;\n        points.push(x, y);\n        return PathParser.LINE_TO;\n    }\n    pathH(pathParser, points) {\n        const { x, y } = PathElement.pathH(pathParser).point;\n        points.push(x, y);\n        return PathParser.LINE_TO;\n    }\n    pathV(pathParser, points) {\n        const { x, y } = PathElement.pathV(pathParser).point;\n        points.push(x, y);\n        return PathParser.LINE_TO;\n    }\n    pathC(pathParser, points) {\n        const { point, controlPoint, currentPoint } = PathElement.pathC(pathParser);\n        points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n    }\n    pathS(pathParser, points) {\n        const { point, controlPoint, currentPoint } = PathElement.pathS(pathParser);\n        points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        return PathParser.CURVE_TO;\n    }\n    pathQ(pathParser, points) {\n        const { controlPoint, currentPoint } = PathElement.pathQ(pathParser);\n        points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n    }\n    pathT(pathParser, points) {\n        const { controlPoint, currentPoint } = PathElement.pathT(pathParser);\n        points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n        return PathParser.QUAD_TO;\n    }\n    pathA(pathParser) {\n        let { rX, rY, sweepFlag, xAxisRotation, centp, a1, ad } = PathElement.pathA(pathParser);\n        if (sweepFlag === 0 && ad > 0) {\n            ad -= 2 * Math.PI;\n        }\n        if (sweepFlag === 1 && ad < 0) {\n            ad += 2 * Math.PI;\n        }\n        return [\n            centp.x,\n            centp.y,\n            rX,\n            rY,\n            a1,\n            ad,\n            xAxisRotation,\n            sweepFlag\n        ];\n    }\n    calcLength(x, y, commandType, points) {\n        let len = 0;\n        let p1 = null;\n        let p2 = null;\n        let t = 0;\n        switch (commandType) {\n            case PathParser.LINE_TO:\n                return this.getLineLength(x, y, points[0], points[1]);\n            case PathParser.CURVE_TO:\n                // Approximates by breaking curve into 100 line segments\n                len = 0.0;\n                p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n                for (t = 0.01; t <= 1; t += 0.01) {\n                    p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n                    len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n                    p1 = p2;\n                }\n                return len;\n            case PathParser.QUAD_TO:\n                // Approximates by breaking curve into 100 line segments\n                len = 0.0;\n                p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n                for (t = 0.01; t <= 1; t += 0.01) {\n                    p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n                    len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n                    p1 = p2;\n                }\n                return len;\n            case PathParser.ARC: {\n                // Approximates by breaking curve into line segments\n                len = 0.0;\n                const start = points[4];\n                // 4 = theta\n                const dTheta = points[5];\n                // 5 = dTheta\n                const end = points[4] + dTheta;\n                let inc = Math.PI / 180.0;\n                // 1 degree resolution\n                if (Math.abs(start - end) < inc) {\n                    inc = Math.abs(start - end);\n                }\n                // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi\n                p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n                if (dTheta < 0) { // clockwise\n                    for (t = start - inc; t > end; t -= inc) {\n                        p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n                        len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n                        p1 = p2;\n                    }\n                }\n                else { // counter-clockwise\n                    for (t = start + inc; t < end; t += inc) {\n                        p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n                        len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n                        p1 = p2;\n                    }\n                }\n                p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n                len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n                return len;\n            }\n        }\n        return 0;\n    }\n    getPointOnLine(dist, p1x, p1y, p2x, p2y, fromX = p1x, fromY = p1y) {\n        const m = (p2y - p1y) / ((p2x - p1x) + PSEUDO_ZERO);\n        let run = Math.sqrt(dist * dist / (1 + m * m));\n        if (p2x < p1x) {\n            run *= -1;\n        }\n        let rise = m * run;\n        let pt = null;\n        if (p2x === p1x) { // vertical line\n            pt = {\n                x: fromX,\n                y: fromY + rise\n            };\n        }\n        else if ((fromY - p1y) / ((fromX - p1x) + PSEUDO_ZERO) === m) {\n            pt = {\n                x: fromX + run,\n                y: fromY + rise\n            };\n        }\n        else {\n            let ix = 0;\n            let iy = 0;\n            const len = this.getLineLength(p1x, p1y, p2x, p2y);\n            if (len < PSEUDO_ZERO) {\n                return null;\n            }\n            let u = ((fromX - p1x) * (p2x - p1x))\n                + ((fromY - p1y) * (p2y - p1y));\n            u /= len * len;\n            ix = p1x + u * (p2x - p1x);\n            iy = p1y + u * (p2y - p1y);\n            const pRise = this.getLineLength(fromX, fromY, ix, iy);\n            const pRun = Math.sqrt(dist * dist - pRise * pRise);\n            run = Math.sqrt(pRun * pRun / (1 + m * m));\n            if (p2x < p1x) {\n                run *= -1;\n            }\n            rise = m * run;\n            pt = {\n                x: ix + run,\n                y: iy + rise\n            };\n        }\n        return pt;\n    }\n    getPointOnPath(distance) {\n        const fullLen = this.getPathLength();\n        let cumulativePathLength = 0;\n        let p = null;\n        if (distance < -0.00005\n            || distance - 0.00005 > fullLen) {\n            return null;\n        }\n        const { dataArray } = this;\n        for (const command of dataArray) {\n            if (command\n                && (command.pathLength < 0.00005\n                    || cumulativePathLength + command.pathLength + 0.00005 < distance)) {\n                cumulativePathLength += command.pathLength;\n                continue;\n            }\n            const delta = distance - cumulativePathLength;\n            let currentT = 0;\n            switch (command.type) {\n                case PathParser.LINE_TO:\n                    p = this.getPointOnLine(delta, command.start.x, command.start.y, command.points[0], command.points[1], command.start.x, command.start.y);\n                    break;\n                case PathParser.ARC: {\n                    const start = command.points[4];\n                    // 4 = theta\n                    const dTheta = command.points[5];\n                    // 5 = dTheta\n                    const end = command.points[4] + dTheta;\n                    currentT = start + delta / command.pathLength * dTheta;\n                    if (dTheta < 0 && currentT < end\n                        || dTheta >= 0 && currentT > end) {\n                        break;\n                    }\n                    p = this.getPointOnEllipticalArc(command.points[0], command.points[1], command.points[2], command.points[3], currentT, command.points[6]);\n                    break;\n                }\n                case PathParser.CURVE_TO:\n                    currentT = delta / command.pathLength;\n                    if (currentT > 1) {\n                        currentT = 1;\n                    }\n                    p = this.getPointOnCubicBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3], command.points[4], command.points[5]);\n                    break;\n                case PathParser.QUAD_TO:\n                    currentT = delta / command.pathLength;\n                    if (currentT > 1) {\n                        currentT = 1;\n                    }\n                    p = this.getPointOnQuadraticBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3]);\n                    break;\n            }\n            if (p) {\n                return p;\n            }\n            break;\n        }\n        return null;\n    }\n    getLineLength(x1, y1, x2, y2) {\n        return Math.sqrt((x2 - x1) * (x2 - x1)\n            + (y2 - y1) * (y2 - y1));\n    }\n    getPathLength() {\n        if (this.pathLength === -1) {\n            this.pathLength = this.dataArray.reduce((length, command) => (command.pathLength > 0\n                ? length + command.pathLength\n                : length), 0);\n        }\n        return this.pathLength;\n    }\n    getPointOnCubicBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n        const x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct);\n        const y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct);\n        return {\n            x,\n            y\n        };\n    }\n    getPointOnQuadraticBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y) {\n        const x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct);\n        const y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct);\n        return {\n            x,\n            y\n        };\n    }\n    getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {\n        const cosPsi = Math.cos(psi);\n        const sinPsi = Math.sin(psi);\n        const pt = {\n            x: rx * Math.cos(theta),\n            y: ry * Math.sin(theta)\n        };\n        return {\n            x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n            y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n        };\n    }\n    // TODO need some optimisations. possibly build cache only for curved segments?\n    buildEquidistantCache(inputStep, inputPrecision) {\n        const fullLen = this.getPathLength();\n        const precision = inputPrecision || 0.25; // accuracy vs performance\n        const step = inputStep || fullLen / 100;\n        if (!this.equidistantCache\n            || this.equidistantCache.step !== step\n            || this.equidistantCache.precision !== precision) {\n            // Prepare cache\n            this.equidistantCache = {\n                step,\n                precision,\n                points: []\n            };\n            // Calculate points\n            let s = 0;\n            for (let l = 0; l <= fullLen; l += precision) {\n                const p0 = this.getPointOnPath(l);\n                const p1 = this.getPointOnPath(l + precision);\n                if (!p0 || !p1) {\n                    continue;\n                }\n                s += this.getLineLength(p0.x, p0.y, p1.x, p1.y);\n                if (s >= step) {\n                    this.equidistantCache.points.push({\n                        x: p0.x,\n                        y: p0.y,\n                        distance: l\n                    });\n                    s -= step;\n                }\n            }\n        }\n    }\n    getEquidistantPointOnPath(targetDistance, step, precision) {\n        this.buildEquidistantCache(step, precision);\n        if (targetDistance < 0\n            || targetDistance - this.getPathLength() > 0.00005) {\n            return null;\n        }\n        const idx = Math.round(targetDistance\n            / this.getPathLength()\n            * (this.equidistantCache.points.length - 1));\n        return this.equidistantCache.points[idx] || null;\n    }\n}\n\n// groups: 1: mime-type (+ charset), 2: mime-type (w/o charset), 3: charset, 4: base64?, 5: body\nconst dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i;\nclass ImageElement extends RenderedElement {\n    type = 'image';\n    loaded = false;\n    image;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const href = this.getHrefAttribute().getString();\n        if (!href) {\n            return;\n        }\n        const isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href);\n        document.images.push(this);\n        if (!isSvg) {\n            void this.loadImage(href);\n        }\n        else {\n            void this.loadSvg(href);\n        }\n    }\n    async loadImage(href) {\n        try {\n            // Fetch image with anonymous true to prevent canvas from getting marked as tainted.\n            // https://stackoverflow.com/a/27840082\n            const image = await this.document.createImage(href, true);\n            this.image = image;\n        }\n        catch (err) {\n            console.error(`Error while loading image \"${href}\":`, err);\n        }\n        this.loaded = true;\n    }\n    async loadSvg(href) {\n        const match = dataUriRegex.exec(href);\n        if (match) {\n            const data = match[5];\n            if (data) {\n                if (match[4] === 'base64') {\n                    this.image = atob(data);\n                }\n                else {\n                    this.image = decodeURIComponent(data);\n                }\n            }\n        }\n        else {\n            try {\n                const response = await this.document.fetch(href);\n                const svg = await response.text();\n                this.image = svg;\n            }\n            catch (err) {\n                console.error(`Error while loading image \"${href}\":`, err);\n            }\n        }\n        this.loaded = true;\n    }\n    renderChildren(ctx) {\n        const { document, image, loaded } = this;\n        const x = this.getAttribute('x').getPixels('x');\n        const y = this.getAttribute('y').getPixels('y');\n        const width = this.getStyle('width').getPixels('x');\n        const height = this.getStyle('height').getPixels('y');\n        if (!loaded || !image\n            || !width || !height) {\n            return;\n        }\n        ctx.save();\n        ctx.translate(x, y);\n        if (typeof image === 'string') {\n            const subDocument = document.pith.forkString(ctx, image, {\n                ignoreMouse: true,\n                ignoreAnimation: true,\n                ignoreDimensions: true,\n                ignoreClear: true,\n                offsetX: 0,\n                offsetY: 0,\n                scaleWidth: width,\n                scaleHeight: height\n            });\n            const { documentElement } = subDocument.document;\n            if (documentElement) {\n                documentElement.parent = this;\n            }\n            subDocument.resize(width, height, this.getAttribute('preserveAspectRatio').getString());\n            void subDocument.render();\n        }\n        else {\n            document.setViewBox({\n                ctx,\n                aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n                width,\n                desiredWidth: image.width,\n                height,\n                desiredHeight: image.height\n            });\n            if (this.loaded) {\n                if (!('complete' in image) || image.complete) {\n                    ctx.drawImage(image, 0, 0);\n                }\n            }\n        }\n        ctx.restore();\n    }\n    getBoundingBox() {\n        const x = this.getAttribute('x').getPixels('x');\n        const y = this.getAttribute('y').getPixels('y');\n        const width = this.getStyle('width').getPixels('x');\n        const height = this.getStyle('height').getPixels('y');\n        return new BoundingBox(x, y, x + width, y + height);\n    }\n}\n\nclass SymbolElement extends RenderedElement {\n    type = 'symbol';\n    render(_) {\n        // NO RENDER\n    }\n}\n\nclass SVGFontLoader {\n    document;\n    loaded = false;\n    constructor(document) {\n        this.document = document;\n        document.fonts.push(this);\n    }\n    async load(fontFamily, url) {\n        try {\n            const { document } = this;\n            const svgDocument = await document.pith.parser.load(url);\n            const fonts = svgDocument.getElementsByTagName('font');\n            Array.from(fonts).forEach((fontNode) => {\n                const font = document.createElement(fontNode);\n                document.definitions[fontFamily] = font;\n            });\n        }\n        catch (err) {\n            console.error(`Error while loading font \"${url}\":`, err);\n        }\n        this.loaded = true;\n    }\n}\n\nclass StyleElement extends Element {\n    static parseExternalUrl = parseExternalUrl;\n    type = 'style';\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        const css = compressSpaces(Array.from(node.childNodes)\n            // NEED TEST\n            .map(_ => _.textContent)\n            .join('')\n            .replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, '') // remove comments\n            .replace(/@import.*;/g, '') // remove imports\n        );\n        const cssDefs = css.split('}');\n        cssDefs.forEach((_) => {\n            const def = _.trim();\n            if (!def) {\n                return;\n            }\n            const cssParts = def.split('{');\n            const cssClasses = cssParts[0].split(',');\n            const cssProps = cssParts[1].split(';');\n            cssClasses.forEach((_) => {\n                const cssClass = _.trim();\n                if (!cssClass) {\n                    return;\n                }\n                const props = document.styles[cssClass] || {};\n                cssProps.forEach((cssProp) => {\n                    const prop = cssProp.indexOf(':');\n                    const name = cssProp.substr(0, prop).trim();\n                    const value = cssProp.substr(prop + 1, cssProp.length - prop).trim();\n                    if (name && value) {\n                        props[name] = new Property(document, name, value);\n                    }\n                });\n                document.styles[cssClass] = props;\n                document.stylesSpecificity[cssClass] = getSelectorSpecificity(cssClass);\n                if (cssClass === '@font-face') { //  && !nodeEnv\n                    const fontFamily = props['font-family'].getString().replace(/\"|'/g, '');\n                    const srcs = props.src.getString().split(',');\n                    srcs.forEach((src) => {\n                        if (src.indexOf('format(\"svg\")') > 0) {\n                            const url = parseExternalUrl(src);\n                            if (url) {\n                                void new SVGFontLoader(document).load(fontFamily, url);\n                            }\n                        }\n                    });\n                }\n            });\n        });\n    }\n}\n\nclass UseElement extends RenderedElement {\n    type = 'use';\n    cachedElement;\n    setContext(ctx) {\n        super.setContext(ctx);\n        const xAttr = this.getAttribute('x');\n        const yAttr = this.getAttribute('y');\n        if (xAttr.hasValue()) {\n            ctx.translate(xAttr.getPixels('x'), 0);\n        }\n        if (yAttr.hasValue()) {\n            ctx.translate(0, yAttr.getPixels('y'));\n        }\n    }\n    path(ctx) {\n        const { element } = this;\n        if (element) {\n            element.path(ctx);\n        }\n    }\n    renderChildren(ctx) {\n        const { document, element } = this;\n        if (element) {\n            let tempSvg = element;\n            if (element.type === 'symbol') {\n                // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement)\n                tempSvg = new SVGElement(document);\n                tempSvg.attributes.viewBox = new Property(document, 'viewBox', element.getAttribute('viewBox').getString());\n                tempSvg.attributes.preserveAspectRatio = new Property(document, 'preserveAspectRatio', element.getAttribute('preserveAspectRatio').getString());\n                tempSvg.attributes.overflow = new Property(document, 'overflow', element.getAttribute('overflow').getString());\n                tempSvg.children = element.children;\n                // element is still the parent of the children\n                element.styles.opacity = new Property(document, 'opacity', this.calculateOpacity());\n            }\n            if (tempSvg.type === 'svg') {\n                const widthStyle = this.getStyle('width', false, true);\n                const heightStyle = this.getStyle('height', false, true);\n                // if symbol or svg, inherit width/height from me\n                if (widthStyle.hasValue()) {\n                    tempSvg.attributes.width = new Property(document, 'width', widthStyle.getString());\n                }\n                if (heightStyle.hasValue()) {\n                    tempSvg.attributes.height = new Property(document, 'height', heightStyle.getString());\n                }\n            }\n            const oldParent = tempSvg.parent;\n            tempSvg.parent = this;\n            tempSvg.render(ctx);\n            tempSvg.parent = oldParent;\n        }\n    }\n    getBoundingBox(ctx) {\n        const { element } = this;\n        if (element) {\n            return element.getBoundingBox(ctx);\n        }\n        return null;\n    }\n    elementTransform() {\n        const { document, element } = this;\n        if (!element) {\n            return null;\n        }\n        return Transform.fromElement(document, element);\n    }\n    get element() {\n        if (!this.cachedElement) {\n            this.cachedElement = this.getHrefAttribute().getDefinition();\n        }\n        return this.cachedElement;\n    }\n}\n\nfunction m(matrix, i, v) {\n    const mi = matrix[i];\n    return mi * v;\n}\nfunction c(a, m1, m2, m3) {\n    return m1 + Math.cos(a) * m2 + Math.sin(a) * m3;\n}\nclass FeColorMatrixElement extends FeElement {\n    type = 'feColorMatrix';\n    matrix;\n    includeOpacity;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        let matrix = toNumbers(this.getAttribute('values').getString());\n        switch (this.getAttribute('type').getString('matrix')) { // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\n            case 'saturate': {\n                const s = matrix[0];\n                /* eslint-disable array-element-newline */\n                matrix = [\n                    0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0,\n                    0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0,\n                    0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0,\n                    0, 0, 0, 1, 0,\n                    0, 0, 0, 0, 1\n                ];\n                /* eslint-enable array-element-newline */\n                break;\n            }\n            case 'hueRotate': {\n                const a = matrix[0] * Math.PI / 180.0;\n                /* eslint-disable array-element-newline */\n                matrix = [\n                    c(a, 0.213, 0.787, -0.213), c(a, 0.715, -0.715, -0.715), c(a, 0.072, -0.072, 0.928), 0, 0,\n                    c(a, 0.213, -0.213, 0.143), c(a, 0.715, 0.285, 0.140), c(a, 0.072, -0.072, -0.283), 0, 0,\n                    c(a, 0.213, -0.213, -0.787), c(a, 0.715, -0.715, 0.715), c(a, 0.072, 0.928, 0.072), 0, 0,\n                    0, 0, 0, 1, 0,\n                    0, 0, 0, 0, 1\n                ];\n                /* eslint-enable array-element-newline */\n                break;\n            }\n            case 'luminanceToAlpha':\n                /* eslint-disable array-element-newline */\n                matrix = [\n                    0, 0, 0, 0, 0,\n                    0, 0, 0, 0, 0,\n                    0, 0, 0, 0, 0,\n                    0.2125, 0.7154, 0.0721, 0, 0,\n                    0, 0, 0, 0, 1\n                ];\n                /* eslint-enable array-element-newline */\n                break;\n        }\n        this.matrix = matrix;\n        this.includeOpacity = this.getAttribute('includeOpacity').hasValue();\n    }\n    apply(ctx, _x, _y, width, height) {\n        // assuming x==0 && y==0 for now\n        const { includeOpacity, matrix } = this;\n        const srcData = ctx.getImageData(0, 0, width, height);\n        for (let y = 0; y < height; y++) {\n            for (let x = 0; x < width; x++) {\n                const r = imGet(srcData.data, x, y, width, height, 0);\n                const g = imGet(srcData.data, x, y, width, height, 1);\n                const b = imGet(srcData.data, x, y, width, height, 2);\n                const a = imGet(srcData.data, x, y, width, height, 3);\n                let nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1);\n                let ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1);\n                let nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1);\n                let na = m(matrix, 15, r) + m(matrix, 16, g) + m(matrix, 17, b) + m(matrix, 18, a) + m(matrix, 19, 1);\n                if (includeOpacity) {\n                    nr = 0;\n                    ng = 0;\n                    nb = 0;\n                    na *= a / 255;\n                }\n                imSet(srcData.data, x, y, width, height, 0, nr);\n                imSet(srcData.data, x, y, width, height, 1, ng);\n                imSet(srcData.data, x, y, width, height, 2, nb);\n                imSet(srcData.data, x, y, width, height, 3, na);\n            }\n        }\n        ctx.clearRect(0, 0, width, height);\n        ctx.putImageData(srcData, 0, 0);\n    }\n}\n\nclass MaskElement extends Element {\n    static ignoreStyles = [\n        'mask',\n        'transform',\n        'clip-path'\n    ];\n    type = 'mask';\n    apply(ctx, element) {\n        const { document } = this;\n        // render as temp svg\n        let x = this.getAttribute('x').getPixels('x');\n        let y = this.getAttribute('y').getPixels('y');\n        let width = this.getStyle('width').getPixels('x');\n        let height = this.getStyle('height').getPixels('y');\n        if (!width && !height) {\n            const boundingBox = new BoundingBox();\n            this.children.forEach((child) => {\n                if (child instanceof PathElement) {\n                    boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n                }\n            });\n            x = Math.floor(boundingBox.x1);\n            y = Math.floor(boundingBox.y1);\n            width = Math.floor(boundingBox.width);\n            height = Math.floor(boundingBox.height);\n        }\n        const ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles);\n        const maskCanvas = document.createCanvas(x + width, y + height);\n        const maskCtx = maskCanvas.getContext('2d');\n        document.screen.setDefaults(maskCtx);\n        this.renderChildren(maskCtx);\n        // convert mask to alpha with a fake node\n        // TODO: refactor out apply from feColorMatrix\n        new FeColorMatrixElement(document, ({\n            nodeType: 1,\n            childNodes: [],\n            attributes: [\n                {\n                    nodeName: 'type',\n                    value: 'luminanceToAlpha'\n                },\n                {\n                    nodeName: 'includeOpacity',\n                    value: 'true'\n                }\n            ]\n        })).apply(maskCtx, 0, 0, x + width, y + height);\n        const tmpCanvas = document.createCanvas(x + width, y + height);\n        const tmpCtx = tmpCanvas.getContext('2d');\n        document.screen.setDefaults(tmpCtx);\n        element.render(tmpCtx);\n        tmpCtx.globalCompositeOperation = 'destination-in';\n        tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas, 'no-repeat');\n        tmpCtx.fillRect(0, 0, x + width, y + height);\n        ctx.fillStyle = tmpCtx.createPattern(tmpCanvas, 'no-repeat');\n        ctx.fillRect(0, 0, x + width, y + height);\n        // reassign mask\n        this.restoreStyles(element, ignoredStyles);\n    }\n    render(_) {\n        // NO RENDER\n    }\n}\n\nconst noop = () => {\n    // NOOP\n};\nclass ClipPathElement extends Element {\n    type = 'clipPath';\n    apply(ctx) {\n        const { document } = this;\n        const contextProto = Reflect.getPrototypeOf(ctx);\n        const { beginPath, closePath } = ctx;\n        if (contextProto) {\n            contextProto.beginPath = noop;\n            contextProto.closePath = noop;\n        }\n        Reflect.apply(beginPath, ctx, []);\n        this.children.forEach((child) => {\n            if (!('path' in child)) {\n                return;\n            }\n            let transform = 'elementTransform' in child\n                ? child.elementTransform()\n                : null; // handle <use />\n            if (!transform) {\n                transform = Transform.fromElement(document, child);\n            }\n            if (transform) {\n                transform.apply(ctx);\n            }\n            child.path(ctx);\n            if (contextProto) {\n                contextProto.closePath = closePath;\n            }\n            if (transform) {\n                transform.unapply(ctx);\n            }\n        });\n        Reflect.apply(closePath, ctx, []);\n        ctx.clip();\n        if (contextProto) {\n            contextProto.beginPath = beginPath;\n            contextProto.closePath = closePath;\n        }\n    }\n    render(_) {\n        // NO RENDER\n    }\n}\n\nclass FeGaussianBlurElement extends FeElement {\n    type = 'feGaussianBlur';\n    extraFilterDistance;\n    blurRadius;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.blurRadius = Math.floor(this.getAttribute('stdDeviation').getNumber());\n        this.extraFilterDistance = this.blurRadius;\n    }\n    apply(ctx, x, y, width, height) {\n        const { document, blurRadius } = this;\n        const body = document.window\n            ? document.window.document.body\n            : null;\n        const canvas = ctx.canvas;\n        // StackBlur requires canvas be on document\n        canvas.id = document.getUniqueId();\n        if (body) {\n            canvas.style.display = 'none';\n            body.appendChild(canvas);\n        }\n        canvasRGBA(canvas, x, y, width, height, blurRadius);\n        if (body) {\n            body.removeChild(canvas);\n        }\n    }\n}\n\nclass FilterElement extends Element {\n    static ignoreStyles = [\n        'filter',\n        'transform',\n        'clip-path'\n    ];\n    type = 'filter';\n    apply(ctx, element) {\n        // render as temp svg\n        const { document, children } = this;\n        const boundingBox = 'getBoundingBox' in element\n            ? element.getBoundingBox(ctx)\n            : null;\n        if (!boundingBox) {\n            return;\n        }\n        let px = 0;\n        let py = 0;\n        children.forEach((child) => {\n            if (!(child instanceof FeGaussianBlurElement)) {\n                return;\n            }\n            const efd = child.extraFilterDistance || 0;\n            px = Math.max(px, efd);\n            py = Math.max(py, efd);\n        });\n        const width = Math.floor(boundingBox.width);\n        const height = Math.floor(boundingBox.height);\n        const tmpCanvasWidth = width + 2 * px;\n        const tmpCanvasHeight = height + 2 * py;\n        if (Number.isNaN(tmpCanvasWidth) || Number.isNaN(tmpCanvasHeight) || tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n            return;\n        }\n        const x = Math.floor(boundingBox.x);\n        const y = Math.floor(boundingBox.y);\n        const ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles);\n        const tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight);\n        const tmpCtx = tmpCanvas.getContext('2d');\n        document.screen.setDefaults(tmpCtx);\n        tmpCtx.translate(-x + px, -y + py);\n        element.render(tmpCtx);\n        // apply filters\n        children.forEach((child) => {\n            if (child instanceof FeElement) {\n                child.apply(tmpCtx, 0, 0, tmpCanvasWidth, tmpCanvasHeight);\n            }\n        });\n        // render on me\n        ctx.drawImage(tmpCanvas, 0, 0, tmpCanvasWidth, tmpCanvasHeight, x - px, y - py, tmpCanvasWidth, tmpCanvasHeight);\n        this.restoreStyles(element, ignoredStyles);\n    }\n    render(_) {\n        // NO RENDER\n    }\n}\n\nclass FeDropShadowElement extends FeElement {\n    type = 'feDropShadow';\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.addStylesFromStyleDefinition();\n    }\n    apply(_, _x, _y, _width, _height) {\n        // TODO: implement\n    }\n}\n\nclass FeMorphologyElement extends FeElement {\n    type = 'feMorphology';\n    apply(_, _x, _y, _width, _height) {\n        // TODO: implement\n    }\n}\n\nclass FeCompositeElement extends FeElement {\n    type = 'feComposite';\n    apply(_, _x, _y, _width, _height) {\n        // TODO: implement\n    }\n}\n\nclass TitleElement extends Element {\n    type = 'title';\n}\n\nclass DescElement extends Element {\n    type = 'desc';\n}\n\nclass FeFuncElement extends Element {\n    tableValues;\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n        this.tableValues = toNumbers(this.getAttribute('tableValues').getString());\n    }\n}\nclass FeFuncR extends FeFuncElement {\n    type = 'feFuncR';\n}\nclass FeFuncG extends FeFuncElement {\n    type = 'feFuncG';\n}\nclass FeFuncB extends FeFuncElement {\n    type = 'feFuncB';\n}\nclass FeComponentTransfer extends FeElement {\n    type = 'feComponentTransfer';\n    constructor(document, node, captureTextNodes) {\n        super(document, node, captureTextNodes);\n    }\n    // New pixel value in accordance with the logic in the spec.\n    // https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n    // At the time of writing, assume the func elements are always the discrete type.\n    calculateDiscrete(old, feFunc) {\n        const C = old / 255;\n        const n = feFunc.tableValues.length;\n        if (C === 1) {\n            return 255 * feFunc.tableValues[n - 1];\n        }\n        for (let k = 0; k < n; k++) {\n            if (k / n <= C && C < (k + 1) / n) {\n                return 255 * feFunc.tableValues[k];\n            }\n        }\n        return 255 * feFunc.tableValues[0];\n    }\n    apply(ctx, _x, _y, width, height) {\n        const { children } = this;\n        let rFunc = undefined;\n        let gFunc = undefined;\n        let bFunc = undefined;\n        // Select last child of each type, in accordance with MDN docs.\n        children.forEach((child) => {\n            if (child instanceof FeFuncR) {\n                rFunc = child;\n            }\n            else if (child instanceof FeFuncG) {\n                gFunc = child;\n            }\n            else if (child instanceof FeFuncB) {\n                bFunc = child;\n            }\n        });\n        const srcData = ctx.getImageData(0, 0, width, height);\n        for (let y = 0; y < height; y++) {\n            for (let x = 0; x < width; x++) {\n                const r = imGet(srcData.data, x, y, width, height, 0);\n                const g = imGet(srcData.data, x, y, width, height, 1);\n                const b = imGet(srcData.data, x, y, width, height, 2);\n                const nr = this.calculateDiscrete(r, rFunc);\n                const ng = this.calculateDiscrete(g, gFunc);\n                const nb = this.calculateDiscrete(b, bFunc);\n                imSet(srcData.data, x, y, width, height, 0, nr);\n                imSet(srcData.data, x, y, width, height, 1, ng);\n                imSet(srcData.data, x, y, width, height, 2, nb);\n            }\n        }\n        ctx.clearRect(0, 0, width, height);\n        ctx.putImageData(srcData, 0, 0);\n    }\n}\n\nconst elements = {\n    'svg': SVGElement,\n    'rect': RectElement,\n    'circle': CircleElement,\n    'ellipse': EllipseElement,\n    'line': LineElement,\n    'polyline': PolylineElement,\n    'polygon': PolygonElement,\n    'path': PathElement,\n    'pattern': PatternElement,\n    'marker': MarkerElement,\n    'defs': DefsElement,\n    'linearGradient': LinearGradientElement,\n    'radialGradient': RadialGradientElement,\n    'stop': StopElement,\n    'animate': AnimateElement,\n    'animateColor': AnimateColorElement,\n    'animateTransform': AnimateTransformElement,\n    'font': FontElement,\n    'font-face': FontFaceElement,\n    'missing-glyph': MissingGlyphElement,\n    'glyph': GlyphElement,\n    'text': TextElement,\n    'tspan': TSpanElement,\n    'tref': TRefElement,\n    'a': AElement,\n    'textPath': TextPathElement,\n    'image': ImageElement,\n    'g': GElement,\n    'symbol': SymbolElement,\n    'style': StyleElement,\n    'use': UseElement,\n    'mask': MaskElement,\n    'clipPath': ClipPathElement,\n    'filter': FilterElement,\n    'feDropShadow': FeDropShadowElement,\n    'feFuncR': FeFuncR,\n    'feFuncG': FeFuncG,\n    'feFuncB': FeFuncB,\n    'feMorphology': FeMorphologyElement,\n    'feComponentTransfer': FeComponentTransfer,\n    'feComposite': FeCompositeElement,\n    'feColorMatrix': FeColorMatrixElement,\n    'feGaussianBlur': FeGaussianBlurElement,\n    'title': TitleElement,\n    'desc': DescElement\n};\n\nfunction createCanvas(width, height) {\n    const canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n}\nasync function createImage(src, anonymousCrossOrigin = false) {\n    const image = document.createElement('img');\n    if (anonymousCrossOrigin) {\n        image.crossOrigin = 'Anonymous';\n    }\n    return new Promise((resolve, reject) => {\n        image.onload = () => {\n            resolve(image);\n        };\n        image.onerror = (_event, _source, _lineno, _colno, error) => {\n            reject(error);\n        };\n        image.src = src;\n    });\n}\nconst DEFAULT_EM_SIZE = 12;\nclass Document {\n    pith;\n    static createCanvas = createCanvas;\n    static createImage = createImage;\n    static elementTypes = elements;\n    rootEmSize;\n    documentElement;\n    screen;\n    createCanvas;\n    createImage;\n    definitions = {};\n    styles = {};\n    stylesSpecificity = {};\n    images = [];\n    fonts = [];\n    emSizeStack = [];\n    uniqueId = 0;\n    constructor(pith, { rootEmSize = DEFAULT_EM_SIZE, emSize = DEFAULT_EM_SIZE, createCanvas = Document.createCanvas, createImage = Document.createImage, anonymousCrossOrigin } = {}) {\n        this.pith = pith;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n        this.screen = pith.screen;\n        this.rootEmSize = rootEmSize;\n        this.emSize = emSize;\n        this.createCanvas = createCanvas;\n        this.createImage = this.bindCreateImage(createImage, anonymousCrossOrigin);\n        this.screen.wait(() => this.isImagesLoaded());\n        this.screen.wait(() => this.isFontsLoaded());\n    }\n    bindCreateImage(createImage, anonymousCrossOrigin) {\n        if (typeof anonymousCrossOrigin === 'boolean') {\n            return (source, forceAnonymousCrossOrigin) => createImage(source, typeof forceAnonymousCrossOrigin === 'boolean'\n                ? forceAnonymousCrossOrigin\n                : anonymousCrossOrigin);\n        }\n        return createImage;\n    }\n    get window() {\n        return this.screen.window;\n    }\n    get fetch() {\n        return this.screen.fetch;\n    }\n    get ctx() {\n        return this.screen.ctx;\n    }\n    get emSize() {\n        const { emSizeStack } = this;\n        return emSizeStack[emSizeStack.length - 1] || DEFAULT_EM_SIZE;\n    }\n    set emSize(value) {\n        const { emSizeStack } = this;\n        emSizeStack.push(value);\n    }\n    popEmSize() {\n        const { emSizeStack } = this;\n        emSizeStack.pop();\n    }\n    getUniqueId() {\n        return `pith${++this.uniqueId}`;\n    }\n    isImagesLoaded() {\n        return this.images.every(_ => _.loaded);\n    }\n    isFontsLoaded() {\n        return this.fonts.every(_ => _.loaded);\n    }\n    createDocumentElement(document) {\n        const documentElement = this.createElement(document.documentElement, 'svg');\n        documentElement.root = true;\n        documentElement.addStylesFromStyleDefinition();\n        this.documentElement = documentElement;\n        return documentElement;\n    }\n    createElement(node, overrideType) {\n        const elementType = overrideType || node.nodeName.replace(/^[^:]+:/, '');\n        const ElementType = Document.elementTypes[elementType];\n        if (ElementType) {\n            return new ElementType(this, node);\n        }\n        return new UnknownElement(this, node);\n    }\n    createTextNode(node) {\n        return new TextNode(this, node);\n    }\n    setViewBox(config) {\n        this.screen.setViewBox({\n            document: this,\n            ...config\n        });\n    }\n}\n\n/**\n * SVG renderer on canvas.\n */\nclass Pith {\n    /**\n     * Create Pith instance from SVG source string or URL.\n     * @param ctx - Rendering context.\n     * @param svg - SVG source string or URL.\n     * @param options - Rendering options.\n     * @returns Pith instance.\n     */\n    static async from(ctx, svg, options = {}) {\n        const parser = new Parser(options);\n        const svgDocument = await parser.parse(svg);\n        return new Pith(ctx, svgDocument, options);\n    }\n    /**\n     * Create Pith instance from SVG source string.\n     * @param ctx - Rendering context.\n     * @param svg - SVG source string.\n     * @param options - Rendering options.\n     * @returns Pith instance.\n     */\n    static fromString(ctx, svg, options = {}) {\n        const parser = new Parser(options);\n        const svgDocument = parser.parseFromString(svg);\n        return new Pith(ctx, svgDocument, options);\n    }\n    /**\n     * XML/HTML parser instance.\n     */\n    parser;\n    /**\n     * Screen instance.\n     */\n    screen;\n    /**\n     * Pith Document.\n     */\n    document;\n    documentElement;\n    options;\n    /**\n     * Main constructor.\n     * @param ctx - Rendering context.\n     * @param svg - SVG Document.\n     * @param options - Rendering options.\n     */\n    constructor(ctx, svg, options = {}) {\n        this.parser = new Parser(options);\n        this.screen = new Screen(ctx, options);\n        this.options = options;\n        const document = new Document(this, options);\n        const documentElement = document.createDocumentElement(svg);\n        this.document = document;\n        this.documentElement = documentElement;\n    }\n    /**\n     * Create new Pith instance with inherited options.\n     * @param ctx - Rendering context.\n     * @param svg - SVG source string or URL.\n     * @param options - Rendering options.\n     * @returns Pith instance.\n     */\n    fork(ctx, svg, options = {}) {\n        return Pith.from(ctx, svg, {\n            ...this.options,\n            ...options\n        });\n    }\n    /**\n     * Create new Pith instance with inherited options.\n     * @param ctx - Rendering context.\n     * @param svg - SVG source string.\n     * @param options - Rendering options.\n     * @returns Pith instance.\n     */\n    forkString(ctx, svg, options = {}) {\n        return Pith.fromString(ctx, svg, {\n            ...this.options,\n            ...options\n        });\n    }\n    /**\n     * Document is ready promise.\n     * @returns Ready promise.\n     */\n    ready() {\n        return this.screen.ready();\n    }\n    /**\n     * Document is ready value.\n     * @returns Is ready or not.\n     */\n    isReady() {\n        return this.screen.isReady();\n    }\n    /**\n     * Render only first frame, ignoring animations and mouse.\n     * @param options - Rendering options.\n     */\n    async render(options = {}) {\n        this.start({\n            enableRedraw: true,\n            ignoreAnimation: true,\n            ignoreMouse: true,\n            ...options\n        });\n        await this.ready();\n        this.stop();\n    }\n    /**\n     * Start rendering.\n     * @param options - Render options.\n     */\n    start(options = {}) {\n        const { documentElement, screen, options: baseOptions } = this;\n        screen.start(documentElement, {\n            enableRedraw: true,\n            ...baseOptions,\n            ...options\n        });\n    }\n    /**\n     * Stop rendering.\n     */\n    stop() {\n        this.screen.stop();\n    }\n    /**\n     * Resize SVG to fit in given size.\n     * @param width\n     * @param height\n     * @param preserveAspectRatio\n     */\n    resize(width, height = width, preserveAspectRatio = false) {\n        this.documentElement.resize(width, height, preserveAspectRatio);\n    }\n}\n\nexport { AElement, AnimateColorElement, AnimateElement, AnimateTransformElement, BoundingBox, CB1, CB2, CB3, CB4, CircleElement, ClipPathElement, DefsElement, DescElement, Document, Element, EllipseElement, FeColorMatrixElement, FeCompositeElement, FeDropShadowElement, FeGaussianBlurElement, FeMorphologyElement, FilterElement, Font, FontElement, FontFaceElement, GElement, GlyphElement, GradientElement, ImageElement, LineElement, LinearGradientElement, MarkerElement, MaskElement, Matrix, MissingGlyphElement, Mouse, PSEUDO_ZERO, Parser, PathElement, PathParser, PatternElement, Pith, Point, PolygonElement, PolylineElement, Property, QB1, QB2, QB3, RadialGradientElement, RectElement, RenderedElement, Rotate, SVGElement, SVGFontLoader, Scale, Screen, Skew, SkewX, SkewY, StopElement, StyleElement, SymbolElement, TRefElement, TSpanElement, TextElement, TextPathElement, TitleElement, Transform, Translate, UnknownElement, UseElement, ViewPort, compressSpaces, elements, getSelectorSpecificity, imGet, imSet, normalizeAttributeName, normalizeColor, parseExternalUrl, index as presets, toMatrixValue, toNumbers, trimLeft, trimRight, vectorMagnitude, vectorsAngle, vectorsRatio };\n//# sourceMappingURL=index.mjs.map\n","import { metafieldManager, OptionResource, optionService } from \"../..\";\nimport { AnyStepData, Step, StepGroup, StepSelections, StepType, Workflow } from \"../../types\";\n\n/**\n * A renderable scene is a scene that can be displayed to the user. This is based on the workflow state.\n */\nexport interface RenderableScene {\n    /**\n     * The id of the scene.\n     */\n    id: string;\n    /**\n     * The title of the scene.\n     */\n    title: string;\n    /**\n     * The id of each step inside the scene that can be rendered. This is based on the workflow state.\n     */\n    renderableSteps: string[];\n    /**\n     * The WorkflowScene representation of this object. Provided for backwards compatibility.\n     * @deprecated\n     */\n    workflowScene: WorkflowScene;\n}\n\n/**\n * Information parsed froma workflow structure that is relevant\n * to a given scene.\n */\nexport interface WorkflowScene {\n    /**\n     * A unique identifier for the scene.\n     */\n    name: string;\n    /**\n     * A human-readable title for the scene.\n     */\n    title: string;\n    /**\n     * Steps which can display to the user.\n     * But may be conditionally hidden based on workflow logic\n     */\n    renderableSteps: Step<AnyStepData>[];\n    /**\n     * Steps which don't display to the user.\n     * Their behavior is always silent & executed in the background.\n     * @deprecated Silent steps are no longer handled seperately from normal steps.\n     */\n    silentSteps: Step<AnyStepData>[];\n}\n\n/**\n * @deprecated All steps can now be silent. It will take a long time to transition away from this approach though. Including potentially more dev work.\n */\nexport const silentStepTypes = [StepType.SilentIllustration, StepType.ProductOverlay];\n\n/**\n * Gets all scenes in the workflow structured in a way that makes it easier for us to track current state.\n * FIXME: renderableSteps in the response from this function have a different meaning to renderableSteps in getRenderableRelevantScenes and others.\n * FIXME: silentSteps will be removed in the future. They will be treating like other steps & not a special case moving forwards.\n * @param workflow The workflow to get scenes for.\n * @returns A list of scenes containing\n */\nconst getAllScenes = (workflow: Workflow): WorkflowScene[] => {\n    const scenes: WorkflowScene[] = [];\n\n    // For each step in the workflow,\n    // check if it belongs to a group.\n    // If not then stick it in its own scene.\n    // If it does then look for a scene with the group's name.\n    // Stick it in that scene if you find it, otherwise make a new scene.\n    for (const step of workflow.steps) {\n        const group = findGroupForStep(step.stepName, workflow.stepGroups);\n        if (!group)\n            throw new Error(\n                \"Workflow step does not belong to a group, all steps must belong to a group. Step: \" + step.stepName,\n            );\n        const existingScene = scenes.find((scene) => scene.name === group.name);\n        if (existingScene) {\n            if (silentStepTypes.includes(step.type)) {\n                existingScene.silentSteps.push(step);\n            } else {\n                existingScene.renderableSteps.push(step);\n            }\n        } else {\n            scenes.push({\n                name: group.name,\n                title: group.name,\n                renderableSteps: silentStepTypes.includes(step.type) ? [] : [step],\n                silentSteps: silentStepTypes.includes(step.type) ? [step] : [],\n            });\n        }\n    }\n\n    // Add the finish step.\n    const finishSceneTitle = \"workflow.steps.finish.confirmDesign\";\n    scenes.push({\n        name: \"Finish\",\n        title: finishSceneTitle,\n        renderableSteps: [\n            {\n                type: StepType.Finish,\n                stepName: \"Finish\",\n                stepTitle: finishSceneTitle,\n                helpText: \"\",\n                data: {\n                    modelAnimation: workflow.finalizeStepConfig\n                        ? workflow.finalizeStepConfig.modelAnimation\n                        : undefined,\n                    lookAtAnimation: workflow.finalizeStepConfig\n                        ? workflow.finalizeStepConfig.lookAtAnimation\n                        : undefined,\n                },\n                conditions: [],\n            },\n        ],\n        silentSteps: [],\n    });\n\n    return scenes;\n};\n\n/**\n * Find the scene relating to a step\n * @param stepName The step ID.\n * @param stepGroups The list of scenes.\n * @returns Scene if found or undefined.\n */\nconst findGroupForStep = (stepName: string, stepGroups: StepGroup[]): StepGroup | undefined => {\n    return stepGroups.find((group) => group.stepNames.includes(stepName));\n};\n\n/**\n * Determines whether a step is conditionally active.\n * @param step A step to check.\n * @param stepSelections The current customer selections.\n * @returns Returns true when the step is conditionally active. False otherwise.\n */\nconst stepConditionsAreSatisfied = async (\n    step: Step<AnyStepData>,\n    stepSelections: StepSelections,\n): Promise<boolean> => {\n    // Currently all conditions must be met (AND), we should allow for OR of conditions as well.\n    const bools = await Promise.all(\n        (step.conditions || []).map(async (condition) => {\n            const originatingStepData = stepSelections[condition.targetStepName];\n            if (originatingStepData && originatingStepData.selectedVariants) {\n                const selectedVariants = originatingStepData.selectedVariants;\n                if (condition.type === \"VariantMetafield\") {\n                    await metafieldManager.ensureIdsArePresent(selectedVariants.map((v) => v.id!));\n                    const result = condition.requiredVariantMetafields?.some((meta) => {\n                        return selectedVariants.find((selVariant) => {\n                            const entry = metafieldManager.requestIfAvailable(\n                                selVariant.id!,\n                                meta.variantMetafieldConfigurationId || \"\",\n                            );\n                            return entry?.value === meta.variantMetafieldValue;\n                        });\n                    });\n                    return result;\n                } else {\n                    return condition.requiredVariantSelections.some(\n                        (reqVariant) =>\n                            selectedVariants.find((selVariant) => selVariant.id === reqVariant) !== undefined,\n                    );\n                }\n            }\n            return false;\n        }),\n    );\n    return bools.every((b) => b);\n};\n\n/**\n * Filters out steps that are not conditionally active.\n * @param scene The scene to filter.\n * @param stepSelections The current customer selections.\n * @returns A scene with only conditionally active steps. If all steps have been filtered out we return null.\n */\nconst filterSceneByConditions = async (\n    scene: WorkflowScene,\n    stepSelections: StepSelections,\n): Promise<WorkflowScene | null> => {\n    const renderableStepBools = await Promise.all(\n        scene.renderableSteps.map((step) => stepConditionsAreSatisfied(step, stepSelections)),\n    );\n    const renderableSteps = scene.renderableSteps.filter((_, idx) => renderableStepBools[idx]);\n    const silentStepBools = await Promise.all(\n        scene.silentSteps.map((step) => stepConditionsAreSatisfied(step, stepSelections)),\n    );\n    const silentSteps = scene.silentSteps.filter((_, idx) => silentStepBools[idx]);\n    const filteredScene: WorkflowScene = {\n        name: scene.name,\n        title: scene.title,\n        renderableSteps,\n        silentSteps,\n    };\n    if (filteredScene.silentSteps.length === 0 && filteredScene.renderableSteps.length === 0) {\n        return null;\n    }\n    return filteredScene;\n};\n\n/**\n * Used to understand what scenes contain active steps.\n * @param allScenes All scenes in the workflow.\n * @param stepSelections The current customer selections.\n * @returns A list of scenes that contain at least one conditionally active step.\n */\nconst getActiveScenes = async (\n    allScenes: WorkflowScene[],\n    stepSelections: StepSelections,\n): Promise<WorkflowScene[]> => {\n    const mappedScenes = await Promise.all(allScenes.map((scene) => filterSceneByConditions(scene, stepSelections)));\n    return mappedScenes.filter((scene) => scene !== null) as WorkflowScene[];\n};\n\n/**\n * This function is only used to drive what steps are visible for the user.\n * NOTE: Do not use this function to apply internal workflow logic like loading/unloading steps. As a renderable step may still need to be loaded/unloaded.\n * @param allScenes All scenes in the workflow.\n * @param stepSelections The current customer selections.\n * @param singleVariantsRenderable When true the function will return steps that have a single variant.\n * @returns A list of scenes & steps inside them that are renderable to the customer.\n */\nconst getRenderableRelevantScenes = async (\n    allScenes: WorkflowScene[],\n    stepSelections: StepSelections,\n    singleVariantsRenderable: boolean = false,\n): Promise<WorkflowScene[]> => {\n    const activeScenes = await getActiveScenes(allScenes, stepSelections);\n\n    // Evaluate each step\n    const stepsWithRenderableConfiguration: string[] = [];\n    for (const scene of activeScenes) {\n        for (const step of scene.renderableSteps) {\n            let variantAmount = 0;\n            if (step.type !== \"Finish\" && step.type !== \"Module\") {\n                let option: OptionResource | undefined = undefined;\n                if (step.option?.variants) {\n                    option = step.option;\n                    variantAmount = option?.variants?.length || 0;\n                } else {\n                    option = await optionService.getOption(step.option?.id!);\n                    variantAmount = option?.variants?.length || 0;\n                }\n            }\n\n            if (step.silent) {\n                continue;\n            }\n            /**\n             * Silent steps are now possible on any step in the system.\n             * Let's move towards removing this code.\n             * FIXME: Once ops are happy we have marked required steps silent. Remove.\n             */\n            if (\n                step.type === StepType.Model ||\n                step.type === StepType.Material ||\n                step.type === StepType.Picture ||\n                step.type === StepType.Shape\n            ) {\n                if (variantAmount > 1 || singleVariantsRenderable) stepsWithRenderableConfiguration.push(step.stepName);\n            } else {\n                stepsWithRenderableConfiguration.push(step.stepName);\n            }\n        }\n    }\n    // Filter out scenes that don't have any renderable steps.\n    const renderableScenes = activeScenes.filter((scene) => {\n        const filteredScene = scene.renderableSteps.filter((step: Step<AnyStepData>) =>\n            stepsWithRenderableConfiguration.includes(step.stepName),\n        );\n        return filteredScene.length > 0;\n    });\n\n    // Filter out unrenderable steps from the scenes.\n    for (const renderableScene of renderableScenes) {\n        renderableScene.renderableSteps = renderableScene.renderableSteps.filter((step: Step<AnyStepData>) =>\n            stepsWithRenderableConfiguration.includes(step.stepName),\n        );\n    }\n\n    return renderableScenes;\n};\n\nexport { getAllScenes, getActiveScenes, getRenderableRelevantScenes, stepConditionsAreSatisfied };\n","/**\n * A queue promise is a container for a promise that can be\n * executed at a later time.\n */\nexport abstract class QueueablePromise {\n    readonly timestamp = Date.now();\n    abstract execute(): Promise<any>;\n}\n\n/**\n * A promise queue contains any number of QueuePromise objects. These objects are stored within a PromiseQueue and executed\n * as quickly as possible in order. This is ideal in situations where a specific operation should be\n * applied in an ordered way while still making.\n */\nexport class PromiseQueue<T extends QueueablePromise> {\n    private queue: T[] = [];\n    private activePromise?: Promise<void> = undefined;\n    private queueMaxSize: number | undefined = undefined;\n    private isEnabled: boolean;\n\n    /**\n     * Constructs a new promise queue.\n     * @param queueMaxSize An optional maximum size, when the max size is hit.\n     *                     The older promises will be discarded.\n     * @param enabled When false, the queue will not process any jobs. Assign `enabled` to true to start processing.\n     */\n    constructor(queueMaxSize?: number, enabled = true) {\n        this.queueMaxSize = queueMaxSize;\n        this.isEnabled = enabled;\n    }\n\n    /**\n     * Enqueue a new promise.\n     * @param promise A new promise to add to the queue.\n     */\n    enqueue(promise: T) {\n        this.queue.push(promise);\n\n        // If configured to do so, let's ensure the queue cannot grow too large by removing\n        // older unprocessed work. This is great in situations where we know promises are\n        // enqueued often and only the latest promises need to be executed.\n        if (this.queueMaxSize !== undefined && this.queue.length > this.queueMaxSize) {\n            const queueLength = this.queue.length - 1;\n            for (let i = 0; i < queueLength; ++i) {\n                this.queue.shift();\n            }\n        }\n\n        if (!this.isEnabled) {\n            return;\n        }\n\n        // If there's an active processing promise, it'll be picked up alongside the existing work.\n        if (this.activePromise) {\n            return;\n        }\n        // Otherwise we create a promise to handle this.\n        this.activePromise = this.dequeue();\n    }\n\n    get enabled() {\n        return this.isEnabled;\n    }\n\n    /**\n     * Enable or disable the queue. When disabled, the queue will not process any jobs.\n     * Disabling processing will not cancel any active promises.\n     */\n    set enabled(value: boolean) {\n        if (!this.isEnabled && value && !this.activePromise && this.getRemainingQueueSize() > 0) {\n            this.activePromise = this.dequeue();\n        }\n        this.isEnabled = value;\n    }\n\n    /**\n     * @returns Returns true when work is being actively processed by this queue.\n     */\n    hasActivePromise() {\n        return !!this.activePromise;\n    }\n\n    /**\n     * @returns The number of unexecuted jobs remaining in the queue. Not including the active job.\n     */\n    getRemainingQueueSize() {\n        return this.queue.length;\n    }\n\n    /**\n     * Finalize the queue, any jobs that come in while this is in progress will result\n     * in the promise being extended.\n     */\n    async finalize() {\n        if (this.activePromise) return this.activePromise;\n        return Promise.resolve();\n    }\n\n    /**\n     * Once called will recursively resolve the jobs in the\n     * queue until no more are available.\n     */\n    private async dequeue() {\n        const item = this.queue.shift();\n        // Is the queue empty.\n        if (!item) {\n            this.activePromise = undefined;\n            return;\n        }\n        // Execute & process remaining messages.\n        try {\n            await item.execute();\n        } catch (err) {\n            console.log(err);\n        } finally {\n            await this.dequeue();\n        }\n    }\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n  // Don't return `map.set` because it's not chainable in IE 11.\n  map.set(pair[0], pair[1]);\n  return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n  // Don't return `set.add` because it's not chainable in IE 11.\n  set.add(value);\n  return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var cache = this.__data__;\n  if (cache instanceof ListCache) {\n    var pairs = cache.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      return this;\n    }\n    cache = this.__data__ = new MapCache(pairs);\n  }\n  cache.set(key, value);\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    object[key] = value;\n  }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n  var result;\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      if (isHostObject(value)) {\n        return object ? value : {};\n      }\n      result = initCloneObject(isFunc ? {} : value);\n      if (!isDeep) {\n        return copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, baseClone, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (!isArr) {\n    var props = isFull ? getAllKeys(value) : keys(value);\n  }\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n  return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var result = new buffer.constructor(buffer.length);\n  buffer.copy(result);\n  return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n  var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n  return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n  var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n  return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    assignValue(object, key, newValue === undefined ? source[key] : newValue);\n  }\n  return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = objectToString.call(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : undefined;\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return cloneMap(object, isDeep, cloneFunc);\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return cloneSet(object, isDeep, cloneFunc);\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = isEqual;\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","export const generate = (): string => {\n    const s4 = () => {\n        return Math.floor((1 + Math.random()) * 0x10000)\n            .toString(16)\n            .substring(1);\n    };\n    return s4() + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + \"-\" + s4() + s4() + s4();\n};\n","import { LayoutElement, LayoutRenderingPurpose, PapyrusComponent, RenderingConfiguration } from \"../types\";\nimport { generate } from \"../util/guid\";\nimport { sortElementsByLayersWithIndex, elementFactory } from \"../CommandContext\";\n\nexport interface SVGLayoutProps {\n    configuration: RenderingConfiguration;\n    preserveAspectRatio?: string;\n    outlineArea?: {\n        x?: number;\n        y?: number;\n        width?: number;\n        height?: number;\n        scale?: number;\n        hidden?: boolean; // When set the editable area will not be stroke. The mask will still take effect.\n    };\n    viewBox?: { x: number; y: number; width: number; height: number };\n    width: number | string;\n    height: number | string;\n    position?: string;\n    maxWidth?: string;\n    maxHeight?: string;\n    elements: LayoutElement[];\n    backgroundColor?: string;\n    outlineColor?: string;\n    omitBoundClipping?: boolean;\n    borderRadius?: number;\n}\n\nexport const SVGLayout: PapyrusComponent<SVGLayoutProps> = ({\n    backgroundColor,\n    outlineColor,\n    borderRadius,\n    configuration,\n    elements,\n    height,\n    maxHeight,\n    maxWidth,\n    outlineArea,\n    position,\n    preserveAspectRatio,\n    viewBox,\n    width,\n}) => {\n    const rx = borderRadius || 0;\n    const strokeScale = 2 * (outlineArea?.scale || 1);\n    const calculatedViewbox = viewBox || { x: 0, y: 0, width, height };\n    const viewboxString = `${calculatedViewbox.x} ${calculatedViewbox.y} ${calculatedViewbox.width} ${calculatedViewbox.height}`;\n    const maskId = generate();\n\n    const defs = configuration.purpose === LayoutRenderingPurpose.FreeDesign && (\n        <defs>\n            <clipPath id=\"viewboxClip\">\n                <rect width={calculatedViewbox.width} height={calculatedViewbox.height} rx={rx} />\n            </clipPath>\n        </defs>\n    );\n\n    const colorProfileElements = configuration.colorProfiles?.map((c, index) => {\n        // Color profiles have no typescript definition. We tell the compiler to ignore their lack of existance.\n        return (\n            /* @ts-ignore */\n            <color-profile key={index} name={c.name} xlinkHref={c.key}>\n                {\" \"}\n                {/* @ts-ignore */}\n            </color-profile>\n        );\n    });\n\n    // Mixin the rendering configuration if required\n    const elementsWithConfiguration = elements.map((el) => {\n        return {\n            ...el,\n            _renderingConfiguration: configuration,\n            mask: outlineArea ? `url(#viewmask-${maskId})` : undefined,\n        };\n    });\n\n    // Order the elements based on layer & index\n    const sortedElements = sortElementsByLayersWithIndex(elementsWithConfiguration);\n\n    return (\n        <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            xmlSpace=\"preserve\"\n            version=\"1.1\"\n            preserveAspectRatio={preserveAspectRatio}\n            width={width}\n            height={height}\n            style={{\n                gridColumn: 1,\n                gridRow: 1,\n                maxWidth,\n                maxHeight,\n                position: position as any,\n            }}\n            viewBox={viewboxString}\n        >\n            {colorProfileElements}\n            {defs}\n            {!!backgroundColor && (\n                <rect\n                    id=\"layout-background\"\n                    width={calculatedViewbox.width}\n                    height={calculatedViewbox.height}\n                    fill={backgroundColor}\n                    rx={rx}\n                />\n            )}\n            <g\n                id=\"element-group\"\n                clipPath={configuration.purpose === LayoutRenderingPurpose.FreeDesign ? \"url(#viewboxClip)\" : undefined}\n            >\n                {sortedElements.map((el) => elementFactory(el)).filter((el) => !!el)}\n            </g>\n            {outlineArea && (\n                <rect\n                    x={outlineArea.x}\n                    y={outlineArea.y}\n                    width={outlineArea.width}\n                    height={outlineArea.height}\n                    fill=\"none\"\n                    stroke={outlineArea.hidden ? \"none\" : outlineColor ? outlineColor : \"#aaaaaa\"}\n                    strokeWidth={strokeScale / 2}\n                    strokeDasharray={`${strokeScale * 2} ${strokeScale}`}\n                />\n            )}\n            {outlineArea && (\n                <mask id={`viewmask-${maskId}`}>\n                    <rect\n                        x={calculatedViewbox.x}\n                        y={calculatedViewbox.y}\n                        width={calculatedViewbox.width}\n                        height={calculatedViewbox.height}\n                        fill=\"black\"\n                    />\n                    <rect\n                        x={outlineArea.x}\n                        y={outlineArea.y}\n                        width={outlineArea.width}\n                        height={outlineArea.height}\n                        fill=\"white\"\n                    />\n                </mask>\n            )}\n        </svg>\n    );\n};\n","import { LayoutElement, Point, ScaleAxis } from \"../types\";\n\n/**\n * Returns an axis aligned bounding box for a given element.\n * @param element The element to calculate an AABB for.\n * @returns The AABB for the element.\n */\nconst getAxisAlignedBoundingBox = (x: number, y: number, width: number, height: number, rotation: number) => {\n    const rotationRadians = degreesToRadians(rotation);\n\n    const halfX = width / 2;\n    const halfY = height / 2;\n\n    const midX = x + halfX;\n    const midY = y + halfY;\n\n    const sin = Math.sin(rotationRadians);\n    const cos = Math.cos(rotationRadians);\n\n    const c1x = halfX;\n    const c2x = halfX;\n    const c1y = -halfY;\n    const c2y = halfY;\n\n    const transformedC1X = c1x * cos - c1y * sin;\n    const transformedC2X = c2x * cos - c2y * sin;\n    const transformC1Y = c1x * sin + c1y * cos;\n    const transformedC2Y = c2x * sin + c2y * cos;\n\n    const extentX = Math.max(Math.abs(transformedC1X), Math.abs(transformedC2X));\n    const extentY = Math.max(Math.abs(transformC1Y), Math.abs(transformedC2Y));\n\n    return {\n        minX: midX - extentX,\n        maxX: midX + extentX,\n        minY: midY - extentY,\n        maxY: midY + extentY,\n    };\n};\n\n// Returns angle ABC, between lines AB and BC\nconst findAngle = (a: Point, b: Point, c: Point) => {\n    const ab = Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n    const bc = Math.sqrt(Math.pow(b.x - c.x, 2) + Math.pow(b.y - c.y, 2));\n    const ac = Math.sqrt(Math.pow(c.x - a.x, 2) + Math.pow(c.y - a.y, 2));\n    return Math.acos((bc * bc + ab * ab - ac * ac) / (2 * bc * ab)) * (180 / Math.PI);\n};\n\n/**\n * Degrees to radians.\n * @param degrees An angle in degrees.\n * @returns The equivelant angle in radians.\n */\nconst degreesToRadians = (degrees: number) => {\n    return degrees * (Math.PI / 180);\n};\n\n/**\n * Radians to degrees.\n * @param radians An angle in radians.\n * @returns The equivelant angle in degrees.\n */\nconst radiansToDegrees = (radians: number) => {\n    return radians * (180 / Math.PI);\n};\n\n/**\n * @param a The first value.\n * @param b The second value.\n * @returns Returns true if two values are within a distance to each other.\n */\nconst isCloseToValue = (a: number, b: number, allowableDistance: number) => {\n    const diff = Math.abs(a - b);\n    return diff < allowableDistance;\n};\n\nconst getTrueCoordinates = (point: Point, pointOfRotation: Point, rotation: number): Point => {\n    const s = Math.sin(degreesToRadians(rotation));\n    const c = Math.cos(degreesToRadians(rotation));\n    return {\n        x: (point.x - pointOfRotation.x) * c - (point.y - pointOfRotation.y) * s + pointOfRotation.x,\n        y: (point.x - pointOfRotation.x) * s + (point.y - pointOfRotation.y) * c + pointOfRotation.y,\n    };\n};\n\nconst getPointOfRotation = (nwPoint: Point, sePoint: Point): Point => {\n    return {\n        x: (nwPoint.x + sePoint.x) / 2,\n        y: (nwPoint.y + sePoint.y) / 2,\n    };\n};\n\nconst getNWPoint = (bounds: DOMRect, element: LayoutElement, scaleX: number, scaleY: number): Point => {\n    return {\n        x: bounds.x + element?.x * scaleX,\n        y: bounds.y + element?.y * scaleY,\n    };\n};\n\nconst getNEPoint = (bounds: DOMRect, element: LayoutElement, scaleX: number, scaleY: number): Point => {\n    return {\n        x: bounds.x + (element?.x + element?.width) * scaleX,\n        y: bounds.y + element?.y * scaleY,\n    };\n};\n\nconst getSWPoint = (bounds: DOMRect, element: LayoutElement, scaleX: number, scaleY: number): Point => {\n    return {\n        x: bounds.x + element?.x * scaleX,\n        y: bounds.y + (element?.y + element?.height) * scaleY,\n    };\n};\n\nconst getSEPoint = (bounds: DOMRect, element: LayoutElement, scaleX: number, scaleY: number): Point => {\n    return {\n        x: bounds.x + (element?.x + element?.width) * scaleX,\n        y: bounds.y + (element?.y + element?.height) * scaleY,\n    };\n};\n\n// Compass directions\n\nconst turnRightClockwise = (dir: ScaleAxis): ScaleAxis => {\n    switch (dir) {\n        case ScaleAxis.North:\n            return ScaleAxis.East;\n        case ScaleAxis.East:\n            return ScaleAxis.South;\n        case ScaleAxis.South:\n            return ScaleAxis.West;\n        case ScaleAxis.West:\n            return ScaleAxis.North;\n        case ScaleAxis.Northwest:\n            return ScaleAxis.Northeast;\n        case ScaleAxis.Northeast:\n            return ScaleAxis.Southeast;\n        case ScaleAxis.Southeast:\n            return ScaleAxis.Southwest;\n        case ScaleAxis.Southwest:\n            return ScaleAxis.Northwest;\n    }\n};\n\n// The (semi-)cardinal direction that you are currently facing if\n// you turned the given rotation from the given orignal direction.\nconst currentDirection = (originalDirection: ScaleAxis, rotation: number): ScaleAxis => {\n    if (rotation > 45 && rotation <= 135) {\n        return turnRightClockwise(originalDirection);\n    }\n    if (rotation > 135 && rotation <= 225) {\n        return turnRightClockwise(turnRightClockwise(originalDirection));\n    }\n    if (rotation > 225 && rotation <= 315) {\n        return turnRightClockwise(turnRightClockwise(turnRightClockwise(originalDirection)));\n    }\n    return originalDirection;\n};\n\n/**\n * Computes helpful values about a rotated element, Useful in calculating updated element locations.\n * @param element The element to calculate the vertices for.\n * @returns a, b, c, d starting from top left and moving clockwise. Center represents the point central to\n * all vertices on thge element.\n */\nconst getElementVertices = (\n    element: { x: number; y: number; width: number; height: number; rotation: number },\n    canvasBounds: Point = { x: 0, y: 0 },\n    scale: Point = { x: 1, y: 1 },\n) => {\n    const radians = degreesToRadians(element.rotation);\n\n    // Find the unrotated vertices of the element. We'll rotate\n    // these later to find the rotated vertices.\n\n    const unrotatedTopLeft: Point = {\n        x: canvasBounds.x + element.x * scale.x,\n        y: canvasBounds.x + element.y * scale.y,\n    };\n\n    const unrotatedTopRight: Point = {\n        x: element.x + element.width,\n        y: element.y,\n    };\n\n    const unrotatedBottomRight: Point = {\n        x: canvasBounds.x + (element.x + element.width) * scale.x,\n        y: canvasBounds.y + (element.height + element.y) * scale.y,\n    };\n\n    const unrotatedBottomLeft: Point = {\n        x: canvasBounds.x + element.x * scale.x,\n        y: canvasBounds.y + (element.height + element.y) * scale.y,\n    };\n\n    // Find the center point of the element.\n    // This will be the point that the element rotates on.\n    const pointOfRotation: Point = {\n        x: (unrotatedBottomLeft.x + unrotatedBottomRight.x) / 2,\n        y: unrotatedBottomLeft.y - (element.height * scale.y) / 2,\n    };\n\n    // Find the actual coordinates of the element's bottom corners by translating to the origin,\n    // rotating as required and translating back to current position.\n    return {\n        a: rotateAroundPoint(unrotatedTopLeft, pointOfRotation, radians),\n        b: rotateAroundPoint(unrotatedTopRight, pointOfRotation, radians),\n        c: rotateAroundPoint(unrotatedBottomRight, pointOfRotation, radians),\n        d: rotateAroundPoint(unrotatedBottomLeft, pointOfRotation, radians),\n        center: pointOfRotation,\n    };\n};\n\n/**\n * Rotates a point around another point by an angle.\n * @param p The point to rotate.\n * @param c The point to rotate around..\n * @param angleRadians The angle to rotate.\n * @returns A new point transformed by the rotation.\n */\nconst rotateAroundPoint = (p: Point, c: Point, angleRadians: number) => {\n    const sin = Math.sin(angleRadians);\n    const cos = Math.cos(angleRadians);\n    return {\n        x: (p.x - c.x) * cos - (p.y - c.y) * sin + c.x,\n        y: (p.x - c.x) * sin + (p.y - c.y) * cos + c.y,\n    };\n};\n\nexport {\n    currentDirection,\n    degreesToRadians,\n    findAngle,\n    getAxisAlignedBoundingBox,\n    getNEPoint,\n    getNWPoint,\n    getPointOfRotation,\n    getSEPoint,\n    getSWPoint,\n    getTrueCoordinates,\n    isCloseToValue,\n    radiansToDegrees,\n    turnRightClockwise,\n    getElementVertices,\n    rotateAroundPoint,\n};\n\n// All conversion constants are based on 72dpi\nexport const mmPerPixel = 0.352778;\nexport const cmPerPixel = 0.035277;\n","import { ImageElement, PapyrusComponent } from \"../types\";\nimport { degreesToRadians } from \"../util/math\";\n\nexport const Image: PapyrusComponent<Omit<ImageElement, \"type\">> = (props) => {\n    const rotation = props.rotation || 0;\n    const angleInRadians = degreesToRadians(rotation);\n    const rotC = Math.cos(angleInRadians);\n    const rotS = -Math.sin(angleInRadians);\n\n    return (\n        <g mask={props.stepName || props.productOverlay ? undefined : props.mask}>\n            <g\n                transform={`\n                matrix(1, 0, 0, 1, ${props.x}, ${props.y})\n                matrix(1, 0, 0, 1, ${props.width / 2}, ${props.height / 2})\n                matrix(${rotC}, ${-rotS}, ${rotS}, ${rotC}, 0, 0)\n                matrix(1, 0, 0, 1, ${-props.width / 2}, ${-props.height / 2})\n                `}\n            >\n                <image\n                    xlinkHref={props.src}\n                    preserveAspectRatio={props.preserveAspectRatio}\n                    width={props.width}\n                    height={props.height}\n                />\n            </g>\n        </g>\n    );\n};\n","import { GroupElement, LayoutElement, PapyrusComponent } from \"../types\";\nimport { degreesToRadians } from \"../util/math\";\nimport { elementFactory, sortElementsByLayersWithIndex } from \"../CommandContext\";\n\nexport const Group: PapyrusComponent<Omit<GroupElement, \"type\">> = (props) => {\n    const clipPathId = `spiff-group-clip-${props.id}`;\n    const rotation = props.rotation || 0;\n    const angleInRadians = degreesToRadians(rotation);\n    const rotC = Math.cos(angleInRadians);\n    const rotS = -Math.sin(angleInRadians);\n    const sortedElements = sortElementsByLayersWithIndex(props.children);\n    const buildDefinitions = () => {\n        return (\n            <clipPath id={clipPathId} preserveAspectRatio=\"none\">\n                {props.clipPath ? (\n                    <path d={props.clipPath} />\n                ) : (\n                    <rect x={0} y={0} width={props.width} height={props.height} />\n                )}\n            </clipPath>\n        );\n    };\n\n    return (\n        <>\n            <defs>{buildDefinitions()}</defs>\n            <g\n                transform={`\n                matrix(1, 0, 0, 1, ${props.x}, ${props.y})\n                matrix(1, 0, 0, 1, ${props.width / 2}, ${props.height / 2})\n                matrix(${rotC}, ${-rotS}, ${rotS}, ${rotC}, 0, 0)\n                matrix(1, 0, 0, 1, ${-props.width / 2}, ${-props.height / 2})\n                `}\n            >\n                {props._renderingConfiguration?.debug ? (\n                    <rect\n                        stroke=\"red\"\n                        opacity={0.3}\n                        fill=\"none\"\n                        x={0}\n                        y={0}\n                        width={props.width}\n                        height={props.height}\n                    />\n                ) : undefined}\n                {sortedElements\n                    .map((el) => elementFactory(el as LayoutElement))\n                    .filter((el) => !!el)\n                    .map((el) => (\n                        <g key={clipPathId} clipPath={`url(#${clipPathId})`}>\n                            {el}\n                        </g>\n                    ))}\n            </g>\n        </>\n    );\n};\n","import { FrameElement, IllustrationElement, ImageElement, LayoutElementType, PapyrusComponent } from \"../types\";\nimport { degreesToRadians } from \"../util/math\";\nimport { modifySVGColors } from \"../util/illustration\";\nimport { svgToDataUrl } from \"../util/crossplatform\";\nimport { Group } from \"./Group\";\nimport { Fragment } from \"react\";\n\nexport const Frame: PapyrusComponent<Omit<FrameElement, \"type\">> = (props) => {\n    const patternLinkId = `spiff-frame-${props.id}`;\n    const thresholdFilterId = `spiff-frame-threshold-${props.id}`;\n\n    const getFrameContentSrc = () => {\n        if (!props.pattern) {\n            return \"\";\n        }\n        if (props.pattern.svg) {\n            const modifiedSvg = modifySVGColors(props.pattern.svg, props.pattern.colors || {}, false);\n            return svgToDataUrl(modifiedSvg);\n        }\n        return props.pattern.src;\n    };\n\n    if (!getFrameContentSrc()) {\n        return <Fragment />;\n    }\n\n    const thresholdTableValues = (): string => {\n        if (!props.threshold) {\n            return \"\";\n        }\n        if (props.invertThreshold) {\n            return \"1 \".repeat(props.threshold) + \"0 \".repeat(256 - props.threshold);\n        }\n        return \"0 \".repeat(props.threshold) + \"1 \".repeat(256 - props.threshold);\n    };\n\n    const renderDefinitions = () => {\n        return (\n            <>\n                {props.useThreshold && (\n                    <defs>\n                        <filter id={thresholdFilterId} color-interpolation-filters=\"sRGB\">\n                            <feColorMatrix\n                                type=\"matrix\"\n                                values={`\n                            ${props.thresholdSaturation} ${props.thresholdSaturation} ${props.thresholdSaturation} 0 0\n                            ${props.thresholdSaturation} ${props.thresholdSaturation} ${props.thresholdSaturation} 0 0\n                            ${props.thresholdSaturation} ${props.thresholdSaturation} ${props.thresholdSaturation} 0 0\n                            0 0 0 1 0\n                        `}\n                                result=\"greyscale\"\n                            ></feColorMatrix>\n                            <feComponentTransfer in=\"greyscale\">\n                                <feFuncR type=\"discrete\" tableValues={thresholdTableValues()} />\n                                <feFuncG type=\"discrete\" tableValues={thresholdTableValues()} />\n                                <feFuncB type=\"discrete\" tableValues={thresholdTableValues()} />\n                            </feComponentTransfer>\n                        </filter>\n                    </defs>\n                )}\n            </>\n        );\n    };\n\n    // We only want to blur when a pattern is provided.\n    const rotation = props.rotation || 0;\n    const angleInRadians = degreesToRadians(rotation);\n    const rotC = Math.cos(angleInRadians);\n    const rotS = -Math.sin(angleInRadians);\n\n    const getFrameContent = () => {\n        const patternX = props.pattern?.x || 0;\n        const patternY = props.pattern?.y || 0;\n        const patternWidth = props.pattern?.width || 0;\n        const patternHeight = props.pattern?.height || 0;\n        const patternScaleX = props.pattern?.scaleX || 1;\n        const patternScaleY = props.pattern?.scaleY || 1;\n        const patternRotation = props.pattern?.rotation || 0;\n\n        const children = props.pattern?.svg\n            ? ({\n                  id: `${patternLinkId}-contents`,\n                  type: LayoutElementType.Illustration,\n                  x: patternX,\n                  y: patternY,\n                  rotation: patternRotation,\n                  width: patternWidth * patternScaleX,\n                  height: patternHeight * patternScaleY,\n                  src: getFrameContentSrc(),\n                  svg: props.pattern?.svg,\n                  colors: props.pattern?.colors,\n              } as IllustrationElement)\n            : ({\n                  id: `${patternLinkId}-contents`,\n                  type: LayoutElementType.Image,\n                  x: patternX,\n                  y: patternY,\n                  rotation: patternRotation,\n                  width: patternWidth * patternScaleX,\n                  height: patternHeight * patternScaleY,\n                  src: getFrameContentSrc(),\n              } as ImageElement);\n        return [children];\n    };\n\n    return (\n        <>\n            {renderDefinitions()}\n            <g\n                opacity={props.opacity}\n                mask={props.stepName ? undefined : props.mask}\n                filter={props.useThreshold ? `url(#${thresholdFilterId})` : undefined}\n            >\n                <g\n                    transform={`\n                matrix(1, 0, 0, 1, ${props.x}, ${props.y})\n                matrix(1, 0, 0, 1, ${props.width / 2}, ${props.height / 2})\n                matrix(${rotC}, ${-rotS}, ${rotS}, ${rotC}, 0, 0)\n                matrix(1, 0, 0, 1, ${-props.width / 2}, ${-props.height / 2})\n                matrix(${props.scaleX}, 0, 0, ${props.scaleY}, 0, 0)\n                `}\n                >\n                    <Group\n                        id={patternLinkId}\n                        x={0}\n                        y={0}\n                        rotation={0}\n                        width={props.width}\n                        height={props.height}\n                        clipPath={props.path}\n                        children={getFrameContent()}\n                    />\n                </g>\n            </g>\n        </>\n    );\n};\n","/**\n * https://opentype.js.org v1.3.4 | (c) Frederik De Bleser and other contributors | MIT License | Uses tiny-inflate by Devon Govett and string.prototype.codepointat polyfill by Mathias Bynens\n */\n\n/*! https://mths.be/codepointat v0.2.0 by @mathias */\nif (!String.prototype.codePointAt) {\n\t(function() {\n\t\tvar defineProperty = (function() {\n\t\t\t// IE 8 only supports `Object.defineProperty` on DOM elements\n\t\t\ttry {\n\t\t\t\tvar object = {};\n\t\t\t\tvar $defineProperty = Object.defineProperty;\n\t\t\t\tvar result = $defineProperty(object, object, object) && $defineProperty;\n\t\t\t} catch(error) {}\n\t\t\treturn result;\n\t\t}());\n\t\tvar codePointAt = function(position) {\n\t\t\tif (this == null) {\n\t\t\t\tthrow TypeError();\n\t\t\t}\n\t\t\tvar string = String(this);\n\t\t\tvar size = string.length;\n\t\t\t// `ToInteger`\n\t\t\tvar index = position ? Number(position) : 0;\n\t\t\tif (index != index) { // better `isNaN`\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t// Account for out-of-bounds indices:\n\t\t\tif (index < 0 || index >= size) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Get the first code unit\n\t\t\tvar first = string.charCodeAt(index);\n\t\t\tvar second;\n\t\t\tif ( // check if it’s the start of a surrogate pair\n\t\t\t\tfirst >= 0xD800 && first <= 0xDBFF && // high surrogate\n\t\t\t\tsize > index + 1 // there is a next code unit\n\t\t\t) {\n\t\t\t\tsecond = string.charCodeAt(index + 1);\n\t\t\t\tif (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate\n\t\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\t\treturn (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn first;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String.prototype, 'codePointAt', {\n\t\t\t\t'value': codePointAt,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.prototype.codePointAt = codePointAt;\n\t\t}\n\t}());\n}\n\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n  this.table = new Uint16Array(16);   /* table of code length counts */\n  this.trans = new Uint16Array(288);  /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n  this.source = source;\n  this.sourceIndex = 0;\n  this.tag = 0;\n  this.bitcount = 0;\n  \n  this.dest = dest;\n  this.destLen = 0;\n  \n  this.ltree = new Tree();  /* dynamic length/symbol tree */\n  this.dtree = new Tree();  /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n  16, 17, 18, 0, 8, 7, 9, 6,\n  10, 5, 11, 4, 12, 3, 13, 2,\n  14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n  var i, sum;\n\n  /* build bits table */\n  for (i = 0; i < delta; ++i) { bits[i] = 0; }\n  for (i = 0; i < 30 - delta; ++i) { bits[i + delta] = i / delta | 0; }\n\n  /* build base table */\n  for (sum = first, i = 0; i < 30; ++i) {\n    base[i] = sum;\n    sum += 1 << bits[i];\n  }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n  var i;\n\n  /* build fixed length tree */\n  for (i = 0; i < 7; ++i) { lt.table[i] = 0; }\n\n  lt.table[7] = 24;\n  lt.table[8] = 152;\n  lt.table[9] = 112;\n\n  for (i = 0; i < 24; ++i) { lt.trans[i] = 256 + i; }\n  for (i = 0; i < 144; ++i) { lt.trans[24 + i] = i; }\n  for (i = 0; i < 8; ++i) { lt.trans[24 + 144 + i] = 280 + i; }\n  for (i = 0; i < 112; ++i) { lt.trans[24 + 144 + 8 + i] = 144 + i; }\n\n  /* build fixed distance tree */\n  for (i = 0; i < 5; ++i) { dt.table[i] = 0; }\n\n  dt.table[5] = 32;\n\n  for (i = 0; i < 32; ++i) { dt.trans[i] = i; }\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n  var i, sum;\n\n  /* clear code length count table */\n  for (i = 0; i < 16; ++i) { t.table[i] = 0; }\n\n  /* scan symbol lengths, and sum code length counts */\n  for (i = 0; i < num; ++i) { t.table[lengths[off + i]]++; }\n\n  t.table[0] = 0;\n\n  /* compute offset table for distribution sort */\n  for (sum = 0, i = 0; i < 16; ++i) {\n    offs[i] = sum;\n    sum += t.table[i];\n  }\n\n  /* create code->symbol translation table (symbols sorted by code) */\n  for (i = 0; i < num; ++i) {\n    if (lengths[off + i]) { t.trans[offs[lengths[off + i]]++] = i; }\n  }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n  /* check if tag is empty */\n  if (!d.bitcount--) {\n    /* load next tag */\n    d.tag = d.source[d.sourceIndex++];\n    d.bitcount = 7;\n  }\n\n  /* shift bit out of tag */\n  var bit = d.tag & 1;\n  d.tag >>>= 1;\n\n  return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n  if (!num)\n    { return base; }\n\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n\n  var val = d.tag & (0xffff >>> (16 - num));\n  d.tag >>>= num;\n  d.bitcount -= num;\n  return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n  \n  var sum = 0, cur = 0, len = 0;\n  var tag = d.tag;\n\n  /* get more bits while code value is above sum */\n  do {\n    cur = 2 * cur + (tag & 1);\n    tag >>>= 1;\n    ++len;\n\n    sum += t.table[len];\n    cur -= t.table[len];\n  } while (cur >= 0);\n  \n  d.tag = tag;\n  d.bitcount -= len;\n\n  return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n  var hlit, hdist, hclen;\n  var i, num, length;\n\n  /* get 5 bits HLIT (257-286) */\n  hlit = tinf_read_bits(d, 5, 257);\n\n  /* get 5 bits HDIST (1-32) */\n  hdist = tinf_read_bits(d, 5, 1);\n\n  /* get 4 bits HCLEN (4-19) */\n  hclen = tinf_read_bits(d, 4, 4);\n\n  for (i = 0; i < 19; ++i) { lengths[i] = 0; }\n\n  /* read code lengths for code length alphabet */\n  for (i = 0; i < hclen; ++i) {\n    /* get 3 bits code length (0-7) */\n    var clen = tinf_read_bits(d, 3, 0);\n    lengths[clcidx[i]] = clen;\n  }\n\n  /* build code length tree */\n  tinf_build_tree(code_tree, lengths, 0, 19);\n\n  /* decode code lengths for the dynamic trees */\n  for (num = 0; num < hlit + hdist;) {\n    var sym = tinf_decode_symbol(d, code_tree);\n\n    switch (sym) {\n      case 16:\n        /* copy previous code length 3-6 times (read 2 bits) */\n        var prev = lengths[num - 1];\n        for (length = tinf_read_bits(d, 2, 3); length; --length) {\n          lengths[num++] = prev;\n        }\n        break;\n      case 17:\n        /* repeat code length 0 for 3-10 times (read 3 bits) */\n        for (length = tinf_read_bits(d, 3, 3); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      case 18:\n        /* repeat code length 0 for 11-138 times (read 7 bits) */\n        for (length = tinf_read_bits(d, 7, 11); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      default:\n        /* values 0-15 represent the actual code lengths */\n        lengths[num++] = sym;\n        break;\n    }\n  }\n\n  /* build dynamic trees */\n  tinf_build_tree(lt, lengths, 0, hlit);\n  tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n  while (1) {\n    var sym = tinf_decode_symbol(d, lt);\n\n    /* check for end of block */\n    if (sym === 256) {\n      return TINF_OK;\n    }\n\n    if (sym < 256) {\n      d.dest[d.destLen++] = sym;\n    } else {\n      var length, dist, offs;\n      var i;\n\n      sym -= 257;\n\n      /* possibly get more bits from length code */\n      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n      dist = tinf_decode_symbol(d, dt);\n\n      /* possibly get more bits from distance code */\n      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n      /* copy match */\n      for (i = offs; i < offs + length; ++i) {\n        d.dest[d.destLen++] = d.dest[i];\n      }\n    }\n  }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n  var length, invlength;\n  var i;\n  \n  /* unread from bitbuffer */\n  while (d.bitcount > 8) {\n    d.sourceIndex--;\n    d.bitcount -= 8;\n  }\n\n  /* get length */\n  length = d.source[d.sourceIndex + 1];\n  length = 256 * length + d.source[d.sourceIndex];\n\n  /* get one's complement of length */\n  invlength = d.source[d.sourceIndex + 3];\n  invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n  /* check length */\n  if (length !== (~invlength & 0x0000ffff))\n    { return TINF_DATA_ERROR; }\n\n  d.sourceIndex += 4;\n\n  /* copy block */\n  for (i = length; i; --i)\n    { d.dest[d.destLen++] = d.source[d.sourceIndex++]; }\n\n  /* make sure we start next block on a byte boundary */\n  d.bitcount = 0;\n\n  return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n  var d = new Data(source, dest);\n  var bfinal, btype, res;\n\n  do {\n    /* read final block flag */\n    bfinal = tinf_getbit(d);\n\n    /* read block type (2 bits) */\n    btype = tinf_read_bits(d, 2, 0);\n\n    /* decompress block */\n    switch (btype) {\n      case 0:\n        /* decompress uncompressed block */\n        res = tinf_inflate_uncompressed_block(d);\n        break;\n      case 1:\n        /* decompress block with fixed huffman trees */\n        res = tinf_inflate_block_data(d, sltree, sdtree);\n        break;\n      case 2:\n        /* decompress block with dynamic huffman trees */\n        tinf_decode_trees(d, d.ltree, d.dtree);\n        res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n        break;\n      default:\n        res = TINF_DATA_ERROR;\n    }\n\n    if (res !== TINF_OK)\n      { throw new Error('Data error'); }\n\n  } while (!bfinal);\n\n  if (d.destLen < d.dest.length) {\n    if (typeof d.dest.slice === 'function')\n      { return d.dest.slice(0, d.destLen); }\n    else\n      { return d.dest.subarray(0, d.destLen); }\n  }\n  \n  return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nvar tinyInflate = tinf_uncompress;\n\n// The Bounding Box object\n\nfunction derive(v0, v1, v2, v3, t) {\n    return Math.pow(1 - t, 3) * v0 +\n        3 * Math.pow(1 - t, 2) * t * v1 +\n        3 * (1 - t) * Math.pow(t, 2) * v2 +\n        Math.pow(t, 3) * v3;\n}\n/**\n * A bounding box is an enclosing box that describes the smallest measure within which all the points lie.\n * It is used to calculate the bounding box of a glyph or text path.\n *\n * On initialization, x1/y1/x2/y2 will be NaN. Check if the bounding box is empty using `isEmpty()`.\n *\n * @exports opentype.BoundingBox\n * @class\n * @constructor\n */\nfunction BoundingBox() {\n    this.x1 = Number.NaN;\n    this.y1 = Number.NaN;\n    this.x2 = Number.NaN;\n    this.y2 = Number.NaN;\n}\n\n/**\n * Returns true if the bounding box is empty, that is, no points have been added to the box yet.\n */\nBoundingBox.prototype.isEmpty = function() {\n    return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);\n};\n\n/**\n * Add the point to the bounding box.\n * The x1/y1/x2/y2 coordinates of the bounding box will now encompass the given point.\n * @param {number} x - The X coordinate of the point.\n * @param {number} y - The Y coordinate of the point.\n */\nBoundingBox.prototype.addPoint = function(x, y) {\n    if (typeof x === 'number') {\n        if (isNaN(this.x1) || isNaN(this.x2)) {\n            this.x1 = x;\n            this.x2 = x;\n        }\n        if (x < this.x1) {\n            this.x1 = x;\n        }\n        if (x > this.x2) {\n            this.x2 = x;\n        }\n    }\n    if (typeof y === 'number') {\n        if (isNaN(this.y1) || isNaN(this.y2)) {\n            this.y1 = y;\n            this.y2 = y;\n        }\n        if (y < this.y1) {\n            this.y1 = y;\n        }\n        if (y > this.y2) {\n            this.y2 = y;\n        }\n    }\n};\n\n/**\n * Add a X coordinate to the bounding box.\n * This extends the bounding box to include the X coordinate.\n * This function is used internally inside of addBezier.\n * @param {number} x - The X coordinate of the point.\n */\nBoundingBox.prototype.addX = function(x) {\n    this.addPoint(x, null);\n};\n\n/**\n * Add a Y coordinate to the bounding box.\n * This extends the bounding box to include the Y coordinate.\n * This function is used internally inside of addBezier.\n * @param {number} y - The Y coordinate of the point.\n */\nBoundingBox.prototype.addY = function(y) {\n    this.addPoint(null, y);\n};\n\n/**\n * Add a Bézier curve to the bounding box.\n * This extends the bounding box to include the entire Bézier.\n * @param {number} x0 - The starting X coordinate.\n * @param {number} y0 - The starting Y coordinate.\n * @param {number} x1 - The X coordinate of the first control point.\n * @param {number} y1 - The Y coordinate of the first control point.\n * @param {number} x2 - The X coordinate of the second control point.\n * @param {number} y2 - The Y coordinate of the second control point.\n * @param {number} x - The ending X coordinate.\n * @param {number} y - The ending Y coordinate.\n */\nBoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {\n    // This code is based on http://nishiohirokazu.blogspot.com/2009/06/how-to-calculate-bezier-curves-bounding.html\n    // and https://github.com/icons8/svg-path-bounding-box\n\n    var p0 = [x0, y0];\n    var p1 = [x1, y1];\n    var p2 = [x2, y2];\n    var p3 = [x, y];\n\n    this.addPoint(x0, y0);\n    this.addPoint(x, y);\n\n    for (var i = 0; i <= 1; i++) {\n        var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n        var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n        var c = 3 * p1[i] - 3 * p0[i];\n\n        if (a === 0) {\n            if (b === 0) { continue; }\n            var t = -c / b;\n            if (0 < t && t < 1) {\n                if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t)); }\n                if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t)); }\n            }\n            continue;\n        }\n\n        var b2ac = Math.pow(b, 2) - 4 * c * a;\n        if (b2ac < 0) { continue; }\n        var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n        if (0 < t1 && t1 < 1) {\n            if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1)); }\n            if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1)); }\n        }\n        var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n        if (0 < t2 && t2 < 1) {\n            if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2)); }\n            if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2)); }\n        }\n    }\n};\n\n/**\n * Add a quadratic curve to the bounding box.\n * This extends the bounding box to include the entire quadratic curve.\n * @param {number} x0 - The starting X coordinate.\n * @param {number} y0 - The starting Y coordinate.\n * @param {number} x1 - The X coordinate of the control point.\n * @param {number} y1 - The Y coordinate of the control point.\n * @param {number} x - The ending X coordinate.\n * @param {number} y - The ending Y coordinate.\n */\nBoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {\n    var cp1x = x0 + 2 / 3 * (x1 - x0);\n    var cp1y = y0 + 2 / 3 * (y1 - y0);\n    var cp2x = cp1x + 1 / 3 * (x - x0);\n    var cp2y = cp1y + 1 / 3 * (y - y0);\n    this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);\n};\n\n// Geometric objects\n\n/**\n * A bézier path containing a set of path commands similar to a SVG path.\n * Paths can be drawn on a context using `draw`.\n * @exports opentype.Path\n * @class\n * @constructor\n */\nfunction Path() {\n    this.commands = [];\n    this.fill = 'black';\n    this.stroke = null;\n    this.strokeWidth = 1;\n}\n\n/**\n * @param  {number} x\n * @param  {number} y\n */\nPath.prototype.moveTo = function(x, y) {\n    this.commands.push({\n        type: 'M',\n        x: x,\n        y: y\n    });\n};\n\n/**\n * @param  {number} x\n * @param  {number} y\n */\nPath.prototype.lineTo = function(x, y) {\n    this.commands.push({\n        type: 'L',\n        x: x,\n        y: y\n    });\n};\n\n/**\n * Draws cubic curve\n * @function\n * curveTo\n * @memberof opentype.Path.prototype\n * @param  {number} x1 - x of control 1\n * @param  {number} y1 - y of control 1\n * @param  {number} x2 - x of control 2\n * @param  {number} y2 - y of control 2\n * @param  {number} x - x of path point\n * @param  {number} y - y of path point\n */\n\n/**\n * Draws cubic curve\n * @function\n * bezierCurveTo\n * @memberof opentype.Path.prototype\n * @param  {number} x1 - x of control 1\n * @param  {number} y1 - y of control 1\n * @param  {number} x2 - x of control 2\n * @param  {number} y2 - y of control 2\n * @param  {number} x - x of path point\n * @param  {number} y - y of path point\n * @see curveTo\n */\nPath.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {\n    this.commands.push({\n        type: 'C',\n        x1: x1,\n        y1: y1,\n        x2: x2,\n        y2: y2,\n        x: x,\n        y: y\n    });\n};\n\n/**\n * Draws quadratic curve\n * @function\n * quadraticCurveTo\n * @memberof opentype.Path.prototype\n * @param  {number} x1 - x of control\n * @param  {number} y1 - y of control\n * @param  {number} x - x of path point\n * @param  {number} y - y of path point\n */\n\n/**\n * Draws quadratic curve\n * @function\n * quadTo\n * @memberof opentype.Path.prototype\n * @param  {number} x1 - x of control\n * @param  {number} y1 - y of control\n * @param  {number} x - x of path point\n * @param  {number} y - y of path point\n */\nPath.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {\n    this.commands.push({\n        type: 'Q',\n        x1: x1,\n        y1: y1,\n        x: x,\n        y: y\n    });\n};\n\n/**\n * Closes the path\n * @function closePath\n * @memberof opentype.Path.prototype\n */\n\n/**\n * Close the path\n * @function close\n * @memberof opentype.Path.prototype\n */\nPath.prototype.close = Path.prototype.closePath = function() {\n    this.commands.push({\n        type: 'Z'\n    });\n};\n\n/**\n * Add the given path or list of commands to the commands of this path.\n * @param  {Array} pathOrCommands - another opentype.Path, an opentype.BoundingBox, or an array of commands.\n */\nPath.prototype.extend = function(pathOrCommands) {\n    if (pathOrCommands.commands) {\n        pathOrCommands = pathOrCommands.commands;\n    } else if (pathOrCommands instanceof BoundingBox) {\n        var box = pathOrCommands;\n        this.moveTo(box.x1, box.y1);\n        this.lineTo(box.x2, box.y1);\n        this.lineTo(box.x2, box.y2);\n        this.lineTo(box.x1, box.y2);\n        this.close();\n        return;\n    }\n\n    Array.prototype.push.apply(this.commands, pathOrCommands);\n};\n\n/**\n * Calculate the bounding box of the path.\n * @returns {opentype.BoundingBox}\n */\nPath.prototype.getBoundingBox = function() {\n    var box = new BoundingBox();\n\n    var startX = 0;\n    var startY = 0;\n    var prevX = 0;\n    var prevY = 0;\n    for (var i = 0; i < this.commands.length; i++) {\n        var cmd = this.commands[i];\n        switch (cmd.type) {\n            case 'M':\n                box.addPoint(cmd.x, cmd.y);\n                startX = prevX = cmd.x;\n                startY = prevY = cmd.y;\n                break;\n            case 'L':\n                box.addPoint(cmd.x, cmd.y);\n                prevX = cmd.x;\n                prevY = cmd.y;\n                break;\n            case 'Q':\n                box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);\n                prevX = cmd.x;\n                prevY = cmd.y;\n                break;\n            case 'C':\n                box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n                prevX = cmd.x;\n                prevY = cmd.y;\n                break;\n            case 'Z':\n                prevX = startX;\n                prevY = startY;\n                break;\n            default:\n                throw new Error('Unexpected path command ' + cmd.type);\n        }\n    }\n    if (box.isEmpty()) {\n        box.addPoint(0, 0);\n    }\n    return box;\n};\n\n/**\n * Draw the path to a 2D context.\n * @param {CanvasRenderingContext2D} ctx - A 2D drawing context.\n */\nPath.prototype.draw = function(ctx) {\n    ctx.beginPath();\n    for (var i = 0; i < this.commands.length; i += 1) {\n        var cmd = this.commands[i];\n        if (cmd.type === 'M') {\n            ctx.moveTo(cmd.x, cmd.y);\n        } else if (cmd.type === 'L') {\n            ctx.lineTo(cmd.x, cmd.y);\n        } else if (cmd.type === 'C') {\n            ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n        } else if (cmd.type === 'Q') {\n            ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);\n        } else if (cmd.type === 'Z') {\n            ctx.closePath();\n        }\n    }\n\n    if (this.fill) {\n        ctx.fillStyle = this.fill;\n        ctx.fill();\n    }\n\n    if (this.stroke) {\n        ctx.strokeStyle = this.stroke;\n        ctx.lineWidth = this.strokeWidth;\n        ctx.stroke();\n    }\n};\n\n/**\n * Convert the Path to a string of path data instructions\n * See http://www.w3.org/TR/SVG/paths.html#PathData\n * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values\n * @return {string}\n */\nPath.prototype.toPathData = function(decimalPlaces) {\n    decimalPlaces = decimalPlaces !== undefined ? decimalPlaces : 2;\n\n    function floatToString(v) {\n        if (Math.round(v) === v) {\n            return '' + Math.round(v);\n        } else {\n            return v.toFixed(decimalPlaces);\n        }\n    }\n\n    function packValues() {\n        var arguments$1 = arguments;\n\n        var s = '';\n        for (var i = 0; i < arguments.length; i += 1) {\n            var v = arguments$1[i];\n            if (v >= 0 && i > 0) {\n                s += ' ';\n            }\n\n            s += floatToString(v);\n        }\n\n        return s;\n    }\n\n    var d = '';\n    for (var i = 0; i < this.commands.length; i += 1) {\n        var cmd = this.commands[i];\n        if (cmd.type === 'M') {\n            d += 'M' + packValues(cmd.x, cmd.y);\n        } else if (cmd.type === 'L') {\n            d += 'L' + packValues(cmd.x, cmd.y);\n        } else if (cmd.type === 'C') {\n            d += 'C' + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n        } else if (cmd.type === 'Q') {\n            d += 'Q' + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y);\n        } else if (cmd.type === 'Z') {\n            d += 'Z';\n        }\n    }\n\n    return d;\n};\n\n/**\n * Convert the path to an SVG <path> element, as a string.\n * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values\n * @return {string}\n */\nPath.prototype.toSVG = function(decimalPlaces) {\n    var svg = '<path d=\"';\n    svg += this.toPathData(decimalPlaces);\n    svg += '\"';\n    if (this.fill && this.fill !== 'black') {\n        if (this.fill === null) {\n            svg += ' fill=\"none\"';\n        } else {\n            svg += ' fill=\"' + this.fill + '\"';\n        }\n    }\n\n    if (this.stroke) {\n        svg += ' stroke=\"' + this.stroke + '\" stroke-width=\"' + this.strokeWidth + '\"';\n    }\n\n    svg += '/>';\n    return svg;\n};\n\n/**\n * Convert the path to a DOM element.\n * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values\n * @return {SVGPathElement}\n */\nPath.prototype.toDOMElement = function(decimalPlaces) {\n    var temporaryPath = this.toPathData(decimalPlaces);\n    var newPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n    newPath.setAttribute('d', temporaryPath);\n\n    return newPath;\n};\n\n// Run-time checking of preconditions.\n\nfunction fail(message) {\n    throw new Error(message);\n}\n\n// Precondition function that checks if the given predicate is true.\n// If not, it will throw an error.\nfunction argument(predicate, message) {\n    if (!predicate) {\n        fail(message);\n    }\n}\nvar check = { fail: fail, argument: argument, assert: argument };\n\n// Data types used in the OpenType font file.\n\nvar LIMIT16 = 32768; // The limit at which a 16-bit number switches signs == 2^15\nvar LIMIT32 = 2147483648; // The limit at which a 32-bit number switches signs == 2 ^ 31\n\n/**\n * @exports opentype.decode\n * @class\n */\nvar decode = {};\n/**\n * @exports opentype.encode\n * @class\n */\nvar encode = {};\n/**\n * @exports opentype.sizeOf\n * @class\n */\nvar sizeOf = {};\n\n// Return a function that always returns the same value.\nfunction constant(v) {\n    return function() {\n        return v;\n    };\n}\n\n// OpenType data types //////////////////////////////////////////////////////\n\n/**\n * Convert an 8-bit unsigned integer to a list of 1 byte.\n * @param {number}\n * @returns {Array}\n */\nencode.BYTE = function(v) {\n    check.argument(v >= 0 && v <= 255, 'Byte value should be between 0 and 255.');\n    return [v];\n};\n/**\n * @constant\n * @type {number}\n */\nsizeOf.BYTE = constant(1);\n\n/**\n * Convert a 8-bit signed integer to a list of 1 byte.\n * @param {string}\n * @returns {Array}\n */\nencode.CHAR = function(v) {\n    return [v.charCodeAt(0)];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.CHAR = constant(1);\n\n/**\n * Convert an ASCII string to a list of bytes.\n * @param {string}\n * @returns {Array}\n */\nencode.CHARARRAY = function(v) {\n    if (typeof v === 'undefined') {\n        v = '';\n        console.warn('Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.');\n    }\n    var b = [];\n    for (var i = 0; i < v.length; i += 1) {\n        b[i] = v.charCodeAt(i);\n    }\n\n    return b;\n};\n\n/**\n * @param {Array}\n * @returns {number}\n */\nsizeOf.CHARARRAY = function(v) {\n    if (typeof v === 'undefined') {\n        return 0;\n    }\n    return v.length;\n};\n\n/**\n * Convert a 16-bit unsigned integer to a list of 2 bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.USHORT = function(v) {\n    return [(v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.USHORT = constant(2);\n\n/**\n * Convert a 16-bit signed integer to a list of 2 bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.SHORT = function(v) {\n    // Two's complement\n    if (v >= LIMIT16) {\n        v = -(2 * LIMIT16 - v);\n    }\n\n    return [(v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.SHORT = constant(2);\n\n/**\n * Convert a 24-bit unsigned integer to a list of 3 bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.UINT24 = function(v) {\n    return [(v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.UINT24 = constant(3);\n\n/**\n * Convert a 32-bit unsigned integer to a list of 4 bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.ULONG = function(v) {\n    return [(v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.ULONG = constant(4);\n\n/**\n * Convert a 32-bit unsigned integer to a list of 4 bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.LONG = function(v) {\n    // Two's complement\n    if (v >= LIMIT32) {\n        v = -(2 * LIMIT32 - v);\n    }\n\n    return [(v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.LONG = constant(4);\n\nencode.FIXED = encode.ULONG;\nsizeOf.FIXED = sizeOf.ULONG;\n\nencode.FWORD = encode.SHORT;\nsizeOf.FWORD = sizeOf.SHORT;\n\nencode.UFWORD = encode.USHORT;\nsizeOf.UFWORD = sizeOf.USHORT;\n\n/**\n * Convert a 32-bit Apple Mac timestamp integer to a list of 8 bytes, 64-bit timestamp.\n * @param {number}\n * @returns {Array}\n */\nencode.LONGDATETIME = function(v) {\n    return [0, 0, 0, 0, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.LONGDATETIME = constant(8);\n\n/**\n * Convert a 4-char tag to a list of 4 bytes.\n * @param {string}\n * @returns {Array}\n */\nencode.TAG = function(v) {\n    check.argument(v.length === 4, 'Tag should be exactly 4 ASCII characters.');\n    return [v.charCodeAt(0),\n            v.charCodeAt(1),\n            v.charCodeAt(2),\n            v.charCodeAt(3)];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.TAG = constant(4);\n\n// CFF data types ///////////////////////////////////////////////////////////\n\nencode.Card8 = encode.BYTE;\nsizeOf.Card8 = sizeOf.BYTE;\n\nencode.Card16 = encode.USHORT;\nsizeOf.Card16 = sizeOf.USHORT;\n\nencode.OffSize = encode.BYTE;\nsizeOf.OffSize = sizeOf.BYTE;\n\nencode.SID = encode.USHORT;\nsizeOf.SID = sizeOf.USHORT;\n\n// Convert a numeric operand or charstring number to a variable-size list of bytes.\n/**\n * Convert a numeric operand or charstring number to a variable-size list of bytes.\n * @param {number}\n * @returns {Array}\n */\nencode.NUMBER = function(v) {\n    if (v >= -107 && v <= 107) {\n        return [v + 139];\n    } else if (v >= 108 && v <= 1131) {\n        v = v - 108;\n        return [(v >> 8) + 247, v & 0xFF];\n    } else if (v >= -1131 && v <= -108) {\n        v = -v - 108;\n        return [(v >> 8) + 251, v & 0xFF];\n    } else if (v >= -32768 && v <= 32767) {\n        return encode.NUMBER16(v);\n    } else {\n        return encode.NUMBER32(v);\n    }\n};\n\n/**\n * @param {number}\n * @returns {number}\n */\nsizeOf.NUMBER = function(v) {\n    return encode.NUMBER(v).length;\n};\n\n/**\n * Convert a signed number between -32768 and +32767 to a three-byte value.\n * This ensures we always use three bytes, but is not the most compact format.\n * @param {number}\n * @returns {Array}\n */\nencode.NUMBER16 = function(v) {\n    return [28, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.NUMBER16 = constant(3);\n\n/**\n * Convert a signed number between -(2^31) and +(2^31-1) to a five-byte value.\n * This is useful if you want to be sure you always use four bytes,\n * at the expense of wasting a few bytes for smaller numbers.\n * @param {number}\n * @returns {Array}\n */\nencode.NUMBER32 = function(v) {\n    return [29, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];\n};\n\n/**\n * @constant\n * @type {number}\n */\nsizeOf.NUMBER32 = constant(5);\n\n/**\n * @param {number}\n * @returns {Array}\n */\nencode.REAL = function(v) {\n    var value = v.toString();\n\n    // Some numbers use an epsilon to encode the value. (e.g. JavaScript will store 0.0000001 as 1e-7)\n    // This code converts it back to a number without the epsilon.\n    var m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n    if (m) {\n        var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));\n        value = (Math.round(v * epsilon) / epsilon).toString();\n    }\n\n    var nibbles = '';\n    for (var i = 0, ii = value.length; i < ii; i += 1) {\n        var c = value[i];\n        if (c === 'e') {\n            nibbles += value[++i] === '-' ? 'c' : 'b';\n        } else if (c === '.') {\n            nibbles += 'a';\n        } else if (c === '-') {\n            nibbles += 'e';\n        } else {\n            nibbles += c;\n        }\n    }\n\n    nibbles += (nibbles.length & 1) ? 'f' : 'ff';\n    var out = [30];\n    for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) {\n        out.push(parseInt(nibbles.substr(i$1, 2), 16));\n    }\n\n    return out;\n};\n\n/**\n * @param {number}\n * @returns {number}\n */\nsizeOf.REAL = function(v) {\n    return encode.REAL(v).length;\n};\n\nencode.NAME = encode.CHARARRAY;\nsizeOf.NAME = sizeOf.CHARARRAY;\n\nencode.STRING = encode.CHARARRAY;\nsizeOf.STRING = sizeOf.CHARARRAY;\n\n/**\n * @param {DataView} data\n * @param {number} offset\n * @param {number} numBytes\n * @returns {string}\n */\ndecode.UTF8 = function(data, offset, numBytes) {\n    var codePoints = [];\n    var numChars = numBytes;\n    for (var j = 0; j < numChars; j++, offset += 1) {\n        codePoints[j] = data.getUint8(offset);\n    }\n\n    return String.fromCharCode.apply(null, codePoints);\n};\n\n/**\n * @param {DataView} data\n * @param {number} offset\n * @param {number} numBytes\n * @returns {string}\n */\ndecode.UTF16 = function(data, offset, numBytes) {\n    var codePoints = [];\n    var numChars = numBytes / 2;\n    for (var j = 0; j < numChars; j++, offset += 2) {\n        codePoints[j] = data.getUint16(offset);\n    }\n\n    return String.fromCharCode.apply(null, codePoints);\n};\n\n/**\n * Convert a JavaScript string to UTF16-BE.\n * @param {string}\n * @returns {Array}\n */\nencode.UTF16 = function(v) {\n    var b = [];\n    for (var i = 0; i < v.length; i += 1) {\n        var codepoint = v.charCodeAt(i);\n        b[b.length] = (codepoint >> 8) & 0xFF;\n        b[b.length] = codepoint & 0xFF;\n    }\n\n    return b;\n};\n\n/**\n * @param {string}\n * @returns {number}\n */\nsizeOf.UTF16 = function(v) {\n    return v.length * 2;\n};\n\n// Data for converting old eight-bit Macintosh encodings to Unicode.\n// This representation is optimized for decoding; encoding is slower\n// and needs more memory. The assumption is that all opentype.js users\n// want to open fonts, but saving a font will be comparatively rare\n// so it can be more expensive. Keyed by IANA character set name.\n//\n// Python script for generating these strings:\n//\n//     s = u''.join([chr(c).decode('mac_greek') for c in range(128, 256)])\n//     print(s.encode('utf-8'))\n/**\n * @private\n */\nvar eightBitMacEncodings = {\n    'x-mac-croatian':  // Python: 'mac_croatian'\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø' +\n    '¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',\n    'x-mac-cyrillic':  // Python: 'mac_cyrillic'\n    'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњ' +\n    'јЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю',\n    'x-mac-gaelic': // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæø' +\n    'ṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',\n    'x-mac-greek':  // Python: 'mac_greek'\n    'Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩ' +\n    'άΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\\u00AD',\n    'x-mac-icelandic':  // Python: 'mac_iceland'\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +\n    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n    'x-mac-inuit': // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT\n    'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗ' +\n    'ᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',\n    'x-mac-ce':  // Python: 'mac_latin2'\n    'ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅ' +\n    'ņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',\n    macintosh:  // Python: 'mac_roman'\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +\n    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n    'x-mac-romanian':  // Python: 'mac_romanian'\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș' +\n    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n    'x-mac-turkish':  // Python: 'mac_turkish'\n    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +\n    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'\n};\n\n/**\n * Decodes an old-style Macintosh string. Returns either a Unicode JavaScript\n * string, or 'undefined' if the encoding is unsupported. For example, we do\n * not support Chinese, Japanese or Korean because these would need large\n * mapping tables.\n * @param {DataView} dataView\n * @param {number} offset\n * @param {number} dataLength\n * @param {string} encoding\n * @returns {string}\n */\ndecode.MACSTRING = function(dataView, offset, dataLength, encoding) {\n    var table = eightBitMacEncodings[encoding];\n    if (table === undefined) {\n        return undefined;\n    }\n\n    var result = '';\n    for (var i = 0; i < dataLength; i++) {\n        var c = dataView.getUint8(offset + i);\n        // In all eight-bit Mac encodings, the characters 0x00..0x7F are\n        // mapped to U+0000..U+007F; we only need to look up the others.\n        if (c <= 0x7F) {\n            result += String.fromCharCode(c);\n        } else {\n            result += table[c & 0x7F];\n        }\n    }\n\n    return result;\n};\n\n// Helper function for encode.MACSTRING. Returns a dictionary for mapping\n// Unicode character codes to their 8-bit MacOS equivalent. This table\n// is not exactly a super cheap data structure, but we do not care because\n// encoding Macintosh strings is only rarely needed in typical applications.\nvar macEncodingTableCache = typeof WeakMap === 'function' && new WeakMap();\nvar macEncodingCacheKeys;\nvar getMacEncodingTable = function (encoding) {\n    // Since we use encoding as a cache key for WeakMap, it has to be\n    // a String object and not a literal. And at least on NodeJS 2.10.1,\n    // WeakMap requires that the same String instance is passed for cache hits.\n    if (!macEncodingCacheKeys) {\n        macEncodingCacheKeys = {};\n        for (var e in eightBitMacEncodings) {\n            /*jshint -W053 */  // Suppress \"Do not use String as a constructor.\"\n            macEncodingCacheKeys[e] = new String(e);\n        }\n    }\n\n    var cacheKey = macEncodingCacheKeys[encoding];\n    if (cacheKey === undefined) {\n        return undefined;\n    }\n\n    // We can't do \"if (cache.has(key)) {return cache.get(key)}\" here:\n    // since garbage collection may run at any time, it could also kick in\n    // between the calls to cache.has() and cache.get(). In that case,\n    // we would return 'undefined' even though we do support the encoding.\n    if (macEncodingTableCache) {\n        var cachedTable = macEncodingTableCache.get(cacheKey);\n        if (cachedTable !== undefined) {\n            return cachedTable;\n        }\n    }\n\n    var decodingTable = eightBitMacEncodings[encoding];\n    if (decodingTable === undefined) {\n        return undefined;\n    }\n\n    var encodingTable = {};\n    for (var i = 0; i < decodingTable.length; i++) {\n        encodingTable[decodingTable.charCodeAt(i)] = i + 0x80;\n    }\n\n    if (macEncodingTableCache) {\n        macEncodingTableCache.set(cacheKey, encodingTable);\n    }\n\n    return encodingTable;\n};\n\n/**\n * Encodes an old-style Macintosh string. Returns a byte array upon success.\n * If the requested encoding is unsupported, or if the input string contains\n * a character that cannot be expressed in the encoding, the function returns\n * 'undefined'.\n * @param {string} str\n * @param {string} encoding\n * @returns {Array}\n */\nencode.MACSTRING = function(str, encoding) {\n    var table = getMacEncodingTable(encoding);\n    if (table === undefined) {\n        return undefined;\n    }\n\n    var result = [];\n    for (var i = 0; i < str.length; i++) {\n        var c = str.charCodeAt(i);\n\n        // In all eight-bit Mac encodings, the characters 0x00..0x7F are\n        // mapped to U+0000..U+007F; we only need to look up the others.\n        if (c >= 0x80) {\n            c = table[c];\n            if (c === undefined) {\n                // str contains a Unicode character that cannot be encoded\n                // in the requested encoding.\n                return undefined;\n            }\n        }\n        result[i] = c;\n        // result.push(c);\n    }\n\n    return result;\n};\n\n/**\n * @param {string} str\n * @param {string} encoding\n * @returns {number}\n */\nsizeOf.MACSTRING = function(str, encoding) {\n    var b = encode.MACSTRING(str, encoding);\n    if (b !== undefined) {\n        return b.length;\n    } else {\n        return 0;\n    }\n};\n\n// Helper for encode.VARDELTAS\nfunction isByteEncodable(value) {\n    return value >= -128 && value <= 127;\n}\n\n// Helper for encode.VARDELTAS\nfunction encodeVarDeltaRunAsZeroes(deltas, pos, result) {\n    var runLength = 0;\n    var numDeltas = deltas.length;\n    while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {\n        ++pos;\n        ++runLength;\n    }\n    result.push(0x80 | (runLength - 1));\n    return pos;\n}\n\n// Helper for encode.VARDELTAS\nfunction encodeVarDeltaRunAsBytes(deltas, offset, result) {\n    var runLength = 0;\n    var numDeltas = deltas.length;\n    var pos = offset;\n    while (pos < numDeltas && runLength < 64) {\n        var value = deltas[pos];\n        if (!isByteEncodable(value)) {\n            break;\n        }\n\n        // Within a byte-encoded run of deltas, a single zero is best\n        // stored literally as 0x00 value. However, if we have two or\n        // more zeroes in a sequence, it is better to start a new run.\n        // Fore example, the sequence of deltas [15, 15, 0, 15, 15]\n        // becomes 6 bytes (04 0F 0F 00 0F 0F) when storing the zero\n        // within the current run, but 7 bytes (01 0F 0F 80 01 0F 0F)\n        // when starting a new run.\n        if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {\n            break;\n        }\n\n        ++pos;\n        ++runLength;\n    }\n    result.push(runLength - 1);\n    for (var i = offset; i < pos; ++i) {\n        result.push((deltas[i] + 256) & 0xff);\n    }\n    return pos;\n}\n\n// Helper for encode.VARDELTAS\nfunction encodeVarDeltaRunAsWords(deltas, offset, result) {\n    var runLength = 0;\n    var numDeltas = deltas.length;\n    var pos = offset;\n    while (pos < numDeltas && runLength < 64) {\n        var value = deltas[pos];\n\n        // Within a word-encoded run of deltas, it is easiest to start\n        // a new run (with a different encoding) whenever we encounter\n        // a zero value. For example, the sequence [0x6666, 0, 0x7777]\n        // needs 7 bytes when storing the zero inside the current run\n        // (42 66 66 00 00 77 77), and equally 7 bytes when starting a\n        // new run (40 66 66 80 40 77 77).\n        if (value === 0) {\n            break;\n        }\n\n        // Within a word-encoded run of deltas, a single value in the\n        // range (-128..127) should be encoded within the current run\n        // because it is more compact. For example, the sequence\n        // [0x6666, 2, 0x7777] becomes 7 bytes when storing the value\n        // literally (42 66 66 00 02 77 77), but 8 bytes when starting\n        // a new run (40 66 66 00 02 40 77 77).\n        if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {\n            break;\n        }\n\n        ++pos;\n        ++runLength;\n    }\n    result.push(0x40 | (runLength - 1));\n    for (var i = offset; i < pos; ++i) {\n        var val = deltas[i];\n        result.push(((val + 0x10000) >> 8) & 0xff, (val + 0x100) & 0xff);\n    }\n    return pos;\n}\n\n/**\n * Encode a list of variation adjustment deltas.\n *\n * Variation adjustment deltas are used in ‘gvar’ and ‘cvar’ tables.\n * They indicate how points (in ‘gvar’) or values (in ‘cvar’) get adjusted\n * when generating instances of variation fonts.\n *\n * @see https://www.microsoft.com/typography/otspec/gvar.htm\n * @see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gvar.html\n * @param {Array}\n * @return {Array}\n */\nencode.VARDELTAS = function(deltas) {\n    var pos = 0;\n    var result = [];\n    while (pos < deltas.length) {\n        var value = deltas[pos];\n        if (value === 0) {\n            pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);\n        } else if (value >= -128 && value <= 127) {\n            pos = encodeVarDeltaRunAsBytes(deltas, pos, result);\n        } else {\n            pos = encodeVarDeltaRunAsWords(deltas, pos, result);\n        }\n    }\n    return result;\n};\n\n// Convert a list of values to a CFF INDEX structure.\n// The values should be objects containing name / type / value.\n/**\n * @param {Array} l\n * @returns {Array}\n */\nencode.INDEX = function(l) {\n    //var offset, offsets, offsetEncoder, encodedOffsets, encodedOffset, data,\n    //    i, v;\n    // Because we have to know which data type to use to encode the offsets,\n    // we have to go through the values twice: once to encode the data and\n    // calculate the offsets, then again to encode the offsets using the fitting data type.\n    var offset = 1; // First offset is always 1.\n    var offsets = [offset];\n    var data = [];\n    for (var i = 0; i < l.length; i += 1) {\n        var v = encode.OBJECT(l[i]);\n        Array.prototype.push.apply(data, v);\n        offset += v.length;\n        offsets.push(offset);\n    }\n\n    if (data.length === 0) {\n        return [0, 0];\n    }\n\n    var encodedOffsets = [];\n    var offSize = (1 + Math.floor(Math.log(offset) / Math.log(2)) / 8) | 0;\n    var offsetEncoder = [undefined, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];\n    for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) {\n        var encodedOffset = offsetEncoder(offsets[i$1]);\n        Array.prototype.push.apply(encodedOffsets, encodedOffset);\n    }\n\n    return Array.prototype.concat(encode.Card16(l.length),\n                           encode.OffSize(offSize),\n                           encodedOffsets,\n                           data);\n};\n\n/**\n * @param {Array}\n * @returns {number}\n */\nsizeOf.INDEX = function(v) {\n    return encode.INDEX(v).length;\n};\n\n/**\n * Convert an object to a CFF DICT structure.\n * The keys should be numeric.\n * The values should be objects containing name / type / value.\n * @param {Object} m\n * @returns {Array}\n */\nencode.DICT = function(m) {\n    var d = [];\n    var keys = Object.keys(m);\n    var length = keys.length;\n\n    for (var i = 0; i < length; i += 1) {\n        // Object.keys() return string keys, but our keys are always numeric.\n        var k = parseInt(keys[i], 0);\n        var v = m[k];\n        // Value comes before the key.\n        d = d.concat(encode.OPERAND(v.value, v.type));\n        d = d.concat(encode.OPERATOR(k));\n    }\n\n    return d;\n};\n\n/**\n * @param {Object}\n * @returns {number}\n */\nsizeOf.DICT = function(m) {\n    return encode.DICT(m).length;\n};\n\n/**\n * @param {number}\n * @returns {Array}\n */\nencode.OPERATOR = function(v) {\n    if (v < 1200) {\n        return [v];\n    } else {\n        return [12, v - 1200];\n    }\n};\n\n/**\n * @param {Array} v\n * @param {string}\n * @returns {Array}\n */\nencode.OPERAND = function(v, type) {\n    var d = [];\n    if (Array.isArray(type)) {\n        for (var i = 0; i < type.length; i += 1) {\n            check.argument(v.length === type.length, 'Not enough arguments given for type' + type);\n            d = d.concat(encode.OPERAND(v[i], type[i]));\n        }\n    } else {\n        if (type === 'SID') {\n            d = d.concat(encode.NUMBER(v));\n        } else if (type === 'offset') {\n            // We make it easy for ourselves and always encode offsets as\n            // 4 bytes. This makes offset calculation for the top dict easier.\n            d = d.concat(encode.NUMBER32(v));\n        } else if (type === 'number') {\n            d = d.concat(encode.NUMBER(v));\n        } else if (type === 'real') {\n            d = d.concat(encode.REAL(v));\n        } else {\n            throw new Error('Unknown operand type ' + type);\n            // FIXME Add support for booleans\n        }\n    }\n\n    return d;\n};\n\nencode.OP = encode.BYTE;\nsizeOf.OP = sizeOf.BYTE;\n\n// memoize charstring encoding using WeakMap if available\nvar wmm = typeof WeakMap === 'function' && new WeakMap();\n\n/**\n * Convert a list of CharString operations to bytes.\n * @param {Array}\n * @returns {Array}\n */\nencode.CHARSTRING = function(ops) {\n    // See encode.MACSTRING for why we don't do \"if (wmm && wmm.has(ops))\".\n    if (wmm) {\n        var cachedValue = wmm.get(ops);\n        if (cachedValue !== undefined) {\n            return cachedValue;\n        }\n    }\n\n    var d = [];\n    var length = ops.length;\n\n    for (var i = 0; i < length; i += 1) {\n        var op = ops[i];\n        d = d.concat(encode[op.type](op.value));\n    }\n\n    if (wmm) {\n        wmm.set(ops, d);\n    }\n\n    return d;\n};\n\n/**\n * @param {Array}\n * @returns {number}\n */\nsizeOf.CHARSTRING = function(ops) {\n    return encode.CHARSTRING(ops).length;\n};\n\n// Utility functions ////////////////////////////////////////////////////////\n\n/**\n * Convert an object containing name / type / value to bytes.\n * @param {Object}\n * @returns {Array}\n */\nencode.OBJECT = function(v) {\n    var encodingFunction = encode[v.type];\n    check.argument(encodingFunction !== undefined, 'No encoding function for type ' + v.type);\n    return encodingFunction(v.value);\n};\n\n/**\n * @param {Object}\n * @returns {number}\n */\nsizeOf.OBJECT = function(v) {\n    var sizeOfFunction = sizeOf[v.type];\n    check.argument(sizeOfFunction !== undefined, 'No sizeOf function for type ' + v.type);\n    return sizeOfFunction(v.value);\n};\n\n/**\n * Convert a table object to bytes.\n * A table contains a list of fields containing the metadata (name, type and default value).\n * The table itself has the field values set as attributes.\n * @param {opentype.Table}\n * @returns {Array}\n */\nencode.TABLE = function(table) {\n    var d = [];\n    var length = table.fields.length;\n    var subtables = [];\n    var subtableOffsets = [];\n\n    for (var i = 0; i < length; i += 1) {\n        var field = table.fields[i];\n        var encodingFunction = encode[field.type];\n        check.argument(encodingFunction !== undefined, 'No encoding function for field type ' + field.type + ' (' + field.name + ')');\n        var value = table[field.name];\n        if (value === undefined) {\n            value = field.value;\n        }\n\n        var bytes = encodingFunction(value);\n\n        if (field.type === 'TABLE') {\n            subtableOffsets.push(d.length);\n            d = d.concat([0, 0]);\n            subtables.push(bytes);\n        } else {\n            d = d.concat(bytes);\n        }\n    }\n\n    for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) {\n        var o = subtableOffsets[i$1];\n        var offset = d.length;\n        check.argument(offset < 65536, 'Table ' + table.tableName + ' too big.');\n        d[o] = offset >> 8;\n        d[o + 1] = offset & 0xff;\n        d = d.concat(subtables[i$1]);\n    }\n\n    return d;\n};\n\n/**\n * @param {opentype.Table}\n * @returns {number}\n */\nsizeOf.TABLE = function(table) {\n    var numBytes = 0;\n    var length = table.fields.length;\n\n    for (var i = 0; i < length; i += 1) {\n        var field = table.fields[i];\n        var sizeOfFunction = sizeOf[field.type];\n        check.argument(sizeOfFunction !== undefined, 'No sizeOf function for field type ' + field.type + ' (' + field.name + ')');\n        var value = table[field.name];\n        if (value === undefined) {\n            value = field.value;\n        }\n\n        numBytes += sizeOfFunction(value);\n\n        // Subtables take 2 more bytes for offsets.\n        if (field.type === 'TABLE') {\n            numBytes += 2;\n        }\n    }\n\n    return numBytes;\n};\n\nencode.RECORD = encode.TABLE;\nsizeOf.RECORD = sizeOf.TABLE;\n\n// Merge in a list of bytes.\nencode.LITERAL = function(v) {\n    return v;\n};\n\nsizeOf.LITERAL = function(v) {\n    return v.length;\n};\n\n// Table metadata\n\n/**\n * @exports opentype.Table\n * @class\n * @param {string} tableName\n * @param {Array} fields\n * @param {Object} options\n * @constructor\n */\nfunction Table(tableName, fields, options) {\n    // For coverage tables with coverage format 2, we do not want to add the coverage data directly to the table object,\n    // as this will result in wrong encoding order of the coverage data on serialization to bytes.\n    // The fallback of using the field values directly when not present on the table is handled in types.encode.TABLE() already.\n    if (fields.length && (fields[0].name !== 'coverageFormat' || fields[0].value === 1)) {\n        for (var i = 0; i < fields.length; i += 1) {\n            var field = fields[i];\n            this[field.name] = field.value;\n        }\n    }\n\n    this.tableName = tableName;\n    this.fields = fields;\n    if (options) {\n        var optionKeys = Object.keys(options);\n        for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) {\n            var k = optionKeys[i$1];\n            var v = options[k];\n            if (this[k] !== undefined) {\n                this[k] = v;\n            }\n        }\n    }\n}\n\n/**\n * Encodes the table and returns an array of bytes\n * @return {Array}\n */\nTable.prototype.encode = function() {\n    return encode.TABLE(this);\n};\n\n/**\n * Get the size of the table.\n * @return {number}\n */\nTable.prototype.sizeOf = function() {\n    return sizeOf.TABLE(this);\n};\n\n/**\n * @private\n */\nfunction ushortList(itemName, list, count) {\n    if (count === undefined) {\n        count = list.length;\n    }\n    var fields = new Array(list.length + 1);\n    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};\n    for (var i = 0; i < list.length; i++) {\n        fields[i + 1] = {name: itemName + i, type: 'USHORT', value: list[i]};\n    }\n    return fields;\n}\n\n/**\n * @private\n */\nfunction tableList(itemName, records, itemCallback) {\n    var count = records.length;\n    var fields = new Array(count + 1);\n    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};\n    for (var i = 0; i < count; i++) {\n        fields[i + 1] = {name: itemName + i, type: 'TABLE', value: itemCallback(records[i], i)};\n    }\n    return fields;\n}\n\n/**\n * @private\n */\nfunction recordList(itemName, records, itemCallback) {\n    var count = records.length;\n    var fields = [];\n    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};\n    for (var i = 0; i < count; i++) {\n        fields = fields.concat(itemCallback(records[i], i));\n    }\n    return fields;\n}\n\n// Common Layout Tables\n\n/**\n * @exports opentype.Coverage\n * @class\n * @param {opentype.Table}\n * @constructor\n * @extends opentype.Table\n */\nfunction Coverage(coverageTable) {\n    if (coverageTable.format === 1) {\n        Table.call(this, 'coverageTable',\n            [{name: 'coverageFormat', type: 'USHORT', value: 1}]\n            .concat(ushortList('glyph', coverageTable.glyphs))\n        );\n    } else if (coverageTable.format === 2) {\n        Table.call(this, 'coverageTable',\n            [{name: 'coverageFormat', type: 'USHORT', value: 2}]\n            .concat(recordList('rangeRecord', coverageTable.ranges, function(RangeRecord) {\n                return [\n                    {name: 'startGlyphID', type: 'USHORT', value: RangeRecord.start},\n                    {name: 'endGlyphID', type: 'USHORT', value: RangeRecord.end},\n                    {name: 'startCoverageIndex', type: 'USHORT', value: RangeRecord.index} ];\n            }))\n        );\n    } else {\n        check.assert(false, 'Coverage format must be 1 or 2.');\n    }\n}\nCoverage.prototype = Object.create(Table.prototype);\nCoverage.prototype.constructor = Coverage;\n\nfunction ScriptList(scriptListTable) {\n    Table.call(this, 'scriptListTable',\n        recordList('scriptRecord', scriptListTable, function(scriptRecord, i) {\n            var script = scriptRecord.script;\n            var defaultLangSys = script.defaultLangSys;\n            check.assert(!!defaultLangSys, 'Unable to write GSUB: script ' + scriptRecord.tag + ' has no default language system.');\n            return [\n                {name: 'scriptTag' + i, type: 'TAG', value: scriptRecord.tag},\n                {name: 'script' + i, type: 'TABLE', value: new Table('scriptTable', [\n                    {name: 'defaultLangSys', type: 'TABLE', value: new Table('defaultLangSys', [\n                        {name: 'lookupOrder', type: 'USHORT', value: 0},\n                        {name: 'reqFeatureIndex', type: 'USHORT', value: defaultLangSys.reqFeatureIndex}]\n                        .concat(ushortList('featureIndex', defaultLangSys.featureIndexes)))}\n                    ].concat(recordList('langSys', script.langSysRecords, function(langSysRecord, i) {\n                        var langSys = langSysRecord.langSys;\n                        return [\n                            {name: 'langSysTag' + i, type: 'TAG', value: langSysRecord.tag},\n                            {name: 'langSys' + i, type: 'TABLE', value: new Table('langSys', [\n                                {name: 'lookupOrder', type: 'USHORT', value: 0},\n                                {name: 'reqFeatureIndex', type: 'USHORT', value: langSys.reqFeatureIndex}\n                                ].concat(ushortList('featureIndex', langSys.featureIndexes)))}\n                        ];\n                    })))}\n            ];\n        })\n    );\n}\nScriptList.prototype = Object.create(Table.prototype);\nScriptList.prototype.constructor = ScriptList;\n\n/**\n * @exports opentype.FeatureList\n * @class\n * @param {opentype.Table}\n * @constructor\n * @extends opentype.Table\n */\nfunction FeatureList(featureListTable) {\n    Table.call(this, 'featureListTable',\n        recordList('featureRecord', featureListTable, function(featureRecord, i) {\n            var feature = featureRecord.feature;\n            return [\n                {name: 'featureTag' + i, type: 'TAG', value: featureRecord.tag},\n                {name: 'feature' + i, type: 'TABLE', value: new Table('featureTable', [\n                    {name: 'featureParams', type: 'USHORT', value: feature.featureParams} ].concat(ushortList('lookupListIndex', feature.lookupListIndexes)))}\n            ];\n        })\n    );\n}\nFeatureList.prototype = Object.create(Table.prototype);\nFeatureList.prototype.constructor = FeatureList;\n\n/**\n * @exports opentype.LookupList\n * @class\n * @param {opentype.Table}\n * @param {Object}\n * @constructor\n * @extends opentype.Table\n */\nfunction LookupList(lookupListTable, subtableMakers) {\n    Table.call(this, 'lookupListTable', tableList('lookup', lookupListTable, function(lookupTable) {\n        var subtableCallback = subtableMakers[lookupTable.lookupType];\n        check.assert(!!subtableCallback, 'Unable to write GSUB lookup type ' + lookupTable.lookupType + ' tables.');\n        return new Table('lookupTable', [\n            {name: 'lookupType', type: 'USHORT', value: lookupTable.lookupType},\n            {name: 'lookupFlag', type: 'USHORT', value: lookupTable.lookupFlag}\n        ].concat(tableList('subtable', lookupTable.subtables, subtableCallback)));\n    }));\n}\nLookupList.prototype = Object.create(Table.prototype);\nLookupList.prototype.constructor = LookupList;\n\n// Record = same as Table, but inlined (a Table has an offset and its data is further in the stream)\n// Don't use offsets inside Records (probable bug), only in Tables.\nvar table = {\n    Table: Table,\n    Record: Table,\n    Coverage: Coverage,\n    ScriptList: ScriptList,\n    FeatureList: FeatureList,\n    LookupList: LookupList,\n    ushortList: ushortList,\n    tableList: tableList,\n    recordList: recordList,\n};\n\n// Parsing utility functions\n\n// Retrieve an unsigned byte from the DataView.\nfunction getByte(dataView, offset) {\n    return dataView.getUint8(offset);\n}\n\n// Retrieve an unsigned 16-bit short from the DataView.\n// The value is stored in big endian.\nfunction getUShort(dataView, offset) {\n    return dataView.getUint16(offset, false);\n}\n\n// Retrieve a signed 16-bit short from the DataView.\n// The value is stored in big endian.\nfunction getShort(dataView, offset) {\n    return dataView.getInt16(offset, false);\n}\n\n// Retrieve an unsigned 32-bit long from the DataView.\n// The value is stored in big endian.\nfunction getULong(dataView, offset) {\n    return dataView.getUint32(offset, false);\n}\n\n// Retrieve a 32-bit signed fixed-point number (16.16) from the DataView.\n// The value is stored in big endian.\nfunction getFixed(dataView, offset) {\n    var decimal = dataView.getInt16(offset, false);\n    var fraction = dataView.getUint16(offset + 2, false);\n    return decimal + fraction / 65535;\n}\n\n// Retrieve a 4-character tag from the DataView.\n// Tags are used to identify tables.\nfunction getTag(dataView, offset) {\n    var tag = '';\n    for (var i = offset; i < offset + 4; i += 1) {\n        tag += String.fromCharCode(dataView.getInt8(i));\n    }\n\n    return tag;\n}\n\n// Retrieve an offset from the DataView.\n// Offsets are 1 to 4 bytes in length, depending on the offSize argument.\nfunction getOffset(dataView, offset, offSize) {\n    var v = 0;\n    for (var i = 0; i < offSize; i += 1) {\n        v <<= 8;\n        v += dataView.getUint8(offset + i);\n    }\n\n    return v;\n}\n\n// Retrieve a number of bytes from start offset to the end offset from the DataView.\nfunction getBytes(dataView, startOffset, endOffset) {\n    var bytes = [];\n    for (var i = startOffset; i < endOffset; i += 1) {\n        bytes.push(dataView.getUint8(i));\n    }\n\n    return bytes;\n}\n\n// Convert the list of bytes to a string.\nfunction bytesToString(bytes) {\n    var s = '';\n    for (var i = 0; i < bytes.length; i += 1) {\n        s += String.fromCharCode(bytes[i]);\n    }\n\n    return s;\n}\n\nvar typeOffsets = {\n    byte: 1,\n    uShort: 2,\n    short: 2,\n    uLong: 4,\n    fixed: 4,\n    longDateTime: 8,\n    tag: 4\n};\n\n// A stateful parser that changes the offset whenever a value is retrieved.\n// The data is a DataView.\nfunction Parser(data, offset) {\n    this.data = data;\n    this.offset = offset;\n    this.relativeOffset = 0;\n}\n\nParser.prototype.parseByte = function() {\n    var v = this.data.getUint8(this.offset + this.relativeOffset);\n    this.relativeOffset += 1;\n    return v;\n};\n\nParser.prototype.parseChar = function() {\n    var v = this.data.getInt8(this.offset + this.relativeOffset);\n    this.relativeOffset += 1;\n    return v;\n};\n\nParser.prototype.parseCard8 = Parser.prototype.parseByte;\n\nParser.prototype.parseUShort = function() {\n    var v = this.data.getUint16(this.offset + this.relativeOffset);\n    this.relativeOffset += 2;\n    return v;\n};\n\nParser.prototype.parseCard16 = Parser.prototype.parseUShort;\nParser.prototype.parseSID = Parser.prototype.parseUShort;\nParser.prototype.parseOffset16 = Parser.prototype.parseUShort;\n\nParser.prototype.parseShort = function() {\n    var v = this.data.getInt16(this.offset + this.relativeOffset);\n    this.relativeOffset += 2;\n    return v;\n};\n\nParser.prototype.parseF2Dot14 = function() {\n    var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;\n    this.relativeOffset += 2;\n    return v;\n};\n\nParser.prototype.parseULong = function() {\n    var v = getULong(this.data, this.offset + this.relativeOffset);\n    this.relativeOffset += 4;\n    return v;\n};\n\nParser.prototype.parseOffset32 = Parser.prototype.parseULong;\n\nParser.prototype.parseFixed = function() {\n    var v = getFixed(this.data, this.offset + this.relativeOffset);\n    this.relativeOffset += 4;\n    return v;\n};\n\nParser.prototype.parseString = function(length) {\n    var dataView = this.data;\n    var offset = this.offset + this.relativeOffset;\n    var string = '';\n    this.relativeOffset += length;\n    for (var i = 0; i < length; i++) {\n        string += String.fromCharCode(dataView.getUint8(offset + i));\n    }\n\n    return string;\n};\n\nParser.prototype.parseTag = function() {\n    return this.parseString(4);\n};\n\n// LONGDATETIME is a 64-bit integer.\n// JavaScript and unix timestamps traditionally use 32 bits, so we\n// only take the last 32 bits.\n// + Since until 2038 those bits will be filled by zeros we can ignore them.\nParser.prototype.parseLongDateTime = function() {\n    var v = getULong(this.data, this.offset + this.relativeOffset + 4);\n    // Subtract seconds between 01/01/1904 and 01/01/1970\n    // to convert Apple Mac timestamp to Standard Unix timestamp\n    v -= 2082844800;\n    this.relativeOffset += 8;\n    return v;\n};\n\nParser.prototype.parseVersion = function(minorBase) {\n    var major = getUShort(this.data, this.offset + this.relativeOffset);\n\n    // How to interpret the minor version is very vague in the spec. 0x5000 is 5, 0x1000 is 1\n    // Default returns the correct number if minor = 0xN000 where N is 0-9\n    // Set minorBase to 1 for tables that use minor = N where N is 0-9\n    var minor = getUShort(this.data, this.offset + this.relativeOffset + 2);\n    this.relativeOffset += 4;\n    if (minorBase === undefined) { minorBase = 0x1000; }\n    return major + minor / minorBase / 10;\n};\n\nParser.prototype.skip = function(type, amount) {\n    if (amount === undefined) {\n        amount = 1;\n    }\n\n    this.relativeOffset += typeOffsets[type] * amount;\n};\n\n///// Parsing lists and records ///////////////////////////////\n\n// Parse a list of 32 bit unsigned integers.\nParser.prototype.parseULongList = function(count) {\n    if (count === undefined) { count = this.parseULong(); }\n    var offsets = new Array(count);\n    var dataView = this.data;\n    var offset = this.offset + this.relativeOffset;\n    for (var i = 0; i < count; i++) {\n        offsets[i] = dataView.getUint32(offset);\n        offset += 4;\n    }\n\n    this.relativeOffset += count * 4;\n    return offsets;\n};\n\n// Parse a list of 16 bit unsigned integers. The length of the list can be read on the stream\n// or provided as an argument.\nParser.prototype.parseOffset16List =\nParser.prototype.parseUShortList = function(count) {\n    if (count === undefined) { count = this.parseUShort(); }\n    var offsets = new Array(count);\n    var dataView = this.data;\n    var offset = this.offset + this.relativeOffset;\n    for (var i = 0; i < count; i++) {\n        offsets[i] = dataView.getUint16(offset);\n        offset += 2;\n    }\n\n    this.relativeOffset += count * 2;\n    return offsets;\n};\n\n// Parses a list of 16 bit signed integers.\nParser.prototype.parseShortList = function(count) {\n    var list = new Array(count);\n    var dataView = this.data;\n    var offset = this.offset + this.relativeOffset;\n    for (var i = 0; i < count; i++) {\n        list[i] = dataView.getInt16(offset);\n        offset += 2;\n    }\n\n    this.relativeOffset += count * 2;\n    return list;\n};\n\n// Parses a list of bytes.\nParser.prototype.parseByteList = function(count) {\n    var list = new Array(count);\n    var dataView = this.data;\n    var offset = this.offset + this.relativeOffset;\n    for (var i = 0; i < count; i++) {\n        list[i] = dataView.getUint8(offset++);\n    }\n\n    this.relativeOffset += count;\n    return list;\n};\n\n/**\n * Parse a list of items.\n * Record count is optional, if omitted it is read from the stream.\n * itemCallback is one of the Parser methods.\n */\nParser.prototype.parseList = function(count, itemCallback) {\n    if (!itemCallback) {\n        itemCallback = count;\n        count = this.parseUShort();\n    }\n    var list = new Array(count);\n    for (var i = 0; i < count; i++) {\n        list[i] = itemCallback.call(this);\n    }\n    return list;\n};\n\nParser.prototype.parseList32 = function(count, itemCallback) {\n    if (!itemCallback) {\n        itemCallback = count;\n        count = this.parseULong();\n    }\n    var list = new Array(count);\n    for (var i = 0; i < count; i++) {\n        list[i] = itemCallback.call(this);\n    }\n    return list;\n};\n\n/**\n * Parse a list of records.\n * Record count is optional, if omitted it is read from the stream.\n * Example of recordDescription: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }\n */\nParser.prototype.parseRecordList = function(count, recordDescription) {\n    // If the count argument is absent, read it in the stream.\n    if (!recordDescription) {\n        recordDescription = count;\n        count = this.parseUShort();\n    }\n    var records = new Array(count);\n    var fields = Object.keys(recordDescription);\n    for (var i = 0; i < count; i++) {\n        var rec = {};\n        for (var j = 0; j < fields.length; j++) {\n            var fieldName = fields[j];\n            var fieldType = recordDescription[fieldName];\n            rec[fieldName] = fieldType.call(this);\n        }\n        records[i] = rec;\n    }\n    return records;\n};\n\nParser.prototype.parseRecordList32 = function(count, recordDescription) {\n    // If the count argument is absent, read it in the stream.\n    if (!recordDescription) {\n        recordDescription = count;\n        count = this.parseULong();\n    }\n    var records = new Array(count);\n    var fields = Object.keys(recordDescription);\n    for (var i = 0; i < count; i++) {\n        var rec = {};\n        for (var j = 0; j < fields.length; j++) {\n            var fieldName = fields[j];\n            var fieldType = recordDescription[fieldName];\n            rec[fieldName] = fieldType.call(this);\n        }\n        records[i] = rec;\n    }\n    return records;\n};\n\n// Parse a data structure into an object\n// Example of description: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }\nParser.prototype.parseStruct = function(description) {\n    if (typeof description === 'function') {\n        return description.call(this);\n    } else {\n        var fields = Object.keys(description);\n        var struct = {};\n        for (var j = 0; j < fields.length; j++) {\n            var fieldName = fields[j];\n            var fieldType = description[fieldName];\n            struct[fieldName] = fieldType.call(this);\n        }\n        return struct;\n    }\n};\n\n/**\n * Parse a GPOS valueRecord\n * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record\n * valueFormat is optional, if omitted it is read from the stream.\n */\nParser.prototype.parseValueRecord = function(valueFormat) {\n    if (valueFormat === undefined) {\n        valueFormat = this.parseUShort();\n    }\n    if (valueFormat === 0) {\n        // valueFormat2 in kerning pairs is most often 0\n        // in this case return undefined instead of an empty object, to save space\n        return;\n    }\n    var valueRecord = {};\n\n    if (valueFormat & 0x0001) { valueRecord.xPlacement = this.parseShort(); }\n    if (valueFormat & 0x0002) { valueRecord.yPlacement = this.parseShort(); }\n    if (valueFormat & 0x0004) { valueRecord.xAdvance = this.parseShort(); }\n    if (valueFormat & 0x0008) { valueRecord.yAdvance = this.parseShort(); }\n\n    // Device table (non-variable font) / VariationIndex table (variable font) not supported\n    // https://docs.microsoft.com/fr-fr/typography/opentype/spec/chapter2#devVarIdxTbls\n    if (valueFormat & 0x0010) { valueRecord.xPlaDevice = undefined; this.parseShort(); }\n    if (valueFormat & 0x0020) { valueRecord.yPlaDevice = undefined; this.parseShort(); }\n    if (valueFormat & 0x0040) { valueRecord.xAdvDevice = undefined; this.parseShort(); }\n    if (valueFormat & 0x0080) { valueRecord.yAdvDevice = undefined; this.parseShort(); }\n\n    return valueRecord;\n};\n\n/**\n * Parse a list of GPOS valueRecords\n * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record\n * valueFormat and valueCount are read from the stream.\n */\nParser.prototype.parseValueRecordList = function() {\n    var valueFormat = this.parseUShort();\n    var valueCount = this.parseUShort();\n    var values = new Array(valueCount);\n    for (var i = 0; i < valueCount; i++) {\n        values[i] = this.parseValueRecord(valueFormat);\n    }\n    return values;\n};\n\nParser.prototype.parsePointer = function(description) {\n    var structOffset = this.parseOffset16();\n    if (structOffset > 0) {\n        // NULL offset => return undefined\n        return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n    }\n    return undefined;\n};\n\nParser.prototype.parsePointer32 = function(description) {\n    var structOffset = this.parseOffset32();\n    if (structOffset > 0) {\n        // NULL offset => return undefined\n        return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n    }\n    return undefined;\n};\n\n/**\n * Parse a list of offsets to lists of 16-bit integers,\n * or a list of offsets to lists of offsets to any kind of items.\n * If itemCallback is not provided, a list of list of UShort is assumed.\n * If provided, itemCallback is called on each item and must parse the item.\n * See examples in tables/gsub.js\n */\nParser.prototype.parseListOfLists = function(itemCallback) {\n    var offsets = this.parseOffset16List();\n    var count = offsets.length;\n    var relativeOffset = this.relativeOffset;\n    var list = new Array(count);\n    for (var i = 0; i < count; i++) {\n        var start = offsets[i];\n        if (start === 0) {\n            // NULL offset\n            // Add i as owned property to list. Convenient with assert.\n            list[i] = undefined;\n            continue;\n        }\n        this.relativeOffset = start;\n        if (itemCallback) {\n            var subOffsets = this.parseOffset16List();\n            var subList = new Array(subOffsets.length);\n            for (var j = 0; j < subOffsets.length; j++) {\n                this.relativeOffset = start + subOffsets[j];\n                subList[j] = itemCallback.call(this);\n            }\n            list[i] = subList;\n        } else {\n            list[i] = this.parseUShortList();\n        }\n    }\n    this.relativeOffset = relativeOffset;\n    return list;\n};\n\n///// Complex tables parsing //////////////////////////////////\n\n// Parse a coverage table in a GSUB, GPOS or GDEF table.\n// https://www.microsoft.com/typography/OTSPEC/chapter2.htm\n// parser.offset must point to the start of the table containing the coverage.\nParser.prototype.parseCoverage = function() {\n    var startOffset = this.offset + this.relativeOffset;\n    var format = this.parseUShort();\n    var count = this.parseUShort();\n    if (format === 1) {\n        return {\n            format: 1,\n            glyphs: this.parseUShortList(count)\n        };\n    } else if (format === 2) {\n        var ranges = new Array(count);\n        for (var i = 0; i < count; i++) {\n            ranges[i] = {\n                start: this.parseUShort(),\n                end: this.parseUShort(),\n                index: this.parseUShort()\n            };\n        }\n        return {\n            format: 2,\n            ranges: ranges\n        };\n    }\n    throw new Error('0x' + startOffset.toString(16) + ': Coverage format must be 1 or 2.');\n};\n\n// Parse a Class Definition Table in a GSUB, GPOS or GDEF table.\n// https://www.microsoft.com/typography/OTSPEC/chapter2.htm\nParser.prototype.parseClassDef = function() {\n    var startOffset = this.offset + this.relativeOffset;\n    var format = this.parseUShort();\n    if (format === 1) {\n        return {\n            format: 1,\n            startGlyph: this.parseUShort(),\n            classes: this.parseUShortList()\n        };\n    } else if (format === 2) {\n        return {\n            format: 2,\n            ranges: this.parseRecordList({\n                start: Parser.uShort,\n                end: Parser.uShort,\n                classId: Parser.uShort\n            })\n        };\n    }\n    throw new Error('0x' + startOffset.toString(16) + ': ClassDef format must be 1 or 2.');\n};\n\n///// Static methods ///////////////////////////////////\n// These convenience methods can be used as callbacks and should be called with \"this\" context set to a Parser instance.\n\nParser.list = function(count, itemCallback) {\n    return function() {\n        return this.parseList(count, itemCallback);\n    };\n};\n\nParser.list32 = function(count, itemCallback) {\n    return function() {\n        return this.parseList32(count, itemCallback);\n    };\n};\n\nParser.recordList = function(count, recordDescription) {\n    return function() {\n        return this.parseRecordList(count, recordDescription);\n    };\n};\n\nParser.recordList32 = function(count, recordDescription) {\n    return function() {\n        return this.parseRecordList32(count, recordDescription);\n    };\n};\n\nParser.pointer = function(description) {\n    return function() {\n        return this.parsePointer(description);\n    };\n};\n\nParser.pointer32 = function(description) {\n    return function() {\n        return this.parsePointer32(description);\n    };\n};\n\nParser.tag = Parser.prototype.parseTag;\nParser.byte = Parser.prototype.parseByte;\nParser.uShort = Parser.offset16 = Parser.prototype.parseUShort;\nParser.uShortList = Parser.prototype.parseUShortList;\nParser.uLong = Parser.offset32 = Parser.prototype.parseULong;\nParser.uLongList = Parser.prototype.parseULongList;\nParser.struct = Parser.prototype.parseStruct;\nParser.coverage = Parser.prototype.parseCoverage;\nParser.classDef = Parser.prototype.parseClassDef;\n\n///// Script, Feature, Lookup lists ///////////////////////////////////////////////\n// https://www.microsoft.com/typography/OTSPEC/chapter2.htm\n\nvar langSysTable = {\n    reserved: Parser.uShort,\n    reqFeatureIndex: Parser.uShort,\n    featureIndexes: Parser.uShortList\n};\n\nParser.prototype.parseScriptList = function() {\n    return this.parsePointer(Parser.recordList({\n        tag: Parser.tag,\n        script: Parser.pointer({\n            defaultLangSys: Parser.pointer(langSysTable),\n            langSysRecords: Parser.recordList({\n                tag: Parser.tag,\n                langSys: Parser.pointer(langSysTable)\n            })\n        })\n    })) || [];\n};\n\nParser.prototype.parseFeatureList = function() {\n    return this.parsePointer(Parser.recordList({\n        tag: Parser.tag,\n        feature: Parser.pointer({\n            featureParams: Parser.offset16,\n            lookupListIndexes: Parser.uShortList\n        })\n    })) || [];\n};\n\nParser.prototype.parseLookupList = function(lookupTableParsers) {\n    return this.parsePointer(Parser.list(Parser.pointer(function() {\n        var lookupType = this.parseUShort();\n        check.argument(1 <= lookupType && lookupType <= 9, 'GPOS/GSUB lookup type ' + lookupType + ' unknown.');\n        var lookupFlag = this.parseUShort();\n        var useMarkFilteringSet = lookupFlag & 0x10;\n        return {\n            lookupType: lookupType,\n            lookupFlag: lookupFlag,\n            subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])),\n            markFilteringSet: useMarkFilteringSet ? this.parseUShort() : undefined\n        };\n    }))) || [];\n};\n\nParser.prototype.parseFeatureVariationsList = function() {\n    return this.parsePointer32(function() {\n        var majorVersion = this.parseUShort();\n        var minorVersion = this.parseUShort();\n        check.argument(majorVersion === 1 && minorVersion < 1, 'GPOS/GSUB feature variations table unknown.');\n        var featureVariations = this.parseRecordList32({\n            conditionSetOffset: Parser.offset32,\n            featureTableSubstitutionOffset: Parser.offset32\n        });\n        return featureVariations;\n    }) || [];\n};\n\nvar parse = {\n    getByte: getByte,\n    getCard8: getByte,\n    getUShort: getUShort,\n    getCard16: getUShort,\n    getShort: getShort,\n    getULong: getULong,\n    getFixed: getFixed,\n    getTag: getTag,\n    getOffset: getOffset,\n    getBytes: getBytes,\n    bytesToString: bytesToString,\n    Parser: Parser,\n};\n\n// The `cmap` table stores the mappings from characters to glyphs.\n\nfunction parseCmapTableFormat12(cmap, p) {\n    //Skip reserved.\n    p.parseUShort();\n\n    // Length in bytes of the sub-tables.\n    cmap.length = p.parseULong();\n    cmap.language = p.parseULong();\n\n    var groupCount;\n    cmap.groupCount = groupCount = p.parseULong();\n    cmap.glyphIndexMap = {};\n\n    for (var i = 0; i < groupCount; i += 1) {\n        var startCharCode = p.parseULong();\n        var endCharCode = p.parseULong();\n        var startGlyphId = p.parseULong();\n\n        for (var c = startCharCode; c <= endCharCode; c += 1) {\n            cmap.glyphIndexMap[c] = startGlyphId;\n            startGlyphId++;\n        }\n    }\n}\n\nfunction parseCmapTableFormat4(cmap, p, data, start, offset) {\n    // Length in bytes of the sub-tables.\n    cmap.length = p.parseUShort();\n    cmap.language = p.parseUShort();\n\n    // segCount is stored x 2.\n    var segCount;\n    cmap.segCount = segCount = p.parseUShort() >> 1;\n\n    // Skip searchRange, entrySelector, rangeShift.\n    p.skip('uShort', 3);\n\n    // The \"unrolled\" mapping from character codes to glyph indices.\n    cmap.glyphIndexMap = {};\n    var endCountParser = new parse.Parser(data, start + offset + 14);\n    var startCountParser = new parse.Parser(data, start + offset + 16 + segCount * 2);\n    var idDeltaParser = new parse.Parser(data, start + offset + 16 + segCount * 4);\n    var idRangeOffsetParser = new parse.Parser(data, start + offset + 16 + segCount * 6);\n    var glyphIndexOffset = start + offset + 16 + segCount * 8;\n    for (var i = 0; i < segCount - 1; i += 1) {\n        var glyphIndex = (void 0);\n        var endCount = endCountParser.parseUShort();\n        var startCount = startCountParser.parseUShort();\n        var idDelta = idDeltaParser.parseShort();\n        var idRangeOffset = idRangeOffsetParser.parseUShort();\n        for (var c = startCount; c <= endCount; c += 1) {\n            if (idRangeOffset !== 0) {\n                // The idRangeOffset is relative to the current position in the idRangeOffset array.\n                // Take the current offset in the idRangeOffset array.\n                glyphIndexOffset = (idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2);\n\n                // Add the value of the idRangeOffset, which will move us into the glyphIndex array.\n                glyphIndexOffset += idRangeOffset;\n\n                // Then add the character index of the current segment, multiplied by 2 for USHORTs.\n                glyphIndexOffset += (c - startCount) * 2;\n                glyphIndex = parse.getUShort(data, glyphIndexOffset);\n                if (glyphIndex !== 0) {\n                    glyphIndex = (glyphIndex + idDelta) & 0xFFFF;\n                }\n            } else {\n                glyphIndex = (c + idDelta) & 0xFFFF;\n            }\n\n            cmap.glyphIndexMap[c] = glyphIndex;\n        }\n    }\n}\n\n// Parse the `cmap` table. This table stores the mappings from characters to glyphs.\n// There are many available formats, but we only support the Windows format 4 and 12.\n// This function returns a `CmapEncoding` object or null if no supported format could be found.\nfunction parseCmapTable(data, start) {\n    var cmap = {};\n    cmap.version = parse.getUShort(data, start);\n    check.argument(cmap.version === 0, 'cmap table version should be 0.');\n\n    // The cmap table can contain many sub-tables, each with their own format.\n    // We're only interested in a \"platform 0\" (Unicode format) and \"platform 3\" (Windows format) table.\n    cmap.numTables = parse.getUShort(data, start + 2);\n    var offset = -1;\n    for (var i = cmap.numTables - 1; i >= 0; i -= 1) {\n        var platformId = parse.getUShort(data, start + 4 + (i * 8));\n        var encodingId = parse.getUShort(data, start + 4 + (i * 8) + 2);\n        if ((platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10)) ||\n            (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4))) {\n            offset = parse.getULong(data, start + 4 + (i * 8) + 4);\n            break;\n        }\n    }\n\n    if (offset === -1) {\n        // There is no cmap table in the font that we support.\n        throw new Error('No valid cmap sub-tables found.');\n    }\n\n    var p = new parse.Parser(data, start + offset);\n    cmap.format = p.parseUShort();\n\n    if (cmap.format === 12) {\n        parseCmapTableFormat12(cmap, p);\n    } else if (cmap.format === 4) {\n        parseCmapTableFormat4(cmap, p, data, start, offset);\n    } else {\n        throw new Error('Only format 4 and 12 cmap tables are supported (found format ' + cmap.format + ').');\n    }\n\n    return cmap;\n}\n\nfunction addSegment(t, code, glyphIndex) {\n    t.segments.push({\n        end: code,\n        start: code,\n        delta: -(code - glyphIndex),\n        offset: 0,\n        glyphIndex: glyphIndex\n    });\n}\n\nfunction addTerminatorSegment(t) {\n    t.segments.push({\n        end: 0xFFFF,\n        start: 0xFFFF,\n        delta: 1,\n        offset: 0\n    });\n}\n\n// Make cmap table, format 4 by default, 12 if needed only\nfunction makeCmapTable(glyphs) {\n    // Plan 0 is the base Unicode Plan but emojis, for example are on another plan, and needs cmap 12 format (with 32bit)\n    var isPlan0Only = true;\n    var i;\n\n    // Check if we need to add cmap format 12 or if format 4 only is fine\n    for (i = glyphs.length - 1; i > 0; i -= 1) {\n        var g = glyphs.get(i);\n        if (g.unicode > 65535) {\n            console.log('Adding CMAP format 12 (needed!)');\n            isPlan0Only = false;\n            break;\n        }\n    }\n\n    var cmapTable = [\n        {name: 'version', type: 'USHORT', value: 0},\n        {name: 'numTables', type: 'USHORT', value: isPlan0Only ? 1 : 2},\n\n        // CMAP 4 header\n        {name: 'platformID', type: 'USHORT', value: 3},\n        {name: 'encodingID', type: 'USHORT', value: 1},\n        {name: 'offset', type: 'ULONG', value: isPlan0Only ? 12 : (12 + 8)}\n    ];\n\n    if (!isPlan0Only)\n        { cmapTable = cmapTable.concat([\n            // CMAP 12 header\n            {name: 'cmap12PlatformID', type: 'USHORT', value: 3}, // We encode only for PlatformID = 3 (Windows) because it is supported everywhere\n            {name: 'cmap12EncodingID', type: 'USHORT', value: 10},\n            {name: 'cmap12Offset', type: 'ULONG', value: 0}\n        ]); }\n\n    cmapTable = cmapTable.concat([\n        // CMAP 4 Subtable\n        {name: 'format', type: 'USHORT', value: 4},\n        {name: 'cmap4Length', type: 'USHORT', value: 0},\n        {name: 'language', type: 'USHORT', value: 0},\n        {name: 'segCountX2', type: 'USHORT', value: 0},\n        {name: 'searchRange', type: 'USHORT', value: 0},\n        {name: 'entrySelector', type: 'USHORT', value: 0},\n        {name: 'rangeShift', type: 'USHORT', value: 0}\n    ]);\n\n    var t = new table.Table('cmap', cmapTable);\n\n    t.segments = [];\n    for (i = 0; i < glyphs.length; i += 1) {\n        var glyph = glyphs.get(i);\n        for (var j = 0; j < glyph.unicodes.length; j += 1) {\n            addSegment(t, glyph.unicodes[j], i);\n        }\n\n        t.segments = t.segments.sort(function (a, b) {\n            return a.start - b.start;\n        });\n    }\n\n    addTerminatorSegment(t);\n\n    var segCount = t.segments.length;\n    var segCountToRemove = 0;\n\n    // CMAP 4\n    // Set up parallel segment arrays.\n    var endCounts = [];\n    var startCounts = [];\n    var idDeltas = [];\n    var idRangeOffsets = [];\n    var glyphIds = [];\n\n    // CMAP 12\n    var cmap12Groups = [];\n\n    // Reminder this loop is not following the specification at 100%\n    // The specification -> find suites of characters and make a group\n    // Here we're doing one group for each letter\n    // Doing as the spec can save 8 times (or more) space\n    for (i = 0; i < segCount; i += 1) {\n        var segment = t.segments[i];\n\n        // CMAP 4\n        if (segment.end <= 65535 && segment.start <= 65535) {\n            endCounts = endCounts.concat({name: 'end_' + i, type: 'USHORT', value: segment.end});\n            startCounts = startCounts.concat({name: 'start_' + i, type: 'USHORT', value: segment.start});\n            idDeltas = idDeltas.concat({name: 'idDelta_' + i, type: 'SHORT', value: segment.delta});\n            idRangeOffsets = idRangeOffsets.concat({name: 'idRangeOffset_' + i, type: 'USHORT', value: segment.offset});\n            if (segment.glyphId !== undefined) {\n                glyphIds = glyphIds.concat({name: 'glyph_' + i, type: 'USHORT', value: segment.glyphId});\n            }\n        } else {\n            // Skip Unicode > 65535 (16bit unsigned max) for CMAP 4, will be added in CMAP 12\n            segCountToRemove += 1;\n        }\n\n        // CMAP 12\n        // Skip Terminator Segment\n        if (!isPlan0Only && segment.glyphIndex !== undefined) {\n            cmap12Groups = cmap12Groups.concat({name: 'cmap12Start_' + i, type: 'ULONG', value: segment.start});\n            cmap12Groups = cmap12Groups.concat({name: 'cmap12End_' + i, type: 'ULONG', value: segment.end});\n            cmap12Groups = cmap12Groups.concat({name: 'cmap12Glyph_' + i, type: 'ULONG', value: segment.glyphIndex});\n        }\n    }\n\n    // CMAP 4 Subtable\n    t.segCountX2 = (segCount - segCountToRemove) * 2;\n    t.searchRange = Math.pow(2, Math.floor(Math.log((segCount - segCountToRemove)) / Math.log(2))) * 2;\n    t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);\n    t.rangeShift = t.segCountX2 - t.searchRange;\n\n    t.fields = t.fields.concat(endCounts);\n    t.fields.push({name: 'reservedPad', type: 'USHORT', value: 0});\n    t.fields = t.fields.concat(startCounts);\n    t.fields = t.fields.concat(idDeltas);\n    t.fields = t.fields.concat(idRangeOffsets);\n    t.fields = t.fields.concat(glyphIds);\n\n    t.cmap4Length = 14 + // Subtable header\n        endCounts.length * 2 +\n        2 + // reservedPad\n        startCounts.length * 2 +\n        idDeltas.length * 2 +\n        idRangeOffsets.length * 2 +\n        glyphIds.length * 2;\n\n    if (!isPlan0Only) {\n        // CMAP 12 Subtable\n        var cmap12Length = 16 + // Subtable header\n            cmap12Groups.length * 4;\n\n        t.cmap12Offset = 12 + (2 * 2) + 4 + t.cmap4Length;\n        t.fields = t.fields.concat([\n            {name: 'cmap12Format', type: 'USHORT', value: 12},\n            {name: 'cmap12Reserved', type: 'USHORT', value: 0},\n            {name: 'cmap12Length', type: 'ULONG', value: cmap12Length},\n            {name: 'cmap12Language', type: 'ULONG', value: 0},\n            {name: 'cmap12nGroups', type: 'ULONG', value: cmap12Groups.length / 3}\n        ]);\n\n        t.fields = t.fields.concat(cmap12Groups);\n    }\n\n    return t;\n}\n\nvar cmap = { parse: parseCmapTable, make: makeCmapTable };\n\n// Glyph encoding\n\nvar cffStandardStrings = [\n    '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n    'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n    'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n    'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n    'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n    'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n    'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling',\n    'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft',\n    'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph',\n    'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand',\n    'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring',\n    'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE',\n    'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n    'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn',\n    'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n    'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex',\n    'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n    'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute',\n    'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute',\n    'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute',\n    'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave',\n    'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior',\n    'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', '266 ff', 'onedotenleader',\n    'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',\n    'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior',\n    'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n    'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl',\n    'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n    'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n    'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall',\n    'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',\n    'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall',\n    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds',\n    'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n    'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',\n    'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior',\n    'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',\n    'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',\n    'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall',\n    'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',\n    'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000',\n    '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'];\n\nvar cffStandardEncoding = [\n    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n    '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n    'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n    'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n    'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n    'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n    'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n    'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n    'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n    'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n    'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n    'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n    'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n    'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n    '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n    'lslash', 'oslash', 'oe', 'germandbls'];\n\nvar cffExpertEncoding = [\n    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n    '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n    'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n    'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n    'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n    'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n    'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n    'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n    'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n    'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n    'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n    'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n    'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n    '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n    '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n    'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n    'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n    'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n    'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n    'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n    'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n    'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n    'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\n\nvar standardNames = [\n    '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n    'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n    'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n    'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n    'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n    'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n    'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n    'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n    'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n    'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n    'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n    'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n    'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n    'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n    'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n    'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n    'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n    'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n    'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n    'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n    'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n    'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\n\n/**\n * This is the encoding used for fonts created from scratch.\n * It loops through all glyphs and finds the appropriate unicode value.\n * Since it's linear time, other encodings will be faster.\n * @exports opentype.DefaultEncoding\n * @class\n * @constructor\n * @param {opentype.Font}\n */\nfunction DefaultEncoding(font) {\n    this.font = font;\n}\n\nDefaultEncoding.prototype.charToGlyphIndex = function(c) {\n    var code = c.codePointAt(0);\n    var glyphs = this.font.glyphs;\n    if (glyphs) {\n        for (var i = 0; i < glyphs.length; i += 1) {\n            var glyph = glyphs.get(i);\n            for (var j = 0; j < glyph.unicodes.length; j += 1) {\n                if (glyph.unicodes[j] === code) {\n                    return i;\n                }\n            }\n        }\n    }\n    return null;\n};\n\n/**\n * @exports opentype.CmapEncoding\n * @class\n * @constructor\n * @param {Object} cmap - a object with the cmap encoded data\n */\nfunction CmapEncoding(cmap) {\n    this.cmap = cmap;\n}\n\n/**\n * @param  {string} c - the character\n * @return {number} The glyph index.\n */\nCmapEncoding.prototype.charToGlyphIndex = function(c) {\n    return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;\n};\n\n/**\n * @exports opentype.CffEncoding\n * @class\n * @constructor\n * @param {string} encoding - The encoding\n * @param {Array} charset - The character set.\n */\nfunction CffEncoding(encoding, charset) {\n    this.encoding = encoding;\n    this.charset = charset;\n}\n\n/**\n * @param  {string} s - The character\n * @return {number} The index.\n */\nCffEncoding.prototype.charToGlyphIndex = function(s) {\n    var code = s.codePointAt(0);\n    var charName = this.encoding[code];\n    return this.charset.indexOf(charName);\n};\n\n/**\n * @exports opentype.GlyphNames\n * @class\n * @constructor\n * @param {Object} post\n */\nfunction GlyphNames(post) {\n    switch (post.version) {\n        case 1:\n            this.names = standardNames.slice();\n            break;\n        case 2:\n            this.names = new Array(post.numberOfGlyphs);\n            for (var i = 0; i < post.numberOfGlyphs; i++) {\n                if (post.glyphNameIndex[i] < standardNames.length) {\n                    this.names[i] = standardNames[post.glyphNameIndex[i]];\n                } else {\n                    this.names[i] = post.names[post.glyphNameIndex[i] - standardNames.length];\n                }\n            }\n\n            break;\n        case 2.5:\n            this.names = new Array(post.numberOfGlyphs);\n            for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {\n                this.names[i$1] = standardNames[i$1 + post.glyphNameIndex[i$1]];\n            }\n\n            break;\n        case 3:\n            this.names = [];\n            break;\n        default:\n            this.names = [];\n            break;\n    }\n}\n\n/**\n * Gets the index of a glyph by name.\n * @param  {string} name - The glyph name\n * @return {number} The index\n */\nGlyphNames.prototype.nameToGlyphIndex = function(name) {\n    return this.names.indexOf(name);\n};\n\n/**\n * @param  {number} gid\n * @return {string}\n */\nGlyphNames.prototype.glyphIndexToName = function(gid) {\n    return this.names[gid];\n};\n\nfunction addGlyphNamesAll(font) {\n    var glyph;\n    var glyphIndexMap = font.tables.cmap.glyphIndexMap;\n    var charCodes = Object.keys(glyphIndexMap);\n\n    for (var i = 0; i < charCodes.length; i += 1) {\n        var c = charCodes[i];\n        var glyphIndex = glyphIndexMap[c];\n        glyph = font.glyphs.get(glyphIndex);\n        glyph.addUnicode(parseInt(c));\n    }\n\n    for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) {\n        glyph = font.glyphs.get(i$1);\n        if (font.cffEncoding) {\n            if (font.isCIDFont) {\n                glyph.name = 'gid' + i$1;\n            } else {\n                glyph.name = font.cffEncoding.charset[i$1];\n            }\n        } else if (font.glyphNames.names) {\n            glyph.name = font.glyphNames.glyphIndexToName(i$1);\n        }\n    }\n}\n\nfunction addGlyphNamesToUnicodeMap(font) {\n    font._IndexToUnicodeMap = {};\n\n    var glyphIndexMap = font.tables.cmap.glyphIndexMap;\n    var charCodes = Object.keys(glyphIndexMap);\n\n    for (var i = 0; i < charCodes.length; i += 1) {\n        var c = charCodes[i];\n        var glyphIndex = glyphIndexMap[c];\n        if (font._IndexToUnicodeMap[glyphIndex] === undefined) {\n            font._IndexToUnicodeMap[glyphIndex] = {\n                unicodes: [parseInt(c)]\n            };\n        } else {\n            font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));\n        }\n    }\n}\n\n/**\n * @alias opentype.addGlyphNames\n * @param {opentype.Font}\n * @param {Object}\n */\nfunction addGlyphNames(font, opt) {\n    if (opt.lowMemory) {\n        addGlyphNamesToUnicodeMap(font);\n    } else {\n        addGlyphNamesAll(font);\n    }\n}\n\n// Drawing utility functions.\n\n// Draw a line on the given context from point `x1,y1` to point `x2,y2`.\nfunction line(ctx, x1, y1, x2, y2) {\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n}\n\nvar draw = { line: line };\n\n// The Glyph object\n// import glyf from './tables/glyf' Can't be imported here, because it's a circular dependency\n\nfunction getPathDefinition(glyph, path) {\n    var _path = path || new Path();\n    return {\n        configurable: true,\n\n        get: function() {\n            if (typeof _path === 'function') {\n                _path = _path();\n            }\n\n            return _path;\n        },\n\n        set: function(p) {\n            _path = p;\n        }\n    };\n}\n/**\n * @typedef GlyphOptions\n * @type Object\n * @property {string} [name] - The glyph name\n * @property {number} [unicode]\n * @property {Array} [unicodes]\n * @property {number} [xMin]\n * @property {number} [yMin]\n * @property {number} [xMax]\n * @property {number} [yMax]\n * @property {number} [advanceWidth]\n */\n\n// A Glyph is an individual mark that often corresponds to a character.\n// Some glyphs, such as ligatures, are a combination of many characters.\n// Glyphs are the basic building blocks of a font.\n//\n// The `Glyph` class contains utility methods for drawing the path and its points.\n/**\n * @exports opentype.Glyph\n * @class\n * @param {GlyphOptions}\n * @constructor\n */\nfunction Glyph(options) {\n    // By putting all the code on a prototype function (which is only declared once)\n    // we reduce the memory requirements for larger fonts by some 2%\n    this.bindConstructorValues(options);\n}\n\n/**\n * @param  {GlyphOptions}\n */\nGlyph.prototype.bindConstructorValues = function(options) {\n    this.index = options.index || 0;\n\n    // These three values cannot be deferred for memory optimization:\n    this.name = options.name || null;\n    this.unicode = options.unicode || undefined;\n    this.unicodes = options.unicodes || options.unicode !== undefined ? [options.unicode] : [];\n\n    // But by binding these values only when necessary, we reduce can\n    // the memory requirements by almost 3% for larger fonts.\n    if ('xMin' in options) {\n        this.xMin = options.xMin;\n    }\n\n    if ('yMin' in options) {\n        this.yMin = options.yMin;\n    }\n\n    if ('xMax' in options) {\n        this.xMax = options.xMax;\n    }\n\n    if ('yMax' in options) {\n        this.yMax = options.yMax;\n    }\n\n    if ('advanceWidth' in options) {\n        this.advanceWidth = options.advanceWidth;\n    }\n\n    // The path for a glyph is the most memory intensive, and is bound as a value\n    // with a getter/setter to ensure we actually do path parsing only once the\n    // path is actually needed by anything.\n    Object.defineProperty(this, 'path', getPathDefinition(this, options.path));\n};\n\n/**\n * @param {number}\n */\nGlyph.prototype.addUnicode = function(unicode) {\n    if (this.unicodes.length === 0) {\n        this.unicode = unicode;\n    }\n\n    this.unicodes.push(unicode);\n};\n\n/**\n * Calculate the minimum bounding box for this glyph.\n * @return {opentype.BoundingBox}\n */\nGlyph.prototype.getBoundingBox = function() {\n    return this.path.getBoundingBox();\n};\n\n/**\n * Convert the glyph to a Path we can draw on a drawing context.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {Object=} options - xScale, yScale to stretch the glyph.\n * @param  {opentype.Font} if hinting is to be used, the font\n * @return {opentype.Path}\n */\nGlyph.prototype.getPath = function(x, y, fontSize, options, font) {\n    x = x !== undefined ? x : 0;\n    y = y !== undefined ? y : 0;\n    fontSize = fontSize !== undefined ? fontSize : 72;\n    var commands;\n    var hPoints;\n    if (!options) { options = { }; }\n    var xScale = options.xScale;\n    var yScale = options.yScale;\n\n    if (options.hinting && font && font.hinting) {\n        // in case of hinting, the hinting engine takes care\n        // of scaling the points (not the path) before hinting.\n        hPoints = this.path && font.hinting.exec(this, fontSize);\n        // in case the hinting engine failed hPoints is undefined\n        // and thus reverts to plain rending\n    }\n\n    if (hPoints) {\n        // Call font.hinting.getCommands instead of `glyf.getPath(hPoints).commands` to avoid a circular dependency\n        commands = font.hinting.getCommands(hPoints);\n        x = Math.round(x);\n        y = Math.round(y);\n        // TODO in case of hinting xyScaling is not yet supported\n        xScale = yScale = 1;\n    } else {\n        commands = this.path.commands;\n        var scale = 1 / (this.path.unitsPerEm || 1000) * fontSize;\n        if (xScale === undefined) { xScale = scale; }\n        if (yScale === undefined) { yScale = scale; }\n    }\n\n    var p = new Path();\n    for (var i = 0; i < commands.length; i += 1) {\n        var cmd = commands[i];\n        if (cmd.type === 'M') {\n            p.moveTo(x + (cmd.x * xScale), y + (-cmd.y * yScale));\n        } else if (cmd.type === 'L') {\n            p.lineTo(x + (cmd.x * xScale), y + (-cmd.y * yScale));\n        } else if (cmd.type === 'Q') {\n            p.quadraticCurveTo(x + (cmd.x1 * xScale), y + (-cmd.y1 * yScale),\n                               x + (cmd.x * xScale), y + (-cmd.y * yScale));\n        } else if (cmd.type === 'C') {\n            p.curveTo(x + (cmd.x1 * xScale), y + (-cmd.y1 * yScale),\n                      x + (cmd.x2 * xScale), y + (-cmd.y2 * yScale),\n                      x + (cmd.x * xScale), y + (-cmd.y * yScale));\n        } else if (cmd.type === 'Z') {\n            p.closePath();\n        }\n    }\n\n    return p;\n};\n\n/**\n * Split the glyph into contours.\n * This function is here for backwards compatibility, and to\n * provide raw access to the TrueType glyph outlines.\n * @return {Array}\n */\nGlyph.prototype.getContours = function() {\n    if (this.points === undefined) {\n        return [];\n    }\n\n    var contours = [];\n    var currentContour = [];\n    for (var i = 0; i < this.points.length; i += 1) {\n        var pt = this.points[i];\n        currentContour.push(pt);\n        if (pt.lastPointOfContour) {\n            contours.push(currentContour);\n            currentContour = [];\n        }\n    }\n\n    check.argument(currentContour.length === 0, 'There are still points left in the current contour.');\n    return contours;\n};\n\n/**\n * Calculate the xMin/yMin/xMax/yMax/lsb/rsb for a Glyph.\n * @return {Object}\n */\nGlyph.prototype.getMetrics = function() {\n    var commands = this.path.commands;\n    var xCoords = [];\n    var yCoords = [];\n    for (var i = 0; i < commands.length; i += 1) {\n        var cmd = commands[i];\n        if (cmd.type !== 'Z') {\n            xCoords.push(cmd.x);\n            yCoords.push(cmd.y);\n        }\n\n        if (cmd.type === 'Q' || cmd.type === 'C') {\n            xCoords.push(cmd.x1);\n            yCoords.push(cmd.y1);\n        }\n\n        if (cmd.type === 'C') {\n            xCoords.push(cmd.x2);\n            yCoords.push(cmd.y2);\n        }\n    }\n\n    var metrics = {\n        xMin: Math.min.apply(null, xCoords),\n        yMin: Math.min.apply(null, yCoords),\n        xMax: Math.max.apply(null, xCoords),\n        yMax: Math.max.apply(null, yCoords),\n        leftSideBearing: this.leftSideBearing\n    };\n\n    if (!isFinite(metrics.xMin)) {\n        metrics.xMin = 0;\n    }\n\n    if (!isFinite(metrics.xMax)) {\n        metrics.xMax = this.advanceWidth;\n    }\n\n    if (!isFinite(metrics.yMin)) {\n        metrics.yMin = 0;\n    }\n\n    if (!isFinite(metrics.yMax)) {\n        metrics.yMax = 0;\n    }\n\n    metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);\n    return metrics;\n};\n\n/**\n * Draw the glyph on the given context.\n * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {Object=} options - xScale, yScale to stretch the glyph.\n */\nGlyph.prototype.draw = function(ctx, x, y, fontSize, options) {\n    this.getPath(x, y, fontSize, options).draw(ctx);\n};\n\n/**\n * Draw the points of the glyph.\n * On-curve points will be drawn in blue, off-curve points will be drawn in red.\n * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n */\nGlyph.prototype.drawPoints = function(ctx, x, y, fontSize) {\n    function drawCircles(l, x, y, scale) {\n        ctx.beginPath();\n        for (var j = 0; j < l.length; j += 1) {\n            ctx.moveTo(x + (l[j].x * scale), y + (l[j].y * scale));\n            ctx.arc(x + (l[j].x * scale), y + (l[j].y * scale), 2, 0, Math.PI * 2, false);\n        }\n\n        ctx.closePath();\n        ctx.fill();\n    }\n\n    x = x !== undefined ? x : 0;\n    y = y !== undefined ? y : 0;\n    fontSize = fontSize !== undefined ? fontSize : 24;\n    var scale = 1 / this.path.unitsPerEm * fontSize;\n\n    var blueCircles = [];\n    var redCircles = [];\n    var path = this.path;\n    for (var i = 0; i < path.commands.length; i += 1) {\n        var cmd = path.commands[i];\n        if (cmd.x !== undefined) {\n            blueCircles.push({x: cmd.x, y: -cmd.y});\n        }\n\n        if (cmd.x1 !== undefined) {\n            redCircles.push({x: cmd.x1, y: -cmd.y1});\n        }\n\n        if (cmd.x2 !== undefined) {\n            redCircles.push({x: cmd.x2, y: -cmd.y2});\n        }\n    }\n\n    ctx.fillStyle = 'blue';\n    drawCircles(blueCircles, x, y, scale);\n    ctx.fillStyle = 'red';\n    drawCircles(redCircles, x, y, scale);\n};\n\n/**\n * Draw lines indicating important font measurements.\n * Black lines indicate the origin of the coordinate system (point 0,0).\n * Blue lines indicate the glyph bounding box.\n * Green line indicates the advance width of the glyph.\n * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n */\nGlyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {\n    var scale;\n    x = x !== undefined ? x : 0;\n    y = y !== undefined ? y : 0;\n    fontSize = fontSize !== undefined ? fontSize : 24;\n    scale = 1 / this.path.unitsPerEm * fontSize;\n    ctx.lineWidth = 1;\n\n    // Draw the origin\n    ctx.strokeStyle = 'black';\n    draw.line(ctx, x, -10000, x, 10000);\n    draw.line(ctx, -10000, y, 10000, y);\n\n    // This code is here due to memory optimization: by not using\n    // defaults in the constructor, we save a notable amount of memory.\n    var xMin = this.xMin || 0;\n    var yMin = this.yMin || 0;\n    var xMax = this.xMax || 0;\n    var yMax = this.yMax || 0;\n    var advanceWidth = this.advanceWidth || 0;\n\n    // Draw the glyph box\n    ctx.strokeStyle = 'blue';\n    draw.line(ctx, x + (xMin * scale), -10000, x + (xMin * scale), 10000);\n    draw.line(ctx, x + (xMax * scale), -10000, x + (xMax * scale), 10000);\n    draw.line(ctx, -10000, y + (-yMin * scale), 10000, y + (-yMin * scale));\n    draw.line(ctx, -10000, y + (-yMax * scale), 10000, y + (-yMax * scale));\n\n    // Draw the advance width\n    ctx.strokeStyle = 'green';\n    draw.line(ctx, x + (advanceWidth * scale), -10000, x + (advanceWidth * scale), 10000);\n};\n\n// The GlyphSet object\n\n// Define a property on the glyph that depends on the path being loaded.\nfunction defineDependentProperty(glyph, externalName, internalName) {\n    Object.defineProperty(glyph, externalName, {\n        get: function() {\n            // Request the path property to make sure the path is loaded.\n            glyph.path; // jshint ignore:line\n            return glyph[internalName];\n        },\n        set: function(newValue) {\n            glyph[internalName] = newValue;\n        },\n        enumerable: true,\n        configurable: true\n    });\n}\n\n/**\n * A GlyphSet represents all glyphs available in the font, but modelled using\n * a deferred glyph loader, for retrieving glyphs only once they are absolutely\n * necessary, to keep the memory footprint down.\n * @exports opentype.GlyphSet\n * @class\n * @param {opentype.Font}\n * @param {Array}\n */\nfunction GlyphSet(font, glyphs) {\n    this.font = font;\n    this.glyphs = {};\n    if (Array.isArray(glyphs)) {\n        for (var i = 0; i < glyphs.length; i++) {\n            var glyph = glyphs[i];\n            glyph.path.unitsPerEm = font.unitsPerEm;\n            this.glyphs[i] = glyph;\n        }\n    }\n\n    this.length = (glyphs && glyphs.length) || 0;\n}\n\n/**\n * @param  {number} index\n * @return {opentype.Glyph}\n */\nGlyphSet.prototype.get = function(index) {\n    // this.glyphs[index] is 'undefined' when low memory mode is on. glyph is pushed on request only.\n    if (this.glyphs[index] === undefined) {\n        this.font._push(index);\n        if (typeof this.glyphs[index] === 'function') {\n            this.glyphs[index] = this.glyphs[index]();\n        }\n\n        var glyph = this.glyphs[index];\n        var unicodeObj = this.font._IndexToUnicodeMap[index];\n\n        if (unicodeObj) {\n            for (var j = 0; j < unicodeObj.unicodes.length; j++)\n                { glyph.addUnicode(unicodeObj.unicodes[j]); }\n        }\n\n        if (this.font.cffEncoding) {\n            if (this.font.isCIDFont) {\n                glyph.name = 'gid' + index;\n            } else {\n                glyph.name = this.font.cffEncoding.charset[index];\n            }\n        } else if (this.font.glyphNames.names) {\n            glyph.name = this.font.glyphNames.glyphIndexToName(index);\n        }\n\n        this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;\n        this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;\n    } else {\n        if (typeof this.glyphs[index] === 'function') {\n            this.glyphs[index] = this.glyphs[index]();\n        }\n    }\n\n    return this.glyphs[index];\n};\n\n/**\n * @param  {number} index\n * @param  {Object}\n */\nGlyphSet.prototype.push = function(index, loader) {\n    this.glyphs[index] = loader;\n    this.length++;\n};\n\n/**\n * @alias opentype.glyphLoader\n * @param  {opentype.Font} font\n * @param  {number} index\n * @return {opentype.Glyph}\n */\nfunction glyphLoader(font, index) {\n    return new Glyph({index: index, font: font});\n}\n\n/**\n * Generate a stub glyph that can be filled with all metadata *except*\n * the \"points\" and \"path\" properties, which must be loaded only once\n * the glyph's path is actually requested for text shaping.\n * @alias opentype.ttfGlyphLoader\n * @param  {opentype.Font} font\n * @param  {number} index\n * @param  {Function} parseGlyph\n * @param  {Object} data\n * @param  {number} position\n * @param  {Function} buildPath\n * @return {opentype.Glyph}\n */\nfunction ttfGlyphLoader(font, index, parseGlyph, data, position, buildPath) {\n    return function() {\n        var glyph = new Glyph({index: index, font: font});\n\n        glyph.path = function() {\n            parseGlyph(glyph, data, position);\n            var path = buildPath(font.glyphs, glyph);\n            path.unitsPerEm = font.unitsPerEm;\n            return path;\n        };\n\n        defineDependentProperty(glyph, 'xMin', '_xMin');\n        defineDependentProperty(glyph, 'xMax', '_xMax');\n        defineDependentProperty(glyph, 'yMin', '_yMin');\n        defineDependentProperty(glyph, 'yMax', '_yMax');\n\n        return glyph;\n    };\n}\n/**\n * @alias opentype.cffGlyphLoader\n * @param  {opentype.Font} font\n * @param  {number} index\n * @param  {Function} parseCFFCharstring\n * @param  {string} charstring\n * @return {opentype.Glyph}\n */\nfunction cffGlyphLoader(font, index, parseCFFCharstring, charstring) {\n    return function() {\n        var glyph = new Glyph({index: index, font: font});\n\n        glyph.path = function() {\n            var path = parseCFFCharstring(font, glyph, charstring);\n            path.unitsPerEm = font.unitsPerEm;\n            return path;\n        };\n\n        return glyph;\n    };\n}\n\nvar glyphset = { GlyphSet: GlyphSet, glyphLoader: glyphLoader, ttfGlyphLoader: ttfGlyphLoader, cffGlyphLoader: cffGlyphLoader };\n\n// The `CFF` table contains the glyph outlines in PostScript format.\n\n// Custom equals function that can also check lists.\nfunction equals(a, b) {\n    if (a === b) {\n        return true;\n    } else if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return false;\n        }\n\n        for (var i = 0; i < a.length; i += 1) {\n            if (!equals(a[i], b[i])) {\n                return false;\n            }\n        }\n\n        return true;\n    } else {\n        return false;\n    }\n}\n\n// Subroutines are encoded using the negative half of the number space.\n// See type 2 chapter 4.7 \"Subroutine operators\".\nfunction calcCFFSubroutineBias(subrs) {\n    var bias;\n    if (subrs.length < 1240) {\n        bias = 107;\n    } else if (subrs.length < 33900) {\n        bias = 1131;\n    } else {\n        bias = 32768;\n    }\n\n    return bias;\n}\n\n// Parse a `CFF` INDEX array.\n// An index array consists of a list of offsets, then a list of objects at those offsets.\nfunction parseCFFIndex(data, start, conversionFn) {\n    var offsets = [];\n    var objects = [];\n    var count = parse.getCard16(data, start);\n    var objectOffset;\n    var endOffset;\n    if (count !== 0) {\n        var offsetSize = parse.getByte(data, start + 2);\n        objectOffset = start + ((count + 1) * offsetSize) + 2;\n        var pos = start + 3;\n        for (var i = 0; i < count + 1; i += 1) {\n            offsets.push(parse.getOffset(data, pos, offsetSize));\n            pos += offsetSize;\n        }\n\n        // The total size of the index array is 4 header bytes + the value of the last offset.\n        endOffset = objectOffset + offsets[count];\n    } else {\n        endOffset = start + 2;\n    }\n\n    for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) {\n        var value = parse.getBytes(data, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]);\n        if (conversionFn) {\n            value = conversionFn(value);\n        }\n\n        objects.push(value);\n    }\n\n    return {objects: objects, startOffset: start, endOffset: endOffset};\n}\n\nfunction parseCFFIndexLowMemory(data, start) {\n    var offsets = [];\n    var count = parse.getCard16(data, start);\n    var objectOffset;\n    var endOffset;\n    if (count !== 0) {\n        var offsetSize = parse.getByte(data, start + 2);\n        objectOffset = start + ((count + 1) * offsetSize) + 2;\n        var pos = start + 3;\n        for (var i = 0; i < count + 1; i += 1) {\n            offsets.push(parse.getOffset(data, pos, offsetSize));\n            pos += offsetSize;\n        }\n\n        // The total size of the index array is 4 header bytes + the value of the last offset.\n        endOffset = objectOffset + offsets[count];\n    } else {\n        endOffset = start + 2;\n    }\n\n    return {offsets: offsets, startOffset: start, endOffset: endOffset};\n}\nfunction getCffIndexObject(i, offsets, data, start, conversionFn) {\n    var count = parse.getCard16(data, start);\n    var objectOffset = 0;\n    if (count !== 0) {\n        var offsetSize = parse.getByte(data, start + 2);\n        objectOffset = start + ((count + 1) * offsetSize) + 2;\n    }\n\n    var value = parse.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n    if (conversionFn) {\n        value = conversionFn(value);\n    }\n    return value;\n}\n\n// Parse a `CFF` DICT real value.\nfunction parseFloatOperand(parser) {\n    var s = '';\n    var eof = 15;\n    var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\n    while (true) {\n        var b = parser.parseByte();\n        var n1 = b >> 4;\n        var n2 = b & 15;\n\n        if (n1 === eof) {\n            break;\n        }\n\n        s += lookup[n1];\n\n        if (n2 === eof) {\n            break;\n        }\n\n        s += lookup[n2];\n    }\n\n    return parseFloat(s);\n}\n\n// Parse a `CFF` DICT operand.\nfunction parseOperand(parser, b0) {\n    var b1;\n    var b2;\n    var b3;\n    var b4;\n    if (b0 === 28) {\n        b1 = parser.parseByte();\n        b2 = parser.parseByte();\n        return b1 << 8 | b2;\n    }\n\n    if (b0 === 29) {\n        b1 = parser.parseByte();\n        b2 = parser.parseByte();\n        b3 = parser.parseByte();\n        b4 = parser.parseByte();\n        return b1 << 24 | b2 << 16 | b3 << 8 | b4;\n    }\n\n    if (b0 === 30) {\n        return parseFloatOperand(parser);\n    }\n\n    if (b0 >= 32 && b0 <= 246) {\n        return b0 - 139;\n    }\n\n    if (b0 >= 247 && b0 <= 250) {\n        b1 = parser.parseByte();\n        return (b0 - 247) * 256 + b1 + 108;\n    }\n\n    if (b0 >= 251 && b0 <= 254) {\n        b1 = parser.parseByte();\n        return -(b0 - 251) * 256 - b1 - 108;\n    }\n\n    throw new Error('Invalid b0 ' + b0);\n}\n\n// Convert the entries returned by `parseDict` to a proper dictionary.\n// If a value is a list of one, it is unpacked.\nfunction entriesToObject(entries) {\n    var o = {};\n    for (var i = 0; i < entries.length; i += 1) {\n        var key = entries[i][0];\n        var values = entries[i][1];\n        var value = (void 0);\n        if (values.length === 1) {\n            value = values[0];\n        } else {\n            value = values;\n        }\n\n        if (o.hasOwnProperty(key) && !isNaN(o[key])) {\n            throw new Error('Object ' + o + ' already has key ' + key);\n        }\n\n        o[key] = value;\n    }\n\n    return o;\n}\n\n// Parse a `CFF` DICT object.\n// A dictionary contains key-value pairs in a compact tokenized format.\nfunction parseCFFDict(data, start, size) {\n    start = start !== undefined ? start : 0;\n    var parser = new parse.Parser(data, start);\n    var entries = [];\n    var operands = [];\n    size = size !== undefined ? size : data.length;\n\n    while (parser.relativeOffset < size) {\n        var op = parser.parseByte();\n\n        // The first byte for each dict item distinguishes between operator (key) and operand (value).\n        // Values <= 21 are operators.\n        if (op <= 21) {\n            // Two-byte operators have an initial escape byte of 12.\n            if (op === 12) {\n                op = 1200 + parser.parseByte();\n            }\n\n            entries.push([op, operands]);\n            operands = [];\n        } else {\n            // Since the operands (values) come before the operators (keys), we store all operands in a list\n            // until we encounter an operator.\n            operands.push(parseOperand(parser, op));\n        }\n    }\n\n    return entriesToObject(entries);\n}\n\n// Given a String Index (SID), return the value of the string.\n// Strings below index 392 are standard CFF strings and are not encoded in the font.\nfunction getCFFString(strings, index) {\n    if (index <= 390) {\n        index = cffStandardStrings[index];\n    } else {\n        index = strings[index - 391];\n    }\n\n    return index;\n}\n\n// Interpret a dictionary and return a new dictionary with readable keys and values for missing entries.\n// This function takes `meta` which is a list of objects containing `operand`, `name` and `default`.\nfunction interpretDict(dict, meta, strings) {\n    var newDict = {};\n    var value;\n\n    // Because we also want to include missing values, we start out from the meta list\n    // and lookup values in the dict.\n    for (var i = 0; i < meta.length; i += 1) {\n        var m = meta[i];\n\n        if (Array.isArray(m.type)) {\n            var values = [];\n            values.length = m.type.length;\n            for (var j = 0; j < m.type.length; j++) {\n                value = dict[m.op] !== undefined ? dict[m.op][j] : undefined;\n                if (value === undefined) {\n                    value = m.value !== undefined && m.value[j] !== undefined ? m.value[j] : null;\n                }\n                if (m.type[j] === 'SID') {\n                    value = getCFFString(strings, value);\n                }\n                values[j] = value;\n            }\n            newDict[m.name] = values;\n        } else {\n            value = dict[m.op];\n            if (value === undefined) {\n                value = m.value !== undefined ? m.value : null;\n            }\n\n            if (m.type === 'SID') {\n                value = getCFFString(strings, value);\n            }\n            newDict[m.name] = value;\n        }\n    }\n\n    return newDict;\n}\n\n// Parse the CFF header.\nfunction parseCFFHeader(data, start) {\n    var header = {};\n    header.formatMajor = parse.getCard8(data, start);\n    header.formatMinor = parse.getCard8(data, start + 1);\n    header.size = parse.getCard8(data, start + 2);\n    header.offsetSize = parse.getCard8(data, start + 3);\n    header.startOffset = start;\n    header.endOffset = start + 4;\n    return header;\n}\n\nvar TOP_DICT_META = [\n    {name: 'version', op: 0, type: 'SID'},\n    {name: 'notice', op: 1, type: 'SID'},\n    {name: 'copyright', op: 1200, type: 'SID'},\n    {name: 'fullName', op: 2, type: 'SID'},\n    {name: 'familyName', op: 3, type: 'SID'},\n    {name: 'weight', op: 4, type: 'SID'},\n    {name: 'isFixedPitch', op: 1201, type: 'number', value: 0},\n    {name: 'italicAngle', op: 1202, type: 'number', value: 0},\n    {name: 'underlinePosition', op: 1203, type: 'number', value: -100},\n    {name: 'underlineThickness', op: 1204, type: 'number', value: 50},\n    {name: 'paintType', op: 1205, type: 'number', value: 0},\n    {name: 'charstringType', op: 1206, type: 'number', value: 2},\n    {\n        name: 'fontMatrix',\n        op: 1207,\n        type: ['real', 'real', 'real', 'real', 'real', 'real'],\n        value: [0.001, 0, 0, 0.001, 0, 0]\n    },\n    {name: 'uniqueId', op: 13, type: 'number'},\n    {name: 'fontBBox', op: 5, type: ['number', 'number', 'number', 'number'], value: [0, 0, 0, 0]},\n    {name: 'strokeWidth', op: 1208, type: 'number', value: 0},\n    {name: 'xuid', op: 14, type: [], value: null},\n    {name: 'charset', op: 15, type: 'offset', value: 0},\n    {name: 'encoding', op: 16, type: 'offset', value: 0},\n    {name: 'charStrings', op: 17, type: 'offset', value: 0},\n    {name: 'private', op: 18, type: ['number', 'offset'], value: [0, 0]},\n    {name: 'ros', op: 1230, type: ['SID', 'SID', 'number']},\n    {name: 'cidFontVersion', op: 1231, type: 'number', value: 0},\n    {name: 'cidFontRevision', op: 1232, type: 'number', value: 0},\n    {name: 'cidFontType', op: 1233, type: 'number', value: 0},\n    {name: 'cidCount', op: 1234, type: 'number', value: 8720},\n    {name: 'uidBase', op: 1235, type: 'number'},\n    {name: 'fdArray', op: 1236, type: 'offset'},\n    {name: 'fdSelect', op: 1237, type: 'offset'},\n    {name: 'fontName', op: 1238, type: 'SID'}\n];\n\nvar PRIVATE_DICT_META = [\n    {name: 'subrs', op: 19, type: 'offset', value: 0},\n    {name: 'defaultWidthX', op: 20, type: 'number', value: 0},\n    {name: 'nominalWidthX', op: 21, type: 'number', value: 0}\n];\n\n// Parse the CFF top dictionary. A CFF table can contain multiple fonts, each with their own top dictionary.\n// The top dictionary contains the essential metadata for the font, together with the private dictionary.\nfunction parseCFFTopDict(data, strings) {\n    var dict = parseCFFDict(data, 0, data.byteLength);\n    return interpretDict(dict, TOP_DICT_META, strings);\n}\n\n// Parse the CFF private dictionary. We don't fully parse out all the values, only the ones we need.\nfunction parseCFFPrivateDict(data, start, size, strings) {\n    var dict = parseCFFDict(data, start, size);\n    return interpretDict(dict, PRIVATE_DICT_META, strings);\n}\n\n// Returns a list of \"Top DICT\"s found using an INDEX list.\n// Used to read both the usual high-level Top DICTs and also the FDArray\n// discovered inside CID-keyed fonts.  When a Top DICT has a reference to\n// a Private DICT that is read and saved into the Top DICT.\n//\n// In addition to the expected/optional values as outlined in TOP_DICT_META\n// the following values might be saved into the Top DICT.\n//\n//    _subrs []        array of local CFF subroutines from Private DICT\n//    _subrsBias       bias value computed from number of subroutines\n//                      (see calcCFFSubroutineBias() and parseCFFCharstring())\n//    _defaultWidthX   default widths for CFF characters\n//    _nominalWidthX   bias added to width embedded within glyph description\n//\n//    _privateDict     saved copy of parsed Private DICT from Top DICT\nfunction gatherCFFTopDicts(data, start, cffIndex, strings) {\n    var topDictArray = [];\n    for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {\n        var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);\n        var topDict = parseCFFTopDict(topDictData, strings);\n        topDict._subrs = [];\n        topDict._subrsBias = 0;\n        topDict._defaultWidthX = 0;\n        topDict._nominalWidthX = 0;\n        var privateSize = topDict.private[0];\n        var privateOffset = topDict.private[1];\n        if (privateSize !== 0 && privateOffset !== 0) {\n            var privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings);\n            topDict._defaultWidthX = privateDict.defaultWidthX;\n            topDict._nominalWidthX = privateDict.nominalWidthX;\n            if (privateDict.subrs !== 0) {\n                var subrOffset = privateOffset + privateDict.subrs;\n                var subrIndex = parseCFFIndex(data, subrOffset + start);\n                topDict._subrs = subrIndex.objects;\n                topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);\n            }\n            topDict._privateDict = privateDict;\n        }\n        topDictArray.push(topDict);\n    }\n    return topDictArray;\n}\n\n// Parse the CFF charset table, which contains internal names for all the glyphs.\n// This function will return a list of glyph names.\n// See Adobe TN #5176 chapter 13, \"Charsets\".\nfunction parseCFFCharset(data, start, nGlyphs, strings) {\n    var sid;\n    var count;\n    var parser = new parse.Parser(data, start);\n\n    // The .notdef glyph is not included, so subtract 1.\n    nGlyphs -= 1;\n    var charset = ['.notdef'];\n\n    var format = parser.parseCard8();\n    if (format === 0) {\n        for (var i = 0; i < nGlyphs; i += 1) {\n            sid = parser.parseSID();\n            charset.push(getCFFString(strings, sid));\n        }\n    } else if (format === 1) {\n        while (charset.length <= nGlyphs) {\n            sid = parser.parseSID();\n            count = parser.parseCard8();\n            for (var i$1 = 0; i$1 <= count; i$1 += 1) {\n                charset.push(getCFFString(strings, sid));\n                sid += 1;\n            }\n        }\n    } else if (format === 2) {\n        while (charset.length <= nGlyphs) {\n            sid = parser.parseSID();\n            count = parser.parseCard16();\n            for (var i$2 = 0; i$2 <= count; i$2 += 1) {\n                charset.push(getCFFString(strings, sid));\n                sid += 1;\n            }\n        }\n    } else {\n        throw new Error('Unknown charset format ' + format);\n    }\n\n    return charset;\n}\n\n// Parse the CFF encoding data. Only one encoding can be specified per font.\n// See Adobe TN #5176 chapter 12, \"Encodings\".\nfunction parseCFFEncoding(data, start, charset) {\n    var code;\n    var enc = {};\n    var parser = new parse.Parser(data, start);\n    var format = parser.parseCard8();\n    if (format === 0) {\n        var nCodes = parser.parseCard8();\n        for (var i = 0; i < nCodes; i += 1) {\n            code = parser.parseCard8();\n            enc[code] = i;\n        }\n    } else if (format === 1) {\n        var nRanges = parser.parseCard8();\n        code = 1;\n        for (var i$1 = 0; i$1 < nRanges; i$1 += 1) {\n            var first = parser.parseCard8();\n            var nLeft = parser.parseCard8();\n            for (var j = first; j <= first + nLeft; j += 1) {\n                enc[j] = code;\n                code += 1;\n            }\n        }\n    } else {\n        throw new Error('Unknown encoding format ' + format);\n    }\n\n    return new CffEncoding(enc, charset);\n}\n\n// Take in charstring code and return a Glyph object.\n// The encoding is described in the Type 2 Charstring Format\n// https://www.microsoft.com/typography/OTSPEC/charstr2.htm\nfunction parseCFFCharstring(font, glyph, code) {\n    var c1x;\n    var c1y;\n    var c2x;\n    var c2y;\n    var p = new Path();\n    var stack = [];\n    var nStems = 0;\n    var haveWidth = false;\n    var open = false;\n    var x = 0;\n    var y = 0;\n    var subrs;\n    var subrsBias;\n    var defaultWidthX;\n    var nominalWidthX;\n    if (font.isCIDFont) {\n        var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index];\n        var fdDict = font.tables.cff.topDict._fdArray[fdIndex];\n        subrs = fdDict._subrs;\n        subrsBias = fdDict._subrsBias;\n        defaultWidthX = fdDict._defaultWidthX;\n        nominalWidthX = fdDict._nominalWidthX;\n    } else {\n        subrs = font.tables.cff.topDict._subrs;\n        subrsBias = font.tables.cff.topDict._subrsBias;\n        defaultWidthX = font.tables.cff.topDict._defaultWidthX;\n        nominalWidthX = font.tables.cff.topDict._nominalWidthX;\n    }\n    var width = defaultWidthX;\n\n    function newContour(x, y) {\n        if (open) {\n            p.closePath();\n        }\n\n        p.moveTo(x, y);\n        open = true;\n    }\n\n    function parseStems() {\n        var hasWidthArg;\n\n        // The number of stem operators on the stack is always even.\n        // If the value is uneven, that means a width is specified.\n        hasWidthArg = stack.length % 2 !== 0;\n        if (hasWidthArg && !haveWidth) {\n            width = stack.shift() + nominalWidthX;\n        }\n\n        nStems += stack.length >> 1;\n        stack.length = 0;\n        haveWidth = true;\n    }\n\n    function parse(code) {\n        var b1;\n        var b2;\n        var b3;\n        var b4;\n        var codeIndex;\n        var subrCode;\n        var jpx;\n        var jpy;\n        var c3x;\n        var c3y;\n        var c4x;\n        var c4y;\n\n        var i = 0;\n        while (i < code.length) {\n            var v = code[i];\n            i += 1;\n            switch (v) {\n                case 1: // hstem\n                    parseStems();\n                    break;\n                case 3: // vstem\n                    parseStems();\n                    break;\n                case 4: // vmoveto\n                    if (stack.length > 1 && !haveWidth) {\n                        width = stack.shift() + nominalWidthX;\n                        haveWidth = true;\n                    }\n\n                    y += stack.pop();\n                    newContour(x, y);\n                    break;\n                case 5: // rlineto\n                    while (stack.length > 0) {\n                        x += stack.shift();\n                        y += stack.shift();\n                        p.lineTo(x, y);\n                    }\n\n                    break;\n                case 6: // hlineto\n                    while (stack.length > 0) {\n                        x += stack.shift();\n                        p.lineTo(x, y);\n                        if (stack.length === 0) {\n                            break;\n                        }\n\n                        y += stack.shift();\n                        p.lineTo(x, y);\n                    }\n\n                    break;\n                case 7: // vlineto\n                    while (stack.length > 0) {\n                        y += stack.shift();\n                        p.lineTo(x, y);\n                        if (stack.length === 0) {\n                            break;\n                        }\n\n                        x += stack.shift();\n                        p.lineTo(x, y);\n                    }\n\n                    break;\n                case 8: // rrcurveto\n                    while (stack.length > 0) {\n                        c1x = x + stack.shift();\n                        c1y = y + stack.shift();\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x + stack.shift();\n                        y = c2y + stack.shift();\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    break;\n                case 10: // callsubr\n                    codeIndex = stack.pop() + subrsBias;\n                    subrCode = subrs[codeIndex];\n                    if (subrCode) {\n                        parse(subrCode);\n                    }\n\n                    break;\n                case 11: // return\n                    return;\n                case 12: // flex operators\n                    v = code[i];\n                    i += 1;\n                    switch (v) {\n                        case 35: // flex\n                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 dx6 dy6 fd flex (12 35) |-\n                            c1x = x   + stack.shift();    // dx1\n                            c1y = y   + stack.shift();    // dy1\n                            c2x = c1x + stack.shift();    // dx2\n                            c2y = c1y + stack.shift();    // dy2\n                            jpx = c2x + stack.shift();    // dx3\n                            jpy = c2y + stack.shift();    // dy3\n                            c3x = jpx + stack.shift();    // dx4\n                            c3y = jpy + stack.shift();    // dy4\n                            c4x = c3x + stack.shift();    // dx5\n                            c4y = c3y + stack.shift();    // dy5\n                            x = c4x   + stack.shift();    // dx6\n                            y = c4y   + stack.shift();    // dy6\n                            stack.shift();                // flex depth\n                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n                            p.curveTo(c3x, c3y, c4x, c4y, x, y);\n                            break;\n                        case 34: // hflex\n                            // |- dx1 dx2 dy2 dx3 dx4 dx5 dx6 hflex (12 34) |-\n                            c1x = x   + stack.shift();    // dx1\n                            c1y = y;                      // dy1\n                            c2x = c1x + stack.shift();    // dx2\n                            c2y = c1y + stack.shift();    // dy2\n                            jpx = c2x + stack.shift();    // dx3\n                            jpy = c2y;                    // dy3\n                            c3x = jpx + stack.shift();    // dx4\n                            c3y = c2y;                    // dy4\n                            c4x = c3x + stack.shift();    // dx5\n                            c4y = y;                      // dy5\n                            x = c4x + stack.shift();      // dx6\n                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n                            p.curveTo(c3x, c3y, c4x, c4y, x, y);\n                            break;\n                        case 36: // hflex1\n                            // |- dx1 dy1 dx2 dy2 dx3 dx4 dx5 dy5 dx6 hflex1 (12 36) |-\n                            c1x = x   + stack.shift();    // dx1\n                            c1y = y   + stack.shift();    // dy1\n                            c2x = c1x + stack.shift();    // dx2\n                            c2y = c1y + stack.shift();    // dy2\n                            jpx = c2x + stack.shift();    // dx3\n                            jpy = c2y;                    // dy3\n                            c3x = jpx + stack.shift();    // dx4\n                            c3y = c2y;                    // dy4\n                            c4x = c3x + stack.shift();    // dx5\n                            c4y = c3y + stack.shift();    // dy5\n                            x = c4x + stack.shift();      // dx6\n                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n                            p.curveTo(c3x, c3y, c4x, c4y, x, y);\n                            break;\n                        case 37: // flex1\n                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 d6 flex1 (12 37) |-\n                            c1x = x   + stack.shift();    // dx1\n                            c1y = y   + stack.shift();    // dy1\n                            c2x = c1x + stack.shift();    // dx2\n                            c2y = c1y + stack.shift();    // dy2\n                            jpx = c2x + stack.shift();    // dx3\n                            jpy = c2y + stack.shift();    // dy3\n                            c3x = jpx + stack.shift();    // dx4\n                            c3y = jpy + stack.shift();    // dy4\n                            c4x = c3x + stack.shift();    // dx5\n                            c4y = c3y + stack.shift();    // dy5\n                            if (Math.abs(c4x - x) > Math.abs(c4y - y)) {\n                                x = c4x + stack.shift();\n                            } else {\n                                y = c4y + stack.shift();\n                            }\n\n                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n                            p.curveTo(c3x, c3y, c4x, c4y, x, y);\n                            break;\n                        default:\n                            console.log('Glyph ' + glyph.index + ': unknown operator ' + 1200 + v);\n                            stack.length = 0;\n                    }\n                    break;\n                case 14: // endchar\n                    if (stack.length > 0 && !haveWidth) {\n                        width = stack.shift() + nominalWidthX;\n                        haveWidth = true;\n                    }\n\n                    if (open) {\n                        p.closePath();\n                        open = false;\n                    }\n\n                    break;\n                case 18: // hstemhm\n                    parseStems();\n                    break;\n                case 19: // hintmask\n                case 20: // cntrmask\n                    parseStems();\n                    i += (nStems + 7) >> 3;\n                    break;\n                case 21: // rmoveto\n                    if (stack.length > 2 && !haveWidth) {\n                        width = stack.shift() + nominalWidthX;\n                        haveWidth = true;\n                    }\n\n                    y += stack.pop();\n                    x += stack.pop();\n                    newContour(x, y);\n                    break;\n                case 22: // hmoveto\n                    if (stack.length > 1 && !haveWidth) {\n                        width = stack.shift() + nominalWidthX;\n                        haveWidth = true;\n                    }\n\n                    x += stack.pop();\n                    newContour(x, y);\n                    break;\n                case 23: // vstemhm\n                    parseStems();\n                    break;\n                case 24: // rcurveline\n                    while (stack.length > 2) {\n                        c1x = x + stack.shift();\n                        c1y = y + stack.shift();\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x + stack.shift();\n                        y = c2y + stack.shift();\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    x += stack.shift();\n                    y += stack.shift();\n                    p.lineTo(x, y);\n                    break;\n                case 25: // rlinecurve\n                    while (stack.length > 6) {\n                        x += stack.shift();\n                        y += stack.shift();\n                        p.lineTo(x, y);\n                    }\n\n                    c1x = x + stack.shift();\n                    c1y = y + stack.shift();\n                    c2x = c1x + stack.shift();\n                    c2y = c1y + stack.shift();\n                    x = c2x + stack.shift();\n                    y = c2y + stack.shift();\n                    p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    break;\n                case 26: // vvcurveto\n                    if (stack.length % 2) {\n                        x += stack.shift();\n                    }\n\n                    while (stack.length > 0) {\n                        c1x = x;\n                        c1y = y + stack.shift();\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x;\n                        y = c2y + stack.shift();\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    break;\n                case 27: // hhcurveto\n                    if (stack.length % 2) {\n                        y += stack.shift();\n                    }\n\n                    while (stack.length > 0) {\n                        c1x = x + stack.shift();\n                        c1y = y;\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x + stack.shift();\n                        y = c2y;\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    break;\n                case 28: // shortint\n                    b1 = code[i];\n                    b2 = code[i + 1];\n                    stack.push(((b1 << 24) | (b2 << 16)) >> 16);\n                    i += 2;\n                    break;\n                case 29: // callgsubr\n                    codeIndex = stack.pop() + font.gsubrsBias;\n                    subrCode = font.gsubrs[codeIndex];\n                    if (subrCode) {\n                        parse(subrCode);\n                    }\n\n                    break;\n                case 30: // vhcurveto\n                    while (stack.length > 0) {\n                        c1x = x;\n                        c1y = y + stack.shift();\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x + stack.shift();\n                        y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                        if (stack.length === 0) {\n                            break;\n                        }\n\n                        c1x = x + stack.shift();\n                        c1y = y;\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        y = c2y + stack.shift();\n                        x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    break;\n                case 31: // hvcurveto\n                    while (stack.length > 0) {\n                        c1x = x + stack.shift();\n                        c1y = y;\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        y = c2y + stack.shift();\n                        x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                        if (stack.length === 0) {\n                            break;\n                        }\n\n                        c1x = x;\n                        c1y = y + stack.shift();\n                        c2x = c1x + stack.shift();\n                        c2y = c1y + stack.shift();\n                        x = c2x + stack.shift();\n                        y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                        p.curveTo(c1x, c1y, c2x, c2y, x, y);\n                    }\n\n                    break;\n                default:\n                    if (v < 32) {\n                        console.log('Glyph ' + glyph.index + ': unknown operator ' + v);\n                    } else if (v < 247) {\n                        stack.push(v - 139);\n                    } else if (v < 251) {\n                        b1 = code[i];\n                        i += 1;\n                        stack.push((v - 247) * 256 + b1 + 108);\n                    } else if (v < 255) {\n                        b1 = code[i];\n                        i += 1;\n                        stack.push(-(v - 251) * 256 - b1 - 108);\n                    } else {\n                        b1 = code[i];\n                        b2 = code[i + 1];\n                        b3 = code[i + 2];\n                        b4 = code[i + 3];\n                        i += 4;\n                        stack.push(((b1 << 24) | (b2 << 16) | (b3 << 8) | b4) / 65536);\n                    }\n            }\n        }\n    }\n\n    parse(code);\n\n    glyph.advanceWidth = width;\n    return p;\n}\n\nfunction parseCFFFDSelect(data, start, nGlyphs, fdArrayCount) {\n    var fdSelect = [];\n    var fdIndex;\n    var parser = new parse.Parser(data, start);\n    var format = parser.parseCard8();\n    if (format === 0) {\n        // Simple list of nGlyphs elements\n        for (var iGid = 0; iGid < nGlyphs; iGid++) {\n            fdIndex = parser.parseCard8();\n            if (fdIndex >= fdArrayCount) {\n                throw new Error('CFF table CID Font FDSelect has bad FD index value ' + fdIndex + ' (FD count ' + fdArrayCount + ')');\n            }\n            fdSelect.push(fdIndex);\n        }\n    } else if (format === 3) {\n        // Ranges\n        var nRanges = parser.parseCard16();\n        var first = parser.parseCard16();\n        if (first !== 0) {\n            throw new Error('CFF Table CID Font FDSelect format 3 range has bad initial GID ' + first);\n        }\n        var next;\n        for (var iRange = 0; iRange < nRanges; iRange++) {\n            fdIndex = parser.parseCard8();\n            next = parser.parseCard16();\n            if (fdIndex >= fdArrayCount) {\n                throw new Error('CFF table CID Font FDSelect has bad FD index value ' + fdIndex + ' (FD count ' + fdArrayCount + ')');\n            }\n            if (next > nGlyphs) {\n                throw new Error('CFF Table CID Font FDSelect format 3 range has bad GID ' + next);\n            }\n            for (; first < next; first++) {\n                fdSelect.push(fdIndex);\n            }\n            first = next;\n        }\n        if (next !== nGlyphs) {\n            throw new Error('CFF Table CID Font FDSelect format 3 range has bad final GID ' + next);\n        }\n    } else {\n        throw new Error('CFF Table CID Font FDSelect table has unsupported format ' + format);\n    }\n    return fdSelect;\n}\n\n// Parse the `CFF` table, which contains the glyph outlines in PostScript format.\nfunction parseCFFTable(data, start, font, opt) {\n    font.tables.cff = {};\n    var header = parseCFFHeader(data, start);\n    var nameIndex = parseCFFIndex(data, header.endOffset, parse.bytesToString);\n    var topDictIndex = parseCFFIndex(data, nameIndex.endOffset);\n    var stringIndex = parseCFFIndex(data, topDictIndex.endOffset, parse.bytesToString);\n    var globalSubrIndex = parseCFFIndex(data, stringIndex.endOffset);\n    font.gsubrs = globalSubrIndex.objects;\n    font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);\n\n    var topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects);\n    if (topDictArray.length !== 1) {\n        throw new Error('CFF table has too many fonts in \\'FontSet\\' - count of fonts NameIndex.length = ' + topDictArray.length);\n    }\n\n    var topDict = topDictArray[0];\n    font.tables.cff.topDict = topDict;\n\n    if (topDict._privateDict) {\n        font.defaultWidthX = topDict._privateDict.defaultWidthX;\n        font.nominalWidthX = topDict._privateDict.nominalWidthX;\n    }\n\n    if (topDict.ros[0] !== undefined && topDict.ros[1] !== undefined) {\n        font.isCIDFont = true;\n    }\n\n    if (font.isCIDFont) {\n        var fdArrayOffset = topDict.fdArray;\n        var fdSelectOffset = topDict.fdSelect;\n        if (fdArrayOffset === 0 || fdSelectOffset === 0) {\n            throw new Error('Font is marked as a CID font, but FDArray and/or FDSelect information is missing');\n        }\n        fdArrayOffset += start;\n        var fdArrayIndex = parseCFFIndex(data, fdArrayOffset);\n        var fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects);\n        topDict._fdArray = fdArray;\n        fdSelectOffset += start;\n        topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length);\n    }\n\n    var privateDictOffset = start + topDict.private[1];\n    var privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects);\n    font.defaultWidthX = privateDict.defaultWidthX;\n    font.nominalWidthX = privateDict.nominalWidthX;\n\n    if (privateDict.subrs !== 0) {\n        var subrOffset = privateDictOffset + privateDict.subrs;\n        var subrIndex = parseCFFIndex(data, subrOffset);\n        font.subrs = subrIndex.objects;\n        font.subrsBias = calcCFFSubroutineBias(font.subrs);\n    } else {\n        font.subrs = [];\n        font.subrsBias = 0;\n    }\n\n    // Offsets in the top dict are relative to the beginning of the CFF data, so add the CFF start offset.\n    var charStringsIndex;\n    if (opt.lowMemory) {\n        charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings);\n        font.nGlyphs = charStringsIndex.offsets.length;\n    } else {\n        charStringsIndex = parseCFFIndex(data, start + topDict.charStrings);\n        font.nGlyphs = charStringsIndex.objects.length;\n    }\n\n    var charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects);\n    if (topDict.encoding === 0) {\n        // Standard encoding\n        font.cffEncoding = new CffEncoding(cffStandardEncoding, charset);\n    } else if (topDict.encoding === 1) {\n        // Expert encoding\n        font.cffEncoding = new CffEncoding(cffExpertEncoding, charset);\n    } else {\n        font.cffEncoding = parseCFFEncoding(data, start + topDict.encoding, charset);\n    }\n\n    // Prefer the CMAP encoding to the CFF encoding.\n    font.encoding = font.encoding || font.cffEncoding;\n\n    font.glyphs = new glyphset.GlyphSet(font);\n    if (opt.lowMemory) {\n        font._push = function(i) {\n            var charString = getCffIndexObject(i, charStringsIndex.offsets, data, start + topDict.charStrings);\n            font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString));\n        };\n    } else {\n        for (var i = 0; i < font.nGlyphs; i += 1) {\n            var charString = charStringsIndex.objects[i];\n            font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString));\n        }\n    }\n}\n\n// Convert a string to a String ID (SID).\n// The list of strings is modified in place.\nfunction encodeString(s, strings) {\n    var sid;\n\n    // Is the string in the CFF standard strings?\n    var i = cffStandardStrings.indexOf(s);\n    if (i >= 0) {\n        sid = i;\n    }\n\n    // Is the string already in the string index?\n    i = strings.indexOf(s);\n    if (i >= 0) {\n        sid = i + cffStandardStrings.length;\n    } else {\n        sid = cffStandardStrings.length + strings.length;\n        strings.push(s);\n    }\n\n    return sid;\n}\n\nfunction makeHeader() {\n    return new table.Record('Header', [\n        {name: 'major', type: 'Card8', value: 1},\n        {name: 'minor', type: 'Card8', value: 0},\n        {name: 'hdrSize', type: 'Card8', value: 4},\n        {name: 'major', type: 'Card8', value: 1}\n    ]);\n}\n\nfunction makeNameIndex(fontNames) {\n    var t = new table.Record('Name INDEX', [\n        {name: 'names', type: 'INDEX', value: []}\n    ]);\n    t.names = [];\n    for (var i = 0; i < fontNames.length; i += 1) {\n        t.names.push({name: 'name_' + i, type: 'NAME', value: fontNames[i]});\n    }\n\n    return t;\n}\n\n// Given a dictionary's metadata, create a DICT structure.\nfunction makeDict(meta, attrs, strings) {\n    var m = {};\n    for (var i = 0; i < meta.length; i += 1) {\n        var entry = meta[i];\n        var value = attrs[entry.name];\n        if (value !== undefined && !equals(value, entry.value)) {\n            if (entry.type === 'SID') {\n                value = encodeString(value, strings);\n            }\n\n            m[entry.op] = {name: entry.name, type: entry.type, value: value};\n        }\n    }\n\n    return m;\n}\n\n// The Top DICT houses the global font attributes.\nfunction makeTopDict(attrs, strings) {\n    var t = new table.Record('Top DICT', [\n        {name: 'dict', type: 'DICT', value: {}}\n    ]);\n    t.dict = makeDict(TOP_DICT_META, attrs, strings);\n    return t;\n}\n\nfunction makeTopDictIndex(topDict) {\n    var t = new table.Record('Top DICT INDEX', [\n        {name: 'topDicts', type: 'INDEX', value: []}\n    ]);\n    t.topDicts = [{name: 'topDict_0', type: 'TABLE', value: topDict}];\n    return t;\n}\n\nfunction makeStringIndex(strings) {\n    var t = new table.Record('String INDEX', [\n        {name: 'strings', type: 'INDEX', value: []}\n    ]);\n    t.strings = [];\n    for (var i = 0; i < strings.length; i += 1) {\n        t.strings.push({name: 'string_' + i, type: 'STRING', value: strings[i]});\n    }\n\n    return t;\n}\n\nfunction makeGlobalSubrIndex() {\n    // Currently we don't use subroutines.\n    return new table.Record('Global Subr INDEX', [\n        {name: 'subrs', type: 'INDEX', value: []}\n    ]);\n}\n\nfunction makeCharsets(glyphNames, strings) {\n    var t = new table.Record('Charsets', [\n        {name: 'format', type: 'Card8', value: 0}\n    ]);\n    for (var i = 0; i < glyphNames.length; i += 1) {\n        var glyphName = glyphNames[i];\n        var glyphSID = encodeString(glyphName, strings);\n        t.fields.push({name: 'glyph_' + i, type: 'SID', value: glyphSID});\n    }\n\n    return t;\n}\n\nfunction glyphToOps(glyph) {\n    var ops = [];\n    var path = glyph.path;\n    ops.push({name: 'width', type: 'NUMBER', value: glyph.advanceWidth});\n    var x = 0;\n    var y = 0;\n    for (var i = 0; i < path.commands.length; i += 1) {\n        var dx = (void 0);\n        var dy = (void 0);\n        var cmd = path.commands[i];\n        if (cmd.type === 'Q') {\n            // CFF only supports bézier curves, so convert the quad to a bézier.\n            var _13 = 1 / 3;\n            var _23 = 2 / 3;\n\n            // We're going to create a new command so we don't change the original path.\n            // Since all coordinates are relative, we round() them ASAP to avoid propagating errors.\n            cmd = {\n                type: 'C',\n                x: cmd.x,\n                y: cmd.y,\n                x1: Math.round(_13 * x + _23 * cmd.x1),\n                y1: Math.round(_13 * y + _23 * cmd.y1),\n                x2: Math.round(_13 * cmd.x + _23 * cmd.x1),\n                y2: Math.round(_13 * cmd.y + _23 * cmd.y1)\n            };\n        }\n\n        if (cmd.type === 'M') {\n            dx = Math.round(cmd.x - x);\n            dy = Math.round(cmd.y - y);\n            ops.push({name: 'dx', type: 'NUMBER', value: dx});\n            ops.push({name: 'dy', type: 'NUMBER', value: dy});\n            ops.push({name: 'rmoveto', type: 'OP', value: 21});\n            x = Math.round(cmd.x);\n            y = Math.round(cmd.y);\n        } else if (cmd.type === 'L') {\n            dx = Math.round(cmd.x - x);\n            dy = Math.round(cmd.y - y);\n            ops.push({name: 'dx', type: 'NUMBER', value: dx});\n            ops.push({name: 'dy', type: 'NUMBER', value: dy});\n            ops.push({name: 'rlineto', type: 'OP', value: 5});\n            x = Math.round(cmd.x);\n            y = Math.round(cmd.y);\n        } else if (cmd.type === 'C') {\n            var dx1 = Math.round(cmd.x1 - x);\n            var dy1 = Math.round(cmd.y1 - y);\n            var dx2 = Math.round(cmd.x2 - cmd.x1);\n            var dy2 = Math.round(cmd.y2 - cmd.y1);\n            dx = Math.round(cmd.x - cmd.x2);\n            dy = Math.round(cmd.y - cmd.y2);\n            ops.push({name: 'dx1', type: 'NUMBER', value: dx1});\n            ops.push({name: 'dy1', type: 'NUMBER', value: dy1});\n            ops.push({name: 'dx2', type: 'NUMBER', value: dx2});\n            ops.push({name: 'dy2', type: 'NUMBER', value: dy2});\n            ops.push({name: 'dx', type: 'NUMBER', value: dx});\n            ops.push({name: 'dy', type: 'NUMBER', value: dy});\n            ops.push({name: 'rrcurveto', type: 'OP', value: 8});\n            x = Math.round(cmd.x);\n            y = Math.round(cmd.y);\n        }\n\n        // Contours are closed automatically.\n    }\n\n    ops.push({name: 'endchar', type: 'OP', value: 14});\n    return ops;\n}\n\nfunction makeCharStringsIndex(glyphs) {\n    var t = new table.Record('CharStrings INDEX', [\n        {name: 'charStrings', type: 'INDEX', value: []}\n    ]);\n\n    for (var i = 0; i < glyphs.length; i += 1) {\n        var glyph = glyphs.get(i);\n        var ops = glyphToOps(glyph);\n        t.charStrings.push({name: glyph.name, type: 'CHARSTRING', value: ops});\n    }\n\n    return t;\n}\n\nfunction makePrivateDict(attrs, strings) {\n    var t = new table.Record('Private DICT', [\n        {name: 'dict', type: 'DICT', value: {}}\n    ]);\n    t.dict = makeDict(PRIVATE_DICT_META, attrs, strings);\n    return t;\n}\n\nfunction makeCFFTable(glyphs, options) {\n    var t = new table.Table('CFF ', [\n        {name: 'header', type: 'RECORD'},\n        {name: 'nameIndex', type: 'RECORD'},\n        {name: 'topDictIndex', type: 'RECORD'},\n        {name: 'stringIndex', type: 'RECORD'},\n        {name: 'globalSubrIndex', type: 'RECORD'},\n        {name: 'charsets', type: 'RECORD'},\n        {name: 'charStringsIndex', type: 'RECORD'},\n        {name: 'privateDict', type: 'RECORD'}\n    ]);\n\n    var fontScale = 1 / options.unitsPerEm;\n    // We use non-zero values for the offsets so that the DICT encodes them.\n    // This is important because the size of the Top DICT plays a role in offset calculation,\n    // and the size shouldn't change after we've written correct offsets.\n    var attrs = {\n        version: options.version,\n        fullName: options.fullName,\n        familyName: options.familyName,\n        weight: options.weightName,\n        fontBBox: options.fontBBox || [0, 0, 0, 0],\n        fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],\n        charset: 999,\n        encoding: 0,\n        charStrings: 999,\n        private: [0, 999]\n    };\n\n    var privateAttrs = {};\n\n    var glyphNames = [];\n    var glyph;\n\n    // Skip first glyph (.notdef)\n    for (var i = 1; i < glyphs.length; i += 1) {\n        glyph = glyphs.get(i);\n        glyphNames.push(glyph.name);\n    }\n\n    var strings = [];\n\n    t.header = makeHeader();\n    t.nameIndex = makeNameIndex([options.postScriptName]);\n    var topDict = makeTopDict(attrs, strings);\n    t.topDictIndex = makeTopDictIndex(topDict);\n    t.globalSubrIndex = makeGlobalSubrIndex();\n    t.charsets = makeCharsets(glyphNames, strings);\n    t.charStringsIndex = makeCharStringsIndex(glyphs);\n    t.privateDict = makePrivateDict(privateAttrs, strings);\n\n    // Needs to come at the end, to encode all custom strings used in the font.\n    t.stringIndex = makeStringIndex(strings);\n\n    var startOffset = t.header.sizeOf() +\n        t.nameIndex.sizeOf() +\n        t.topDictIndex.sizeOf() +\n        t.stringIndex.sizeOf() +\n        t.globalSubrIndex.sizeOf();\n    attrs.charset = startOffset;\n\n    // We use the CFF standard encoding; proper encoding will be handled in cmap.\n    attrs.encoding = 0;\n    attrs.charStrings = attrs.charset + t.charsets.sizeOf();\n    attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();\n\n    // Recreate the Top DICT INDEX with the correct offsets.\n    topDict = makeTopDict(attrs, strings);\n    t.topDictIndex = makeTopDictIndex(topDict);\n\n    return t;\n}\n\nvar cff = { parse: parseCFFTable, make: makeCFFTable };\n\n// The `head` table contains global information about the font.\n\n// Parse the header `head` table\nfunction parseHeadTable(data, start) {\n    var head = {};\n    var p = new parse.Parser(data, start);\n    head.version = p.parseVersion();\n    head.fontRevision = Math.round(p.parseFixed() * 1000) / 1000;\n    head.checkSumAdjustment = p.parseULong();\n    head.magicNumber = p.parseULong();\n    check.argument(head.magicNumber === 0x5F0F3CF5, 'Font header has wrong magic number.');\n    head.flags = p.parseUShort();\n    head.unitsPerEm = p.parseUShort();\n    head.created = p.parseLongDateTime();\n    head.modified = p.parseLongDateTime();\n    head.xMin = p.parseShort();\n    head.yMin = p.parseShort();\n    head.xMax = p.parseShort();\n    head.yMax = p.parseShort();\n    head.macStyle = p.parseUShort();\n    head.lowestRecPPEM = p.parseUShort();\n    head.fontDirectionHint = p.parseShort();\n    head.indexToLocFormat = p.parseShort();\n    head.glyphDataFormat = p.parseShort();\n    return head;\n}\n\nfunction makeHeadTable(options) {\n    // Apple Mac timestamp epoch is 01/01/1904 not 01/01/1970\n    var timestamp = Math.round(new Date().getTime() / 1000) + 2082844800;\n    var createdTimestamp = timestamp;\n\n    if (options.createdTimestamp) {\n        createdTimestamp = options.createdTimestamp + 2082844800;\n    }\n\n    return new table.Table('head', [\n        {name: 'version', type: 'FIXED', value: 0x00010000},\n        {name: 'fontRevision', type: 'FIXED', value: 0x00010000},\n        {name: 'checkSumAdjustment', type: 'ULONG', value: 0},\n        {name: 'magicNumber', type: 'ULONG', value: 0x5F0F3CF5},\n        {name: 'flags', type: 'USHORT', value: 0},\n        {name: 'unitsPerEm', type: 'USHORT', value: 1000},\n        {name: 'created', type: 'LONGDATETIME', value: createdTimestamp},\n        {name: 'modified', type: 'LONGDATETIME', value: timestamp},\n        {name: 'xMin', type: 'SHORT', value: 0},\n        {name: 'yMin', type: 'SHORT', value: 0},\n        {name: 'xMax', type: 'SHORT', value: 0},\n        {name: 'yMax', type: 'SHORT', value: 0},\n        {name: 'macStyle', type: 'USHORT', value: 0},\n        {name: 'lowestRecPPEM', type: 'USHORT', value: 0},\n        {name: 'fontDirectionHint', type: 'SHORT', value: 2},\n        {name: 'indexToLocFormat', type: 'SHORT', value: 0},\n        {name: 'glyphDataFormat', type: 'SHORT', value: 0}\n    ], options);\n}\n\nvar head = { parse: parseHeadTable, make: makeHeadTable };\n\n// The `hhea` table contains information for horizontal layout.\n\n// Parse the horizontal header `hhea` table\nfunction parseHheaTable(data, start) {\n    var hhea = {};\n    var p = new parse.Parser(data, start);\n    hhea.version = p.parseVersion();\n    hhea.ascender = p.parseShort();\n    hhea.descender = p.parseShort();\n    hhea.lineGap = p.parseShort();\n    hhea.advanceWidthMax = p.parseUShort();\n    hhea.minLeftSideBearing = p.parseShort();\n    hhea.minRightSideBearing = p.parseShort();\n    hhea.xMaxExtent = p.parseShort();\n    hhea.caretSlopeRise = p.parseShort();\n    hhea.caretSlopeRun = p.parseShort();\n    hhea.caretOffset = p.parseShort();\n    p.relativeOffset += 8;\n    hhea.metricDataFormat = p.parseShort();\n    hhea.numberOfHMetrics = p.parseUShort();\n    return hhea;\n}\n\nfunction makeHheaTable(options) {\n    return new table.Table('hhea', [\n        {name: 'version', type: 'FIXED', value: 0x00010000},\n        {name: 'ascender', type: 'FWORD', value: 0},\n        {name: 'descender', type: 'FWORD', value: 0},\n        {name: 'lineGap', type: 'FWORD', value: 0},\n        {name: 'advanceWidthMax', type: 'UFWORD', value: 0},\n        {name: 'minLeftSideBearing', type: 'FWORD', value: 0},\n        {name: 'minRightSideBearing', type: 'FWORD', value: 0},\n        {name: 'xMaxExtent', type: 'FWORD', value: 0},\n        {name: 'caretSlopeRise', type: 'SHORT', value: 1},\n        {name: 'caretSlopeRun', type: 'SHORT', value: 0},\n        {name: 'caretOffset', type: 'SHORT', value: 0},\n        {name: 'reserved1', type: 'SHORT', value: 0},\n        {name: 'reserved2', type: 'SHORT', value: 0},\n        {name: 'reserved3', type: 'SHORT', value: 0},\n        {name: 'reserved4', type: 'SHORT', value: 0},\n        {name: 'metricDataFormat', type: 'SHORT', value: 0},\n        {name: 'numberOfHMetrics', type: 'USHORT', value: 0}\n    ], options);\n}\n\nvar hhea = { parse: parseHheaTable, make: makeHheaTable };\n\n// The `hmtx` table contains the horizontal metrics for all glyphs.\n\nfunction parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {\n    var advanceWidth;\n    var leftSideBearing;\n    var p = new parse.Parser(data, start);\n    for (var i = 0; i < numGlyphs; i += 1) {\n        // If the font is monospaced, only one entry is needed. This last entry applies to all subsequent glyphs.\n        if (i < numMetrics) {\n            advanceWidth = p.parseUShort();\n            leftSideBearing = p.parseShort();\n        }\n\n        var glyph = glyphs.get(i);\n        glyph.advanceWidth = advanceWidth;\n        glyph.leftSideBearing = leftSideBearing;\n    }\n}\n\nfunction parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {\n    font._hmtxTableData = {};\n\n    var advanceWidth;\n    var leftSideBearing;\n    var p = new parse.Parser(data, start);\n    for (var i = 0; i < numGlyphs; i += 1) {\n        // If the font is monospaced, only one entry is needed. This last entry applies to all subsequent glyphs.\n        if (i < numMetrics) {\n            advanceWidth = p.parseUShort();\n            leftSideBearing = p.parseShort();\n        }\n\n        font._hmtxTableData[i] = {\n            advanceWidth: advanceWidth,\n            leftSideBearing: leftSideBearing\n        };\n    }\n}\n\n// Parse the `hmtx` table, which contains the horizontal metrics for all glyphs.\n// This function augments the glyph array, adding the advanceWidth and leftSideBearing to each glyph.\nfunction parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {\n    if (opt.lowMemory)\n        { parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs); }\n    else\n        { parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs); }\n}\n\nfunction makeHmtxTable(glyphs) {\n    var t = new table.Table('hmtx', []);\n    for (var i = 0; i < glyphs.length; i += 1) {\n        var glyph = glyphs.get(i);\n        var advanceWidth = glyph.advanceWidth || 0;\n        var leftSideBearing = glyph.leftSideBearing || 0;\n        t.fields.push({name: 'advanceWidth_' + i, type: 'USHORT', value: advanceWidth});\n        t.fields.push({name: 'leftSideBearing_' + i, type: 'SHORT', value: leftSideBearing});\n    }\n\n    return t;\n}\n\nvar hmtx = { parse: parseHmtxTable, make: makeHmtxTable };\n\n// The `ltag` table stores IETF BCP-47 language tags. It allows supporting\n\nfunction makeLtagTable(tags) {\n    var result = new table.Table('ltag', [\n        {name: 'version', type: 'ULONG', value: 1},\n        {name: 'flags', type: 'ULONG', value: 0},\n        {name: 'numTags', type: 'ULONG', value: tags.length}\n    ]);\n\n    var stringPool = '';\n    var stringPoolOffset = 12 + tags.length * 4;\n    for (var i = 0; i < tags.length; ++i) {\n        var pos = stringPool.indexOf(tags[i]);\n        if (pos < 0) {\n            pos = stringPool.length;\n            stringPool += tags[i];\n        }\n\n        result.fields.push({name: 'offset ' + i, type: 'USHORT', value: stringPoolOffset + pos});\n        result.fields.push({name: 'length ' + i, type: 'USHORT', value: tags[i].length});\n    }\n\n    result.fields.push({name: 'stringPool', type: 'CHARARRAY', value: stringPool});\n    return result;\n}\n\nfunction parseLtagTable(data, start) {\n    var p = new parse.Parser(data, start);\n    var tableVersion = p.parseULong();\n    check.argument(tableVersion === 1, 'Unsupported ltag table version.');\n    // The 'ltag' specification does not define any flags; skip the field.\n    p.skip('uLong', 1);\n    var numTags = p.parseULong();\n\n    var tags = [];\n    for (var i = 0; i < numTags; i++) {\n        var tag = '';\n        var offset = start + p.parseUShort();\n        var length = p.parseUShort();\n        for (var j = offset; j < offset + length; ++j) {\n            tag += String.fromCharCode(data.getInt8(j));\n        }\n\n        tags.push(tag);\n    }\n\n    return tags;\n}\n\nvar ltag = { make: makeLtagTable, parse: parseLtagTable };\n\n// The `maxp` table establishes the memory requirements for the font.\n\n// Parse the maximum profile `maxp` table.\nfunction parseMaxpTable(data, start) {\n    var maxp = {};\n    var p = new parse.Parser(data, start);\n    maxp.version = p.parseVersion();\n    maxp.numGlyphs = p.parseUShort();\n    if (maxp.version === 1.0) {\n        maxp.maxPoints = p.parseUShort();\n        maxp.maxContours = p.parseUShort();\n        maxp.maxCompositePoints = p.parseUShort();\n        maxp.maxCompositeContours = p.parseUShort();\n        maxp.maxZones = p.parseUShort();\n        maxp.maxTwilightPoints = p.parseUShort();\n        maxp.maxStorage = p.parseUShort();\n        maxp.maxFunctionDefs = p.parseUShort();\n        maxp.maxInstructionDefs = p.parseUShort();\n        maxp.maxStackElements = p.parseUShort();\n        maxp.maxSizeOfInstructions = p.parseUShort();\n        maxp.maxComponentElements = p.parseUShort();\n        maxp.maxComponentDepth = p.parseUShort();\n    }\n\n    return maxp;\n}\n\nfunction makeMaxpTable(numGlyphs) {\n    return new table.Table('maxp', [\n        {name: 'version', type: 'FIXED', value: 0x00005000},\n        {name: 'numGlyphs', type: 'USHORT', value: numGlyphs}\n    ]);\n}\n\nvar maxp = { parse: parseMaxpTable, make: makeMaxpTable };\n\n// The `name` naming table.\n\n// NameIDs for the name table.\nvar nameTableNames = [\n    'copyright',              // 0\n    'fontFamily',             // 1\n    'fontSubfamily',          // 2\n    'uniqueID',               // 3\n    'fullName',               // 4\n    'version',                // 5\n    'postScriptName',         // 6\n    'trademark',              // 7\n    'manufacturer',           // 8\n    'designer',               // 9\n    'description',            // 10\n    'manufacturerURL',        // 11\n    'designerURL',            // 12\n    'license',                // 13\n    'licenseURL',             // 14\n    'reserved',               // 15\n    'preferredFamily',        // 16\n    'preferredSubfamily',     // 17\n    'compatibleFullName',     // 18\n    'sampleText',             // 19\n    'postScriptFindFontName', // 20\n    'wwsFamily',              // 21\n    'wwsSubfamily'            // 22\n];\n\nvar macLanguages = {\n    0: 'en',\n    1: 'fr',\n    2: 'de',\n    3: 'it',\n    4: 'nl',\n    5: 'sv',\n    6: 'es',\n    7: 'da',\n    8: 'pt',\n    9: 'no',\n    10: 'he',\n    11: 'ja',\n    12: 'ar',\n    13: 'fi',\n    14: 'el',\n    15: 'is',\n    16: 'mt',\n    17: 'tr',\n    18: 'hr',\n    19: 'zh-Hant',\n    20: 'ur',\n    21: 'hi',\n    22: 'th',\n    23: 'ko',\n    24: 'lt',\n    25: 'pl',\n    26: 'hu',\n    27: 'es',\n    28: 'lv',\n    29: 'se',\n    30: 'fo',\n    31: 'fa',\n    32: 'ru',\n    33: 'zh',\n    34: 'nl-BE',\n    35: 'ga',\n    36: 'sq',\n    37: 'ro',\n    38: 'cz',\n    39: 'sk',\n    40: 'si',\n    41: 'yi',\n    42: 'sr',\n    43: 'mk',\n    44: 'bg',\n    45: 'uk',\n    46: 'be',\n    47: 'uz',\n    48: 'kk',\n    49: 'az-Cyrl',\n    50: 'az-Arab',\n    51: 'hy',\n    52: 'ka',\n    53: 'mo',\n    54: 'ky',\n    55: 'tg',\n    56: 'tk',\n    57: 'mn-CN',\n    58: 'mn',\n    59: 'ps',\n    60: 'ks',\n    61: 'ku',\n    62: 'sd',\n    63: 'bo',\n    64: 'ne',\n    65: 'sa',\n    66: 'mr',\n    67: 'bn',\n    68: 'as',\n    69: 'gu',\n    70: 'pa',\n    71: 'or',\n    72: 'ml',\n    73: 'kn',\n    74: 'ta',\n    75: 'te',\n    76: 'si',\n    77: 'my',\n    78: 'km',\n    79: 'lo',\n    80: 'vi',\n    81: 'id',\n    82: 'tl',\n    83: 'ms',\n    84: 'ms-Arab',\n    85: 'am',\n    86: 'ti',\n    87: 'om',\n    88: 'so',\n    89: 'sw',\n    90: 'rw',\n    91: 'rn',\n    92: 'ny',\n    93: 'mg',\n    94: 'eo',\n    128: 'cy',\n    129: 'eu',\n    130: 'ca',\n    131: 'la',\n    132: 'qu',\n    133: 'gn',\n    134: 'ay',\n    135: 'tt',\n    136: 'ug',\n    137: 'dz',\n    138: 'jv',\n    139: 'su',\n    140: 'gl',\n    141: 'af',\n    142: 'br',\n    143: 'iu',\n    144: 'gd',\n    145: 'gv',\n    146: 'ga',\n    147: 'to',\n    148: 'el-polyton',\n    149: 'kl',\n    150: 'az',\n    151: 'nn'\n};\n\n// MacOS language ID → MacOS script ID\n//\n// Note that the script ID is not sufficient to determine what encoding\n// to use in TrueType files. For some languages, MacOS used a modification\n// of a mainstream script. For example, an Icelandic name would be stored\n// with smRoman in the TrueType naming table, but the actual encoding\n// is a special Icelandic version of the normal Macintosh Roman encoding.\n// As another example, Inuktitut uses an 8-bit encoding for Canadian Aboriginal\n// Syllables but MacOS had run out of available script codes, so this was\n// done as a (pretty radical) \"modification\" of Ethiopic.\n//\n// http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nvar macLanguageToScript = {\n    0: 0,  // langEnglish → smRoman\n    1: 0,  // langFrench → smRoman\n    2: 0,  // langGerman → smRoman\n    3: 0,  // langItalian → smRoman\n    4: 0,  // langDutch → smRoman\n    5: 0,  // langSwedish → smRoman\n    6: 0,  // langSpanish → smRoman\n    7: 0,  // langDanish → smRoman\n    8: 0,  // langPortuguese → smRoman\n    9: 0,  // langNorwegian → smRoman\n    10: 5,  // langHebrew → smHebrew\n    11: 1,  // langJapanese → smJapanese\n    12: 4,  // langArabic → smArabic\n    13: 0,  // langFinnish → smRoman\n    14: 6,  // langGreek → smGreek\n    15: 0,  // langIcelandic → smRoman (modified)\n    16: 0,  // langMaltese → smRoman\n    17: 0,  // langTurkish → smRoman (modified)\n    18: 0,  // langCroatian → smRoman (modified)\n    19: 2,  // langTradChinese → smTradChinese\n    20: 4,  // langUrdu → smArabic\n    21: 9,  // langHindi → smDevanagari\n    22: 21,  // langThai → smThai\n    23: 3,  // langKorean → smKorean\n    24: 29,  // langLithuanian → smCentralEuroRoman\n    25: 29,  // langPolish → smCentralEuroRoman\n    26: 29,  // langHungarian → smCentralEuroRoman\n    27: 29,  // langEstonian → smCentralEuroRoman\n    28: 29,  // langLatvian → smCentralEuroRoman\n    29: 0,  // langSami → smRoman\n    30: 0,  // langFaroese → smRoman (modified)\n    31: 4,  // langFarsi → smArabic (modified)\n    32: 7,  // langRussian → smCyrillic\n    33: 25,  // langSimpChinese → smSimpChinese\n    34: 0,  // langFlemish → smRoman\n    35: 0,  // langIrishGaelic → smRoman (modified)\n    36: 0,  // langAlbanian → smRoman\n    37: 0,  // langRomanian → smRoman (modified)\n    38: 29,  // langCzech → smCentralEuroRoman\n    39: 29,  // langSlovak → smCentralEuroRoman\n    40: 0,  // langSlovenian → smRoman (modified)\n    41: 5,  // langYiddish → smHebrew\n    42: 7,  // langSerbian → smCyrillic\n    43: 7,  // langMacedonian → smCyrillic\n    44: 7,  // langBulgarian → smCyrillic\n    45: 7,  // langUkrainian → smCyrillic (modified)\n    46: 7,  // langByelorussian → smCyrillic\n    47: 7,  // langUzbek → smCyrillic\n    48: 7,  // langKazakh → smCyrillic\n    49: 7,  // langAzerbaijani → smCyrillic\n    50: 4,  // langAzerbaijanAr → smArabic\n    51: 24,  // langArmenian → smArmenian\n    52: 23,  // langGeorgian → smGeorgian\n    53: 7,  // langMoldavian → smCyrillic\n    54: 7,  // langKirghiz → smCyrillic\n    55: 7,  // langTajiki → smCyrillic\n    56: 7,  // langTurkmen → smCyrillic\n    57: 27,  // langMongolian → smMongolian\n    58: 7,  // langMongolianCyr → smCyrillic\n    59: 4,  // langPashto → smArabic\n    60: 4,  // langKurdish → smArabic\n    61: 4,  // langKashmiri → smArabic\n    62: 4,  // langSindhi → smArabic\n    63: 26,  // langTibetan → smTibetan\n    64: 9,  // langNepali → smDevanagari\n    65: 9,  // langSanskrit → smDevanagari\n    66: 9,  // langMarathi → smDevanagari\n    67: 13,  // langBengali → smBengali\n    68: 13,  // langAssamese → smBengali\n    69: 11,  // langGujarati → smGujarati\n    70: 10,  // langPunjabi → smGurmukhi\n    71: 12,  // langOriya → smOriya\n    72: 17,  // langMalayalam → smMalayalam\n    73: 16,  // langKannada → smKannada\n    74: 14,  // langTamil → smTamil\n    75: 15,  // langTelugu → smTelugu\n    76: 18,  // langSinhalese → smSinhalese\n    77: 19,  // langBurmese → smBurmese\n    78: 20,  // langKhmer → smKhmer\n    79: 22,  // langLao → smLao\n    80: 30,  // langVietnamese → smVietnamese\n    81: 0,  // langIndonesian → smRoman\n    82: 0,  // langTagalog → smRoman\n    83: 0,  // langMalayRoman → smRoman\n    84: 4,  // langMalayArabic → smArabic\n    85: 28,  // langAmharic → smEthiopic\n    86: 28,  // langTigrinya → smEthiopic\n    87: 28,  // langOromo → smEthiopic\n    88: 0,  // langSomali → smRoman\n    89: 0,  // langSwahili → smRoman\n    90: 0,  // langKinyarwanda → smRoman\n    91: 0,  // langRundi → smRoman\n    92: 0,  // langNyanja → smRoman\n    93: 0,  // langMalagasy → smRoman\n    94: 0,  // langEsperanto → smRoman\n    128: 0,  // langWelsh → smRoman (modified)\n    129: 0,  // langBasque → smRoman\n    130: 0,  // langCatalan → smRoman\n    131: 0,  // langLatin → smRoman\n    132: 0,  // langQuechua → smRoman\n    133: 0,  // langGuarani → smRoman\n    134: 0,  // langAymara → smRoman\n    135: 7,  // langTatar → smCyrillic\n    136: 4,  // langUighur → smArabic\n    137: 26,  // langDzongkha → smTibetan\n    138: 0,  // langJavaneseRom → smRoman\n    139: 0,  // langSundaneseRom → smRoman\n    140: 0,  // langGalician → smRoman\n    141: 0,  // langAfrikaans → smRoman\n    142: 0,  // langBreton → smRoman (modified)\n    143: 28,  // langInuktitut → smEthiopic (modified)\n    144: 0,  // langScottishGaelic → smRoman (modified)\n    145: 0,  // langManxGaelic → smRoman (modified)\n    146: 0,  // langIrishGaelicScript → smRoman (modified)\n    147: 0,  // langTongan → smRoman\n    148: 6,  // langGreekAncient → smRoman\n    149: 0,  // langGreenlandic → smRoman\n    150: 0,  // langAzerbaijanRoman → smRoman\n    151: 0   // langNynorsk → smRoman\n};\n\n// While Microsoft indicates a region/country for all its language\n// IDs, we omit the region code if it's equal to the \"most likely\n// region subtag\" according to Unicode CLDR. For scripts, we omit\n// the subtag if it is equal to the Suppress-Script entry in the\n// IANA language subtag registry for IETF BCP 47.\n//\n// For example, Microsoft states that its language code 0x041A is\n// Croatian in Croatia. We transform this to the BCP 47 language code 'hr'\n// and not 'hr-HR' because Croatia is the default country for Croatian,\n// according to Unicode CLDR. As another example, Microsoft states\n// that 0x101A is Croatian (Latin) in Bosnia-Herzegovina. We transform\n// this to 'hr-BA' and not 'hr-Latn-BA' because Latin is the default script\n// for the Croatian language, according to IANA.\n//\n// http://www.unicode.org/cldr/charts/latest/supplemental/likely_subtags.html\n// http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry\nvar windowsLanguages = {\n    0x0436: 'af',\n    0x041C: 'sq',\n    0x0484: 'gsw',\n    0x045E: 'am',\n    0x1401: 'ar-DZ',\n    0x3C01: 'ar-BH',\n    0x0C01: 'ar',\n    0x0801: 'ar-IQ',\n    0x2C01: 'ar-JO',\n    0x3401: 'ar-KW',\n    0x3001: 'ar-LB',\n    0x1001: 'ar-LY',\n    0x1801: 'ary',\n    0x2001: 'ar-OM',\n    0x4001: 'ar-QA',\n    0x0401: 'ar-SA',\n    0x2801: 'ar-SY',\n    0x1C01: 'aeb',\n    0x3801: 'ar-AE',\n    0x2401: 'ar-YE',\n    0x042B: 'hy',\n    0x044D: 'as',\n    0x082C: 'az-Cyrl',\n    0x042C: 'az',\n    0x046D: 'ba',\n    0x042D: 'eu',\n    0x0423: 'be',\n    0x0845: 'bn',\n    0x0445: 'bn-IN',\n    0x201A: 'bs-Cyrl',\n    0x141A: 'bs',\n    0x047E: 'br',\n    0x0402: 'bg',\n    0x0403: 'ca',\n    0x0C04: 'zh-HK',\n    0x1404: 'zh-MO',\n    0x0804: 'zh',\n    0x1004: 'zh-SG',\n    0x0404: 'zh-TW',\n    0x0483: 'co',\n    0x041A: 'hr',\n    0x101A: 'hr-BA',\n    0x0405: 'cs',\n    0x0406: 'da',\n    0x048C: 'prs',\n    0x0465: 'dv',\n    0x0813: 'nl-BE',\n    0x0413: 'nl',\n    0x0C09: 'en-AU',\n    0x2809: 'en-BZ',\n    0x1009: 'en-CA',\n    0x2409: 'en-029',\n    0x4009: 'en-IN',\n    0x1809: 'en-IE',\n    0x2009: 'en-JM',\n    0x4409: 'en-MY',\n    0x1409: 'en-NZ',\n    0x3409: 'en-PH',\n    0x4809: 'en-SG',\n    0x1C09: 'en-ZA',\n    0x2C09: 'en-TT',\n    0x0809: 'en-GB',\n    0x0409: 'en',\n    0x3009: 'en-ZW',\n    0x0425: 'et',\n    0x0438: 'fo',\n    0x0464: 'fil',\n    0x040B: 'fi',\n    0x080C: 'fr-BE',\n    0x0C0C: 'fr-CA',\n    0x040C: 'fr',\n    0x140C: 'fr-LU',\n    0x180C: 'fr-MC',\n    0x100C: 'fr-CH',\n    0x0462: 'fy',\n    0x0456: 'gl',\n    0x0437: 'ka',\n    0x0C07: 'de-AT',\n    0x0407: 'de',\n    0x1407: 'de-LI',\n    0x1007: 'de-LU',\n    0x0807: 'de-CH',\n    0x0408: 'el',\n    0x046F: 'kl',\n    0x0447: 'gu',\n    0x0468: 'ha',\n    0x040D: 'he',\n    0x0439: 'hi',\n    0x040E: 'hu',\n    0x040F: 'is',\n    0x0470: 'ig',\n    0x0421: 'id',\n    0x045D: 'iu',\n    0x085D: 'iu-Latn',\n    0x083C: 'ga',\n    0x0434: 'xh',\n    0x0435: 'zu',\n    0x0410: 'it',\n    0x0810: 'it-CH',\n    0x0411: 'ja',\n    0x044B: 'kn',\n    0x043F: 'kk',\n    0x0453: 'km',\n    0x0486: 'quc',\n    0x0487: 'rw',\n    0x0441: 'sw',\n    0x0457: 'kok',\n    0x0412: 'ko',\n    0x0440: 'ky',\n    0x0454: 'lo',\n    0x0426: 'lv',\n    0x0427: 'lt',\n    0x082E: 'dsb',\n    0x046E: 'lb',\n    0x042F: 'mk',\n    0x083E: 'ms-BN',\n    0x043E: 'ms',\n    0x044C: 'ml',\n    0x043A: 'mt',\n    0x0481: 'mi',\n    0x047A: 'arn',\n    0x044E: 'mr',\n    0x047C: 'moh',\n    0x0450: 'mn',\n    0x0850: 'mn-CN',\n    0x0461: 'ne',\n    0x0414: 'nb',\n    0x0814: 'nn',\n    0x0482: 'oc',\n    0x0448: 'or',\n    0x0463: 'ps',\n    0x0415: 'pl',\n    0x0416: 'pt',\n    0x0816: 'pt-PT',\n    0x0446: 'pa',\n    0x046B: 'qu-BO',\n    0x086B: 'qu-EC',\n    0x0C6B: 'qu',\n    0x0418: 'ro',\n    0x0417: 'rm',\n    0x0419: 'ru',\n    0x243B: 'smn',\n    0x103B: 'smj-NO',\n    0x143B: 'smj',\n    0x0C3B: 'se-FI',\n    0x043B: 'se',\n    0x083B: 'se-SE',\n    0x203B: 'sms',\n    0x183B: 'sma-NO',\n    0x1C3B: 'sms',\n    0x044F: 'sa',\n    0x1C1A: 'sr-Cyrl-BA',\n    0x0C1A: 'sr',\n    0x181A: 'sr-Latn-BA',\n    0x081A: 'sr-Latn',\n    0x046C: 'nso',\n    0x0432: 'tn',\n    0x045B: 'si',\n    0x041B: 'sk',\n    0x0424: 'sl',\n    0x2C0A: 'es-AR',\n    0x400A: 'es-BO',\n    0x340A: 'es-CL',\n    0x240A: 'es-CO',\n    0x140A: 'es-CR',\n    0x1C0A: 'es-DO',\n    0x300A: 'es-EC',\n    0x440A: 'es-SV',\n    0x100A: 'es-GT',\n    0x480A: 'es-HN',\n    0x080A: 'es-MX',\n    0x4C0A: 'es-NI',\n    0x180A: 'es-PA',\n    0x3C0A: 'es-PY',\n    0x280A: 'es-PE',\n    0x500A: 'es-PR',\n\n    // Microsoft has defined two different language codes for\n    // “Spanish with modern sorting” and “Spanish with traditional\n    // sorting”. This makes sense for collation APIs, and it would be\n    // possible to express this in BCP 47 language tags via Unicode\n    // extensions (eg., es-u-co-trad is Spanish with traditional\n    // sorting). However, for storing names in fonts, the distinction\n    // does not make sense, so we give “es” in both cases.\n    0x0C0A: 'es',\n    0x040A: 'es',\n\n    0x540A: 'es-US',\n    0x380A: 'es-UY',\n    0x200A: 'es-VE',\n    0x081D: 'sv-FI',\n    0x041D: 'sv',\n    0x045A: 'syr',\n    0x0428: 'tg',\n    0x085F: 'tzm',\n    0x0449: 'ta',\n    0x0444: 'tt',\n    0x044A: 'te',\n    0x041E: 'th',\n    0x0451: 'bo',\n    0x041F: 'tr',\n    0x0442: 'tk',\n    0x0480: 'ug',\n    0x0422: 'uk',\n    0x042E: 'hsb',\n    0x0420: 'ur',\n    0x0843: 'uz-Cyrl',\n    0x0443: 'uz',\n    0x042A: 'vi',\n    0x0452: 'cy',\n    0x0488: 'wo',\n    0x0485: 'sah',\n    0x0478: 'ii',\n    0x046A: 'yo'\n};\n\n// Returns a IETF BCP 47 language code, for example 'zh-Hant'\n// for 'Chinese in the traditional script'.\nfunction getLanguageCode(platformID, languageID, ltag) {\n    switch (platformID) {\n        case 0:  // Unicode\n            if (languageID === 0xFFFF) {\n                return 'und';\n            } else if (ltag) {\n                return ltag[languageID];\n            }\n\n            break;\n\n        case 1:  // Macintosh\n            return macLanguages[languageID];\n\n        case 3:  // Windows\n            return windowsLanguages[languageID];\n    }\n\n    return undefined;\n}\n\nvar utf16 = 'utf-16';\n\n// MacOS script ID → encoding. This table stores the default case,\n// which can be overridden by macLanguageEncodings.\nvar macScriptEncodings = {\n    0: 'macintosh',           // smRoman\n    1: 'x-mac-japanese',      // smJapanese\n    2: 'x-mac-chinesetrad',   // smTradChinese\n    3: 'x-mac-korean',        // smKorean\n    6: 'x-mac-greek',         // smGreek\n    7: 'x-mac-cyrillic',      // smCyrillic\n    9: 'x-mac-devanagai',     // smDevanagari\n    10: 'x-mac-gurmukhi',     // smGurmukhi\n    11: 'x-mac-gujarati',     // smGujarati\n    12: 'x-mac-oriya',        // smOriya\n    13: 'x-mac-bengali',      // smBengali\n    14: 'x-mac-tamil',        // smTamil\n    15: 'x-mac-telugu',       // smTelugu\n    16: 'x-mac-kannada',      // smKannada\n    17: 'x-mac-malayalam',    // smMalayalam\n    18: 'x-mac-sinhalese',    // smSinhalese\n    19: 'x-mac-burmese',      // smBurmese\n    20: 'x-mac-khmer',        // smKhmer\n    21: 'x-mac-thai',         // smThai\n    22: 'x-mac-lao',          // smLao\n    23: 'x-mac-georgian',     // smGeorgian\n    24: 'x-mac-armenian',     // smArmenian\n    25: 'x-mac-chinesesimp',  // smSimpChinese\n    26: 'x-mac-tibetan',      // smTibetan\n    27: 'x-mac-mongolian',    // smMongolian\n    28: 'x-mac-ethiopic',     // smEthiopic\n    29: 'x-mac-ce',           // smCentralEuroRoman\n    30: 'x-mac-vietnamese',   // smVietnamese\n    31: 'x-mac-extarabic'     // smExtArabic\n};\n\n// MacOS language ID → encoding. This table stores the exceptional\n// cases, which override macScriptEncodings. For writing MacOS naming\n// tables, we need to emit a MacOS script ID. Therefore, we cannot\n// merge macScriptEncodings into macLanguageEncodings.\n//\n// http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nvar macLanguageEncodings = {\n    15: 'x-mac-icelandic',    // langIcelandic\n    17: 'x-mac-turkish',      // langTurkish\n    18: 'x-mac-croatian',     // langCroatian\n    24: 'x-mac-ce',           // langLithuanian\n    25: 'x-mac-ce',           // langPolish\n    26: 'x-mac-ce',           // langHungarian\n    27: 'x-mac-ce',           // langEstonian\n    28: 'x-mac-ce',           // langLatvian\n    30: 'x-mac-icelandic',    // langFaroese\n    37: 'x-mac-romanian',     // langRomanian\n    38: 'x-mac-ce',           // langCzech\n    39: 'x-mac-ce',           // langSlovak\n    40: 'x-mac-ce',           // langSlovenian\n    143: 'x-mac-inuit',       // langInuktitut\n    146: 'x-mac-gaelic'       // langIrishGaelicScript\n};\n\nfunction getEncoding(platformID, encodingID, languageID) {\n    switch (platformID) {\n        case 0:  // Unicode\n            return utf16;\n\n        case 1:  // Apple Macintosh\n            return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];\n\n        case 3:  // Microsoft Windows\n            if (encodingID === 1 || encodingID === 10) {\n                return utf16;\n            }\n\n            break;\n    }\n\n    return undefined;\n}\n\n// Parse the naming `name` table.\n// FIXME: Format 1 additional fields are not supported yet.\n// ltag is the content of the `ltag' table, such as ['en', 'zh-Hans', 'de-CH-1904'].\nfunction parseNameTable(data, start, ltag) {\n    var name = {};\n    var p = new parse.Parser(data, start);\n    var format = p.parseUShort();\n    var count = p.parseUShort();\n    var stringOffset = p.offset + p.parseUShort();\n    for (var i = 0; i < count; i++) {\n        var platformID = p.parseUShort();\n        var encodingID = p.parseUShort();\n        var languageID = p.parseUShort();\n        var nameID = p.parseUShort();\n        var property = nameTableNames[nameID] || nameID;\n        var byteLength = p.parseUShort();\n        var offset = p.parseUShort();\n        var language = getLanguageCode(platformID, languageID, ltag);\n        var encoding = getEncoding(platformID, encodingID, languageID);\n        if (encoding !== undefined && language !== undefined) {\n            var text = (void 0);\n            if (encoding === utf16) {\n                text = decode.UTF16(data, stringOffset + offset, byteLength);\n            } else {\n                text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);\n            }\n\n            if (text) {\n                var translations = name[property];\n                if (translations === undefined) {\n                    translations = name[property] = {};\n                }\n\n                translations[language] = text;\n            }\n        }\n    }\n\n    var langTagCount = 0;\n    if (format === 1) {\n        // FIXME: Also handle Microsoft's 'name' table 1.\n        langTagCount = p.parseUShort();\n    }\n\n    return name;\n}\n\n// {23: 'foo'} → {'foo': 23}\n// ['bar', 'baz'] → {'bar': 0, 'baz': 1}\nfunction reverseDict(dict) {\n    var result = {};\n    for (var key in dict) {\n        result[dict[key]] = parseInt(key);\n    }\n\n    return result;\n}\n\nfunction makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {\n    return new table.Record('NameRecord', [\n        {name: 'platformID', type: 'USHORT', value: platformID},\n        {name: 'encodingID', type: 'USHORT', value: encodingID},\n        {name: 'languageID', type: 'USHORT', value: languageID},\n        {name: 'nameID', type: 'USHORT', value: nameID},\n        {name: 'length', type: 'USHORT', value: length},\n        {name: 'offset', type: 'USHORT', value: offset}\n    ]);\n}\n\n// Finds the position of needle in haystack, or -1 if not there.\n// Like String.indexOf(), but for arrays.\nfunction findSubArray(needle, haystack) {\n    var needleLength = needle.length;\n    var limit = haystack.length - needleLength + 1;\n\n    loop:\n    for (var pos = 0; pos < limit; pos++) {\n        for (; pos < limit; pos++) {\n            for (var k = 0; k < needleLength; k++) {\n                if (haystack[pos + k] !== needle[k]) {\n                    continue loop;\n                }\n            }\n\n            return pos;\n        }\n    }\n\n    return -1;\n}\n\nfunction addStringToPool(s, pool) {\n    var offset = findSubArray(s, pool);\n    if (offset < 0) {\n        offset = pool.length;\n        var i = 0;\n        var len = s.length;\n        for (; i < len; ++i) {\n            pool.push(s[i]);\n        }\n\n    }\n\n    return offset;\n}\n\nfunction makeNameTable(names, ltag) {\n    var nameID;\n    var nameIDs = [];\n\n    var namesWithNumericKeys = {};\n    var nameTableIds = reverseDict(nameTableNames);\n    for (var key in names) {\n        var id = nameTableIds[key];\n        if (id === undefined) {\n            id = key;\n        }\n\n        nameID = parseInt(id);\n\n        if (isNaN(nameID)) {\n            throw new Error('Name table entry \"' + key + '\" does not exist, see nameTableNames for complete list.');\n        }\n\n        namesWithNumericKeys[nameID] = names[key];\n        nameIDs.push(nameID);\n    }\n\n    var macLanguageIds = reverseDict(macLanguages);\n    var windowsLanguageIds = reverseDict(windowsLanguages);\n\n    var nameRecords = [];\n    var stringPool = [];\n\n    for (var i = 0; i < nameIDs.length; i++) {\n        nameID = nameIDs[i];\n        var translations = namesWithNumericKeys[nameID];\n        for (var lang in translations) {\n            var text = translations[lang];\n\n            // For MacOS, we try to emit the name in the form that was introduced\n            // in the initial version of the TrueType spec (in the late 1980s).\n            // However, this can fail for various reasons: the requested BCP 47\n            // language code might not have an old-style Mac equivalent;\n            // we might not have a codec for the needed character encoding;\n            // or the name might contain characters that cannot be expressed\n            // in the old-style Macintosh encoding. In case of failure, we emit\n            // the name in a more modern fashion (Unicode encoding with BCP 47\n            // language tags) that is recognized by MacOS 10.5, released in 2009.\n            // If fonts were only read by operating systems, we could simply\n            // emit all names in the modern form; this would be much easier.\n            // However, there are many applications and libraries that read\n            // 'name' tables directly, and these will usually only recognize\n            // the ancient form (silently skipping the unrecognized names).\n            var macPlatform = 1;  // Macintosh\n            var macLanguage = macLanguageIds[lang];\n            var macScript = macLanguageToScript[macLanguage];\n            var macEncoding = getEncoding(macPlatform, macScript, macLanguage);\n            var macName = encode.MACSTRING(text, macEncoding);\n            if (macName === undefined) {\n                macPlatform = 0;  // Unicode\n                macLanguage = ltag.indexOf(lang);\n                if (macLanguage < 0) {\n                    macLanguage = ltag.length;\n                    ltag.push(lang);\n                }\n\n                macScript = 4;  // Unicode 2.0 and later\n                macName = encode.UTF16(text);\n            }\n\n            var macNameOffset = addStringToPool(macName, stringPool);\n            nameRecords.push(makeNameRecord(macPlatform, macScript, macLanguage,\n                                            nameID, macName.length, macNameOffset));\n\n            var winLanguage = windowsLanguageIds[lang];\n            if (winLanguage !== undefined) {\n                var winName = encode.UTF16(text);\n                var winNameOffset = addStringToPool(winName, stringPool);\n                nameRecords.push(makeNameRecord(3, 1, winLanguage,\n                                                nameID, winName.length, winNameOffset));\n            }\n        }\n    }\n\n    nameRecords.sort(function(a, b) {\n        return ((a.platformID - b.platformID) ||\n                (a.encodingID - b.encodingID) ||\n                (a.languageID - b.languageID) ||\n                (a.nameID - b.nameID));\n    });\n\n    var t = new table.Table('name', [\n        {name: 'format', type: 'USHORT', value: 0},\n        {name: 'count', type: 'USHORT', value: nameRecords.length},\n        {name: 'stringOffset', type: 'USHORT', value: 6 + nameRecords.length * 12}\n    ]);\n\n    for (var r = 0; r < nameRecords.length; r++) {\n        t.fields.push({name: 'record_' + r, type: 'RECORD', value: nameRecords[r]});\n    }\n\n    t.fields.push({name: 'strings', type: 'LITERAL', value: stringPool});\n    return t;\n}\n\nvar _name = { parse: parseNameTable, make: makeNameTable };\n\n// The `OS/2` table contains metrics required in OpenType fonts.\n\nvar unicodeRanges = [\n    {begin: 0x0000, end: 0x007F}, // Basic Latin\n    {begin: 0x0080, end: 0x00FF}, // Latin-1 Supplement\n    {begin: 0x0100, end: 0x017F}, // Latin Extended-A\n    {begin: 0x0180, end: 0x024F}, // Latin Extended-B\n    {begin: 0x0250, end: 0x02AF}, // IPA Extensions\n    {begin: 0x02B0, end: 0x02FF}, // Spacing Modifier Letters\n    {begin: 0x0300, end: 0x036F}, // Combining Diacritical Marks\n    {begin: 0x0370, end: 0x03FF}, // Greek and Coptic\n    {begin: 0x2C80, end: 0x2CFF}, // Coptic\n    {begin: 0x0400, end: 0x04FF}, // Cyrillic\n    {begin: 0x0530, end: 0x058F}, // Armenian\n    {begin: 0x0590, end: 0x05FF}, // Hebrew\n    {begin: 0xA500, end: 0xA63F}, // Vai\n    {begin: 0x0600, end: 0x06FF}, // Arabic\n    {begin: 0x07C0, end: 0x07FF}, // NKo\n    {begin: 0x0900, end: 0x097F}, // Devanagari\n    {begin: 0x0980, end: 0x09FF}, // Bengali\n    {begin: 0x0A00, end: 0x0A7F}, // Gurmukhi\n    {begin: 0x0A80, end: 0x0AFF}, // Gujarati\n    {begin: 0x0B00, end: 0x0B7F}, // Oriya\n    {begin: 0x0B80, end: 0x0BFF}, // Tamil\n    {begin: 0x0C00, end: 0x0C7F}, // Telugu\n    {begin: 0x0C80, end: 0x0CFF}, // Kannada\n    {begin: 0x0D00, end: 0x0D7F}, // Malayalam\n    {begin: 0x0E00, end: 0x0E7F}, // Thai\n    {begin: 0x0E80, end: 0x0EFF}, // Lao\n    {begin: 0x10A0, end: 0x10FF}, // Georgian\n    {begin: 0x1B00, end: 0x1B7F}, // Balinese\n    {begin: 0x1100, end: 0x11FF}, // Hangul Jamo\n    {begin: 0x1E00, end: 0x1EFF}, // Latin Extended Additional\n    {begin: 0x1F00, end: 0x1FFF}, // Greek Extended\n    {begin: 0x2000, end: 0x206F}, // General Punctuation\n    {begin: 0x2070, end: 0x209F}, // Superscripts And Subscripts\n    {begin: 0x20A0, end: 0x20CF}, // Currency Symbol\n    {begin: 0x20D0, end: 0x20FF}, // Combining Diacritical Marks For Symbols\n    {begin: 0x2100, end: 0x214F}, // Letterlike Symbols\n    {begin: 0x2150, end: 0x218F}, // Number Forms\n    {begin: 0x2190, end: 0x21FF}, // Arrows\n    {begin: 0x2200, end: 0x22FF}, // Mathematical Operators\n    {begin: 0x2300, end: 0x23FF}, // Miscellaneous Technical\n    {begin: 0x2400, end: 0x243F}, // Control Pictures\n    {begin: 0x2440, end: 0x245F}, // Optical Character Recognition\n    {begin: 0x2460, end: 0x24FF}, // Enclosed Alphanumerics\n    {begin: 0x2500, end: 0x257F}, // Box Drawing\n    {begin: 0x2580, end: 0x259F}, // Block Elements\n    {begin: 0x25A0, end: 0x25FF}, // Geometric Shapes\n    {begin: 0x2600, end: 0x26FF}, // Miscellaneous Symbols\n    {begin: 0x2700, end: 0x27BF}, // Dingbats\n    {begin: 0x3000, end: 0x303F}, // CJK Symbols And Punctuation\n    {begin: 0x3040, end: 0x309F}, // Hiragana\n    {begin: 0x30A0, end: 0x30FF}, // Katakana\n    {begin: 0x3100, end: 0x312F}, // Bopomofo\n    {begin: 0x3130, end: 0x318F}, // Hangul Compatibility Jamo\n    {begin: 0xA840, end: 0xA87F}, // Phags-pa\n    {begin: 0x3200, end: 0x32FF}, // Enclosed CJK Letters And Months\n    {begin: 0x3300, end: 0x33FF}, // CJK Compatibility\n    {begin: 0xAC00, end: 0xD7AF}, // Hangul Syllables\n    {begin: 0xD800, end: 0xDFFF}, // Non-Plane 0 *\n    {begin: 0x10900, end: 0x1091F}, // Phoenicia\n    {begin: 0x4E00, end: 0x9FFF}, // CJK Unified Ideographs\n    {begin: 0xE000, end: 0xF8FF}, // Private Use Area (plane 0)\n    {begin: 0x31C0, end: 0x31EF}, // CJK Strokes\n    {begin: 0xFB00, end: 0xFB4F}, // Alphabetic Presentation Forms\n    {begin: 0xFB50, end: 0xFDFF}, // Arabic Presentation Forms-A\n    {begin: 0xFE20, end: 0xFE2F}, // Combining Half Marks\n    {begin: 0xFE10, end: 0xFE1F}, // Vertical Forms\n    {begin: 0xFE50, end: 0xFE6F}, // Small Form Variants\n    {begin: 0xFE70, end: 0xFEFF}, // Arabic Presentation Forms-B\n    {begin: 0xFF00, end: 0xFFEF}, // Halfwidth And Fullwidth Forms\n    {begin: 0xFFF0, end: 0xFFFF}, // Specials\n    {begin: 0x0F00, end: 0x0FFF}, // Tibetan\n    {begin: 0x0700, end: 0x074F}, // Syriac\n    {begin: 0x0780, end: 0x07BF}, // Thaana\n    {begin: 0x0D80, end: 0x0DFF}, // Sinhala\n    {begin: 0x1000, end: 0x109F}, // Myanmar\n    {begin: 0x1200, end: 0x137F}, // Ethiopic\n    {begin: 0x13A0, end: 0x13FF}, // Cherokee\n    {begin: 0x1400, end: 0x167F}, // Unified Canadian Aboriginal Syllabics\n    {begin: 0x1680, end: 0x169F}, // Ogham\n    {begin: 0x16A0, end: 0x16FF}, // Runic\n    {begin: 0x1780, end: 0x17FF}, // Khmer\n    {begin: 0x1800, end: 0x18AF}, // Mongolian\n    {begin: 0x2800, end: 0x28FF}, // Braille Patterns\n    {begin: 0xA000, end: 0xA48F}, // Yi Syllables\n    {begin: 0x1700, end: 0x171F}, // Tagalog\n    {begin: 0x10300, end: 0x1032F}, // Old Italic\n    {begin: 0x10330, end: 0x1034F}, // Gothic\n    {begin: 0x10400, end: 0x1044F}, // Deseret\n    {begin: 0x1D000, end: 0x1D0FF}, // Byzantine Musical Symbols\n    {begin: 0x1D400, end: 0x1D7FF}, // Mathematical Alphanumeric Symbols\n    {begin: 0xFF000, end: 0xFFFFD}, // Private Use (plane 15)\n    {begin: 0xFE00, end: 0xFE0F}, // Variation Selectors\n    {begin: 0xE0000, end: 0xE007F}, // Tags\n    {begin: 0x1900, end: 0x194F}, // Limbu\n    {begin: 0x1950, end: 0x197F}, // Tai Le\n    {begin: 0x1980, end: 0x19DF}, // New Tai Lue\n    {begin: 0x1A00, end: 0x1A1F}, // Buginese\n    {begin: 0x2C00, end: 0x2C5F}, // Glagolitic\n    {begin: 0x2D30, end: 0x2D7F}, // Tifinagh\n    {begin: 0x4DC0, end: 0x4DFF}, // Yijing Hexagram Symbols\n    {begin: 0xA800, end: 0xA82F}, // Syloti Nagri\n    {begin: 0x10000, end: 0x1007F}, // Linear B Syllabary\n    {begin: 0x10140, end: 0x1018F}, // Ancient Greek Numbers\n    {begin: 0x10380, end: 0x1039F}, // Ugaritic\n    {begin: 0x103A0, end: 0x103DF}, // Old Persian\n    {begin: 0x10450, end: 0x1047F}, // Shavian\n    {begin: 0x10480, end: 0x104AF}, // Osmanya\n    {begin: 0x10800, end: 0x1083F}, // Cypriot Syllabary\n    {begin: 0x10A00, end: 0x10A5F}, // Kharoshthi\n    {begin: 0x1D300, end: 0x1D35F}, // Tai Xuan Jing Symbols\n    {begin: 0x12000, end: 0x123FF}, // Cuneiform\n    {begin: 0x1D360, end: 0x1D37F}, // Counting Rod Numerals\n    {begin: 0x1B80, end: 0x1BBF}, // Sundanese\n    {begin: 0x1C00, end: 0x1C4F}, // Lepcha\n    {begin: 0x1C50, end: 0x1C7F}, // Ol Chiki\n    {begin: 0xA880, end: 0xA8DF}, // Saurashtra\n    {begin: 0xA900, end: 0xA92F}, // Kayah Li\n    {begin: 0xA930, end: 0xA95F}, // Rejang\n    {begin: 0xAA00, end: 0xAA5F}, // Cham\n    {begin: 0x10190, end: 0x101CF}, // Ancient Symbols\n    {begin: 0x101D0, end: 0x101FF}, // Phaistos Disc\n    {begin: 0x102A0, end: 0x102DF}, // Carian\n    {begin: 0x1F030, end: 0x1F09F}  // Domino Tiles\n];\n\nfunction getUnicodeRange(unicode) {\n    for (var i = 0; i < unicodeRanges.length; i += 1) {\n        var range = unicodeRanges[i];\n        if (unicode >= range.begin && unicode < range.end) {\n            return i;\n        }\n    }\n\n    return -1;\n}\n\n// Parse the OS/2 and Windows metrics `OS/2` table\nfunction parseOS2Table(data, start) {\n    var os2 = {};\n    var p = new parse.Parser(data, start);\n    os2.version = p.parseUShort();\n    os2.xAvgCharWidth = p.parseShort();\n    os2.usWeightClass = p.parseUShort();\n    os2.usWidthClass = p.parseUShort();\n    os2.fsType = p.parseUShort();\n    os2.ySubscriptXSize = p.parseShort();\n    os2.ySubscriptYSize = p.parseShort();\n    os2.ySubscriptXOffset = p.parseShort();\n    os2.ySubscriptYOffset = p.parseShort();\n    os2.ySuperscriptXSize = p.parseShort();\n    os2.ySuperscriptYSize = p.parseShort();\n    os2.ySuperscriptXOffset = p.parseShort();\n    os2.ySuperscriptYOffset = p.parseShort();\n    os2.yStrikeoutSize = p.parseShort();\n    os2.yStrikeoutPosition = p.parseShort();\n    os2.sFamilyClass = p.parseShort();\n    os2.panose = [];\n    for (var i = 0; i < 10; i++) {\n        os2.panose[i] = p.parseByte();\n    }\n\n    os2.ulUnicodeRange1 = p.parseULong();\n    os2.ulUnicodeRange2 = p.parseULong();\n    os2.ulUnicodeRange3 = p.parseULong();\n    os2.ulUnicodeRange4 = p.parseULong();\n    os2.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());\n    os2.fsSelection = p.parseUShort();\n    os2.usFirstCharIndex = p.parseUShort();\n    os2.usLastCharIndex = p.parseUShort();\n    os2.sTypoAscender = p.parseShort();\n    os2.sTypoDescender = p.parseShort();\n    os2.sTypoLineGap = p.parseShort();\n    os2.usWinAscent = p.parseUShort();\n    os2.usWinDescent = p.parseUShort();\n    if (os2.version >= 1) {\n        os2.ulCodePageRange1 = p.parseULong();\n        os2.ulCodePageRange2 = p.parseULong();\n    }\n\n    if (os2.version >= 2) {\n        os2.sxHeight = p.parseShort();\n        os2.sCapHeight = p.parseShort();\n        os2.usDefaultChar = p.parseUShort();\n        os2.usBreakChar = p.parseUShort();\n        os2.usMaxContent = p.parseUShort();\n    }\n\n    return os2;\n}\n\nfunction makeOS2Table(options) {\n    return new table.Table('OS/2', [\n        {name: 'version', type: 'USHORT', value: 0x0003},\n        {name: 'xAvgCharWidth', type: 'SHORT', value: 0},\n        {name: 'usWeightClass', type: 'USHORT', value: 0},\n        {name: 'usWidthClass', type: 'USHORT', value: 0},\n        {name: 'fsType', type: 'USHORT', value: 0},\n        {name: 'ySubscriptXSize', type: 'SHORT', value: 650},\n        {name: 'ySubscriptYSize', type: 'SHORT', value: 699},\n        {name: 'ySubscriptXOffset', type: 'SHORT', value: 0},\n        {name: 'ySubscriptYOffset', type: 'SHORT', value: 140},\n        {name: 'ySuperscriptXSize', type: 'SHORT', value: 650},\n        {name: 'ySuperscriptYSize', type: 'SHORT', value: 699},\n        {name: 'ySuperscriptXOffset', type: 'SHORT', value: 0},\n        {name: 'ySuperscriptYOffset', type: 'SHORT', value: 479},\n        {name: 'yStrikeoutSize', type: 'SHORT', value: 49},\n        {name: 'yStrikeoutPosition', type: 'SHORT', value: 258},\n        {name: 'sFamilyClass', type: 'SHORT', value: 0},\n        {name: 'bFamilyType', type: 'BYTE', value: 0},\n        {name: 'bSerifStyle', type: 'BYTE', value: 0},\n        {name: 'bWeight', type: 'BYTE', value: 0},\n        {name: 'bProportion', type: 'BYTE', value: 0},\n        {name: 'bContrast', type: 'BYTE', value: 0},\n        {name: 'bStrokeVariation', type: 'BYTE', value: 0},\n        {name: 'bArmStyle', type: 'BYTE', value: 0},\n        {name: 'bLetterform', type: 'BYTE', value: 0},\n        {name: 'bMidline', type: 'BYTE', value: 0},\n        {name: 'bXHeight', type: 'BYTE', value: 0},\n        {name: 'ulUnicodeRange1', type: 'ULONG', value: 0},\n        {name: 'ulUnicodeRange2', type: 'ULONG', value: 0},\n        {name: 'ulUnicodeRange3', type: 'ULONG', value: 0},\n        {name: 'ulUnicodeRange4', type: 'ULONG', value: 0},\n        {name: 'achVendID', type: 'CHARARRAY', value: 'XXXX'},\n        {name: 'fsSelection', type: 'USHORT', value: 0},\n        {name: 'usFirstCharIndex', type: 'USHORT', value: 0},\n        {name: 'usLastCharIndex', type: 'USHORT', value: 0},\n        {name: 'sTypoAscender', type: 'SHORT', value: 0},\n        {name: 'sTypoDescender', type: 'SHORT', value: 0},\n        {name: 'sTypoLineGap', type: 'SHORT', value: 0},\n        {name: 'usWinAscent', type: 'USHORT', value: 0},\n        {name: 'usWinDescent', type: 'USHORT', value: 0},\n        {name: 'ulCodePageRange1', type: 'ULONG', value: 0},\n        {name: 'ulCodePageRange2', type: 'ULONG', value: 0},\n        {name: 'sxHeight', type: 'SHORT', value: 0},\n        {name: 'sCapHeight', type: 'SHORT', value: 0},\n        {name: 'usDefaultChar', type: 'USHORT', value: 0},\n        {name: 'usBreakChar', type: 'USHORT', value: 0},\n        {name: 'usMaxContext', type: 'USHORT', value: 0}\n    ], options);\n}\n\nvar os2 = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges: unicodeRanges, getUnicodeRange: getUnicodeRange };\n\n// The `post` table stores additional PostScript information, such as glyph names.\n\n// Parse the PostScript `post` table\nfunction parsePostTable(data, start) {\n    var post = {};\n    var p = new parse.Parser(data, start);\n    post.version = p.parseVersion();\n    post.italicAngle = p.parseFixed();\n    post.underlinePosition = p.parseShort();\n    post.underlineThickness = p.parseShort();\n    post.isFixedPitch = p.parseULong();\n    post.minMemType42 = p.parseULong();\n    post.maxMemType42 = p.parseULong();\n    post.minMemType1 = p.parseULong();\n    post.maxMemType1 = p.parseULong();\n    switch (post.version) {\n        case 1:\n            post.names = standardNames.slice();\n            break;\n        case 2:\n            post.numberOfGlyphs = p.parseUShort();\n            post.glyphNameIndex = new Array(post.numberOfGlyphs);\n            for (var i = 0; i < post.numberOfGlyphs; i++) {\n                post.glyphNameIndex[i] = p.parseUShort();\n            }\n\n            post.names = [];\n            for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {\n                if (post.glyphNameIndex[i$1] >= standardNames.length) {\n                    var nameLength = p.parseChar();\n                    post.names.push(p.parseString(nameLength));\n                }\n            }\n\n            break;\n        case 2.5:\n            post.numberOfGlyphs = p.parseUShort();\n            post.offset = new Array(post.numberOfGlyphs);\n            for (var i$2 = 0; i$2 < post.numberOfGlyphs; i$2++) {\n                post.offset[i$2] = p.parseChar();\n            }\n\n            break;\n    }\n    return post;\n}\n\nfunction makePostTable() {\n    return new table.Table('post', [\n        {name: 'version', type: 'FIXED', value: 0x00030000},\n        {name: 'italicAngle', type: 'FIXED', value: 0},\n        {name: 'underlinePosition', type: 'FWORD', value: 0},\n        {name: 'underlineThickness', type: 'FWORD', value: 0},\n        {name: 'isFixedPitch', type: 'ULONG', value: 0},\n        {name: 'minMemType42', type: 'ULONG', value: 0},\n        {name: 'maxMemType42', type: 'ULONG', value: 0},\n        {name: 'minMemType1', type: 'ULONG', value: 0},\n        {name: 'maxMemType1', type: 'ULONG', value: 0}\n    ]);\n}\n\nvar post = { parse: parsePostTable, make: makePostTable };\n\n// The `GSUB` table contains ligatures, among other things.\n\nvar subtableParsers = new Array(9);         // subtableParsers[0] is unused\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#SS\nsubtableParsers[1] = function parseLookup1() {\n    var start = this.offset + this.relativeOffset;\n    var substFormat = this.parseUShort();\n    if (substFormat === 1) {\n        return {\n            substFormat: 1,\n            coverage: this.parsePointer(Parser.coverage),\n            deltaGlyphId: this.parseUShort()\n        };\n    } else if (substFormat === 2) {\n        return {\n            substFormat: 2,\n            coverage: this.parsePointer(Parser.coverage),\n            substitute: this.parseOffset16List()\n        };\n    }\n    check.assert(false, '0x' + start.toString(16) + ': lookup type 1 format must be 1 or 2.');\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#MS\nsubtableParsers[2] = function parseLookup2() {\n    var substFormat = this.parseUShort();\n    check.argument(substFormat === 1, 'GSUB Multiple Substitution Subtable identifier-format must be 1');\n    return {\n        substFormat: substFormat,\n        coverage: this.parsePointer(Parser.coverage),\n        sequences: this.parseListOfLists()\n    };\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#AS\nsubtableParsers[3] = function parseLookup3() {\n    var substFormat = this.parseUShort();\n    check.argument(substFormat === 1, 'GSUB Alternate Substitution Subtable identifier-format must be 1');\n    return {\n        substFormat: substFormat,\n        coverage: this.parsePointer(Parser.coverage),\n        alternateSets: this.parseListOfLists()\n    };\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#LS\nsubtableParsers[4] = function parseLookup4() {\n    var substFormat = this.parseUShort();\n    check.argument(substFormat === 1, 'GSUB ligature table identifier-format must be 1');\n    return {\n        substFormat: substFormat,\n        coverage: this.parsePointer(Parser.coverage),\n        ligatureSets: this.parseListOfLists(function() {\n            return {\n                ligGlyph: this.parseUShort(),\n                components: this.parseUShortList(this.parseUShort() - 1)\n            };\n        })\n    };\n};\n\nvar lookupRecordDesc = {\n    sequenceIndex: Parser.uShort,\n    lookupListIndex: Parser.uShort\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CSF\nsubtableParsers[5] = function parseLookup5() {\n    var start = this.offset + this.relativeOffset;\n    var substFormat = this.parseUShort();\n\n    if (substFormat === 1) {\n        return {\n            substFormat: substFormat,\n            coverage: this.parsePointer(Parser.coverage),\n            ruleSets: this.parseListOfLists(function() {\n                var glyphCount = this.parseUShort();\n                var substCount = this.parseUShort();\n                return {\n                    input: this.parseUShortList(glyphCount - 1),\n                    lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n                };\n            })\n        };\n    } else if (substFormat === 2) {\n        return {\n            substFormat: substFormat,\n            coverage: this.parsePointer(Parser.coverage),\n            classDef: this.parsePointer(Parser.classDef),\n            classSets: this.parseListOfLists(function() {\n                var glyphCount = this.parseUShort();\n                var substCount = this.parseUShort();\n                return {\n                    classes: this.parseUShortList(glyphCount - 1),\n                    lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n                };\n            })\n        };\n    } else if (substFormat === 3) {\n        var glyphCount = this.parseUShort();\n        var substCount = this.parseUShort();\n        return {\n            substFormat: substFormat,\n            coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),\n            lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n        };\n    }\n    check.assert(false, '0x' + start.toString(16) + ': lookup type 5 format must be 1, 2 or 3.');\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CC\nsubtableParsers[6] = function parseLookup6() {\n    var start = this.offset + this.relativeOffset;\n    var substFormat = this.parseUShort();\n    if (substFormat === 1) {\n        return {\n            substFormat: 1,\n            coverage: this.parsePointer(Parser.coverage),\n            chainRuleSets: this.parseListOfLists(function() {\n                return {\n                    backtrack: this.parseUShortList(),\n                    input: this.parseUShortList(this.parseShort() - 1),\n                    lookahead: this.parseUShortList(),\n                    lookupRecords: this.parseRecordList(lookupRecordDesc)\n                };\n            })\n        };\n    } else if (substFormat === 2) {\n        return {\n            substFormat: 2,\n            coverage: this.parsePointer(Parser.coverage),\n            backtrackClassDef: this.parsePointer(Parser.classDef),\n            inputClassDef: this.parsePointer(Parser.classDef),\n            lookaheadClassDef: this.parsePointer(Parser.classDef),\n            chainClassSet: this.parseListOfLists(function() {\n                return {\n                    backtrack: this.parseUShortList(),\n                    input: this.parseUShortList(this.parseShort() - 1),\n                    lookahead: this.parseUShortList(),\n                    lookupRecords: this.parseRecordList(lookupRecordDesc)\n                };\n            })\n        };\n    } else if (substFormat === 3) {\n        return {\n            substFormat: 3,\n            backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n            inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n            lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n            lookupRecords: this.parseRecordList(lookupRecordDesc)\n        };\n    }\n    check.assert(false, '0x' + start.toString(16) + ': lookup type 6 format must be 1, 2 or 3.');\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#ES\nsubtableParsers[7] = function parseLookup7() {\n    // Extension Substitution subtable\n    var substFormat = this.parseUShort();\n    check.argument(substFormat === 1, 'GSUB Extension Substitution subtable identifier-format must be 1');\n    var extensionLookupType = this.parseUShort();\n    var extensionParser = new Parser(this.data, this.offset + this.parseULong());\n    return {\n        substFormat: 1,\n        lookupType: extensionLookupType,\n        extension: subtableParsers[extensionLookupType].call(extensionParser)\n    };\n};\n\n// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#RCCS\nsubtableParsers[8] = function parseLookup8() {\n    var substFormat = this.parseUShort();\n    check.argument(substFormat === 1, 'GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1');\n    return {\n        substFormat: substFormat,\n        coverage: this.parsePointer(Parser.coverage),\n        backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n        lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n        substitutes: this.parseUShortList()\n    };\n};\n\n// https://www.microsoft.com/typography/OTSPEC/gsub.htm\nfunction parseGsubTable(data, start) {\n    start = start || 0;\n    var p = new Parser(data, start);\n    var tableVersion = p.parseVersion(1);\n    check.argument(tableVersion === 1 || tableVersion === 1.1, 'Unsupported GSUB table version.');\n    if (tableVersion === 1) {\n        return {\n            version: tableVersion,\n            scripts: p.parseScriptList(),\n            features: p.parseFeatureList(),\n            lookups: p.parseLookupList(subtableParsers)\n        };\n    } else {\n        return {\n            version: tableVersion,\n            scripts: p.parseScriptList(),\n            features: p.parseFeatureList(),\n            lookups: p.parseLookupList(subtableParsers),\n            variations: p.parseFeatureVariationsList()\n        };\n    }\n\n}\n\n// GSUB Writing //////////////////////////////////////////////\nvar subtableMakers = new Array(9);\n\nsubtableMakers[1] = function makeLookup1(subtable) {\n    if (subtable.substFormat === 1) {\n        return new table.Table('substitutionTable', [\n            {name: 'substFormat', type: 'USHORT', value: 1},\n            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)},\n            {name: 'deltaGlyphID', type: 'USHORT', value: subtable.deltaGlyphId}\n        ]);\n    } else {\n        return new table.Table('substitutionTable', [\n            {name: 'substFormat', type: 'USHORT', value: 2},\n            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}\n        ].concat(table.ushortList('substitute', subtable.substitute)));\n    }\n};\n\nsubtableMakers[2] = function makeLookup2(subtable) {\n    check.assert(subtable.substFormat === 1, 'Lookup type 2 substFormat must be 1.');\n    return new table.Table('substitutionTable', [\n        {name: 'substFormat', type: 'USHORT', value: 1},\n        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}\n    ].concat(table.tableList('seqSet', subtable.sequences, function(sequenceSet) {\n        return new table.Table('sequenceSetTable', table.ushortList('sequence', sequenceSet));\n    })));\n};\n\nsubtableMakers[3] = function makeLookup3(subtable) {\n    check.assert(subtable.substFormat === 1, 'Lookup type 3 substFormat must be 1.');\n    return new table.Table('substitutionTable', [\n        {name: 'substFormat', type: 'USHORT', value: 1},\n        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}\n    ].concat(table.tableList('altSet', subtable.alternateSets, function(alternateSet) {\n        return new table.Table('alternateSetTable', table.ushortList('alternate', alternateSet));\n    })));\n};\n\nsubtableMakers[4] = function makeLookup4(subtable) {\n    check.assert(subtable.substFormat === 1, 'Lookup type 4 substFormat must be 1.');\n    return new table.Table('substitutionTable', [\n        {name: 'substFormat', type: 'USHORT', value: 1},\n        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}\n    ].concat(table.tableList('ligSet', subtable.ligatureSets, function(ligatureSet) {\n        return new table.Table('ligatureSetTable', table.tableList('ligature', ligatureSet, function(ligature) {\n            return new table.Table('ligatureTable',\n                [{name: 'ligGlyph', type: 'USHORT', value: ligature.ligGlyph}]\n                .concat(table.ushortList('component', ligature.components, ligature.components.length + 1))\n            );\n        }));\n    })));\n};\n\nsubtableMakers[6] = function makeLookup6(subtable) {\n    if (subtable.substFormat === 1) {\n        var returnTable = new table.Table('chainContextTable', [\n            {name: 'substFormat', type: 'USHORT', value: subtable.substFormat},\n            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}\n        ].concat(table.tableList('chainRuleSet', subtable.chainRuleSets, function(chainRuleSet) {\n            return new table.Table('chainRuleSetTable', table.tableList('chainRule', chainRuleSet, function(chainRule) {\n                var tableData = table.ushortList('backtrackGlyph', chainRule.backtrack, chainRule.backtrack.length)\n                    .concat(table.ushortList('inputGlyph', chainRule.input, chainRule.input.length + 1))\n                    .concat(table.ushortList('lookaheadGlyph', chainRule.lookahead, chainRule.lookahead.length))\n                    .concat(table.ushortList('substitution', [], chainRule.lookupRecords.length));\n\n                chainRule.lookupRecords.forEach(function (record, i) {\n                    tableData = tableData\n                        .concat({name: 'sequenceIndex' + i, type: 'USHORT', value: record.sequenceIndex})\n                        .concat({name: 'lookupListIndex' + i, type: 'USHORT', value: record.lookupListIndex});\n                });\n                return new table.Table('chainRuleTable', tableData);\n            }));\n        })));\n        return returnTable;\n    } else if (subtable.substFormat === 2) {\n        check.assert(false, 'lookup type 6 format 2 is not yet supported.');\n    } else if (subtable.substFormat === 3) {\n        var tableData = [\n            {name: 'substFormat', type: 'USHORT', value: subtable.substFormat} ];\n\n        tableData.push({name: 'backtrackGlyphCount', type: 'USHORT', value: subtable.backtrackCoverage.length});\n        subtable.backtrackCoverage.forEach(function (coverage, i) {\n            tableData.push({name: 'backtrackCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});\n        });\n        tableData.push({name: 'inputGlyphCount', type: 'USHORT', value: subtable.inputCoverage.length});\n        subtable.inputCoverage.forEach(function (coverage, i) {\n            tableData.push({name: 'inputCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});\n        });\n        tableData.push({name: 'lookaheadGlyphCount', type: 'USHORT', value: subtable.lookaheadCoverage.length});\n        subtable.lookaheadCoverage.forEach(function (coverage, i) {\n            tableData.push({name: 'lookaheadCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});\n        });\n\n        tableData.push({name: 'substitutionCount', type: 'USHORT', value: subtable.lookupRecords.length});\n        subtable.lookupRecords.forEach(function (record, i) {\n            tableData = tableData\n                .concat({name: 'sequenceIndex' + i, type: 'USHORT', value: record.sequenceIndex})\n                .concat({name: 'lookupListIndex' + i, type: 'USHORT', value: record.lookupListIndex});\n        });\n\n        var returnTable$1 = new table.Table('chainContextTable', tableData);\n\n        return returnTable$1;\n    }\n\n    check.assert(false, 'lookup type 6 format must be 1, 2 or 3.');\n};\n\nfunction makeGsubTable(gsub) {\n    return new table.Table('GSUB', [\n        {name: 'version', type: 'ULONG', value: 0x10000},\n        {name: 'scripts', type: 'TABLE', value: new table.ScriptList(gsub.scripts)},\n        {name: 'features', type: 'TABLE', value: new table.FeatureList(gsub.features)},\n        {name: 'lookups', type: 'TABLE', value: new table.LookupList(gsub.lookups, subtableMakers)}\n    ]);\n}\n\nvar gsub = { parse: parseGsubTable, make: makeGsubTable };\n\n// The `GPOS` table contains kerning pairs, among other things.\n\n// Parse the metadata `meta` table.\n// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6meta.html\nfunction parseMetaTable(data, start) {\n    var p = new parse.Parser(data, start);\n    var tableVersion = p.parseULong();\n    check.argument(tableVersion === 1, 'Unsupported META table version.');\n    p.parseULong(); // flags - currently unused and set to 0\n    p.parseULong(); // tableOffset\n    var numDataMaps = p.parseULong();\n\n    var tags = {};\n    for (var i = 0; i < numDataMaps; i++) {\n        var tag = p.parseTag();\n        var dataOffset = p.parseULong();\n        var dataLength = p.parseULong();\n        var text = decode.UTF8(data, start + dataOffset, dataLength);\n\n        tags[tag] = text;\n    }\n    return tags;\n}\n\nfunction makeMetaTable(tags) {\n    var numTags = Object.keys(tags).length;\n    var stringPool = '';\n    var stringPoolOffset = 16 + numTags * 12;\n\n    var result = new table.Table('meta', [\n        {name: 'version', type: 'ULONG', value: 1},\n        {name: 'flags', type: 'ULONG', value: 0},\n        {name: 'offset', type: 'ULONG', value: stringPoolOffset},\n        {name: 'numTags', type: 'ULONG', value: numTags}\n    ]);\n\n    for (var tag in tags) {\n        var pos = stringPool.length;\n        stringPool += tags[tag];\n\n        result.fields.push({name: 'tag ' + tag, type: 'TAG', value: tag});\n        result.fields.push({name: 'offset ' + tag, type: 'ULONG', value: stringPoolOffset + pos});\n        result.fields.push({name: 'length ' + tag, type: 'ULONG', value: tags[tag].length});\n    }\n\n    result.fields.push({name: 'stringPool', type: 'CHARARRAY', value: stringPool});\n\n    return result;\n}\n\nvar meta = { parse: parseMetaTable, make: makeMetaTable };\n\n// The `sfnt` wrapper provides organization for the tables in the font.\n\nfunction log2(v) {\n    return Math.log(v) / Math.log(2) | 0;\n}\n\nfunction computeCheckSum(bytes) {\n    while (bytes.length % 4 !== 0) {\n        bytes.push(0);\n    }\n\n    var sum = 0;\n    for (var i = 0; i < bytes.length; i += 4) {\n        sum += (bytes[i] << 24) +\n            (bytes[i + 1] << 16) +\n            (bytes[i + 2] << 8) +\n            (bytes[i + 3]);\n    }\n\n    sum %= Math.pow(2, 32);\n    return sum;\n}\n\nfunction makeTableRecord(tag, checkSum, offset, length) {\n    return new table.Record('Table Record', [\n        {name: 'tag', type: 'TAG', value: tag !== undefined ? tag : ''},\n        {name: 'checkSum', type: 'ULONG', value: checkSum !== undefined ? checkSum : 0},\n        {name: 'offset', type: 'ULONG', value: offset !== undefined ? offset : 0},\n        {name: 'length', type: 'ULONG', value: length !== undefined ? length : 0}\n    ]);\n}\n\nfunction makeSfntTable(tables) {\n    var sfnt = new table.Table('sfnt', [\n        {name: 'version', type: 'TAG', value: 'OTTO'},\n        {name: 'numTables', type: 'USHORT', value: 0},\n        {name: 'searchRange', type: 'USHORT', value: 0},\n        {name: 'entrySelector', type: 'USHORT', value: 0},\n        {name: 'rangeShift', type: 'USHORT', value: 0}\n    ]);\n    sfnt.tables = tables;\n    sfnt.numTables = tables.length;\n    var highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));\n    sfnt.searchRange = 16 * highestPowerOf2;\n    sfnt.entrySelector = log2(highestPowerOf2);\n    sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;\n\n    var recordFields = [];\n    var tableFields = [];\n\n    var offset = sfnt.sizeOf() + (makeTableRecord().sizeOf() * sfnt.numTables);\n    while (offset % 4 !== 0) {\n        offset += 1;\n        tableFields.push({name: 'padding', type: 'BYTE', value: 0});\n    }\n\n    for (var i = 0; i < tables.length; i += 1) {\n        var t = tables[i];\n        check.argument(t.tableName.length === 4, 'Table name' + t.tableName + ' is invalid.');\n        var tableLength = t.sizeOf();\n        var tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);\n        recordFields.push({name: tableRecord.tag + ' Table Record', type: 'RECORD', value: tableRecord});\n        tableFields.push({name: t.tableName + ' table', type: 'RECORD', value: t});\n        offset += tableLength;\n        check.argument(!isNaN(offset), 'Something went wrong calculating the offset.');\n        while (offset % 4 !== 0) {\n            offset += 1;\n            tableFields.push({name: 'padding', type: 'BYTE', value: 0});\n        }\n    }\n\n    // Table records need to be sorted alphabetically.\n    recordFields.sort(function(r1, r2) {\n        if (r1.value.tag > r2.value.tag) {\n            return 1;\n        } else {\n            return -1;\n        }\n    });\n\n    sfnt.fields = sfnt.fields.concat(recordFields);\n    sfnt.fields = sfnt.fields.concat(tableFields);\n    return sfnt;\n}\n\n// Get the metrics for a character. If the string has more than one character\n// this function returns metrics for the first available character.\n// You can provide optional fallback metrics if no characters are available.\nfunction metricsForChar(font, chars, notFoundMetrics) {\n    for (var i = 0; i < chars.length; i += 1) {\n        var glyphIndex = font.charToGlyphIndex(chars[i]);\n        if (glyphIndex > 0) {\n            var glyph = font.glyphs.get(glyphIndex);\n            return glyph.getMetrics();\n        }\n    }\n\n    return notFoundMetrics;\n}\n\nfunction average(vs) {\n    var sum = 0;\n    for (var i = 0; i < vs.length; i += 1) {\n        sum += vs[i];\n    }\n\n    return sum / vs.length;\n}\n\n// Convert the font object to a SFNT data structure.\n// This structure contains all the necessary tables and metadata to create a binary OTF file.\nfunction fontToSfntTable(font) {\n    var xMins = [];\n    var yMins = [];\n    var xMaxs = [];\n    var yMaxs = [];\n    var advanceWidths = [];\n    var leftSideBearings = [];\n    var rightSideBearings = [];\n    var firstCharIndex;\n    var lastCharIndex = 0;\n    var ulUnicodeRange1 = 0;\n    var ulUnicodeRange2 = 0;\n    var ulUnicodeRange3 = 0;\n    var ulUnicodeRange4 = 0;\n\n    for (var i = 0; i < font.glyphs.length; i += 1) {\n        var glyph = font.glyphs.get(i);\n        var unicode = glyph.unicode | 0;\n\n        if (isNaN(glyph.advanceWidth)) {\n            throw new Error('Glyph ' + glyph.name + ' (' + i + '): advanceWidth is not a number.');\n        }\n\n        if (firstCharIndex > unicode || firstCharIndex === undefined) {\n            // ignore .notdef char\n            if (unicode > 0) {\n                firstCharIndex = unicode;\n            }\n        }\n\n        if (lastCharIndex < unicode) {\n            lastCharIndex = unicode;\n        }\n\n        var position = os2.getUnicodeRange(unicode);\n        if (position < 32) {\n            ulUnicodeRange1 |= 1 << position;\n        } else if (position < 64) {\n            ulUnicodeRange2 |= 1 << position - 32;\n        } else if (position < 96) {\n            ulUnicodeRange3 |= 1 << position - 64;\n        } else if (position < 123) {\n            ulUnicodeRange4 |= 1 << position - 96;\n        } else {\n            throw new Error('Unicode ranges bits > 123 are reserved for internal usage');\n        }\n        // Skip non-important characters.\n        if (glyph.name === '.notdef') { continue; }\n        var metrics = glyph.getMetrics();\n        xMins.push(metrics.xMin);\n        yMins.push(metrics.yMin);\n        xMaxs.push(metrics.xMax);\n        yMaxs.push(metrics.yMax);\n        leftSideBearings.push(metrics.leftSideBearing);\n        rightSideBearings.push(metrics.rightSideBearing);\n        advanceWidths.push(glyph.advanceWidth);\n    }\n\n    var globals = {\n        xMin: Math.min.apply(null, xMins),\n        yMin: Math.min.apply(null, yMins),\n        xMax: Math.max.apply(null, xMaxs),\n        yMax: Math.max.apply(null, yMaxs),\n        advanceWidthMax: Math.max.apply(null, advanceWidths),\n        advanceWidthAvg: average(advanceWidths),\n        minLeftSideBearing: Math.min.apply(null, leftSideBearings),\n        maxLeftSideBearing: Math.max.apply(null, leftSideBearings),\n        minRightSideBearing: Math.min.apply(null, rightSideBearings)\n    };\n    globals.ascender = font.ascender;\n    globals.descender = font.descender;\n\n    var headTable = head.make({\n        flags: 3, // 00000011 (baseline for font at y=0; left sidebearing point at x=0)\n        unitsPerEm: font.unitsPerEm,\n        xMin: globals.xMin,\n        yMin: globals.yMin,\n        xMax: globals.xMax,\n        yMax: globals.yMax,\n        lowestRecPPEM: 3,\n        createdTimestamp: font.createdTimestamp\n    });\n\n    var hheaTable = hhea.make({\n        ascender: globals.ascender,\n        descender: globals.descender,\n        advanceWidthMax: globals.advanceWidthMax,\n        minLeftSideBearing: globals.minLeftSideBearing,\n        minRightSideBearing: globals.minRightSideBearing,\n        xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),\n        numberOfHMetrics: font.glyphs.length\n    });\n\n    var maxpTable = maxp.make(font.glyphs.length);\n\n    var os2Table = os2.make(Object.assign({\n        xAvgCharWidth: Math.round(globals.advanceWidthAvg),\n        usFirstCharIndex: firstCharIndex,\n        usLastCharIndex: lastCharIndex,\n        ulUnicodeRange1: ulUnicodeRange1,\n        ulUnicodeRange2: ulUnicodeRange2,\n        ulUnicodeRange3: ulUnicodeRange3,\n        ulUnicodeRange4: ulUnicodeRange4,\n        // See http://typophile.com/node/13081 for more info on vertical metrics.\n        // We get metrics for typical characters (such as \"x\" for xHeight).\n        // We provide some fallback characters if characters are unavailable: their\n        // ordering was chosen experimentally.\n        sTypoAscender: globals.ascender,\n        sTypoDescender: globals.descender,\n        sTypoLineGap: 0,\n        usWinAscent: globals.yMax,\n        usWinDescent: Math.abs(globals.yMin),\n        ulCodePageRange1: 1, // FIXME: hard-code Latin 1 support for now\n        sxHeight: metricsForChar(font, 'xyvw', {yMax: Math.round(globals.ascender / 2)}).yMax,\n        sCapHeight: metricsForChar(font, 'HIKLEFJMNTZBDPRAGOQSUVWXY', globals).yMax,\n        usDefaultChar: font.hasChar(' ') ? 32 : 0, // Use space as the default character, if available.\n        usBreakChar: font.hasChar(' ') ? 32 : 0, // Use space as the break character, if available.\n    }, font.tables.os2));\n\n    var hmtxTable = hmtx.make(font.glyphs);\n    var cmapTable = cmap.make(font.glyphs);\n\n    var englishFamilyName = font.getEnglishName('fontFamily');\n    var englishStyleName = font.getEnglishName('fontSubfamily');\n    var englishFullName = englishFamilyName + ' ' + englishStyleName;\n    var postScriptName = font.getEnglishName('postScriptName');\n    if (!postScriptName) {\n        postScriptName = englishFamilyName.replace(/\\s/g, '') + '-' + englishStyleName;\n    }\n\n    var names = {};\n    for (var n in font.names) {\n        names[n] = font.names[n];\n    }\n\n    if (!names.uniqueID) {\n        names.uniqueID = {en: font.getEnglishName('manufacturer') + ':' + englishFullName};\n    }\n\n    if (!names.postScriptName) {\n        names.postScriptName = {en: postScriptName};\n    }\n\n    if (!names.preferredFamily) {\n        names.preferredFamily = font.names.fontFamily;\n    }\n\n    if (!names.preferredSubfamily) {\n        names.preferredSubfamily = font.names.fontSubfamily;\n    }\n\n    var languageTags = [];\n    var nameTable = _name.make(names, languageTags);\n    var ltagTable = (languageTags.length > 0 ? ltag.make(languageTags) : undefined);\n\n    var postTable = post.make();\n    var cffTable = cff.make(font.glyphs, {\n        version: font.getEnglishName('version'),\n        fullName: englishFullName,\n        familyName: englishFamilyName,\n        weightName: englishStyleName,\n        postScriptName: postScriptName,\n        unitsPerEm: font.unitsPerEm,\n        fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax]\n    });\n\n    var metaTable = (font.metas && Object.keys(font.metas).length > 0) ? meta.make(font.metas) : undefined;\n\n    // The order does not matter because makeSfntTable() will sort them.\n    var tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];\n    if (ltagTable) {\n        tables.push(ltagTable);\n    }\n    // Optional tables\n    if (font.tables.gsub) {\n        tables.push(gsub.make(font.tables.gsub));\n    }\n    if (metaTable) {\n        tables.push(metaTable);\n    }\n\n    var sfntTable = makeSfntTable(tables);\n\n    // Compute the font's checkSum and store it in head.checkSumAdjustment.\n    var bytes = sfntTable.encode();\n    var checkSum = computeCheckSum(bytes);\n    var tableFields = sfntTable.fields;\n    var checkSumAdjusted = false;\n    for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) {\n        if (tableFields[i$1].name === 'head table') {\n            tableFields[i$1].value.checkSumAdjustment = 0xB1B0AFBA - checkSum;\n            checkSumAdjusted = true;\n            break;\n        }\n    }\n\n    if (!checkSumAdjusted) {\n        throw new Error('Could not find head table with checkSum to adjust.');\n    }\n\n    return sfntTable;\n}\n\nvar sfnt = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum: computeCheckSum };\n\n// The Layout object is the prototype of Substitution objects, and provides\n\nfunction searchTag(arr, tag) {\n    /* jshint bitwise: false */\n    var imin = 0;\n    var imax = arr.length - 1;\n    while (imin <= imax) {\n        var imid = (imin + imax) >>> 1;\n        var val = arr[imid].tag;\n        if (val === tag) {\n            return imid;\n        } else if (val < tag) {\n            imin = imid + 1;\n        } else { imax = imid - 1; }\n    }\n    // Not found: return -1-insertion point\n    return -imin - 1;\n}\n\nfunction binSearch(arr, value) {\n    /* jshint bitwise: false */\n    var imin = 0;\n    var imax = arr.length - 1;\n    while (imin <= imax) {\n        var imid = (imin + imax) >>> 1;\n        var val = arr[imid];\n        if (val === value) {\n            return imid;\n        } else if (val < value) {\n            imin = imid + 1;\n        } else { imax = imid - 1; }\n    }\n    // Not found: return -1-insertion point\n    return -imin - 1;\n}\n\n// binary search in a list of ranges (coverage, class definition)\nfunction searchRange(ranges, value) {\n    // jshint bitwise: false\n    var range;\n    var imin = 0;\n    var imax = ranges.length - 1;\n    while (imin <= imax) {\n        var imid = (imin + imax) >>> 1;\n        range = ranges[imid];\n        var start = range.start;\n        if (start === value) {\n            return range;\n        } else if (start < value) {\n            imin = imid + 1;\n        } else { imax = imid - 1; }\n    }\n    if (imin > 0) {\n        range = ranges[imin - 1];\n        if (value > range.end) { return 0; }\n        return range;\n    }\n}\n\n/**\n * @exports opentype.Layout\n * @class\n */\nfunction Layout(font, tableName) {\n    this.font = font;\n    this.tableName = tableName;\n}\n\nLayout.prototype = {\n\n    /**\n     * Binary search an object by \"tag\" property\n     * @instance\n     * @function searchTag\n     * @memberof opentype.Layout\n     * @param  {Array} arr\n     * @param  {string} tag\n     * @return {number}\n     */\n    searchTag: searchTag,\n\n    /**\n     * Binary search in a list of numbers\n     * @instance\n     * @function binSearch\n     * @memberof opentype.Layout\n     * @param  {Array} arr\n     * @param  {number} value\n     * @return {number}\n     */\n    binSearch: binSearch,\n\n    /**\n     * Get or create the Layout table (GSUB, GPOS etc).\n     * @param  {boolean} create - Whether to create a new one.\n     * @return {Object} The GSUB or GPOS table.\n     */\n    getTable: function(create) {\n        var layout = this.font.tables[this.tableName];\n        if (!layout && create) {\n            layout = this.font.tables[this.tableName] = this.createDefaultTable();\n        }\n        return layout;\n    },\n\n    /**\n     * Returns all scripts in the substitution table.\n     * @instance\n     * @return {Array}\n     */\n    getScriptNames: function() {\n        var layout = this.getTable();\n        if (!layout) { return []; }\n        return layout.scripts.map(function(script) {\n            return script.tag;\n        });\n    },\n\n    /**\n     * Returns the best bet for a script name.\n     * Returns 'DFLT' if it exists.\n     * If not, returns 'latn' if it exists.\n     * If neither exist, returns undefined.\n     */\n    getDefaultScriptName: function() {\n        var layout = this.getTable();\n        if (!layout) { return; }\n        var hasLatn = false;\n        for (var i = 0; i < layout.scripts.length; i++) {\n            var name = layout.scripts[i].tag;\n            if (name === 'DFLT') { return name; }\n            if (name === 'latn') { hasLatn = true; }\n        }\n        if (hasLatn) { return 'latn'; }\n    },\n\n    /**\n     * Returns all LangSysRecords in the given script.\n     * @instance\n     * @param {string} [script='DFLT']\n     * @param {boolean} create - forces the creation of this script table if it doesn't exist.\n     * @return {Object} An object with tag and script properties.\n     */\n    getScriptTable: function(script, create) {\n        var layout = this.getTable(create);\n        if (layout) {\n            script = script || 'DFLT';\n            var scripts = layout.scripts;\n            var pos = searchTag(layout.scripts, script);\n            if (pos >= 0) {\n                return scripts[pos].script;\n            } else if (create) {\n                var scr = {\n                    tag: script,\n                    script: {\n                        defaultLangSys: {reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: []},\n                        langSysRecords: []\n                    }\n                };\n                scripts.splice(-1 - pos, 0, scr);\n                return scr.script;\n            }\n        }\n    },\n\n    /**\n     * Returns a language system table\n     * @instance\n     * @param {string} [script='DFLT']\n     * @param {string} [language='dlft']\n     * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.\n     * @return {Object}\n     */\n    getLangSysTable: function(script, language, create) {\n        var scriptTable = this.getScriptTable(script, create);\n        if (scriptTable) {\n            if (!language || language === 'dflt' || language === 'DFLT') {\n                return scriptTable.defaultLangSys;\n            }\n            var pos = searchTag(scriptTable.langSysRecords, language);\n            if (pos >= 0) {\n                return scriptTable.langSysRecords[pos].langSys;\n            } else if (create) {\n                var langSysRecord = {\n                    tag: language,\n                    langSys: {reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: []}\n                };\n                scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);\n                return langSysRecord.langSys;\n            }\n        }\n    },\n\n    /**\n     * Get a specific feature table.\n     * @instance\n     * @param {string} [script='DFLT']\n     * @param {string} [language='dlft']\n     * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm\n     * @param {boolean} create - forces the creation of the feature table if it doesn't exist.\n     * @return {Object}\n     */\n    getFeatureTable: function(script, language, feature, create) {\n        var langSysTable = this.getLangSysTable(script, language, create);\n        if (langSysTable) {\n            var featureRecord;\n            var featIndexes = langSysTable.featureIndexes;\n            var allFeatures = this.font.tables[this.tableName].features;\n            // The FeatureIndex array of indices is in arbitrary order,\n            // even if allFeatures is sorted alphabetically by feature tag.\n            for (var i = 0; i < featIndexes.length; i++) {\n                featureRecord = allFeatures[featIndexes[i]];\n                if (featureRecord.tag === feature) {\n                    return featureRecord.feature;\n                }\n            }\n            if (create) {\n                var index = allFeatures.length;\n                // Automatic ordering of features would require to shift feature indexes in the script list.\n                check.assert(index === 0 || feature >= allFeatures[index - 1].tag, 'Features must be added in alphabetical order.');\n                featureRecord = {\n                    tag: feature,\n                    feature: { params: 0, lookupListIndexes: [] }\n                };\n                allFeatures.push(featureRecord);\n                featIndexes.push(index);\n                return featureRecord.feature;\n            }\n        }\n    },\n\n    /**\n     * Get the lookup tables of a given type for a script/language/feature.\n     * @instance\n     * @param {string} [script='DFLT']\n     * @param {string} [language='dlft']\n     * @param {string} feature - 4-letter feature code\n     * @param {number} lookupType - 1 to 9\n     * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.\n     * @return {Object[]}\n     */\n    getLookupTables: function(script, language, feature, lookupType, create) {\n        var featureTable = this.getFeatureTable(script, language, feature, create);\n        var tables = [];\n        if (featureTable) {\n            var lookupTable;\n            var lookupListIndexes = featureTable.lookupListIndexes;\n            var allLookups = this.font.tables[this.tableName].lookups;\n            // lookupListIndexes are in no particular order, so use naive search.\n            for (var i = 0; i < lookupListIndexes.length; i++) {\n                lookupTable = allLookups[lookupListIndexes[i]];\n                if (lookupTable.lookupType === lookupType) {\n                    tables.push(lookupTable);\n                }\n            }\n            if (tables.length === 0 && create) {\n                lookupTable = {\n                    lookupType: lookupType,\n                    lookupFlag: 0,\n                    subtables: [],\n                    markFilteringSet: undefined\n                };\n                var index = allLookups.length;\n                allLookups.push(lookupTable);\n                lookupListIndexes.push(index);\n                return [lookupTable];\n            }\n        }\n        return tables;\n    },\n\n    /**\n     * Find a glyph in a class definition table\n     * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table\n     * @param {object} classDefTable - an OpenType Layout class definition table\n     * @param {number} glyphIndex - the index of the glyph to find\n     * @returns {number} -1 if not found\n     */\n    getGlyphClass: function(classDefTable, glyphIndex) {\n        switch (classDefTable.format) {\n            case 1:\n                if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {\n                    return classDefTable.classes[glyphIndex - classDefTable.startGlyph];\n                }\n                return 0;\n            case 2:\n                var range = searchRange(classDefTable.ranges, glyphIndex);\n                return range ? range.classId : 0;\n        }\n    },\n\n    /**\n     * Find a glyph in a coverage table\n     * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table\n     * @param {object} coverageTable - an OpenType Layout coverage table\n     * @param {number} glyphIndex - the index of the glyph to find\n     * @returns {number} -1 if not found\n     */\n    getCoverageIndex: function(coverageTable, glyphIndex) {\n        switch (coverageTable.format) {\n            case 1:\n                var index = binSearch(coverageTable.glyphs, glyphIndex);\n                return index >= 0 ? index : -1;\n            case 2:\n                var range = searchRange(coverageTable.ranges, glyphIndex);\n                return range ? range.index + glyphIndex - range.start : -1;\n        }\n    },\n\n    /**\n     * Returns the list of glyph indexes of a coverage table.\n     * Format 1: the list is stored raw\n     * Format 2: compact list as range records.\n     * @instance\n     * @param  {Object} coverageTable\n     * @return {Array}\n     */\n    expandCoverage: function(coverageTable) {\n        if (coverageTable.format === 1) {\n            return coverageTable.glyphs;\n        } else {\n            var glyphs = [];\n            var ranges = coverageTable.ranges;\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                var start = range.start;\n                var end = range.end;\n                for (var j = start; j <= end; j++) {\n                    glyphs.push(j);\n                }\n            }\n            return glyphs;\n        }\n    }\n\n};\n\n// The Position object provides utility methods to manipulate\n\n/**\n * @exports opentype.Position\n * @class\n * @extends opentype.Layout\n * @param {opentype.Font}\n * @constructor\n */\nfunction Position(font) {\n    Layout.call(this, font, 'gpos');\n}\n\nPosition.prototype = Layout.prototype;\n\n/**\n * Init some data for faster and easier access later.\n */\nPosition.prototype.init = function() {\n    var script = this.getDefaultScriptName();\n    this.defaultKerningTables = this.getKerningTables(script);\n};\n\n/**\n * Find a glyph pair in a list of lookup tables of type 2 and retrieve the xAdvance kerning value.\n *\n * @param {integer} leftIndex - left glyph index\n * @param {integer} rightIndex - right glyph index\n * @returns {integer}\n */\nPosition.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {\n    for (var i = 0; i < kerningLookups.length; i++) {\n        var subtables = kerningLookups[i].subtables;\n        for (var j = 0; j < subtables.length; j++) {\n            var subtable = subtables[j];\n            var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);\n            if (covIndex < 0) { continue; }\n            switch (subtable.posFormat) {\n                case 1:\n                    // Search Pair Adjustment Positioning Format 1\n                    var pairSet = subtable.pairSets[covIndex];\n                    for (var k = 0; k < pairSet.length; k++) {\n                        var pair = pairSet[k];\n                        if (pair.secondGlyph === rightIndex) {\n                            return pair.value1 && pair.value1.xAdvance || 0;\n                        }\n                    }\n                    break;      // left glyph found, not right glyph - try next subtable\n                case 2:\n                    // Search Pair Adjustment Positioning Format 2\n                    var class1 = this.getGlyphClass(subtable.classDef1, leftIndex);\n                    var class2 = this.getGlyphClass(subtable.classDef2, rightIndex);\n                    var pair$1 = subtable.classRecords[class1][class2];\n                    return pair$1.value1 && pair$1.value1.xAdvance || 0;\n            }\n        }\n    }\n    return 0;\n};\n\n/**\n * List all kerning lookup tables.\n *\n * @param {string} [script='DFLT'] - use font.position.getDefaultScriptName() for a better default value\n * @param {string} [language='dflt']\n * @return {object[]} The list of kerning lookup tables (may be empty), or undefined if there is no GPOS table (and we should use the kern table)\n */\nPosition.prototype.getKerningTables = function(script, language) {\n    if (this.font.tables.gpos) {\n        return this.getLookupTables(script, language, 'kern', 2);\n    }\n};\n\n// The Substitution object provides utility methods to manipulate\n\n/**\n * @exports opentype.Substitution\n * @class\n * @extends opentype.Layout\n * @param {opentype.Font}\n * @constructor\n */\nfunction Substitution(font) {\n    Layout.call(this, font, 'gsub');\n}\n\n// Check if 2 arrays of primitives are equal.\nfunction arraysEqual(ar1, ar2) {\n    var n = ar1.length;\n    if (n !== ar2.length) { return false; }\n    for (var i = 0; i < n; i++) {\n        if (ar1[i] !== ar2[i]) { return false; }\n    }\n    return true;\n}\n\n// Find the first subtable of a lookup table in a particular format.\nfunction getSubstFormat(lookupTable, format, defaultSubtable) {\n    var subtables = lookupTable.subtables;\n    for (var i = 0; i < subtables.length; i++) {\n        var subtable = subtables[i];\n        if (subtable.substFormat === format) {\n            return subtable;\n        }\n    }\n    if (defaultSubtable) {\n        subtables.push(defaultSubtable);\n        return defaultSubtable;\n    }\n    return undefined;\n}\n\nSubstitution.prototype = Layout.prototype;\n\n/**\n * Create a default GSUB table.\n * @return {Object} gsub - The GSUB table.\n */\nSubstitution.prototype.createDefaultTable = function() {\n    // Generate a default empty GSUB table with just a DFLT script and dflt lang sys.\n    return {\n        version: 1,\n        scripts: [{\n            tag: 'DFLT',\n            script: {\n                defaultLangSys: { reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: [] },\n                langSysRecords: []\n            }\n        }],\n        features: [],\n        lookups: []\n    };\n};\n\n/**\n * List all single substitutions (lookup type 1) for a given script, language, and feature.\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n * @param {string} feature - 4-character feature name ('aalt', 'salt', 'ss01'...)\n * @return {Array} substitutions - The list of substitutions.\n */\nSubstitution.prototype.getSingle = function(feature, script, language) {\n    var substitutions = [];\n    var lookupTables = this.getLookupTables(script, language, feature, 1);\n    for (var idx = 0; idx < lookupTables.length; idx++) {\n        var subtables = lookupTables[idx].subtables;\n        for (var i = 0; i < subtables.length; i++) {\n            var subtable = subtables[i];\n            var glyphs = this.expandCoverage(subtable.coverage);\n            var j = (void 0);\n            if (subtable.substFormat === 1) {\n                var delta = subtable.deltaGlyphId;\n                for (j = 0; j < glyphs.length; j++) {\n                    var glyph = glyphs[j];\n                    substitutions.push({ sub: glyph, by: glyph + delta });\n                }\n            } else {\n                var substitute = subtable.substitute;\n                for (j = 0; j < glyphs.length; j++) {\n                    substitutions.push({ sub: glyphs[j], by: substitute[j] });\n                }\n            }\n        }\n    }\n    return substitutions;\n};\n\n/**\n * List all multiple substitutions (lookup type 2) for a given script, language, and feature.\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n * @param {string} feature - 4-character feature name ('ccmp', 'stch')\n * @return {Array} substitutions - The list of substitutions.\n */\nSubstitution.prototype.getMultiple = function(feature, script, language) {\n    var substitutions = [];\n    var lookupTables = this.getLookupTables(script, language, feature, 2);\n    for (var idx = 0; idx < lookupTables.length; idx++) {\n        var subtables = lookupTables[idx].subtables;\n        for (var i = 0; i < subtables.length; i++) {\n            var subtable = subtables[i];\n            var glyphs = this.expandCoverage(subtable.coverage);\n            var j = (void 0);\n\n            for (j = 0; j < glyphs.length; j++) {\n                var glyph = glyphs[j];\n                var replacements = subtable.sequences[j];\n                substitutions.push({ sub: glyph, by: replacements });\n            }\n        }\n    }\n    return substitutions;\n};\n\n/**\n * List all alternates (lookup type 3) for a given script, language, and feature.\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n * @param {string} feature - 4-character feature name ('aalt', 'salt'...)\n * @return {Array} alternates - The list of alternates\n */\nSubstitution.prototype.getAlternates = function(feature, script, language) {\n    var alternates = [];\n    var lookupTables = this.getLookupTables(script, language, feature, 3);\n    for (var idx = 0; idx < lookupTables.length; idx++) {\n        var subtables = lookupTables[idx].subtables;\n        for (var i = 0; i < subtables.length; i++) {\n            var subtable = subtables[i];\n            var glyphs = this.expandCoverage(subtable.coverage);\n            var alternateSets = subtable.alternateSets;\n            for (var j = 0; j < glyphs.length; j++) {\n                alternates.push({ sub: glyphs[j], by: alternateSets[j] });\n            }\n        }\n    }\n    return alternates;\n};\n\n/**\n * List all ligatures (lookup type 4) for a given script, language, and feature.\n * The result is an array of ligature objects like { sub: [ids], by: id }\n * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n * @return {Array} ligatures - The list of ligatures.\n */\nSubstitution.prototype.getLigatures = function(feature, script, language) {\n    var ligatures = [];\n    var lookupTables = this.getLookupTables(script, language, feature, 4);\n    for (var idx = 0; idx < lookupTables.length; idx++) {\n        var subtables = lookupTables[idx].subtables;\n        for (var i = 0; i < subtables.length; i++) {\n            var subtable = subtables[i];\n            var glyphs = this.expandCoverage(subtable.coverage);\n            var ligatureSets = subtable.ligatureSets;\n            for (var j = 0; j < glyphs.length; j++) {\n                var startGlyph = glyphs[j];\n                var ligSet = ligatureSets[j];\n                for (var k = 0; k < ligSet.length; k++) {\n                    var lig = ligSet[k];\n                    ligatures.push({\n                        sub: [startGlyph].concat(lig.components),\n                        by: lig.ligGlyph\n                    });\n                }\n            }\n        }\n    }\n    return ligatures;\n};\n\n/**\n * Add or modify a single substitution (lookup type 1)\n * Format 2, more flexible, is always used.\n * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)\n * @param {Object} substitution - { sub: id, by: id } (format 1 is not supported)\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n */\nSubstitution.prototype.addSingle = function(feature, substitution, script, language) {\n    var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];\n    var subtable = getSubstFormat(lookupTable, 2, {                // lookup type 1 subtable, format 2, coverage format 1\n        substFormat: 2,\n        coverage: {format: 1, glyphs: []},\n        substitute: []\n    });\n    check.assert(subtable.coverage.format === 1, 'Single: unable to modify coverage table format ' + subtable.coverage.format);\n    var coverageGlyph = substitution.sub;\n    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n    if (pos < 0) {\n        pos = -1 - pos;\n        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n        subtable.substitute.splice(pos, 0, 0);\n    }\n    subtable.substitute[pos] = substitution.by;\n};\n\n/**\n * Add or modify a multiple substitution (lookup type 2)\n * @param {string} feature - 4-letter feature name ('ccmp', 'stch')\n * @param {Object} substitution - { sub: id, by: [id] } for format 2.\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n */\nSubstitution.prototype.addMultiple = function(feature, substitution, script, language) {\n    check.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: \"by\" must be an array of two or more ids');\n    var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];\n    var subtable = getSubstFormat(lookupTable, 1, {                // lookup type 2 subtable, format 1, coverage format 1\n        substFormat: 1,\n        coverage: {format: 1, glyphs: []},\n        sequences: []\n    });\n    check.assert(subtable.coverage.format === 1, 'Multiple: unable to modify coverage table format ' + subtable.coverage.format);\n    var coverageGlyph = substitution.sub;\n    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n    if (pos < 0) {\n        pos = -1 - pos;\n        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n        subtable.sequences.splice(pos, 0, 0);\n    }\n    subtable.sequences[pos] = substitution.by;\n};\n\n/**\n * Add or modify an alternate substitution (lookup type 3)\n * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)\n * @param {Object} substitution - { sub: id, by: [ids] }\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n */\nSubstitution.prototype.addAlternate = function(feature, substitution, script, language) {\n    var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];\n    var subtable = getSubstFormat(lookupTable, 1, {                // lookup type 3 subtable, format 1, coverage format 1\n        substFormat: 1,\n        coverage: {format: 1, glyphs: []},\n        alternateSets: []\n    });\n    check.assert(subtable.coverage.format === 1, 'Alternate: unable to modify coverage table format ' + subtable.coverage.format);\n    var coverageGlyph = substitution.sub;\n    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n    if (pos < 0) {\n        pos = -1 - pos;\n        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n        subtable.alternateSets.splice(pos, 0, 0);\n    }\n    subtable.alternateSets[pos] = substitution.by;\n};\n\n/**\n * Add a ligature (lookup type 4)\n * Ligatures with more components must be stored ahead of those with fewer components in order to be found\n * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)\n * @param {Object} ligature - { sub: [ids], by: id }\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n */\nSubstitution.prototype.addLigature = function(feature, ligature, script, language) {\n    var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];\n    var subtable = lookupTable.subtables[0];\n    if (!subtable) {\n        subtable = {                // lookup type 4 subtable, format 1, coverage format 1\n            substFormat: 1,\n            coverage: { format: 1, glyphs: [] },\n            ligatureSets: []\n        };\n        lookupTable.subtables[0] = subtable;\n    }\n    check.assert(subtable.coverage.format === 1, 'Ligature: unable to modify coverage table format ' + subtable.coverage.format);\n    var coverageGlyph = ligature.sub[0];\n    var ligComponents = ligature.sub.slice(1);\n    var ligatureTable = {\n        ligGlyph: ligature.by,\n        components: ligComponents\n    };\n    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n    if (pos >= 0) {\n        // ligatureSet already exists\n        var ligatureSet = subtable.ligatureSets[pos];\n        for (var i = 0; i < ligatureSet.length; i++) {\n            // If ligature already exists, return.\n            if (arraysEqual(ligatureSet[i].components, ligComponents)) {\n                return;\n            }\n        }\n        // ligature does not exist: add it.\n        ligatureSet.push(ligatureTable);\n    } else {\n        // Create a new ligatureSet and add coverage for the first glyph.\n        pos = -1 - pos;\n        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n        subtable.ligatureSets.splice(pos, 0, [ligatureTable]);\n    }\n};\n\n/**\n * List all feature data for a given script and language.\n * @param {string} feature - 4-letter feature name\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n * @return {Array} substitutions - The list of substitutions.\n */\nSubstitution.prototype.getFeature = function(feature, script, language) {\n    if (/ss\\d\\d/.test(feature)) {\n        // ss01 - ss20\n        return this.getSingle(feature, script, language);\n    }\n    switch (feature) {\n        case 'aalt':\n        case 'salt':\n            return this.getSingle(feature, script, language)\n                    .concat(this.getAlternates(feature, script, language));\n        case 'dlig':\n        case 'liga':\n        case 'rlig':\n            return this.getLigatures(feature, script, language);\n        case 'ccmp':\n            return this.getMultiple(feature, script, language)\n                .concat(this.getLigatures(feature, script, language));\n        case 'stch':\n            return this.getMultiple(feature, script, language);\n    }\n    return undefined;\n};\n\n/**\n * Add a substitution to a feature for a given script and language.\n * @param {string} feature - 4-letter feature name\n * @param {Object} sub - the substitution to add (an object like { sub: id or [ids], by: id or [ids] })\n * @param {string} [script='DFLT']\n * @param {string} [language='dflt']\n */\nSubstitution.prototype.add = function(feature, sub, script, language) {\n    if (/ss\\d\\d/.test(feature)) {\n        // ss01 - ss20\n        return this.addSingle(feature, sub, script, language);\n    }\n    switch (feature) {\n        case 'aalt':\n        case 'salt':\n            if (typeof sub.by === 'number') {\n                return this.addSingle(feature, sub, script, language);\n            }\n            return this.addAlternate(feature, sub, script, language);\n        case 'dlig':\n        case 'liga':\n        case 'rlig':\n            return this.addLigature(feature, sub, script, language);\n        case 'ccmp':\n            if (sub.by instanceof Array) {\n                return this.addMultiple(feature, sub, script, language);\n            }\n            return this.addLigature(feature, sub, script, language);\n    }\n    return undefined;\n};\n\nfunction isBrowser() {\n    return typeof window !== 'undefined';\n}\n\nfunction nodeBufferToArrayBuffer(buffer) {\n    var ab = new ArrayBuffer(buffer.length);\n    var view = new Uint8Array(ab);\n    for (var i = 0; i < buffer.length; ++i) {\n        view[i] = buffer[i];\n    }\n\n    return ab;\n}\n\nfunction arrayBufferToNodeBuffer(ab) {\n    var buffer = new Buffer(ab.byteLength);\n    var view = new Uint8Array(ab);\n    for (var i = 0; i < buffer.length; ++i) {\n        buffer[i] = view[i];\n    }\n\n    return buffer;\n}\n\nfunction checkArgument(expression, message) {\n    if (!expression) {\n        throw message;\n    }\n}\n\n// The `glyf` table describes the glyphs in TrueType outline format.\n\n// Parse the coordinate data for a glyph.\nfunction parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {\n    var v;\n    if ((flag & shortVectorBitMask) > 0) {\n        // The coordinate is 1 byte long.\n        v = p.parseByte();\n        // The `same` bit is re-used for short values to signify the sign of the value.\n        if ((flag & sameBitMask) === 0) {\n            v = -v;\n        }\n\n        v = previousValue + v;\n    } else {\n        //  The coordinate is 2 bytes long.\n        // If the `same` bit is set, the coordinate is the same as the previous coordinate.\n        if ((flag & sameBitMask) > 0) {\n            v = previousValue;\n        } else {\n            // Parse the coordinate as a signed 16-bit delta value.\n            v = previousValue + p.parseShort();\n        }\n    }\n\n    return v;\n}\n\n// Parse a TrueType glyph.\nfunction parseGlyph(glyph, data, start) {\n    var p = new parse.Parser(data, start);\n    glyph.numberOfContours = p.parseShort();\n    glyph._xMin = p.parseShort();\n    glyph._yMin = p.parseShort();\n    glyph._xMax = p.parseShort();\n    glyph._yMax = p.parseShort();\n    var flags;\n    var flag;\n\n    if (glyph.numberOfContours > 0) {\n        // This glyph is not a composite.\n        var endPointIndices = glyph.endPointIndices = [];\n        for (var i = 0; i < glyph.numberOfContours; i += 1) {\n            endPointIndices.push(p.parseUShort());\n        }\n\n        glyph.instructionLength = p.parseUShort();\n        glyph.instructions = [];\n        for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) {\n            glyph.instructions.push(p.parseByte());\n        }\n\n        var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;\n        flags = [];\n        for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) {\n            flag = p.parseByte();\n            flags.push(flag);\n            // If bit 3 is set, we repeat this flag n times, where n is the next byte.\n            if ((flag & 8) > 0) {\n                var repeatCount = p.parseByte();\n                for (var j = 0; j < repeatCount; j += 1) {\n                    flags.push(flag);\n                    i$2 += 1;\n                }\n            }\n        }\n\n        check.argument(flags.length === numberOfCoordinates, 'Bad flags.');\n\n        if (endPointIndices.length > 0) {\n            var points = [];\n            var point;\n            // X/Y coordinates are relative to the previous point, except for the first point which is relative to 0,0.\n            if (numberOfCoordinates > 0) {\n                for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) {\n                    flag = flags[i$3];\n                    point = {};\n                    point.onCurve = !!(flag & 1);\n                    point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0;\n                    points.push(point);\n                }\n\n                var px = 0;\n                for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) {\n                    flag = flags[i$4];\n                    point = points[i$4];\n                    point.x = parseGlyphCoordinate(p, flag, px, 2, 16);\n                    px = point.x;\n                }\n\n                var py = 0;\n                for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) {\n                    flag = flags[i$5];\n                    point = points[i$5];\n                    point.y = parseGlyphCoordinate(p, flag, py, 4, 32);\n                    py = point.y;\n                }\n            }\n\n            glyph.points = points;\n        } else {\n            glyph.points = [];\n        }\n    } else if (glyph.numberOfContours === 0) {\n        glyph.points = [];\n    } else {\n        glyph.isComposite = true;\n        glyph.points = [];\n        glyph.components = [];\n        var moreComponents = true;\n        while (moreComponents) {\n            flags = p.parseUShort();\n            var component = {\n                glyphIndex: p.parseUShort(),\n                xScale: 1,\n                scale01: 0,\n                scale10: 0,\n                yScale: 1,\n                dx: 0,\n                dy: 0\n            };\n            if ((flags & 1) > 0) {\n                // The arguments are words\n                if ((flags & 2) > 0) {\n                    // values are offset\n                    component.dx = p.parseShort();\n                    component.dy = p.parseShort();\n                } else {\n                    // values are matched points\n                    component.matchedPoints = [p.parseUShort(), p.parseUShort()];\n                }\n\n            } else {\n                // The arguments are bytes\n                if ((flags & 2) > 0) {\n                    // values are offset\n                    component.dx = p.parseChar();\n                    component.dy = p.parseChar();\n                } else {\n                    // values are matched points\n                    component.matchedPoints = [p.parseByte(), p.parseByte()];\n                }\n            }\n\n            if ((flags & 8) > 0) {\n                // We have a scale\n                component.xScale = component.yScale = p.parseF2Dot14();\n            } else if ((flags & 64) > 0) {\n                // We have an X / Y scale\n                component.xScale = p.parseF2Dot14();\n                component.yScale = p.parseF2Dot14();\n            } else if ((flags & 128) > 0) {\n                // We have a 2x2 transformation\n                component.xScale = p.parseF2Dot14();\n                component.scale01 = p.parseF2Dot14();\n                component.scale10 = p.parseF2Dot14();\n                component.yScale = p.parseF2Dot14();\n            }\n\n            glyph.components.push(component);\n            moreComponents = !!(flags & 32);\n        }\n        if (flags & 0x100) {\n            // We have instructions\n            glyph.instructionLength = p.parseUShort();\n            glyph.instructions = [];\n            for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) {\n                glyph.instructions.push(p.parseByte());\n            }\n        }\n    }\n}\n\n// Transform an array of points and return a new array.\nfunction transformPoints(points, transform) {\n    var newPoints = [];\n    for (var i = 0; i < points.length; i += 1) {\n        var pt = points[i];\n        var newPt = {\n            x: transform.xScale * pt.x + transform.scale01 * pt.y + transform.dx,\n            y: transform.scale10 * pt.x + transform.yScale * pt.y + transform.dy,\n            onCurve: pt.onCurve,\n            lastPointOfContour: pt.lastPointOfContour\n        };\n        newPoints.push(newPt);\n    }\n\n    return newPoints;\n}\n\nfunction getContours(points) {\n    var contours = [];\n    var currentContour = [];\n    for (var i = 0; i < points.length; i += 1) {\n        var pt = points[i];\n        currentContour.push(pt);\n        if (pt.lastPointOfContour) {\n            contours.push(currentContour);\n            currentContour = [];\n        }\n    }\n\n    check.argument(currentContour.length === 0, 'There are still points left in the current contour.');\n    return contours;\n}\n\n// Convert the TrueType glyph outline to a Path.\nfunction getPath(points) {\n    var p = new Path();\n    if (!points) {\n        return p;\n    }\n\n    var contours = getContours(points);\n\n    for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) {\n        var contour = contours[contourIndex];\n\n        var prev = null;\n        var curr = contour[contour.length - 1];\n        var next = contour[0];\n\n        if (curr.onCurve) {\n            p.moveTo(curr.x, curr.y);\n        } else {\n            if (next.onCurve) {\n                p.moveTo(next.x, next.y);\n            } else {\n                // If both first and last points are off-curve, start at their middle.\n                var start = {x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5};\n                p.moveTo(start.x, start.y);\n            }\n        }\n\n        for (var i = 0; i < contour.length; ++i) {\n            prev = curr;\n            curr = next;\n            next = contour[(i + 1) % contour.length];\n\n            if (curr.onCurve) {\n                // This is a straight line.\n                p.lineTo(curr.x, curr.y);\n            } else {\n                var prev2 = prev;\n                var next2 = next;\n\n                if (!prev.onCurve) {\n                    prev2 = { x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 };\n                }\n\n                if (!next.onCurve) {\n                    next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n                }\n\n                p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);\n            }\n        }\n\n        p.closePath();\n    }\n    return p;\n}\n\nfunction buildPath(glyphs, glyph) {\n    if (glyph.isComposite) {\n        for (var j = 0; j < glyph.components.length; j += 1) {\n            var component = glyph.components[j];\n            var componentGlyph = glyphs.get(component.glyphIndex);\n            // Force the ttfGlyphLoader to parse the glyph.\n            componentGlyph.getPath();\n            if (componentGlyph.points) {\n                var transformedPoints = (void 0);\n                if (component.matchedPoints === undefined) {\n                    // component positioned by offset\n                    transformedPoints = transformPoints(componentGlyph.points, component);\n                } else {\n                    // component positioned by matched points\n                    if ((component.matchedPoints[0] > glyph.points.length - 1) ||\n                        (component.matchedPoints[1] > componentGlyph.points.length - 1)) {\n                        throw Error('Matched points out of range in ' + glyph.name);\n                    }\n                    var firstPt = glyph.points[component.matchedPoints[0]];\n                    var secondPt = componentGlyph.points[component.matchedPoints[1]];\n                    var transform = {\n                        xScale: component.xScale, scale01: component.scale01,\n                        scale10: component.scale10, yScale: component.yScale,\n                        dx: 0, dy: 0\n                    };\n                    secondPt = transformPoints([secondPt], transform)[0];\n                    transform.dx = firstPt.x - secondPt.x;\n                    transform.dy = firstPt.y - secondPt.y;\n                    transformedPoints = transformPoints(componentGlyph.points, transform);\n                }\n                glyph.points = glyph.points.concat(transformedPoints);\n            }\n        }\n    }\n\n    return getPath(glyph.points);\n}\n\nfunction parseGlyfTableAll(data, start, loca, font) {\n    var glyphs = new glyphset.GlyphSet(font);\n\n    // The last element of the loca table is invalid.\n    for (var i = 0; i < loca.length - 1; i += 1) {\n        var offset = loca[i];\n        var nextOffset = loca[i + 1];\n        if (offset !== nextOffset) {\n            glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n        } else {\n            glyphs.push(i, glyphset.glyphLoader(font, i));\n        }\n    }\n\n    return glyphs;\n}\n\nfunction parseGlyfTableOnLowMemory(data, start, loca, font) {\n    var glyphs = new glyphset.GlyphSet(font);\n\n    font._push = function(i) {\n        var offset = loca[i];\n        var nextOffset = loca[i + 1];\n        if (offset !== nextOffset) {\n            glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n        } else {\n            glyphs.push(i, glyphset.glyphLoader(font, i));\n        }\n    };\n\n    return glyphs;\n}\n\n// Parse all the glyphs according to the offsets from the `loca` table.\nfunction parseGlyfTable(data, start, loca, font, opt) {\n    if (opt.lowMemory)\n        { return parseGlyfTableOnLowMemory(data, start, loca, font); }\n    else\n        { return parseGlyfTableAll(data, start, loca, font); }\n}\n\nvar glyf = { getPath: getPath, parse: parseGlyfTable};\n\n/* A TrueType font hinting interpreter.\n*\n* (c) 2017 Axel Kittenberger\n*\n* This interpreter has been implemented according to this documentation:\n* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html\n*\n* According to the documentation F24DOT6 values are used for pixels.\n* That means calculation is 1/64 pixel accurate and uses integer operations.\n* However, Javascript has floating point operations by default and only\n* those are available. One could make a case to simulate the 1/64 accuracy\n* exactly by truncating after every division operation\n* (for example with << 0) to get pixel exactly results as other TrueType\n* implementations. It may make sense since some fonts are pixel optimized\n* by hand using DELTAP instructions. The current implementation doesn't\n* and rather uses full floating point precision.\n*\n* xScale, yScale and rotation is currently ignored.\n*\n* A few non-trivial instructions are missing as I didn't encounter yet\n* a font that used them to test a possible implementation.\n*\n* Some fonts seem to use undocumented features regarding the twilight zone.\n* Only some of them are implemented as they were encountered.\n*\n* The exports.DEBUG statements are removed on the minified distribution file.\n*/\n\nvar instructionTable;\nvar exec;\nvar execGlyph;\nvar execComponent;\n\n/*\n* Creates a hinting object.\n*\n* There ought to be exactly one\n* for each truetype font that is used for hinting.\n*/\nfunction Hinting(font) {\n    // the font this hinting object is for\n    this.font = font;\n\n    this.getCommands = function (hPoints) {\n        return glyf.getPath(hPoints).commands;\n    };\n\n    // cached states\n    this._fpgmState  =\n    this._prepState  =\n        undefined;\n\n    // errorState\n    // 0 ... all okay\n    // 1 ... had an error in a glyf,\n    //       continue working but stop spamming\n    //       the console\n    // 2 ... error at prep, stop hinting at this ppem\n    // 3 ... error at fpeg, stop hinting for this font at all\n    this._errorState = 0;\n}\n\n/*\n* Not rounding.\n*/\nfunction roundOff(v) {\n    return v;\n}\n\n/*\n* Rounding to grid.\n*/\nfunction roundToGrid(v) {\n    //Rounding in TT is supposed to \"symmetrical around zero\"\n    return Math.sign(v) * Math.round(Math.abs(v));\n}\n\n/*\n* Rounding to double grid.\n*/\nfunction roundToDoubleGrid(v) {\n    return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;\n}\n\n/*\n* Rounding to half grid.\n*/\nfunction roundToHalfGrid(v) {\n    return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);\n}\n\n/*\n* Rounding to up to grid.\n*/\nfunction roundUpToGrid(v) {\n    return Math.sign(v) * Math.ceil(Math.abs(v));\n}\n\n/*\n* Rounding to down to grid.\n*/\nfunction roundDownToGrid(v) {\n    return Math.sign(v) * Math.floor(Math.abs(v));\n}\n\n/*\n* Super rounding.\n*/\nvar roundSuper = function (v) {\n    var period = this.srPeriod;\n    var phase = this.srPhase;\n    var threshold = this.srThreshold;\n    var sign = 1;\n\n    if (v < 0) {\n        v = -v;\n        sign = -1;\n    }\n\n    v += threshold - phase;\n\n    v = Math.trunc(v / period) * period;\n\n    v += phase;\n\n    // according to http://xgridfit.sourceforge.net/round.html\n    if (v < 0) { return phase * sign; }\n\n    return v * sign;\n};\n\n/*\n* Unit vector of x-axis.\n*/\nvar xUnitVector = {\n    x: 1,\n\n    y: 0,\n\n    axis: 'x',\n\n    // Gets the projected distance between two points.\n    // o1/o2 ... if true, respective original position is used.\n    distance: function (p1, p2, o1, o2) {\n        return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);\n    },\n\n    // Moves point p so the moved position has the same relative\n    // position to the moved positions of rp1 and rp2 than the\n    // original positions had.\n    //\n    // See APPENDIX on INTERPOLATE at the bottom of this file.\n    interpolate: function (p, rp1, rp2, pv) {\n        var do1;\n        var do2;\n        var doa1;\n        var doa2;\n        var dm1;\n        var dm2;\n        var dt;\n\n        if (!pv || pv === this) {\n            do1 = p.xo - rp1.xo;\n            do2 = p.xo - rp2.xo;\n            dm1 = rp1.x - rp1.xo;\n            dm2 = rp2.x - rp2.xo;\n            doa1 = Math.abs(do1);\n            doa2 = Math.abs(do2);\n            dt = doa1 + doa2;\n\n            if (dt === 0) {\n                p.x = p.xo + (dm1 + dm2) / 2;\n                return;\n            }\n\n            p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;\n            return;\n        }\n\n        do1 = pv.distance(p, rp1, true, true);\n        do2 = pv.distance(p, rp2, true, true);\n        dm1 = pv.distance(rp1, rp1, false, true);\n        dm2 = pv.distance(rp2, rp2, false, true);\n        doa1 = Math.abs(do1);\n        doa2 = Math.abs(do2);\n        dt = doa1 + doa2;\n\n        if (dt === 0) {\n            xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n            return;\n        }\n\n        xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n    },\n\n    // Slope of line normal to this\n    normalSlope: Number.NEGATIVE_INFINITY,\n\n    // Sets the point 'p' relative to point 'rp'\n    // by the distance 'd'.\n    //\n    // See APPENDIX on SETRELATIVE at the bottom of this file.\n    //\n    // p   ... point to set\n    // rp  ... reference point\n    // d   ... distance on projection vector\n    // pv  ... projection vector (undefined = this)\n    // org ... if true, uses the original position of rp as reference.\n    setRelative: function (p, rp, d, pv, org) {\n        if (!pv || pv === this) {\n            p.x = (org ? rp.xo : rp.x) + d;\n            return;\n        }\n\n        var rpx = org ? rp.xo : rp.x;\n        var rpy = org ? rp.yo : rp.y;\n        var rpdx = rpx + d * pv.x;\n        var rpdy = rpy + d * pv.y;\n\n        p.x = rpdx + (p.y - rpdy) / pv.normalSlope;\n    },\n\n    // Slope of vector line.\n    slope: 0,\n\n    // Touches the point p.\n    touch: function (p) {\n        p.xTouched = true;\n    },\n\n    // Tests if a point p is touched.\n    touched: function (p) {\n        return p.xTouched;\n    },\n\n    // Untouches the point p.\n    untouch: function (p) {\n        p.xTouched = false;\n    }\n};\n\n/*\n* Unit vector of y-axis.\n*/\nvar yUnitVector = {\n    x: 0,\n\n    y: 1,\n\n    axis: 'y',\n\n    // Gets the projected distance between two points.\n    // o1/o2 ... if true, respective original position is used.\n    distance: function (p1, p2, o1, o2) {\n        return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);\n    },\n\n    // Moves point p so the moved position has the same relative\n    // position to the moved positions of rp1 and rp2 than the\n    // original positions had.\n    //\n    // See APPENDIX on INTERPOLATE at the bottom of this file.\n    interpolate: function (p, rp1, rp2, pv) {\n        var do1;\n        var do2;\n        var doa1;\n        var doa2;\n        var dm1;\n        var dm2;\n        var dt;\n\n        if (!pv || pv === this) {\n            do1 = p.yo - rp1.yo;\n            do2 = p.yo - rp2.yo;\n            dm1 = rp1.y - rp1.yo;\n            dm2 = rp2.y - rp2.yo;\n            doa1 = Math.abs(do1);\n            doa2 = Math.abs(do2);\n            dt = doa1 + doa2;\n\n            if (dt === 0) {\n                p.y = p.yo + (dm1 + dm2) / 2;\n                return;\n            }\n\n            p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;\n            return;\n        }\n\n        do1 = pv.distance(p, rp1, true, true);\n        do2 = pv.distance(p, rp2, true, true);\n        dm1 = pv.distance(rp1, rp1, false, true);\n        dm2 = pv.distance(rp2, rp2, false, true);\n        doa1 = Math.abs(do1);\n        doa2 = Math.abs(do2);\n        dt = doa1 + doa2;\n\n        if (dt === 0) {\n            yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n            return;\n        }\n\n        yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n    },\n\n    // Slope of line normal to this.\n    normalSlope: 0,\n\n    // Sets the point 'p' relative to point 'rp'\n    // by the distance 'd'\n    //\n    // See APPENDIX on SETRELATIVE at the bottom of this file.\n    //\n    // p   ... point to set\n    // rp  ... reference point\n    // d   ... distance on projection vector\n    // pv  ... projection vector (undefined = this)\n    // org ... if true, uses the original position of rp as reference.\n    setRelative: function (p, rp, d, pv, org) {\n        if (!pv || pv === this) {\n            p.y = (org ? rp.yo : rp.y) + d;\n            return;\n        }\n\n        var rpx = org ? rp.xo : rp.x;\n        var rpy = org ? rp.yo : rp.y;\n        var rpdx = rpx + d * pv.x;\n        var rpdy = rpy + d * pv.y;\n\n        p.y = rpdy + pv.normalSlope * (p.x - rpdx);\n    },\n\n    // Slope of vector line.\n    slope: Number.POSITIVE_INFINITY,\n\n    // Touches the point p.\n    touch: function (p) {\n        p.yTouched = true;\n    },\n\n    // Tests if a point p is touched.\n    touched: function (p) {\n        return p.yTouched;\n    },\n\n    // Untouches the point p.\n    untouch: function (p) {\n        p.yTouched = false;\n    }\n};\n\nObject.freeze(xUnitVector);\nObject.freeze(yUnitVector);\n\n/*\n* Creates a unit vector that is not x- or y-axis.\n*/\nfunction UnitVector(x, y) {\n    this.x = x;\n    this.y = y;\n    this.axis = undefined;\n    this.slope = y / x;\n    this.normalSlope = -x / y;\n    Object.freeze(this);\n}\n\n/*\n* Gets the projected distance between two points.\n* o1/o2 ... if true, respective original position is used.\n*/\nUnitVector.prototype.distance = function(p1, p2, o1, o2) {\n    return (\n        this.x * xUnitVector.distance(p1, p2, o1, o2) +\n        this.y * yUnitVector.distance(p1, p2, o1, o2)\n    );\n};\n\n/*\n* Moves point p so the moved position has the same relative\n* position to the moved positions of rp1 and rp2 than the\n* original positions had.\n*\n* See APPENDIX on INTERPOLATE at the bottom of this file.\n*/\nUnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {\n    var dm1;\n    var dm2;\n    var do1;\n    var do2;\n    var doa1;\n    var doa2;\n    var dt;\n\n    do1 = pv.distance(p, rp1, true, true);\n    do2 = pv.distance(p, rp2, true, true);\n    dm1 = pv.distance(rp1, rp1, false, true);\n    dm2 = pv.distance(rp2, rp2, false, true);\n    doa1 = Math.abs(do1);\n    doa2 = Math.abs(do2);\n    dt = doa1 + doa2;\n\n    if (dt === 0) {\n        this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n        return;\n    }\n\n    this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n};\n\n/*\n* Sets the point 'p' relative to point 'rp'\n* by the distance 'd'\n*\n* See APPENDIX on SETRELATIVE at the bottom of this file.\n*\n* p   ...  point to set\n* rp  ... reference point\n* d   ... distance on projection vector\n* pv  ... projection vector (undefined = this)\n* org ... if true, uses the original position of rp as reference.\n*/\nUnitVector.prototype.setRelative = function(p, rp, d, pv, org) {\n    pv = pv || this;\n\n    var rpx = org ? rp.xo : rp.x;\n    var rpy = org ? rp.yo : rp.y;\n    var rpdx = rpx + d * pv.x;\n    var rpdy = rpy + d * pv.y;\n\n    var pvns = pv.normalSlope;\n    var fvs = this.slope;\n\n    var px = p.x;\n    var py = p.y;\n\n    p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);\n    p.y = fvs * (p.x - px) + py;\n};\n\n/*\n* Touches the point p.\n*/\nUnitVector.prototype.touch = function(p) {\n    p.xTouched = true;\n    p.yTouched = true;\n};\n\n/*\n* Returns a unit vector with x/y coordinates.\n*/\nfunction getUnitVector(x, y) {\n    var d = Math.sqrt(x * x + y * y);\n\n    x /= d;\n    y /= d;\n\n    if (x === 1 && y === 0) { return xUnitVector; }\n    else if (x === 0 && y === 1) { return yUnitVector; }\n    else { return new UnitVector(x, y); }\n}\n\n/*\n* Creates a point in the hinting engine.\n*/\nfunction HPoint(\n    x,\n    y,\n    lastPointOfContour,\n    onCurve\n) {\n    this.x = this.xo = Math.round(x * 64) / 64; // hinted x value and original x-value\n    this.y = this.yo = Math.round(y * 64) / 64; // hinted y value and original y-value\n\n    this.lastPointOfContour = lastPointOfContour;\n    this.onCurve = onCurve;\n    this.prevPointOnContour = undefined;\n    this.nextPointOnContour = undefined;\n    this.xTouched = false;\n    this.yTouched = false;\n\n    Object.preventExtensions(this);\n}\n\n/*\n* Returns the next touched point on the contour.\n*\n* v  ... unit vector to test touch axis.\n*/\nHPoint.prototype.nextTouched = function(v) {\n    var p = this.nextPointOnContour;\n\n    while (!v.touched(p) && p !== this) { p = p.nextPointOnContour; }\n\n    return p;\n};\n\n/*\n* Returns the previous touched point on the contour\n*\n* v  ... unit vector to test touch axis.\n*/\nHPoint.prototype.prevTouched = function(v) {\n    var p = this.prevPointOnContour;\n\n    while (!v.touched(p) && p !== this) { p = p.prevPointOnContour; }\n\n    return p;\n};\n\n/*\n* The zero point.\n*/\nvar HPZero = Object.freeze(new HPoint(0, 0));\n\n/*\n* The default state of the interpreter.\n*\n* Note: Freezing the defaultState and then deriving from it\n* makes the V8 Javascript engine going awkward,\n* so this is avoided, albeit the defaultState shouldn't\n* ever change.\n*/\nvar defaultState = {\n    cvCutIn: 17 / 16,    // control value cut in\n    deltaBase: 9,\n    deltaShift: 0.125,\n    loop: 1,             // loops some instructions\n    minDis: 1,           // minimum distance\n    autoFlip: true\n};\n\n/*\n* The current state of the interpreter.\n*\n* env  ... 'fpgm' or 'prep' or 'glyf'\n* prog ... the program\n*/\nfunction State(env, prog) {\n    this.env = env;\n    this.stack = [];\n    this.prog = prog;\n\n    switch (env) {\n        case 'glyf' :\n            this.zp0 = this.zp1 = this.zp2 = 1;\n            this.rp0 = this.rp1 = this.rp2 = 0;\n            /* fall through */\n        case 'prep' :\n            this.fv = this.pv = this.dpv = xUnitVector;\n            this.round = roundToGrid;\n    }\n}\n\n/*\n* Executes a glyph program.\n*\n* This does the hinting for each glyph.\n*\n* Returns an array of moved points.\n*\n* glyph: the glyph to hint\n* ppem: the size the glyph is rendered for\n*/\nHinting.prototype.exec = function(glyph, ppem) {\n    if (typeof ppem !== 'number') {\n        throw new Error('Point size is not a number!');\n    }\n\n    // Received a fatal error, don't do any hinting anymore.\n    if (this._errorState > 2) { return; }\n\n    var font = this.font;\n    var prepState = this._prepState;\n\n    if (!prepState || prepState.ppem !== ppem) {\n        var fpgmState = this._fpgmState;\n\n        if (!fpgmState) {\n            // Executes the fpgm state.\n            // This is used by fonts to define functions.\n            State.prototype = defaultState;\n\n            fpgmState =\n            this._fpgmState =\n                new State('fpgm', font.tables.fpgm);\n\n            fpgmState.funcs = [ ];\n            fpgmState.font = font;\n\n            if (exports.DEBUG) {\n                console.log('---EXEC FPGM---');\n                fpgmState.step = -1;\n            }\n\n            try {\n                exec(fpgmState);\n            } catch (e) {\n                console.log('Hinting error in FPGM:' + e);\n                this._errorState = 3;\n                return;\n            }\n        }\n\n        // Executes the prep program for this ppem setting.\n        // This is used by fonts to set cvt values\n        // depending on to be rendered font size.\n\n        State.prototype = fpgmState;\n        prepState =\n        this._prepState =\n            new State('prep', font.tables.prep);\n\n        prepState.ppem = ppem;\n\n        // Creates a copy of the cvt table\n        // and scales it to the current ppem setting.\n        var oCvt = font.tables.cvt;\n        if (oCvt) {\n            var cvt = prepState.cvt = new Array(oCvt.length);\n            var scale = ppem / font.unitsPerEm;\n            for (var c = 0; c < oCvt.length; c++) {\n                cvt[c] = oCvt[c] * scale;\n            }\n        } else {\n            prepState.cvt = [];\n        }\n\n        if (exports.DEBUG) {\n            console.log('---EXEC PREP---');\n            prepState.step = -1;\n        }\n\n        try {\n            exec(prepState);\n        } catch (e) {\n            if (this._errorState < 2) {\n                console.log('Hinting error in PREP:' + e);\n            }\n            this._errorState = 2;\n        }\n    }\n\n    if (this._errorState > 1) { return; }\n\n    try {\n        return execGlyph(glyph, prepState);\n    } catch (e) {\n        if (this._errorState < 1) {\n            console.log('Hinting error:' + e);\n            console.log('Note: further hinting errors are silenced');\n        }\n        this._errorState = 1;\n        return undefined;\n    }\n};\n\n/*\n* Executes the hinting program for a glyph.\n*/\nexecGlyph = function(glyph, prepState) {\n    // original point positions\n    var xScale = prepState.ppem / prepState.font.unitsPerEm;\n    var yScale = xScale;\n    var components = glyph.components;\n    var contours;\n    var gZone;\n    var state;\n\n    State.prototype = prepState;\n    if (!components) {\n        state = new State('glyf', glyph.instructions);\n        if (exports.DEBUG) {\n            console.log('---EXEC GLYPH---');\n            state.step = -1;\n        }\n        execComponent(glyph, state, xScale, yScale);\n        gZone = state.gZone;\n    } else {\n        var font = prepState.font;\n        gZone = [];\n        contours = [];\n        for (var i = 0; i < components.length; i++) {\n            var c = components[i];\n            var cg = font.glyphs.get(c.glyphIndex);\n\n            state = new State('glyf', cg.instructions);\n\n            if (exports.DEBUG) {\n                console.log('---EXEC COMP ' + i + '---');\n                state.step = -1;\n            }\n\n            execComponent(cg, state, xScale, yScale);\n            // appends the computed points to the result array\n            // post processes the component points\n            var dx = Math.round(c.dx * xScale);\n            var dy = Math.round(c.dy * yScale);\n            var gz = state.gZone;\n            var cc = state.contours;\n            for (var pi = 0; pi < gz.length; pi++) {\n                var p = gz[pi];\n                p.xTouched = p.yTouched = false;\n                p.xo = p.x = p.x + dx;\n                p.yo = p.y = p.y + dy;\n            }\n\n            var gLen = gZone.length;\n            gZone.push.apply(gZone, gz);\n            for (var j = 0; j < cc.length; j++) {\n                contours.push(cc[j] + gLen);\n            }\n        }\n\n        if (glyph.instructions && !state.inhibitGridFit) {\n            // the composite has instructions on its own\n            state = new State('glyf', glyph.instructions);\n\n            state.gZone = state.z0 = state.z1 = state.z2 = gZone;\n\n            state.contours = contours;\n\n            // note: HPZero cannot be used here, since\n            //       the point might be modified\n            gZone.push(\n                new HPoint(0, 0),\n                new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n            );\n\n            if (exports.DEBUG) {\n                console.log('---EXEC COMPOSITE---');\n                state.step = -1;\n            }\n\n            exec(state);\n\n            gZone.length -= 2;\n        }\n    }\n\n    return gZone;\n};\n\n/*\n* Executes the hinting program for a component of a multi-component glyph\n* or of the glyph itself for a non-component glyph.\n*/\nexecComponent = function(glyph, state, xScale, yScale)\n{\n    var points = glyph.points || [];\n    var pLen = points.length;\n    var gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];\n    var contours = state.contours = [];\n\n    // Scales the original points and\n    // makes copies for the hinted points.\n    var cp; // current point\n    for (var i = 0; i < pLen; i++) {\n        cp = points[i];\n\n        gZone[i] = new HPoint(\n            cp.x * xScale,\n            cp.y * yScale,\n            cp.lastPointOfContour,\n            cp.onCurve\n        );\n    }\n\n    // Chain links the contours.\n    var sp; // start point\n    var np; // next point\n\n    for (var i$1 = 0; i$1 < pLen; i$1++) {\n        cp = gZone[i$1];\n\n        if (!sp) {\n            sp = cp;\n            contours.push(i$1);\n        }\n\n        if (cp.lastPointOfContour) {\n            cp.nextPointOnContour = sp;\n            sp.prevPointOnContour = cp;\n            sp = undefined;\n        } else {\n            np = gZone[i$1 + 1];\n            cp.nextPointOnContour = np;\n            np.prevPointOnContour = cp;\n        }\n    }\n\n    if (state.inhibitGridFit) { return; }\n\n    if (exports.DEBUG) {\n        console.log('PROCESSING GLYPH', state.stack);\n        for (var i$2 = 0; i$2 < pLen; i$2++) {\n            console.log(i$2, gZone[i$2].x, gZone[i$2].y);\n        }\n    }\n\n    gZone.push(\n        new HPoint(0, 0),\n        new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n    );\n\n    exec(state);\n\n    // Removes the extra points.\n    gZone.length -= 2;\n\n    if (exports.DEBUG) {\n        console.log('FINISHED GLYPH', state.stack);\n        for (var i$3 = 0; i$3 < pLen; i$3++) {\n            console.log(i$3, gZone[i$3].x, gZone[i$3].y);\n        }\n    }\n};\n\n/*\n* Executes the program loaded in state.\n*/\nexec = function(state) {\n    var prog = state.prog;\n\n    if (!prog) { return; }\n\n    var pLen = prog.length;\n    var ins;\n\n    for (state.ip = 0; state.ip < pLen; state.ip++) {\n        if (exports.DEBUG) { state.step++; }\n        ins = instructionTable[prog[state.ip]];\n\n        if (!ins) {\n            throw new Error(\n                'unknown instruction: 0x' +\n                Number(prog[state.ip]).toString(16)\n            );\n        }\n\n        ins(state);\n\n        // very extensive debugging for each step\n        /*\n        if (exports.DEBUG) {\n            var da;\n            if (state.gZone) {\n                da = [];\n                for (let i = 0; i < state.gZone.length; i++)\n                {\n                    da.push(i + ' ' +\n                        state.gZone[i].x * 64 + ' ' +\n                        state.gZone[i].y * 64 + ' ' +\n                        (state.gZone[i].xTouched ? 'x' : '') +\n                        (state.gZone[i].yTouched ? 'y' : '')\n                    );\n                }\n                console.log('GZ', da);\n            }\n\n            if (state.tZone) {\n                da = [];\n                for (let i = 0; i < state.tZone.length; i++) {\n                    da.push(i + ' ' +\n                        state.tZone[i].x * 64 + ' ' +\n                        state.tZone[i].y * 64 + ' ' +\n                        (state.tZone[i].xTouched ? 'x' : '') +\n                        (state.tZone[i].yTouched ? 'y' : '')\n                    );\n                }\n                console.log('TZ', da);\n            }\n\n            if (state.stack.length > 10) {\n                console.log(\n                    state.stack.length,\n                    '...', state.stack.slice(state.stack.length - 10)\n                );\n            } else {\n                console.log(state.stack.length, state.stack);\n            }\n        }\n        */\n    }\n};\n\n/*\n* Initializes the twilight zone.\n*\n* This is only done if a SZPx instruction\n* refers to the twilight zone.\n*/\nfunction initTZone(state)\n{\n    var tZone = state.tZone = new Array(state.gZone.length);\n\n    // no idea if this is actually correct...\n    for (var i = 0; i < tZone.length; i++)\n    {\n        tZone[i] = new HPoint(0, 0);\n    }\n}\n\n/*\n* Skips the instruction pointer ahead over an IF/ELSE block.\n* handleElse .. if true breaks on matching ELSE\n*/\nfunction skip(state, handleElse)\n{\n    var prog = state.prog;\n    var ip = state.ip;\n    var nesting = 1;\n    var ins;\n\n    do {\n        ins = prog[++ip];\n        if (ins === 0x58) // IF\n            { nesting++; }\n        else if (ins === 0x59) // EIF\n            { nesting--; }\n        else if (ins === 0x40) // NPUSHB\n            { ip += prog[ip + 1] + 1; }\n        else if (ins === 0x41) // NPUSHW\n            { ip += 2 * prog[ip + 1] + 1; }\n        else if (ins >= 0xB0 && ins <= 0xB7) // PUSHB\n            { ip += ins - 0xB0 + 1; }\n        else if (ins >= 0xB8 && ins <= 0xBF) // PUSHW\n            { ip += (ins - 0xB8 + 1) * 2; }\n        else if (handleElse && nesting === 1 && ins === 0x1B) // ELSE\n            { break; }\n    } while (nesting > 0);\n\n    state.ip = ip;\n}\n\n/*----------------------------------------------------------*\n*          And then a lot of instructions...                *\n*----------------------------------------------------------*/\n\n// SVTCA[a] Set freedom and projection Vectors To Coordinate Axis\n// 0x00-0x01\nfunction SVTCA(v, state) {\n    if (exports.DEBUG) { console.log(state.step, 'SVTCA[' + v.axis + ']'); }\n\n    state.fv = state.pv = state.dpv = v;\n}\n\n// SPVTCA[a] Set Projection Vector to Coordinate Axis\n// 0x02-0x03\nfunction SPVTCA(v, state) {\n    if (exports.DEBUG) { console.log(state.step, 'SPVTCA[' + v.axis + ']'); }\n\n    state.pv = state.dpv = v;\n}\n\n// SFVTCA[a] Set Freedom Vector to Coordinate Axis\n// 0x04-0x05\nfunction SFVTCA(v, state) {\n    if (exports.DEBUG) { console.log(state.step, 'SFVTCA[' + v.axis + ']'); }\n\n    state.fv = v;\n}\n\n// SPVTL[a] Set Projection Vector To Line\n// 0x06-0x07\nfunction SPVTL(a, state) {\n    var stack = state.stack;\n    var p2i = stack.pop();\n    var p1i = stack.pop();\n    var p2 = state.z2[p2i];\n    var p1 = state.z1[p1i];\n\n    if (exports.DEBUG) { console.log('SPVTL[' + a + ']', p2i, p1i); }\n\n    var dx;\n    var dy;\n\n    if (!a) {\n        dx = p1.x - p2.x;\n        dy = p1.y - p2.y;\n    } else {\n        dx = p2.y - p1.y;\n        dy = p1.x - p2.x;\n    }\n\n    state.pv = state.dpv = getUnitVector(dx, dy);\n}\n\n// SFVTL[a] Set Freedom Vector To Line\n// 0x08-0x09\nfunction SFVTL(a, state) {\n    var stack = state.stack;\n    var p2i = stack.pop();\n    var p1i = stack.pop();\n    var p2 = state.z2[p2i];\n    var p1 = state.z1[p1i];\n\n    if (exports.DEBUG) { console.log('SFVTL[' + a + ']', p2i, p1i); }\n\n    var dx;\n    var dy;\n\n    if (!a) {\n        dx = p1.x - p2.x;\n        dy = p1.y - p2.y;\n    } else {\n        dx = p2.y - p1.y;\n        dy = p1.x - p2.x;\n    }\n\n    state.fv = getUnitVector(dx, dy);\n}\n\n// SPVFS[] Set Projection Vector From Stack\n// 0x0A\nfunction SPVFS(state) {\n    var stack = state.stack;\n    var y = stack.pop();\n    var x = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SPVFS[]', y, x); }\n\n    state.pv = state.dpv = getUnitVector(x, y);\n}\n\n// SFVFS[] Set Freedom Vector From Stack\n// 0x0B\nfunction SFVFS(state) {\n    var stack = state.stack;\n    var y = stack.pop();\n    var x = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SPVFS[]', y, x); }\n\n    state.fv = getUnitVector(x, y);\n}\n\n// GPV[] Get Projection Vector\n// 0x0C\nfunction GPV(state) {\n    var stack = state.stack;\n    var pv = state.pv;\n\n    if (exports.DEBUG) { console.log(state.step, 'GPV[]'); }\n\n    stack.push(pv.x * 0x4000);\n    stack.push(pv.y * 0x4000);\n}\n\n// GFV[] Get Freedom Vector\n// 0x0C\nfunction GFV(state) {\n    var stack = state.stack;\n    var fv = state.fv;\n\n    if (exports.DEBUG) { console.log(state.step, 'GFV[]'); }\n\n    stack.push(fv.x * 0x4000);\n    stack.push(fv.y * 0x4000);\n}\n\n// SFVTPV[] Set Freedom Vector To Projection Vector\n// 0x0E\nfunction SFVTPV(state) {\n    state.fv = state.pv;\n\n    if (exports.DEBUG) { console.log(state.step, 'SFVTPV[]'); }\n}\n\n// ISECT[] moves point p to the InterSECTion of two lines\n// 0x0F\nfunction ISECT(state)\n{\n    var stack = state.stack;\n    var pa0i = stack.pop();\n    var pa1i = stack.pop();\n    var pb0i = stack.pop();\n    var pb1i = stack.pop();\n    var pi = stack.pop();\n    var z0 = state.z0;\n    var z1 = state.z1;\n    var pa0 = z0[pa0i];\n    var pa1 = z0[pa1i];\n    var pb0 = z1[pb0i];\n    var pb1 = z1[pb1i];\n    var p = state.z2[pi];\n\n    if (exports.DEBUG) { console.log('ISECT[], ', pa0i, pa1i, pb0i, pb1i, pi); }\n\n    // math from\n    // en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line\n\n    var x1 = pa0.x;\n    var y1 = pa0.y;\n    var x2 = pa1.x;\n    var y2 = pa1.y;\n    var x3 = pb0.x;\n    var y3 = pb0.y;\n    var x4 = pb1.x;\n    var y4 = pb1.y;\n\n    var div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n    var f1 = x1 * y2 - y1 * x2;\n    var f2 = x3 * y4 - y3 * x4;\n\n    p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;\n    p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;\n}\n\n// SRP0[] Set Reference Point 0\n// 0x10\nfunction SRP0(state) {\n    state.rp0 = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SRP0[]', state.rp0); }\n}\n\n// SRP1[] Set Reference Point 1\n// 0x11\nfunction SRP1(state) {\n    state.rp1 = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SRP1[]', state.rp1); }\n}\n\n// SRP1[] Set Reference Point 2\n// 0x12\nfunction SRP2(state) {\n    state.rp2 = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SRP2[]', state.rp2); }\n}\n\n// SZP0[] Set Zone Pointer 0\n// 0x13\nfunction SZP0(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SZP0[]', n); }\n\n    state.zp0 = n;\n\n    switch (n) {\n        case 0:\n            if (!state.tZone) { initTZone(state); }\n            state.z0 = state.tZone;\n            break;\n        case 1 :\n            state.z0 = state.gZone;\n            break;\n        default :\n            throw new Error('Invalid zone pointer');\n    }\n}\n\n// SZP1[] Set Zone Pointer 1\n// 0x14\nfunction SZP1(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SZP1[]', n); }\n\n    state.zp1 = n;\n\n    switch (n) {\n        case 0:\n            if (!state.tZone) { initTZone(state); }\n            state.z1 = state.tZone;\n            break;\n        case 1 :\n            state.z1 = state.gZone;\n            break;\n        default :\n            throw new Error('Invalid zone pointer');\n    }\n}\n\n// SZP2[] Set Zone Pointer 2\n// 0x15\nfunction SZP2(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SZP2[]', n); }\n\n    state.zp2 = n;\n\n    switch (n) {\n        case 0:\n            if (!state.tZone) { initTZone(state); }\n            state.z2 = state.tZone;\n            break;\n        case 1 :\n            state.z2 = state.gZone;\n            break;\n        default :\n            throw new Error('Invalid zone pointer');\n    }\n}\n\n// SZPS[] Set Zone PointerS\n// 0x16\nfunction SZPS(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SZPS[]', n); }\n\n    state.zp0 = state.zp1 = state.zp2 = n;\n\n    switch (n) {\n        case 0:\n            if (!state.tZone) { initTZone(state); }\n            state.z0 = state.z1 = state.z2 = state.tZone;\n            break;\n        case 1 :\n            state.z0 = state.z1 = state.z2 = state.gZone;\n            break;\n        default :\n            throw new Error('Invalid zone pointer');\n    }\n}\n\n// SLOOP[] Set LOOP variable\n// 0x17\nfunction SLOOP(state) {\n    state.loop = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SLOOP[]', state.loop); }\n}\n\n// RTG[] Round To Grid\n// 0x18\nfunction RTG(state) {\n    if (exports.DEBUG) { console.log(state.step, 'RTG[]'); }\n\n    state.round = roundToGrid;\n}\n\n// RTHG[] Round To Half Grid\n// 0x19\nfunction RTHG(state) {\n    if (exports.DEBUG) { console.log(state.step, 'RTHG[]'); }\n\n    state.round = roundToHalfGrid;\n}\n\n// SMD[] Set Minimum Distance\n// 0x1A\nfunction SMD(state) {\n    var d = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SMD[]', d); }\n\n    state.minDis = d / 0x40;\n}\n\n// ELSE[] ELSE clause\n// 0x1B\nfunction ELSE(state) {\n    // This instruction has been reached by executing a then branch\n    // so it just skips ahead until matching EIF.\n    //\n    // In case the IF was negative the IF[] instruction already\n    // skipped forward over the ELSE[]\n\n    if (exports.DEBUG) { console.log(state.step, 'ELSE[]'); }\n\n    skip(state, false);\n}\n\n// JMPR[] JuMP Relative\n// 0x1C\nfunction JMPR(state) {\n    var o = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'JMPR[]', o); }\n\n    // A jump by 1 would do nothing.\n    state.ip += o - 1;\n}\n\n// SCVTCI[] Set Control Value Table Cut-In\n// 0x1D\nfunction SCVTCI(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SCVTCI[]', n); }\n\n    state.cvCutIn = n / 0x40;\n}\n\n// DUP[] DUPlicate top stack element\n// 0x20\nfunction DUP(state) {\n    var stack = state.stack;\n\n    if (exports.DEBUG) { console.log(state.step, 'DUP[]'); }\n\n    stack.push(stack[stack.length - 1]);\n}\n\n// POP[] POP top stack element\n// 0x21\nfunction POP(state) {\n    if (exports.DEBUG) { console.log(state.step, 'POP[]'); }\n\n    state.stack.pop();\n}\n\n// CLEAR[] CLEAR the stack\n// 0x22\nfunction CLEAR(state) {\n    if (exports.DEBUG) { console.log(state.step, 'CLEAR[]'); }\n\n    state.stack.length = 0;\n}\n\n// SWAP[] SWAP the top two elements on the stack\n// 0x23\nfunction SWAP(state) {\n    var stack = state.stack;\n\n    var a = stack.pop();\n    var b = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SWAP[]'); }\n\n    stack.push(a);\n    stack.push(b);\n}\n\n// DEPTH[] DEPTH of the stack\n// 0x24\nfunction DEPTH(state) {\n    var stack = state.stack;\n\n    if (exports.DEBUG) { console.log(state.step, 'DEPTH[]'); }\n\n    stack.push(stack.length);\n}\n\n// LOOPCALL[] LOOPCALL function\n// 0x2A\nfunction LOOPCALL(state) {\n    var stack = state.stack;\n    var fn = stack.pop();\n    var c = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'LOOPCALL[]', fn, c); }\n\n    // saves callers program\n    var cip = state.ip;\n    var cprog = state.prog;\n\n    state.prog = state.funcs[fn];\n\n    // executes the function\n    for (var i = 0; i < c; i++) {\n        exec(state);\n\n        if (exports.DEBUG) { console.log(\n            ++state.step,\n            i + 1 < c ? 'next loopcall' : 'done loopcall',\n            i\n        ); }\n    }\n\n    // restores the callers program\n    state.ip = cip;\n    state.prog = cprog;\n}\n\n// CALL[] CALL function\n// 0x2B\nfunction CALL(state) {\n    var fn = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'CALL[]', fn); }\n\n    // saves callers program\n    var cip = state.ip;\n    var cprog = state.prog;\n\n    state.prog = state.funcs[fn];\n\n    // executes the function\n    exec(state);\n\n    // restores the callers program\n    state.ip = cip;\n    state.prog = cprog;\n\n    if (exports.DEBUG) { console.log(++state.step, 'returning from', fn); }\n}\n\n// CINDEX[] Copy the INDEXed element to the top of the stack\n// 0x25\nfunction CINDEX(state) {\n    var stack = state.stack;\n    var k = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'CINDEX[]', k); }\n\n    // In case of k == 1, it copies the last element after popping\n    // thus stack.length - k.\n    stack.push(stack[stack.length - k]);\n}\n\n// MINDEX[] Move the INDEXed element to the top of the stack\n// 0x26\nfunction MINDEX(state) {\n    var stack = state.stack;\n    var k = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'MINDEX[]', k); }\n\n    stack.push(stack.splice(stack.length - k, 1)[0]);\n}\n\n// FDEF[] Function DEFinition\n// 0x2C\nfunction FDEF(state) {\n    if (state.env !== 'fpgm') { throw new Error('FDEF not allowed here'); }\n    var stack = state.stack;\n    var prog = state.prog;\n    var ip = state.ip;\n\n    var fn = stack.pop();\n    var ipBegin = ip;\n\n    if (exports.DEBUG) { console.log(state.step, 'FDEF[]', fn); }\n\n    while (prog[++ip] !== 0x2D){ }\n\n    state.ip = ip;\n    state.funcs[fn] = prog.slice(ipBegin + 1, ip);\n}\n\n// MDAP[a] Move Direct Absolute Point\n// 0x2E-0x2F\nfunction MDAP(round, state) {\n    var pi = state.stack.pop();\n    var p = state.z0[pi];\n    var fv = state.fv;\n    var pv = state.pv;\n\n    if (exports.DEBUG) { console.log(state.step, 'MDAP[' + round + ']', pi); }\n\n    var d = pv.distance(p, HPZero);\n\n    if (round) { d = state.round(d); }\n\n    fv.setRelative(p, HPZero, d, pv);\n    fv.touch(p);\n\n    state.rp0 = state.rp1 = pi;\n}\n\n// IUP[a] Interpolate Untouched Points through the outline\n// 0x30\nfunction IUP(v, state) {\n    var z2 = state.z2;\n    var pLen = z2.length - 2;\n    var cp;\n    var pp;\n    var np;\n\n    if (exports.DEBUG) { console.log(state.step, 'IUP[' + v.axis + ']'); }\n\n    for (var i = 0; i < pLen; i++) {\n        cp = z2[i]; // current point\n\n        // if this point has been touched go on\n        if (v.touched(cp)) { continue; }\n\n        pp = cp.prevTouched(v);\n\n        // no point on the contour has been touched?\n        if (pp === cp) { continue; }\n\n        np = cp.nextTouched(v);\n\n        if (pp === np) {\n            // only one point on the contour has been touched\n            // so simply moves the point like that\n\n            v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);\n        }\n\n        v.interpolate(cp, pp, np, v);\n    }\n}\n\n// SHP[] SHift Point using reference point\n// 0x32-0x33\nfunction SHP(a, state) {\n    var stack = state.stack;\n    var rpi = a ? state.rp1 : state.rp2;\n    var rp = (a ? state.z0 : state.z1)[rpi];\n    var fv = state.fv;\n    var pv = state.pv;\n    var loop = state.loop;\n    var z2 = state.z2;\n\n    while (loop--)\n    {\n        var pi = stack.pop();\n        var p = z2[pi];\n\n        var d = pv.distance(rp, rp, false, true);\n        fv.setRelative(p, p, d, pv);\n        fv.touch(p);\n\n        if (exports.DEBUG) {\n            console.log(\n                state.step,\n                (state.loop > 1 ?\n                   'loop ' + (state.loop - loop) + ': ' :\n                   ''\n                ) +\n                'SHP[' + (a ? 'rp1' : 'rp2') + ']', pi\n            );\n        }\n    }\n\n    state.loop = 1;\n}\n\n// SHC[] SHift Contour using reference point\n// 0x36-0x37\nfunction SHC(a, state) {\n    var stack = state.stack;\n    var rpi = a ? state.rp1 : state.rp2;\n    var rp = (a ? state.z0 : state.z1)[rpi];\n    var fv = state.fv;\n    var pv = state.pv;\n    var ci = stack.pop();\n    var sp = state.z2[state.contours[ci]];\n    var p = sp;\n\n    if (exports.DEBUG) { console.log(state.step, 'SHC[' + a + ']', ci); }\n\n    var d = pv.distance(rp, rp, false, true);\n\n    do {\n        if (p !== rp) { fv.setRelative(p, p, d, pv); }\n        p = p.nextPointOnContour;\n    } while (p !== sp);\n}\n\n// SHZ[] SHift Zone using reference point\n// 0x36-0x37\nfunction SHZ(a, state) {\n    var stack = state.stack;\n    var rpi = a ? state.rp1 : state.rp2;\n    var rp = (a ? state.z0 : state.z1)[rpi];\n    var fv = state.fv;\n    var pv = state.pv;\n\n    var e = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SHZ[' + a + ']', e); }\n\n    var z;\n    switch (e) {\n        case 0 : z = state.tZone; break;\n        case 1 : z = state.gZone; break;\n        default : throw new Error('Invalid zone');\n    }\n\n    var p;\n    var d = pv.distance(rp, rp, false, true);\n    var pLen = z.length - 2;\n    for (var i = 0; i < pLen; i++)\n    {\n        p = z[i];\n        fv.setRelative(p, p, d, pv);\n        //if (p !== rp) fv.setRelative(p, p, d, pv);\n    }\n}\n\n// SHPIX[] SHift point by a PIXel amount\n// 0x38\nfunction SHPIX(state) {\n    var stack = state.stack;\n    var loop = state.loop;\n    var fv = state.fv;\n    var d = stack.pop() / 0x40;\n    var z2 = state.z2;\n\n    while (loop--) {\n        var pi = stack.pop();\n        var p = z2[pi];\n\n        if (exports.DEBUG) {\n            console.log(\n                state.step,\n                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +\n                'SHPIX[]', pi, d\n            );\n        }\n\n        fv.setRelative(p, p, d);\n        fv.touch(p);\n    }\n\n    state.loop = 1;\n}\n\n// IP[] Interpolate Point\n// 0x39\nfunction IP(state) {\n    var stack = state.stack;\n    var rp1i = state.rp1;\n    var rp2i = state.rp2;\n    var loop = state.loop;\n    var rp1 = state.z0[rp1i];\n    var rp2 = state.z1[rp2i];\n    var fv = state.fv;\n    var pv = state.dpv;\n    var z2 = state.z2;\n\n    while (loop--) {\n        var pi = stack.pop();\n        var p = z2[pi];\n\n        if (exports.DEBUG) {\n            console.log(\n                state.step,\n                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +\n                'IP[]', pi, rp1i, '<->', rp2i\n            );\n        }\n\n        fv.interpolate(p, rp1, rp2, pv);\n\n        fv.touch(p);\n    }\n\n    state.loop = 1;\n}\n\n// MSIRP[a] Move Stack Indirect Relative Point\n// 0x3A-0x3B\nfunction MSIRP(a, state) {\n    var stack = state.stack;\n    var d = stack.pop() / 64;\n    var pi = stack.pop();\n    var p = state.z1[pi];\n    var rp0 = state.z0[state.rp0];\n    var fv = state.fv;\n    var pv = state.pv;\n\n    fv.setRelative(p, rp0, d, pv);\n    fv.touch(p);\n\n    if (exports.DEBUG) { console.log(state.step, 'MSIRP[' + a + ']', d, pi); }\n\n    state.rp1 = state.rp0;\n    state.rp2 = pi;\n    if (a) { state.rp0 = pi; }\n}\n\n// ALIGNRP[] Align to reference point.\n// 0x3C\nfunction ALIGNRP(state) {\n    var stack = state.stack;\n    var rp0i = state.rp0;\n    var rp0 = state.z0[rp0i];\n    var loop = state.loop;\n    var fv = state.fv;\n    var pv = state.pv;\n    var z1 = state.z1;\n\n    while (loop--) {\n        var pi = stack.pop();\n        var p = z1[pi];\n\n        if (exports.DEBUG) {\n            console.log(\n                state.step,\n                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +\n                'ALIGNRP[]', pi\n            );\n        }\n\n        fv.setRelative(p, rp0, 0, pv);\n        fv.touch(p);\n    }\n\n    state.loop = 1;\n}\n\n// RTG[] Round To Double Grid\n// 0x3D\nfunction RTDG(state) {\n    if (exports.DEBUG) { console.log(state.step, 'RTDG[]'); }\n\n    state.round = roundToDoubleGrid;\n}\n\n// MIAP[a] Move Indirect Absolute Point\n// 0x3E-0x3F\nfunction MIAP(round, state) {\n    var stack = state.stack;\n    var n = stack.pop();\n    var pi = stack.pop();\n    var p = state.z0[pi];\n    var fv = state.fv;\n    var pv = state.pv;\n    var cv = state.cvt[n];\n\n    if (exports.DEBUG) {\n        console.log(\n            state.step,\n            'MIAP[' + round + ']',\n            n, '(', cv, ')', pi\n        );\n    }\n\n    var d = pv.distance(p, HPZero);\n\n    if (round) {\n        if (Math.abs(d - cv) < state.cvCutIn) { d = cv; }\n\n        d = state.round(d);\n    }\n\n    fv.setRelative(p, HPZero, d, pv);\n\n    if (state.zp0 === 0) {\n        p.xo = p.x;\n        p.yo = p.y;\n    }\n\n    fv.touch(p);\n\n    state.rp0 = state.rp1 = pi;\n}\n\n// NPUSB[] PUSH N Bytes\n// 0x40\nfunction NPUSHB(state) {\n    var prog = state.prog;\n    var ip = state.ip;\n    var stack = state.stack;\n\n    var n = prog[++ip];\n\n    if (exports.DEBUG) { console.log(state.step, 'NPUSHB[]', n); }\n\n    for (var i = 0; i < n; i++) { stack.push(prog[++ip]); }\n\n    state.ip = ip;\n}\n\n// NPUSHW[] PUSH N Words\n// 0x41\nfunction NPUSHW(state) {\n    var ip = state.ip;\n    var prog = state.prog;\n    var stack = state.stack;\n    var n = prog[++ip];\n\n    if (exports.DEBUG) { console.log(state.step, 'NPUSHW[]', n); }\n\n    for (var i = 0; i < n; i++) {\n        var w = (prog[++ip] << 8) | prog[++ip];\n        if (w & 0x8000) { w = -((w ^ 0xffff) + 1); }\n        stack.push(w);\n    }\n\n    state.ip = ip;\n}\n\n// WS[] Write Store\n// 0x42\nfunction WS(state) {\n    var stack = state.stack;\n    var store = state.store;\n\n    if (!store) { store = state.store = []; }\n\n    var v = stack.pop();\n    var l = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'WS', v, l); }\n\n    store[l] = v;\n}\n\n// RS[] Read Store\n// 0x43\nfunction RS(state) {\n    var stack = state.stack;\n    var store = state.store;\n\n    var l = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'RS', l); }\n\n    var v = (store && store[l]) || 0;\n\n    stack.push(v);\n}\n\n// WCVTP[] Write Control Value Table in Pixel units\n// 0x44\nfunction WCVTP(state) {\n    var stack = state.stack;\n\n    var v = stack.pop();\n    var l = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'WCVTP', v, l); }\n\n    state.cvt[l] = v / 0x40;\n}\n\n// RCVT[] Read Control Value Table entry\n// 0x45\nfunction RCVT(state) {\n    var stack = state.stack;\n    var cvte = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'RCVT', cvte); }\n\n    stack.push(state.cvt[cvte] * 0x40);\n}\n\n// GC[] Get Coordinate projected onto the projection vector\n// 0x46-0x47\nfunction GC(a, state) {\n    var stack = state.stack;\n    var pi = stack.pop();\n    var p = state.z2[pi];\n\n    if (exports.DEBUG) { console.log(state.step, 'GC[' + a + ']', pi); }\n\n    stack.push(state.dpv.distance(p, HPZero, a, false) * 0x40);\n}\n\n// MD[a] Measure Distance\n// 0x49-0x4A\nfunction MD(a, state) {\n    var stack = state.stack;\n    var pi2 = stack.pop();\n    var pi1 = stack.pop();\n    var p2 = state.z1[pi2];\n    var p1 = state.z0[pi1];\n    var d = state.dpv.distance(p1, p2, a, a);\n\n    if (exports.DEBUG) { console.log(state.step, 'MD[' + a + ']', pi2, pi1, '->', d); }\n\n    state.stack.push(Math.round(d * 64));\n}\n\n// MPPEM[] Measure Pixels Per EM\n// 0x4B\nfunction MPPEM(state) {\n    if (exports.DEBUG) { console.log(state.step, 'MPPEM[]'); }\n    state.stack.push(state.ppem);\n}\n\n// FLIPON[] set the auto FLIP Boolean to ON\n// 0x4D\nfunction FLIPON(state) {\n    if (exports.DEBUG) { console.log(state.step, 'FLIPON[]'); }\n    state.autoFlip = true;\n}\n\n// LT[] Less Than\n// 0x50\nfunction LT(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'LT[]', e2, e1); }\n\n    stack.push(e1 < e2 ? 1 : 0);\n}\n\n// LTEQ[] Less Than or EQual\n// 0x53\nfunction LTEQ(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'LTEQ[]', e2, e1); }\n\n    stack.push(e1 <= e2 ? 1 : 0);\n}\n\n// GTEQ[] Greater Than\n// 0x52\nfunction GT(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'GT[]', e2, e1); }\n\n    stack.push(e1 > e2 ? 1 : 0);\n}\n\n// GTEQ[] Greater Than or EQual\n// 0x53\nfunction GTEQ(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'GTEQ[]', e2, e1); }\n\n    stack.push(e1 >= e2 ? 1 : 0);\n}\n\n// EQ[] EQual\n// 0x54\nfunction EQ(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'EQ[]', e2, e1); }\n\n    stack.push(e2 === e1 ? 1 : 0);\n}\n\n// NEQ[] Not EQual\n// 0x55\nfunction NEQ(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'NEQ[]', e2, e1); }\n\n    stack.push(e2 !== e1 ? 1 : 0);\n}\n\n// ODD[] ODD\n// 0x56\nfunction ODD(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'ODD[]', n); }\n\n    stack.push(Math.trunc(n) % 2 ? 1 : 0);\n}\n\n// EVEN[] EVEN\n// 0x57\nfunction EVEN(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'EVEN[]', n); }\n\n    stack.push(Math.trunc(n) % 2 ? 0 : 1);\n}\n\n// IF[] IF test\n// 0x58\nfunction IF(state) {\n    var test = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'IF[]', test); }\n\n    // if test is true it just continues\n    // if not the ip is skipped until matching ELSE or EIF\n    if (!test) {\n        skip(state, true);\n\n        if (exports.DEBUG) { console.log(state.step,  'EIF[]'); }\n    }\n}\n\n// EIF[] End IF\n// 0x59\nfunction EIF(state) {\n    // this can be reached normally when\n    // executing an else branch.\n    // -> just ignore it\n\n    if (exports.DEBUG) { console.log(state.step, 'EIF[]'); }\n}\n\n// AND[] logical AND\n// 0x5A\nfunction AND(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'AND[]', e2, e1); }\n\n    stack.push(e2 && e1 ? 1 : 0);\n}\n\n// OR[] logical OR\n// 0x5B\nfunction OR(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'OR[]', e2, e1); }\n\n    stack.push(e2 || e1 ? 1 : 0);\n}\n\n// NOT[] logical NOT\n// 0x5C\nfunction NOT(state) {\n    var stack = state.stack;\n    var e = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'NOT[]', e); }\n\n    stack.push(e ? 0 : 1);\n}\n\n// DELTAP1[] DELTA exception P1\n// DELTAP2[] DELTA exception P2\n// DELTAP3[] DELTA exception P3\n// 0x5D, 0x71, 0x72\nfunction DELTAP123(b, state) {\n    var stack = state.stack;\n    var n = stack.pop();\n    var fv = state.fv;\n    var pv = state.pv;\n    var ppem = state.ppem;\n    var base = state.deltaBase + (b - 1) * 16;\n    var ds = state.deltaShift;\n    var z0 = state.z0;\n\n    if (exports.DEBUG) { console.log(state.step, 'DELTAP[' + b + ']', n, stack); }\n\n    for (var i = 0; i < n; i++) {\n        var pi = stack.pop();\n        var arg = stack.pop();\n        var appem = base + ((arg & 0xF0) >> 4);\n        if (appem !== ppem) { continue; }\n\n        var mag = (arg & 0x0F) - 8;\n        if (mag >= 0) { mag++; }\n        if (exports.DEBUG) { console.log(state.step, 'DELTAPFIX', pi, 'by', mag * ds); }\n\n        var p = z0[pi];\n        fv.setRelative(p, p, mag * ds, pv);\n    }\n}\n\n// SDB[] Set Delta Base in the graphics state\n// 0x5E\nfunction SDB(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SDB[]', n); }\n\n    state.deltaBase = n;\n}\n\n// SDS[] Set Delta Shift in the graphics state\n// 0x5F\nfunction SDS(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SDS[]', n); }\n\n    state.deltaShift = Math.pow(0.5, n);\n}\n\n// ADD[] ADD\n// 0x60\nfunction ADD(state) {\n    var stack = state.stack;\n    var n2 = stack.pop();\n    var n1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'ADD[]', n2, n1); }\n\n    stack.push(n1 + n2);\n}\n\n// SUB[] SUB\n// 0x61\nfunction SUB(state) {\n    var stack = state.stack;\n    var n2 = stack.pop();\n    var n1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SUB[]', n2, n1); }\n\n    stack.push(n1 - n2);\n}\n\n// DIV[] DIV\n// 0x62\nfunction DIV(state) {\n    var stack = state.stack;\n    var n2 = stack.pop();\n    var n1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'DIV[]', n2, n1); }\n\n    stack.push(n1 * 64 / n2);\n}\n\n// MUL[] MUL\n// 0x63\nfunction MUL(state) {\n    var stack = state.stack;\n    var n2 = stack.pop();\n    var n1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'MUL[]', n2, n1); }\n\n    stack.push(n1 * n2 / 64);\n}\n\n// ABS[] ABSolute value\n// 0x64\nfunction ABS(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'ABS[]', n); }\n\n    stack.push(Math.abs(n));\n}\n\n// NEG[] NEGate\n// 0x65\nfunction NEG(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'NEG[]', n); }\n\n    stack.push(-n);\n}\n\n// FLOOR[] FLOOR\n// 0x66\nfunction FLOOR(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'FLOOR[]', n); }\n\n    stack.push(Math.floor(n / 0x40) * 0x40);\n}\n\n// CEILING[] CEILING\n// 0x67\nfunction CEILING(state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'CEILING[]', n); }\n\n    stack.push(Math.ceil(n / 0x40) * 0x40);\n}\n\n// ROUND[ab] ROUND value\n// 0x68-0x6B\nfunction ROUND(dt, state) {\n    var stack = state.stack;\n    var n = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'ROUND[]'); }\n\n    stack.push(state.round(n / 0x40) * 0x40);\n}\n\n// WCVTF[] Write Control Value Table in Funits\n// 0x70\nfunction WCVTF(state) {\n    var stack = state.stack;\n    var v = stack.pop();\n    var l = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'WCVTF[]', v, l); }\n\n    state.cvt[l] = v * state.ppem / state.font.unitsPerEm;\n}\n\n// DELTAC1[] DELTA exception C1\n// DELTAC2[] DELTA exception C2\n// DELTAC3[] DELTA exception C3\n// 0x73, 0x74, 0x75\nfunction DELTAC123(b, state) {\n    var stack = state.stack;\n    var n = stack.pop();\n    var ppem = state.ppem;\n    var base = state.deltaBase + (b - 1) * 16;\n    var ds = state.deltaShift;\n\n    if (exports.DEBUG) { console.log(state.step, 'DELTAC[' + b + ']', n, stack); }\n\n    for (var i = 0; i < n; i++) {\n        var c = stack.pop();\n        var arg = stack.pop();\n        var appem = base + ((arg & 0xF0) >> 4);\n        if (appem !== ppem) { continue; }\n\n        var mag = (arg & 0x0F) - 8;\n        if (mag >= 0) { mag++; }\n\n        var delta = mag * ds;\n\n        if (exports.DEBUG) { console.log(state.step, 'DELTACFIX', c, 'by', delta); }\n\n        state.cvt[c] += delta;\n    }\n}\n\n// SROUND[] Super ROUND\n// 0x76\nfunction SROUND(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'SROUND[]', n); }\n\n    state.round = roundSuper;\n\n    var period;\n\n    switch (n & 0xC0) {\n        case 0x00:\n            period = 0.5;\n            break;\n        case 0x40:\n            period = 1;\n            break;\n        case 0x80:\n            period = 2;\n            break;\n        default:\n            throw new Error('invalid SROUND value');\n    }\n\n    state.srPeriod = period;\n\n    switch (n & 0x30) {\n        case 0x00:\n            state.srPhase = 0;\n            break;\n        case 0x10:\n            state.srPhase = 0.25 * period;\n            break;\n        case 0x20:\n            state.srPhase = 0.5  * period;\n            break;\n        case 0x30:\n            state.srPhase = 0.75 * period;\n            break;\n        default: throw new Error('invalid SROUND value');\n    }\n\n    n &= 0x0F;\n\n    if (n === 0) { state.srThreshold = 0; }\n    else { state.srThreshold = (n / 8 - 0.5) * period; }\n}\n\n// S45ROUND[] Super ROUND 45 degrees\n// 0x77\nfunction S45ROUND(state) {\n    var n = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'S45ROUND[]', n); }\n\n    state.round = roundSuper;\n\n    var period;\n\n    switch (n & 0xC0) {\n        case 0x00:\n            period = Math.sqrt(2) / 2;\n            break;\n        case 0x40:\n            period = Math.sqrt(2);\n            break;\n        case 0x80:\n            period = 2 * Math.sqrt(2);\n            break;\n        default:\n            throw new Error('invalid S45ROUND value');\n    }\n\n    state.srPeriod = period;\n\n    switch (n & 0x30) {\n        case 0x00:\n            state.srPhase = 0;\n            break;\n        case 0x10:\n            state.srPhase = 0.25 * period;\n            break;\n        case 0x20:\n            state.srPhase = 0.5  * period;\n            break;\n        case 0x30:\n            state.srPhase = 0.75 * period;\n            break;\n        default:\n            throw new Error('invalid S45ROUND value');\n    }\n\n    n &= 0x0F;\n\n    if (n === 0) { state.srThreshold = 0; }\n    else { state.srThreshold = (n / 8 - 0.5) * period; }\n}\n\n// ROFF[] Round Off\n// 0x7A\nfunction ROFF(state) {\n    if (exports.DEBUG) { console.log(state.step, 'ROFF[]'); }\n\n    state.round = roundOff;\n}\n\n// RUTG[] Round Up To Grid\n// 0x7C\nfunction RUTG(state) {\n    if (exports.DEBUG) { console.log(state.step, 'RUTG[]'); }\n\n    state.round = roundUpToGrid;\n}\n\n// RDTG[] Round Down To Grid\n// 0x7D\nfunction RDTG(state) {\n    if (exports.DEBUG) { console.log(state.step, 'RDTG[]'); }\n\n    state.round = roundDownToGrid;\n}\n\n// SCANCTRL[] SCAN conversion ConTRoL\n// 0x85\nfunction SCANCTRL(state) {\n    var n = state.stack.pop();\n\n    // ignored by opentype.js\n\n    if (exports.DEBUG) { console.log(state.step, 'SCANCTRL[]', n); }\n}\n\n// SDPVTL[a] Set Dual Projection Vector To Line\n// 0x86-0x87\nfunction SDPVTL(a, state) {\n    var stack = state.stack;\n    var p2i = stack.pop();\n    var p1i = stack.pop();\n    var p2 = state.z2[p2i];\n    var p1 = state.z1[p1i];\n\n    if (exports.DEBUG) { console.log(state.step, 'SDPVTL[' + a + ']', p2i, p1i); }\n\n    var dx;\n    var dy;\n\n    if (!a) {\n        dx = p1.x - p2.x;\n        dy = p1.y - p2.y;\n    } else {\n        dx = p2.y - p1.y;\n        dy = p1.x - p2.x;\n    }\n\n    state.dpv = getUnitVector(dx, dy);\n}\n\n// GETINFO[] GET INFOrmation\n// 0x88\nfunction GETINFO(state) {\n    var stack = state.stack;\n    var sel = stack.pop();\n    var r = 0;\n\n    if (exports.DEBUG) { console.log(state.step, 'GETINFO[]', sel); }\n\n    // v35 as in no subpixel hinting\n    if (sel & 0x01) { r = 35; }\n\n    // TODO rotation and stretch currently not supported\n    // and thus those GETINFO are always 0.\n\n    // opentype.js is always gray scaling\n    if (sel & 0x20) { r |= 0x1000; }\n\n    stack.push(r);\n}\n\n// ROLL[] ROLL the top three stack elements\n// 0x8A\nfunction ROLL(state) {\n    var stack = state.stack;\n    var a = stack.pop();\n    var b = stack.pop();\n    var c = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'ROLL[]'); }\n\n    stack.push(b);\n    stack.push(a);\n    stack.push(c);\n}\n\n// MAX[] MAXimum of top two stack elements\n// 0x8B\nfunction MAX(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'MAX[]', e2, e1); }\n\n    stack.push(Math.max(e1, e2));\n}\n\n// MIN[] MINimum of top two stack elements\n// 0x8C\nfunction MIN(state) {\n    var stack = state.stack;\n    var e2 = stack.pop();\n    var e1 = stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'MIN[]', e2, e1); }\n\n    stack.push(Math.min(e1, e2));\n}\n\n// SCANTYPE[] SCANTYPE\n// 0x8D\nfunction SCANTYPE(state) {\n    var n = state.stack.pop();\n    // ignored by opentype.js\n    if (exports.DEBUG) { console.log(state.step, 'SCANTYPE[]', n); }\n}\n\n// INSTCTRL[] INSTCTRL\n// 0x8D\nfunction INSTCTRL(state) {\n    var s = state.stack.pop();\n    var v = state.stack.pop();\n\n    if (exports.DEBUG) { console.log(state.step, 'INSTCTRL[]', s, v); }\n\n    switch (s) {\n        case 1 : state.inhibitGridFit = !!v; return;\n        case 2 : state.ignoreCvt = !!v; return;\n        default: throw new Error('invalid INSTCTRL[] selector');\n    }\n}\n\n// PUSHB[abc] PUSH Bytes\n// 0xB0-0xB7\nfunction PUSHB(n, state) {\n    var stack = state.stack;\n    var prog = state.prog;\n    var ip = state.ip;\n\n    if (exports.DEBUG) { console.log(state.step, 'PUSHB[' + n + ']'); }\n\n    for (var i = 0; i < n; i++) { stack.push(prog[++ip]); }\n\n    state.ip = ip;\n}\n\n// PUSHW[abc] PUSH Words\n// 0xB8-0xBF\nfunction PUSHW(n, state) {\n    var ip = state.ip;\n    var prog = state.prog;\n    var stack = state.stack;\n\n    if (exports.DEBUG) { console.log(state.ip, 'PUSHW[' + n + ']'); }\n\n    for (var i = 0; i < n; i++) {\n        var w = (prog[++ip] << 8) | prog[++ip];\n        if (w & 0x8000) { w = -((w ^ 0xffff) + 1); }\n        stack.push(w);\n    }\n\n    state.ip = ip;\n}\n\n// MDRP[abcde] Move Direct Relative Point\n// 0xD0-0xEF\n// (if indirect is 0)\n//\n// and\n//\n// MIRP[abcde] Move Indirect Relative Point\n// 0xE0-0xFF\n// (if indirect is 1)\n\nfunction MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {\n    var stack = state.stack;\n    var cvte = indirect && stack.pop();\n    var pi = stack.pop();\n    var rp0i = state.rp0;\n    var rp = state.z0[rp0i];\n    var p = state.z1[pi];\n\n    var md = state.minDis;\n    var fv = state.fv;\n    var pv = state.dpv;\n    var od; // original distance\n    var d; // moving distance\n    var sign; // sign of distance\n    var cv;\n\n    d = od = pv.distance(p, rp, true, true);\n    sign = d >= 0 ? 1 : -1; // Math.sign would be 0 in case of 0\n\n    // TODO consider autoFlip\n    d = Math.abs(d);\n\n    if (indirect) {\n        cv = state.cvt[cvte];\n\n        if (ro && Math.abs(d - cv) < state.cvCutIn) { d = cv; }\n    }\n\n    if (keepD && d < md) { d = md; }\n\n    if (ro) { d = state.round(d); }\n\n    fv.setRelative(p, rp, sign * d, pv);\n    fv.touch(p);\n\n    if (exports.DEBUG) {\n        console.log(\n            state.step,\n            (indirect ? 'MIRP[' : 'MDRP[') +\n            (setRp0 ? 'M' : 'm') +\n            (keepD ? '>' : '_') +\n            (ro ? 'R' : '_') +\n            (dt === 0 ? 'Gr' : (dt === 1 ? 'Bl' : (dt === 2 ? 'Wh' : ''))) +\n            ']',\n            indirect ?\n                cvte + '(' + state.cvt[cvte] + ',' +  cv + ')' :\n                '',\n            pi,\n            '(d =', od, '->', sign * d, ')'\n        );\n    }\n\n    state.rp1 = state.rp0;\n    state.rp2 = pi;\n    if (setRp0) { state.rp0 = pi; }\n}\n\n/*\n* The instruction table.\n*/\ninstructionTable = [\n    /* 0x00 */ SVTCA.bind(undefined, yUnitVector),\n    /* 0x01 */ SVTCA.bind(undefined, xUnitVector),\n    /* 0x02 */ SPVTCA.bind(undefined, yUnitVector),\n    /* 0x03 */ SPVTCA.bind(undefined, xUnitVector),\n    /* 0x04 */ SFVTCA.bind(undefined, yUnitVector),\n    /* 0x05 */ SFVTCA.bind(undefined, xUnitVector),\n    /* 0x06 */ SPVTL.bind(undefined, 0),\n    /* 0x07 */ SPVTL.bind(undefined, 1),\n    /* 0x08 */ SFVTL.bind(undefined, 0),\n    /* 0x09 */ SFVTL.bind(undefined, 1),\n    /* 0x0A */ SPVFS,\n    /* 0x0B */ SFVFS,\n    /* 0x0C */ GPV,\n    /* 0x0D */ GFV,\n    /* 0x0E */ SFVTPV,\n    /* 0x0F */ ISECT,\n    /* 0x10 */ SRP0,\n    /* 0x11 */ SRP1,\n    /* 0x12 */ SRP2,\n    /* 0x13 */ SZP0,\n    /* 0x14 */ SZP1,\n    /* 0x15 */ SZP2,\n    /* 0x16 */ SZPS,\n    /* 0x17 */ SLOOP,\n    /* 0x18 */ RTG,\n    /* 0x19 */ RTHG,\n    /* 0x1A */ SMD,\n    /* 0x1B */ ELSE,\n    /* 0x1C */ JMPR,\n    /* 0x1D */ SCVTCI,\n    /* 0x1E */ undefined,   // TODO SSWCI\n    /* 0x1F */ undefined,   // TODO SSW\n    /* 0x20 */ DUP,\n    /* 0x21 */ POP,\n    /* 0x22 */ CLEAR,\n    /* 0x23 */ SWAP,\n    /* 0x24 */ DEPTH,\n    /* 0x25 */ CINDEX,\n    /* 0x26 */ MINDEX,\n    /* 0x27 */ undefined,   // TODO ALIGNPTS\n    /* 0x28 */ undefined,\n    /* 0x29 */ undefined,   // TODO UTP\n    /* 0x2A */ LOOPCALL,\n    /* 0x2B */ CALL,\n    /* 0x2C */ FDEF,\n    /* 0x2D */ undefined,   // ENDF (eaten by FDEF)\n    /* 0x2E */ MDAP.bind(undefined, 0),\n    /* 0x2F */ MDAP.bind(undefined, 1),\n    /* 0x30 */ IUP.bind(undefined, yUnitVector),\n    /* 0x31 */ IUP.bind(undefined, xUnitVector),\n    /* 0x32 */ SHP.bind(undefined, 0),\n    /* 0x33 */ SHP.bind(undefined, 1),\n    /* 0x34 */ SHC.bind(undefined, 0),\n    /* 0x35 */ SHC.bind(undefined, 1),\n    /* 0x36 */ SHZ.bind(undefined, 0),\n    /* 0x37 */ SHZ.bind(undefined, 1),\n    /* 0x38 */ SHPIX,\n    /* 0x39 */ IP,\n    /* 0x3A */ MSIRP.bind(undefined, 0),\n    /* 0x3B */ MSIRP.bind(undefined, 1),\n    /* 0x3C */ ALIGNRP,\n    /* 0x3D */ RTDG,\n    /* 0x3E */ MIAP.bind(undefined, 0),\n    /* 0x3F */ MIAP.bind(undefined, 1),\n    /* 0x40 */ NPUSHB,\n    /* 0x41 */ NPUSHW,\n    /* 0x42 */ WS,\n    /* 0x43 */ RS,\n    /* 0x44 */ WCVTP,\n    /* 0x45 */ RCVT,\n    /* 0x46 */ GC.bind(undefined, 0),\n    /* 0x47 */ GC.bind(undefined, 1),\n    /* 0x48 */ undefined,   // TODO SCFS\n    /* 0x49 */ MD.bind(undefined, 0),\n    /* 0x4A */ MD.bind(undefined, 1),\n    /* 0x4B */ MPPEM,\n    /* 0x4C */ undefined,   // TODO MPS\n    /* 0x4D */ FLIPON,\n    /* 0x4E */ undefined,   // TODO FLIPOFF\n    /* 0x4F */ undefined,   // TODO DEBUG\n    /* 0x50 */ LT,\n    /* 0x51 */ LTEQ,\n    /* 0x52 */ GT,\n    /* 0x53 */ GTEQ,\n    /* 0x54 */ EQ,\n    /* 0x55 */ NEQ,\n    /* 0x56 */ ODD,\n    /* 0x57 */ EVEN,\n    /* 0x58 */ IF,\n    /* 0x59 */ EIF,\n    /* 0x5A */ AND,\n    /* 0x5B */ OR,\n    /* 0x5C */ NOT,\n    /* 0x5D */ DELTAP123.bind(undefined, 1),\n    /* 0x5E */ SDB,\n    /* 0x5F */ SDS,\n    /* 0x60 */ ADD,\n    /* 0x61 */ SUB,\n    /* 0x62 */ DIV,\n    /* 0x63 */ MUL,\n    /* 0x64 */ ABS,\n    /* 0x65 */ NEG,\n    /* 0x66 */ FLOOR,\n    /* 0x67 */ CEILING,\n    /* 0x68 */ ROUND.bind(undefined, 0),\n    /* 0x69 */ ROUND.bind(undefined, 1),\n    /* 0x6A */ ROUND.bind(undefined, 2),\n    /* 0x6B */ ROUND.bind(undefined, 3),\n    /* 0x6C */ undefined,   // TODO NROUND[ab]\n    /* 0x6D */ undefined,   // TODO NROUND[ab]\n    /* 0x6E */ undefined,   // TODO NROUND[ab]\n    /* 0x6F */ undefined,   // TODO NROUND[ab]\n    /* 0x70 */ WCVTF,\n    /* 0x71 */ DELTAP123.bind(undefined, 2),\n    /* 0x72 */ DELTAP123.bind(undefined, 3),\n    /* 0x73 */ DELTAC123.bind(undefined, 1),\n    /* 0x74 */ DELTAC123.bind(undefined, 2),\n    /* 0x75 */ DELTAC123.bind(undefined, 3),\n    /* 0x76 */ SROUND,\n    /* 0x77 */ S45ROUND,\n    /* 0x78 */ undefined,   // TODO JROT[]\n    /* 0x79 */ undefined,   // TODO JROF[]\n    /* 0x7A */ ROFF,\n    /* 0x7B */ undefined,\n    /* 0x7C */ RUTG,\n    /* 0x7D */ RDTG,\n    /* 0x7E */ POP, // actually SANGW, supposed to do only a pop though\n    /* 0x7F */ POP, // actually AA, supposed to do only a pop though\n    /* 0x80 */ undefined,   // TODO FLIPPT\n    /* 0x81 */ undefined,   // TODO FLIPRGON\n    /* 0x82 */ undefined,   // TODO FLIPRGOFF\n    /* 0x83 */ undefined,\n    /* 0x84 */ undefined,\n    /* 0x85 */ SCANCTRL,\n    /* 0x86 */ SDPVTL.bind(undefined, 0),\n    /* 0x87 */ SDPVTL.bind(undefined, 1),\n    /* 0x88 */ GETINFO,\n    /* 0x89 */ undefined,   // TODO IDEF\n    /* 0x8A */ ROLL,\n    /* 0x8B */ MAX,\n    /* 0x8C */ MIN,\n    /* 0x8D */ SCANTYPE,\n    /* 0x8E */ INSTCTRL,\n    /* 0x8F */ undefined,\n    /* 0x90 */ undefined,\n    /* 0x91 */ undefined,\n    /* 0x92 */ undefined,\n    /* 0x93 */ undefined,\n    /* 0x94 */ undefined,\n    /* 0x95 */ undefined,\n    /* 0x96 */ undefined,\n    /* 0x97 */ undefined,\n    /* 0x98 */ undefined,\n    /* 0x99 */ undefined,\n    /* 0x9A */ undefined,\n    /* 0x9B */ undefined,\n    /* 0x9C */ undefined,\n    /* 0x9D */ undefined,\n    /* 0x9E */ undefined,\n    /* 0x9F */ undefined,\n    /* 0xA0 */ undefined,\n    /* 0xA1 */ undefined,\n    /* 0xA2 */ undefined,\n    /* 0xA3 */ undefined,\n    /* 0xA4 */ undefined,\n    /* 0xA5 */ undefined,\n    /* 0xA6 */ undefined,\n    /* 0xA7 */ undefined,\n    /* 0xA8 */ undefined,\n    /* 0xA9 */ undefined,\n    /* 0xAA */ undefined,\n    /* 0xAB */ undefined,\n    /* 0xAC */ undefined,\n    /* 0xAD */ undefined,\n    /* 0xAE */ undefined,\n    /* 0xAF */ undefined,\n    /* 0xB0 */ PUSHB.bind(undefined, 1),\n    /* 0xB1 */ PUSHB.bind(undefined, 2),\n    /* 0xB2 */ PUSHB.bind(undefined, 3),\n    /* 0xB3 */ PUSHB.bind(undefined, 4),\n    /* 0xB4 */ PUSHB.bind(undefined, 5),\n    /* 0xB5 */ PUSHB.bind(undefined, 6),\n    /* 0xB6 */ PUSHB.bind(undefined, 7),\n    /* 0xB7 */ PUSHB.bind(undefined, 8),\n    /* 0xB8 */ PUSHW.bind(undefined, 1),\n    /* 0xB9 */ PUSHW.bind(undefined, 2),\n    /* 0xBA */ PUSHW.bind(undefined, 3),\n    /* 0xBB */ PUSHW.bind(undefined, 4),\n    /* 0xBC */ PUSHW.bind(undefined, 5),\n    /* 0xBD */ PUSHW.bind(undefined, 6),\n    /* 0xBE */ PUSHW.bind(undefined, 7),\n    /* 0xBF */ PUSHW.bind(undefined, 8),\n    /* 0xC0 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 0),\n    /* 0xC1 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 1),\n    /* 0xC2 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 2),\n    /* 0xC3 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 3),\n    /* 0xC4 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 0),\n    /* 0xC5 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 1),\n    /* 0xC6 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 2),\n    /* 0xC7 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 3),\n    /* 0xC8 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 0),\n    /* 0xC9 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 1),\n    /* 0xCA */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 2),\n    /* 0xCB */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 3),\n    /* 0xCC */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 0),\n    /* 0xCD */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 1),\n    /* 0xCE */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 2),\n    /* 0xCF */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 3),\n    /* 0xD0 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 0),\n    /* 0xD1 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 1),\n    /* 0xD2 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 2),\n    /* 0xD3 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 3),\n    /* 0xD4 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 0),\n    /* 0xD5 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 1),\n    /* 0xD6 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 2),\n    /* 0xD7 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 3),\n    /* 0xD8 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 0),\n    /* 0xD9 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 1),\n    /* 0xDA */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 2),\n    /* 0xDB */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 3),\n    /* 0xDC */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 0),\n    /* 0xDD */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 1),\n    /* 0xDE */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 2),\n    /* 0xDF */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 3),\n    /* 0xE0 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 0),\n    /* 0xE1 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 1),\n    /* 0xE2 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 2),\n    /* 0xE3 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 3),\n    /* 0xE4 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 0),\n    /* 0xE5 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 1),\n    /* 0xE6 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 2),\n    /* 0xE7 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 3),\n    /* 0xE8 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 0),\n    /* 0xE9 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 1),\n    /* 0xEA */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 2),\n    /* 0xEB */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 3),\n    /* 0xEC */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 0),\n    /* 0xED */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 1),\n    /* 0xEE */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 2),\n    /* 0xEF */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 3),\n    /* 0xF0 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 0),\n    /* 0xF1 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 1),\n    /* 0xF2 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 2),\n    /* 0xF3 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 3),\n    /* 0xF4 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 0),\n    /* 0xF5 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 1),\n    /* 0xF6 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 2),\n    /* 0xF7 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 3),\n    /* 0xF8 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 0),\n    /* 0xF9 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 1),\n    /* 0xFA */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 2),\n    /* 0xFB */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 3),\n    /* 0xFC */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 0),\n    /* 0xFD */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 1),\n    /* 0xFE */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 2),\n    /* 0xFF */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 3)\n];\n\n/*****************************\n  Mathematical Considerations\n******************************\n\nfv ... refers to freedom vector\npv ... refers to projection vector\nrp ... refers to reference point\np  ... refers to to point being operated on\nd  ... refers to distance\n\nSETRELATIVE:\n============\n\ncase freedom vector == x-axis:\n------------------------------\n\n                        (pv)\n                     .-'\n              rpd .-'\n               .-*\n          d .-'90°'\n         .-'       '\n      .-'           '\n   *-'               ' b\n  rp                  '\n                       '\n                        '\n            p *----------*-------------- (fv)\n                          pm\n\n  rpdx = rpx + d * pv.x\n  rpdy = rpy + d * pv.y\n\n  equation of line b\n\n   y - rpdy = pvns * (x- rpdx)\n\n   y = p.y\n\n   x = rpdx + ( p.y - rpdy ) / pvns\n\n\ncase freedom vector == y-axis:\n------------------------------\n\n    * pm\n    |\\\n    | \\\n    |  \\\n    |   \\\n    |    \\\n    |     \\\n    |      \\\n    |       \\\n    |        \\\n    |         \\ b\n    |          \\\n    |           \\\n    |            \\    .-' (pv)\n    |         90° \\.-'\n    |           .-'* rpd\n    |        .-'\n    *     *-'  d\n    p     rp\n\n  rpdx = rpx + d * pv.x\n  rpdy = rpy + d * pv.y\n\n  equation of line b:\n           pvns ... normal slope to pv\n\n   y - rpdy = pvns * (x - rpdx)\n\n   x = p.x\n\n   y = rpdy +  pvns * (p.x - rpdx)\n\n\n\ngeneric case:\n-------------\n\n\n                              .'(fv)\n                            .'\n                          .* pm\n                        .' !\n                      .'    .\n                    .'      !\n                  .'         . b\n                .'           !\n               *              .\n              p               !\n                         90°   .    ... (pv)\n                           ...-*-'''\n                  ...---'''    rpd\n         ...---'''   d\n   *--'''\n  rp\n\n    rpdx = rpx + d * pv.x\n    rpdy = rpy + d * pv.y\n\n equation of line b:\n    pvns... normal slope to pv\n\n    y - rpdy = pvns * (x - rpdx)\n\n equation of freedom vector line:\n    fvs ... slope of freedom vector (=fy/fx)\n\n    y - py = fvs * (x - px)\n\n\n  on pm both equations are true for same x/y\n\n    y - rpdy = pvns * (x - rpdx)\n\n    y - py = fvs * (x - px)\n\n  form to y and set equal:\n\n    pvns * (x - rpdx) + rpdy = fvs * (x - px) + py\n\n  expand:\n\n    pvns * x - pvns * rpdx + rpdy = fvs * x - fvs * px + py\n\n  switch:\n\n    fvs * x - fvs * px + py = pvns * x - pvns * rpdx + rpdy\n\n  solve for x:\n\n    fvs * x - pvns * x = fvs * px - pvns * rpdx - py + rpdy\n\n\n\n          fvs * px - pvns * rpdx + rpdy - py\n    x =  -----------------------------------\n                 fvs - pvns\n\n  and:\n\n    y = fvs * (x - px) + py\n\n\n\nINTERPOLATE:\n============\n\nExamples of point interpolation.\n\nThe weight of the movement of the reference point gets bigger\nthe further the other reference point is away, thus the safest\noption (that is avoiding 0/0 divisions) is to weight the\noriginal distance of the other point by the sum of both distances.\n\nIf the sum of both distances is 0, then move the point by the\narithmetic average of the movement of both reference points.\n\n\n\n\n           (+6)\n    rp1o *---->*rp1\n         .     .                          (+12)\n         .     .                  rp2o *---------->* rp2\n         .     .                       .           .\n         .     .                       .           .\n         .    10          20           .           .\n         |.........|...................|           .\n               .   .                               .\n               .   . (+8)                          .\n                po *------>*p                      .\n               .           .                       .\n               .    12     .          24           .\n               |...........|.......................|\n                                  36\n\n\n-------\n\n\n\n           (+10)\n    rp1o *-------->*rp1\n         .         .                      (-10)\n         .         .              rp2 *<---------* rpo2\n         .         .                   .         .\n         .         .                   .         .\n         .    10   .          30       .         .\n         |.........|.............................|\n                   .                   .\n                   . (+5)              .\n                po *--->* p            .\n                   .    .              .\n                   .    .   20         .\n                   |....|..............|\n                     5        15\n\n\n-------\n\n\n           (+10)\n    rp1o *-------->*rp1\n         .         .\n         .         .\n    rp2o *-------->*rp2\n\n\n                               (+10)\n                          po *-------->* p\n\n-------\n\n\n           (+10)\n    rp1o *-------->*rp1\n         .         .\n         .         .(+30)\n    rp2o *---------------------------->*rp2\n\n\n                                        (+25)\n                          po *----------------------->* p\n\n\n\nvim: set ts=4 sw=4 expandtab:\n*****/\n\n/**\n * Converts a string into a list of tokens.\n */\n\n/**\n * Create a new token\n * @param {string} char a single char\n */\nfunction Token(char) {\n    this.char = char;\n    this.state = {};\n    this.activeState = null;\n}\n\n/**\n * Create a new context range\n * @param {number} startIndex range start index\n * @param {number} endOffset range end index offset\n * @param {string} contextName owner context name\n */\nfunction ContextRange(startIndex, endOffset, contextName) {\n    this.contextName = contextName;\n    this.startIndex = startIndex;\n    this.endOffset = endOffset;\n}\n\n/**\n * Check context start and end\n * @param {string} contextName a unique context name\n * @param {function} checkStart a predicate function the indicates a context's start\n * @param {function} checkEnd a predicate function the indicates a context's end\n */\nfunction ContextChecker(contextName, checkStart, checkEnd) {\n    this.contextName = contextName;\n    this.openRange = null;\n    this.ranges = [];\n    this.checkStart = checkStart;\n    this.checkEnd = checkEnd;\n}\n\n/**\n * @typedef ContextParams\n * @type Object\n * @property {array} context context items\n * @property {number} currentIndex current item index\n */\n\n/**\n * Create a context params\n * @param {array} context a list of items\n * @param {number} currentIndex current item index\n */\nfunction ContextParams(context, currentIndex) {\n    this.context = context;\n    this.index = currentIndex;\n    this.length = context.length;\n    this.current = context[currentIndex];\n    this.backtrack = context.slice(0, currentIndex);\n    this.lookahead = context.slice(currentIndex + 1);\n}\n\n/**\n * Create an event instance\n * @param {string} eventId event unique id\n */\nfunction Event(eventId) {\n    this.eventId = eventId;\n    this.subscribers = [];\n}\n\n/**\n * Initialize a core events and auto subscribe required event handlers\n * @param {any} events an object that enlists core events handlers\n */\nfunction initializeCoreEvents(events) {\n    var this$1 = this;\n\n    var coreEvents = [\n        'start', 'end', 'next', 'newToken', 'contextStart',\n        'contextEnd', 'insertToken', 'removeToken', 'removeRange',\n        'replaceToken', 'replaceRange', 'composeRUD', 'updateContextsRanges'\n    ];\n\n    coreEvents.forEach(function (eventId) {\n        Object.defineProperty(this$1.events, eventId, {\n            value: new Event(eventId)\n        });\n    });\n\n    if (!!events) {\n        coreEvents.forEach(function (eventId) {\n            var event = events[eventId];\n            if (typeof event === 'function') {\n                this$1.events[eventId].subscribe(event);\n            }\n        });\n    }\n    var requiresContextUpdate = [\n        'insertToken', 'removeToken', 'removeRange',\n        'replaceToken', 'replaceRange', 'composeRUD'\n    ];\n    requiresContextUpdate.forEach(function (eventId) {\n        this$1.events[eventId].subscribe(\n            this$1.updateContextsRanges\n        );\n    });\n}\n\n/**\n * Converts a string into a list of tokens\n * @param {any} events tokenizer core events\n */\nfunction Tokenizer(events) {\n    this.tokens = [];\n    this.registeredContexts = {};\n    this.contextCheckers = [];\n    this.events = {};\n    this.registeredModifiers = [];\n\n    initializeCoreEvents.call(this, events);\n}\n\n/**\n * Sets the state of a token, usually called by a state modifier.\n * @param {string} key state item key\n * @param {any} value state item value\n */\nToken.prototype.setState = function(key, value) {\n    this.state[key] = value;\n    this.activeState = { key: key, value: this.state[key] };\n    return this.activeState;\n};\n\nToken.prototype.getState = function (stateId) {\n    return this.state[stateId] || null;\n};\n\n/**\n * Checks if an index exists in the tokens list.\n * @param {number} index token index\n */\nTokenizer.prototype.inboundIndex = function(index) {\n    return index >= 0 && index < this.tokens.length;\n};\n\n/**\n * Compose and apply a list of operations (replace, update, delete)\n * @param {array} RUDs replace, update and delete operations\n * TODO: Perf. Optimization (lengthBefore === lengthAfter ? dispatch once)\n */\nTokenizer.prototype.composeRUD = function (RUDs) {\n    var this$1 = this;\n\n    var silent = true;\n    var state = RUDs.map(function (RUD) { return (\n        this$1[RUD[0]].apply(this$1, RUD.slice(1).concat(silent))\n    ); });\n    var hasFAILObject = function (obj) { return (\n        typeof obj === 'object' &&\n        obj.hasOwnProperty('FAIL')\n    ); };\n    if (state.every(hasFAILObject)) {\n        return {\n            FAIL: \"composeRUD: one or more operations hasn't completed successfully\",\n            report: state.filter(hasFAILObject)\n        };\n    }\n    this.dispatch('composeRUD', [state.filter(function (op) { return !hasFAILObject(op); })]);\n};\n\n/**\n * Replace a range of tokens with a list of tokens\n * @param {number} startIndex range start index\n * @param {number} offset range offset\n * @param {token} tokens a list of tokens to replace\n * @param {boolean} silent dispatch events and update context ranges\n */\nTokenizer.prototype.replaceRange = function (startIndex, offset, tokens, silent) {\n    offset = offset !== null ? offset : this.tokens.length;\n    var isTokenType = tokens.every(function (token) { return token instanceof Token; });\n    if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {\n        var replaced = this.tokens.splice.apply(\n            this.tokens, [startIndex, offset].concat(tokens)\n        );\n        if (!silent) { this.dispatch('replaceToken', [startIndex, offset, tokens]); }\n        return [replaced, tokens];\n    } else {\n        return { FAIL: 'replaceRange: invalid tokens or startIndex.' };\n    }\n};\n\n/**\n * Replace a token with another token\n * @param {number} index token index\n * @param {token} token a token to replace\n * @param {boolean} silent dispatch events and update context ranges\n */\nTokenizer.prototype.replaceToken = function (index, token, silent) {\n    if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {\n        var replaced = this.tokens.splice(index, 1, token);\n        if (!silent) { this.dispatch('replaceToken', [index, token]); }\n        return [replaced[0], token];\n    } else {\n        return { FAIL: 'replaceToken: invalid token or index.' };\n    }\n};\n\n/**\n * Removes a range of tokens\n * @param {number} startIndex range start index\n * @param {number} offset range offset\n * @param {boolean} silent dispatch events and update context ranges\n */\nTokenizer.prototype.removeRange = function(startIndex, offset, silent) {\n    offset = !isNaN(offset) ? offset : this.tokens.length;\n    var tokens = this.tokens.splice(startIndex, offset);\n    if (!silent) { this.dispatch('removeRange', [tokens, startIndex, offset]); }\n    return tokens;\n};\n\n/**\n * Remove a token at a certain index\n * @param {number} index token index\n * @param {boolean} silent dispatch events and update context ranges\n */\nTokenizer.prototype.removeToken = function(index, silent) {\n    if (!isNaN(index) && this.inboundIndex(index)) {\n        var token = this.tokens.splice(index, 1);\n        if (!silent) { this.dispatch('removeToken', [token, index]); }\n        return token;\n    } else {\n        return { FAIL: 'removeToken: invalid token index.' };\n    }\n};\n\n/**\n * Insert a list of tokens at a certain index\n * @param {array} tokens a list of tokens to insert\n * @param {number} index insert the list of tokens at index\n * @param {boolean} silent dispatch events and update context ranges\n */\nTokenizer.prototype.insertToken = function (tokens, index, silent) {\n    var tokenType = tokens.every(\n        function (token) { return token instanceof Token; }\n    );\n    if (tokenType) {\n        this.tokens.splice.apply(\n            this.tokens, [index, 0].concat(tokens)\n        );\n        if (!silent) { this.dispatch('insertToken', [tokens, index]); }\n        return tokens;\n    } else {\n        return { FAIL: 'insertToken: invalid token(s).' };\n    }\n};\n\n/**\n * A state modifier that is called on 'newToken' event\n * @param {string} modifierId state modifier id\n * @param {function} condition a predicate function that returns true or false\n * @param {function} modifier a function to update token state\n */\nTokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {\n    this.events.newToken.subscribe(function(token, contextParams) {\n        var conditionParams = [token, contextParams];\n        var canApplyModifier = (\n            condition === null ||\n            condition.apply(this, conditionParams) === true\n        );\n        var modifierParams = [token, contextParams];\n        if (canApplyModifier) {\n            var newStateValue = modifier.apply(this, modifierParams);\n            token.setState(modifierId, newStateValue);\n        }\n    });\n    this.registeredModifiers.push(modifierId);\n};\n\n/**\n * Subscribe a handler to an event\n * @param {function} eventHandler an event handler function\n */\nEvent.prototype.subscribe = function (eventHandler) {\n    if (typeof eventHandler === 'function') {\n        return ((this.subscribers.push(eventHandler)) - 1);\n    } else {\n        return { FAIL: (\"invalid '\" + (this.eventId) + \"' event handler\")};\n    }\n};\n\n/**\n * Unsubscribe an event handler\n * @param {string} subsId subscription id\n */\nEvent.prototype.unsubscribe = function (subsId) {\n    this.subscribers.splice(subsId, 1);\n};\n\n/**\n * Sets context params current value index\n * @param {number} index context params current value index\n */\nContextParams.prototype.setCurrentIndex = function(index) {\n    this.index = index;\n    this.current = this.context[index];\n    this.backtrack = this.context.slice(0, index);\n    this.lookahead = this.context.slice(index + 1);\n};\n\n/**\n * Get an item at an offset from the current value\n * example (current value is 3):\n *  1    2   [3]   4    5   |   items values\n * -2   -1    0    1    2   |   offset values\n * @param {number} offset an offset from current value index\n */\nContextParams.prototype.get = function (offset) {\n    switch (true) {\n        case (offset === 0):\n            return this.current;\n        case (offset < 0 && Math.abs(offset) <= this.backtrack.length):\n            return this.backtrack.slice(offset)[0];\n        case (offset > 0 && offset <= this.lookahead.length):\n            return this.lookahead[offset - 1];\n        default:\n            return null;\n    }\n};\n\n/**\n * Converts a context range into a string value\n * @param {contextRange} range a context range\n */\nTokenizer.prototype.rangeToText = function (range) {\n    if (range instanceof ContextRange) {\n        return (\n            this.getRangeTokens(range)\n                .map(function (token) { return token.char; }).join('')\n        );\n    }\n};\n\n/**\n * Converts all tokens into a string\n */\nTokenizer.prototype.getText = function () {\n    return this.tokens.map(function (token) { return token.char; }).join('');\n};\n\n/**\n * Get a context by name\n * @param {string} contextName context name to get\n */\nTokenizer.prototype.getContext = function (contextName) {\n    var context = this.registeredContexts[contextName];\n    return !!context ? context : null;\n};\n\n/**\n * Subscribes a new event handler to an event\n * @param {string} eventName event name to subscribe to\n * @param {function} eventHandler a function to be invoked on event\n */\nTokenizer.prototype.on = function(eventName, eventHandler) {\n    var event = this.events[eventName];\n    if (!!event) {\n        return event.subscribe(eventHandler);\n    } else {\n        return null;\n    }\n};\n\n/**\n * Dispatches an event\n * @param {string} eventName event name\n * @param {any} args event handler arguments\n */\nTokenizer.prototype.dispatch = function(eventName, args) {\n    var this$1 = this;\n\n    var event = this.events[eventName];\n    if (event instanceof Event) {\n        event.subscribers.forEach(function (subscriber) {\n            subscriber.apply(this$1, args || []);\n        });\n    }\n};\n\n/**\n * Register a new context checker\n * @param {string} contextName a unique context name\n * @param {function} contextStartCheck a predicate function that returns true on context start\n * @param {function} contextEndCheck  a predicate function that returns true on context end\n * TODO: call tokenize on registration to update context ranges with the new context.\n */\nTokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {\n    if (!!this.getContext(contextName)) { return {\n        FAIL:\n        (\"context name '\" + contextName + \"' is already registered.\")\n    }; }\n    if (typeof contextStartCheck !== 'function') { return {\n        FAIL:\n        \"missing context start check.\"\n    }; }\n    if (typeof contextEndCheck !== 'function') { return {\n        FAIL:\n        \"missing context end check.\"\n    }; }\n    var contextCheckers = new ContextChecker(\n        contextName, contextStartCheck, contextEndCheck\n    );\n    this.registeredContexts[contextName] = contextCheckers;\n    this.contextCheckers.push(contextCheckers);\n    return contextCheckers;\n};\n\n/**\n * Gets a context range tokens\n * @param {contextRange} range a context range\n */\nTokenizer.prototype.getRangeTokens = function(range) {\n    var endIndex = range.startIndex + range.endOffset;\n    return [].concat(\n        this.tokens\n            .slice(range.startIndex, endIndex)\n    );\n};\n\n/**\n * Gets the ranges of a context\n * @param {string} contextName context name\n */\nTokenizer.prototype.getContextRanges = function(contextName) {\n    var context = this.getContext(contextName);\n    if (!!context) {\n        return context.ranges;\n    } else {\n        return { FAIL: (\"context checker '\" + contextName + \"' is not registered.\") };\n    }\n};\n\n/**\n * Resets context ranges to run context update\n */\nTokenizer.prototype.resetContextsRanges = function () {\n    var registeredContexts = this.registeredContexts;\n    for (var contextName in registeredContexts) {\n        if (registeredContexts.hasOwnProperty(contextName)) {\n            var context = registeredContexts[contextName];\n            context.ranges = [];\n        }\n    }\n};\n\n/**\n * Updates context ranges\n */\nTokenizer.prototype.updateContextsRanges = function () {\n    this.resetContextsRanges();\n    var chars = this.tokens.map(function (token) { return token.char; });\n    for (var i = 0; i < chars.length; i++) {\n        var contextParams = new ContextParams(chars, i);\n        this.runContextCheck(contextParams);\n    }\n    this.dispatch('updateContextsRanges', [this.registeredContexts]);\n};\n\n/**\n * Sets the end offset of an open range\n * @param {number} offset range end offset\n * @param {string} contextName context name\n */\nTokenizer.prototype.setEndOffset = function (offset, contextName) {\n    var startIndex = this.getContext(contextName).openRange.startIndex;\n    var range = new ContextRange(startIndex, offset, contextName);\n    var ranges = this.getContext(contextName).ranges;\n    range.rangeId = contextName + \".\" + (ranges.length);\n    ranges.push(range);\n    this.getContext(contextName).openRange = null;\n    return range;\n};\n\n/**\n * Runs a context check on the current context\n * @param {contextParams} contextParams current context params\n */\nTokenizer.prototype.runContextCheck = function(contextParams) {\n    var this$1 = this;\n\n    var index = contextParams.index;\n    this.contextCheckers.forEach(function (contextChecker) {\n        var contextName = contextChecker.contextName;\n        var openRange = this$1.getContext(contextName).openRange;\n        if (!openRange && contextChecker.checkStart(contextParams)) {\n            openRange = new ContextRange(index, null, contextName);\n            this$1.getContext(contextName).openRange = openRange;\n            this$1.dispatch('contextStart', [contextName, index]);\n        }\n        if (!!openRange && contextChecker.checkEnd(contextParams)) {\n            var offset = (index - openRange.startIndex) + 1;\n            var range = this$1.setEndOffset(offset, contextName);\n            this$1.dispatch('contextEnd', [contextName, range]);\n        }\n    });\n};\n\n/**\n * Converts a text into a list of tokens\n * @param {string} text a text to tokenize\n */\nTokenizer.prototype.tokenize = function (text) {\n    this.tokens = [];\n    this.resetContextsRanges();\n    var chars = Array.from(text);\n    this.dispatch('start');\n    for (var i = 0; i < chars.length; i++) {\n        var char = chars[i];\n        var contextParams = new ContextParams(chars, i);\n        this.dispatch('next', [contextParams]);\n        this.runContextCheck(contextParams);\n        var token = new Token(char);\n        this.tokens.push(token);\n        this.dispatch('newToken', [token, contextParams]);\n    }\n    this.dispatch('end', [this.tokens]);\n    return this.tokens;\n};\n\n// ╭─┄┄┄────────────────────────┄─────────────────────────────────────────────╮\n// ┊ Character Class Assertions ┊ Checks if a char belongs to a certain class ┊\n// ╰─╾──────────────────────────┄─────────────────────────────────────────────╯\n// jscs:disable maximumLineLength\n/**\n * Check if a char is Arabic\n * @param {string} c a single char\n */\nfunction isArabicChar(c) {\n    return /[\\u0600-\\u065F\\u066A-\\u06D2\\u06FA-\\u06FF]/.test(c);\n}\n\n/**\n * Check if a char is an isolated arabic char\n * @param {string} c a single char\n */\nfunction isIsolatedArabicChar(char) {\n    return /[\\u0630\\u0690\\u0621\\u0631\\u0661\\u0671\\u0622\\u0632\\u0672\\u0692\\u06C2\\u0623\\u0673\\u0693\\u06C3\\u0624\\u0694\\u06C4\\u0625\\u0675\\u0695\\u06C5\\u06E5\\u0676\\u0696\\u06C6\\u0627\\u0677\\u0697\\u06C7\\u0648\\u0688\\u0698\\u06C8\\u0689\\u0699\\u06C9\\u068A\\u06CA\\u066B\\u068B\\u06CB\\u068C\\u068D\\u06CD\\u06FD\\u068E\\u06EE\\u06FE\\u062F\\u068F\\u06CF\\u06EF]/.test(char);\n}\n\n/**\n * Check if a char is an Arabic Tashkeel char\n * @param {string} c a single char\n */\nfunction isTashkeelArabicChar(char) {\n    return /[\\u0600-\\u0605\\u060C-\\u060E\\u0610-\\u061B\\u061E\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]/.test(char);\n}\n\n/**\n * Check if a char is Latin\n * @param {string} c a single char\n */\nfunction isLatinChar(c) {\n    return /[A-z]/.test(c);\n}\n\n/**\n * Check if a char is whitespace char\n * @param {string} c a single char\n */\nfunction isWhiteSpace(c) {\n    return /\\s/.test(c);\n}\n\n/**\n * Query a feature by some of it's properties to lookup a glyph substitution.\n */\n\n/**\n * Create feature query instance\n * @param {Font} font opentype font instance\n */\nfunction FeatureQuery(font) {\n    this.font = font;\n    this.features = {};\n}\n\n/**\n * @typedef SubstitutionAction\n * @type Object\n * @property {number} id substitution type\n * @property {string} tag feature tag\n * @property {any} substitution substitution value(s)\n */\n\n/**\n * Create a substitution action instance\n * @param {SubstitutionAction} action\n */\nfunction SubstitutionAction(action) {\n    this.id = action.id;\n    this.tag = action.tag;\n    this.substitution = action.substitution;\n}\n\n/**\n * Lookup a coverage table\n * @param {number} glyphIndex glyph index\n * @param {CoverageTable} coverage coverage table\n */\nfunction lookupCoverage(glyphIndex, coverage) {\n    if (!glyphIndex) { return -1; }\n    switch (coverage.format) {\n        case 1:\n            return coverage.glyphs.indexOf(glyphIndex);\n\n        case 2:\n            var ranges = coverage.ranges;\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (glyphIndex >= range.start && glyphIndex <= range.end) {\n                    var offset = glyphIndex - range.start;\n                    return range.index + offset;\n                }\n            }\n            break;\n        default:\n            return -1; // not found\n    }\n    return -1;\n}\n\n/**\n * Handle a single substitution - format 1\n * @param {ContextParams} contextParams context params to lookup\n */\nfunction singleSubstitutionFormat1(glyphIndex, subtable) {\n    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n    if (substituteIndex === -1) { return null; }\n    return glyphIndex + subtable.deltaGlyphId;\n}\n\n/**\n * Handle a single substitution - format 2\n * @param {ContextParams} contextParams context params to lookup\n */\nfunction singleSubstitutionFormat2(glyphIndex, subtable) {\n    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n    if (substituteIndex === -1) { return null; }\n    return subtable.substitute[substituteIndex];\n}\n\n/**\n * Lookup a list of coverage tables\n * @param {any} coverageList a list of coverage tables\n * @param {ContextParams} contextParams context params to lookup\n */\nfunction lookupCoverageList(coverageList, contextParams) {\n    var lookupList = [];\n    for (var i = 0; i < coverageList.length; i++) {\n        var coverage = coverageList[i];\n        var glyphIndex = contextParams.current;\n        glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n        var lookupIndex = lookupCoverage(glyphIndex, coverage);\n        if (lookupIndex !== -1) {\n            lookupList.push(lookupIndex);\n        }\n    }\n    if (lookupList.length !== coverageList.length) { return -1; }\n    return lookupList;\n}\n\n/**\n * Handle chaining context substitution - format 3\n * @param {ContextParams} contextParams context params to lookup\n */\nfunction chainingSubstitutionFormat3(contextParams, subtable) {\n    var lookupsCount = (\n        subtable.inputCoverage.length +\n        subtable.lookaheadCoverage.length +\n        subtable.backtrackCoverage.length\n    );\n    if (contextParams.context.length < lookupsCount) { return []; }\n    // INPUT LOOKUP //\n    var inputLookups = lookupCoverageList(\n        subtable.inputCoverage, contextParams\n    );\n    if (inputLookups === -1) { return []; }\n    // LOOKAHEAD LOOKUP //\n    var lookaheadOffset = subtable.inputCoverage.length - 1;\n    if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) { return []; }\n    var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);\n    while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {\n        lookaheadContext.shift();\n    }\n    var lookaheadParams = new ContextParams(lookaheadContext, 0);\n    var lookaheadLookups = lookupCoverageList(\n        subtable.lookaheadCoverage, lookaheadParams\n    );\n    // BACKTRACK LOOKUP //\n    var backtrackContext = [].concat(contextParams.backtrack);\n    backtrackContext.reverse();\n    while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {\n        backtrackContext.shift();\n    }\n    if (backtrackContext.length < subtable.backtrackCoverage.length) { return []; }\n    var backtrackParams = new ContextParams(backtrackContext, 0);\n    var backtrackLookups = lookupCoverageList(\n        subtable.backtrackCoverage, backtrackParams\n    );\n    var contextRulesMatch = (\n        inputLookups.length === subtable.inputCoverage.length &&\n        lookaheadLookups.length === subtable.lookaheadCoverage.length &&\n        backtrackLookups.length === subtable.backtrackCoverage.length\n    );\n    var substitutions = [];\n    if (contextRulesMatch) {\n        for (var i = 0; i < subtable.lookupRecords.length; i++) {\n            var lookupRecord = subtable.lookupRecords[i];\n            var lookupListIndex = lookupRecord.lookupListIndex;\n            var lookupTable = this.getLookupByIndex(lookupListIndex);\n            for (var s = 0; s < lookupTable.subtables.length; s++) {\n                var subtable$1 = lookupTable.subtables[s];\n                var lookup = this.getLookupMethod(lookupTable, subtable$1);\n                var substitutionType = this.getSubstitutionType(lookupTable, subtable$1);\n                if (substitutionType === '12') {\n                    for (var n = 0; n < inputLookups.length; n++) {\n                        var glyphIndex = contextParams.get(n);\n                        var substitution = lookup(glyphIndex);\n                        if (substitution) { substitutions.push(substitution); }\n                    }\n                }\n            }\n        }\n    }\n    return substitutions;\n}\n\n/**\n * Handle ligature substitution - format 1\n * @param {ContextParams} contextParams context params to lookup\n */\nfunction ligatureSubstitutionFormat1(contextParams, subtable) {\n    // COVERAGE LOOKUP //\n    var glyphIndex = contextParams.current;\n    var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);\n    if (ligSetIndex === -1) { return null; }\n    // COMPONENTS LOOKUP\n    // (!) note, components are ordered in the written direction.\n    var ligature;\n    var ligatureSet = subtable.ligatureSets[ligSetIndex];\n    for (var s = 0; s < ligatureSet.length; s++) {\n        ligature = ligatureSet[s];\n        for (var l = 0; l < ligature.components.length; l++) {\n            var lookaheadItem = contextParams.lookahead[l];\n            var component = ligature.components[l];\n            if (lookaheadItem !== component) { break; }\n            if (l === ligature.components.length - 1) { return ligature; }\n        }\n    }\n    return null;\n}\n\n/**\n * Handle decomposition substitution - format 1\n * @param {number} glyphIndex glyph index\n * @param {any} subtable subtable\n */\nfunction decompositionSubstitutionFormat1(glyphIndex, subtable) {\n    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n    if (substituteIndex === -1) { return null; }\n    return subtable.sequences[substituteIndex];\n}\n\n/**\n * Get default script features indexes\n */\nFeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function () {\n    var scripts = this.font.tables.gsub.scripts;\n    for (var s = 0; s < scripts.length; s++) {\n        var script = scripts[s];\n        if (script.tag === 'DFLT') { return (\n            script.script.defaultLangSys.featureIndexes\n        ); }\n    }\n    return [];\n};\n\n/**\n * Get feature indexes of a specific script\n * @param {string} scriptTag script tag\n */\nFeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {\n    var tables = this.font.tables;\n    if (!tables.gsub) { return []; }\n    if (!scriptTag) { return this.getDefaultScriptFeaturesIndexes(); }\n    var scripts = this.font.tables.gsub.scripts;\n    for (var i = 0; i < scripts.length; i++) {\n        var script = scripts[i];\n        if (script.tag === scriptTag && script.script.defaultLangSys) {\n            return script.script.defaultLangSys.featureIndexes;\n        } else {\n            var langSysRecords = script.langSysRecords;\n            if (!!langSysRecords) {\n                for (var j = 0; j < langSysRecords.length; j++) {\n                    var langSysRecord = langSysRecords[j];\n                    if (langSysRecord.tag === scriptTag) {\n                        var langSys = langSysRecord.langSys;\n                        return langSys.featureIndexes;\n                    }\n                }\n            }\n        }\n    }\n    return this.getDefaultScriptFeaturesIndexes();\n};\n\n/**\n * Map a feature tag to a gsub feature\n * @param {any} features gsub features\n * @param {string} scriptTag script tag\n */\nFeatureQuery.prototype.mapTagsToFeatures = function (features, scriptTag) {\n    var tags = {};\n    for (var i = 0; i < features.length; i++) {\n        var tag = features[i].tag;\n        var feature = features[i].feature;\n        tags[tag] = feature;\n    }\n    this.features[scriptTag].tags = tags;\n};\n\n/**\n * Get features of a specific script\n * @param {string} scriptTag script tag\n */\nFeatureQuery.prototype.getScriptFeatures = function (scriptTag) {\n    var features = this.features[scriptTag];\n    if (this.features.hasOwnProperty(scriptTag)) { return features; }\n    var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);\n    if (!featuresIndexes) { return null; }\n    var gsub = this.font.tables.gsub;\n    features = featuresIndexes.map(function (index) { return gsub.features[index]; });\n    this.features[scriptTag] = features;\n    this.mapTagsToFeatures(features, scriptTag);\n    return features;\n};\n\n/**\n * Get substitution type\n * @param {any} lookupTable lookup table\n * @param {any} subtable subtable\n */\nFeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {\n    var lookupType = lookupTable.lookupType.toString();\n    var substFormat = subtable.substFormat.toString();\n    return lookupType + substFormat;\n};\n\n/**\n * Get lookup method\n * @param {any} lookupTable lookup table\n * @param {any} subtable subtable\n */\nFeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {\n    var this$1 = this;\n\n    var substitutionType = this.getSubstitutionType(lookupTable, subtable);\n    switch (substitutionType) {\n        case '11':\n            return function (glyphIndex) { return singleSubstitutionFormat1.apply(\n                this$1, [glyphIndex, subtable]\n            ); };\n        case '12':\n            return function (glyphIndex) { return singleSubstitutionFormat2.apply(\n                this$1, [glyphIndex, subtable]\n            ); };\n        case '63':\n            return function (contextParams) { return chainingSubstitutionFormat3.apply(\n                this$1, [contextParams, subtable]\n            ); };\n        case '41':\n            return function (contextParams) { return ligatureSubstitutionFormat1.apply(\n                this$1, [contextParams, subtable]\n            ); };\n        case '21':\n            return function (glyphIndex) { return decompositionSubstitutionFormat1.apply(\n                this$1, [glyphIndex, subtable]\n            ); };\n        default:\n            throw new Error(\n                \"lookupType: \" + (lookupTable.lookupType) + \" - \" +\n                \"substFormat: \" + (subtable.substFormat) + \" \" +\n                \"is not yet supported\"\n            );\n    }\n};\n\n/**\n * [ LOOKUP TYPES ]\n * -------------------------------\n * Single                        1;\n * Multiple                      2;\n * Alternate                     3;\n * Ligature                      4;\n * Context                       5;\n * ChainingContext               6;\n * ExtensionSubstitution         7;\n * ReverseChainingContext        8;\n * -------------------------------\n *\n */\n\n/**\n * @typedef FQuery\n * @type Object\n * @param {string} tag feature tag\n * @param {string} script feature script\n * @param {ContextParams} contextParams context params\n */\n\n/**\n * Lookup a feature using a query parameters\n * @param {FQuery} query feature query\n */\nFeatureQuery.prototype.lookupFeature = function (query) {\n    var contextParams = query.contextParams;\n    var currentIndex = contextParams.index;\n    var feature = this.getFeature({\n        tag: query.tag, script: query.script\n    });\n    if (!feature) { return new Error(\n        \"font '\" + (this.font.names.fullName.en) + \"' \" +\n        \"doesn't support feature '\" + (query.tag) + \"' \" +\n        \"for script '\" + (query.script) + \"'.\"\n    ); }\n    var lookups = this.getFeatureLookups(feature);\n    var substitutions = [].concat(contextParams.context);\n    for (var l = 0; l < lookups.length; l++) {\n        var lookupTable = lookups[l];\n        var subtables = this.getLookupSubtables(lookupTable);\n        for (var s = 0; s < subtables.length; s++) {\n            var subtable = subtables[s];\n            var substType = this.getSubstitutionType(lookupTable, subtable);\n            var lookup = this.getLookupMethod(lookupTable, subtable);\n            var substitution = (void 0);\n            switch (substType) {\n                case '11':\n                    substitution = lookup(contextParams.current);\n                    if (substitution) {\n                        substitutions.splice(currentIndex, 1, new SubstitutionAction({\n                            id: 11, tag: query.tag, substitution: substitution\n                        }));\n                    }\n                    break;\n                case '12':\n                    substitution = lookup(contextParams.current);\n                    if (substitution) {\n                        substitutions.splice(currentIndex, 1, new SubstitutionAction({\n                            id: 12, tag: query.tag, substitution: substitution\n                        }));\n                    }\n                    break;\n                case '63':\n                    substitution = lookup(contextParams);\n                    if (Array.isArray(substitution) && substitution.length) {\n                        substitutions.splice(currentIndex, 1, new SubstitutionAction({\n                            id: 63, tag: query.tag, substitution: substitution\n                        }));\n                    }\n                    break;\n                case '41':\n                    substitution = lookup(contextParams);\n                    if (substitution) {\n                        substitutions.splice(currentIndex, 1, new SubstitutionAction({\n                            id: 41, tag: query.tag, substitution: substitution\n                        }));\n                    }\n                    break;\n                case '21':\n                    substitution = lookup(contextParams.current);\n                    if (substitution) {\n                        substitutions.splice(currentIndex, 1, new SubstitutionAction({\n                            id: 21, tag: query.tag, substitution: substitution\n                        }));\n                    }\n                    break;\n            }\n            contextParams = new ContextParams(substitutions, currentIndex);\n            if (Array.isArray(substitution) && !substitution.length) { continue; }\n            substitution = null;\n        }\n    }\n    return substitutions.length ? substitutions : null;\n};\n\n/**\n * Checks if a font supports a specific features\n * @param {FQuery} query feature query object\n */\nFeatureQuery.prototype.supports = function (query) {\n    if (!query.script) { return false; }\n    this.getScriptFeatures(query.script);\n    var supportedScript = this.features.hasOwnProperty(query.script);\n    if (!query.tag) { return supportedScript; }\n    var supportedFeature = (\n        this.features[query.script].some(function (feature) { return feature.tag === query.tag; })\n    );\n    return supportedScript && supportedFeature;\n};\n\n/**\n * Get lookup table subtables\n * @param {any} lookupTable lookup table\n */\nFeatureQuery.prototype.getLookupSubtables = function (lookupTable) {\n    return lookupTable.subtables || null;\n};\n\n/**\n * Get lookup table by index\n * @param {number} index lookup table index\n */\nFeatureQuery.prototype.getLookupByIndex = function (index) {\n    var lookups = this.font.tables.gsub.lookups;\n    return lookups[index] || null;\n};\n\n/**\n * Get lookup tables for a feature\n * @param {string} feature\n */\nFeatureQuery.prototype.getFeatureLookups = function (feature) {\n    // TODO: memoize\n    return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));\n};\n\n/**\n * Query a feature by it's properties\n * @param {any} query an object that describes the properties of a query\n */\nFeatureQuery.prototype.getFeature = function getFeature(query) {\n    if (!this.font) { return { FAIL: \"No font was found\"}; }\n    if (!this.features.hasOwnProperty(query.script)) {\n        this.getScriptFeatures(query.script);\n    }\n    var scriptFeatures = this.features[query.script];\n    if (!scriptFeatures) { return (\n        { FAIL: (\"No feature for script \" + (query.script))}\n    ); }\n    if (!scriptFeatures.tags[query.tag]) { return null; }\n    return this.features[query.script].tags[query.tag];\n};\n\n/**\n * Arabic word context checkers\n */\n\nfunction arabicWordStartCheck(contextParams) {\n    var char = contextParams.current;\n    var prevChar = contextParams.get(-1);\n    return (\n        // ? arabic first char\n        (prevChar === null && isArabicChar(char)) ||\n        // ? arabic char preceded with a non arabic char\n        (!isArabicChar(prevChar) && isArabicChar(char))\n    );\n}\n\nfunction arabicWordEndCheck(contextParams) {\n    var nextChar = contextParams.get(1);\n    return (\n        // ? last arabic char\n        (nextChar === null) ||\n        // ? next char is not arabic\n        (!isArabicChar(nextChar))\n    );\n}\n\nvar arabicWordCheck = {\n    startCheck: arabicWordStartCheck,\n    endCheck: arabicWordEndCheck\n};\n\n/**\n * Arabic sentence context checkers\n */\n\nfunction arabicSentenceStartCheck(contextParams) {\n    var char = contextParams.current;\n    var prevChar = contextParams.get(-1);\n    return (\n        // ? an arabic char preceded with a non arabic char\n        (isArabicChar(char) || isTashkeelArabicChar(char)) &&\n        !isArabicChar(prevChar)\n    );\n}\n\nfunction arabicSentenceEndCheck(contextParams) {\n    var nextChar = contextParams.get(1);\n    switch (true) {\n        case nextChar === null:\n            return true;\n        case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)):\n            var nextIsWhitespace = isWhiteSpace(nextChar);\n            if (!nextIsWhitespace) { return true; }\n            if (nextIsWhitespace) {\n                var arabicCharAhead = false;\n                arabicCharAhead = (\n                    contextParams.lookahead.some(\n                        function (c) { return isArabicChar(c) || isTashkeelArabicChar(c); }\n                    )\n                );\n                if (!arabicCharAhead) { return true; }\n            }\n            break;\n        default:\n            return false;\n    }\n}\n\nvar arabicSentenceCheck = {\n    startCheck: arabicSentenceStartCheck,\n    endCheck: arabicSentenceEndCheck\n};\n\n/**\n * Apply single substitution format 1\n * @param {Array} substitutions substitutions\n * @param {any} tokens a list of tokens\n * @param {number} index token index\n */\nfunction singleSubstitutionFormat1$1(action, tokens, index) {\n    tokens[index].setState(action.tag, action.substitution);\n}\n\n/**\n * Apply single substitution format 2\n * @param {Array} substitutions substitutions\n * @param {any} tokens a list of tokens\n * @param {number} index token index\n */\nfunction singleSubstitutionFormat2$1(action, tokens, index) {\n    tokens[index].setState(action.tag, action.substitution);\n}\n\n/**\n * Apply chaining context substitution format 3\n * @param {Array} substitutions substitutions\n * @param {any} tokens a list of tokens\n * @param {number} index token index\n */\nfunction chainingSubstitutionFormat3$1(action, tokens, index) {\n    action.substitution.forEach(function (subst, offset) {\n        var token = tokens[index + offset];\n        token.setState(action.tag, subst);\n    });\n}\n\n/**\n * Apply ligature substitution format 1\n * @param {Array} substitutions substitutions\n * @param {any} tokens a list of tokens\n * @param {number} index token index\n */\nfunction ligatureSubstitutionFormat1$1(action, tokens, index) {\n    var token = tokens[index];\n    token.setState(action.tag, action.substitution.ligGlyph);\n    var compsCount = action.substitution.components.length;\n    for (var i = 0; i < compsCount; i++) {\n        token = tokens[index + i + 1];\n        token.setState('deleted', true);\n    }\n}\n\n/**\n * Supported substitutions\n */\nvar SUBSTITUTIONS = {\n    11: singleSubstitutionFormat1$1,\n    12: singleSubstitutionFormat2$1,\n    63: chainingSubstitutionFormat3$1,\n    41: ligatureSubstitutionFormat1$1\n};\n\n/**\n * Apply substitutions to a list of tokens\n * @param {Array} substitutions substitutions\n * @param {any} tokens a list of tokens\n * @param {number} index token index\n */\nfunction applySubstitution(action, tokens, index) {\n    if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {\n        SUBSTITUTIONS[action.id](action, tokens, index);\n    }\n}\n\n/**\n * Apply Arabic presentation forms to a range of tokens\n */\n\n/**\n * Check if a char can be connected to it's preceding char\n * @param {ContextParams} charContextParams context params of a char\n */\nfunction willConnectPrev(charContextParams) {\n    var backtrack = [].concat(charContextParams.backtrack);\n    for (var i = backtrack.length - 1; i >= 0; i--) {\n        var prevChar = backtrack[i];\n        var isolated = isIsolatedArabicChar(prevChar);\n        var tashkeel = isTashkeelArabicChar(prevChar);\n        if (!isolated && !tashkeel) { return true; }\n        if (isolated) { return false; }\n    }\n    return false;\n}\n\n/**\n * Check if a char can be connected to it's proceeding char\n * @param {ContextParams} charContextParams context params of a char\n */\nfunction willConnectNext(charContextParams) {\n    if (isIsolatedArabicChar(charContextParams.current)) { return false; }\n    for (var i = 0; i < charContextParams.lookahead.length; i++) {\n        var nextChar = charContextParams.lookahead[i];\n        var tashkeel = isTashkeelArabicChar(nextChar);\n        if (!tashkeel) { return true; }\n    }\n    return false;\n}\n\n/**\n * Apply arabic presentation forms to a list of tokens\n * @param {ContextRange} range a range of tokens\n */\nfunction arabicPresentationForms(range) {\n    var this$1 = this;\n\n    var script = 'arab';\n    var tags = this.featuresTags[script];\n    var tokens = this.tokenizer.getRangeTokens(range);\n    if (tokens.length === 1) { return; }\n    var contextParams = new ContextParams(\n        tokens.map(function (token) { return token.getState('glyphIndex'); }\n    ), 0);\n    var charContextParams = new ContextParams(\n        tokens.map(function (token) { return token.char; }\n    ), 0);\n    tokens.forEach(function (token, index) {\n        if (isTashkeelArabicChar(token.char)) { return; }\n        contextParams.setCurrentIndex(index);\n        charContextParams.setCurrentIndex(index);\n        var CONNECT = 0; // 2 bits 00 (10: can connect next) (01: can connect prev)\n        if (willConnectPrev(charContextParams)) { CONNECT |= 1; }\n        if (willConnectNext(charContextParams)) { CONNECT |= 2; }\n        var tag;\n        switch (CONNECT) {\n            case 1: (tag = 'fina'); break;\n            case 2: (tag = 'init'); break;\n            case 3: (tag = 'medi'); break;\n        }\n        if (tags.indexOf(tag) === -1) { return; }\n        var substitutions = this$1.query.lookupFeature({\n            tag: tag, script: script, contextParams: contextParams\n        });\n        if (substitutions instanceof Error) { return console.info(substitutions.message); }\n        substitutions.forEach(function (action, index) {\n            if (action instanceof SubstitutionAction) {\n                applySubstitution(action, tokens, index);\n                contextParams.context[index] = action.substitution;\n            }\n        });\n    });\n}\n\n/**\n * Apply Arabic required ligatures feature to a range of tokens\n */\n\n/**\n * Update context params\n * @param {any} tokens a list of tokens\n * @param {number} index current item index\n */\nfunction getContextParams(tokens, index) {\n    var context = tokens.map(function (token) { return token.activeState.value; });\n    return new ContextParams(context, index || 0);\n}\n\n/**\n * Apply Arabic required ligatures to a context range\n * @param {ContextRange} range a range of tokens\n */\nfunction arabicRequiredLigatures(range) {\n    var this$1 = this;\n\n    var script = 'arab';\n    var tokens = this.tokenizer.getRangeTokens(range);\n    var contextParams = getContextParams(tokens);\n    contextParams.context.forEach(function (glyphIndex, index) {\n        contextParams.setCurrentIndex(index);\n        var substitutions = this$1.query.lookupFeature({\n            tag: 'rlig', script: script, contextParams: contextParams\n        });\n        if (substitutions.length) {\n            substitutions.forEach(\n                function (action) { return applySubstitution(action, tokens, index); }\n            );\n            contextParams = getContextParams(tokens);\n        }\n    });\n}\n\n/**\n * Latin word context checkers\n */\n\nfunction latinWordStartCheck(contextParams) {\n    var char = contextParams.current;\n    var prevChar = contextParams.get(-1);\n    return (\n        // ? latin first char\n        (prevChar === null && isLatinChar(char)) ||\n        // ? latin char preceded with a non latin char\n        (!isLatinChar(prevChar) && isLatinChar(char))\n    );\n}\n\nfunction latinWordEndCheck(contextParams) {\n    var nextChar = contextParams.get(1);\n    return (\n        // ? last latin char\n        (nextChar === null) ||\n        // ? next char is not latin\n        (!isLatinChar(nextChar))\n    );\n}\n\nvar latinWordCheck = {\n    startCheck: latinWordStartCheck,\n    endCheck: latinWordEndCheck\n};\n\n/**\n * Apply Latin ligature feature to a range of tokens\n */\n\n/**\n * Update context params\n * @param {any} tokens a list of tokens\n * @param {number} index current item index\n */\nfunction getContextParams$1(tokens, index) {\n    var context = tokens.map(function (token) { return token.activeState.value; });\n    return new ContextParams(context, index || 0);\n}\n\n/**\n * Apply Arabic required ligatures to a context range\n * @param {ContextRange} range a range of tokens\n */\nfunction latinLigature(range) {\n    var this$1 = this;\n\n    var script = 'latn';\n    var tokens = this.tokenizer.getRangeTokens(range);\n    var contextParams = getContextParams$1(tokens);\n    contextParams.context.forEach(function (glyphIndex, index) {\n        contextParams.setCurrentIndex(index);\n        var substitutions = this$1.query.lookupFeature({\n            tag: 'liga', script: script, contextParams: contextParams\n        });\n        if (substitutions.length) {\n            substitutions.forEach(\n                function (action) { return applySubstitution(action, tokens, index); }\n            );\n            contextParams = getContextParams$1(tokens);\n        }\n    });\n}\n\n/**\n * Infer bidirectional properties for a given text and apply\n * the corresponding layout rules.\n */\n\n/**\n * Create Bidi. features\n * @param {string} baseDir text base direction. value either 'ltr' or 'rtl'\n */\nfunction Bidi(baseDir) {\n    this.baseDir = baseDir || 'ltr';\n    this.tokenizer = new Tokenizer();\n    this.featuresTags = {};\n}\n\n/**\n * Sets Bidi text\n * @param {string} text a text input\n */\nBidi.prototype.setText = function (text) {\n    this.text = text;\n};\n\n/**\n * Store essential context checks:\n * arabic word check for applying gsub features\n * arabic sentence check for adjusting arabic layout\n */\nBidi.prototype.contextChecks = ({\n    latinWordCheck: latinWordCheck,\n    arabicWordCheck: arabicWordCheck,\n    arabicSentenceCheck: arabicSentenceCheck\n});\n\n/**\n * Register arabic word check\n */\nfunction registerContextChecker(checkId) {\n    var check = this.contextChecks[(checkId + \"Check\")];\n    return this.tokenizer.registerContextChecker(\n        checkId, check.startCheck, check.endCheck\n    );\n}\n\n/**\n * Perform pre tokenization procedure then\n * tokenize text input\n */\nfunction tokenizeText() {\n    registerContextChecker.call(this, 'latinWord');\n    registerContextChecker.call(this, 'arabicWord');\n    registerContextChecker.call(this, 'arabicSentence');\n    return this.tokenizer.tokenize(this.text);\n}\n\n/**\n * Reverse arabic sentence layout\n * TODO: check base dir before applying adjustments - priority low\n */\nfunction reverseArabicSentences() {\n    var this$1 = this;\n\n    var ranges = this.tokenizer.getContextRanges('arabicSentence');\n    ranges.forEach(function (range) {\n        var rangeTokens = this$1.tokenizer.getRangeTokens(range);\n        this$1.tokenizer.replaceRange(\n            range.startIndex,\n            range.endOffset,\n            rangeTokens.reverse()\n        );\n    });\n}\n\n/**\n * Register supported features tags\n * @param {script} script script tag\n * @param {Array} tags features tags list\n */\nBidi.prototype.registerFeatures = function (script, tags) {\n    var this$1 = this;\n\n    var supportedTags = tags.filter(\n        function (tag) { return this$1.query.supports({script: script, tag: tag}); }\n    );\n    if (!this.featuresTags.hasOwnProperty(script)) {\n        this.featuresTags[script] = supportedTags;\n    } else {\n        this.featuresTags[script] =\n        this.featuresTags[script].concat(supportedTags);\n    }\n};\n\n/**\n * Apply GSUB features\n * @param {Array} tagsList a list of features tags\n * @param {string} script a script tag\n * @param {Font} font opentype font instance\n */\nBidi.prototype.applyFeatures = function (font, features) {\n    if (!font) { throw new Error(\n        'No valid font was provided to apply features'\n    ); }\n    if (!this.query) { this.query = new FeatureQuery(font); }\n    for (var f = 0; f < features.length; f++) {\n        var feature = features[f];\n        if (!this.query.supports({script: feature.script})) { continue; }\n        this.registerFeatures(feature.script, feature.tags);\n    }\n};\n\n/**\n * Register a state modifier\n * @param {string} modifierId state modifier id\n * @param {function} condition a predicate function that returns true or false\n * @param {function} modifier a modifier function to set token state\n */\nBidi.prototype.registerModifier = function (modifierId, condition, modifier) {\n    this.tokenizer.registerModifier(modifierId, condition, modifier);\n};\n\n/**\n * Check if 'glyphIndex' is registered\n */\nfunction checkGlyphIndexStatus() {\n    if (this.tokenizer.registeredModifiers.indexOf('glyphIndex') === -1) {\n        throw new Error(\n            'glyphIndex modifier is required to apply ' +\n            'arabic presentation features.'\n        );\n    }\n}\n\n/**\n * Apply arabic presentation forms features\n */\nfunction applyArabicPresentationForms() {\n    var this$1 = this;\n\n    var script = 'arab';\n    if (!this.featuresTags.hasOwnProperty(script)) { return; }\n    checkGlyphIndexStatus.call(this);\n    var ranges = this.tokenizer.getContextRanges('arabicWord');\n    ranges.forEach(function (range) {\n        arabicPresentationForms.call(this$1, range);\n    });\n}\n\n/**\n * Apply required arabic ligatures\n */\nfunction applyArabicRequireLigatures() {\n    var this$1 = this;\n\n    var script = 'arab';\n    if (!this.featuresTags.hasOwnProperty(script)) { return; }\n    var tags = this.featuresTags[script];\n    if (tags.indexOf('rlig') === -1) { return; }\n    checkGlyphIndexStatus.call(this);\n    var ranges = this.tokenizer.getContextRanges('arabicWord');\n    ranges.forEach(function (range) {\n        arabicRequiredLigatures.call(this$1, range);\n    });\n}\n\n/**\n * Apply required arabic ligatures\n */\nfunction applyLatinLigatures() {\n    var this$1 = this;\n\n    var script = 'latn';\n    if (!this.featuresTags.hasOwnProperty(script)) { return; }\n    var tags = this.featuresTags[script];\n    if (tags.indexOf('liga') === -1) { return; }\n    checkGlyphIndexStatus.call(this);\n    var ranges = this.tokenizer.getContextRanges('latinWord');\n    ranges.forEach(function (range) {\n        latinLigature.call(this$1, range);\n    });\n}\n\n/**\n * Check if a context is registered\n * @param {string} contextId context id\n */\nBidi.prototype.checkContextReady = function (contextId) {\n    return !!this.tokenizer.getContext(contextId);\n};\n\n/**\n * Apply features to registered contexts\n */\nBidi.prototype.applyFeaturesToContexts = function () {\n    if (this.checkContextReady('arabicWord')) {\n        applyArabicPresentationForms.call(this);\n        applyArabicRequireLigatures.call(this);\n    }\n    if (this.checkContextReady('latinWord')) {\n        applyLatinLigatures.call(this);\n    }\n    if (this.checkContextReady('arabicSentence')) {\n        reverseArabicSentences.call(this);\n    }\n};\n\n/**\n * process text input\n * @param {string} text an input text\n */\nBidi.prototype.processText = function(text) {\n    if (!this.text || this.text !== text) {\n        this.setText(text);\n        tokenizeText.call(this);\n        this.applyFeaturesToContexts();\n    }\n};\n\n/**\n * Process a string of text to identify and adjust\n * bidirectional text entities.\n * @param {string} text input text\n */\nBidi.prototype.getBidiText = function (text) {\n    this.processText(text);\n    return this.tokenizer.getText();\n};\n\n/**\n * Get the current state index of each token\n * @param {text} text an input text\n */\nBidi.prototype.getTextGlyphs = function (text) {\n    this.processText(text);\n    var indexes = [];\n    for (var i = 0; i < this.tokenizer.tokens.length; i++) {\n        var token = this.tokenizer.tokens[i];\n        if (token.state.deleted) { continue; }\n        var index = token.activeState.value;\n        indexes.push(Array.isArray(index) ? index[0] : index);\n    }\n    return indexes;\n};\n\n// The Font object\n\n/**\n * @typedef FontOptions\n * @type Object\n * @property {Boolean} empty - whether to create a new empty font\n * @property {string} familyName\n * @property {string} styleName\n * @property {string=} fullName\n * @property {string=} postScriptName\n * @property {string=} designer\n * @property {string=} designerURL\n * @property {string=} manufacturer\n * @property {string=} manufacturerURL\n * @property {string=} license\n * @property {string=} licenseURL\n * @property {string=} version\n * @property {string=} description\n * @property {string=} copyright\n * @property {string=} trademark\n * @property {Number} unitsPerEm\n * @property {Number} ascender\n * @property {Number} descender\n * @property {Number} createdTimestamp\n * @property {string=} weightClass\n * @property {string=} widthClass\n * @property {string=} fsSelection\n */\n\n/**\n * A Font represents a loaded OpenType font file.\n * It contains a set of glyphs and methods to draw text on a drawing context,\n * or to get a path representing the text.\n * @exports opentype.Font\n * @class\n * @param {FontOptions}\n * @constructor\n */\nfunction Font(options) {\n    options = options || {};\n    options.tables = options.tables || {};\n\n    if (!options.empty) {\n        // Check that we've provided the minimum set of names.\n        checkArgument(options.familyName, 'When creating a new Font object, familyName is required.');\n        checkArgument(options.styleName, 'When creating a new Font object, styleName is required.');\n        checkArgument(options.unitsPerEm, 'When creating a new Font object, unitsPerEm is required.');\n        checkArgument(options.ascender, 'When creating a new Font object, ascender is required.');\n        checkArgument(options.descender <= 0, 'When creating a new Font object, negative descender value is required.');\n\n        // OS X will complain if the names are empty, so we put a single space everywhere by default.\n        this.names = {\n            fontFamily: {en: options.familyName || ' '},\n            fontSubfamily: {en: options.styleName || ' '},\n            fullName: {en: options.fullName || options.familyName + ' ' + options.styleName},\n            // postScriptName may not contain any whitespace\n            postScriptName: {en: options.postScriptName || (options.familyName + options.styleName).replace(/\\s/g, '')},\n            designer: {en: options.designer || ' '},\n            designerURL: {en: options.designerURL || ' '},\n            manufacturer: {en: options.manufacturer || ' '},\n            manufacturerURL: {en: options.manufacturerURL || ' '},\n            license: {en: options.license || ' '},\n            licenseURL: {en: options.licenseURL || ' '},\n            version: {en: options.version || 'Version 0.1'},\n            description: {en: options.description || ' '},\n            copyright: {en: options.copyright || ' '},\n            trademark: {en: options.trademark || ' '}\n        };\n        this.unitsPerEm = options.unitsPerEm || 1000;\n        this.ascender = options.ascender;\n        this.descender = options.descender;\n        this.createdTimestamp = options.createdTimestamp;\n        this.tables = Object.assign(options.tables, {\n            os2: Object.assign({\n                usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,\n                usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,\n                fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR,\n            }, options.tables.os2)\n        });\n    }\n\n    this.supported = true; // Deprecated: parseBuffer will throw an error if font is not supported.\n    this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []);\n    this.encoding = new DefaultEncoding(this);\n    this.position = new Position(this);\n    this.substitution = new Substitution(this);\n    this.tables = this.tables || {};\n\n    // needed for low memory mode only.\n    this._push = null;\n    this._hmtxTableData = {};\n\n    Object.defineProperty(this, 'hinting', {\n        get: function() {\n            if (this._hinting) { return this._hinting; }\n            if (this.outlinesFormat === 'truetype') {\n                return (this._hinting = new Hinting(this));\n            }\n        }\n    });\n}\n\n/**\n * Check if the font has a glyph for the given character.\n * @param  {string}\n * @return {Boolean}\n */\nFont.prototype.hasChar = function(c) {\n    return this.encoding.charToGlyphIndex(c) !== null;\n};\n\n/**\n * Convert the given character to a single glyph index.\n * Note that this function assumes that there is a one-to-one mapping between\n * the given character and a glyph; for complex scripts this might not be the case.\n * @param  {string}\n * @return {Number}\n */\nFont.prototype.charToGlyphIndex = function(s) {\n    return this.encoding.charToGlyphIndex(s);\n};\n\n/**\n * Convert the given character to a single Glyph object.\n * Note that this function assumes that there is a one-to-one mapping between\n * the given character and a glyph; for complex scripts this might not be the case.\n * @param  {string}\n * @return {opentype.Glyph}\n */\nFont.prototype.charToGlyph = function(c) {\n    var glyphIndex = this.charToGlyphIndex(c);\n    var glyph = this.glyphs.get(glyphIndex);\n    if (!glyph) {\n        // .notdef\n        glyph = this.glyphs.get(0);\n    }\n\n    return glyph;\n};\n\n/**\n * Update features\n * @param {any} options features options\n */\nFont.prototype.updateFeatures = function (options) {\n    // TODO: update all features options not only 'latn'.\n    return this.defaultRenderOptions.features.map(function (feature) {\n        if (feature.script === 'latn') {\n            return {\n                script: 'latn',\n                tags: feature.tags.filter(function (tag) { return options[tag]; })\n            };\n        } else {\n            return feature;\n        }\n    });\n};\n\n/**\n * Convert the given text to a list of Glyph objects.\n * Note that there is no strict one-to-one mapping between characters and\n * glyphs, so the list of returned glyphs can be larger or smaller than the\n * length of the given string.\n * @param  {string}\n * @param  {GlyphRenderOptions} [options]\n * @return {opentype.Glyph[]}\n */\nFont.prototype.stringToGlyphs = function(s, options) {\n    var this$1 = this;\n\n\n    var bidi = new Bidi();\n\n    // Create and register 'glyphIndex' state modifier\n    var charToGlyphIndexMod = function (token) { return this$1.charToGlyphIndex(token.char); };\n    bidi.registerModifier('glyphIndex', null, charToGlyphIndexMod);\n\n    // roll-back to default features\n    var features = options ?\n    this.updateFeatures(options.features) :\n    this.defaultRenderOptions.features;\n\n    bidi.applyFeatures(this, features);\n\n    var indexes = bidi.getTextGlyphs(s);\n\n    var length = indexes.length;\n\n    // convert glyph indexes to glyph objects\n    var glyphs = new Array(length);\n    var notdef = this.glyphs.get(0);\n    for (var i = 0; i < length; i += 1) {\n        glyphs[i] = this.glyphs.get(indexes[i]) || notdef;\n    }\n    return glyphs;\n};\n\n/**\n * @param  {string}\n * @return {Number}\n */\nFont.prototype.nameToGlyphIndex = function(name) {\n    return this.glyphNames.nameToGlyphIndex(name);\n};\n\n/**\n * @param  {string}\n * @return {opentype.Glyph}\n */\nFont.prototype.nameToGlyph = function(name) {\n    var glyphIndex = this.nameToGlyphIndex(name);\n    var glyph = this.glyphs.get(glyphIndex);\n    if (!glyph) {\n        // .notdef\n        glyph = this.glyphs.get(0);\n    }\n\n    return glyph;\n};\n\n/**\n * @param  {Number}\n * @return {String}\n */\nFont.prototype.glyphIndexToName = function(gid) {\n    if (!this.glyphNames.glyphIndexToName) {\n        return '';\n    }\n\n    return this.glyphNames.glyphIndexToName(gid);\n};\n\n/**\n * Retrieve the value of the kerning pair between the left glyph (or its index)\n * and the right glyph (or its index). If no kerning pair is found, return 0.\n * The kerning value gets added to the advance width when calculating the spacing\n * between glyphs.\n * For GPOS kerning, this method uses the default script and language, which covers\n * most use cases. To have greater control, use font.position.getKerningValue .\n * @param  {opentype.Glyph} leftGlyph\n * @param  {opentype.Glyph} rightGlyph\n * @return {Number}\n */\nFont.prototype.getKerningValue = function(leftGlyph, rightGlyph) {\n    leftGlyph = leftGlyph.index || leftGlyph;\n    rightGlyph = rightGlyph.index || rightGlyph;\n    var gposKerning = this.position.defaultKerningTables;\n    if (gposKerning) {\n        return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);\n    }\n    // \"kern\" table\n    return this.kerningPairs[leftGlyph + ',' + rightGlyph] || 0;\n};\n\n/**\n * @typedef GlyphRenderOptions\n * @type Object\n * @property {string} [script] - script used to determine which features to apply. By default, 'DFLT' or 'latn' is used.\n *                               See https://www.microsoft.com/typography/otspec/scripttags.htm\n * @property {string} [language='dflt'] - language system used to determine which features to apply.\n *                                        See https://www.microsoft.com/typography/developers/opentype/languagetags.aspx\n * @property {boolean} [kerning=true] - whether to include kerning values\n * @property {object} [features] - OpenType Layout feature tags. Used to enable or disable the features of the given script/language system.\n *                                 See https://www.microsoft.com/typography/otspec/featuretags.htm\n */\nFont.prototype.defaultRenderOptions = {\n    kerning: true,\n    features: [\n        /**\n         * these 4 features are required to render Arabic text properly\n         * and shouldn't be turned off when rendering arabic text.\n         */\n        { script: 'arab', tags: ['init', 'medi', 'fina', 'rlig'] },\n        { script: 'latn', tags: ['liga', 'rlig'] }\n    ]\n};\n\n/**\n * Helper function that invokes the given callback for each glyph in the given text.\n * The callback gets `(glyph, x, y, fontSize, options)`.* @param  {string} text\n * @param {string} text - The text to apply.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {GlyphRenderOptions=} options\n * @param  {Function} callback\n */\nFont.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {\n    x = x !== undefined ? x : 0;\n    y = y !== undefined ? y : 0;\n    fontSize = fontSize !== undefined ? fontSize : 72;\n    options = Object.assign({}, this.defaultRenderOptions, options);\n    var fontScale = 1 / this.unitsPerEm * fontSize;\n    var glyphs = this.stringToGlyphs(text, options);\n    var kerningLookups;\n    if (options.kerning) {\n        var script = options.script || this.position.getDefaultScriptName();\n        kerningLookups = this.position.getKerningTables(script, options.language);\n    }\n    for (var i = 0; i < glyphs.length; i += 1) {\n        var glyph = glyphs[i];\n        callback.call(this, glyph, x, y, fontSize, options);\n        if (glyph.advanceWidth) {\n            x += glyph.advanceWidth * fontScale;\n        }\n\n        if (options.kerning && i < glyphs.length - 1) {\n            // We should apply position adjustment lookups in a more generic way.\n            // Here we only use the xAdvance value.\n            var kerningValue = kerningLookups ?\n                  this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) :\n                  this.getKerningValue(glyph, glyphs[i + 1]);\n            x += kerningValue * fontScale;\n        }\n\n        if (options.letterSpacing) {\n            x += options.letterSpacing * fontSize;\n        } else if (options.tracking) {\n            x += (options.tracking / 1000) * fontSize;\n        }\n    }\n    return x;\n};\n\n/**\n * Create a Path object that represents the given text.\n * @param  {string} text - The text to create.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {GlyphRenderOptions=} options\n * @return {opentype.Path}\n */\nFont.prototype.getPath = function(text, x, y, fontSize, options) {\n    var fullPath = new Path();\n    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n        var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n        fullPath.extend(glyphPath);\n    });\n    return fullPath;\n};\n\n/**\n * Create an array of Path objects that represent the glyphs of a given text.\n * @param  {string} text - The text to create.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {GlyphRenderOptions=} options\n * @return {opentype.Path[]}\n */\nFont.prototype.getPaths = function(text, x, y, fontSize, options) {\n    var glyphPaths = [];\n    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n        var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n        glyphPaths.push(glyphPath);\n    });\n\n    return glyphPaths;\n};\n\n/**\n * Returns the advance width of a text.\n *\n * This is something different than Path.getBoundingBox() as for example a\n * suffixed whitespace increases the advanceWidth but not the bounding box\n * or an overhanging letter like a calligraphic 'f' might have a quite larger\n * bounding box than its advance width.\n *\n * This corresponds to canvas2dContext.measureText(text).width\n *\n * @param  {string} text - The text to create.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {GlyphRenderOptions=} options\n * @return advance width\n */\nFont.prototype.getAdvanceWidth = function(text, fontSize, options) {\n    return this.forEachGlyph(text, 0, 0, fontSize, options, function() {});\n};\n\n/**\n * Draw the text on the given drawing context.\n * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param  {string} text - The text to create.\n * @param  {number} [x=0] - Horizontal position of the beginning of the text.\n * @param  {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param  {GlyphRenderOptions=} options\n */\nFont.prototype.draw = function(ctx, text, x, y, fontSize, options) {\n    this.getPath(text, x, y, fontSize, options).draw(ctx);\n};\n\n/**\n * Draw the points of all glyphs in the text.\n * On-curve points will be drawn in blue, off-curve points will be drawn in red.\n * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param {string} text - The text to create.\n * @param {number} [x=0] - Horizontal position of the beginning of the text.\n * @param {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param {GlyphRenderOptions=} options\n */\nFont.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {\n    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n        glyph.drawPoints(ctx, gX, gY, gFontSize);\n    });\n};\n\n/**\n * Draw lines indicating important font measurements for all glyphs in the text.\n * Black lines indicate the origin of the coordinate system (point 0,0).\n * Blue lines indicate the glyph bounding box.\n * Green line indicates the advance width of the glyph.\n * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.\n * @param {string} text - The text to create.\n * @param {number} [x=0] - Horizontal position of the beginning of the text.\n * @param {number} [y=0] - Vertical position of the *baseline* of the text.\n * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.\n * @param {GlyphRenderOptions=} options\n */\nFont.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {\n    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n        glyph.drawMetrics(ctx, gX, gY, gFontSize);\n    });\n};\n\n/**\n * @param  {string}\n * @return {string}\n */\nFont.prototype.getEnglishName = function(name) {\n    var translations = this.names[name];\n    if (translations) {\n        return translations.en;\n    }\n};\n\n/**\n * Validate\n */\nFont.prototype.validate = function() {\n    var _this = this;\n\n    function assert(predicate, message) {\n    }\n\n    function assertNamePresent(name) {\n        var englishName = _this.getEnglishName(name);\n        assert(englishName && englishName.trim().length > 0);\n    }\n\n    // Identification information\n    assertNamePresent('fontFamily');\n    assertNamePresent('weightName');\n    assertNamePresent('manufacturer');\n    assertNamePresent('copyright');\n    assertNamePresent('version');\n\n    // Dimension information\n    assert(this.unitsPerEm > 0);\n};\n\n/**\n * Convert the font object to a SFNT data structure.\n * This structure contains all the necessary tables and metadata to create a binary OTF file.\n * @return {opentype.Table}\n */\nFont.prototype.toTables = function() {\n    return sfnt.fontToTable(this);\n};\n/**\n * @deprecated Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.\n */\nFont.prototype.toBuffer = function() {\n    console.warn('Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.');\n    return this.toArrayBuffer();\n};\n/**\n * Converts a `opentype.Font` into an `ArrayBuffer`\n * @return {ArrayBuffer}\n */\nFont.prototype.toArrayBuffer = function() {\n    var sfntTable = this.toTables();\n    var bytes = sfntTable.encode();\n    var buffer = new ArrayBuffer(bytes.length);\n    var intArray = new Uint8Array(buffer);\n    for (var i = 0; i < bytes.length; i++) {\n        intArray[i] = bytes[i];\n    }\n\n    return buffer;\n};\n\n/**\n * Initiate a download of the OpenType font.\n */\nFont.prototype.download = function(fileName) {\n    var familyName = this.getEnglishName('fontFamily');\n    var styleName = this.getEnglishName('fontSubfamily');\n    fileName = fileName || familyName.replace(/\\s/g, '') + '-' + styleName + '.otf';\n    var arrayBuffer = this.toArrayBuffer();\n\n    if (isBrowser()) {\n        window.URL = window.URL || window.webkitURL;\n\n        if (window.URL) {\n            var dataView = new DataView(arrayBuffer);\n            var blob = new Blob([dataView], {type: 'font/opentype'});\n\n            var link = document.createElement('a');\n            link.href = window.URL.createObjectURL(blob);\n            link.download = fileName;\n\n            var event = document.createEvent('MouseEvents');\n            event.initEvent('click', true, false);\n            link.dispatchEvent(event);\n        } else {\n            console.warn('Font file could not be downloaded. Try using a different browser.');\n        }\n    } else {\n        var fs = require('fs');\n        var buffer = arrayBufferToNodeBuffer(arrayBuffer);\n        fs.writeFileSync(fileName, buffer);\n    }\n};\n/**\n * @private\n */\nFont.prototype.fsSelectionValues = {\n    ITALIC:              0x001, //1\n    UNDERSCORE:          0x002, //2\n    NEGATIVE:            0x004, //4\n    OUTLINED:            0x008, //8\n    STRIKEOUT:           0x010, //16\n    BOLD:                0x020, //32\n    REGULAR:             0x040, //64\n    USER_TYPO_METRICS:   0x080, //128\n    WWS:                 0x100, //256\n    OBLIQUE:             0x200  //512\n};\n\n/**\n * @private\n */\nFont.prototype.usWidthClasses = {\n    ULTRA_CONDENSED: 1,\n    EXTRA_CONDENSED: 2,\n    CONDENSED: 3,\n    SEMI_CONDENSED: 4,\n    MEDIUM: 5,\n    SEMI_EXPANDED: 6,\n    EXPANDED: 7,\n    EXTRA_EXPANDED: 8,\n    ULTRA_EXPANDED: 9\n};\n\n/**\n * @private\n */\nFont.prototype.usWeightClasses = {\n    THIN: 100,\n    EXTRA_LIGHT: 200,\n    LIGHT: 300,\n    NORMAL: 400,\n    MEDIUM: 500,\n    SEMI_BOLD: 600,\n    BOLD: 700,\n    EXTRA_BOLD: 800,\n    BLACK:    900\n};\n\n// The `fvar` table stores font variation axes and instances.\n\nfunction addName(name, names) {\n    var nameString = JSON.stringify(name);\n    var nameID = 256;\n    for (var nameKey in names) {\n        var n = parseInt(nameKey);\n        if (!n || n < 256) {\n            continue;\n        }\n\n        if (JSON.stringify(names[nameKey]) === nameString) {\n            return n;\n        }\n\n        if (nameID <= n) {\n            nameID = n + 1;\n        }\n    }\n\n    names[nameID] = name;\n    return nameID;\n}\n\nfunction makeFvarAxis(n, axis, names) {\n    var nameID = addName(axis.name, names);\n    return [\n        {name: 'tag_' + n, type: 'TAG', value: axis.tag},\n        {name: 'minValue_' + n, type: 'FIXED', value: axis.minValue << 16},\n        {name: 'defaultValue_' + n, type: 'FIXED', value: axis.defaultValue << 16},\n        {name: 'maxValue_' + n, type: 'FIXED', value: axis.maxValue << 16},\n        {name: 'flags_' + n, type: 'USHORT', value: 0},\n        {name: 'nameID_' + n, type: 'USHORT', value: nameID}\n    ];\n}\n\nfunction parseFvarAxis(data, start, names) {\n    var axis = {};\n    var p = new parse.Parser(data, start);\n    axis.tag = p.parseTag();\n    axis.minValue = p.parseFixed();\n    axis.defaultValue = p.parseFixed();\n    axis.maxValue = p.parseFixed();\n    p.skip('uShort', 1);  // reserved for flags; no values defined\n    axis.name = names[p.parseUShort()] || {};\n    return axis;\n}\n\nfunction makeFvarInstance(n, inst, axes, names) {\n    var nameID = addName(inst.name, names);\n    var fields = [\n        {name: 'nameID_' + n, type: 'USHORT', value: nameID},\n        {name: 'flags_' + n, type: 'USHORT', value: 0}\n    ];\n\n    for (var i = 0; i < axes.length; ++i) {\n        var axisTag = axes[i].tag;\n        fields.push({\n            name: 'axis_' + n + ' ' + axisTag,\n            type: 'FIXED',\n            value: inst.coordinates[axisTag] << 16\n        });\n    }\n\n    return fields;\n}\n\nfunction parseFvarInstance(data, start, axes, names) {\n    var inst = {};\n    var p = new parse.Parser(data, start);\n    inst.name = names[p.parseUShort()] || {};\n    p.skip('uShort', 1);  // reserved for flags; no values defined\n\n    inst.coordinates = {};\n    for (var i = 0; i < axes.length; ++i) {\n        inst.coordinates[axes[i].tag] = p.parseFixed();\n    }\n\n    return inst;\n}\n\nfunction makeFvarTable(fvar, names) {\n    var result = new table.Table('fvar', [\n        {name: 'version', type: 'ULONG', value: 0x10000},\n        {name: 'offsetToData', type: 'USHORT', value: 0},\n        {name: 'countSizePairs', type: 'USHORT', value: 2},\n        {name: 'axisCount', type: 'USHORT', value: fvar.axes.length},\n        {name: 'axisSize', type: 'USHORT', value: 20},\n        {name: 'instanceCount', type: 'USHORT', value: fvar.instances.length},\n        {name: 'instanceSize', type: 'USHORT', value: 4 + fvar.axes.length * 4}\n    ]);\n    result.offsetToData = result.sizeOf();\n\n    for (var i = 0; i < fvar.axes.length; i++) {\n        result.fields = result.fields.concat(makeFvarAxis(i, fvar.axes[i], names));\n    }\n\n    for (var j = 0; j < fvar.instances.length; j++) {\n        result.fields = result.fields.concat(makeFvarInstance(j, fvar.instances[j], fvar.axes, names));\n    }\n\n    return result;\n}\n\nfunction parseFvarTable(data, start, names) {\n    var p = new parse.Parser(data, start);\n    var tableVersion = p.parseULong();\n    check.argument(tableVersion === 0x00010000, 'Unsupported fvar table version.');\n    var offsetToData = p.parseOffset16();\n    // Skip countSizePairs.\n    p.skip('uShort', 1);\n    var axisCount = p.parseUShort();\n    var axisSize = p.parseUShort();\n    var instanceCount = p.parseUShort();\n    var instanceSize = p.parseUShort();\n\n    var axes = [];\n    for (var i = 0; i < axisCount; i++) {\n        axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));\n    }\n\n    var instances = [];\n    var instanceStart = start + offsetToData + axisCount * axisSize;\n    for (var j = 0; j < instanceCount; j++) {\n        instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names));\n    }\n\n    return {axes: axes, instances: instances};\n}\n\nvar fvar = { make: makeFvarTable, parse: parseFvarTable };\n\n// The `GDEF` table contains various glyph properties\n\nvar attachList = function() {\n    return {\n        coverage: this.parsePointer(Parser.coverage),\n        attachPoints: this.parseList(Parser.pointer(Parser.uShortList))\n    };\n};\n\nvar caretValue = function() {\n    var format = this.parseUShort();\n    check.argument(format === 1 || format === 2 || format === 3,\n        'Unsupported CaretValue table version.');\n    if (format === 1) {\n        return { coordinate: this.parseShort() };\n    } else if (format === 2) {\n        return { pointindex: this.parseShort() };\n    } else if (format === 3) {\n        // Device / Variation Index tables unsupported\n        return { coordinate: this.parseShort() };\n    }\n};\n\nvar ligGlyph = function() {\n    return this.parseList(Parser.pointer(caretValue));\n};\n\nvar ligCaretList = function() {\n    return {\n        coverage: this.parsePointer(Parser.coverage),\n        ligGlyphs: this.parseList(Parser.pointer(ligGlyph))\n    };\n};\n\nvar markGlyphSets = function() {\n    this.parseUShort(); // Version\n    return this.parseList(Parser.pointer(Parser.coverage));\n};\n\nfunction parseGDEFTable(data, start) {\n    start = start || 0;\n    var p = new Parser(data, start);\n    var tableVersion = p.parseVersion(1);\n    check.argument(tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,\n        'Unsupported GDEF table version.');\n    var gdef = {\n        version: tableVersion,\n        classDef: p.parsePointer(Parser.classDef),\n        attachList: p.parsePointer(attachList),\n        ligCaretList: p.parsePointer(ligCaretList),\n        markAttachClassDef: p.parsePointer(Parser.classDef)\n    };\n    if (tableVersion >= 1.2) {\n        gdef.markGlyphSets = p.parsePointer(markGlyphSets);\n    }\n    return gdef;\n}\nvar gdef = { parse: parseGDEFTable };\n\n// The `GPOS` table contains kerning pairs, among other things.\n\nvar subtableParsers$1 = new Array(10);         // subtableParsers[0] is unused\n\n// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-1-single-adjustment-positioning-subtable\n// this = Parser instance\nsubtableParsers$1[1] = function parseLookup1() {\n    var start = this.offset + this.relativeOffset;\n    var posformat = this.parseUShort();\n    if (posformat === 1) {\n        return {\n            posFormat: 1,\n            coverage: this.parsePointer(Parser.coverage),\n            value: this.parseValueRecord()\n        };\n    } else if (posformat === 2) {\n        return {\n            posFormat: 2,\n            coverage: this.parsePointer(Parser.coverage),\n            values: this.parseValueRecordList()\n        };\n    }\n    check.assert(false, '0x' + start.toString(16) + ': GPOS lookup type 1 format must be 1 or 2.');\n};\n\n// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable\nsubtableParsers$1[2] = function parseLookup2() {\n    var start = this.offset + this.relativeOffset;\n    var posFormat = this.parseUShort();\n    check.assert(posFormat === 1 || posFormat === 2, '0x' + start.toString(16) + ': GPOS lookup type 2 format must be 1 or 2.');\n    var coverage = this.parsePointer(Parser.coverage);\n    var valueFormat1 = this.parseUShort();\n    var valueFormat2 = this.parseUShort();\n    if (posFormat === 1) {\n        // Adjustments for Glyph Pairs\n        return {\n            posFormat: posFormat,\n            coverage: coverage,\n            valueFormat1: valueFormat1,\n            valueFormat2: valueFormat2,\n            pairSets: this.parseList(Parser.pointer(Parser.list(function() {\n                return {        // pairValueRecord\n                    secondGlyph: this.parseUShort(),\n                    value1: this.parseValueRecord(valueFormat1),\n                    value2: this.parseValueRecord(valueFormat2)\n                };\n            })))\n        };\n    } else if (posFormat === 2) {\n        var classDef1 = this.parsePointer(Parser.classDef);\n        var classDef2 = this.parsePointer(Parser.classDef);\n        var class1Count = this.parseUShort();\n        var class2Count = this.parseUShort();\n        return {\n            // Class Pair Adjustment\n            posFormat: posFormat,\n            coverage: coverage,\n            valueFormat1: valueFormat1,\n            valueFormat2: valueFormat2,\n            classDef1: classDef1,\n            classDef2: classDef2,\n            class1Count: class1Count,\n            class2Count: class2Count,\n            classRecords: this.parseList(class1Count, Parser.list(class2Count, function() {\n                return {\n                    value1: this.parseValueRecord(valueFormat1),\n                    value2: this.parseValueRecord(valueFormat2)\n                };\n            }))\n        };\n    }\n};\n\nsubtableParsers$1[3] = function parseLookup3() { return { error: 'GPOS Lookup 3 not supported' }; };\nsubtableParsers$1[4] = function parseLookup4() { return { error: 'GPOS Lookup 4 not supported' }; };\nsubtableParsers$1[5] = function parseLookup5() { return { error: 'GPOS Lookup 5 not supported' }; };\nsubtableParsers$1[6] = function parseLookup6() { return { error: 'GPOS Lookup 6 not supported' }; };\nsubtableParsers$1[7] = function parseLookup7() { return { error: 'GPOS Lookup 7 not supported' }; };\nsubtableParsers$1[8] = function parseLookup8() { return { error: 'GPOS Lookup 8 not supported' }; };\nsubtableParsers$1[9] = function parseLookup9() { return { error: 'GPOS Lookup 9 not supported' }; };\n\n// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos\nfunction parseGposTable(data, start) {\n    start = start || 0;\n    var p = new Parser(data, start);\n    var tableVersion = p.parseVersion(1);\n    check.argument(tableVersion === 1 || tableVersion === 1.1, 'Unsupported GPOS table version ' + tableVersion);\n\n    if (tableVersion === 1) {\n        return {\n            version: tableVersion,\n            scripts: p.parseScriptList(),\n            features: p.parseFeatureList(),\n            lookups: p.parseLookupList(subtableParsers$1)\n        };\n    } else {\n        return {\n            version: tableVersion,\n            scripts: p.parseScriptList(),\n            features: p.parseFeatureList(),\n            lookups: p.parseLookupList(subtableParsers$1),\n            variations: p.parseFeatureVariationsList()\n        };\n    }\n\n}\n\n// GPOS Writing //////////////////////////////////////////////\n// NOT SUPPORTED\nvar subtableMakers$1 = new Array(10);\n\nfunction makeGposTable(gpos) {\n    return new table.Table('GPOS', [\n        {name: 'version', type: 'ULONG', value: 0x10000},\n        {name: 'scripts', type: 'TABLE', value: new table.ScriptList(gpos.scripts)},\n        {name: 'features', type: 'TABLE', value: new table.FeatureList(gpos.features)},\n        {name: 'lookups', type: 'TABLE', value: new table.LookupList(gpos.lookups, subtableMakers$1)}\n    ]);\n}\n\nvar gpos = { parse: parseGposTable, make: makeGposTable };\n\n// The `kern` table contains kerning pairs.\n\nfunction parseWindowsKernTable(p) {\n    var pairs = {};\n    // Skip nTables.\n    p.skip('uShort');\n    var subtableVersion = p.parseUShort();\n    check.argument(subtableVersion === 0, 'Unsupported kern sub-table version.');\n    // Skip subtableLength, subtableCoverage\n    p.skip('uShort', 2);\n    var nPairs = p.parseUShort();\n    // Skip searchRange, entrySelector, rangeShift.\n    p.skip('uShort', 3);\n    for (var i = 0; i < nPairs; i += 1) {\n        var leftIndex = p.parseUShort();\n        var rightIndex = p.parseUShort();\n        var value = p.parseShort();\n        pairs[leftIndex + ',' + rightIndex] = value;\n    }\n    return pairs;\n}\n\nfunction parseMacKernTable(p) {\n    var pairs = {};\n    // The Mac kern table stores the version as a fixed (32 bits) but we only loaded the first 16 bits.\n    // Skip the rest.\n    p.skip('uShort');\n    var nTables = p.parseULong();\n    //check.argument(nTables === 1, 'Only 1 subtable is supported (got ' + nTables + ').');\n    if (nTables > 1) {\n        console.warn('Only the first kern subtable is supported.');\n    }\n    p.skip('uLong');\n    var coverage = p.parseUShort();\n    var subtableVersion = coverage & 0xFF;\n    p.skip('uShort');\n    if (subtableVersion === 0) {\n        var nPairs = p.parseUShort();\n        // Skip searchRange, entrySelector, rangeShift.\n        p.skip('uShort', 3);\n        for (var i = 0; i < nPairs; i += 1) {\n            var leftIndex = p.parseUShort();\n            var rightIndex = p.parseUShort();\n            var value = p.parseShort();\n            pairs[leftIndex + ',' + rightIndex] = value;\n        }\n    }\n    return pairs;\n}\n\n// Parse the `kern` table which contains kerning pairs.\nfunction parseKernTable(data, start) {\n    var p = new parse.Parser(data, start);\n    var tableVersion = p.parseUShort();\n    if (tableVersion === 0) {\n        return parseWindowsKernTable(p);\n    } else if (tableVersion === 1) {\n        return parseMacKernTable(p);\n    } else {\n        throw new Error('Unsupported kern table version (' + tableVersion + ').');\n    }\n}\n\nvar kern = { parse: parseKernTable };\n\n// The `loca` table stores the offsets to the locations of the glyphs in the font.\n\n// Parse the `loca` table. This table stores the offsets to the locations of the glyphs in the font,\n// relative to the beginning of the glyphData table.\n// The number of glyphs stored in the `loca` table is specified in the `maxp` table (under numGlyphs)\n// The loca table has two versions: a short version where offsets are stored as uShorts, and a long\n// version where offsets are stored as uLongs. The `head` table specifies which version to use\n// (under indexToLocFormat).\nfunction parseLocaTable(data, start, numGlyphs, shortVersion) {\n    var p = new parse.Parser(data, start);\n    var parseFn = shortVersion ? p.parseUShort : p.parseULong;\n    // There is an extra entry after the last index element to compute the length of the last glyph.\n    // That's why we use numGlyphs + 1.\n    var glyphOffsets = [];\n    for (var i = 0; i < numGlyphs + 1; i += 1) {\n        var glyphOffset = parseFn.call(p);\n        if (shortVersion) {\n            // The short table version stores the actual offset divided by 2.\n            glyphOffset *= 2;\n        }\n\n        glyphOffsets.push(glyphOffset);\n    }\n\n    return glyphOffsets;\n}\n\nvar loca = { parse: parseLocaTable };\n\n// opentype.js\n\n/**\n * The opentype library.\n * @namespace opentype\n */\n\n// File loaders /////////////////////////////////////////////////////////\n/**\n * Loads a font from a file. The callback throws an error message as the first parameter if it fails\n * and the font as an ArrayBuffer in the second parameter if it succeeds.\n * @param  {string} path - The path of the file\n * @param  {Function} callback - The function to call when the font load completes\n */\nfunction loadFromFile(path, callback) {\n    var fs = require('fs');\n    fs.readFile(path, function(err, buffer) {\n        if (err) {\n            return callback(err.message);\n        }\n\n        callback(null, nodeBufferToArrayBuffer(buffer));\n    });\n}\n/**\n * Loads a font from a URL. The callback throws an error message as the first parameter if it fails\n * and the font as an ArrayBuffer in the second parameter if it succeeds.\n * @param  {string} url - The URL of the font file.\n * @param  {Function} callback - The function to call when the font load completes\n */\nfunction loadFromUrl(url, callback) {\n    var request = new XMLHttpRequest();\n    request.open('get', url, true);\n    request.responseType = 'arraybuffer';\n    request.onload = function() {\n        if (request.response) {\n            return callback(null, request.response);\n        } else {\n            return callback('Font could not be loaded: ' + request.statusText);\n        }\n    };\n\n    request.onerror = function () {\n        callback('Font could not be loaded');\n    };\n\n    request.send();\n}\n\n// Table Directory Entries //////////////////////////////////////////////\n/**\n * Parses OpenType table entries.\n * @param  {DataView}\n * @param  {Number}\n * @return {Object[]}\n */\nfunction parseOpenTypeTableEntries(data, numTables) {\n    var tableEntries = [];\n    var p = 12;\n    for (var i = 0; i < numTables; i += 1) {\n        var tag = parse.getTag(data, p);\n        var checksum = parse.getULong(data, p + 4);\n        var offset = parse.getULong(data, p + 8);\n        var length = parse.getULong(data, p + 12);\n        tableEntries.push({tag: tag, checksum: checksum, offset: offset, length: length, compression: false});\n        p += 16;\n    }\n\n    return tableEntries;\n}\n\n/**\n * Parses WOFF table entries.\n * @param  {DataView}\n * @param  {Number}\n * @return {Object[]}\n */\nfunction parseWOFFTableEntries(data, numTables) {\n    var tableEntries = [];\n    var p = 44; // offset to the first table directory entry.\n    for (var i = 0; i < numTables; i += 1) {\n        var tag = parse.getTag(data, p);\n        var offset = parse.getULong(data, p + 4);\n        var compLength = parse.getULong(data, p + 8);\n        var origLength = parse.getULong(data, p + 12);\n        var compression = (void 0);\n        if (compLength < origLength) {\n            compression = 'WOFF';\n        } else {\n            compression = false;\n        }\n\n        tableEntries.push({tag: tag, offset: offset, compression: compression,\n            compressedLength: compLength, length: origLength});\n        p += 20;\n    }\n\n    return tableEntries;\n}\n\n/**\n * @typedef TableData\n * @type Object\n * @property {DataView} data - The DataView\n * @property {number} offset - The data offset.\n */\n\n/**\n * @param  {DataView}\n * @param  {Object}\n * @return {TableData}\n */\nfunction uncompressTable(data, tableEntry) {\n    if (tableEntry.compression === 'WOFF') {\n        var inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);\n        var outBuffer = new Uint8Array(tableEntry.length);\n        tinyInflate(inBuffer, outBuffer);\n        if (outBuffer.byteLength !== tableEntry.length) {\n            throw new Error('Decompression error: ' + tableEntry.tag + ' decompressed length doesn\\'t match recorded length');\n        }\n\n        var view = new DataView(outBuffer.buffer, 0);\n        return {data: view, offset: 0};\n    } else {\n        return {data: data, offset: tableEntry.offset};\n    }\n}\n\n// Public API ///////////////////////////////////////////////////////////\n\n/**\n * Parse the OpenType file data (as an ArrayBuffer) and return a Font object.\n * Throws an error if the font could not be parsed.\n * @param  {ArrayBuffer}\n * @param  {Object} opt - options for parsing\n * @return {opentype.Font}\n */\nfunction parseBuffer(buffer, opt) {\n    opt = (opt === undefined || opt === null) ?  {} : opt;\n\n    var indexToLocFormat;\n    var ltagTable;\n\n    // Since the constructor can also be called to create new fonts from scratch, we indicate this\n    // should be an empty font that we'll fill with our own data.\n    var font = new Font({empty: true});\n\n    // OpenType fonts use big endian byte ordering.\n    // We can't rely on typed array view types, because they operate with the endianness of the host computer.\n    // Instead we use DataViews where we can specify endianness.\n    var data = new DataView(buffer, 0);\n    var numTables;\n    var tableEntries = [];\n    var signature = parse.getTag(data, 0);\n    if (signature === String.fromCharCode(0, 1, 0, 0) || signature === 'true' || signature === 'typ1') {\n        font.outlinesFormat = 'truetype';\n        numTables = parse.getUShort(data, 4);\n        tableEntries = parseOpenTypeTableEntries(data, numTables);\n    } else if (signature === 'OTTO') {\n        font.outlinesFormat = 'cff';\n        numTables = parse.getUShort(data, 4);\n        tableEntries = parseOpenTypeTableEntries(data, numTables);\n    } else if (signature === 'wOFF') {\n        var flavor = parse.getTag(data, 4);\n        if (flavor === String.fromCharCode(0, 1, 0, 0)) {\n            font.outlinesFormat = 'truetype';\n        } else if (flavor === 'OTTO') {\n            font.outlinesFormat = 'cff';\n        } else {\n            throw new Error('Unsupported OpenType flavor ' + signature);\n        }\n\n        numTables = parse.getUShort(data, 12);\n        tableEntries = parseWOFFTableEntries(data, numTables);\n    } else {\n        throw new Error('Unsupported OpenType signature ' + signature);\n    }\n\n    var cffTableEntry;\n    var fvarTableEntry;\n    var glyfTableEntry;\n    var gdefTableEntry;\n    var gposTableEntry;\n    var gsubTableEntry;\n    var hmtxTableEntry;\n    var kernTableEntry;\n    var locaTableEntry;\n    var nameTableEntry;\n    var metaTableEntry;\n    var p;\n\n    for (var i = 0; i < numTables; i += 1) {\n        var tableEntry = tableEntries[i];\n        var table = (void 0);\n        switch (tableEntry.tag) {\n            case 'cmap':\n                table = uncompressTable(data, tableEntry);\n                font.tables.cmap = cmap.parse(table.data, table.offset);\n                font.encoding = new CmapEncoding(font.tables.cmap);\n                break;\n            case 'cvt ' :\n                table = uncompressTable(data, tableEntry);\n                p = new parse.Parser(table.data, table.offset);\n                font.tables.cvt = p.parseShortList(tableEntry.length / 2);\n                break;\n            case 'fvar':\n                fvarTableEntry = tableEntry;\n                break;\n            case 'fpgm' :\n                table = uncompressTable(data, tableEntry);\n                p = new parse.Parser(table.data, table.offset);\n                font.tables.fpgm = p.parseByteList(tableEntry.length);\n                break;\n            case 'head':\n                table = uncompressTable(data, tableEntry);\n                font.tables.head = head.parse(table.data, table.offset);\n                font.unitsPerEm = font.tables.head.unitsPerEm;\n                indexToLocFormat = font.tables.head.indexToLocFormat;\n                break;\n            case 'hhea':\n                table = uncompressTable(data, tableEntry);\n                font.tables.hhea = hhea.parse(table.data, table.offset);\n                font.ascender = font.tables.hhea.ascender;\n                font.descender = font.tables.hhea.descender;\n                font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;\n                break;\n            case 'hmtx':\n                hmtxTableEntry = tableEntry;\n                break;\n            case 'ltag':\n                table = uncompressTable(data, tableEntry);\n                ltagTable = ltag.parse(table.data, table.offset);\n                break;\n            case 'maxp':\n                table = uncompressTable(data, tableEntry);\n                font.tables.maxp = maxp.parse(table.data, table.offset);\n                font.numGlyphs = font.tables.maxp.numGlyphs;\n                break;\n            case 'name':\n                nameTableEntry = tableEntry;\n                break;\n            case 'OS/2':\n                table = uncompressTable(data, tableEntry);\n                font.tables.os2 = os2.parse(table.data, table.offset);\n                break;\n            case 'post':\n                table = uncompressTable(data, tableEntry);\n                font.tables.post = post.parse(table.data, table.offset);\n                font.glyphNames = new GlyphNames(font.tables.post);\n                break;\n            case 'prep' :\n                table = uncompressTable(data, tableEntry);\n                p = new parse.Parser(table.data, table.offset);\n                font.tables.prep = p.parseByteList(tableEntry.length);\n                break;\n            case 'glyf':\n                glyfTableEntry = tableEntry;\n                break;\n            case 'loca':\n                locaTableEntry = tableEntry;\n                break;\n            case 'CFF ':\n                cffTableEntry = tableEntry;\n                break;\n            case 'kern':\n                kernTableEntry = tableEntry;\n                break;\n            case 'GDEF':\n                gdefTableEntry = tableEntry;\n                break;\n            case 'GPOS':\n                gposTableEntry = tableEntry;\n                break;\n            case 'GSUB':\n                gsubTableEntry = tableEntry;\n                break;\n            case 'meta':\n                metaTableEntry = tableEntry;\n                break;\n        }\n    }\n\n    var nameTable = uncompressTable(data, nameTableEntry);\n    font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable);\n    font.names = font.tables.name;\n\n    if (glyfTableEntry && locaTableEntry) {\n        var shortVersion = indexToLocFormat === 0;\n        var locaTable = uncompressTable(data, locaTableEntry);\n        var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);\n        var glyfTable = uncompressTable(data, glyfTableEntry);\n        font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);\n    } else if (cffTableEntry) {\n        var cffTable = uncompressTable(data, cffTableEntry);\n        cff.parse(cffTable.data, cffTable.offset, font, opt);\n    } else {\n        throw new Error('Font doesn\\'t contain TrueType or CFF outlines.');\n    }\n\n    var hmtxTable = uncompressTable(data, hmtxTableEntry);\n    hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);\n    addGlyphNames(font, opt);\n\n    if (kernTableEntry) {\n        var kernTable = uncompressTable(data, kernTableEntry);\n        font.kerningPairs = kern.parse(kernTable.data, kernTable.offset);\n    } else {\n        font.kerningPairs = {};\n    }\n\n    if (gdefTableEntry) {\n        var gdefTable = uncompressTable(data, gdefTableEntry);\n        font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset);\n    }\n\n    if (gposTableEntry) {\n        var gposTable = uncompressTable(data, gposTableEntry);\n        font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset);\n        font.position.init();\n    }\n\n    if (gsubTableEntry) {\n        var gsubTable = uncompressTable(data, gsubTableEntry);\n        font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset);\n    }\n\n    if (fvarTableEntry) {\n        var fvarTable = uncompressTable(data, fvarTableEntry);\n        font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names);\n    }\n\n    if (metaTableEntry) {\n        var metaTable = uncompressTable(data, metaTableEntry);\n        font.tables.meta = meta.parse(metaTable.data, metaTable.offset);\n        font.metas = font.tables.meta;\n    }\n\n    return font;\n}\n\n/**\n * Asynchronously load the font from a URL or a filesystem. When done, call the callback\n * with two arguments `(err, font)`. The `err` will be null on success,\n * the `font` is a Font object.\n * We use the node.js callback convention so that\n * opentype.js can integrate with frameworks like async.js.\n * @alias opentype.load\n * @param  {string} url - The URL of the font to load.\n * @param  {Function} callback - The callback.\n */\nfunction load(url, callback, opt) {\n    opt = (opt === undefined || opt === null) ?  {} : opt;\n    var isNode = typeof window === 'undefined';\n    var loadFn = isNode && !opt.isUrl ? loadFromFile : loadFromUrl;\n\n    return new Promise(function (resolve, reject) {\n        loadFn(url, function(err, arrayBuffer) {\n            if (err) {\n                if (callback) {\n                    return callback(err);\n                } else {\n                    reject(err);\n                }\n            }\n            var font;\n            try {\n                font = parseBuffer(arrayBuffer, opt);\n            } catch (e) {\n                if (callback) {\n                    return callback(e, null);\n                } else {\n                    reject(e);\n                }\n            }\n            if (callback) {\n                return callback(null, font);\n            } else {\n                resolve(font);\n            }\n        });\n    });\n}\n\n/**\n * Synchronously load the font from a URL or file.\n * When done, returns the font object or throws an error.\n * @alias opentype.loadSync\n * @param  {string} url - The URL of the font to load.\n * @param  {Object} opt - opt.lowMemory\n * @return {opentype.Font}\n */\nfunction loadSync(url, opt) {\n    var fs = require('fs');\n    var buffer = fs.readFileSync(url);\n    return parseBuffer(nodeBufferToArrayBuffer(buffer), opt);\n}\n\nvar opentype = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tFont: Font,\n\tGlyph: Glyph,\n\tPath: Path,\n\tBoundingBox: BoundingBox,\n\t_parse: parse,\n\tparse: parseBuffer,\n\tload: load,\n\tloadSync: loadSync\n});\n\nexport default opentype;\nexport { BoundingBox, Font, Glyph, Path, parse as _parse, load, loadSync, parseBuffer as parse };\n//# sourceMappingURL=opentype.module.js.map\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\n// This file is autogenerated by tools/process-named-references.ts\nvar pairDivider = \"~\";\nvar blockDivider = \"~~\";\nfunction generateNamedReferences(input, prev) {\n    var entities = {};\n    var characters = {};\n    var blocks = input.split(blockDivider);\n    var isOptionalBlock = false;\n    for (var i = 0; blocks.length > i; i++) {\n        var entries = blocks[i].split(pairDivider);\n        for (var j = 0; j < entries.length; j += 2) {\n            var entity = entries[j];\n            var character = entries[j + 1];\n            var fullEntity = '&' + entity + ';';\n            entities[fullEntity] = character;\n            if (isOptionalBlock) {\n                entities['&' + entity] = character;\n            }\n            characters[character] = fullEntity;\n        }\n        isOptionalBlock = true;\n    }\n    return prev ?\n        { entities: __assign(__assign({}, entities), prev.entities), characters: __assign(__assign({}, characters), prev.characters) } :\n        { entities: entities, characters: characters };\n}\nexport var bodyRegExps = {\n    xml: /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,\n    html4: /&notin;|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,\n    html5: /&centerdot;|&copysr;|&divideontimes;|&gtcc;|&gtcir;|&gtdot;|&gtlPar;|&gtquest;|&gtrapprox;|&gtrarr;|&gtrdot;|&gtreqless;|&gtreqqless;|&gtrless;|&gtrsim;|&ltcc;|&ltcir;|&ltdot;|&lthree;|&ltimes;|&ltlarr;|&ltquest;|&ltrPar;|&ltri;|&ltrie;|&ltrif;|&notin;|&notinE;|&notindot;|&notinva;|&notinvb;|&notinvc;|&notni;|&notniva;|&notnivb;|&notnivc;|&parallel;|&timesb;|&timesbar;|&timesd;|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g\n};\nexport var namedReferences = {};\nnamedReferences['xml'] = generateNamedReferences(\"lt~<~gt~>~quot~\\\"~apos~'~amp~&\");\nnamedReferences['html4'] = generateNamedReferences(\"apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~‌~zwj~‍~lrm~‎~rlm~‏~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~­~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~\\\"~amp~&~lt~<~gt~>\");\nnamedReferences['html5'] = generateNamedReferences(\"Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~⁡~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~Ĳ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~⁣~InvisibleTimes~⁢~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~​~NegativeThickSpace~​~NegativeThinSpace~​~NegativeVeryThinSpace~​~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\\n~Nfr~𝔑~NoBreak~⁠~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~\\t~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~  ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~​~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~⁡~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ﬃ~fflig~ﬀ~ffllig~ﬄ~ffr~𝔣~filig~ﬁ~fjlig~fj~flat~♭~fllig~ﬂ~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~⁣~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ĳ~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~⁢~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ŉ~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~\\\"~REG~®\", namedReferences['html4']);\n//# sourceMappingURL=named-references.js.map","export var numericUnicodeMap = {\n    0: 65533,\n    128: 8364,\n    130: 8218,\n    131: 402,\n    132: 8222,\n    133: 8230,\n    134: 8224,\n    135: 8225,\n    136: 710,\n    137: 8240,\n    138: 352,\n    139: 8249,\n    140: 338,\n    142: 381,\n    145: 8216,\n    146: 8217,\n    147: 8220,\n    148: 8221,\n    149: 8226,\n    150: 8211,\n    151: 8212,\n    152: 732,\n    153: 8482,\n    154: 353,\n    155: 8250,\n    156: 339,\n    158: 382,\n    159: 376\n};\n//# sourceMappingURL=numeric-unicode-map.js.map","export var fromCodePoint = String.fromCodePoint ||\n    function (astralCodePoint) {\n        return String.fromCharCode(Math.floor((astralCodePoint - 0x10000) / 0x400) + 0xd800, ((astralCodePoint - 0x10000) % 0x400) + 0xdc00);\n    };\n// @ts-expect-error - String.prototype.codePointAt might not exist in older node versions\nexport var getCodePoint = String.prototype.codePointAt\n    ? function (input, position) {\n        return input.codePointAt(position);\n    }\n    : function (input, position) {\n        return (input.charCodeAt(position) - 0xd800) * 0x400 + input.charCodeAt(position + 1) - 0xdc00 + 0x10000;\n    };\nexport var highSurrogateFrom = 0xd800;\nexport var highSurrogateTo = 0xdbff;\n//# sourceMappingURL=surrogate-pairs.js.map","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { bodyRegExps, namedReferences } from './named-references.js';\nimport { numericUnicodeMap } from './numeric-unicode-map.js';\nimport { fromCodePoint, getCodePoint } from './surrogate-pairs.js';\nvar allNamedReferences = __assign(__assign({}, namedReferences), { all: namedReferences.html5 });\nvar encodeRegExps = {\n    specialChars: /[<>'\"&]/g,\n    nonAscii: /[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g,\n    nonAsciiPrintable: /[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g,\n    nonAsciiPrintableOnly: /[\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g,\n    extensive: /[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]?/g\n};\nvar defaultEncodeOptions = {\n    mode: 'specialChars',\n    level: 'all',\n    numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nexport function encode(text, _a) {\n    var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n    if (!text) {\n        return '';\n    }\n    var encodeRegExp = encodeRegExps[mode];\n    var references = allNamedReferences[level].characters;\n    var isHex = numeric === 'hexadecimal';\n    return String.prototype.replace.call(text, encodeRegExp, function (input) {\n        var result = references[input];\n        if (!result) {\n            var code = input.length > 1 ? getCodePoint(input, 0) : input.charCodeAt(0);\n            result = (isHex ? '&#x' + code.toString(16) : '&#' + code) + ';';\n        }\n        return result;\n    });\n}\nvar defaultDecodeOptions = {\n    scope: 'body',\n    level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n    xml: {\n        strict: strict,\n        attribute: attribute,\n        body: bodyRegExps.xml\n    },\n    html4: {\n        strict: strict,\n        attribute: attribute,\n        body: bodyRegExps.html4\n    },\n    html5: {\n        strict: strict,\n        attribute: attribute,\n        body: bodyRegExps.html5\n    }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n    level: 'all'\n};\nfunction getDecodedEntity(entity, references, isAttribute, isStrict) {\n    var decodeResult = entity;\n    var decodeEntityLastChar = entity[entity.length - 1];\n    if (isAttribute && decodeEntityLastChar === '=') {\n        decodeResult = entity;\n    }\n    else if (isStrict && decodeEntityLastChar !== ';') {\n        decodeResult = entity;\n    }\n    else {\n        var decodeResultByReference = references[entity];\n        if (decodeResultByReference) {\n            decodeResult = decodeResultByReference;\n        }\n        else if (entity[0] === '&' && entity[1] === '#') {\n            var decodeSecondChar = entity[2];\n            var decodeCode = decodeSecondChar == 'x' || decodeSecondChar == 'X'\n                ? parseInt(entity.substr(3), 16)\n                : parseInt(entity.substr(2));\n            decodeResult =\n                decodeCode >= 0x10ffff\n                    ? outOfBoundsChar\n                    : decodeCode > 65535\n                        ? fromCodePoint(decodeCode)\n                        : fromCharCode(numericUnicodeMap[decodeCode] || decodeCode);\n        }\n    }\n    return decodeResult;\n}\n/** Decodes a single entity */\nexport function decodeEntity(entity, _a) {\n    var _b = _a === void 0 ? defaultDecodeEntityOptions : _a, _c = _b.level, level = _c === void 0 ? 'all' : _c;\n    if (!entity) {\n        return '';\n    }\n    return getDecodedEntity(entity, allNamedReferences[level].entities, false, false);\n}\n/** Decodes all entities in the text */\nexport function decode(text, _a) {\n    var _b = _a === void 0 ? defaultDecodeOptions : _a, _c = _b.level, level = _c === void 0 ? 'all' : _c, _d = _b.scope, scope = _d === void 0 ? level === 'xml' ? 'strict' : 'body' : _d;\n    if (!text) {\n        return '';\n    }\n    var decodeRegExp = decodeRegExps[level][scope];\n    var references = allNamedReferences[level].entities;\n    var isAttribute = scope === 'attribute';\n    var isStrict = scope === 'strict';\n    return text.replace(decodeRegExp, function (entity) { return getDecodedEntity(entity, references, isAttribute, isStrict); });\n}\n//# sourceMappingURL=index.js.map","import { parse as opentypeParse, Font, Glyph } from \"opentype.js\";\nimport {\n    dataUrlToArrayBuffer,\n    domParser,\n    fetchAsArrayBuffer,\n    loadFontFaceSet,\n    xmlSerializer,\n} from \"../util/crossplatform\";\nimport { Declaration, parse, Rule } from \"css\";\nimport { decode } from \"html-entities\";\n\nconst metricCache: Map<string, FontMetrics> = new Map();\n\n/**\n * Stores cached information about metrics related to a specific font.\n */\nexport class FontMetrics {\n    private font: Font;\n    private glyphsFromText: Map<string, Glyph[]>;\n    private kerningValues: Map<string, Map<string, number>>;\n    private height: number;\n\n    constructor(font: Font) {\n        this.font = font;\n        this.glyphsFromText = new Map();\n        this.kerningValues = new Map();\n        this.height = this.calculateApproximateHeight();\n    }\n\n    getFont(): Font {\n        return this.font;\n    }\n\n    getGlyphs(text: string) {\n        const oldGlyphs = this.glyphsFromText.get(text);\n        if (oldGlyphs) {\n            return oldGlyphs;\n        }\n        const newGlyphs = this.font.stringToGlyphs(text);\n        this.glyphsFromText.set(text, newGlyphs);\n        return newGlyphs;\n    }\n\n    /**\n     * @returns The approximate height of any text line based on all main characters of the alphabet.\n     */\n    getApproximateHeight() {\n        return this.height;\n    }\n\n    /**\n     * Computes the exact height of a line of text.\n     * @param text\n     * @returns\n     */\n    getExactHeight(text: string): number {\n        const glyphs = this.font.stringToGlyphs(text);\n        let ascent = 0;\n        let descent = 0;\n        glyphs.forEach((glyph) => {\n            const metrics = glyph.getMetrics();\n            ascent = Math.max(ascent, metrics.yMax);\n            descent = Math.min(descent, metrics.yMin);\n        });\n        return ascent - descent;\n    }\n\n    getKerningValue(a: Glyph, b: Glyph) {\n        if (!a.name || !b.name) return undefined;\n        let valuesForFirst = this.kerningValues.get(a.name);\n        if (!valuesForFirst) {\n            valuesForFirst = new Map();\n            this.kerningValues.set(a.name, valuesForFirst);\n        }\n        let valueForSecond = valuesForFirst.get(b.name);\n        if (!valueForSecond) {\n            valueForSecond = this.font.getKerningValue(a, b);\n            valuesForFirst.set(b.name, valueForSecond);\n        }\n        return valueForSecond;\n    }\n\n    private calculateApproximateHeight(): number {\n        const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n        const glyphs = this.font.stringToGlyphs(chars);\n        let ascent = 0;\n        let descent = 0;\n        glyphs.forEach((glyph) => {\n            const metrics = glyph.getMetrics();\n            ascent = Math.max(ascent, metrics.yMax);\n            descent = Math.min(descent, metrics.yMin);\n        });\n        return ascent - descent;\n    }\n}\n\nconst isDataURL = (url: string) => {\n    return url.substring(0, 5).toLowerCase().trim() === \"data:\";\n};\n\nconst loadFontCache: Map<string, Promise<Font>> = new Map();\n/**\n * A function for loading and caching a font\n * @param url The URL to load either a web URL or dataURL\n * @param buffer An optional array buffer for the resource if available\n * @returns An opentype font object.\n */\nexport const loadFont = async (url: string): Promise<Font> => {\n    if (loadFontCache.has(url)) {\n        return loadFontCache.get(url)!;\n    }\n    const getFont = async () => {\n        try {\n            const metrics = getFontMetrics(url);\n            return metrics.getFont();\n        } catch {\n            if (isDataURL(url)) {\n                const arrayBuffer = dataUrlToArrayBuffer(url);\n                const font = opentypeParse(arrayBuffer);\n                cacheFontMetrics(url, font);\n                return font;\n            } else {\n                const buffer = await fetchAsArrayBuffer(url, true);\n                const font = opentypeParse(buffer);\n                cacheFontMetrics(url, font);\n                await loadFontFaceSet(font, url);\n                return font;\n            }\n        }\n    };\n    const promise = getFont();\n    loadFontCache.set(url, promise);\n    return promise;\n};\n\n/**\n * Loads a font object from a given data URL.\n * @deprecated Use loadFont instead.\n * @param url The data URL to load.\n * @returns A font object.\n */\nexport const _loadFontExternalDataURL = (url: string): Font => {\n    const arrayBuffer = dataUrlToArrayBuffer(url);\n    const font = opentypeParse(arrayBuffer);\n    cacheFontMetrics(url, font);\n    return font;\n};\n\nexport const getFontMetrics = (assetUrl: string): FontMetrics => {\n    const oldCache = metricCache.get(assetUrl);\n    if (oldCache) {\n        return oldCache;\n    }\n    throw new Error(\"Font metrics unavailable for font\");\n};\n\nconst cacheFontMetrics = (assetUrl: string, font: opentype.Font) => {\n    const newCache = new FontMetrics(font);\n    metricCache.set(assetUrl, newCache);\n    return newCache;\n};\n\nexport const outlineFontsInSvg = async (svg: string): Promise<string> => {\n    const parser: DOMParser = domParser();\n    const parsedSvg = parser.parseFromString(svg, \"image/svg+xml\");\n    const root = parsedSvg.firstElementChild!;\n\n    const fontMap = new Map(); // Map font names to URLs.\n    const styles = root.querySelectorAll(\"style\");\n    styles.forEach((style) => {\n        const tree = parse(style.innerHTML);\n        tree.stylesheet?.rules.forEach((rule: Rule) => {\n            if (rule.type === \"font-face\" && rule.declarations) {\n                const fontFamily = (rule.declarations as Declaration[]).find(\n                    (d) => d.property === \"font-family\",\n                )?.value;\n                const src = (rule.declarations as Declaration[]).find((d) => d.property === \"src\")?.value;\n                const url = src?.match(/'(https.*?)'/)?.[1];\n                if (fontFamily && url) {\n                    fontMap.set(fontFamily, url);\n                }\n            }\n        });\n    });\n\n    // Do the outlining.\n    const tspans = parsedSvg.querySelectorAll(\"tspan\");\n    for (let i = 0; i < tspans.length; i++) {\n        const tspan = tspans.item(i);\n        const textAncestor = tspan.closest(\"text\")!;\n        const gAncestor = tspan.closest(\"g\")!;\n        const fontFamily = textAncestor.getAttribute(\"font-family\")!;\n        const font = await loadFont(fontMap.get(fontFamily));\n        const text = decode(tspan.innerHTML);\n\n        const fill = textAncestor.getAttribute(\"fill\");\n        const stroke = textAncestor.getAttribute(\"stroke\");\n        const strokeWidth = textAncestor.getAttribute(\"stroke-width\");\n\n        const pathToMeasure = font.getPath(text, 0, 0, parseInt(textAncestor.getAttribute(\"font-size\") ?? \"72\"));\n        const width = pathToMeasure.getBoundingBox().x2 - pathToMeasure.getBoundingBox().x1;\n        let offset = 0;\n        const anchor = tspan.getAttribute(\"text-anchor\");\n        if (anchor === \"middle\") {\n            offset = width / 2;\n        } else if (anchor === \"end\") {\n            offset = width;\n        }\n        const path = font.getPath(\n            text,\n            parseFloat(tspan.getAttribute(\"x\") ?? \"0\") - offset,\n            parseFloat(tspan.getAttribute(\"y\") ?? \"0\"),\n            parseInt(textAncestor.getAttribute(\"font-size\") ?? \"72\"),\n        );\n\n        path.fill = fill;\n        path.stroke = stroke;\n        path.strokeWidth = parseFloat(strokeWidth ?? \"0\");\n\n        const pathString = path.toSVG(2);\n        const pathDocument = parser.parseFromString(pathString, \"image/svg+xml\");\n        const pathElement = pathDocument.firstElementChild!;\n        gAncestor.appendChild(pathElement);\n    }\n\n    // Remove the old text elements.\n    const texts = parsedSvg.querySelectorAll(\"text\");\n    texts.forEach((t) => t.remove());\n\n    const serialiser = xmlSerializer();\n    const rebuiltSvg = serialiser.serializeToString(root);\n    return rebuiltSvg;\n};\n","import { FontMetrics, getFontMetrics } from \"../../util/font\";\nimport { charWidth, defaultLineHeightFactor, lineWidth, textWidth, zip } from \"../shared\";\nimport { CanvasRegion, FontData, Region, TextboxElement } from \"../../types\";\nimport { Font } from \"opentype.js\";\n\nconst clampWidth = (lines: string[], currentWidth: number, fontScale: number, cache: FontMetrics): number => {\n    return Math.max(charWidth(lines.join(\"\\n\"), fontScale, cache), currentWidth);\n};\n\n/**\n * Produce an array where text has been broken into lines that can\n * fit the given region with width = region.width and height = auto.\n */\nconst getLines = (\n    region: CanvasRegion,\n    text: string,\n    fontSize: number,\n    fontScale: number,\n    cache: FontMetrics,\n    lineHeight?: number,\n): TraditionalTextResults => {\n    const lh = (lineHeight || defaultLineHeightFactor) * cache.getApproximateHeight();\n    const lines = text.split(\"\\n\");\n\n    try {\n        // Split each line into lines that are less wide than the region.\n        const processedLines = lines.flatMap((line) => splitLineUntilFit(line, region.width, fontScale, cache));\n        const calculatedLines = processedLines.flatMap((li) => li.lines);\n        return {\n            lines: calculatedLines,\n            requiredHeight: processedLines.flatMap((li) => li.lines).length * (fontScale * lh),\n            fontSize: fontSize,\n            requiredWidth: clampWidth(calculatedLines, region.width, fontScale, cache),\n        };\n    } catch (e) {\n        const allChars = text.split(\"\");\n        return {\n            lines: allChars,\n            requiredHeight: allChars.length * (fontScale * lh),\n            fontSize: fontSize,\n            requiredWidth: clampWidth(allChars, region.width, fontScale, cache),\n        };\n    }\n};\n\nconst splitLineUntilFit = (\n    line: string,\n    regionWidth: number,\n    fontScale: number,\n    cache: FontMetrics,\n): { lines: string[]; width: number } => {\n    const initialWidth = textWidth(line, fontScale, cache);\n    if (initialWidth <= regionWidth) {\n        return { lines: [line], width: initialWidth };\n    }\n\n    const lineContainsSpace = line.indexOf(\" \") > -1;\n    if (!lineContainsSpace) {\n        // No space, whole line is one word.\n        if (line.length <= 1) {\n            throw new Error(`Character ${line} is wider than region`);\n        }\n        const middle = Math.floor(line.length / 2);\n\n        const splitA = splitLineUntilFit(line.slice(0, middle), regionWidth, fontScale, cache);\n        const splitB = splitLineUntilFit(line.slice(middle), regionWidth, fontScale, cache);\n        return { lines: [...splitA.lines, ...splitB.lines], width: Math.max(splitA.width, splitB.width) };\n    }\n\n    const allWords = line.split(\" \");\n    const lines: string[] = [];\n    let maxWidth = -Infinity;\n\n    let firstWordIndex = 0;\n    while (firstWordIndex < allWords.length) {\n        const firstWord = allWords[firstWordIndex];\n        if (textWidth(firstWord, fontScale, cache) > regionWidth) {\n            // First word is too big for one line.\n            const split = splitLineUntilFit(firstWord, regionWidth, fontScale, cache);\n            lines.push(...split.lines);\n            maxWidth = Math.max(maxWidth, split.width);\n            firstWordIndex++;\n        } else {\n            // Add words to temp line until we go over.\n            const tempWords = [firstWord];\n            maxWidth = Math.max(maxWidth, textWidth(firstWord, fontScale, cache));\n\n            let lastWordIndex = firstWordIndex + 1;\n            let fits = true;\n            while (lastWordIndex < allWords.length && fits) {\n                const nextWord = allWords[lastWordIndex];\n                const wordsWidth = textWidth(`${tempWords.join(\" \")} ${nextWord}`, fontScale, cache);\n                if (wordsWidth <= regionWidth) {\n                    tempWords.push(nextWord);\n                    maxWidth = Math.max(maxWidth, wordsWidth);\n                    lastWordIndex++;\n                } else {\n                    fits = false;\n                }\n            }\n            lines.push(tempWords.join(\" \"));\n\n            firstWordIndex = lastWordIndex;\n        }\n    }\n\n    if (maxWidth < 0) {\n        throw new Error(`No max width calculated for text: ${lines}.`);\n    }\n    return { lines, width: maxWidth };\n};\n\nexport interface TraditionalTextResults {\n    lines: string[];\n    fontSize: number;\n    requiredHeight: number;\n    requiredWidth: number;\n}\n\nconst calcFontSize = (\n    lines: string[],\n    cache: FontMetrics,\n    font: Font,\n    width: number,\n    height: number,\n    lineHeight?: number,\n): number => {\n    const lh = (lineHeight ?? defaultLineHeightFactor) * cache.getApproximateHeight();\n    const fontScale = 1 / font.unitsPerEm;\n\n    const desiredWidth = lineWidth(lines, fontScale, cache);\n    const desiredHeight = lines.length * lh * fontScale;\n\n    const fontSizeW = width / desiredWidth;\n    const fontSizeH = height / desiredHeight;\n    return Math.min(fontSizeH, fontSizeW);\n};\n\n/**\n * Automatically fit the dimensions and font size of a textbox, based on how the textbox has been changed\n * @param updatedText The new input text.\n * @param updatedElement The element in its new, updated state.\n * @param previousElement The element before any changes.\n * @param lineHeight The line height of the textbox.\n * @returns A collection of changes that are required to correctly update the textbox.\n */\nexport const refitTextbox = (\n    updatedText: string,\n    updatedElement: TextboxElement,\n    previousElement?: TextboxElement,\n    lineHeight?: number,\n): TraditionalTextResults => {\n    const cache = getFontMetrics(updatedElement.fontData!.assetUrl);\n    const font = cache.getFont();\n    const fontScale = updatedElement.fontSize / font.unitsPerEm;\n\n    if (!previousElement) {\n        return getLines(\n            updatedElement as unknown as CanvasRegion,\n            updatedText,\n            updatedElement.fontSize,\n            fontScale,\n            cache,\n            lineHeight,\n        );\n    }\n\n    // fallbackLines is only used when not re-calculating the lines of text\n    let fallbackLines: string[];\n    if (!updatedElement.text) {\n        fallbackLines = updatedElement.input?.split(\"\\n\") ?? [\"\"];\n    } else {\n        fallbackLines = updatedElement.text.split(\"\\n\");\n    }\n\n    // layout has not changed\n    if (\n        previousElement.input === updatedText &&\n        updatedElement.width === previousElement.width &&\n        updatedElement.height === previousElement.height &&\n        updatedElement.lineHeight === previousElement.lineHeight\n    ) {\n        return {\n            lines: fallbackLines,\n            requiredHeight: updatedElement.height,\n            requiredWidth: clampWidth(fallbackLines, updatedElement.width, fontScale, cache),\n            fontSize: updatedElement.fontSize,\n        };\n    }\n\n    const oneAxisChange =\n        (updatedElement.width !== previousElement.width) !== (updatedElement.height !== previousElement.height);\n    if (\n        updatedElement.lineHeight === previousElement.lineHeight &&\n        !oneAxisChange &&\n        previousElement.input === updatedText\n    ) {\n        return {\n            lines: fallbackLines,\n            requiredHeight: updatedElement.height,\n            requiredWidth: clampWidth(fallbackLines, updatedElement.width, fontScale, cache),\n            fontSize: calcFontSize(fallbackLines, cache, font, updatedElement.width, updatedElement.height, lineHeight),\n        };\n    } else {\n        return getLines(\n            updatedElement as unknown as CanvasRegion,\n            updatedText,\n            updatedElement.fontSize,\n            fontScale,\n            cache,\n            lineHeight,\n        );\n    }\n};\n\n/**\n * If a textbox has a fixed font size, it's width should be changed to fit the text.\n */\nexport const recalculateTextboxRegion = (\n    currentRegion: Region,\n    fontData: FontData,\n    fontSize: number,\n    textLines: string[],\n    align?: string,\n): Region => {\n    const cache = getFontMetrics(fontData.assetUrl);\n    const font = cache.getFont();\n\n    let region = { ...currentRegion };\n    const candidateRegion = { ...currentRegion };\n    const requiredWidth = lineWidth(textLines, fontSize / font.unitsPerEm, getFontMetrics(fontData.assetUrl));\n\n    if (requiredWidth && requiredWidth < region.width) {\n        candidateRegion.width = requiredWidth;\n        if (align === \"left\") {\n            candidateRegion.left += Math.sin((region.rotation * Math.PI) / 360) * (region.width - requiredWidth);\n            candidateRegion.top += (Math.sin((region.rotation * Math.PI) / 180) * (requiredWidth - region.width)) / 2;\n        } else if (align === \"right\") {\n            candidateRegion.left += region.width - requiredWidth;\n        } else {\n            candidateRegion.left += (region.width - requiredWidth) / 2;\n        }\n        if (textLines && zip(textLines, textLines).every(([lineA, lineB]) => lineA === lineB)) {\n            region = candidateRegion;\n        }\n    }\n    return region;\n};\n","import { FontMetrics } from \"../util/font\";\nimport { TextAlgorithm, TextboxElement } from \"../types\";\nimport { refitTextbox } from \"./algorithm/traditional\";\n\n/**\n * The size of a step used to compute font sizes.\n */\nexport const fontSizeStep = 1;\n\n/**\n * Computes the width of text. See the following link for a detailed breakdown.\n * https://developer.tizen.org/community/tip-tech/working-fonts-using-opentype.js?langswitch=en\n * @param text The text to get width for.\n * @param scale The scale\n * @param cache The font metric cache to be used for calculations.\n * @returns The width of the text.\n */\nexport const textWidth = (text: string, scale: number, cache: FontMetrics): number => {\n    let width = 0;\n    const glyphs = cache.getGlyphs(text);\n\n    glyphs.forEach((glyph, idx) => {\n        if (glyph.advanceWidth) {\n            width += glyph.advanceWidth;\n        }\n        if (idx < glyphs.length - 1) {\n            const kerningValue = cache.getKerningValue(glyph, glyphs[idx + 1]);\n            width += kerningValue || 0;\n        }\n    });\n    width *= scale;\n    return width;\n};\n\n/**\n * Computes the width of the larges individual character in the input text.\n * @param text The input text.\n * @param scale The scale of the text.\n * @param cache The font metric cache to be used for calculations.\n * @returns The width of the largest character.\n */\nexport const charWidth = (text: string, scale: number, cache: FontMetrics): number => {\n    let maxWidth = 0;\n    const glyphs = cache.getGlyphs(text);\n\n    glyphs.forEach((glyph, idx) => {\n        if (glyph.advanceWidth) {\n            maxWidth = Math.max(maxWidth, glyph.advanceWidth);\n        }\n        if (idx < glyphs.length - 1) {\n            const kerningValue = cache.getKerningValue(glyph, glyphs[idx + 1]);\n            maxWidth = Math.max(maxWidth, kerningValue || 0);\n        }\n    });\n    maxWidth *= scale;\n    return maxWidth;\n};\n\n/**\n * Computes the width of the largest line.\n * @param lines The input text split by line.\n * @param fontScale The scale of the text.\n * @param cache The font metric cache to be used for calculations.\n * @returns The width of the largest line.\n */\nexport const lineWidth = (lines: string[], fontScale: number, cache: FontMetrics): number => {\n    let maxWidth = 0;\n    lines.forEach((line) => {\n        maxWidth = Math.max(maxWidth, textWidth(line, fontScale, cache));\n    });\n    return maxWidth;\n};\n\ninterface TextTransformationConfiguration {\n    stripControlCharacters: boolean;\n    vertical: boolean;\n    uppercase: boolean;\n}\n\nconst transformationDefaults: TextTransformationConfiguration = {\n    stripControlCharacters: true,\n    vertical: false,\n    uppercase: false,\n};\n\n/**\n * Applies a number of different transformations to a piece of text based on configuration\n * @param text The text to transform.\n * @param options The requested options, this will default to sensible defaults if not provided.\n * @returns A string represented the transformed value of the input text.\n */\nexport const applyTextTransformations = (\n    text: string,\n    options: Partial<TextTransformationConfiguration> = transformationDefaults,\n) => {\n    // We apply our own defaults to any fields that aren't supplied.\n    const configuration = { ...transformationDefaults, ...options };\n\n    let result = text || \"\";\n\n    // Control characters are not valid in XML, we strip them from any input to\n    // ensure that invalid data doesn't enter the SVG generated by our system.\n    // \\u000A and \\u000D are carriage return and newline sequences, we want to keep these.\n    // eslint-disable-next-line no-control-regex\n    if (configuration.stripControlCharacters) {\n        result = result.replace(/^(?![\\u000A\\u000D])[\\u0000-\\u001F\\u007F-\\u009F]/g, \"\");\n    }\n\n    // Force upper case\n    if (configuration.uppercase) {\n        result = result.toUpperCase();\n    }\n\n    // Inserts newlines into text to make a vertical string\n    if (configuration.vertical) {\n        result = result.split(\"\").join(\"\\n\");\n    }\n\n    return result;\n};\n\n// https://stackoverflow.com/a/22015771\n// Helpful function for zipping two arrays together\nexport const zip = (xs: any[], ys: any[]) => {\n    return xs.map((x, idx) => [x, ys[idx]]);\n};\n\nexport const getTextAlignment = (align: string = \"center\", isVertical: boolean = false) => {\n    if (isVertical) {\n        return \"center\";\n    }\n    return align;\n};\n\n/**\n * Returns the correct text anchor for the given alignment.\n */\nexport const getAnchor = (align?: string) => {\n    if (align === \"left\") {\n        return \"start\";\n    }\n    if (align === \"right\") {\n        return \"end\";\n    }\n    return \"middle\";\n};\n\nexport const recomputeTextOnElement = (el: TextboxElement, newText: string, oldEl?: TextboxElement): TextboxElement => {\n    if (!el.fontData) {\n        return el;\n    }\n    const getCalculatedMixins = () => {\n        // TODO: Pull the autosize algorithm in here as well. This means all sizing\n        // will occur in one place. Any command that relies on text changes that could affect\n        // the textbox size in any way should pass through this function.\n        if (el.algorithm === TextAlgorithm.Traditional) {\n            const calculatedText = refitTextbox(newText, el, oldEl, el.lineHeight);\n            return {\n                text: calculatedText.lines.join(\"\\n\"),\n                height: calculatedText.requiredHeight,\n                width: calculatedText.requiredWidth,\n                fontSize: calculatedText.fontSize,\n                input: newText,\n            };\n        } else {\n            return {\n                text: newText,\n            };\n        }\n    };\n    return {\n        ...el,\n        ...getCalculatedMixins(),\n    };\n};\n\n/**\n * The default line height to use in situations where none is specified.\n * Typical default is suggested to be between 1.1 & 1.2\n */\nexport const defaultLineHeightFactor = 1.1;\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nvar badChars = /[&<>\"'`=]/g,\n    possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n  for (var i = 1; i < arguments.length; i++) {\n    for (var key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n  return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n  exports.isFunction = isFunction = function (value) {\n    return typeof value === 'function' && toString.call(value) === '[object Function]';\n  };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n  return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n  for (var i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nfunction escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) {\n    return string;\n  }\n  return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction createFrame(object) {\n  var frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nfunction blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n  var loc = node && node.loc,\n      line = undefined,\n      endLineNumber = undefined,\n      column = undefined,\n      endColumn = undefined;\n\n  if (loc) {\n    line = loc.start.line;\n    endLineNumber = loc.end.line;\n    column = loc.start.column;\n    endColumn = loc.end.column;\n\n    message += ' - ' + line + ':' + column;\n  }\n\n  var tmp = Error.prototype.constructor.call(this, message);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (var idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n\n  /* istanbul ignore else */\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n      this.endLineNumber = endLineNumber;\n\n      // Work around issue under safari where we can't directly set the column value\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n        Object.defineProperty(this, 'endColumn', {\n          value: endColumn,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n        this.endColumn = endColumn;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n  instance.registerHelper('blockHelperMissing', function (context, options) {\n    var inverse = options.inverse,\n        fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (_utils.isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        var data = _utils.createFrame(options.data);\n        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n        options = { data: data };\n      }\n\n      return fn(context, options);\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('each', function (context, options) {\n    if (!options) {\n      throw new _exception2['default']('Must pass iterator to #each');\n    }\n\n    var fn = options.fn,\n        inverse = options.inverse,\n        i = 0,\n        ret = '',\n        data = undefined,\n        contextPath = undefined;\n\n    if (options.data && options.ids) {\n      contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (_utils.isFunction(context)) {\n      context = context.call(this);\n    }\n\n    if (options.data) {\n      data = _utils.createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret = ret + fn(context[field], {\n        data: data,\n        blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n      });\n    }\n\n    if (context && typeof context === 'object') {\n      if (_utils.isArray(context)) {\n        for (var j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n        var newContext = [];\n        var iterator = context[Symbol.iterator]();\n        for (var it = iterator.next(); !it.done; it = iterator.next()) {\n          newContext.push(it.value);\n        }\n        context = newContext;\n        for (var j = context.length; i < j; i++) {\n          execIteration(i, i, i === context.length - 1);\n        }\n      } else {\n        (function () {\n          var priorKey = undefined;\n\n          Object.keys(context).forEach(function (key) {\n            // We're running the iterations one step out of sync so we can detect\n            // the last iteration without have to scan the object twice and create\n            // an itermediate keys array.\n            if (priorKey !== undefined) {\n              execIteration(priorKey, i - 1);\n            }\n            priorKey = key;\n            i++;\n          });\n          if (priorKey !== undefined) {\n            execIteration(priorKey, i - 1, true);\n          }\n        })();\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('helperMissing', function () /* [args, ]options */{\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('if', function (conditional, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#if requires exactly one argument');\n    }\n    if (_utils.isFunction(conditional)) {\n      conditional = conditional.call(this);\n    }\n\n    // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n    if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n\n  instance.registerHelper('unless', function (conditional, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#unless requires exactly one argument');\n    }\n    return instance.helpers['if'].call(this, conditional, {\n      fn: options.inverse,\n      inverse: options.fn,\n      hash: options.hash\n    });\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n  instance.registerHelper('log', function () /* message, options */{\n    var args = [undefined],\n        options = arguments[arguments.length - 1];\n    for (var i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    var level = 1;\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n    args[0] = level;\n\n    instance.log.apply(instance, args);\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n  instance.registerHelper('lookup', function (obj, field, options) {\n    if (!obj) {\n      // Note for 5.0: Change to \"obj == null\" in 5.0\n      return obj;\n    }\n    return options.lookupProperty(obj, field);\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n  instance.registerHelper('with', function (context, options) {\n    if (arguments.length != 2) {\n      throw new _exception2['default']('#with requires exactly one argument');\n    }\n    if (_utils.isFunction(context)) {\n      context = context.call(this);\n    }\n\n    var fn = options.fn;\n\n    if (!_utils.isEmpty(context)) {\n      var data = options.data;\n      if (options.data && options.ids) {\n        data = _utils.createFrame(options.data);\n        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: _utils.blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n  _helpersBlockHelperMissing2['default'](instance);\n  _helpersEach2['default'](instance);\n  _helpersHelperMissing2['default'](instance);\n  _helpersIf2['default'](instance);\n  _helpersLog2['default'](instance);\n  _helpersLookup2['default'](instance);\n  _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n  if (instance.helpers[helperName]) {\n    instance.hooks[helperName] = instance.helpers[helperName];\n    if (!keepHelper) {\n      // Using delete is slow\n      instance.helpers[helperName] = undefined;\n    }\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFOztBQUVmLGNBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO0tBQzFDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIC8vIFVzaW5nIGRlbGV0ZSBpcyBzbG93XG4gICAgICBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n  instance.registerDecorator('inline', function (fn, props, container, options) {\n    var ret = fn;\n    if (!props.partials) {\n      props.partials = {};\n      ret = function (context, options) {\n        // Create a new partials stack frame prior to exec.\n        var original = container.partials;\n        container.partials = _utils.extend({}, original, props.partials);\n        var ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n\n    return ret;\n  });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n  _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function lookupLevel(level) {\n    if (typeof level === 'string') {\n      var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n\n  // Can be overridden in the host environment\n  log: function log(level) {\n    level = logger.lookupLevel(level);\n\n    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n      var method = logger.methodMap[level];\n      // eslint-disable-next-line no-console\n      if (!console[method]) {\n        method = 'log';\n      }\n\n      for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        message[_key - 1] = arguments[_key];\n      }\n\n      console[method].apply(console, message); // eslint-disable-line no-console\n    }\n  }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n  // Create an object with \"null\"-prototype to avoid truthy results on\n  // prototype properties.\n  var propertyWhiteList = Object.create(null);\n  // eslint-disable-next-line no-proto\n  propertyWhiteList['__proto__'] = false;\n  _utils.extend(propertyWhiteList, runtimeOptions.allowedProtoProperties);\n\n  var methodWhiteList = Object.create(null);\n  methodWhiteList['constructor'] = false;\n  methodWhiteList['__defineGetter__'] = false;\n  methodWhiteList['__defineSetter__'] = false;\n  methodWhiteList['__lookupGetter__'] = false;\n  methodWhiteList['__lookupSetter__'] = false;\n  _utils.extend(methodWhiteList, runtimeOptions.allowedProtoMethods);\n\n  return {\n    properties: {\n      whitelist: propertyWhiteList,\n      defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n    },\n    methods: {\n      whitelist: methodWhiteList,\n      defaultValue: runtimeOptions.allowProtoMethodsByDefault\n    }\n  };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n  if (typeof result === 'function') {\n    return checkWhiteList(protoAccessControl.methods, propertyName);\n  } else {\n    return checkWhiteList(protoAccessControl.properties, propertyName);\n  }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n    return protoAccessControlForType.whitelist[propertyName] === true;\n  }\n  if (protoAccessControlForType.defaultValue !== undefined) {\n    return protoAccessControlForType.defaultValue;\n  }\n  logUnexpecedPropertyAccessOnce(propertyName);\n  return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n  if (loggedProperties[propertyName] !== true) {\n    loggedProperties[propertyName] = true;\n    _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n  }\n}\n\nfunction resetLoggedProperties() {\n  Object.keys(loggedProperties).forEach(function (propertyName) {\n    delete loggedProperties[propertyName];\n  });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FCQUF1QixVQUFVOztzQkFDZCxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7OztBQUd2RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTlDLG1CQUFpQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN2QyxnQkFBTyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs7QUFFakUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxpQkFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN2QyxpQkFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLGlCQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUMsaUJBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM1QyxpQkFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLGdCQUFPLGVBQWUsRUFBRSxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7QUFFNUQsU0FBTztBQUNMLGNBQVUsRUFBRTtBQUNWLGVBQVMsRUFBRSxpQkFBaUI7QUFDNUIsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLGVBQWU7QUFDMUIsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLHdCQUFPLEdBQUcsQ0FDUixPQUFPLEVBQ1AsaUVBQStELFlBQVksb0lBQ0gsb0hBQzJDLENBQ3BILENBQUM7R0FDSDtDQUNGOztBQUVNLFNBQVMscUJBQXFCLEdBQUc7QUFDdEMsUUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFlBQVksRUFBSTtBQUNwRCxXQUFPLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0dBQ3ZDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InByb3RvLWFjY2Vzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIFwibnVsbFwiLXByb3RvdHlwZSB0byBhdm9pZCB0cnV0aHkgcmVzdWx0cyBvblxuICAvLyBwcm90b3R5cGUgcHJvcGVydGllcy5cbiAgY29uc3QgcHJvcGVydHlXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG9cbiAgcHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG4gIGV4dGVuZChwcm9wZXJ0eVdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvUHJvcGVydGllcyk7XG5cbiAgY29uc3QgbWV0aG9kV2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIG1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIG1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVTZXR0ZXJfXyddID0gZmFsc2U7XG4gIG1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG4gIG1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBTZXR0ZXJfXyddID0gZmFsc2U7XG4gIGV4dGVuZChtZXRob2RXaGl0ZUxpc3QsIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHMpO1xuXG4gIHJldHVybiB7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgd2hpdGVsaXN0OiBwcm9wZXJ0eVdoaXRlTGlzdCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b1Byb3BlcnRpZXNCeURlZmF1bHRcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHdoaXRlbGlzdDogbWV0aG9kV2hpdGVMaXN0LFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvTWV0aG9kc0J5RGVmYXVsdFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIHByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSB7XG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5tZXRob2RzLCBwcm9wZXJ0eU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wucHJvcGVydGllcywgcHJvcGVydHlOYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdID09PSB0cnVlO1xuICB9XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlO1xuICB9XG4gIGxvZ1VuZXhwZWNlZFByb3BlcnR5QWNjZXNzT25jZShwcm9wZXJ0eU5hbWUpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxvZ1VuZXhwZWNlZFByb3BlcnR5QWNjZXNzT25jZShwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSAhPT0gdHJ1ZSkge1xuICAgIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRydWU7XG4gICAgbG9nZ2VyLmxvZyhcbiAgICAgICdlcnJvcicsXG4gICAgICBgSGFuZGxlYmFyczogQWNjZXNzIGhhcyBiZWVuIGRlbmllZCB0byByZXNvbHZlIHRoZSBwcm9wZXJ0eSBcIiR7cHJvcGVydHlOYW1lfVwiIGJlY2F1c2UgaXQgaXMgbm90IGFuIFwib3duIHByb3BlcnR5XCIgb2YgaXRzIHBhcmVudC5cXG5gICtcbiAgICAgICAgYFlvdSBjYW4gYWRkIGEgcnVudGltZSBvcHRpb24gdG8gZGlzYWJsZSB0aGUgY2hlY2sgb3IgdGhpcyB3YXJuaW5nOlxcbmAgK1xuICAgICAgICBgU2VlIGh0dHBzOi8vaGFuZGxlYmFyc2pzLmNvbS9hcGktcmVmZXJlbmNlL3J1bnRpbWUtb3B0aW9ucy5odG1sI29wdGlvbnMtdG8tY29udHJvbC1wcm90b3R5cGUtYWNjZXNzIGZvciBkZXRhaWxzYFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0TG9nZ2VkUHJvcGVydGllcygpIHtcbiAgT2JqZWN0LmtleXMobG9nZ2VkUHJvcGVydGllcykuZm9yRWFjaChwcm9wZXJ0eU5hbWUgPT4ge1xuICAgIGRlbGV0ZSBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.9';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0 <4.3.0',\n  8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  _helpers.registerDefaultHelpers(this);\n  _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n\n  logger: _logger2['default'],\n  log: _logger2['default'].log,\n\n  registerHelper: function registerHelper(name, fn) {\n    if (_utils.toString.call(name) === objectType) {\n      if (fn) {\n        throw new _exception2['default']('Arg not supported with multiple helpers');\n      }\n      _utils.extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function unregisterHelper(name) {\n    delete this.helpers[name];\n  },\n\n  registerPartial: function registerPartial(name, partial) {\n    if (_utils.toString.call(name) === objectType) {\n      _utils.extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n      }\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function unregisterPartial(name) {\n    delete this.partials[name];\n  },\n\n  registerDecorator: function registerDecorator(name, fn) {\n    if (_utils.toString.call(name) === objectType) {\n      if (fn) {\n        throw new _exception2['default']('Arg not supported with multiple decorators');\n      }\n      _utils.extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function unregisterDecorator(name) {\n    delete this.decorators[name];\n  },\n  /**\n   * Reset the memory of illegal property accesses that have already been logged.\n   * @deprecated should only be used in handlebars test-cases\n   */\n  resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n    _internalProtoAccess.resetLoggedProperties();\n  }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy45JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n  return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n  if (typeof helper !== 'function') {\n    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n    return helper;\n  }\n  var wrapper = function wrapper() /* dynamic arguments */{\n    var options = arguments[arguments.length - 1];\n    arguments[arguments.length - 1] = transformOptionsFn(options);\n    return helper.apply(this, arguments);\n  };\n  return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n  var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n      currentRevision = _base.COMPILER_REVISION;\n\n  if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n    return;\n  }\n\n  if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n    var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n        compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n    throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n  } else {\n    // Use the embedded version info since the runtime doesn't know about this revision yet\n    throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n  }\n}\n\nfunction template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new _exception2['default']('No environment passed to template');\n  }\n  if (!templateSpec || !templateSpec.main) {\n    throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d;\n\n  // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as pseudo-supported APIs.\n  env.VM.checkRevision(templateSpec.compiler);\n\n  // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n  var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n    options.hooks = this.hooks;\n    options.protoAccessControl = this.protoAccessControl;\n\n    var result = env.VM.invokePartial.call(this, partial, context, options);\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n      result = options.partials[options.name](context, options);\n    }\n    if (result != null) {\n      if (options.indent) {\n        var lines = result.split('\\n');\n        for (var i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n        result = lines.join('\\n');\n      }\n      return result;\n    } else {\n      throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n    }\n  }\n\n  // Just add water\n  var container = {\n    strict: function strict(obj, name, loc) {\n      if (!obj || !(name in obj)) {\n        throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n          loc: loc\n        });\n      }\n      return container.lookupProperty(obj, name);\n    },\n    lookupProperty: function lookupProperty(parent, propertyName) {\n      var result = parent[propertyName];\n      if (result == null) {\n        return result;\n      }\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return result;\n      }\n\n      if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n        return result;\n      }\n      return undefined;\n    },\n    lookup: function lookup(depths, name) {\n      var len = depths.length;\n      for (var i = 0; i < len; i++) {\n        var result = depths[i] && container.lookupProperty(depths[i], name);\n        if (result != null) {\n          return result;\n        }\n      }\n    },\n    lambda: function lambda(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n\n    fn: function fn(i) {\n      var ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n\n    programs: [],\n    program: function program(i, data, declaredBlockParams, blockParams, depths) {\n      var programWrapper = this.programs[i],\n          fn = this.fn(i);\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n      return programWrapper;\n    },\n\n    data: function data(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n      return value;\n    },\n    mergeIfNeeded: function mergeIfNeeded(param, common) {\n      var obj = param || common;\n\n      if (param && common && param !== common) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context) {\n    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n    var data = options.data;\n\n    ret._setup(options);\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n    var depths = undefined,\n        blockParams = templateSpec.useBlockParams ? [] : undefined;\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context /*, options*/) {\n      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n    }\n\n    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n    return main(context, options);\n  }\n\n  ret.isTop = true;\n\n  ret._setup = function (options) {\n    if (!options.partial) {\n      var mergedHelpers = {};\n      addHelpers(mergedHelpers, env.helpers, container);\n      addHelpers(mergedHelpers, options.helpers, container);\n      container.helpers = mergedHelpers;\n\n      if (templateSpec.usePartial) {\n        // Use mergeIfNeeded here to prevent compiling global partials multiple times\n        container.partials = container.mergeIfNeeded(options.partials, env.partials);\n      }\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = Utils.extend({}, env.decorators, options.decorators);\n      }\n\n      container.hooks = {};\n      container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n      var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n      _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n      _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n    } else {\n      container.protoAccessControl = options.protoAccessControl; // internal option\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n      container.hooks = options.hooks;\n    }\n  };\n\n  ret._child = function (i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new _exception2['default']('must pass block params');\n    }\n    if (templateSpec.useDepths && !depths) {\n      throw new _exception2['default']('must pass parent depths');\n    }\n\n    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n  };\n  return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n  function prog(context) {\n    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n    var currentDepths = depths;\n    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = lookupOwnProperty(options.data, 'partial-block');\n    } else {\n      partial = lookupOwnProperty(options.partials, options.name);\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = lookupOwnProperty(options.partials, partial);\n  }\n  return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block');\n  options.partial = true;\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  var partialBlock = undefined;\n  if (options.fn && options.fn !== noop) {\n    (function () {\n      options.data = _base.createFrame(options.data);\n      // Wrapper function to get access to currentPartialBlock from the closure\n      var fn = options.fn;\n      partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n        // Restore the partial-block from the closure for the execution of the block\n        // i.e. the part inside the block of the partial call.\n        options.data = _base.createFrame(options.data);\n        options.data['partial-block'] = currentPartialBlock;\n        return fn(context, options);\n      };\n      if (fn.partials) {\n        options.partials = Utils.extend({}, options.partials, fn.partials);\n      }\n    })();\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nfunction noop() {\n  return '';\n}\n\nfunction lookupOwnProperty(obj, name) {\n  if (obj && Object.prototype.hasOwnProperty.call(obj, name)) {\n    return obj[name];\n  }\n}\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? _base.createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    var props = {};\n    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n    Utils.extend(prog, props);\n  }\n  return prog;\n}\n\nfunction addHelpers(mergedHelpers, helpers, container) {\n  if (!helpers) return;\n  Object.keys(helpers).forEach(function (helperName) {\n    var helper = helpers[helperName];\n    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n  });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n  var lookupProperty = container.lookupProperty;\n  return _internalWrapHelper.wrapHelper(helper, function (options) {\n    options.lookupProperty = lookupProperty;\n    return options;\n  });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3pFLENBQUMsQ0FBQztDQUNKOztBQUVELFNBQVMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUNuRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ2hELFNBQU8sK0JBQVcsTUFBTSxFQUFFLFVBQUEsT0FBTyxFQUFJO0FBQ25DLFdBQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLFdBQU8sT0FBTyxDQUFDO0dBQ2hCLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucy5ob29rcyA9IHRoaXMuaG9va3M7XG4gICAgb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2wgPSB0aGlzLnByb3RvQWNjZXNzQ29udHJvbDtcblxuICAgIGxldCByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmluZGVudCkge1xuICAgICAgICBsZXQgbGluZXMgPSByZXN1bHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmICghbGluZXNbaV0gJiYgaSArIDEgPT09IGwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpbmVzW2ldID0gb3B0aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdUaGUgcGFydGlhbCAnICtcbiAgICAgICAgICBvcHRpb25zLm5hbWUgK1xuICAgICAgICAgICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZSdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSwgbG9jKSB7XG4gICAgICBpZiAoIW9iaiB8fCAhKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmosIHtcbiAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSB7fTtcbiAgICAgIGFkZEhlbHBlcnMobWVyZ2VkSGVscGVycywgZW52LmhlbHBlcnMsIGNvbnRhaW5lcik7XG4gICAgICBhZGRIZWxwZXJzKG1lcmdlZEhlbHBlcnMsIG9wdGlvbnMuaGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMuZGF0YSwgJ3BhcnRpYWwtYmxvY2snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMucGFydGlhbHMsIG9wdGlvbnMubmFtZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMucGFydGlhbHMsIHBhcnRpYWwpO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMuZGF0YSwgJ3BhcnRpYWwtYmxvY2snKTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cE93blByb3BlcnR5KG9iaiwgbmFtZSkge1xuICBpZiAob2JqICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpKSB7XG4gICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKFxuICAgICAgcHJvZyxcbiAgICAgIHByb3BzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgZGVwdGhzICYmIGRlcHRoc1swXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvZztcbn1cblxuZnVuY3Rpb24gYWRkSGVscGVycyhtZXJnZWRIZWxwZXJzLCBoZWxwZXJzLCBjb250YWluZXIpIHtcbiAgaWYgKCFoZWxwZXJzKSByZXR1cm47XG4gIE9iamVjdC5rZXlzKGhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IGhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgb3B0aW9ucy5sb29rdXBQcm9wZXJ0eSA9IGxvb2t1cFByb3BlcnR5O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9KTtcbn1cbiJdfQ==\n","/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n  /* istanbul ignore next */\n  // https://mathiasbynens.be/notes/globalthis\n  (function () {\n    if (typeof globalThis === 'object') return;\n    Object.prototype.__defineGetter__('__magic__', function () {\n      return this;\n    });\n    __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n    delete Object.prototype.__magic__;\n  })();\n\n  var $Handlebars = globalThis.Handlebars;\n\n  /* istanbul ignore next */\n  Handlebars.noConflict = function () {\n    if (globalThis.Handlebars === Handlebars) {\n      globalThis.Handlebars = $Handlebars;\n    }\n    return Handlebars;\n  };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n  var hb = new base.HandlebarsEnvironment();\n\n  Utils.extend(hb, base);\n  hb.SafeString = _handlebarsSafeString2['default'];\n  hb.Exception = _handlebarsException2['default'];\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n\n  hb.VM = runtime;\n  hb.template = function (spec) {\n    return runtime.template(spec, hb);\n  };\n\n  return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar AST = {\n  // Public API used to evaluate derived attributes regarding AST nodes\n  helpers: {\n    // a mustache is definitely a helper if:\n    // * it is an eligible helper, and\n    // * it has at least one parameter or hash segment\n    helperExpression: function helperExpression(node) {\n      return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n    },\n\n    scopedId: function scopedId(path) {\n      return (/^\\.|this\\b/.test(path.original)\n      );\n    },\n\n    // an ID is simple if it only has one part, and that part is not\n    // `..` or `this`.\n    simpleId: function simpleId(path) {\n      return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n    }\n  }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexports['default'] = AST;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\n\"use strict\";\n\nexports.__esModule = true;\nvar handlebars = (function () {\n    var parser = { trace: function trace() {},\n        yy: {},\n        symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n        terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n        productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n        performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n            var $0 = $$.length - 1;\n            switch (yystate) {\n                case 1:\n                    return $$[$0 - 1];\n                    break;\n                case 2:\n                    this.$ = yy.prepareProgram($$[$0]);\n                    break;\n                case 3:\n                    this.$ = $$[$0];\n                    break;\n                case 4:\n                    this.$ = $$[$0];\n                    break;\n                case 5:\n                    this.$ = $$[$0];\n                    break;\n                case 6:\n                    this.$ = $$[$0];\n                    break;\n                case 7:\n                    this.$ = $$[$0];\n                    break;\n                case 8:\n                    this.$ = $$[$0];\n                    break;\n                case 9:\n                    this.$ = {\n                        type: 'CommentStatement',\n                        value: yy.stripComment($$[$0]),\n                        strip: yy.stripFlags($$[$0], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n\n                    break;\n                case 10:\n                    this.$ = {\n                        type: 'ContentStatement',\n                        original: $$[$0],\n                        value: $$[$0],\n                        loc: yy.locInfo(this._$)\n                    };\n\n                    break;\n                case 11:\n                    this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 12:\n                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n                    break;\n                case 13:\n                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n                    break;\n                case 14:\n                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n                    break;\n                case 15:\n                    this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n                    break;\n                case 16:\n                    this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n                    break;\n                case 17:\n                    this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n                    break;\n                case 18:\n                    this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n                    break;\n                case 19:\n                    var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n                        program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n                    program.chained = true;\n\n                    this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n                    break;\n                case 20:\n                    this.$ = $$[$0];\n                    break;\n                case 21:\n                    this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n                    break;\n                case 22:\n                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n                    break;\n                case 23:\n                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n                    break;\n                case 24:\n                    this.$ = {\n                        type: 'PartialStatement',\n                        name: $$[$0 - 3],\n                        params: $$[$0 - 2],\n                        hash: $$[$0 - 1],\n                        indent: '',\n                        strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n                        loc: yy.locInfo(this._$)\n                    };\n\n                    break;\n                case 25:\n                    this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n                    break;\n                case 26:\n                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n                    break;\n                case 27:\n                    this.$ = $$[$0];\n                    break;\n                case 28:\n                    this.$ = $$[$0];\n                    break;\n                case 29:\n                    this.$ = {\n                        type: 'SubExpression',\n                        path: $$[$0 - 3],\n                        params: $$[$0 - 2],\n                        hash: $$[$0 - 1],\n                        loc: yy.locInfo(this._$)\n                    };\n\n                    break;\n                case 30:\n                    this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 31:\n                    this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 32:\n                    this.$ = yy.id($$[$0 - 1]);\n                    break;\n                case 33:\n                    this.$ = $$[$0];\n                    break;\n                case 34:\n                    this.$ = $$[$0];\n                    break;\n                case 35:\n                    this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n                    break;\n                case 36:\n                    this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n                    break;\n                case 37:\n                    this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n                    break;\n                case 38:\n                    this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n                    break;\n                case 39:\n                    this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n                    break;\n                case 40:\n                    this.$ = $$[$0];\n                    break;\n                case 41:\n                    this.$ = $$[$0];\n                    break;\n                case 42:\n                    this.$ = yy.preparePath(true, $$[$0], this._$);\n                    break;\n                case 43:\n                    this.$ = yy.preparePath(false, $$[$0], this._$);\n                    break;\n                case 44:\n                    $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n                    break;\n                case 45:\n                    this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n                    break;\n                case 46:\n                    this.$ = [];\n                    break;\n                case 47:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 48:\n                    this.$ = [];\n                    break;\n                case 49:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 50:\n                    this.$ = [];\n                    break;\n                case 51:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 58:\n                    this.$ = [];\n                    break;\n                case 59:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 64:\n                    this.$ = [];\n                    break;\n                case 65:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 70:\n                    this.$ = [];\n                    break;\n                case 71:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 78:\n                    this.$ = [];\n                    break;\n                case 79:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 82:\n                    this.$ = [];\n                    break;\n                case 83:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 86:\n                    this.$ = [];\n                    break;\n                case 87:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 90:\n                    this.$ = [];\n                    break;\n                case 91:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 94:\n                    this.$ = [];\n                    break;\n                case 95:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 98:\n                    this.$ = [$$[$0]];\n                    break;\n                case 99:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n                case 100:\n                    this.$ = [$$[$0]];\n                    break;\n                case 101:\n                    $$[$0 - 1].push($$[$0]);\n                    break;\n            }\n        },\n        table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n        defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },\n        parseError: function parseError(str, hash) {\n            throw new Error(str);\n        },\n        parse: function parse(input) {\n            var self = this,\n                stack = [0],\n                vstack = [null],\n                lstack = [],\n                table = this.table,\n                yytext = \"\",\n                yylineno = 0,\n                yyleng = 0,\n                recovering = 0,\n                TERROR = 2,\n                EOF = 1;\n            this.lexer.setInput(input);\n            this.lexer.yy = this.yy;\n            this.yy.lexer = this.lexer;\n            this.yy.parser = this;\n            if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n            var yyloc = this.lexer.yylloc;\n            lstack.push(yyloc);\n            var ranges = this.lexer.options && this.lexer.options.ranges;\n            if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n            function popStack(n) {\n                stack.length = stack.length - 2 * n;\n                vstack.length = vstack.length - n;\n                lstack.length = lstack.length - n;\n            }\n            function lex() {\n                var token;\n                token = self.lexer.lex() || 1;\n                if (typeof token !== \"number\") {\n                    token = self.symbols_[token] || token;\n                }\n                return token;\n            }\n            var symbol,\n                preErrorSymbol,\n                state,\n                action,\n                a,\n                r,\n                yyval = {},\n                p,\n                len,\n                newState,\n                expected;\n            while (true) {\n                state = stack[stack.length - 1];\n                if (this.defaultActions[state]) {\n                    action = this.defaultActions[state];\n                } else {\n                    if (symbol === null || typeof symbol == \"undefined\") {\n                        symbol = lex();\n                    }\n                    action = table[state] && table[state][symbol];\n                }\n                if (typeof action === \"undefined\" || !action.length || !action[0]) {\n                    var errStr = \"\";\n                    if (!recovering) {\n                        expected = [];\n                        for (p in table[state]) if (this.terminals_[p] && p > 2) {\n                            expected.push(\"'\" + this.terminals_[p] + \"'\");\n                        }\n                        if (this.lexer.showPosition) {\n                            errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n                        } else {\n                            errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n                        }\n                        this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n                    }\n                }\n                if (action[0] instanceof Array && action.length > 1) {\n                    throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n                }\n                switch (action[0]) {\n                    case 1:\n                        stack.push(symbol);\n                        vstack.push(this.lexer.yytext);\n                        lstack.push(this.lexer.yylloc);\n                        stack.push(action[1]);\n                        symbol = null;\n                        if (!preErrorSymbol) {\n                            yyleng = this.lexer.yyleng;\n                            yytext = this.lexer.yytext;\n                            yylineno = this.lexer.yylineno;\n                            yyloc = this.lexer.yylloc;\n                            if (recovering > 0) recovering--;\n                        } else {\n                            symbol = preErrorSymbol;\n                            preErrorSymbol = null;\n                        }\n                        break;\n                    case 2:\n                        len = this.productions_[action[1]][1];\n                        yyval.$ = vstack[vstack.length - len];\n                        yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n                        if (ranges) {\n                            yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n                        }\n                        r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n                        if (typeof r !== \"undefined\") {\n                            return r;\n                        }\n                        if (len) {\n                            stack = stack.slice(0, -1 * len * 2);\n                            vstack = vstack.slice(0, -1 * len);\n                            lstack = lstack.slice(0, -1 * len);\n                        }\n                        stack.push(this.productions_[action[1]][0]);\n                        vstack.push(yyval.$);\n                        lstack.push(yyval._$);\n                        newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n                        stack.push(newState);\n                        break;\n                    case 3:\n                        return true;\n                }\n            }\n            return true;\n        }\n    };\n    /* Jison generated lexer */\n    var lexer = (function () {\n        var lexer = { EOF: 1,\n            parseError: function parseError(str, hash) {\n                if (this.yy.parser) {\n                    this.yy.parser.parseError(str, hash);\n                } else {\n                    throw new Error(str);\n                }\n            },\n            setInput: function setInput(input) {\n                this._input = input;\n                this._more = this._less = this.done = false;\n                this.yylineno = this.yyleng = 0;\n                this.yytext = this.matched = this.match = '';\n                this.conditionStack = ['INITIAL'];\n                this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n                if (this.options.ranges) this.yylloc.range = [0, 0];\n                this.offset = 0;\n                return this;\n            },\n            input: function input() {\n                var ch = this._input[0];\n                this.yytext += ch;\n                this.yyleng++;\n                this.offset++;\n                this.match += ch;\n                this.matched += ch;\n                var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n                if (lines) {\n                    this.yylineno++;\n                    this.yylloc.last_line++;\n                } else {\n                    this.yylloc.last_column++;\n                }\n                if (this.options.ranges) this.yylloc.range[1]++;\n\n                this._input = this._input.slice(1);\n                return ch;\n            },\n            unput: function unput(ch) {\n                var len = ch.length;\n                var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n                this._input = ch + this._input;\n                this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n                //this.yyleng -= len;\n                this.offset -= len;\n                var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n                this.match = this.match.substr(0, this.match.length - 1);\n                this.matched = this.matched.substr(0, this.matched.length - 1);\n\n                if (lines.length - 1) this.yylineno -= lines.length - 1;\n                var r = this.yylloc.range;\n\n                this.yylloc = { first_line: this.yylloc.first_line,\n                    last_line: this.yylineno + 1,\n                    first_column: this.yylloc.first_column,\n                    last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n                };\n\n                if (this.options.ranges) {\n                    this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n                }\n                return this;\n            },\n            more: function more() {\n                this._more = true;\n                return this;\n            },\n            less: function less(n) {\n                this.unput(this.match.slice(n));\n            },\n            pastInput: function pastInput() {\n                var past = this.matched.substr(0, this.matched.length - this.match.length);\n                return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n            },\n            upcomingInput: function upcomingInput() {\n                var next = this.match;\n                if (next.length < 20) {\n                    next += this._input.substr(0, 20 - next.length);\n                }\n                return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n            },\n            showPosition: function showPosition() {\n                var pre = this.pastInput();\n                var c = new Array(pre.length + 1).join(\"-\");\n                return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n            },\n            next: function next() {\n                if (this.done) {\n                    return this.EOF;\n                }\n                if (!this._input) this.done = true;\n\n                var token, match, tempMatch, index, col, lines;\n                if (!this._more) {\n                    this.yytext = '';\n                    this.match = '';\n                }\n                var rules = this._currentRules();\n                for (var i = 0; i < rules.length; i++) {\n                    tempMatch = this._input.match(this.rules[rules[i]]);\n                    if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                        match = tempMatch;\n                        index = i;\n                        if (!this.options.flex) break;\n                    }\n                }\n                if (match) {\n                    lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n                    if (lines) this.yylineno += lines.length;\n                    this.yylloc = { first_line: this.yylloc.last_line,\n                        last_line: this.yylineno + 1,\n                        first_column: this.yylloc.last_column,\n                        last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n                    this.yytext += match[0];\n                    this.match += match[0];\n                    this.matches = match;\n                    this.yyleng = this.yytext.length;\n                    if (this.options.ranges) {\n                        this.yylloc.range = [this.offset, this.offset += this.yyleng];\n                    }\n                    this._more = false;\n                    this._input = this._input.slice(match[0].length);\n                    this.matched += match[0];\n                    token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n                    if (this.done && this._input) this.done = false;\n                    if (token) return token;else return;\n                }\n                if (this._input === \"\") {\n                    return this.EOF;\n                } else {\n                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n                }\n            },\n            lex: function lex() {\n                var r = this.next();\n                if (typeof r !== 'undefined') {\n                    return r;\n                } else {\n                    return this.lex();\n                }\n            },\n            begin: function begin(condition) {\n                this.conditionStack.push(condition);\n            },\n            popState: function popState() {\n                return this.conditionStack.pop();\n            },\n            _currentRules: function _currentRules() {\n                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n            },\n            topState: function topState() {\n                return this.conditionStack[this.conditionStack.length - 2];\n            },\n            pushState: function begin(condition) {\n                this.begin(condition);\n            } };\n        lexer.options = {};\n        lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n            function strip(start, end) {\n                return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n            }\n\n            var YYSTATE = YY_START;\n            switch ($avoiding_name_collisions) {\n                case 0:\n                    if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n                        strip(0, 1);\n                        this.begin(\"mu\");\n                    } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n                        strip(0, 1);\n                        this.begin(\"emu\");\n                    } else {\n                        this.begin(\"mu\");\n                    }\n                    if (yy_.yytext) return 15;\n\n                    break;\n                case 1:\n                    return 15;\n                    break;\n                case 2:\n                    this.popState();\n                    return 15;\n\n                    break;\n                case 3:\n                    this.begin('raw');return 15;\n                    break;\n                case 4:\n                    this.popState();\n                    // Should be using `this.topState()` below, but it currently\n                    // returns the second top instead of the first top. Opened an\n                    // issue about it at https://github.com/zaach/jison/issues/291\n                    if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n                        return 15;\n                    } else {\n                        strip(5, 9);\n                        return 'END_RAW_BLOCK';\n                    }\n\n                    break;\n                case 5:\n                    return 15;\n                    break;\n                case 6:\n                    this.popState();\n                    return 14;\n\n                    break;\n                case 7:\n                    return 65;\n                    break;\n                case 8:\n                    return 68;\n                    break;\n                case 9:\n                    return 19;\n                    break;\n                case 10:\n                    this.popState();\n                    this.begin('raw');\n                    return 23;\n\n                    break;\n                case 11:\n                    return 55;\n                    break;\n                case 12:\n                    return 60;\n                    break;\n                case 13:\n                    return 29;\n                    break;\n                case 14:\n                    return 47;\n                    break;\n                case 15:\n                    this.popState();return 44;\n                    break;\n                case 16:\n                    this.popState();return 44;\n                    break;\n                case 17:\n                    return 34;\n                    break;\n                case 18:\n                    return 39;\n                    break;\n                case 19:\n                    return 51;\n                    break;\n                case 20:\n                    return 48;\n                    break;\n                case 21:\n                    this.unput(yy_.yytext);\n                    this.popState();\n                    this.begin('com');\n\n                    break;\n                case 22:\n                    this.popState();\n                    return 14;\n\n                    break;\n                case 23:\n                    return 48;\n                    break;\n                case 24:\n                    return 73;\n                    break;\n                case 25:\n                    return 72;\n                    break;\n                case 26:\n                    return 72;\n                    break;\n                case 27:\n                    return 87;\n                    break;\n                case 28:\n                    // ignore whitespace\n                    break;\n                case 29:\n                    this.popState();return 54;\n                    break;\n                case 30:\n                    this.popState();return 33;\n                    break;\n                case 31:\n                    yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n                    break;\n                case 32:\n                    yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n                    break;\n                case 33:\n                    return 85;\n                    break;\n                case 34:\n                    return 82;\n                    break;\n                case 35:\n                    return 82;\n                    break;\n                case 36:\n                    return 83;\n                    break;\n                case 37:\n                    return 84;\n                    break;\n                case 38:\n                    return 81;\n                    break;\n                case 39:\n                    return 75;\n                    break;\n                case 40:\n                    return 77;\n                    break;\n                case 41:\n                    return 72;\n                    break;\n                case 42:\n                    yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n                    break;\n                case 43:\n                    return 'INVALID';\n                    break;\n                case 44:\n                    return 5;\n                    break;\n            }\n        };\n        lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^\\/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n        lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n        return lexer;\n    })();\n    parser.lexer = lexer;\n    function Parser() {\n        this.yy = {};\n    }Parser.prototype = parser;parser.Parser = Parser;\n    return new Parser();\n})();exports[\"default\"] = handlebars;\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFB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QUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXlxcL10pKS8sL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sL14oPzpbXlxceDAwXSs/KD89KFxce1xce1xce1xceykpKS8sL14oPzpbXFxzXFxTXSo/LS0ofik/XFx9XFx9KS8sL14oPzpcXCgpLywvXig/OlxcKSkvLC9eKD86XFx7XFx7XFx7XFx7KS8sL14oPzpcXH1cXH1cXH1cXH0pLywvXig/Olxce1xceyh+KT8+KS8sL14oPzpcXHtcXHsofik/Iz4pLywvXig/Olxce1xceyh+KT8jXFwqPykvLC9eKD86XFx7XFx7KH4pP1xcLykvLC9eKD86XFx7XFx7KH4pP1xcXlxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcXikvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxiKS8sL14oPzpcXHtcXHsofik/XFx7KS8sL14oPzpcXHtcXHsofik/JikvLC9eKD86XFx7XFx7KH4pPyEtLSkvLC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFwqPykvLC9eKD86PSkvLC9eKD86XFwuXFwuKS8sL14oPzpcXC4oPz0oWz1+fVxcc1xcLy4pfF0pKSkvLC9eKD86W1xcLy5dKS8sL14oPzpcXHMrKS8sL14oPzpcXH0ofik/XFx9XFx9KS8sL14oPzoofik/XFx9XFx9KS8sL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywvXig/OicoXFxcXFsnXXxbXiddKSonKS8sL14oPzpAKS8sL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxccyldKSkpLywvXig/OnVuZGVmaW5lZCg/PShbfn1cXHMpXSkpKS8sL14oPzpudWxsKD89KFt+fVxccyldKSkpLywvXig/Oi0/WzAtOV0rKD86XFwuWzAtOV0rKT8oPz0oW359XFxzKV0pKSkvLC9eKD86YXNcXHMrXFx8KS8sL14oPzpcXHwpLywvXig/OihbXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89KFs9fn1cXHNcXC8uKXxdKSkpKS8sL14oPzpcXFsoXFxcXFxcXXxbXlxcXV0pKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXTtcbmxleGVyLmNvbmRpdGlvbnMgPSB7XCJtdVwiOntcInJ1bGVzXCI6WzcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImVtdVwiOntcInJ1bGVzXCI6WzJdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiY29tXCI6e1wicnVsZXNcIjpbNl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJyYXdcIjp7XCJydWxlc1wiOlszLDQsNV0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJJTklUSUFMXCI6e1wicnVsZXNcIjpbMCwxLDQ0XSxcImluY2x1c2l2ZVwiOnRydWV9fTtcbnJldHVybiBsZXhlcjt9KSgpXG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBoYW5kbGViYXJzO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction Visitor() {\n  this.parents = [];\n}\n\nVisitor.prototype = {\n  constructor: Visitor,\n  mutating: false,\n\n  // Visits a given value. If mutating, will replace the value if necessary.\n  acceptKey: function acceptKey(node, name) {\n    var value = this.accept(node[name]);\n    if (this.mutating) {\n      // Hacky sanity check: This may have a few false positives for type for the helper\n      // methods but will generally do the right thing without a lot of overhead.\n      if (value && !Visitor.prototype[value.type]) {\n        throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n      }\n      node[name] = value;\n    }\n  },\n\n  // Performs an accept operation with added sanity check to ensure\n  // required keys are not removed.\n  acceptRequired: function acceptRequired(node, name) {\n    this.acceptKey(node, name);\n\n    if (!node[name]) {\n      throw new _exception2['default'](node.type + ' requires ' + name);\n    }\n  },\n\n  // Traverses a given array. If mutating, empty respnses will be removed\n  // for child elements.\n  acceptArray: function acceptArray(array) {\n    for (var i = 0, l = array.length; i < l; i++) {\n      this.acceptKey(array, i);\n\n      if (!array[i]) {\n        array.splice(i, 1);\n        i--;\n        l--;\n      }\n    }\n  },\n\n  accept: function accept(object) {\n    if (!object) {\n      return;\n    }\n\n    /* istanbul ignore next: Sanity code */\n    if (!this[object.type]) {\n      throw new _exception2['default']('Unknown type: ' + object.type, object);\n    }\n\n    if (this.current) {\n      this.parents.unshift(this.current);\n    }\n    this.current = object;\n\n    var ret = this[object.type](object);\n\n    this.current = this.parents.shift();\n\n    if (!this.mutating || ret) {\n      return ret;\n    } else if (ret !== false) {\n      return object;\n    }\n  },\n\n  Program: function Program(program) {\n    this.acceptArray(program.body);\n  },\n\n  MustacheStatement: visitSubExpression,\n  Decorator: visitSubExpression,\n\n  BlockStatement: visitBlock,\n  DecoratorBlock: visitBlock,\n\n  PartialStatement: visitPartial,\n  PartialBlockStatement: function PartialBlockStatement(partial) {\n    visitPartial.call(this, partial);\n\n    this.acceptKey(partial, 'program');\n  },\n\n  ContentStatement: function ContentStatement() /* content */{},\n  CommentStatement: function CommentStatement() /* comment */{},\n\n  SubExpression: visitSubExpression,\n\n  PathExpression: function PathExpression() /* path */{},\n\n  StringLiteral: function StringLiteral() /* string */{},\n  NumberLiteral: function NumberLiteral() /* number */{},\n  BooleanLiteral: function BooleanLiteral() /* bool */{},\n  UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n  NullLiteral: function NullLiteral() /* literal */{},\n\n  Hash: function Hash(hash) {\n    this.acceptArray(hash.pairs);\n  },\n  HashPair: function HashPair(pair) {\n    this.acceptRequired(pair, 'value');\n  }\n};\n\nfunction visitSubExpression(mustache) {\n  this.acceptRequired(mustache, 'path');\n  this.acceptArray(mustache.params);\n  this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n  visitSubExpression.call(this, block);\n\n  this.acceptKey(block, 'program');\n  this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n  this.acceptRequired(partial, 'name');\n  this.acceptArray(partial.params);\n  this.acceptKey(partial, 'hash');\n}\n\nexports['default'] = Visitor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FB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QztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction WhitespaceControl() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n  this.options = options;\n}\nWhitespaceControl.prototype = new _visitor2['default']();\n\nWhitespaceControl.prototype.Program = function (program) {\n  var doStandalone = !this.options.ignoreStandalone;\n\n  var isRoot = !this.isRootSeen;\n  this.isRootSeen = true;\n\n  var body = program.body;\n  for (var i = 0, l = body.length; i < l; i++) {\n    var current = body[i],\n        strip = this.accept(current);\n\n    if (!strip) {\n      continue;\n    }\n\n    var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n        _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n        openStandalone = strip.openStandalone && _isPrevWhitespace,\n        closeStandalone = strip.closeStandalone && _isNextWhitespace,\n        inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n    if (strip.close) {\n      omitRight(body, i, true);\n    }\n    if (strip.open) {\n      omitLeft(body, i, true);\n    }\n\n    if (doStandalone && inlineStandalone) {\n      omitRight(body, i);\n\n      if (omitLeft(body, i)) {\n        // If we are on a standalone node, save the indent info for partials\n        if (current.type === 'PartialStatement') {\n          // Pull out the whitespace from the final line\n          current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n        }\n      }\n    }\n    if (doStandalone && openStandalone) {\n      omitRight((current.program || current.inverse).body);\n\n      // Strip out the previous content node if it's whitespace only\n      omitLeft(body, i);\n    }\n    if (doStandalone && closeStandalone) {\n      // Always strip the next node\n      omitRight(body, i);\n\n      omitLeft((current.inverse || current.program).body);\n    }\n  }\n\n  return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n  this.accept(block.program);\n  this.accept(block.inverse);\n\n  // Find the inverse program that is involed with whitespace stripping.\n  var program = block.program || block.inverse,\n      inverse = block.program && block.inverse,\n      firstInverse = inverse,\n      lastInverse = inverse;\n\n  if (inverse && inverse.chained) {\n    firstInverse = inverse.body[0].program;\n\n    // Walk the inverse chain to find the last inverse that is actually in the chain.\n    while (lastInverse.chained) {\n      lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n    }\n  }\n\n  var strip = {\n    open: block.openStrip.open,\n    close: block.closeStrip.close,\n\n    // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n    // so our parent can determine if we actually are standalone\n    openStandalone: isNextWhitespace(program.body),\n    closeStandalone: isPrevWhitespace((firstInverse || program).body)\n  };\n\n  if (block.openStrip.close) {\n    omitRight(program.body, null, true);\n  }\n\n  if (inverse) {\n    var inverseStrip = block.inverseStrip;\n\n    if (inverseStrip.open) {\n      omitLeft(program.body, null, true);\n    }\n\n    if (inverseStrip.close) {\n      omitRight(firstInverse.body, null, true);\n    }\n    if (block.closeStrip.open) {\n      omitLeft(lastInverse.body, null, true);\n    }\n\n    // Find standalone else statments\n    if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n      omitLeft(program.body);\n      omitRight(firstInverse.body);\n    }\n  } else if (block.closeStrip.open) {\n    omitLeft(program.body, null, true);\n  }\n\n  return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n  return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n  /* istanbul ignore next */\n  var strip = node.strip || {};\n  return {\n    inlineStandalone: true,\n    open: strip.open,\n    close: strip.close\n  };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = body.length;\n  }\n\n  // Nodes that end with newlines are considered whitespace (but are special\n  // cased for strip operations)\n  var prev = body[i - 1],\n      sibling = body[i - 2];\n  if (!prev) {\n    return isRoot;\n  }\n\n  if (prev.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n  }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = -1;\n  }\n\n  var next = body[i + 1],\n      sibling = body[i + 2];\n  if (!next) {\n    return isRoot;\n  }\n\n  if (next.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n  }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n  var current = body[i == null ? 0 : i + 1];\n  if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n    return;\n  }\n\n  var original = current.value;\n  current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n  current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n  var current = body[i == null ? body.length - 1 : i - 1];\n  if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n    return;\n  }\n\n  // We omit the last node if it's whitespace only and not preceded by a non-content node.\n  var original = current.value;\n  current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n  current.leftStripped = current.value !== original;\n  return current.leftStripped;\n}\n\nexports['default'] = WhitespaceControl;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFELGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLGlCQUFpQjtRQUM1RCxnQkFBZ0IsR0FDZCxLQUFLLENBQUMsZ0JBQWdCLElBQUksaUJBQWlCLElBQUksaUJBQWlCLENBQUM7O0FBRXJFLFFBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNmLGVBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFCO0FBQ0QsUUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2QsY0FBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekI7O0FBRUQsUUFBSSxZQUFZLElBQUksZ0JBQWdCLEVBQUU7QUFDcEMsZUFBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFbkIsVUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFOztBQUVyQixZQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUU7O0FBRXZDLGlCQUFPLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1RDtPQUNGO0tBQ0Y7QUFDRCxRQUFJLFlBQVksSUFBSSxjQUFjLEVBQUU7QUFDbEMsZUFBUyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFBLENBQUUsSUFBSSxDQUFDLENBQUM7OztBQUdyRCxjQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0FBQ0QsUUFBSSxZQUFZLElBQUksZUFBZSxFQUFFOztBQUVuQyxlQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUVuQixjQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUEsQ0FBRSxJQUFJLENBQUMsQ0FBQztLQUNyRDtHQUNGOztBQUVELFNBQU8sT0FBTyxDQUFDO0NBQ2hCLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxVQUM1SSxLQUFLLEVBQ0w7QUFDQSxNQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQixNQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0FBRzNCLE1BQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU87TUFDMUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU87TUFDeEMsWUFBWSxHQUFHLE9BQU87TUFDdEIsV0FBVyxHQUFHLE9BQU8sQ0FBQzs7QUFFeEIsTUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUM5QixnQkFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDOzs7QUFHdkMsV0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFO0FBQzFCLGlCQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDckU7R0FDRjs7QUFFRCxNQUFJLEtBQUssR0FBRztBQUNWLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDMUIsU0FBSyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSzs7OztBQUk3QixrQkFBYyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDOUMsbUJBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUEsQ0FBRSxJQUFJLENBQUM7R0FDbEUsQ0FBQzs7QUFFRixNQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ3pCLGFBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNyQzs7QUFFRCxNQUFJLE9BQU8sRUFBRTtBQUNYLFFBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7O0FBRXRDLFFBQUksWUFBWSxDQUFDLElBQUksRUFBRTtBQUNyQixjQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7O0FBRUQsUUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQ3RCLGVBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMxQztBQUNELFFBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDekIsY0FBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3hDOzs7QUFHRCxRQUNFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFDOUIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUM5QixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ25DO0FBQ0EsY0FBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixlQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCO0dBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwQzs7QUFFRCxTQUFPLEtBQUssQ0FBQztDQUNkLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFDdEYsUUFBUSxFQUNSO0FBQ0EsU0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0NBQ3ZCLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUM1RixJQUFJLEVBQ0o7O0FBRUEsTUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDN0IsU0FBTztBQUNMLG9CQUFnQixFQUFFLElBQUk7QUFDdEIsUUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0FBQ2hCLFNBQUssRUFBRSxLQUFLLENBQUMsS0FBSztHQUNuQixDQUFDO0NBQ0gsQ0FBQzs7QUFFRixTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLE1BQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNuQixLQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztHQUNqQjs7OztBQUlELE1BQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVELE1BQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtBQUNwQyxXQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQSxDQUFFLElBQUksQ0FDaEUsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0dBQ0g7Q0FDRjtBQUNELFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDekMsTUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25CLEtBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUNSOztBQUVELE1BQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQUksQ0FBQyxJQUFJLEVBQUU7QUFDVCxXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVELE1BQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtBQUNwQyxXQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQSxDQUFFLElBQUksQ0FDaEUsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0dBQ0g7Q0FDRjs7Ozs7Ozs7O0FBU0QsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUU7QUFDcEMsTUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxNQUNFLENBQUMsT0FBTyxJQUNSLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQ2xDLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEFBQUMsRUFDcEM7QUFDQSxXQUFPO0dBQ1I7O0FBRUQsTUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUM3QixTQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNuQyxRQUFRLEdBQUcsTUFBTSxHQUFHLGVBQWUsRUFDbkMsRUFBRSxDQUNILENBQUM7QUFDRixTQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO0NBQ3BEOzs7Ozs7Ozs7QUFTRCxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRTtBQUNuQyxNQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFDRSxDQUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.SourceLocation = SourceLocation;\nexports.id = id;\nexports.stripFlags = stripFlags;\nexports.stripComment = stripComment;\nexports.preparePath = preparePath;\nexports.prepareMustache = prepareMustache;\nexports.prepareRawBlock = prepareRawBlock;\nexports.prepareBlock = prepareBlock;\nexports.prepareProgram = prepareProgram;\nexports.preparePartialBlock = preparePartialBlock;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction validateClose(open, close) {\n  close = close.path ? close.path.original : close;\n\n  if (open.path.original !== close) {\n    var errorNode = { loc: open.path.loc };\n\n    throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n  }\n}\n\nfunction SourceLocation(source, locInfo) {\n  this.source = source;\n  this.start = {\n    line: locInfo.first_line,\n    column: locInfo.first_column\n  };\n  this.end = {\n    line: locInfo.last_line,\n    column: locInfo.last_column\n  };\n}\n\nfunction id(token) {\n  if (/^\\[.*\\]$/.test(token)) {\n    return token.substring(1, token.length - 1);\n  } else {\n    return token;\n  }\n}\n\nfunction stripFlags(open, close) {\n  return {\n    open: open.charAt(2) === '~',\n    close: close.charAt(close.length - 3) === '~'\n  };\n}\n\nfunction stripComment(comment) {\n  return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nfunction preparePath(data, parts, loc) {\n  loc = this.locInfo(loc);\n\n  var original = data ? '@' : '',\n      dig = [],\n      depth = 0;\n\n  for (var i = 0, l = parts.length; i < l; i++) {\n    var part = parts[i].part,\n\n    // If we have [] syntax then we do not treat path references as operators,\n    // i.e. foo.[this] resolves to approximately context.foo['this']\n    isLiteral = parts[i].original !== part;\n    original += (parts[i].separator || '') + part;\n\n    if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n      if (dig.length > 0) {\n        throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n      } else if (part === '..') {\n        depth++;\n      }\n    } else {\n      dig.push(part);\n    }\n  }\n\n  return {\n    type: 'PathExpression',\n    data: data,\n    depth: depth,\n    parts: dig,\n    original: original,\n    loc: loc\n  };\n}\n\nfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n  // Must use charAt to support IE pre-10\n  var escapeFlag = open.charAt(3) || open.charAt(2),\n      escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n  var decorator = /\\*/.test(open);\n  return {\n    type: decorator ? 'Decorator' : 'MustacheStatement',\n    path: path,\n    params: params,\n    hash: hash,\n    escaped: escaped,\n    strip: strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n  validateClose(openRawBlock, close);\n\n  locInfo = this.locInfo(locInfo);\n  var program = {\n    type: 'Program',\n    body: contents,\n    strip: {},\n    loc: locInfo\n  };\n\n  return {\n    type: 'BlockStatement',\n    path: openRawBlock.path,\n    params: openRawBlock.params,\n    hash: openRawBlock.hash,\n    program: program,\n    openStrip: {},\n    inverseStrip: {},\n    closeStrip: {},\n    loc: locInfo\n  };\n}\n\nfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n  if (close && close.path) {\n    validateClose(openBlock, close);\n  }\n\n  var decorator = /\\*/.test(openBlock.open);\n\n  program.blockParams = openBlock.blockParams;\n\n  var inverse = undefined,\n      inverseStrip = undefined;\n\n  if (inverseAndProgram) {\n    if (decorator) {\n      throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n    }\n\n    if (inverseAndProgram.chain) {\n      inverseAndProgram.program.body[0].closeStrip = close.strip;\n    }\n\n    inverseStrip = inverseAndProgram.strip;\n    inverse = inverseAndProgram.program;\n  }\n\n  if (inverted) {\n    inverted = inverse;\n    inverse = program;\n    program = inverted;\n  }\n\n  return {\n    type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n    path: openBlock.path,\n    params: openBlock.params,\n    hash: openBlock.hash,\n    program: program,\n    inverse: inverse,\n    openStrip: openBlock.strip,\n    inverseStrip: inverseStrip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nfunction prepareProgram(statements, loc) {\n  if (!loc && statements.length) {\n    var firstLoc = statements[0].loc,\n        lastLoc = statements[statements.length - 1].loc;\n\n    /* istanbul ignore else */\n    if (firstLoc && lastLoc) {\n      loc = {\n        source: firstLoc.source,\n        start: {\n          line: firstLoc.start.line,\n          column: firstLoc.start.column\n        },\n        end: {\n          line: lastLoc.end.line,\n          column: lastLoc.end.column\n        }\n      };\n    }\n  }\n\n  return {\n    type: 'Program',\n    body: statements,\n    strip: {},\n    loc: loc\n  };\n}\n\nfunction preparePartialBlock(open, program, close, locInfo) {\n  validateClose(open, close);\n\n  return {\n    type: 'PartialBlockStatement',\n    name: open.path,\n    params: open.params,\n    hash: open.hash,\n    program: program,\n    openStrip: open.strip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.parseWithoutProcessing = parseWithoutProcessing;\nexports.parse = parse;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _whitespaceControl = require('./whitespace-control');\n\nvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\nvar _helpers = require('./helpers');\n\nvar Helpers = _interopRequireWildcard(_helpers);\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nexports.parser = _parser2['default'];\n\nvar yy = {};\n_utils.extend(yy, Helpers);\n\nfunction parseWithoutProcessing(input, options) {\n  // Just return if an already-compiled AST was passed in.\n  if (input.type === 'Program') {\n    // When a pre-parsed AST is passed in, validate all node values to prevent\n    // code injection via type-confused literals.\n    validateInputAst(input);\n    return input;\n  }\n\n  _parser2['default'].yy = yy;\n\n  // Altering the shared object here, but this is ok as parser is a sync operation\n  yy.locInfo = function (locInfo) {\n    return new yy.SourceLocation(options && options.srcName, locInfo);\n  };\n\n  var ast = _parser2['default'].parse(input);\n\n  return ast;\n}\n\nfunction parse(input, options) {\n  var ast = parseWithoutProcessing(input, options);\n  var strip = new _whitespaceControl2['default'](options);\n\n  return strip.accept(ast);\n}\n\nfunction validateInputAst(ast) {\n  validateAstNode(ast);\n}\n\nfunction validateAstNode(node) {\n  if (node == null) {\n    return;\n  }\n\n  if (Array.isArray(node)) {\n    node.forEach(validateAstNode);\n    return;\n  }\n\n  if (typeof node !== 'object') {\n    return;\n  }\n\n  if (node.type === 'PathExpression') {\n    if (!isValidDepth(node.depth)) {\n      throw new _exception2['default']('Invalid AST: PathExpression.depth must be an integer');\n    }\n    if (!Array.isArray(node.parts)) {\n      throw new _exception2['default']('Invalid AST: PathExpression.parts must be an array');\n    }\n    for (var i = 0; i < node.parts.length; i++) {\n      if (typeof node.parts[i] !== 'string') {\n        throw new _exception2['default']('Invalid AST: PathExpression.parts must only contain strings');\n      }\n    }\n  } else if (node.type === 'NumberLiteral') {\n    if (typeof node.value !== 'number' || !isFinite(node.value)) {\n      throw new _exception2['default']('Invalid AST: NumberLiteral.value must be a number');\n    }\n  } else if (node.type === 'BooleanLiteral') {\n    if (typeof node.value !== 'boolean') {\n      throw new _exception2['default']('Invalid AST: BooleanLiteral.value must be a boolean');\n    }\n  }\n\n  Object.keys(node).forEach(function (propertyName) {\n    if (propertyName === 'loc') {\n      return;\n    }\n    validateAstNode(node[propertyName]);\n  });\n}\n\nfunction isValidDepth(depth) {\n  return typeof depth === 'number' && isFinite(depth) && Math.floor(depth) === depth && depth >= 0;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3lCQUNHLGNBQWM7Ozs7cUJBQ2IsVUFBVTs7UUFFeEIsTUFBTTs7QUFFZixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixjQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFYixTQUFTLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7O0FBRXJELE1BQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7OztBQUc1QixvQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixXQUFPLEtBQUssQ0FBQztHQUNkOztBQUVELHNCQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7OztBQUdmLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDN0IsV0FBTyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7R0FDbkUsQ0FBQzs7QUFFRixNQUFJLEdBQUcsR0FBRyxvQkFBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTlCLFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRU0sU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNwQyxNQUFJLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsTUFBSSxLQUFLLEdBQUcsbUNBQXNCLE9BQU8sQ0FBQyxDQUFDOztBQUUzQyxTQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDMUI7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7QUFDN0IsaUJBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0Qjs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDN0IsTUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ2hCLFdBQU87R0FDUjs7QUFFRCxNQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkIsUUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5QixXQUFPO0dBQ1I7O0FBRUQsTUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDNUIsV0FBTztHQUNSOztBQUVELE1BQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtBQUNsQyxRQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3QixZQUFNLDJCQUNKLHNEQUFzRCxDQUN2RCxDQUFDO0tBQ0g7QUFDRCxRQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBTSwyQkFBYyxvREFBb0QsQ0FBQyxDQUFDO0tBQzNFO0FBQ0QsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFVBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyQyxjQUFNLDJCQUNKLDZEQUE2RCxDQUM5RCxDQUFDO09BQ0g7S0FDRjtHQUNGLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNELFlBQU0sMkJBQWMsbURBQW1ELENBQUMsQ0FBQztLQUMxRTtHQUNGLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3pDLFFBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNuQyxZQUFNLDJCQUNKLHFEQUFxRCxDQUN0RCxDQUFDO0tBQ0g7R0FDRjs7QUFFRCxRQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFlBQVksRUFBSTtBQUN4QyxRQUFJLFlBQVksS0FBSyxLQUFLLEVBQUU7QUFDMUIsYUFBTztLQUNSO0FBQ0QsbUJBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztHQUNyQyxDQUFDLENBQUM7Q0FDSjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDM0IsU0FDRSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQ3pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFDM0IsS0FBSyxJQUFJLENBQUMsQ0FDVjtDQUNIIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCBXaGl0ZXNwYWNlQ29udHJvbCBmcm9tICcuL3doaXRlc3BhY2UtY29udHJvbCc7XG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB7IHBhcnNlciB9O1xuXG5sZXQgeXkgPSB7fTtcbmV4dGVuZCh5eSwgSGVscGVycyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nKGlucHV0LCBvcHRpb25zKSB7XG4gIC8vIEp1c3QgcmV0dXJuIGlmIGFuIGFscmVhZHktY29tcGlsZWQgQVNUIHdhcyBwYXNzZWQgaW4uXG4gIGlmIChpbnB1dC50eXBlID09PSAnUHJvZ3JhbScpIHtcbiAgICAvLyBXaGVuIGEgcHJlLXBhcnNlZCBBU1QgaXMgcGFzc2VkIGluLCB2YWxpZGF0ZSBhbGwgbm9kZSB2YWx1ZXMgdG8gcHJldmVudFxuICAgIC8vIGNvZGUgaW5qZWN0aW9uIHZpYSB0eXBlLWNvbmZ1c2VkIGxpdGVyYWxzLlxuICAgIHZhbGlkYXRlSW5wdXRBc3QoaW5wdXQpO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHBhcnNlci55eSA9IHl5O1xuXG4gIC8vIEFsdGVyaW5nIHRoZSBzaGFyZWQgb2JqZWN0IGhlcmUsIGJ1dCB0aGlzIGlzIG9rIGFzIHBhcnNlciBpcyBhIHN5bmMgb3BlcmF0aW9uXG4gIHl5LmxvY0luZm8gPSBmdW5jdGlvbihsb2NJbmZvKSB7XG4gICAgcmV0dXJuIG5ldyB5eS5Tb3VyY2VMb2NhdGlvbihvcHRpb25zICYmIG9wdGlvbnMuc3JjTmFtZSwgbG9jSW5mbyk7XG4gIH07XG5cbiAgbGV0IGFzdCA9IHBhcnNlci5wYXJzZShpbnB1dCk7XG5cbiAgcmV0dXJuIGFzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIGxldCBhc3QgPSBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nKGlucHV0LCBvcHRpb25zKTtcbiAgbGV0IHN0cmlwID0gbmV3IFdoaXRlc3BhY2VDb250cm9sKG9wdGlvbnMpO1xuXG4gIHJldHVybiBzdHJpcC5hY2NlcHQoYXN0KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dEFzdChhc3QpIHtcbiAgdmFsaWRhdGVBc3ROb2RlKGFzdCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXN0Tm9kZShub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIG5vZGUuZm9yRWFjaCh2YWxpZGF0ZUFzdE5vZGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS50eXBlID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgaWYgKCFpc1ZhbGlkRGVwdGgobm9kZS5kZXB0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdJbnZhbGlkIEFTVDogUGF0aEV4cHJlc3Npb24uZGVwdGggbXVzdCBiZSBhbiBpbnRlZ2VyJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUucGFydHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIEFTVDogUGF0aEV4cHJlc3Npb24ucGFydHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUucGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5wYXJ0c1tpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICAnSW52YWxpZCBBU1Q6IFBhdGhFeHByZXNzaW9uLnBhcnRzIG11c3Qgb25seSBjb250YWluIHN0cmluZ3MnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ051bWJlckxpdGVyYWwnKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUobm9kZS52YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgQVNUOiBOdW1iZXJMaXRlcmFsLnZhbHVlIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnQm9vbGVhbkxpdGVyYWwnKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdJbnZhbGlkIEFTVDogQm9vbGVhbkxpdGVyYWwudmFsdWUgbXVzdCBiZSBhIGJvb2xlYW4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKG5vZGUpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbG9jJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YWxpZGF0ZUFzdE5vZGUobm9kZVtwcm9wZXJ0eU5hbWVdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREZXB0aChkZXB0aCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBkZXB0aCA9PT0gJ251bWJlcicgJiZcbiAgICBpc0Zpbml0ZShkZXB0aCkgJiZcbiAgICBNYXRoLmZsb29yKGRlcHRoKSA9PT0gZGVwdGggJiZcbiAgICBkZXB0aCA+PSAwXG4gICk7XG59XG4iXX0=\n","/* eslint-disable new-cap */\n\n'use strict';\n\nexports.__esModule = true;\nexports.Compiler = Compiler;\nexports.precompile = precompile;\nexports.compile = compile;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _ast = require('./ast');\n\nvar _ast2 = _interopRequireDefault(_ast);\n\nvar slice = [].slice;\n\nfunction Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n  compiler: Compiler,\n\n  equals: function equals(other) {\n    var len = this.opcodes.length;\n    if (other.opcodes.length !== len) {\n      return false;\n    }\n\n    for (var i = 0; i < len; i++) {\n      var opcode = this.opcodes[i],\n          otherOpcode = other.opcodes[i];\n      if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n        return false;\n      }\n    }\n\n    // We know that length is the same between the two arrays because they are directly tied\n    // to the opcode behavior above.\n    len = this.children.length;\n    for (var i = 0; i < len; i++) {\n      if (!this.children[i].equals(other.children[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n  guid: 0,\n\n  compile: function compile(program, options) {\n    this.sourceNode = [];\n    this.opcodes = [];\n    this.children = [];\n    this.options = options;\n    this.stringParams = options.stringParams;\n    this.trackIds = options.trackIds;\n\n    options.blockParams = options.blockParams || [];\n\n    options.knownHelpers = _utils.extend(Object.create(null), {\n      helperMissing: true,\n      blockHelperMissing: true,\n      each: true,\n      'if': true,\n      unless: true,\n      'with': true,\n      log: true,\n      lookup: true\n    }, options.knownHelpers);\n\n    return this.accept(program);\n  },\n\n  compileProgram: function compileProgram(program) {\n    var childCompiler = new this.compiler(),\n        // eslint-disable-line new-cap\n    result = childCompiler.compile(program, this.options),\n        guid = this.guid++;\n\n    this.usePartial = this.usePartial || result.usePartial;\n\n    this.children[guid] = result;\n    this.useDepths = this.useDepths || result.useDepths;\n\n    return guid;\n  },\n\n  accept: function accept(node) {\n    /* istanbul ignore next: Sanity code */\n    if (!this[node.type]) {\n      throw new _exception2['default']('Unknown type: ' + node.type, node);\n    }\n\n    this.sourceNode.unshift(node);\n    var ret = this[node.type](node);\n    this.sourceNode.shift();\n    return ret;\n  },\n\n  Program: function Program(program) {\n    this.options.blockParams.unshift(program.blockParams);\n\n    var body = program.body,\n        bodyLength = body.length;\n    for (var i = 0; i < bodyLength; i++) {\n      this.accept(body[i]);\n    }\n\n    this.options.blockParams.shift();\n\n    this.isSimple = bodyLength === 1;\n    this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n    return this;\n  },\n\n  BlockStatement: function BlockStatement(block) {\n    transformLiteralToPath(block);\n\n    var program = block.program,\n        inverse = block.inverse;\n\n    program = program && this.compileProgram(program);\n    inverse = inverse && this.compileProgram(inverse);\n\n    var type = this.classifySexpr(block);\n\n    if (type === 'helper') {\n      this.helperSexpr(block, program, inverse);\n    } else if (type === 'simple') {\n      this.simpleSexpr(block);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('blockValue', block.path.original);\n    } else {\n      this.ambiguousSexpr(block, program, inverse);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('ambiguousBlockValue');\n    }\n\n    this.opcode('append');\n  },\n\n  DecoratorBlock: function DecoratorBlock(decorator) {\n    var program = decorator.program && this.compileProgram(decorator.program);\n    var params = this.setupFullMustacheParams(decorator, program, undefined),\n        path = decorator.path;\n\n    this.useDecorators = true;\n    this.opcode('registerDecorator', params.length, path.original);\n  },\n\n  PartialStatement: function PartialStatement(partial) {\n    this.usePartial = true;\n\n    var program = partial.program;\n    if (program) {\n      program = this.compileProgram(partial.program);\n    }\n\n    var params = partial.params;\n    if (params.length > 1) {\n      throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n    } else if (!params.length) {\n      if (this.options.explicitPartialContext) {\n        this.opcode('pushLiteral', 'undefined');\n      } else {\n        params.push({ type: 'PathExpression', parts: [], depth: 0 });\n      }\n    }\n\n    var partialName = partial.name.original,\n        isDynamic = partial.name.type === 'SubExpression';\n    if (isDynamic) {\n      this.accept(partial.name);\n    }\n\n    this.setupFullMustacheParams(partial, program, undefined, true);\n\n    var indent = partial.indent || '';\n    if (this.options.preventIndent && indent) {\n      this.opcode('appendContent', indent);\n      indent = '';\n    }\n\n    this.opcode('invokePartial', isDynamic, partialName, indent);\n    this.opcode('append');\n  },\n  PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n    this.PartialStatement(partialBlock);\n  },\n\n  MustacheStatement: function MustacheStatement(mustache) {\n    this.SubExpression(mustache);\n\n    if (mustache.escaped && !this.options.noEscape) {\n      this.opcode('appendEscaped');\n    } else {\n      this.opcode('append');\n    }\n  },\n  Decorator: function Decorator(decorator) {\n    this.DecoratorBlock(decorator);\n  },\n\n  ContentStatement: function ContentStatement(content) {\n    if (content.value) {\n      this.opcode('appendContent', content.value);\n    }\n  },\n\n  CommentStatement: function CommentStatement() {},\n\n  SubExpression: function SubExpression(sexpr) {\n    transformLiteralToPath(sexpr);\n    var type = this.classifySexpr(sexpr);\n\n    if (type === 'simple') {\n      this.simpleSexpr(sexpr);\n    } else if (type === 'helper') {\n      this.helperSexpr(sexpr);\n    } else {\n      this.ambiguousSexpr(sexpr);\n    }\n  },\n  ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n    var path = sexpr.path,\n        name = path.parts[0],\n        isBlock = program != null || inverse != null;\n\n    this.opcode('getContext', path.depth);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    path.strict = true;\n    this.accept(path);\n\n    this.opcode('invokeAmbiguous', name, isBlock);\n  },\n\n  simpleSexpr: function simpleSexpr(sexpr) {\n    var path = sexpr.path;\n    path.strict = true;\n    this.accept(path);\n    this.opcode('resolvePossibleLambda');\n  },\n\n  helperSexpr: function helperSexpr(sexpr, program, inverse) {\n    var params = this.setupFullMustacheParams(sexpr, program, inverse),\n        path = sexpr.path,\n        name = path.parts[0];\n\n    if (this.options.knownHelpers[name]) {\n      this.opcode('invokeKnownHelper', params.length, name);\n    } else if (this.options.knownHelpersOnly) {\n      throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n    } else {\n      path.strict = true;\n      path.falsy = true;\n\n      this.accept(path);\n      this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n    }\n  },\n\n  PathExpression: function PathExpression(path) {\n    this.addDepth(path.depth);\n    this.opcode('getContext', path.depth);\n\n    var name = path.parts[0],\n        scoped = _ast2['default'].helpers.scopedId(path),\n        blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n    if (blockParamId) {\n      this.opcode('lookupBlockParam', blockParamId, path.parts);\n    } else if (!name) {\n      // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n      this.opcode('pushContext');\n    } else if (path.data) {\n      this.options.data = true;\n      this.opcode('lookupData', path.depth, path.parts, path.strict);\n    } else {\n      this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n    }\n  },\n\n  StringLiteral: function StringLiteral(string) {\n    this.opcode('pushString', string.value);\n  },\n\n  NumberLiteral: function NumberLiteral(number) {\n    this.opcode('pushLiteral', number.value);\n  },\n\n  BooleanLiteral: function BooleanLiteral(bool) {\n    this.opcode('pushLiteral', bool.value);\n  },\n\n  UndefinedLiteral: function UndefinedLiteral() {\n    this.opcode('pushLiteral', 'undefined');\n  },\n\n  NullLiteral: function NullLiteral() {\n    this.opcode('pushLiteral', 'null');\n  },\n\n  Hash: function Hash(hash) {\n    var pairs = hash.pairs,\n        i = 0,\n        l = pairs.length;\n\n    this.opcode('pushHash');\n\n    for (; i < l; i++) {\n      this.pushParam(pairs[i].value);\n    }\n    while (i--) {\n      this.opcode('assignToHash', pairs[i].key);\n    }\n    this.opcode('popHash');\n  },\n\n  // HELPERS\n  opcode: function opcode(name) {\n    this.opcodes.push({\n      opcode: name,\n      args: slice.call(arguments, 1),\n      loc: this.sourceNode[0].loc\n    });\n  },\n\n  addDepth: function addDepth(depth) {\n    if (!depth) {\n      return;\n    }\n\n    this.useDepths = true;\n  },\n\n  classifySexpr: function classifySexpr(sexpr) {\n    var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n    var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n    // a mustache is an eligible helper if:\n    // * its id is simple (a single part, not `this` or `..`)\n    var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\n    // if a mustache is an eligible helper but not a definite\n    // helper, it is ambiguous, and will be resolved in a later\n    // pass or at runtime.\n    var isEligible = !isBlockParam && (isHelper || isSimple);\n\n    // if ambiguous, we can possibly resolve the ambiguity now\n    // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n    if (isEligible && !isHelper) {\n      var _name = sexpr.path.parts[0],\n          options = this.options;\n      if (options.knownHelpers[_name]) {\n        isHelper = true;\n      } else if (options.knownHelpersOnly) {\n        isEligible = false;\n      }\n    }\n\n    if (isHelper) {\n      return 'helper';\n    } else if (isEligible) {\n      return 'ambiguous';\n    } else {\n      return 'simple';\n    }\n  },\n\n  pushParams: function pushParams(params) {\n    for (var i = 0, l = params.length; i < l; i++) {\n      this.pushParam(params[i]);\n    }\n  },\n\n  pushParam: function pushParam(val) {\n    var value = val.value != null ? val.value : val.original || '';\n\n    if (this.stringParams) {\n      if (value.replace) {\n        value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n      }\n\n      if (val.depth) {\n        this.addDepth(val.depth);\n      }\n      this.opcode('getContext', val.depth || 0);\n      this.opcode('pushStringParam', value, val.type);\n\n      if (val.type === 'SubExpression') {\n        // SubExpressions get evaluated and passed in\n        // in string params mode.\n        this.accept(val);\n      }\n    } else {\n      if (this.trackIds) {\n        var blockParamIndex = undefined;\n        if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n          blockParamIndex = this.blockParamIndex(val.parts[0]);\n        }\n        if (blockParamIndex) {\n          var blockParamChild = val.parts.slice(1).join('.');\n          this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n        } else {\n          value = val.original || value;\n          if (value.replace) {\n            value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n          }\n\n          this.opcode('pushId', val.type, value);\n        }\n      }\n      this.accept(val);\n    }\n  },\n\n  setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n    var params = sexpr.params;\n    this.pushParams(params);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    if (sexpr.hash) {\n      this.accept(sexpr.hash);\n    } else {\n      this.opcode('emptyHash', omitEmpty);\n    }\n\n    return params;\n  },\n\n  blockParamIndex: function blockParamIndex(name) {\n    for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n      var blockParams = this.options.blockParams[depth],\n          param = blockParams && _utils.indexOf(blockParams, name);\n      if (blockParams && param >= 0) {\n        return [depth, param];\n      }\n    }\n  }\n};\n\nfunction precompile(input, options, env) {\n  if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n    throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n  }\n\n  options = options || {};\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  var ast = env.parse(input, options),\n      environment = new env.Compiler().compile(ast, options);\n  return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nfunction compile(input, options, env) {\n  if (options === undefined) options = {};\n\n  if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n    throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n  }\n\n  options = _utils.extend({}, options);\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  var compiled = undefined;\n\n  function compileInput() {\n    var ast = env.parse(input, options),\n        environment = new env.Compiler().compile(ast, options),\n        templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n    return env.template(templateSpec);\n  }\n\n  // Template is only compiled on first use and cached after that point.\n  function ret(context, execOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled.call(this, context, execOptions);\n  }\n  ret._setup = function (setupOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._setup(setupOptions);\n  };\n  ret._child = function (i, data, blockParams, depths) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._child(i, data, blockParams, depths);\n  };\n  return ret;\n}\n\nfunction argEquals(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n    for (var i = 0; i < a.length; i++) {\n      if (!argEquals(a[i], b[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nfunction transformLiteralToPath(sexpr) {\n  if (!sexpr.path.parts) {\n    var literal = sexpr.path;\n    // Casting to string here to make false and 0 literal values play nicely with the rest\n    // of the system.\n    sexpr.path = {\n      type: 'PathExpression',\n      data: false,\n      depth: 0,\n      parts: [literal.original + ''],\n      original: literal.original + '',\n      loc: literal.loc\n    };\n  }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","/* global define, require */\n'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nvar SourceNode = undefined;\n\ntry {\n  /* istanbul ignore next */\n  if (typeof define !== 'function' || !define.amd) {\n    // We don't support this in AMD environments. For these environments, we assume that\n    // they are running on the browser and thus have no need for the source-map library.\n    var SourceMap = require('source-map');\n    SourceNode = SourceMap.SourceNode;\n  }\n} catch (err) {}\n/* NOP */\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build  */\nif (!SourceNode) {\n  SourceNode = function (line, column, srcFile, chunks) {\n    this.src = '';\n    if (chunks) {\n      this.add(chunks);\n    }\n  };\n  /* istanbul ignore next */\n  SourceNode.prototype = {\n    add: function add(chunks) {\n      if (_utils.isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src += chunks;\n    },\n    prepend: function prepend(chunks) {\n      if (_utils.isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src = chunks + this.src;\n    },\n    toStringWithSourceMap: function toStringWithSourceMap() {\n      return { code: this.toString() };\n    },\n    toString: function toString() {\n      return this.src;\n    }\n  };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n  if (_utils.isArray(chunk)) {\n    var ret = [];\n\n    for (var i = 0, len = chunk.length; i < len; i++) {\n      ret.push(codeGen.wrap(chunk[i], loc));\n    }\n    return ret;\n  } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n    // Handle primitives that the SourceNode will throw up on\n    return chunk + '';\n  }\n  return chunk;\n}\n\nfunction CodeGen(srcFile) {\n  this.srcFile = srcFile;\n  this.source = [];\n}\n\nCodeGen.prototype = {\n  isEmpty: function isEmpty() {\n    return !this.source.length;\n  },\n  prepend: function prepend(source, loc) {\n    this.source.unshift(this.wrap(source, loc));\n  },\n  push: function push(source, loc) {\n    this.source.push(this.wrap(source, loc));\n  },\n\n  merge: function merge() {\n    var source = this.empty();\n    this.each(function (line) {\n      source.add(['  ', line, '\\n']);\n    });\n    return source;\n  },\n\n  each: function each(iter) {\n    for (var i = 0, len = this.source.length; i < len; i++) {\n      iter(this.source[i]);\n    }\n  },\n\n  empty: function empty() {\n    var loc = this.currentLocation || { start: {} };\n    return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n  },\n  wrap: function wrap(chunk) {\n    var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n    if (chunk instanceof SourceNode) {\n      return chunk;\n    }\n\n    chunk = castChunk(chunk, this, loc);\n\n    return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n  },\n\n  functionCall: function functionCall(fn, type, params) {\n    params = this.generateList(params);\n    return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n  },\n\n  quotedString: function quotedString(str) {\n    return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n    .replace(/\\u2029/g, '\\\\u2029') + '\"';\n  },\n\n  objectLiteral: function objectLiteral(obj) {\n    // istanbul ignore next\n\n    var _this = this;\n\n    var pairs = [];\n\n    Object.keys(obj).forEach(function (key) {\n      var value = castChunk(obj[key], _this);\n      if (value !== 'undefined') {\n        pairs.push([_this.quotedString(key), ':', value]);\n      }\n    });\n\n    var ret = this.generateList(pairs);\n    ret.prepend('{');\n    ret.add('}');\n    return ret;\n  },\n\n  generateList: function generateList(entries) {\n    var ret = this.empty();\n\n    for (var i = 0, len = entries.length; i < len; i++) {\n      if (i) {\n        ret.add(',');\n      }\n\n      ret.add(castChunk(entries[i], this));\n    }\n\n    return ret;\n  },\n\n  generateArray: function generateArray(entries) {\n    var ret = this.generateList(entries);\n    ret.prepend('[');\n    ret.add(']');\n\n    return ret;\n  }\n};\n\nexports['default'] = CodeGen;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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QUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXNzdW1lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _base = require('../base');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _codeGen = require('./code-gen');\n\nvar _codeGen2 = _interopRequireDefault(_codeGen);\n\nfunction Literal(value) {\n  this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n  // PUBLIC API: You can override these methods in a subclass to provide\n  // alternative compiled forms for name lookup and buffering semantics\n  nameLookup: function nameLookup(parent, name /*,  type */) {\n    return this.internalNameLookup(parent, name);\n  },\n  depthedLookup: function depthedLookup(name) {\n    return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n  },\n\n  compilerInfo: function compilerInfo() {\n    var revision = _base.COMPILER_REVISION,\n        versions = _base.REVISION_CHANGES[revision];\n    return [revision, versions];\n  },\n\n  appendToBuffer: function appendToBuffer(source, location, explicit) {\n    // Force a source as this simplifies the merge logic.\n    if (!_utils.isArray(source)) {\n      source = [source];\n    }\n    source = this.source.wrap(source, location);\n\n    if (this.environment.isSimple) {\n      return ['return ', source, ';'];\n    } else if (explicit) {\n      // This is a case where the buffer operation occurs as a child of another\n      // construct, generally braces. We have to explicitly output these buffer\n      // operations to ensure that the emitted code goes in the correct location.\n      return ['buffer += ', source, ';'];\n    } else {\n      source.appendToBuffer = true;\n      return source;\n    }\n  },\n\n  initializeBuffer: function initializeBuffer() {\n    return this.quotedString('');\n  },\n  // END PUBLIC API\n  internalNameLookup: function internalNameLookup(parent, name) {\n    this.lookupPropertyFunctionIsUsed = true;\n    return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n  },\n\n  lookupPropertyFunctionIsUsed: false,\n\n  compile: function compile(environment, options, context, asObject) {\n    this.environment = environment;\n    this.options = options;\n    this.stringParams = this.options.stringParams;\n    this.trackIds = this.options.trackIds;\n    this.precompile = !asObject;\n\n    this.name = this.environment.name;\n    this.isChild = !!context;\n    this.context = context || {\n      decorators: [],\n      programs: [],\n      environments: []\n    };\n\n    this.preamble();\n\n    this.stackSlot = 0;\n    this.stackVars = [];\n    this.aliases = {};\n    this.registers = { list: [] };\n    this.hashes = [];\n    this.compileStack = [];\n    this.inlineStack = [];\n    this.blockParams = [];\n\n    this.compileChildren(environment, options);\n\n    this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n    this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n    var opcodes = environment.opcodes,\n        opcode = undefined,\n        firstLoc = undefined,\n        i = undefined,\n        l = undefined;\n\n    for (i = 0, l = opcodes.length; i < l; i++) {\n      opcode = opcodes[i];\n\n      this.source.currentLocation = opcode.loc;\n      firstLoc = firstLoc || opcode.loc;\n      this[opcode.opcode].apply(this, opcode.args);\n    }\n\n    // Flush any trailing content that might be pending.\n    this.source.currentLocation = firstLoc;\n    this.pushSource('');\n\n    /* istanbul ignore next */\n    if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n      throw new _exception2['default']('Compile completed with content left on stack');\n    }\n\n    if (!this.decorators.isEmpty()) {\n      this.useDecorators = true;\n\n      this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n      this.decorators.push('return fn;');\n\n      if (asObject) {\n        this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n      } else {\n        this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n        this.decorators.push('}\\n');\n        this.decorators = this.decorators.merge();\n      }\n    } else {\n      this.decorators = undefined;\n    }\n\n    var fn = this.createFunctionContext(asObject);\n    if (!this.isChild) {\n      var ret = {\n        compiler: this.compilerInfo(),\n        main: fn\n      };\n\n      if (this.decorators) {\n        ret.main_d = this.decorators; // eslint-disable-line camelcase\n        ret.useDecorators = true;\n      }\n\n      var _context = this.context;\n      var programs = _context.programs;\n      var decorators = _context.decorators;\n\n      for (i = 0, l = programs.length; i < l; i++) {\n        ret[i] = programs[i];\n        if (decorators[i]) {\n          ret[i + '_d'] = decorators[i];\n          ret.useDecorators = true;\n        }\n      }\n\n      if (this.environment.usePartial) {\n        ret.usePartial = true;\n      }\n      if (this.options.data) {\n        ret.useData = true;\n      }\n      if (this.useDepths) {\n        ret.useDepths = true;\n      }\n      if (this.useBlockParams) {\n        ret.useBlockParams = true;\n      }\n      if (this.options.compat) {\n        ret.compat = true;\n      }\n\n      if (!asObject) {\n        ret.compiler = JSON.stringify(ret.compiler);\n\n        this.source.currentLocation = { start: { line: 1, column: 0 } };\n        ret = this.objectLiteral(ret);\n\n        if (options.srcName) {\n          ret = ret.toStringWithSourceMap({ file: options.destName });\n          ret.map = ret.map && ret.map.toString();\n        } else {\n          ret = ret.toString();\n        }\n      } else {\n        ret.compilerOptions = this.options;\n      }\n\n      return ret;\n    } else {\n      return fn;\n    }\n  },\n\n  preamble: function preamble() {\n    // track the last context pushed into place to allow skipping the\n    // getContext opcode when it would be a noop\n    this.lastContext = 0;\n    this.source = new _codeGen2['default'](this.options.srcName);\n    this.decorators = new _codeGen2['default'](this.options.srcName);\n  },\n\n  createFunctionContext: function createFunctionContext(asObject) {\n    // istanbul ignore next\n\n    var _this = this;\n\n    var varDeclarations = '';\n\n    var locals = this.stackVars.concat(this.registers.list);\n    if (locals.length > 0) {\n      varDeclarations += ', ' + locals.join(', ');\n    }\n\n    // Generate minimizer alias mappings\n    //\n    // When using true SourceNodes, this will update all references to the given alias\n    // as the source nodes are reused in situ. For the non-source node compilation mode,\n    // aliases will not be used, but this case is already being run on the client and\n    // we aren't concern about minimizing the template size.\n    var aliasCount = 0;\n    Object.keys(this.aliases).forEach(function (alias) {\n      var node = _this.aliases[alias];\n      if (node.children && node.referenceCount > 1) {\n        varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n        node.children[0] = 'alias' + aliasCount;\n      }\n    });\n\n    if (this.lookupPropertyFunctionIsUsed) {\n      varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n    }\n\n    var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n    if (this.useBlockParams || this.useDepths) {\n      params.push('blockParams');\n    }\n    if (this.useDepths) {\n      params.push('depths');\n    }\n\n    // Perform a second pass over the output to merge content when possible\n    var source = this.mergeSource(varDeclarations);\n\n    if (asObject) {\n      params.push(source);\n\n      return Function.apply(this, params);\n    } else {\n      return this.source.wrap(['function(', params.join(','), ') {\\n  ', source, '}']);\n    }\n  },\n  mergeSource: function mergeSource(varDeclarations) {\n    var isSimple = this.environment.isSimple,\n        appendOnly = !this.forceBuffer,\n        appendFirst = undefined,\n        sourceSeen = undefined,\n        bufferStart = undefined,\n        bufferEnd = undefined;\n    this.source.each(function (line) {\n      if (line.appendToBuffer) {\n        if (bufferStart) {\n          line.prepend('  + ');\n        } else {\n          bufferStart = line;\n        }\n        bufferEnd = line;\n      } else {\n        if (bufferStart) {\n          if (!sourceSeen) {\n            appendFirst = true;\n          } else {\n            bufferStart.prepend('buffer += ');\n          }\n          bufferEnd.add(';');\n          bufferStart = bufferEnd = undefined;\n        }\n\n        sourceSeen = true;\n        if (!isSimple) {\n          appendOnly = false;\n        }\n      }\n    });\n\n    if (appendOnly) {\n      if (bufferStart) {\n        bufferStart.prepend('return ');\n        bufferEnd.add(';');\n      } else if (!sourceSeen) {\n        this.source.push('return \"\";');\n      }\n    } else {\n      varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n      if (bufferStart) {\n        bufferStart.prepend('return buffer + ');\n        bufferEnd.add(';');\n      } else {\n        this.source.push('return buffer;');\n      }\n    }\n\n    if (varDeclarations) {\n      this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n    }\n\n    return this.source.merge();\n  },\n\n  lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\n    return '\\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\\n          return parent[propertyName];\\n        }\\n        return undefined\\n    }\\n    '.trim();\n  },\n\n  // [blockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // On stack, after: return value of blockHelperMissing\n  //\n  // The purpose of this opcode is to take a block of the form\n  // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n  // replace it on the stack with the result of properly\n  // invoking blockHelperMissing.\n  blockValue: function blockValue(name) {\n    var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n        params = [this.contextName(0)];\n    this.setupHelperArgs(name, 0, params);\n\n    var blockName = this.popStack();\n    params.splice(1, 0, blockName);\n\n    this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n  },\n\n  // [ambiguousBlockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // Compiler value, before: lastHelper=value of last found helper, if any\n  // On stack, after, if no lastHelper: same as [blockValue]\n  // On stack, after, if lastHelper: value\n  ambiguousBlockValue: function ambiguousBlockValue() {\n    // We're being a bit cheeky and reusing the options value from the prior exec\n    var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n        params = [this.contextName(0)];\n    this.setupHelperArgs('', 0, params, true);\n\n    this.flushInline();\n\n    var current = this.topStack();\n    params.splice(1, 0, current);\n\n    this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n  },\n\n  // [appendContent]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  //\n  // Appends the string value of `content` to the current buffer\n  appendContent: function appendContent(content) {\n    if (this.pendingContent) {\n      content = this.pendingContent + content;\n    } else {\n      this.pendingLocation = this.source.currentLocation;\n    }\n\n    this.pendingContent = content;\n  },\n\n  // [append]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Coerces `value` to a String and appends it to the current buffer.\n  //\n  // If `value` is truthy, or 0, it is coerced into a string and appended\n  // Otherwise, the empty string is appended\n  append: function append() {\n    if (this.isInline()) {\n      this.replaceStack(function (current) {\n        return [' != null ? ', current, ' : \"\"'];\n      });\n\n      this.pushSource(this.appendToBuffer(this.popStack()));\n    } else {\n      var local = this.popStack();\n      this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n      if (this.environment.isSimple) {\n        this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n      }\n    }\n  },\n\n  // [appendEscaped]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Escape `value` and append it to the buffer\n  appendEscaped: function appendEscaped() {\n    this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n  },\n\n  // [getContext]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  // Compiler value, after: lastContext=depth\n  //\n  // Set the value of the `lastContext` compiler value to the depth\n  getContext: function getContext(depth) {\n    this.lastContext = depth;\n  },\n\n  // [pushContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext, ...\n  //\n  // Pushes the value of the current context onto the stack.\n  pushContext: function pushContext() {\n    this.pushStackLiteral(this.contextName(this.lastContext));\n  },\n\n  // [lookupOnContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext[name], ...\n  //\n  // Looks up the value of `name` on the current context and pushes\n  // it onto the stack.\n  lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n    var i = 0;\n\n    if (!scoped && this.options.compat && !this.lastContext) {\n      // The depthed query is expected to handle the undefined logic for the root level that\n      // is implemented below, so we evaluate that directly in compat mode\n      this.push(this.depthedLookup(parts[i++]));\n    } else {\n      this.pushContext();\n    }\n\n    this.resolvePath('context', parts, i, falsy, strict);\n  },\n\n  // [lookupBlockParam]\n  //\n  // On stack, before: ...\n  // On stack, after: blockParam[name], ...\n  //\n  // Looks up the value of `parts` on the given block param and pushes\n  // it onto the stack.\n  lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n    this.useBlockParams = true;\n\n    this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n    this.resolvePath('context', parts, 1);\n  },\n\n  // [lookupData]\n  //\n  // On stack, before: ...\n  // On stack, after: data, ...\n  //\n  // Push the data lookup operator\n  lookupData: function lookupData(depth, parts, strict) {\n    if (!depth) {\n      this.pushStackLiteral('data');\n    } else {\n      this.pushStackLiteral('container.data(data, ' + depth + ')');\n    }\n\n    this.resolvePath('data', parts, 0, true, strict);\n  },\n\n  resolvePath: function resolvePath(type, parts, startPartIndex, falsy, strict) {\n    // istanbul ignore next\n\n    var _this2 = this;\n\n    if (this.options.strict || this.options.assumeObjects) {\n      this.push(strictLookup(this.options.strict && strict, this, parts, startPartIndex, type));\n      return;\n    }\n\n    var len = parts.length;\n\n    var _loop = function (i) {\n      /* eslint-disable no-loop-func */\n      _this2.replaceStack(function (current) {\n        var lookup = _this2.nameLookup(current, parts[i], type);\n        // We want to ensure that zero and false are handled properly if the context (falsy flag)\n        // needs to have the special handling for these values.\n        if (!falsy) {\n          return [' != null ? ', lookup, ' : ', current];\n        } else {\n          // Otherwise we can use generic falsy handling\n          return [' && ', lookup];\n        }\n      });\n      /* eslint-enable no-loop-func */\n    };\n\n    for (var i = startPartIndex; i < len; i++) {\n      _loop(i);\n    }\n  },\n\n  // [resolvePossibleLambda]\n  //\n  // On stack, before: value, ...\n  // On stack, after: resolved value, ...\n  //\n  // If the `value` is a lambda, replace it on the stack by\n  // the return value of the lambda\n  resolvePossibleLambda: function resolvePossibleLambda() {\n    this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n  },\n\n  // [pushStringParam]\n  //\n  // On stack, before: ...\n  // On stack, after: string, currentContext, ...\n  //\n  // This opcode is designed for use in string mode, which\n  // provides the string value of a parameter along with its\n  // depth rather than resolving it immediately.\n  pushStringParam: function pushStringParam(string, type) {\n    this.pushContext();\n    this.pushString(type);\n\n    // If it's a subexpression, the string result\n    // will be pushed after this opcode.\n    if (type !== 'SubExpression') {\n      if (typeof string === 'string') {\n        this.pushString(string);\n      } else {\n        this.pushStackLiteral(string);\n      }\n    }\n  },\n\n  emptyHash: function emptyHash(omitEmpty) {\n    if (this.trackIds) {\n      this.push('{}'); // hashIds\n    }\n    if (this.stringParams) {\n      this.push('{}'); // hashContexts\n      this.push('{}'); // hashTypes\n    }\n    this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n  },\n  pushHash: function pushHash() {\n    if (this.hash) {\n      this.hashes.push(this.hash);\n    }\n    this.hash = { values: {}, types: [], contexts: [], ids: [] };\n  },\n  popHash: function popHash() {\n    var hash = this.hash;\n    this.hash = this.hashes.pop();\n\n    if (this.trackIds) {\n      this.push(this.objectLiteral(hash.ids));\n    }\n    if (this.stringParams) {\n      this.push(this.objectLiteral(hash.contexts));\n      this.push(this.objectLiteral(hash.types));\n    }\n\n    this.push(this.objectLiteral(hash.values));\n  },\n\n  // [pushString]\n  //\n  // On stack, before: ...\n  // On stack, after: quotedString(string), ...\n  //\n  // Push a quoted version of `string` onto the stack\n  pushString: function pushString(string) {\n    this.pushStackLiteral(this.quotedString(string));\n  },\n\n  // [pushLiteral]\n  //\n  // On stack, before: ...\n  // On stack, after: value, ...\n  //\n  // Pushes a value onto the stack. This operation prevents\n  // the compiler from creating a temporary variable to hold\n  // it.\n  pushLiteral: function pushLiteral(value) {\n    this.pushStackLiteral(value);\n  },\n\n  // [pushProgram]\n  //\n  // On stack, before: ...\n  // On stack, after: program(guid), ...\n  //\n  // Push a program expression onto the stack. This takes\n  // a compile-time guid and converts it into a runtime-accessible\n  // expression.\n  pushProgram: function pushProgram(guid) {\n    if (guid != null) {\n      this.pushStackLiteral(this.programExpression(guid));\n    } else {\n      this.pushStackLiteral(null);\n    }\n  },\n\n  // [registerDecorator]\n  //\n  // On stack, before: hash, program, params..., ...\n  // On stack, after: ...\n  //\n  // Pops off the decorator's parameters, invokes the decorator,\n  // and inserts the decorator into the decorators list.\n  registerDecorator: function registerDecorator(paramSize, name) {\n    var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n        options = this.setupHelperArgs(name, paramSize);\n\n    // Store the resolved decorator in a variable and verify it is a function before\n    // calling it. Without this, unregistered decorators can cause an unhandled TypeError\n    // (calling undefined), which crashes the process — enabling Denial of Service.\n    this.decorators.push(['var decorator = ', foundDecorator, ';']);\n    this.decorators.push(['if (typeof decorator !== \"function\") { throw new Error(', this.quotedString('Missing decorator: \"' + name + '\"'), '); }']);\n    this.decorators.push(['fn = ', this.decorators.functionCall('decorator', '', ['fn', 'props', 'container', options]), ' || fn;']);\n  },\n\n  // [invokeHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // Pops off the helper's parameters, invokes the helper,\n  // and pushes the helper's return value onto the stack.\n  //\n  // If the helper is not found, `helperMissing` is called.\n  invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n    var nonHelper = this.popStack(),\n        helper = this.setupHelper(paramSize, name);\n\n    var possibleFunctionCalls = [];\n\n    if (isSimple) {\n      // direct call to helper\n      possibleFunctionCalls.push(helper.name);\n    }\n    // call a function from the input object\n    possibleFunctionCalls.push(nonHelper);\n    if (!this.options.strict) {\n      possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));\n    }\n\n    var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n    var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n    this.push(functionCall);\n  },\n\n  itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n    var result = [];\n    result.push(items[0]);\n    for (var i = 1; i < items.length; i++) {\n      result.push(separator, items[i]);\n    }\n    return result;\n  },\n  // [invokeKnownHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // This operation is used when the helper is known to exist,\n  // so a `helperMissing` fallback is not required.\n  invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n    var helper = this.setupHelper(paramSize, name);\n    this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n  },\n\n  // [invokeAmbiguous]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of disambiguation\n  //\n  // This operation is used when an expression like `{{foo}}`\n  // is provided, but we don't know at compile-time whether it\n  // is a helper or a path.\n  //\n  // This operation emits more code than the other options,\n  // and can be avoided by passing the `knownHelpers` and\n  // `knownHelpersOnly` flags at compile-time.\n  invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n    this.useRegister('helper');\n\n    var nonHelper = this.popStack();\n\n    this.emptyHash();\n    var helper = this.setupHelper(0, name, helperCall);\n\n    var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n    var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n    if (!this.options.strict) {\n      lookup[0] = '(helper = ';\n      lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n    }\n\n    this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n  },\n\n  // [invokePartial]\n  //\n  // On stack, before: context, ...\n  // On stack after: result of partial invocation\n  //\n  // This operation pops off a context, invokes a partial with that context,\n  // and pushes the result of the invocation back.\n  invokePartial: function invokePartial(isDynamic, name, indent) {\n    var params = [],\n        options = this.setupParams(name, 1, params);\n\n    if (isDynamic) {\n      name = this.popStack();\n      delete options.name;\n    }\n\n    if (indent) {\n      options.indent = JSON.stringify(indent);\n    }\n    options.helpers = 'helpers';\n    options.partials = 'partials';\n    options.decorators = 'container.decorators';\n\n    if (!isDynamic) {\n      params.unshift(this.nameLookup('partials', name, 'partial'));\n    } else {\n      params.unshift(name);\n    }\n\n    if (this.options.compat) {\n      options.depths = 'depths';\n    }\n    options = this.objectLiteral(options);\n    params.push(options);\n\n    this.push(this.source.functionCall('container.invokePartial', '', params));\n  },\n\n  // [assignToHash]\n  //\n  // On stack, before: value, ..., hash, ...\n  // On stack, after: ..., hash, ...\n  //\n  // Pops a value off the stack and assigns it to the current hash\n  assignToHash: function assignToHash(key) {\n    var value = this.popStack(),\n        context = undefined,\n        type = undefined,\n        id = undefined;\n\n    if (this.trackIds) {\n      id = this.popStack();\n    }\n    if (this.stringParams) {\n      type = this.popStack();\n      context = this.popStack();\n    }\n\n    var hash = this.hash;\n    if (context) {\n      hash.contexts[key] = context;\n    }\n    if (type) {\n      hash.types[key] = type;\n    }\n    if (id) {\n      hash.ids[key] = id;\n    }\n    hash.values[key] = value;\n  },\n\n  pushId: function pushId(type, name, child) {\n    if (type === 'BlockParam') {\n      this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n    } else if (type === 'PathExpression') {\n      this.pushString(name);\n    } else if (type === 'SubExpression') {\n      this.pushStackLiteral('true');\n    } else {\n      this.pushStackLiteral('null');\n    }\n  },\n\n  // HELPERS\n\n  compiler: JavaScriptCompiler,\n\n  compileChildren: function compileChildren(environment, options) {\n    var children = environment.children,\n        child = undefined,\n        compiler = undefined;\n\n    for (var i = 0, l = children.length; i < l; i++) {\n      child = children[i];\n      compiler = new this.compiler(); // eslint-disable-line new-cap\n\n      var existing = this.matchExistingProgram(child);\n\n      if (existing == null) {\n        // Placeholder to prevent name conflicts for nested children\n        var index = this.context.programs.push('') - 1;\n        child.index = index;\n        child.name = 'program' + index;\n        this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n        this.context.decorators[index] = compiler.decorators;\n        this.context.environments[index] = child;\n\n        this.useDepths = this.useDepths || compiler.useDepths;\n        this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n        child.useDepths = this.useDepths;\n        child.useBlockParams = this.useBlockParams;\n      } else {\n        child.index = existing.index;\n        child.name = 'program' + existing.index;\n\n        this.useDepths = this.useDepths || existing.useDepths;\n        this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n      }\n    }\n  },\n  matchExistingProgram: function matchExistingProgram(child) {\n    for (var i = 0, len = this.context.environments.length; i < len; i++) {\n      var environment = this.context.environments[i];\n      if (environment && environment.equals(child)) {\n        return environment;\n      }\n    }\n  },\n\n  programExpression: function programExpression(guid) {\n    var child = this.environment.children[guid],\n        programParams = [child.index, 'data', child.blockParams];\n\n    if (this.useBlockParams || this.useDepths) {\n      programParams.push('blockParams');\n    }\n    if (this.useDepths) {\n      programParams.push('depths');\n    }\n\n    return 'container.program(' + programParams.join(', ') + ')';\n  },\n\n  useRegister: function useRegister(name) {\n    if (!this.registers[name]) {\n      this.registers[name] = true;\n      this.registers.list.push(name);\n    }\n  },\n\n  push: function push(expr) {\n    if (!(expr instanceof Literal)) {\n      expr = this.source.wrap(expr);\n    }\n\n    this.inlineStack.push(expr);\n    return expr;\n  },\n\n  pushStackLiteral: function pushStackLiteral(item) {\n    this.push(new Literal(item));\n  },\n\n  pushSource: function pushSource(source) {\n    if (this.pendingContent) {\n      this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n      this.pendingContent = undefined;\n    }\n\n    if (source) {\n      this.source.push(source);\n    }\n  },\n\n  replaceStack: function replaceStack(callback) {\n    var prefix = ['('],\n        stack = undefined,\n        createdStack = undefined,\n        usedLiteral = undefined;\n\n    /* istanbul ignore next */\n    if (!this.isInline()) {\n      throw new _exception2['default']('replaceStack on non-inline');\n    }\n\n    // We want to merge the inline statement into the replacement statement via ','\n    var top = this.popStack(true);\n\n    if (top instanceof Literal) {\n      // Literals do not need to be inlined\n      stack = [top.value];\n      prefix = ['(', stack];\n      usedLiteral = true;\n    } else {\n      // Get or create the current stack name for use by the inline\n      createdStack = true;\n      var _name = this.incrStack();\n\n      prefix = ['((', this.push(_name), ' = ', top, ')'];\n      stack = this.topStack();\n    }\n\n    var item = callback.call(this, stack);\n\n    if (!usedLiteral) {\n      this.popStack();\n    }\n    if (createdStack) {\n      this.stackSlot--;\n    }\n    this.push(prefix.concat(item, ')'));\n  },\n\n  incrStack: function incrStack() {\n    this.stackSlot++;\n    if (this.stackSlot > this.stackVars.length) {\n      this.stackVars.push('stack' + this.stackSlot);\n    }\n    return this.topStackName();\n  },\n  topStackName: function topStackName() {\n    return 'stack' + this.stackSlot;\n  },\n  flushInline: function flushInline() {\n    var inlineStack = this.inlineStack;\n    this.inlineStack = [];\n    for (var i = 0, len = inlineStack.length; i < len; i++) {\n      var entry = inlineStack[i];\n      /* istanbul ignore if */\n      if (entry instanceof Literal) {\n        this.compileStack.push(entry);\n      } else {\n        var stack = this.incrStack();\n        this.pushSource([stack, ' = ', entry, ';']);\n        this.compileStack.push(stack);\n      }\n    }\n  },\n  isInline: function isInline() {\n    return this.inlineStack.length;\n  },\n\n  popStack: function popStack(wrapped) {\n    var inline = this.isInline(),\n        item = (inline ? this.inlineStack : this.compileStack).pop();\n\n    if (!wrapped && item instanceof Literal) {\n      return item.value;\n    } else {\n      if (!inline) {\n        /* istanbul ignore next */\n        if (!this.stackSlot) {\n          throw new _exception2['default']('Invalid stack pop');\n        }\n        this.stackSlot--;\n      }\n      return item;\n    }\n  },\n\n  topStack: function topStack() {\n    var stack = this.isInline() ? this.inlineStack : this.compileStack,\n        item = stack[stack.length - 1];\n\n    /* istanbul ignore if */\n    if (item instanceof Literal) {\n      return item.value;\n    } else {\n      return item;\n    }\n  },\n\n  contextName: function contextName(context) {\n    if (this.useDepths && context) {\n      return 'depths[' + context + ']';\n    } else {\n      return 'depth' + context;\n    }\n  },\n\n  quotedString: function quotedString(str) {\n    return this.source.quotedString(str);\n  },\n\n  objectLiteral: function objectLiteral(obj) {\n    return this.source.objectLiteral(obj);\n  },\n\n  aliasable: function aliasable(name) {\n    var ret = this.aliases[name];\n    if (ret) {\n      ret.referenceCount++;\n      return ret;\n    }\n\n    ret = this.aliases[name] = this.source.wrap(name);\n    ret.aliasable = true;\n    ret.referenceCount = 1;\n\n    return ret;\n  },\n\n  setupHelper: function setupHelper(paramSize, name, blockHelper) {\n    var params = [],\n        paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n    var foundHelper = this.nameLookup('helpers', name, 'helper'),\n        callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n    return {\n      params: params,\n      paramsInit: paramsInit,\n      name: foundHelper,\n      callParams: [callContext].concat(params)\n    };\n  },\n\n  setupParams: function setupParams(helper, paramSize, params) {\n    var options = {},\n        contexts = [],\n        types = [],\n        ids = [],\n        objectArgs = !params,\n        param = undefined;\n\n    if (objectArgs) {\n      params = [];\n    }\n\n    options.name = this.quotedString(helper);\n    options.hash = this.popStack();\n\n    if (this.trackIds) {\n      options.hashIds = this.popStack();\n    }\n    if (this.stringParams) {\n      options.hashTypes = this.popStack();\n      options.hashContexts = this.popStack();\n    }\n\n    var inverse = this.popStack(),\n        program = this.popStack();\n\n    // Avoid setting fn and inverse if neither are set. This allows\n    // helpers to do a check for `if (options.fn)`\n    if (program || inverse) {\n      options.fn = program || 'container.noop';\n      options.inverse = inverse || 'container.noop';\n    }\n\n    // The parameters go on to the stack in order (making sure that they are evaluated in order)\n    // so we need to pop them off the stack in reverse order\n    var i = paramSize;\n    while (i--) {\n      param = this.popStack();\n      params[i] = param;\n\n      if (this.trackIds) {\n        ids[i] = this.popStack();\n      }\n      if (this.stringParams) {\n        types[i] = this.popStack();\n        contexts[i] = this.popStack();\n      }\n    }\n\n    if (objectArgs) {\n      options.args = this.source.generateArray(params);\n    }\n\n    if (this.trackIds) {\n      options.ids = this.source.generateArray(ids);\n    }\n    if (this.stringParams) {\n      options.types = this.source.generateArray(types);\n      options.contexts = this.source.generateArray(contexts);\n    }\n\n    if (this.options.data) {\n      options.data = 'data';\n    }\n    if (this.useBlockParams) {\n      options.blockParams = 'blockParams';\n    }\n    return options;\n  },\n\n  setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n    var options = this.setupParams(helper, paramSize, params);\n    options.loc = JSON.stringify(this.source.currentLocation);\n    options = this.objectLiteral(options);\n    if (useRegister) {\n      this.useRegister('options');\n      params.push('options');\n      return ['options=', options];\n    } else if (params) {\n      params.push(options);\n      return '';\n    } else {\n      return options;\n    }\n  }\n};\n\n(function () {\n  var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n  var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n  for (var i = 0, l = reservedWords.length; i < l; i++) {\n    compilerWords[reservedWords[i]] = true;\n  }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, startPartIndex, type) {\n  var stack = compiler.popStack(),\n      len = parts.length;\n  if (requireTerminal) {\n    len--;\n  }\n\n  for (var i = startPartIndex; i < len; i++) {\n    stack = compiler.nameLookup(stack, parts[i], type);\n  }\n\n  if (requireTerminal) {\n    return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[len]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n  } else {\n    return stack;\n  }\n}\n\nexports['default'] = JavaScriptCompiler;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsYUFBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDakMsTUFBTSxJQUFJLFFBQVEsRUFBRTs7OztBQUluQixhQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNwQyxNQUFNO0FBQ0wsWUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDN0IsYUFBTyxNQUFNLENBQUM7S0FDZjtHQUNGOztBQUVELGtCQUFnQixFQUFFLDRCQUFXO0FBQzNCLFdBQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUM5Qjs7QUFFRCxvQkFBa0IsRUFBRSw0QkFBUyxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFFBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDekMsV0FBTyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztHQUNwRTs7QUFFRCw4QkFBNEIsRUFBRSxLQUFLOztBQUVuQyxTQUFPLEVBQUUsaUJBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQ3pELFFBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQy9CLFFBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFFBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDOUMsUUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxDQUFDOztBQUU1QixRQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN6QixRQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSTtBQUN4QixnQkFBVSxFQUFFLEVBQUU7QUFDZCxjQUFRLEVBQUUsRUFBRTtBQUNaLGtCQUFZLEVBQUUsRUFBRTtLQUNqQixDQUFDOztBQUVGLFFBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7QUFFaEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDcEIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUM5QixRQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQixRQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7QUFFdEIsUUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFFBQUksQ0FBQyxTQUFTLEdBQ1osSUFBSSxDQUFDLFNBQVMsSUFDZCxXQUFXLENBQUMsU0FBUyxJQUNyQixXQUFXLENBQUMsYUFBYSxJQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN0QixRQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQzs7QUFFeEUsUUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU87UUFDL0IsTUFBTSxZQUFBO1FBQ04sUUFBUSxZQUFBO1FBQ1IsQ0FBQyxZQUFBO1FBQ0QsQ0FBQyxZQUFBLENBQUM7O0FBRUosU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsWUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFcEIsVUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN6QyxjQUFRLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDbEMsVUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5Qzs7O0FBR0QsUUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLFFBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7OztBQUdwQixRQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDekUsWUFBTSwyQkFBYyw4Q0FBOEMsQ0FBQyxDQUFDO0tBQ3JFOztBQUVELFFBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzlCLFVBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDOztBQUUxQixVQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUN0Qix5Q0FBeUMsRUFDekMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEVBQzNDLEtBQUssQ0FDTixDQUFDLENBQUM7QUFDSCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzs7QUFFbkMsVUFBSSxRQUFRLEVBQUU7QUFDWixZQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQ3JDLElBQUksRUFDSixPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sYUFBYSxFQUNiLFFBQVEsRUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUN4QixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQ3JCLHVFQUF1RSxDQUN4RSxDQUFDO0FBQ0YsWUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsWUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO09BQzNDO0tBQ0YsTUFBTTtBQUNMLFVBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQzdCOztBQUVELFFBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxRQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNqQixVQUFJLEdBQUcsR0FBRztBQUNSLGdCQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM3QixZQUFJLEVBQUUsRUFBRTtPQUNULENBQUM7O0FBRUYsVUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ25CLFdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUM3QixXQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztPQUMxQjs7cUJBRThCLElBQUksQ0FBQyxPQUFPO1VBQXJDLFFBQVEsWUFBUixRQUFRO1VBQUUsVUFBVSxZQUFWLFVBQVU7O0FBQzFCLFdBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLFdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsWUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDakIsYUFBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsYUFBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDMUI7T0FDRjs7QUFFRCxVQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQy9CLFdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0FBQ0QsVUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNyQixXQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztPQUNwQjtBQUNELFVBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQixXQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztPQUN0QjtBQUNELFVBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixXQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztPQUMzQjtBQUNELFVBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDdkIsV0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7T0FDbkI7O0FBRUQsVUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNiLFdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFlBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoRSxXQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFOUIsWUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ25CLGFBQUcsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDNUQsYUFBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDekMsTUFBTTtBQUNMLGFBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDdEI7T0FDRixNQUFNO0FBQ0wsV0FBRyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO09BQ3BDOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1osTUFBTTtBQUNMLGFBQU8sRUFBRSxDQUFDO0tBQ1g7R0FDRjs7QUFFRCxVQUFRLEVBQUUsb0JBQVc7OztBQUduQixRQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFJLENBQUMsTUFBTSxHQUFHLHlCQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBSSxDQUFDLFVBQVUsR0FBRyx5QkFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ3JEOztBQUVELHVCQUFxQixFQUFFLCtCQUFTLFFBQVEsRUFBRTs7Ozs7QUFDeEMsUUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDOztBQUV6QixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELFFBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDckIscUJBQWUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM3Qzs7Ozs7Ozs7QUFRRCxRQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDbkIsVUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsS0FBSyxFQUFJO0FBQ3pDLFVBQUksSUFBSSxHQUFHLE1BQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLFVBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtBQUM1Qyx1QkFBZSxJQUFJLFNBQVMsR0FBRyxFQUFFLFVBQVUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzFELFlBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztPQUN6QztLQUNGLENBQUMsQ0FBQzs7QUFFSCxRQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtBQUNyQyxxQkFBZSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztLQUN2RTs7QUFFRCxRQUFJLE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFcEUsUUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDekMsWUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUM1QjtBQUNELFFBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQixZQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZCOzs7QUFHRCxRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUUvQyxRQUFJLFFBQVEsRUFBRTtBQUNaLFlBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRXBCLGFBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDckMsTUFBTTtBQUNMLGFBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDdEIsV0FBVyxFQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ2hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sR0FBRyxDQUNKLENBQUMsQ0FBQztLQUNKO0dBQ0Y7QUFDRCxhQUFXLEVBQUUscUJBQVMsZUFBZSxFQUFFO0FBQ3JDLFFBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUN0QyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVztRQUM5QixXQUFXLFlBQUE7UUFDWCxVQUFVLFlBQUE7UUFDVixXQUFXLFlBQUE7UUFDWCxTQUFTLFlBQUEsQ0FBQztBQUNaLFFBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQUEsSUFBSSxFQUFJO0FBQ3ZCLFVBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixZQUFJLFdBQVcsRUFBRTtBQUNmLGNBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEIsTUFBTTtBQUNMLHFCQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO0FBQ0QsaUJBQVMsR0FBRyxJQUFJLENBQUM7T0FDbEIsTUFBTTtBQUNMLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLHVCQUFXLEdBQUcsSUFBSSxDQUFDO1dBQ3BCLE1BQU07QUFDTCx1QkFBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztXQUNuQztBQUNELG1CQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLHFCQUFXLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUNyQzs7QUFFRCxrQkFBVSxHQUFHLElBQUksQ0FBQztBQUNsQixZQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2Isb0JBQVUsR0FBRyxLQUFLLENBQUM7U0FDcEI7T0FDRjtLQUNGLENBQUMsQ0FBQzs7QUFFSCxRQUFJLFVBQVUsRUFBRTtBQUNkLFVBQUksV0FBVyxFQUFFO0FBQ2YsbUJBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsaUJBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDcEIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3RCLFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO09BQ2hDO0tBQ0YsTUFBTTtBQUNMLHFCQUFlLElBQ2IsYUFBYSxJQUFJLFdBQVcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUEsQUFBQyxDQUFDOztBQUUvRCxVQUFJLFdBQVcsRUFBRTtBQUNmLG1CQUFXLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDeEMsaUJBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDcEIsTUFBTTtBQUNMLFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7T0FDcEM7S0FDRjs7QUFFRCxRQUFJLGVBQWUsRUFBRTtBQUNuQixVQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDakIsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUEsQUFBQyxDQUNuRSxDQUFDO0tBQ0g7O0FBRUQsV0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0dBQzVCOztBQUVELHNDQUFvQyxFQUFFLGdEQUFXO0FBQy9DLFdBQU8sNlBBT0wsSUFBSSxFQUFFLENBQUM7R0FDVjs7Ozs7Ozs7Ozs7QUFXRCxZQUFVLEVBQUUsb0JBQVMsSUFBSSxFQUFFO0FBQ3pCLFFBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDbkMsb0NBQW9DLENBQ3JDO1FBQ0QsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFdEMsUUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hDLFVBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzs7QUFFL0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztHQUN6RTs7Ozs7Ozs7QUFRRCxxQkFBbUIsRUFBRSwrQkFBVzs7QUFFOUIsUUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUNuQyxvQ0FBb0MsQ0FDckM7UUFDRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFMUMsUUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztBQUVuQixRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsVUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUU3QixRQUFJLENBQUMsVUFBVSxDQUFDLENBQ2QsT0FBTyxFQUNQLElBQUksQ0FBQyxVQUFVLEVBQ2YsTUFBTSxFQUNOLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUM1RCxHQUFHLENBQ0osQ0FBQyxDQUFDO0dBQ0o7Ozs7Ozs7O0FBUUQsZUFBYSxFQUFFLHVCQUFTLE9BQU8sRUFBRTtBQUMvQixRQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDdkIsYUFBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO0tBQ3pDLE1BQU07QUFDTCxVQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0tBQ3BEOztBQUVELFFBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO0dBQy9COzs7Ozs7Ozs7OztBQVdELFFBQU0sRUFBRSxrQkFBVztBQUNqQixRQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUNuQixVQUFJLENBQUMsWUFBWSxDQUFDLFVBQUEsT0FBTztlQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7T0FBQSxDQUFDLENBQUM7O0FBRWhFLFVBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZELE1BQU07QUFDTCxVQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDNUIsVUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNkLE1BQU0sRUFDTixLQUFLLEVBQ0wsY0FBYyxFQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDM0MsSUFBSSxDQUNMLENBQUMsQ0FBQztBQUNILFVBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsWUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNkLFNBQVMsRUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQzFDLElBQUksQ0FDTCxDQUFDLENBQUM7T0FDSjtLQUNGO0dBQ0Y7Ozs7Ozs7O0FBUUQsZUFBYSxFQUFFLHlCQUFXO0FBQ3hCLFFBQUksQ0FBQyxVQUFVLENBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLEVBQzVDLEdBQUcsRUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsR0FBRyxDQUNKLENBQUMsQ0FDSCxDQUFDO0dBQ0g7Ozs7Ozs7OztBQVNELFlBQVUsRUFBRSxvQkFBUyxLQUFLLEVBQUU7QUFDMUIsUUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7R0FDMUI7Ozs7Ozs7O0FBUUQsYUFBVyxFQUFFLHVCQUFXO0FBQ3RCLFFBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0dBQzNEOzs7Ozs7Ozs7QUFTRCxpQkFBZSxFQUFFLHlCQUFTLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUN0RCxRQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRVYsUUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7OztBQUd2RCxVQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNDLE1BQU07QUFDTCxVQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEI7O0FBRUQsUUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDdEQ7Ozs7Ozs7OztBQVNELGtCQUFnQixFQUFFLDBCQUFTLFlBQVksRUFBRSxLQUFLLEVBQUU7QUFDOUMsUUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7O0FBRTNCLFFBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RSxRQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDdkM7Ozs7Ozs7O0FBUUQsWUFBVSxFQUFFLG9CQUFTLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLFFBQUksQ0FBQyxLQUFLLEVBQUU7QUFDVixVQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0IsTUFBTTtBQUNMLFVBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDOUQ7O0FBRUQsUUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDbEQ7O0FBRUQsYUFBVyxFQUFFLHFCQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Ozs7O0FBQ2hFLFFBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7QUFDckQsVUFBSSxDQUFDLElBQUksQ0FDUCxZQUFZLENBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxFQUM3QixJQUFJLEVBQ0osS0FBSyxFQUNMLGNBQWMsRUFDZCxJQUFJLENBQ0wsQ0FDRixDQUFDO0FBQ0YsYUFBTztLQUNSOztBQUVELFFBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7OzBCQUNkLENBQUM7O0FBRVIsYUFBSyxZQUFZLENBQUMsVUFBQSxPQUFPLEVBQUk7QUFDM0IsWUFBSSxNQUFNLEdBQUcsT0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7O0FBR3RELFlBQUksQ0FBQyxLQUFLLEVBQUU7QUFDVixpQkFBTyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2hELE1BQU07O0FBRUwsaUJBQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7T0FDRixDQUFDLENBQUM7Ozs7QUFaTCxTQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQWxDLENBQUM7S0FjVDtHQUNGOzs7Ozs7Ozs7QUFTRCx1QkFBcUIsRUFBRSxpQ0FBVztBQUNoQyxRQUFJLENBQUMsSUFBSSxDQUFDLENBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNsQyxHQUFHLEVBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLElBQUksRUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNuQixHQUFHLENBQ0osQ0FBQyxDQUFDO0dBQ0o7Ozs7Ozs7Ozs7QUFVRCxpQkFBZSxFQUFFLHlCQUFTLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDdEMsUUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25CLFFBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7QUFJdEIsUUFBSSxJQUFJLEtBQUssZUFBZSxFQUFFO0FBQzVCLFVBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQzlCLFlBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDekIsTUFBTTtBQUNMLFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMvQjtLQUNGO0dBQ0Y7O0FBRUQsV0FBUyxFQUFFLG1CQUFTLFNBQVMsRUFBRTtBQUM3QixRQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsVUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqQjtBQUNELFFBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNyQixVQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakI7QUFDRCxRQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQztHQUN2RDtBQUNELFVBQVEsRUFBRSxvQkFBVztBQUNuQixRQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDYixVQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7QUFDRCxRQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0dBQzlEO0FBQ0QsU0FBTyxFQUFFLG1CQUFXO0FBQ2xCLFFBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckIsUUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDOztBQUU5QixRQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsVUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3pDO0FBQ0QsUUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3JCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM3QyxVQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDM0M7O0FBRUQsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0dBQzVDOzs7Ozs7OztBQVFELFlBQVUsRUFBRSxvQkFBUyxNQUFNLEVBQUU7QUFDM0IsUUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztHQUNsRDs7Ozs7Ozs7OztBQVVELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsUUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQzlCOzs7Ozs7Ozs7O0FBVUQsYUFBVyxFQUFFLHFCQUFTLElBQUksRUFBRTtBQUMxQixRQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDaEIsVUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3JELE1BQU07QUFDTCxVQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7R0FDRjs7Ozs7Ozs7O0FBU0QsbUJBQWlCLEVBQUEsMkJBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtBQUNqQyxRQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO1FBQ25FLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7Ozs7QUFLbEQsUUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxRQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUNuQix5REFBeUQsRUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQ3RELE1BQU0sQ0FDUCxDQUFDLENBQUM7QUFDSCxRQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUNuQixPQUFPLEVBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUM1QyxJQUFJLEVBQ0osT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLENBQ1IsQ0FBQyxFQUNGLFNBQVMsQ0FDVixDQUFDLENBQUM7R0FDSjs7Ozs7Ozs7Ozs7QUFXRCxjQUFZLEVBQUUsc0JBQVMsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDaEQsUUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTdDLFFBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDOztBQUUvQixRQUFJLFFBQVEsRUFBRTs7QUFFWiwyQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pDOztBQUVELHlCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxRQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDeEIsMkJBQXFCLENBQUMsSUFBSSxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQ2hELENBQUM7S0FDSDs7QUFFRCxRQUFJLGtCQUFrQixHQUFHLENBQ3ZCLEdBQUcsRUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEVBQ2xELEdBQUcsQ0FDSixDQUFDO0FBQ0YsUUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3pDLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztBQUNGLFFBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDekI7O0FBRUQsa0JBQWdCLEVBQUUsMEJBQVMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUMzQyxRQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsVUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxZQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsQztBQUNELFdBQU8sTUFBTSxDQUFDO0dBQ2Y7Ozs7Ozs7O0FBUUQsbUJBQWlCLEVBQUUsMkJBQVMsU0FBUyxFQUFFLElBQUksRUFBRTtBQUMzQyxRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0dBQzdFOzs7Ozs7Ozs7Ozs7OztBQWNELGlCQUFlLEVBQUUseUJBQVMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMxQyxRQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUUzQixRQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7O0FBRWhDLFFBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixRQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7O0FBRW5ELFFBQUksVUFBVSxHQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDakQsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLENBQ1QsQUFBQyxDQUFDOztBQUVILFFBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyRSxRQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDeEIsWUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUN6QixZQUFNLENBQUMsSUFBSSxDQUNULHNCQUFzQixFQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQ2hELENBQUM7S0FDSDs7QUFFRCxRQUFJLENBQUMsSUFBSSxDQUFDLENBQ1IsR0FBRyxFQUNILE1BQU0sRUFDTixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQ25ELElBQUksRUFDSixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFDNUIsS0FBSyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3RCxhQUFhLENBQ2QsQ0FBQyxDQUFDO0dBQ0o7Ozs7Ozs7OztBQVNELGVBQWEsRUFBRSx1QkFBUyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUMvQyxRQUFJLE1BQU0sR0FBRyxFQUFFO1FBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFOUMsUUFBSSxTQUFTLEVBQUU7QUFDYixVQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZCLGFBQU8sT0FBTyxDQUFDLElBQUksQ0FBQztLQUNyQjs7QUFFRCxRQUFJLE1BQU0sRUFBRTtBQUNWLGFBQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN6QztBQUNELFdBQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzVCLFdBQU8sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQzlCLFdBQU8sQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENBQUM7O0FBRTVDLFFBQUksQ0FBQyxTQUFTLEVBQUU7QUFDZCxZQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzlELE1BQU07QUFDTCxZQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RCOztBQUVELFFBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDdkIsYUFBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7S0FDM0I7QUFDRCxXQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxVQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUVyQixRQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0dBQzVFOzs7Ozs7OztBQVFELGNBQVksRUFBRSxzQkFBUyxHQUFHLEVBQUU7QUFDMUIsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUN6QixPQUFPLFlBQUE7UUFDUCxJQUFJLFlBQUE7UUFDSixFQUFFLFlBQUEsQ0FBQzs7QUFFTCxRQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsUUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUN0QjtBQUNELFFBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNyQixVQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZCLGFBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDM0I7O0FBRUQsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyQixRQUFJLE9BQU8sRUFBRTtBQUNYLFVBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQzlCO0FBQ0QsUUFBSSxJQUFJLEVBQUU7QUFDUixVQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN4QjtBQUNELFFBQUksRUFBRSxFQUFFO0FBQ04sVUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDcEI7QUFDRCxRQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztHQUMxQjs7QUFFRCxRQUFNLEVBQUUsZ0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDbEMsUUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQ3pCLFVBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsY0FBYyxHQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsR0FDUCxTQUFTLEdBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUNQLEdBQUcsSUFDRixLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLENBQ3JELENBQUM7S0FDSCxNQUFNLElBQUksSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3BDLFVBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkIsTUFBTSxJQUFJLElBQUksS0FBSyxlQUFlLEVBQUU7QUFDbkMsVUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7R0FDRjs7OztBQUlELFVBQVEsRUFBRSxrQkFBa0I7O0FBRTVCLGlCQUFlLEVBQUUseUJBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUM5QyxRQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUTtRQUNqQyxLQUFLLFlBQUE7UUFDTCxRQUFRLFlBQUEsQ0FBQzs7QUFFWCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLFdBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsY0FBUSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUUvQixVQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRWhELFVBQUksUUFBUSxJQUFJLElBQUksRUFBRTs7QUFFcEIsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxhQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNwQixhQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0IsWUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FDN0MsS0FBSyxFQUNMLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxFQUNaLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDakIsQ0FBQztBQUNGLFlBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDckQsWUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUV6QyxZQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQztBQUN0RCxZQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQztBQUNyRSxhQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDakMsYUFBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO09BQzVDLE1BQU07QUFDTCxhQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDN0IsYUFBSyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzs7QUFFeEMsWUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7QUFDdEQsWUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUM7T0FDdEU7S0FDRjtHQUNGO0FBQ0Qsc0JBQW9CLEVBQUUsOEJBQVMsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxVQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVDLGVBQU8sV0FBVyxDQUFDO09BQ3BCO0tBQ0Y7R0FDRjs7QUFFRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3pDLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUFFM0QsUUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDekMsbUJBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDbkM7QUFDRCxRQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDbEIsbUJBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsV0FBTyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUM5RDs7QUFFRCxhQUFXLEVBQUUscUJBQVMsSUFBSSxFQUFFO0FBQzFCLFFBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFVBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFVBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQztHQUNGOztBQUVELE1BQUksRUFBRSxjQUFTLElBQUksRUFBRTtBQUNuQixRQUFJLEVBQUUsSUFBSSxZQUFZLE9BQU8sQ0FBQSxBQUFDLEVBQUU7QUFDOUIsVUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9COztBQUVELFFBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFdBQU8sSUFBSSxDQUFDO0dBQ2I7O0FBRUQsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFFBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztHQUM5Qjs7QUFFRCxZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFO0FBQzNCLFFBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixVQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzdDLElBQUksQ0FBQyxlQUFlLENBQ3JCLENBQ0YsQ0FBQztBQUNGLFVBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO0tBQ2pDOztBQUVELFFBQUksTUFBTSxFQUFFO0FBQ1YsVUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUI7R0FDRjs7QUFFRCxjQUFZLEVBQUUsc0JBQVMsUUFBUSxFQUFFO0FBQy9CLFFBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2hCLEtBQUssWUFBQTtRQUNMLFlBQVksWUFBQTtRQUNaLFdBQVcsWUFBQSxDQUFDOzs7QUFHZCxRQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO0FBQ3BCLFlBQU0sMkJBQWMsNEJBQTRCLENBQUMsQ0FBQztLQUNuRDs7O0FBR0QsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFOUIsUUFBSSxHQUFHLFlBQVksT0FBTyxFQUFFOztBQUUxQixXQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsWUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLGlCQUFXLEdBQUcsSUFBSSxDQUFDO0tBQ3BCLE1BQU07O0FBRUwsa0JBQVksR0FBRyxJQUFJLENBQUM7QUFDcEIsVUFBSSxLQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDOztBQUU1QixZQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELFdBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDekI7O0FBRUQsUUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7O0FBRXRDLFFBQUksQ0FBQyxXQUFXLEVBQUU7QUFDaEIsVUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ2pCO0FBQ0QsUUFBSSxZQUFZLEVBQUU7QUFDaEIsVUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ2xCO0FBQ0QsUUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQ3JDOztBQUVELFdBQVMsRUFBRSxxQkFBVztBQUNwQixRQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakIsUUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQzFDLFVBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDL0M7QUFDRCxXQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztHQUM1QjtBQUNELGNBQVksRUFBRSx3QkFBVztBQUN2QixXQUFPLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0dBQ2pDO0FBQ0QsYUFBVyxFQUFFLHVCQUFXO0FBQ3RCLFFBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbkMsUUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxVQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTNCLFVBQUksS0FBSyxZQUFZLE9BQU8sRUFBRTtBQUM1QixZQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUMvQixNQUFNO0FBQ0wsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdCLFlBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQy9CO0tBQ0Y7R0FDRjtBQUNELFVBQVEsRUFBRSxvQkFBVztBQUNuQixXQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0dBQ2hDOztBQUVELFVBQVEsRUFBRSxrQkFBUyxPQUFPLEVBQUU7QUFDMUIsUUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBLENBQUUsR0FBRyxFQUFFLENBQUM7O0FBRS9ELFFBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxZQUFZLE9BQU8sRUFBRTtBQUN2QyxhQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbkIsTUFBTTtBQUNMLFVBQUksQ0FBQyxNQUFNLEVBQUU7O0FBRVgsWUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDbkIsZ0JBQU0sMkJBQWMsbUJBQW1CLENBQUMsQ0FBQztTQUMxQztBQUNELFlBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztPQUNsQjtBQUNELGFBQU8sSUFBSSxDQUFDO0tBQ2I7R0FDRjs7QUFFRCxVQUFRLEVBQUUsb0JBQVc7QUFDbkIsUUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVk7UUFDaEUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7QUFHakMsUUFBSSxJQUFJLFlBQVksT0FBTyxFQUFFO0FBQzNCLGFBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQixNQUFNO0FBQ0wsYUFBTyxJQUFJLENBQUM7S0FDYjtHQUNGOztBQUVELGFBQVcsRUFBRSxxQkFBUyxPQUFPLEVBQUU7QUFDN0IsUUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sRUFBRTtBQUM3QixhQUFPLFNBQVMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0tBQ2xDLE1BQU07QUFDTCxhQUFPLE9BQU8sR0FBRyxPQUFPLENBQUM7S0FDMUI7R0FDRjs7QUFFRCxjQUFZLEVBQUUsc0JBQVMsR0FBRyxFQUFFO0FBQzFCLFdBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDdEM7O0FBRUQsZUFBYSxFQUFFLHVCQUFTLEdBQUcsRUFBRTtBQUMzQixXQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ3ZDOztBQUVELFdBQVMsRUFBRSxtQkFBUyxJQUFJLEVBQUU7QUFDeEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixRQUFJLEdBQUcsRUFBRTtBQUNQLFNBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNyQixhQUFPLEdBQUcsQ0FBQztLQUNaOztBQUVELE9BQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELE9BQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLE9BQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDOztBQUV2QixXQUFPLEdBQUcsQ0FBQztHQUNaOztBQUVELGFBQVcsRUFBRSxxQkFBUyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUNsRCxRQUFJLE1BQU0sR0FBRyxFQUFFO1FBQ2IsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUUsUUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztRQUMxRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsbUJBQWMsSUFBSSxDQUFDLFdBQVcsQ0FDbEQsQ0FBQyxDQUNGLHNDQUNGLENBQUM7O0FBRUosV0FBTztBQUNMLFlBQU0sRUFBRSxNQUFNO0FBQ2QsZ0JBQVUsRUFBRSxVQUFVO0FBQ3RCLFVBQUksRUFBRSxXQUFXO0FBQ2pCLGdCQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQ3pDLENBQUM7R0FDSDs7QUFFRCxhQUFXLEVBQUUscUJBQVMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDL0MsUUFBSSxPQUFPLEdBQUcsRUFBRTtRQUNkLFFBQVEsR0FBRyxFQUFFO1FBQ2IsS0FBSyxHQUFHLEVBQUU7UUFDVixHQUFHLEdBQUcsRUFBRTtRQUNSLFVBQVUsR0FBRyxDQUFDLE1BQU07UUFDcEIsS0FBSyxZQUFBLENBQUM7O0FBRVIsUUFBSSxVQUFVLEVBQUU7QUFDZCxZQUFNLEdBQUcsRUFBRSxDQUFDO0tBQ2I7O0FBRUQsV0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFdBQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUUvQixRQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsYUFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDbkM7QUFDRCxRQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDckIsYUFBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEMsYUFBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDeEM7O0FBRUQsUUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzs7O0FBSTVCLFFBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtBQUN0QixhQUFPLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztBQUN6QyxhQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztLQUMvQzs7OztBQUlELFFBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNsQixXQUFPLENBQUMsRUFBRSxFQUFFO0FBQ1YsV0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixZQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUVsQixVQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsV0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztPQUMxQjtBQUNELFVBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNyQixhQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLGdCQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO09BQy9CO0tBQ0Y7O0FBRUQsUUFBSSxVQUFVLEVBQUU7QUFDZCxhQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xEOztBQUVELFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNqQixhQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzlDO0FBQ0QsUUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3JCLGFBQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsYUFBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN4RDs7QUFFRCxRQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3JCLGFBQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ3ZCO0FBQ0QsUUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3ZCLGFBQU8sQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxPQUFPLENBQUM7R0FDaEI7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7QUFDaEUsUUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFELFdBQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFELFdBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLFFBQUksV0FBVyxFQUFFO0FBQ2YsVUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixZQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZCLGFBQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDOUIsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNqQixZQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDO0tBQ2hCO0dBQ0Y7Q0FDRixDQUFDOztBQUVGLENBQUMsWUFBVztBQUNWLE1BQU0sYUFBYSxHQUFHLENBQ3BCLG9CQUFvQixHQUNwQiwyQkFBMkIsR0FDM0IseUJBQXlCLEdBQ3pCLDhCQUE4QixHQUM5QixtQkFBbUIsR0FDbkIsZ0JBQWdCLEdBQ2hCLHVCQUF1QixHQUN2QiwwQkFBMEIsR0FDMUIsa0NBQWtDLEdBQ2xDLDBCQUEwQixHQUMxQixpQ0FBaUMsR0FDakMsNkJBQTZCLEdBQzdCLCtCQUErQixHQUMvQix5Q0FBeUMsR0FDekMsdUNBQXVDLEdBQ3ZDLGtCQUFrQixDQUFBLENBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFYixNQUFNLGFBQWEsR0FBSSxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsRUFBRSxBQUFDLENBQUM7O0FBRS9ELE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsaUJBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7R0FDeEM7Q0FDRixDQUFBLEVBQUcsQ0FBQzs7Ozs7QUFLTCxrQkFBa0IsQ0FBQyw2QkFBNkIsR0FBRyxVQUFTLElBQUksRUFBRTtBQUNoRSxTQUNFLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUN4Qyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3ZDO0NBQ0gsQ0FBQzs7QUFFRixTQUFTLFlBQVksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFO0FBQzVFLE1BQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7TUFDN0IsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDckIsTUFBSSxlQUFlLEVBQUU7QUFDbkIsT0FBRyxFQUFFLENBQUM7R0FDUDs7QUFFRCxPQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFNBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDcEQ7O0FBRUQsTUFBSSxlQUFlLEVBQUU7QUFDbkIsV0FBTyxDQUNMLFFBQVEsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFDdEMsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDakMsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDL0MsSUFBSSxDQUNMLENBQUM7R0FDSCxNQUFNO0FBQ0wsV0FBTyxLQUFLLENBQUM7R0FDZDtDQUNGOztxQkFFYyxrQkFBa0IiLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IENvZGVHZW4gZnJvbSAnLi9jb2RlLWdlbic7XG5cbmZ1bmN0aW9uIExpdGVyYWwodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBKYXZhU2NyaXB0Q29tcGlsZXIoKSB7fVxuXG5KYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlID0ge1xuICAvLyBQVUJMSUMgQVBJOiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIG1ldGhvZHMgaW4gYSBzdWJjbGFzcyB0byBwcm92aWRlXG4gIC8vIGFsdGVybmF0aXZlIGNvbXBpbGVkIGZvcm1zIGZvciBuYW1lIGxvb2t1cCBhbmQgYnVmZmVyaW5nIHNlbWFudGljc1xuICBuYW1lTG9va3VwOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUgLyosICB0eXBlICovKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxOYW1lTG9va3VwKHBhcmVudCwgbmFtZSk7XG4gIH0sXG4gIGRlcHRoZWRMb29rdXA6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5sb29rdXAnKSxcbiAgICAgICcoZGVwdGhzLCAnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkobmFtZSksXG4gICAgICAnKSdcbiAgICBdO1xuICB9LFxuXG4gIGNvbXBpbGVySW5mbzogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTixcbiAgICAgIHZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07XG4gICAgcmV0dXJuIFtyZXZpc2lvbiwgdmVyc2lvbnNdO1xuICB9LFxuXG4gIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzb3VyY2UsIGxvY2F0aW9uLCBleHBsaWNpdCkge1xuICAgIC8vIEZvcmNlIGEgc291cmNlIGFzIHRoaXMgc2ltcGxpZmllcyB0aGUgbWVyZ2UgbG9naWMuXG4gICAgaWYgKCFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHNvdXJjZSA9IFtzb3VyY2VdO1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZS53cmFwKHNvdXJjZSwgbG9jYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgIHJldHVybiBbJ3JldHVybiAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIGlmIChleHBsaWNpdCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBvcGVyYXRpb24gb2NjdXJzIGFzIGEgY2hpbGQgb2YgYW5vdGhlclxuICAgICAgLy8gY29uc3RydWN0LCBnZW5lcmFsbHkgYnJhY2VzLiBXZSBoYXZlIHRvIGV4cGxpY2l0bHkgb3V0cHV0IHRoZXNlIGJ1ZmZlclxuICAgICAgLy8gb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUgZW1pdHRlZCBjb2RlIGdvZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uXG4gICAgICByZXR1cm4gWydidWZmZXIgKz0gJywgc291cmNlLCAnOyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2UuYXBwZW5kVG9CdWZmZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCcnKTtcbiAgfSxcbiAgLy8gRU5EIFBVQkxJQyBBUElcbiAgaW50ZXJuYWxOYW1lTG9va3VwOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUpIHtcbiAgICB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQgPSB0cnVlO1xuICAgIHJldHVybiBbJ2xvb2t1cFByb3BlcnR5KCcsIHBhcmVudCwgJywnLCBKU09OLnN0cmluZ2lmeShuYW1lKSwgJyknXTtcbiAgfSxcblxuICBsb29rdXBQcm9wZXJ0eUZ1bmN0aW9uSXNVc2VkOiBmYWxzZSxcblxuICBjb21waWxlOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucywgY29udGV4dCwgYXNPYmplY3QpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IHRoaXMub3B0aW9ucy50cmFja0lkcztcbiAgICB0aGlzLnByZWNvbXBpbGUgPSAhYXNPYmplY3Q7XG5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLmVudmlyb25tZW50Lm5hbWU7XG4gICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgfHwge1xuICAgICAgZGVjb3JhdG9yczogW10sXG4gICAgICBwcm9ncmFtczogW10sXG4gICAgICBlbnZpcm9ubWVudHM6IFtdXG4gICAgfTtcblxuICAgIHRoaXMucHJlYW1ibGUoKTtcblxuICAgIHRoaXMuc3RhY2tTbG90ID0gMDtcbiAgICB0aGlzLnN0YWNrVmFycyA9IFtdO1xuICAgIHRoaXMuYWxpYXNlcyA9IHt9O1xuICAgIHRoaXMucmVnaXN0ZXJzID0geyBsaXN0OiBbXSB9O1xuICAgIHRoaXMuaGFzaGVzID0gW107XG4gICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IFtdO1xuXG4gICAgdGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy51c2VEZXB0aHMgPVxuICAgICAgdGhpcy51c2VEZXB0aHMgfHxcbiAgICAgIGVudmlyb25tZW50LnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVjb3JhdG9ycyB8fFxuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhdDtcbiAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBlbnZpcm9ubWVudC51c2VCbG9ja1BhcmFtcztcblxuICAgIGxldCBvcGNvZGVzID0gZW52aXJvbm1lbnQub3Bjb2RlcyxcbiAgICAgIG9wY29kZSxcbiAgICAgIGZpcnN0TG9jLFxuICAgICAgaSxcbiAgICAgIGw7XG5cbiAgICBmb3IgKGkgPSAwLCBsID0gb3Bjb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG9wY29kZSA9IG9wY29kZXNbaV07XG5cbiAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IG9wY29kZS5sb2M7XG4gICAgICBmaXJzdExvYyA9IGZpcnN0TG9jIHx8IG9wY29kZS5sb2M7XG4gICAgICB0aGlzW29wY29kZS5vcGNvZGVdLmFwcGx5KHRoaXMsIG9wY29kZS5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBhbnkgdHJhaWxpbmcgY29udGVudCB0aGF0IG1pZ2h0IGJlIHBlbmRpbmcuXG4gICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gZmlyc3RMb2M7XG4gICAgdGhpcy5wdXNoU291cmNlKCcnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuc3RhY2tTbG90IHx8IHRoaXMuaW5saW5lU3RhY2subGVuZ3RoIHx8IHRoaXMuY29tcGlsZVN0YWNrLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ29tcGlsZSBjb21wbGV0ZWQgd2l0aCBjb250ZW50IGxlZnQgb24gc3RhY2snKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wcmVwZW5kKFtcbiAgICAgICAgJ3ZhciBkZWNvcmF0b3JzID0gY29udGFpbmVyLmRlY29yYXRvcnMsICcsXG4gICAgICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uKCksXG4gICAgICAgICc7XFxuJ1xuICAgICAgXSk7XG4gICAgICB0aGlzLmRlY29yYXRvcnMucHVzaCgncmV0dXJuIGZuOycpO1xuXG4gICAgICBpZiAoYXNPYmplY3QpIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0gRnVuY3Rpb24uYXBwbHkodGhpcywgW1xuICAgICAgICAgICdmbicsXG4gICAgICAgICAgJ3Byb3BzJyxcbiAgICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgICAnZGVwdGgwJyxcbiAgICAgICAgICAnZGF0YScsXG4gICAgICAgICAgJ2Jsb2NrUGFyYW1zJyxcbiAgICAgICAgICAnZGVwdGhzJyxcbiAgICAgICAgICB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wcmVwZW5kKFxuICAgICAgICAgICdmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGgwLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XFxuJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMucHVzaCgnfVxcbicpO1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBmbiA9IHRoaXMuY3JlYXRlRnVuY3Rpb25Db250ZXh0KGFzT2JqZWN0KTtcbiAgICBpZiAoIXRoaXMuaXNDaGlsZCkge1xuICAgICAgbGV0IHJldCA9IHtcbiAgICAgICAgY29tcGlsZXI6IHRoaXMuY29tcGlsZXJJbmZvKCksXG4gICAgICAgIG1haW46IGZuXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5kZWNvcmF0b3JzKSB7XG4gICAgICAgIHJldC5tYWluX2QgPSB0aGlzLmRlY29yYXRvcnM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHsgcHJvZ3JhbXMsIGRlY29yYXRvcnMgfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBwcm9ncmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gcHJvZ3JhbXNbaV07XG4gICAgICAgIGlmIChkZWNvcmF0b3JzW2ldKSB7XG4gICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBzdGFydFBhcnRJbmRleCwgZmFsc3ksIHN0cmljdCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaWN0IHx8IHRoaXMub3B0aW9ucy5hc3N1bWVPYmplY3RzKSB7XG4gICAgICB0aGlzLnB1c2goXG4gICAgICAgIHN0cmljdExvb2t1cChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RyaWN0ICYmIHN0cmljdCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgIHN0YXJ0UGFydEluZGV4LFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGVuID0gcGFydHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSBzdGFydFBhcnRJbmRleDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlZCBkZWNvcmF0b3IgaW4gYSB2YXJpYWJsZSBhbmQgdmVyaWZ5IGl0IGlzIGEgZnVuY3Rpb24gYmVmb3JlXG4gICAgLy8gY2FsbGluZyBpdC4gV2l0aG91dCB0aGlzLCB1bnJlZ2lzdGVyZWQgZGVjb3JhdG9ycyBjYW4gY2F1c2UgYW4gdW5oYW5kbGVkIFR5cGVFcnJvclxuICAgIC8vIChjYWxsaW5nIHVuZGVmaW5lZCksIHdoaWNoIGNyYXNoZXMgdGhlIHByb2Nlc3Mg4oCUIGVuYWJsaW5nIERlbmlhbCBvZiBTZXJ2aWNlLlxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFsndmFyIGRlY29yYXRvciA9ICcsIGZvdW5kRGVjb3JhdG9yLCAnOyddKTtcbiAgICB0aGlzLmRlY29yYXRvcnMucHVzaChbXG4gICAgICAnaWYgKHR5cGVvZiBkZWNvcmF0b3IgIT09IFwiZnVuY3Rpb25cIikgeyB0aHJvdyBuZXcgRXJyb3IoJyxcbiAgICAgIHRoaXMucXVvdGVkU3RyaW5nKCdNaXNzaW5nIGRlY29yYXRvcjogXCInICsgbmFtZSArICdcIicpLFxuICAgICAgJyk7IH0nXG4gICAgXSk7XG4gICAgdGhpcy5kZWNvcmF0b3JzLnB1c2goW1xuICAgICAgJ2ZuID0gJyxcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5mdW5jdGlvbkNhbGwoJ2RlY29yYXRvcicsICcnLCBbXG4gICAgICAgICdmbicsXG4gICAgICAgICdwcm9wcycsXG4gICAgICAgICdjb250YWluZXInLFxuICAgICAgICBvcHRpb25zXG4gICAgICBdKSxcbiAgICAgICcgfHwgZm47J1xuICAgIF0pO1xuICB9LFxuXG4gIC8vIFtpbnZva2VIZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBoZWxwZXIncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBoZWxwZXIsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIGhlbHBlcidzIHJldHVybiB2YWx1ZSBvbnRvIHRoZSBzdGFjay5cbiAgLy9cbiAgLy8gSWYgdGhlIGhlbHBlciBpcyBub3QgZm91bmQsIGBoZWxwZXJNaXNzaW5nYCBpcyBjYWxsZWQuXG4gIGludm9rZUhlbHBlcjogZnVuY3Rpb24ocGFyYW1TaXplLCBuYW1lLCBpc1NpbXBsZSkge1xuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSk7XG5cbiAgICBsZXQgcG9zc2libGVGdW5jdGlvbkNhbGxzID0gW107XG5cbiAgICBpZiAoaXNTaW1wbGUpIHtcbiAgICAgIC8vIGRpcmVjdCBjYWxsIHRvIGhlbHBlclxuICAgICAgcG9zc2libGVGdW5jdGlvbkNhbGxzLnB1c2goaGVscGVyLm5hbWUpO1xuICAgIH1cbiAgICAvLyBjYWxsIGEgZnVuY3Rpb24gZnJvbSB0aGUgaW5wdXQgb2JqZWN0XG4gICAgcG9zc2libGVGdW5jdGlvbkNhbGxzLnB1c2gobm9uSGVscGVyKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgZnVuY3Rpb25Mb29rdXBDb2RlID0gW1xuICAgICAgJygnLFxuICAgICAgdGhpcy5pdGVtc1NlcGFyYXRlZEJ5KHBvc3NpYmxlRnVuY3Rpb25DYWxscywgJ3x8JyksXG4gICAgICAnKSdcbiAgICBdO1xuICAgIGxldCBmdW5jdGlvbkNhbGwgPSB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoXG4gICAgICBmdW5jdGlvbkxvb2t1cENvZGUsXG4gICAgICAnY2FsbCcsXG4gICAgICBoZWxwZXIuY2FsbFBhcmFtc1xuICAgICk7XG4gICAgdGhpcy5wdXNoKGZ1bmN0aW9uQ2FsbCk7XG4gIH0sXG5cbiAgaXRlbXNTZXBhcmF0ZWRCeTogZnVuY3Rpb24oaXRlbXMsIHNlcGFyYXRvcikge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQucHVzaChpdGVtc1swXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goc2VwYXJhdG9yLCBpdGVtc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIFtpbnZva2VLbm93bkhlbHBlcl1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGludm9jYXRpb25cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVuIHRoZSBoZWxwZXIgaXMga25vd24gdG8gZXhpc3QsXG4gIC8vIHNvIGEgYGhlbHBlck1pc3NpbmdgIGZhbGxiYWNrIGlzIG5vdCByZXF1aXJlZC5cbiAgaW52b2tlS25vd25IZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSkge1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSk7XG4gICAgdGhpcy5wdXNoKHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChoZWxwZXIubmFtZSwgJ2NhbGwnLCBoZWxwZXIuY2FsbFBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFtpbnZva2VBbWJpZ3VvdXNdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGRpc2FtYmlndWF0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiBhbiBleHByZXNzaW9uIGxpa2UgYHt7Zm9vfX1gXG4gIC8vIGlzIHByb3ZpZGVkLCBidXQgd2UgZG9uJ3Qga25vdyBhdCBjb21waWxlLXRpbWUgd2hldGhlciBpdFxuICAvLyBpcyBhIGhlbHBlciBvciBhIHBhdGguXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGVtaXRzIG1vcmUgY29kZSB0aGFuIHRoZSBvdGhlciBvcHRpb25zLFxuICAvLyBhbmQgY2FuIGJlIGF2b2lkZWQgYnkgcGFzc2luZyB0aGUgYGtub3duSGVscGVyc2AgYW5kXG4gIC8vIGBrbm93bkhlbHBlcnNPbmx5YCBmbGFncyBhdCBjb21waWxlLXRpbWUuXG4gIGludm9rZUFtYmlndW91czogZnVuY3Rpb24obmFtZSwgaGVscGVyQ2FsbCkge1xuICAgIHRoaXMudXNlUmVnaXN0ZXIoJ2hlbHBlcicpO1xuXG4gICAgbGV0IG5vbkhlbHBlciA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIHRoaXMuZW1wdHlIYXNoKCk7XG4gICAgbGV0IGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIoMCwgbmFtZSwgaGVscGVyQ2FsbCk7XG5cbiAgICBsZXQgaGVscGVyTmFtZSA9ICh0aGlzLmxhc3RIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoXG4gICAgICAnaGVscGVycycsXG4gICAgICBuYW1lLFxuICAgICAgJ2hlbHBlcidcbiAgICApKTtcblxuICAgIGxldCBsb29rdXAgPSBbJygnLCAnKGhlbHBlciA9ICcsIGhlbHBlck5hbWUsICcgfHwgJywgbm9uSGVscGVyLCAnKSddO1xuICAgIGlmICghdGhpcy5vcHRpb25zLnN0cmljdCkge1xuICAgICAgbG9va3VwWzBdID0gJyhoZWxwZXIgPSAnO1xuICAgICAgbG9va3VwLnB1c2goXG4gICAgICAgICcgIT0gbnVsbCA/IGhlbHBlciA6ICcsXG4gICAgICAgIHRoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuaG9va3MuaGVscGVyTWlzc2luZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChbXG4gICAgICAnKCcsXG4gICAgICBsb29rdXAsXG4gICAgICBoZWxwZXIucGFyYW1zSW5pdCA/IFsnKSwoJywgaGVscGVyLnBhcmFtc0luaXRdIDogW10sXG4gICAgICAnKSwnLFxuICAgICAgJyh0eXBlb2YgaGVscGVyID09PSAnLFxuICAgICAgdGhpcy5hbGlhc2FibGUoJ1wiZnVuY3Rpb25cIicpLFxuICAgICAgJyA/ICcsXG4gICAgICB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2hlbHBlcicsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpLFxuICAgICAgJyA6IGhlbHBlcikpJ1xuICAgIF0pO1xuICB9LFxuXG4gIC8vIFtpbnZva2VQYXJ0aWFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBjb250ZXh0LCAuLi5cbiAgLy8gT24gc3RhY2sgYWZ0ZXI6IHJlc3VsdCBvZiBwYXJ0aWFsIGludm9jYXRpb25cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gcG9wcyBvZmYgYSBjb250ZXh0LCBpbnZva2VzIGEgcGFydGlhbCB3aXRoIHRoYXQgY29udGV4dCxcbiAgLy8gYW5kIHB1c2hlcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGJhY2suXG4gIGludm9rZVBhcnRpYWw6IGZ1bmN0aW9uKGlzRHluYW1pYywgbmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IHBhcmFtcyA9IFtdLFxuICAgICAgb3B0aW9ucyA9IHRoaXMuc2V0dXBQYXJhbXMobmFtZSwgMSwgcGFyYW1zKTtcblxuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIG5hbWUgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBkZWxldGUgb3B0aW9ucy5uYW1lO1xuICAgIH1cblxuICAgIGlmIChpbmRlbnQpIHtcbiAgICAgIG9wdGlvbnMuaW5kZW50ID0gSlNPTi5zdHJpbmdpZnkoaW5kZW50KTtcbiAgICB9XG4gICAgb3B0aW9ucy5oZWxwZXJzID0gJ2hlbHBlcnMnO1xuICAgIG9wdGlvbnMucGFydGlhbHMgPSAncGFydGlhbHMnO1xuICAgIG9wdGlvbnMuZGVjb3JhdG9ycyA9ICdjb250YWluZXIuZGVjb3JhdG9ycyc7XG5cbiAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgcGFyYW1zLnVuc2hpZnQodGhpcy5uYW1lTG9va3VwKCdwYXJ0aWFscycsIG5hbWUsICdwYXJ0aWFsJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMudW5zaGlmdChuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgb3B0aW9ucy5kZXB0aHMgPSAnZGVwdGhzJztcbiAgICB9XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2NvbnRhaW5lci5pbnZva2VQYXJ0aWFsJywgJycsIHBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFthc3NpZ25Ub0hhc2hdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4sIGhhc2gsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLiwgaGFzaCwgLi4uXG4gIC8vXG4gIC8vIFBvcHMgYSB2YWx1ZSBvZmYgdGhlIHN0YWNrIGFuZCBhc3NpZ25zIGl0IHRvIHRoZSBjdXJyZW50IGhhc2hcbiAgYXNzaWduVG9IYXNoOiBmdW5jdGlvbihrZXkpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICBjb250ZXh0LFxuICAgICAgdHlwZSxcbiAgICAgIGlkO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIGlkID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBjb250ZXh0ID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cblxuICAgIGxldCBoYXNoID0gdGhpcy5oYXNoO1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBoYXNoLmNvbnRleHRzW2tleV0gPSBjb250ZXh0O1xuICAgIH1cbiAgICBpZiAodHlwZSkge1xuICAgICAgaGFzaC50eXBlc1trZXldID0gdHlwZTtcbiAgICB9XG4gICAgaWYgKGlkKSB7XG4gICAgICBoYXNoLmlkc1trZXldID0gaWQ7XG4gICAgfVxuICAgIGhhc2gudmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgfSxcblxuICBwdXNoSWQ6IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIGNoaWxkKSB7XG4gICAgaWYgKHR5cGUgPT09ICdCbG9ja1BhcmFtJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKFxuICAgICAgICAnYmxvY2tQYXJhbXNbJyArXG4gICAgICAgICAgbmFtZVswXSArXG4gICAgICAgICAgJ10ucGF0aFsnICtcbiAgICAgICAgICBuYW1lWzFdICtcbiAgICAgICAgICAnXScgK1xuICAgICAgICAgIChjaGlsZCA/ICcgKyAnICsgSlNPTi5zdHJpbmdpZnkoJy4nICsgY2hpbGQpIDogJycpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RyaW5nKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ3RydWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdudWxsJyk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEhFTFBFUlNcblxuICBjb21waWxlcjogSmF2YVNjcmlwdENvbXBpbGVyLFxuXG4gIGNvbXBpbGVDaGlsZHJlbjogZnVuY3Rpb24oZW52aXJvbm1lbnQsIG9wdGlvbnMpIHtcbiAgICBsZXQgY2hpbGRyZW4gPSBlbnZpcm9ubWVudC5jaGlsZHJlbixcbiAgICAgIGNoaWxkLFxuICAgICAgY29tcGlsZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWF0Y2hFeGlzdGluZ1Byb2dyYW0oY2hpbGQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpIC0gMTtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIHN0YXJ0UGFydEluZGV4LCB0eXBlKSB7XG4gIGxldCBzdGFjayA9IGNvbXBpbGVyLnBvcFN0YWNrKCksXG4gICAgbGVuID0gcGFydHMubGVuZ3RoO1xuICBpZiAocmVxdWlyZVRlcm1pbmFsKSB7XG4gICAgbGVuLS07XG4gIH1cblxuICBmb3IgKGxldCBpID0gc3RhcnRQYXJ0SW5kZXg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5cGUpO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIHJldHVybiBbXG4gICAgICBjb21waWxlci5hbGlhc2FibGUoJ2NvbnRhaW5lci5zdHJpY3QnKSxcbiAgICAgICcoJyxcbiAgICAgIHN0YWNrLFxuICAgICAgJywgJyxcbiAgICAgIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tsZW5dKSxcbiAgICAgICcsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShjb21waWxlci5zb3VyY2UuY3VycmVudExvY2F0aW9uKSxcbiAgICAgICcgKSdcbiAgICBdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBKYXZhU2NyaXB0Q29tcGlsZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _handlebarsRuntime = require('./handlebars.runtime');\n\nvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n// Compiler imports\n\nvar _handlebarsCompilerAst = require('./handlebars/compiler/ast');\n\nvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\nvar _handlebarsCompilerBase = require('./handlebars/compiler/base');\n\nvar _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');\n\nvar _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');\n\nvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\nvar _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');\n\nvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\nvar _create = _handlebarsRuntime2['default'].create;\nfunction create() {\n  var hb = _create();\n\n  hb.compile = function (input, options) {\n    return _handlebarsCompilerCompiler.compile(input, options, hb);\n  };\n  hb.precompile = function (input, options) {\n    return _handlebarsCompilerCompiler.precompile(input, options, hb);\n  };\n\n  hb.AST = _handlebarsCompilerAst2['default'];\n  hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n  hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n  hb.Parser = _handlebarsCompilerBase.parser;\n  hb.parse = _handlebarsCompilerBase.parse;\n  hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n  return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst.Visitor = _handlebarsCompilerVisitor2['default'];\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==\n","import { WorkflowManager } from \"..\";\nimport Handlebars from \"handlebars\";\n\n/**\n * Attempts to render the template text. If the render fails for any reason, the original text will be returned.\n * @param text The template.\n * @param workflowManager The workflowManger to fetch the templating context for.\n * @returns The rendered text, or the original text if the render failed.\n */\nexport function renderTextTemplateForWorkflow(text: string, workflowManager: WorkflowManager): string {\n    return renderTextTemplate(text, workflowManager.getTemplatingContext());\n}\n\n/**\n * Attempts to render the template text. If the render fails for any reason, the original text will be returned.\n * @param text The template.\n * @param context The rendering context.\n * @returns The rendered text, or the original text if the render failed.\n */\nexport function renderTextTemplate(text: string, context: any): string {\n    try {\n        text = Handlebars.compile(text)(context);\n    } catch (e: any) {\n        console.error(\"failed to render templated text\", e);\n    }\n    return text;\n}\n","import { getAnchor } from \"../text/shared\";\nimport { FontData, PapyrusComponent, TextboxElement } from \"../types\";\nimport { spotColorDefinitionString } from \"../util/color\";\nimport { getFontMetrics } from \"../util/font\";\nimport { renderTextTemplate } from \"../util/text\";\n\nexport const Textbox: PapyrusComponent<Omit<TextboxElement, \"type\">> = (props) => {\n    const rotation = props.rotation || 0;\n    const angleInRadians = (rotation * Math.PI) / 180.0;\n    const rotC = Math.cos(angleInRadians);\n    const rotS = -Math.sin(angleInRadians);\n    const curvedPathId = `text-path-${props.id}`;\n    const textFillId = `text-fill-${props.id}`;\n\n    const xTranslation = props.x + (props.curved ? 0 : props.width / 2);\n    const yTranslation = props.y + (props.curved ? 0 : props.height / 2);\n\n    const text = renderTextTemplate(props.text || \"\", props._renderingConfiguration?.templatingContext);\n    const lines = text.split(\"\\n\");\n\n    const stroke =\n        props.strokeColor?.browserValue && props.strokeThickness ? props.strokeColor?.browserValue : undefined;\n    const strokeWidth = props.strokeColor?.browserValue && props.strokeThickness ? props.strokeThickness : undefined;\n\n    if (props.curved && !props.paths) {\n        return null;\n    }\n\n    if (!props.fontData) {\n        return null;\n    }\n\n    const getFill = (): string => {\n        if (props.textFillImage) {\n            return `url(\"#${textFillId}\")`;\n        }\n        if (props._renderingConfiguration?.spotColors && props.fillSpotColorDefinition) {\n            return `${props.fill} ${spotColorDefinitionString(props.fillSpotColorDefinition)}`;\n        }\n        return props.fill;\n    };\n\n    return (\n        <>\n            <defs>\n                {props.textFillImage && (\n                    <pattern\n                        id={textFillId}\n                        patternUnits=\"userSpaceOnUse\"\n                        width={props.textFillImage.scale * props.textFillImage.width}\n                        height={props.textFillImage.scale * props.textFillImage.height}\n                        x={0}\n                        y={0}\n                    >\n                        <image\n                            href={props.textFillImage.src}\n                            xlinkHref={props.textFillImage.src}\n                            width={props.textFillImage.scale * props.textFillImage.width}\n                            height={props.textFillImage.scale * props.textFillImage.height}\n                        />\n                    </pattern>\n                )}\n                <style\n                    type=\"text/css\"\n                    dangerouslySetInnerHTML={{\n                        __html: `\n                        @font-face {\n                            font-family: '${props.fontData.name}';\n                            src: url('${props.fontData.assetUrl}') format('truetype');\n                        }\n                        `,\n                    }}\n                />\n                {props.curved && props.paths ? <path id={curvedPathId} d={props.paths[0]} /> : undefined}\n            </defs>\n            {props._renderingConfiguration?.debug ? (\n                <rect stroke=\"blue\" fill=\"none\" x={props.x} y={props.y} width={props.width} height={props.height} />\n            ) : undefined}\n\n            <g mask={props.stepName ? undefined : props.mask}>\n                <g transform={`matrix(${rotC}, ${-rotS}, ${rotS}, ${rotC}, ${xTranslation}, ${yTranslation})`}>\n                    <text\n                        xmlSpace=\"preserve\"\n                        fontFamily={`'${props.fontData.name}'`}\n                        fontSize={props.fontSize}\n                        fontStyle=\"normal\"\n                        fontWeight=\"normal\"\n                        fill={getFill()}\n                        style={{\n                            whiteSpace: \"pre\",\n                            userSelect: \"none\",\n                        }}\n                        stroke={stroke}\n                        strokeWidth={strokeWidth}\n                    >\n                        {props.curved ? (\n                            <TextPath text={text} curvedPathId={curvedPathId} align={props.align} />\n                        ) : (\n                            lines.map((line, idx) => {\n                                return (\n                                    <TextSpan\n                                        key={idx}\n                                        align={props.vertical ? \"center\" : props.align}\n                                        fontSize={props.fontSize}\n                                        thisLineIdx={idx}\n                                        amountLines={lines.length}\n                                        text={line}\n                                        textboxHeight={props.height}\n                                        textboxWidth={props.width}\n                                        lineHeight={props.lineHeight}\n                                        vertical={props.vertical}\n                                        verticalAlign={props.verticalAlign}\n                                        fontData={props.fontData!}\n                                    />\n                                );\n                            })\n                        )}\n                    </text>\n                </g>\n            </g>\n        </>\n    );\n};\n\nconst TextSpan: PapyrusComponent<{\n    text: string;\n    fontSize: number;\n    thisLineIdx: number;\n    amountLines: number;\n    lineHeight?: number;\n    textboxHeight: number;\n    textboxWidth: number;\n    align?: string;\n    vertical?: boolean;\n    verticalAlign?: string;\n    fontData: FontData;\n}> = (props) => {\n    const calcLineHeight = (): number => {\n        if (props.lineHeight !== undefined) {\n            // The lineHeight prop is only used by the deprecated, traditional algorithm.\n            // If the lineHeight prop is present then calculate the line height the old way.\n            return props.lineHeight * props.fontSize;\n        }\n        // Otherwise, calculate the line height in the same way as the\n        // linesThatFit function of the autosize algorithm.\n        const cache = getFontMetrics(props.fontData.assetUrl);\n        const font = cache.getFont();\n        const fontScale = props.fontSize / font.unitsPerEm;\n        return cache.getApproximateHeight() * fontScale;\n    };\n\n    const getX = () => {\n        if (props.align === \"left\") {\n            return -props.textboxWidth / 2.0;\n        }\n        if (props.align === \"right\") {\n            return props.textboxWidth / 2.0;\n        }\n        return 0.0;\n    };\n\n    // TODO: Write tests for this logic. Check coverage for lines\n    const getY = () => {\n        const lineHeight = calcLineHeight();\n        const halfBoxHeight = props.textboxHeight / 2.0;\n\n        if (props.verticalAlign === \"top\") {\n            return -halfBoxHeight + (props.fontSize * 3) / 4 + props.thisLineIdx * lineHeight;\n        }\n\n        if (props.verticalAlign === \"bottom\") {\n            const reverseIdx = props.amountLines - 1 - props.thisLineIdx;\n            return halfBoxHeight - props.fontSize / 4 - reverseIdx * lineHeight;\n        }\n\n        // Vertically align to middle.\n        // Lines before the middle line shift up,\n        // lines after the middle line shift down.\n        const middleLineIdx = (props.amountLines - 1) / 2.0;\n        return (props.thisLineIdx - middleLineIdx) * lineHeight + props.fontSize / 4;\n    };\n\n    return (\n        <tspan textAnchor={getAnchor(props.align)} x={getX()} y={`${getY()}px`}>\n            {props.text}\n        </tspan>\n    );\n};\n\nconst TextPath: PapyrusComponent<{\n    text: string;\n    curvedPathId: string;\n    align?: string;\n}> = (props) => {\n    const targetId = `#${props.curvedPathId}`;\n    const getStartOffset = () => {\n        if (props.align === \"left\") {\n            return \"0%\";\n        }\n        if (props.align === \"right\") {\n            return \"100%\";\n        }\n        return \"50%\";\n    };\n    return (\n        <textPath\n            startOffset={getStartOffset()}\n            textAnchor={getAnchor(props.align)}\n            href={targetId}\n            xlinkHref={targetId}\n        >\n            {props.text}\n        </textPath>\n    );\n};\n","import { Image } from \"./Image\";\nimport { modifySVGWithElementProperties } from \"../util/illustration\";\nimport { degreesToRadians } from \"../util/math\";\nimport { IllustrationElement, PapyrusComponent } from \"../types\";\n\nexport const Illustration: PapyrusComponent<Omit<IllustrationElement, \"type\">> = (props) => {\n    // When caching is enabled we use the provided cached objectURL, this is much faster\n    // than traversing and rendering the svg entirely inline.\n\n    if (props.cachedObjectURL && !props._renderingConfiguration?.omitCachedFields) {\n        return (\n            <Image\n                id={props.id}\n                src={props.cachedObjectURL}\n                x={props.x}\n                y={props.y}\n                width={props.width}\n                height={props.height}\n                rotation={props.rotation}\n                preserveAspectRatio=\"none\"\n                immutable={props.immutable}\n                mask={props.stepName ? undefined : props.mask}\n            />\n        );\n    }\n\n    const rotation = props.rotation || 0;\n    const angleInRadians = degreesToRadians(rotation);\n    const rotC = Math.cos(angleInRadians);\n    const rotS = -Math.sin(angleInRadians);\n\n    const transform = `\n    matrix(1, 0, 0, 1, ${props.x}, ${props.y})\n    matrix(1, 0, 0, 1, ${props.width / 2}, ${props.height / 2})\n    matrix(${rotC}, ${-rotS}, ${rotS}, ${rotC}, 0, 0)\n    matrix(1, 0, 0, 1, ${-props.width / 2}, ${-props.height / 2})\n    `;\n\n    if (!props.svg) {\n        throw new Error(\n            `Illustration element ${props.id} (stepName ${props.stepName}) lacked svg from src ${props.src} at render time.`,\n        );\n    }\n\n    return (\n        <g mask={props.stepName ? undefined : props.mask}>\n            <g\n                transform={transform}\n                dangerouslySetInnerHTML={{\n                    __html: modifySVGWithElementProperties(\n                        props.svg,\n                        props.width,\n                        props.height,\n                        props.colors,\n                        props._renderingConfiguration?.spotColors,\n                    ),\n                }}\n            />\n        </g>\n    );\n};\n","import { SVGLayoutProps, SVGLayout } from \"./Elements/SVGLayout\";\nimport { CanvasCommand, CreateLayoutCommand } from \"./command\";\nimport { Image } from \"./Elements/Image\";\nimport { Frame } from \"./Elements/Frame\";\nimport { Group } from \"./Elements/Group\";\nimport { Textbox } from \"./Elements/Textbox\";\nimport { Illustration } from \"./Elements/Illustration\";\nimport { generate } from \"./util/guid\";\n\nimport {\n    LayoutsState,\n    ILayout,\n    LayoutElement,\n    ImageElement,\n    FrameElement,\n    IllustrationElement,\n    TextboxElement,\n    RenderingConfiguration,\n    LayoutState,\n    Layerable,\n    PapyrusNode,\n    PapyrusComponent,\n    LayoutElementType,\n    GroupElement,\n} from \"./types\";\n\nexport interface CommandState {\n    transaction: LayoutsState;\n}\n\nexport interface LayoutComponentConfiguration {\n    renderingConfiguration: RenderingConfiguration;\n    outlineArea?: {\n        x?: number;\n        y?: number;\n        width?: number;\n        height?: number;\n        scale?: number;\n        // If true the outline area won't be stroked.\n        hidden?: boolean;\n    };\n    viewBox?: {\n        x: number;\n        y: number;\n        width: number;\n        height: number;\n    };\n    maxHeight?: string;\n    maxWidth?: string;\n    height?: string | number;\n    width?: string | number;\n    position?: string;\n    borderRadius?: number;\n    outlineColor?: string;\n    backgroundColor?: string;\n}\n\nexport class CommandContext {\n    private state: undefined | CommandState;\n    private stateCallbacks: (() => void)[];\n    private id: string;\n\n    private prevCommands: CanvasCommand[];\n    private nextCommands: CanvasCommand[];\n\n    constructor() {\n        this.id = generate();\n        this.stateCallbacks = [];\n        this.prevCommands = [];\n        this.nextCommands = [];\n    }\n\n    registerStateCallback(callback: () => void) {\n        this.stateCallbacks.push(callback);\n    }\n\n    unregisterStateCallback(callback: () => void) {\n        this.stateCallbacks.filter((cb) => cb !== callback);\n    }\n\n    getState() {\n        return this.state;\n    }\n\n    private runStateCallbacks() {\n        this.stateCallbacks.forEach((cb) => cb());\n    }\n\n    apply(command: CanvasCommand, leaveOffUndoStack?: boolean) {\n        if (!this.state) {\n            throw new Error(`State not initialized for cc ${this.id}!`);\n        }\n        this.state = this.commandReducer(this.state, command);\n        this.runStateCallbacks();\n        this.nextCommands = [];\n        if (!leaveOffUndoStack) {\n            this.prevCommands.push(command);\n        }\n    }\n\n    undo() {\n        if (!this.state) {\n            return;\n        }\n        const mostRecentCommand = this.prevCommands.pop();\n        if (!mostRecentCommand) {\n            return;\n        }\n        const undoneState = mostRecentCommand.undo();\n        this.state = { ...this.state, transaction: undoneState };\n        this.nextCommands.push(mostRecentCommand);\n        this.runStateCallbacks();\n    }\n\n    redo() {\n        if (!this.state) {\n            return;\n        }\n        const mostImminentCommand = this.nextCommands.pop();\n        if (!mostImminentCommand) {\n            return;\n        }\n        this.state = this.commandReducer(this.state, mostImminentCommand);\n        this.runStateCallbacks();\n        this.prevCommands.push(mostImminentCommand);\n    }\n\n    /**\n     * Find all commands in history with the given sequence ID,\n     * discard all but the last and overwrite its oldState.\n     */\n    public flattenSequence(sequenceId: string, initialState: LayoutsState) {\n        const commandSequence = this.prevCommands.filter((c) => c.sequenceId === sequenceId);\n        const mostRecentCommand = commandSequence.pop();\n        if (!mostRecentCommand) {\n            return;\n        }\n        this.prevCommands = this.prevCommands.filter((c) => c.sequenceId !== sequenceId);\n        mostRecentCommand?.overrideOldState(initialState);\n        this.prevCommands.push(mostRecentCommand);\n    }\n\n    getLayoutById(layoutId: string): LayoutData {\n        if (!this.state) {\n            throw new Error(`State not initialized for cc ${this.id}!`);\n        }\n        const transactionState = this.state.transaction?.layouts?.[layoutId];\n        const layout = transactionState?.layout;\n        if (!layout) {\n            throw new Error(`No layout: ${layoutId}`);\n        }\n        const els = [...(transactionState?.elements || [])];\n        return this.getLayoutDataWithState(layout, els);\n    }\n\n    getAllLayouts() {\n        if (!this.state) {\n            throw new Error(`State not initialized for cc ${this.id}!`);\n        }\n        const layoutNamesWithDupes = [...Object.keys(this.state.transaction?.layouts)];\n        const layoutNames = [...new Set(layoutNamesWithDupes)];\n        return layoutNames.map((id) => this.getLayoutById(id));\n    }\n\n    private getLayoutDataWithState(layout: ILayout, elements: LayoutElement[]) {\n        return {\n            layoutState: {\n                layout,\n                elements,\n            },\n            Component: SVGLayout,\n            getComponentWithProps: (configuration: LayoutComponentConfiguration) => {\n                return getSvgElement(layout, elements, configuration);\n            },\n        } as LayoutData;\n    }\n\n    initialize(layouts: ILayout[], reloadedState?: LayoutsState) {\n        if (reloadedState) {\n            this.state = {\n                transaction: reloadedState,\n            };\n            return;\n        }\n        let newState: LayoutsState = {\n            serializableWorkflow: { steps: [] },\n            layouts: {},\n        };\n        layouts.forEach((layout) => {\n            newState = new CreateLayoutCommand(layout).apply(newState);\n        });\n        this.runStateCallbacks();\n        this.state = {\n            transaction: newState,\n        };\n    }\n\n    private commandReducer(state: CommandState, command: CanvasCommand): CommandState {\n        const transactionState = state.transaction || { layouts: {}, serializableWorkflow: { steps: [] } };\n        return { ...state, transaction: command.apply(transactionState) };\n    }\n}\n\nexport const elementFactory = (element: LayoutElement): PapyrusNode => {\n    if (element.type === LayoutElementType.Image) {\n        return <Image key={element.id} {...(element as ImageElement)} />;\n    }\n    if (element.type === LayoutElementType.Frame) {\n        return <Frame key={element.id} {...(element as FrameElement)} />;\n    }\n    if (element.type === LayoutElementType.Illustration) {\n        return <Illustration key={element.id} {...(element as IllustrationElement)} />;\n    }\n    if (element.type === LayoutElementType.Textbox) {\n        return <Textbox key={element.id} {...(element as TextboxElement)} />;\n    }\n    if (element.type === LayoutElementType.Group) {\n        return <Group key={element.id} {...(element as GroupElement)} />;\n    }\n    return null;\n};\n\nexport const getSvgElement = (\n    layout: ILayout,\n    elements: LayoutElement[],\n    configuration: LayoutComponentConfiguration,\n): PapyrusNode => {\n    const renderingConfiguration = configuration.renderingConfiguration;\n\n    // Filter elements if required, any element can be tagged with exclude for print, meaning\n    // that its value will not be sent up to the server.\n    const filteredElements = renderingConfiguration?.removeExcludedElements\n        ? elements.filter((el) => !el.excludeFromExport)\n        : elements;\n\n    return (\n        <SVGLayout\n            preserveAspectRatio={undefined}\n            elements={filteredElements}\n            backgroundColor={\n                layout.transparentBackground\n                    ? undefined\n                    : configuration.backgroundColor\n                      ? configuration.backgroundColor\n                      : \"white\"\n            }\n            width={configuration.width || layout.width}\n            height={configuration.height || layout.height}\n            viewBox={\n                renderingConfiguration?.region\n                    ? {\n                          x: renderingConfiguration.region.left,\n                          y: renderingConfiguration.region.top,\n                          width: renderingConfiguration.region.width,\n                          height: renderingConfiguration.region.height,\n                      }\n                    : {\n                          x: 0,\n                          y: 0,\n                          width: layout.width,\n                          height: layout.height,\n                      }\n            }\n            configuration={renderingConfiguration}\n            outlineArea={configuration.outlineArea}\n            maxHeight={configuration.maxHeight}\n            maxWidth={configuration.maxWidth}\n            position={configuration.position}\n            borderRadius={configuration.borderRadius}\n            outlineColor={configuration.outlineColor}\n        />\n    );\n};\n\n/**\n * Computes a list of elements sorted by layers first, lowest to highest. Followed by index within that layer, lowest to highest.\n * @returns The original array reference. Sorted in place.\n */\nexport function sortElementsByLayersWithIndex<T extends Layerable>(items: T[]): T[] {\n    return items.sort((a, b) => {\n        // Sort by layer first as this is the more significant factor.\n        const aLayer = a.layer || 0;\n        const bLayer = b.layer || 0;\n        if (aLayer < bLayer) return -1;\n        if (aLayer > bLayer) return 1;\n        // If layer is equal, sort by index instead. Elements on the same layer\n        // may be re-ordered amongst eachother.\n        const aLayerIndex = a.layerIndex || 0;\n        const bLayerIndex = b.layerIndex || 0;\n        if (aLayerIndex < bLayerIndex) return -1;\n        if (aLayerIndex > bLayerIndex) return 1;\n        // Otherwise, they are at exactly the same place from a layering perspective, this actually isn't good. It means\n        // we would be relying on stable sorting to ensure the elements don't fall out of the order we would expect.\n        return 0;\n    });\n}\n\nexport interface LayoutData {\n    layoutState: LayoutState;\n    Component: PapyrusComponent<SVGLayoutProps>;\n    getComponentWithProps: (configuration: LayoutComponentConfiguration) => PapyrusNode;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeDataUriToBuffer = void 0;\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n */\nconst makeDataUriToBuffer = (convert) => (uri) => {\n    uri = String(uri);\n    if (!/^data:/i.test(uri)) {\n        throw new TypeError('`uri` does not appear to be a Data URI (must begin with \"data:\")');\n    }\n    // strip newlines\n    uri = uri.replace(/\\r?\\n/g, '');\n    // split the URI up into the \"metadata\" and the \"data\" portions\n    const firstComma = uri.indexOf(',');\n    if (firstComma === -1 || firstComma <= 4) {\n        throw new TypeError('malformed data: URI');\n    }\n    // remove the \"data:\" scheme and parse the metadata\n    const meta = uri.substring(5, firstComma).split(';');\n    let charset = '';\n    let base64 = false;\n    const type = meta[0] || 'text/plain';\n    let typeFull = type;\n    for (let i = 1; i < meta.length; i++) {\n        if (meta[i] === 'base64') {\n            base64 = true;\n        }\n        else if (meta[i]) {\n            typeFull += `;${meta[i]}`;\n            if (meta[i].indexOf('charset=') === 0) {\n                charset = meta[i].substring(8);\n            }\n        }\n    }\n    // defaults to US-ASCII only if type is not provided\n    if (!meta[0] && !charset.length) {\n        typeFull += ';charset=US-ASCII';\n        charset = 'US-ASCII';\n    }\n    // get the encoded data portion and decode URI-encoded chars\n    const data = unescape(uri.substring(firstComma + 1));\n    const buffer = base64 ? convert.base64ToArrayBuffer(data) : convert.stringToBuffer(data);\n    return {\n        type,\n        typeFull,\n        charset,\n        buffer,\n    };\n};\nexports.makeDataUriToBuffer = makeDataUriToBuffer;\n//# sourceMappingURL=common.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dataUriToBuffer = void 0;\nconst common_1 = require(\"./common\");\nfunction base64ToArrayBuffer(base64) {\n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    const bytes = [];\n    for (let i = 0; i < base64.length; i += 4) {\n        const idx0 = chars.indexOf(base64.charAt(i));\n        const idx1 = chars.indexOf(base64.charAt(i + 1));\n        const idx2 = base64.charAt(i + 2) === '='\n            ? 0\n            : chars.indexOf(base64.charAt(i + 2));\n        const idx3 = base64.charAt(i + 3) === '='\n            ? 0\n            : chars.indexOf(base64.charAt(i + 3));\n        const bin0 = (idx0 << 2) | (idx1 >> 4);\n        const bin1 = ((idx1 & 15) << 4) | (idx2 >> 2);\n        const bin2 = ((idx2 & 3) << 6) | idx3;\n        bytes.push(bin0);\n        if (base64.charAt(i + 2) !== '=')\n            bytes.push(bin1);\n        if (base64.charAt(i + 3) !== '=')\n            bytes.push(bin2);\n    }\n    const buffer = new ArrayBuffer(bytes.length);\n    const view = new Uint8Array(buffer);\n    view.set(bytes);\n    return buffer;\n}\nfunction stringToBuffer(str) {\n    // Create a buffer with length equal to the string length\n    const buffer = new ArrayBuffer(str.length);\n    // Create a view to manipulate the buffer content\n    const view = new Uint8Array(buffer);\n    // Iterate over the string and populate the buffer with ASCII codes\n    for (let i = 0; i < str.length; i++) {\n        view[i] = str.charCodeAt(i);\n    }\n    return buffer;\n}\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n */\nexports.dataUriToBuffer = (0, common_1.makeDataUriToBuffer)({ stringToBuffer, base64ToArrayBuffer });\n//# sourceMappingURL=index.js.map","import { domParser, fetchAsArrayBuffer, fetchAsString } from \"./crossplatform\";\nimport { FrameOffsets, OptionResource, Region, VariantResource } from \"../types\";\nimport { getAttributesFromArrayBuffer } from \"./image\";\nimport { FrameData, PatternImageData } from \"../types\";\nimport { dataUriToBuffer } from \"data-uri-to-buffer\";\nimport { optionService } from \"../services/option\";\n\n/**\n * A map of src to pattern image data.\n */\nexport const patternImageDataCache = new Map<string, PatternImageData>();\n\n/**\n * A map of frame path to frame data relevant to that path.\n */\nexport const frameDataCache = new Map<string, FrameData>();\n/**\n * A cache of frame data generating promises.\n */\nconst frameDataPromiseCache = new Map<string, Promise<FrameData>>();\n\nexport const generateFrameSVG = async (region?: Region, src?: string): Promise<string> => {\n    if (!src) {\n        if (!region) throw new Error(\"No region or src supplied. Cannot construct frame!\");\n        return generateDefaultRectangleFrameSvg(region);\n    }\n    return fetchAsString(src);\n};\n\n/**\n * TODO: This function isn't required anymore as the Group element will render a rect internally when no clipPath is given.\n * @param region A region to generate a rect from\n * @returns An SVG string representing a rectangle frame\n */\nexport const generateDefaultRectangleFrameSvg = (region: Region): string => {\n    const width = region.width;\n    const height = region.height;\n    return `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${width} ${height}'>\n        <path id=\"target-path\" d='M0 0 h ${width} v ${height} h ${-width} Z' />\n    </svg>\n    `;\n};\n\nexport const getVariant = async (\n    designInputStepData: any, // FrameDesignInputStepData from generation types\n    option?: OptionResource,\n): Promise<VariantResource | undefined> => {\n    if (!option) {\n        return undefined;\n    }\n    const variant = await optionService.getDefaultVariant(option, designInputStepData.frameVariantId);\n    if (!variant) {\n        throw new Error(`No variant with ID: ${designInputStepData.frameVariantId}`);\n    }\n    if (!variant.asset) {\n        throw new Error(`No asset for variant with ID: ${designInputStepData.frameVariantId}`);\n    }\n    return variant;\n};\n\nexport const getFrameData = async (frameSvg: string): Promise<FrameData> => {\n    if (frameDataPromiseCache.has(frameSvg)) {\n        return frameDataPromiseCache.get(frameSvg)!;\n    }\n    const getFrameDataPromise = async () => {\n        if (frameDataCache.has(frameSvg)) {\n            return frameDataCache.get(frameSvg)!;\n        }\n        await new Promise((resolve) => setTimeout(resolve, 0));\n        const parser = domParser();\n        const frameDocument = parser.parseFromString(frameSvg, \"image/svg+xml\");\n        const svg: Element | undefined = frameDocument.querySelector(\"svg\");\n        if (!svg) {\n            throw new Error(\"Malformed frame SVG: <svg> tag not found\");\n        }\n        const viewBox = svg.getAttribute(\"viewBox\");\n        if (!viewBox) {\n            throw new Error(\"SVG missing viewBox.\");\n        }\n        const viewBoxElems = viewBox.split(\" \");\n        const viewBoxHeight = parseFloat(viewBoxElems[3]) || 1;\n        const viewBoxWidth = parseFloat(viewBoxElems[2]) || 1;\n\n        const elementById = frameDocument.getElementById(\"target-path\");\n        const elementByClass = frameDocument.getElementsByClassName(\"st0\").item(0);\n\n        // Newer frames specify a target id that we search for.\n        if (elementById) {\n            const path = elementById.getAttribute(\"d\");\n            if (!path) {\n                throw new Error(\"Malformed frame SVG: 'd' attribute not found on target element\");\n            }\n            const data = {\n                path,\n                width: viewBoxWidth,\n                height: viewBoxHeight,\n            };\n            frameDataCache.set(path, data);\n            return data;\n        }\n\n        // Common case in older frames, we have this code for backwards compat\n        if (elementByClass) {\n            const path = elementByClass.getAttribute(\"d\");\n            if (!path) {\n                throw new Error(\"Malformed frame SVG: 'd' attribute not found on target element\");\n            }\n            const data = {\n                path,\n                width: viewBoxWidth,\n                height: viewBoxHeight,\n            };\n            frameDataCache.set(path, data);\n            return data;\n        }\n\n        throw new Error(\"Malformed frame SVG\");\n    };\n    const frameDataPromise = getFrameDataPromise();\n    frameDataPromiseCache.set(frameSvg, frameDataPromise);\n    return frameDataPromise;\n};\n\nexport const calculateOffsets = (\n    imageData: PatternImageData,\n    frameData: FrameData,\n    /** @deprecated These values were used by the old imposition system. */\n    nondefaults?: { scale?: number; left?: number; top?: number },\n    forceImageCover?: boolean,\n): FrameOffsets => {\n    // Calculate the aspect ratios of the frame and the image\n    const frameAspectRatio = frameData.width / frameData.height;\n    const imageAspectRatio = imageData.width / imageData.height;\n\n    let scaleFactor;\n    if (forceImageCover) {\n        // Ensure image covers the entire frame\n        if (imageAspectRatio > frameAspectRatio) {\n            // Image is wider, scale based on frame height\n            scaleFactor = frameData.height / imageData.height;\n        } else {\n            // Image is taller, scale based on frame width\n            scaleFactor = frameData.width / imageData.width;\n        }\n    } else {\n        if (imageAspectRatio > frameAspectRatio) {\n            // Image is wider, scale based on frame width\n            scaleFactor = frameData.width / imageData.width;\n        } else {\n            // Image is taller, scale based on frame height\n            scaleFactor = frameData.height / imageData.height;\n        }\n    }\n\n    if (nondefaults?.scale !== undefined) {\n        scaleFactor *= nondefaults?.scale;\n    }\n\n    // Compute center and left/top offsets\n    const frameCenterHorizontal = frameData.width / 2;\n    const frameCenterVertical = frameData.height / 2;\n    const defaultLeft = frameCenterHorizontal - (imageData.width / 2) * scaleFactor;\n    const left = nondefaults?.left || defaultLeft;\n    const defaultTop = frameCenterVertical - (imageData.height / 2) * scaleFactor;\n    const top = nondefaults?.top || defaultTop;\n    return {\n        x: left,\n        y: top,\n        zoom: scaleFactor,\n        rotation: 0,\n    };\n};\n\nexport const getPatternImageData = async (src: string): Promise<PatternImageData> => {\n    // Check the cache first.\n    if (patternImageDataCache.has(src)) {\n        return patternImageDataCache.get(src)!;\n    }\n\n    if (src.startsWith(\"data:image/svg+xml\")) {\n        const parsed = dataUriToBuffer(src);\n        const svg = new TextDecoder().decode(parsed.buffer);\n        const attributes = svgStringDimensions(svg);\n        const data = {\n            src: src,\n            width: attributes.width,\n            height: attributes.height,\n            aspect: attributes.width / attributes.height,\n        };\n        patternImageDataCache.set(src, data);\n        return data;\n    }\n\n    // Otherwise load dimensions based on file type. SVG uses viewbox,\n    // raster is based on natural dimensions\n    const extension = src.split(\".\").pop()?.toLowerCase() ?? \"\";\n    if (extension === \"svg\") {\n        const svgData = await GetSVGDimensions(src);\n        const width = svgData.width;\n        const height = svgData.height;\n        const data = {\n            src: src,\n            width,\n            height,\n            aspect: width / height,\n        };\n        patternImageDataCache.set(src, data);\n        return data;\n    } else {\n        const arrayBuffer = await fetchAsArrayBuffer(src, true);\n        // TODO: for now let's assume that anything that doesn't have a .svg extension is a raster.\n        // Perhaps we should instead check the mime type to see if it doesn't have an svg mime type.\n        //const mimeType = getMimeTypeOfArrayBuffer(arrayBuffer);\n        //const isJpgExtension = extension === \"jpg\" || extension === \"jpeg\";\n        const attributes = await getAttributesFromArrayBuffer(arrayBuffer);\n        const data = {\n            src: src,\n            width: attributes.width,\n            height: attributes.height,\n            aspect: attributes.width / attributes.height,\n        };\n        patternImageDataCache.set(src, data);\n        return data;\n    }\n};\n\n/**\n * Returns dimensions of a given svg string in viewbox and rendered form and a dataURL allowing for\n * the SVG to be rendered cross origin on a canvas.\n * @param src The source for the SVG\n */\nexport const GetSVGDimensions = async (\n    src: string,\n): Promise<{\n    width: number;\n    height: number;\n}> => {\n    const svgText = await fetchAsString(src);\n    return svgStringDimensions(svgText);\n};\n\n/**\n * Handle the different ways that lengths may be specified in an SVG.\n */\nconst lengthToPixels = (length: string): number => {\n    if (length.endsWith(\"mm\")) {\n        return Number(length.replace(\"mm\", \"\")) * 3.7795275591; // mm to px at 96dpi.\n    }\n    if (length.endsWith(\"px\")) {\n        return Number(length.replace(\"px\", \"\"));\n    }\n    return Number(length); // Bare pixel amount.\n};\n\n/**\n * Return the dimensions of an SVG string.\n */\nexport const svgStringDimensions = (svgText: string): { width: number; height: number } => {\n    const parser = domParser();\n    const svgDOM = parser.parseFromString(svgText, \"image/svg+xml\");\n    const svgElement = svgDOM.querySelector(\"svg\");\n    if (!svgElement) {\n        throw new Error(\"No svg tag found, this svg must be malformed!\");\n    }\n    const viewBox = svgElement.getAttribute(\"viewBox\");\n    const width = svgElement.getAttribute(\"width\");\n    const height = svgElement.getAttribute(\"height\");\n\n    // Prioritize explicit height and width.\n    const viewBoxValues =\n        height && width\n            ? [0, 0, lengthToPixels(width), lengthToPixels(height)]\n            : viewBox?.split(\" \").map((str: string) => Number(str));\n    if (!viewBoxValues) {\n        throw new Error(\"No viewbox or width/height values detected on SVG file!\");\n    }\n    return {\n        width: viewBoxValues[2],\n        height: viewBoxValues[3],\n    };\n};\n","import { generate } from \"../util/guid\";\nimport {\n    ColorDefinition,\n    FontData,\n    FrameElement,\n    FrameStepData,\n    IllustrationElement,\n    ImageElement,\n    LayoutElementType,\n    PictureStepData,\n    Region,\n    TextAlgorithm,\n    TextboxElement,\n    TextStepData,\n} from \"../types\";\nimport { getFontMetrics, loadFont } from \"../util/font\";\nimport { generateFrameSVG, getFrameData } from \"../util/frame\";\nimport { applyTextTransformations, getTextAlignment, recomputeTextOnElement, textWidth } from \"../text/shared\";\nimport { getAttributesFromArrayBuffer } from \"../util/image\";\nimport { LayoutData } from \"../CommandContext\";\nimport { generateSVGWithUnknownColors } from \"../util/illustration\";\nimport { Pith } from \"pith\";\nimport { recalculateTextboxRegion } from \"../text/algorithm/traditional\";\nimport { domParser, fetch, fetchAsArrayBuffer, fetchAsString, xmlSerializer } from \"../util/crossplatform\";\nimport { createCanvas, getDomParser, loadImage } from \"../customCanvas\";\n\nconst nextIndexForLayer = (layout: LayoutData, layer: number): number => {\n    const elements = layout.layoutState.elements.filter((el) => el.layer === layer);\n    const maxIndex = Math.max(...(elements.map((el) => el.layerIndex).filter((li) => li !== undefined) as number[]));\n    return Math.max(maxIndex, 0) + 1;\n};\n\nconst getIllustrationBody = async (src: string): Promise<string> => {\n    return new Promise((resolve) => {\n        fetchAsString(src as string)\n            .then((svg) => {\n                resolve(svg);\n            })\n            .catch((e) => console.error(e));\n    });\n};\n\nconst svgPromiseCache = new Map<string, Promise<string>>();\n\n/**\n * @param svg The SVG to get an object URL for.\n * @returns An object URL storing the cached image of this svg file.\n */\nexport const svgObjectURL = async (svg: string): Promise<string> => {\n    if (svgPromiseCache.has(svg)) {\n        return svgPromiseCache.get(svg)!;\n    }\n\n    const getCanvasObjectURLAsync = async (canvas: HTMLCanvasElement): Promise<string> => {\n        return new Promise((resolve, reject) => {\n            try {\n                const canBuildObjectURL = !!URL && !!URL.createObjectURL;\n                if (!canBuildObjectURL) throw new Error(\"Environment incapable of generating ObjectURL\");\n                canvas.toBlob((blob) => {\n                    if (!blob) {\n                        if (canvas.width === 0 || canvas.height === 0)\n                            throw new Error(`Canvas dimensions are invalid (${canvas.width},${canvas.height})`);\n                        else if (canvas.width * canvas.height >= 268435456)\n                            throw new Error(`Canvas dimensions exceed device limit (${canvas.width},${canvas.height})`);\n                        throw new Error(\"Couldn't generate object URL for Illustration, the blob was undefined!\");\n                    }\n                    resolve(URL.createObjectURL(blob));\n                });\n            } catch (e: any) {\n                reject(e);\n            }\n        });\n    };\n\n    const getPromise = async () => {\n        const parser = domParser();\n        const parsedSvg = parser.parseFromString(svg, \"image/svg+xml\");\n        const root = parsedSvg.firstElementChild;\n\n        if (!root) {\n            throw new Error(\"Failed to read SVG\");\n        }\n\n        const serialiser = xmlSerializer();\n        const rebuiltSvg = serialiser.serializeToString(root);\n        const canvas = createCanvas();\n        const ctx = canvas.getContext(\"2d\")!;\n        const pith = await Pith.from(ctx as any, rebuiltSvg, {\n            anonymousCrossOrigin: true,\n            ignoreDimensions: false,\n            createCanvas: createCanvas as any,\n            createImage: loadImage as any,\n            DOMParser: getDomParser(),\n            fetch: fetch,\n        });\n\n        const widthString = root.getAttribute(\"width\");\n        const heightString = root.getAttribute(\"height\");\n        const cachedIllustrationQuality = 2048;\n        if (heightString && widthString) {\n            const height = parseFloat(heightString);\n            const width = parseFloat(widthString);\n            const aspect = width / height;\n            if (aspect > 1) {\n                // Wider than high\n                pith.resize(cachedIllustrationQuality, cachedIllustrationQuality / aspect);\n            } else {\n                // Higher than wide\n                pith.resize(cachedIllustrationQuality * aspect, cachedIllustrationQuality);\n            }\n        } else {\n            pith.resize(cachedIllustrationQuality, cachedIllustrationQuality);\n        }\n\n        await pith.render();\n        return await getCanvasObjectURLAsync(canvas as any);\n    };\n    const promise = getPromise();\n    svgPromiseCache.set(svg, promise);\n    return promise;\n};\n\n/**\n * Calculate a centered and reasonably sized region for the layout and content.\n */\nconst centralRegion = async (\n    layout: LayoutData,\n    type: LayoutElementType,\n    link?: string,\n    opts?: { text?: string; fontScale?: number },\n): Promise<Region> => {\n    const coords = (layout.layoutState.layout.useEditableArea && layout.layoutState.layout.editableArea) || {\n        width: layout.layoutState.layout.width,\n        height: layout.layoutState.layout.height,\n        x: 0,\n        y: 0,\n    };\n    const lesserDim = coords.width < coords.height ? coords.width : coords.height;\n    const size = layout.layoutState.layout.useEditableArea ? lesserDim / 1.3 : lesserDim / 2;\n\n    const region = {\n        top: coords.y + coords.height / 2 - size / 2,\n        left: coords.x + coords.width / 2 - size / 2,\n        width: size,\n        height: size,\n        rotation: 0,\n        panelId: layout.layoutState.layout.panelId,\n    };\n\n    if (link && type === LayoutElementType.Illustration) {\n        const svgData = await generateSVGWithUnknownColors(await getIllustrationBody(link));\n        const parser = domParser();\n        const parsedSvg = parser.parseFromString(svgData.svg, \"image/svg+xml\");\n        const svgEl = parsedSvg.firstElementChild as SVGElement;\n        const viewBox = svgEl.getAttribute(\"viewBox\");\n        if (!viewBox) throw new Error(\"SVG missing viewBox.\");\n        const oldHeight = region.height;\n        const viewBoxElems = viewBox.split(\" \");\n        const viewBoxWidth = parseFloat(viewBoxElems[2]) || 1;\n        const viewBoxHeight = parseFloat(viewBoxElems[3]) || 1;\n        const aspect = viewBoxWidth / viewBoxHeight;\n        region.height = region.width / aspect;\n        region.top += (oldHeight - region.height) / 2;\n    }\n\n    if (link && type === LayoutElementType.Image) {\n        const oldHeight = region.height;\n        const arrayBuffer = await fetchAsArrayBuffer(link);\n        const attributes = await getAttributesFromArrayBuffer(arrayBuffer);\n        const aspect = attributes.width / attributes.height;\n        region.height = region.width / aspect;\n        region.top += (oldHeight - region.height) / 2;\n    }\n\n    // When font size & text are provided, we compute based on the calculated text width\n    if (link && type === LayoutElementType.Textbox && opts?.text && opts?.fontScale) {\n        await loadFont(link);\n        const cache = getFontMetrics(link);\n        const calculatedTextWidth = textWidth(opts.text, opts?.fontScale, cache);\n        region.width = Math.min(calculatedTextWidth, coords.width * 0.85);\n        region.left = coords.x + coords.width / 2 - region.width / 2;\n    }\n\n    return region;\n};\n\nexport class LayoutElementFactory {\n    static async getFrame(\n        layout: LayoutData,\n        opts: {\n            region?: Region;\n            configuration: Partial<FrameStepData>;\n            src?: string;\n        },\n    ): Promise<FrameElement> {\n        const frameSvg = await generateFrameSVG(opts.region, opts.src);\n        const frameData = await getFrameData(frameSvg);\n\n        const region = opts.region || (await centralRegion(layout, LayoutElementType.Frame));\n\n        return {\n            id: generate(),\n            x: region.left,\n            y: region.top,\n            width: region.width,\n            height: region.height,\n            layer: region.layer || 0,\n            layerIndex: region.layerIndex || nextIndexForLayer(layout, region.layer || 0),\n            rotation: region.rotation,\n            scaleX: region.width / frameData.width,\n            scaleY: region.height / frameData.height,\n            path: frameData.path,\n            dataWidth: frameData.width,\n            dataHeight: frameData.height,\n            type: LayoutElementType.Frame,\n            disablePlaceholder: opts.configuration.disablePlaceholder,\n            focalBlur: opts.configuration.focalBlur,\n            focalBlurStrength: opts.configuration.focalBlurStrength,\n            focalBlurRadius: opts.configuration.focalBlurRadius,\n            forceImageCover: opts.configuration.forceImageCover,\n            pattern: undefined,\n            immutable: region.immutable,\n        };\n    }\n\n    static async getImage(\n        layout: LayoutData,\n        opts: {\n            region?: Region;\n            layout?: LayoutData;\n            configuration: Partial<PictureStepData>;\n            src: string;\n        },\n    ): Promise<ImageElement> {\n        const region = opts.region || (await centralRegion(layout, LayoutElementType.Image, opts.src));\n\n        return {\n            id: generate(),\n            src: opts.src,\n            type: LayoutElementType.Image,\n            y: region.top,\n            x: region.left,\n            rotation: region.rotation,\n            width: region.width,\n            height: region.height,\n            layer: region.layer || 0,\n            layerIndex: region.layerIndex || nextIndexForLayer(layout, region.layer || 0),\n            immutable: region.immutable,\n            preserveAspectRatio: \"none\",\n        };\n    }\n\n    static async getTextbox(\n        layout: LayoutData,\n        opts: {\n            region?: Region;\n            configuration: Partial<TextStepData>;\n            fontSrc: string;\n            designInputStep?: any; // TextDesignInputStepData old generation type from headless\n        },\n    ): Promise<TextboxElement> {\n        const { configuration, fontSrc, designInputStep } = opts;\n\n        // Load the font requested.\n        const font = await loadFont(fontSrc);\n        const fontData: FontData = {\n            assetUrl: fontSrc,\n            name: font.names.fullName[\"en\"],\n        };\n\n        const inputText = designInputStep?.text || configuration.defaultText || \"\";\n        const replacedText = configuration.replaceableText\n            ? configuration.replaceableText.replace(\"{{}}\", inputText)\n            : inputText;\n\n        // Transform based on configuration\n        const text = applyTextTransformations(replacedText, {\n            vertical: configuration.vertical,\n            uppercase: configuration.uppercase,\n        });\n\n        const region =\n            opts.region ||\n            (await centralRegion(layout, LayoutElementType.Textbox, fontSrc, {\n                text,\n                fontScale: configuration.size ? configuration.size / font.unitsPerEm : undefined,\n            }));\n\n        const recomputedElement = recomputeTextOnElement(\n            {\n                id: generate(),\n                type: LayoutElementType.Textbox,\n                x: region.left,\n                y: region.top,\n                width: region.width,\n                height: region.height,\n                align: getTextAlignment(configuration.textAlign, configuration.vertical),\n                curved: configuration.curved,\n                fill: designInputStep?.color || configuration.colour || \"#000000\",\n                fontData,\n                layer: region.layer || 0,\n                layerIndex: region.layerIndex || nextIndexForLayer(layout, region.layer || 0),\n                paths: configuration.paths,\n                rotation: region.rotation,\n                vertical: configuration.vertical,\n                verticalAlign: configuration.verticalAlign || \"middle\",\n                algorithm: TextAlgorithm.Traditional,\n                fontSize: configuration.size || Math.max(Math.round(region.height * 0.025), 1),\n                text,\n                input: inputText,\n            },\n            text,\n        );\n        const fittedRegion = recalculateTextboxRegion(\n            { ...region, height: recomputedElement.height },\n            fontData,\n            recomputedElement.fontSize,\n            recomputedElement?.text?.split(\"\\n\") || [],\n            recomputedElement.align,\n        );\n        return {\n            ...recomputedElement,\n            x: fittedRegion.left,\n            y: fittedRegion.top + (region.height - fittedRegion.height) / 2,\n            width: fittedRegion.width,\n            height: fittedRegion.height,\n        };\n    }\n\n    static async getShape(\n        layout: LayoutData,\n        opts: { region?: { item: Region; index: number }; color: string },\n    ): Promise<IllustrationElement> {\n        const svg = `\n                    <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                        xmlSpace=\"preserve\"\n                        preserveAspectRatio=\"none\"\n                        version=\"1.1\"\n                        width=\"1\"\n                        height=\"1\"\n                        viewBox=\"0 0 1 1\"\n                    >\n                        <rect\n                            x=\"0\"\n                            y=\"0\"\n                            width=\"1\"\n                            height=\"1\"\n                            class=\"spiff-fill-shape\"\n                            fill=\"${opts.color}\"\n                        />\n                    </svg>\n                `;\n        const colors: { [key: string]: ColorDefinition } = {};\n        colors[\"spiff-fill-shape\"] = { browserValue: opts.color };\n\n        const region = opts.region?.item || (await centralRegion(layout, LayoutElementType.Illustration));\n\n        const elementKey = generate();\n        return {\n            stepRegion: opts.region?.item,\n            stepRegionIndex: opts.region?.index,\n            colors,\n            id: elementKey,\n            svg,\n            type: LayoutElementType.Illustration,\n            y: region.top,\n            x: region.left,\n            rotation: region.rotation,\n            width: region.width,\n            height: region.height,\n            layer: region.layer || 0,\n            layerIndex: region.layerIndex || nextIndexForLayer(layout, region.layer || 0),\n            immutable: region.immutable,\n        };\n    }\n\n    static async getIllustration(\n        layout: LayoutData,\n        opts: { region?: { item: Region; index: number }; src: string },\n    ): Promise<IllustrationElement> {\n        const region = opts.region?.item || (await centralRegion(layout, LayoutElementType.Illustration, opts.src));\n\n        const svgData = await generateSVGWithUnknownColors(await getIllustrationBody(opts.src));\n        const objectURL = await svgObjectURL(svgData.svg);\n        const elementKey = generate();\n        return {\n            cachedObjectURL: objectURL,\n            stepRegion: opts.region?.item,\n            stepRegionIndex: opts.region?.index,\n            colors: svgData.colors,\n            id: elementKey,\n            src: opts.src,\n            svg: svgData.svg,\n            type: LayoutElementType.Illustration,\n            y: region.top,\n            x: region.left,\n            rotation: region.rotation,\n            width: region.width,\n            height: region.height,\n            layer: region.layer || 0,\n            layerIndex: region.layerIndex || nextIndexForLayer(layout, region.layer || 0),\n            immutable: region.immutable,\n        };\n    }\n}\n","import { sortElementsByLayersWithIndex } from \"./CommandContext\";\nimport { svgObjectURL } from \"./Elements/factory\";\nimport {\n    LayoutElement,\n    LayoutState,\n    LayoutsState,\n    IllustrationElement,\n    FrameElement,\n    LayoutElementType,\n    TextboxElement,\n} from \"./types\";\nimport { fetchAsString } from \"./util/crossplatform\";\nimport { loadFont } from \"./util/font\";\nimport { generate } from \"./util/guid\";\nimport { generateSVGWithUnknownColors, modifySVGWithElementProperties } from \"./util/illustration\";\n\nexport class ElementNotFoundError extends Error {\n    constructor() {\n        super(\"Element not found!\");\n        Object.setPrototypeOf(this, ElementNotFoundError.prototype);\n    }\n}\n\nconst findElement = <T extends LayoutElement>(id: string, layouts: LayoutState[]): T => {\n    const layout = findLayoutForElement(id, layouts);\n    const element = layout.elements.find((el) => el.id === id);\n    return element as T;\n};\n\nconst findLayoutForElement = (id: string, layouts: LayoutState[]): LayoutState => {\n    const layoutForElement = Object.values(layouts).find((layoutState: LayoutState) => {\n        return layoutState.elements.some((el) => el.id === id);\n    });\n    if (!layoutForElement) {\n        throw new ElementNotFoundError();\n    }\n    return layoutForElement;\n};\n\nconst updatedLayoutForElement = (element: LayoutElement, state: LayoutState): LayoutState => {\n    const updatedElements = [...state.elements.filter((el) => el.id !== element.id), element];\n    const layeredElements = sortElementsByLayersWithIndex(updatedElements);\n    return {\n        layout: state.layout,\n        elements: layeredElements,\n        modificationID: generate(),\n    };\n};\n\nconst rehydrateSerializedLayout = async (transactionState: LayoutsState) => {\n    const layoutNamesWithDupes = [...Object.keys(transactionState.layouts)];\n    const layoutNames = [...new Set(layoutNamesWithDupes)];\n\n    for (let i = 0; i < layoutNames.length; i++) {\n        const layoutName = layoutNames[i];\n        const layout = transactionState.layouts[layoutName];\n        await Promise.all(\n            layout.elements.map(async (element) => {\n                // Rehydrate any illustrations in the layout.\n                if (element.type === \"illustration\") {\n                    const illustration = element as IllustrationElement;\n                    if (illustration.src && !illustration.svg) {\n                        const illustrationBody = await fetchAsString(illustration.src);\n                        const init = await generateSVGWithUnknownColors(illustrationBody);\n                        illustration.svg = modifySVGWithElementProperties(\n                            init.svg,\n                            illustration.width,\n                            illustration.height,\n                            illustration.colors,\n                        );\n                    }\n                } else if (element.type === \"frame\") {\n                    const frame = element as FrameElement;\n                    if (frame.pattern?.colors && frame.pattern?.src) {\n                        const svgBody = await fetchAsString(frame.pattern?.src);\n                        const init = await generateSVGWithUnknownColors(svgBody);\n                        frame.pattern.svg = init.svg;\n                    }\n                }\n                // Sanitize values. This likely shouldn't be necessary, but some funky stuff can happen if these values are missing.\n                if (isNaN(element.x)) {\n                    element.x = 0;\n                }\n                if (isNaN(element.y)) {\n                    element.y = 0;\n                }\n                if (isNaN(element.width)) {\n                    element.width = 0;\n                }\n                if (isNaN(element.height)) {\n                    element.height = 0;\n                }\n                if (isNaN(element.rotation)) {\n                    element.rotation = 0;\n                }\n            }),\n        );\n    }\n\n    for (const layoutKey in transactionState.layouts) {\n        const illustrations = transactionState.layouts[layoutKey].elements.filter(\n            (el) => el.type === LayoutElementType.Illustration,\n        );\n        for (let i = 0; i < illustrations.length; ++i) {\n            const el = illustrations[i] as IllustrationElement;\n            if (el.src && el.svg) {\n                try {\n                    el.cachedObjectURL = await svgObjectURL(el.svg);\n                } catch (e) {\n                    // If computing the cached object URL fails, we should proceed anyway.\n                    console.log(e);\n                }\n            }\n        }\n        const fonts = transactionState.layouts[layoutKey].elements.filter(\n            (el) => el.type === LayoutElementType.Textbox,\n        );\n        for (let i = 0; i < fonts.length; ++i) {\n            const el = fonts[i] as TextboxElement;\n            if (el.fontData?.assetUrl) {\n                await loadFont(el.fontData.assetUrl);\n            }\n        }\n    }\n};\n\nexport { findElement, findLayoutForElement, updatedLayoutForElement, rehydrateSerializedLayout };\n","import cloneDeep from \"lodash.clonedeep\";\nimport { ElementNotFoundError, findElement, findLayoutForElement, updatedLayoutForElement } from \"./LayoutsState\";\nimport { recomputeTextOnElement } from \"./text/shared\";\nimport {\n    ColorDefinition,\n    FontData,\n    FrameElement,\n    FrameOffsets,\n    ILayout,\n    IllustrationElement,\n    ImageElement,\n    LayoutElement,\n    LayoutsState,\n    LayoutState,\n    PatternImageData,\n    SerializableWorkflow,\n    TextAlgorithm,\n    TextboxElement,\n    TextFillImage,\n    TextFillSpotColor,\n} from \"./types\";\nimport { generate } from \"./util/guid\";\n\n/**\n * An abstract base class from which to extend all potential element commands. These commands\n * follow the command design pattern in software development. To learn more about this pattern\n * take a look at the following link.\n *\n * https://sourcemaking.com/design_patterns/command\n *\n */\nexport abstract class CanvasCommand {\n    public abstract apply(state: LayoutsState): LayoutsState;\n\n    // Undo/redo support.\n    protected oldState?: LayoutsState;\n    public undo(): LayoutsState {\n        if (!this.oldState) {\n            throw new Error(\"Cannot undo.\");\n        }\n        return this.oldState;\n    }\n    public overrideOldState(state: LayoutsState) {\n        this.oldState = state;\n    }\n    public sequenceId?: string;\n}\n\n/**\n * Sets the serializable workflow in the reducer state.\n */\nexport class UpdateWorkflowStateCommand extends CanvasCommand {\n    private serializableWorkflow: SerializableWorkflow;\n\n    constructor(serializableWorkflow: SerializableWorkflow) {\n        super();\n        this.serializableWorkflow = serializableWorkflow;\n    }\n\n    public apply(state: LayoutsState): LayoutsState {\n        this.oldState = state;\n\n        return {\n            ...state,\n            serializableWorkflow: this.serializableWorkflow,\n        };\n    }\n}\n\n/**\n * Shifts an element with given ID from its current position to a new position.\n */\nexport class MoveCommand extends CanvasCommand {\n    private id: string;\n    private x: number;\n    private y: number;\n\n    constructor(id: string, x: number, y: number) {\n        super();\n        this.id = id;\n        this.x = x;\n        this.y = y;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement = {\n            ...el,\n            x: this.x,\n            y: this.y,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\n/**\n * Rotates an element to a given angle in degrees.\n */\nexport class RotateCommand extends CanvasCommand {\n    private id: string;\n    private angle: number;\n\n    constructor(id: string, angle: number) {\n        super();\n        this.id = id;\n        this.angle = angle;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement = {\n            ...el,\n            rotation: this.angle,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\n/**\n * Updates the width and height of an element to reflect a new size. Negative values will be\n * converted to their absolute value. ie. -10 will become 10.\n */\nexport class ResizeCommand extends CanvasCommand {\n    private id: string;\n    private width: number;\n    private height: number;\n\n    constructor(id: string, width: number, height: number) {\n        super();\n        this.id = id;\n        this.width = Math.abs(width);\n        this.height = Math.abs(height);\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        let updatedElement = {\n            ...el,\n            width: this.width,\n            height: this.height,\n        };\n        if (el.type === \"frame\") {\n            const frame = updatedElement as FrameElement;\n            frame.scaleX = (frame.scaleX * this.width) / el.width;\n            frame.scaleY = (frame.scaleY * this.height) / el.height;\n        } else if (el.type === \"textbox\") {\n            const textbox = updatedElement as TextboxElement;\n            const text =\n                (!textbox.algorithm || textbox.algorithm === TextAlgorithm.Autosize ? textbox.text : textbox.input) ??\n                \"\";\n            updatedElement = recomputeTextOnElement(textbox, text, el as TextboxElement);\n        }\n\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\n/**\n * Applys a list of command objects to the current state, the final state\n * will be that of all commands applied in the order of left to right.\n */\nexport class GroupCommand extends CanvasCommand {\n    private commands: CanvasCommand[];\n    constructor(commands: CanvasCommand[]) {\n        super();\n        this.commands = commands;\n    }\n    public apply(state: LayoutsState): LayoutsState {\n        this.oldState = state;\n\n        return this.commands.reduce<LayoutsState>((accumulatedState, curCommand) => {\n            return curCommand.apply(accumulatedState);\n        }, state);\n    }\n}\n\n/*\n * Creates a new layout with a given layout from the server.\n * in layout array. Ensure to write a test for this as well.\n */\nexport class CreateLayoutCommand extends CanvasCommand {\n    private layout: ILayout;\n\n    constructor(layout: ILayout) {\n        super();\n        this.layout = layout;\n    }\n\n    public apply(state: LayoutsState): LayoutsState {\n        this.oldState = state;\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [this.layout.id]: {\n                    elements: [],\n                    layout: { ...this.layout },\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n}\n\n/**\n * Clear all elements from a given layout.\n */\nexport class ClearLayoutCommand extends CanvasCommand {\n    private panelName: string;\n\n    constructor(panelName: string) {\n        super();\n        this.panelName = panelName;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const layouts = Object.values(state.layouts).map((layout) => {\n            const targetLayout = layout.layout.panelId === this.panelName;\n            const state: LayoutState = {\n                ...layout,\n                elements: targetLayout ? [] : [...layout.elements],\n                modificationID: generate(),\n            };\n            return state;\n        });\n        const finalLayouts: { [key: string]: LayoutState } = {};\n        layouts.forEach((layoutState) => {\n            finalLayouts[layoutState.layout.id] = layoutState;\n        });\n        return {\n            ...state,\n            layouts: finalLayouts,\n        };\n    }\n}\n\n/**\n * Add an element to the canvas\n */\nexport class CreateElementCommand<T extends LayoutElement> extends CanvasCommand {\n    private element: T;\n    private layout: ILayout;\n\n    /**\n     * @param initialParams The initial parameters to be set on this new object\n     * @param callback An optional callback function to be notified when the object has been instantiated\n     * @param layout\n     */\n    constructor(element: T, layout: ILayout) {\n        super();\n        this.element = element;\n        this.layout = layout;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        if (!state.layouts[this.layout.id]) {\n            state.layouts[this.layout.id] = { layout: this.layout, elements: [], modificationID: \"\" };\n        }\n\n        const currentElementsInLayout = state.layouts[this.layout.id].elements;\n        const duplicateElementAlreadyExists = currentElementsInLayout.find((el) => el.id === this.element.id);\n        if (duplicateElementAlreadyExists) {\n            throw new Error(\n                `Failed to apply new ${this.element.type} element because ID ${this.element.id} already taken`,\n            );\n        }\n\n        if (this.element.productOverlay || currentElementsInLayout.length === 0) {\n            const newElements = [...currentElementsInLayout, this.element];\n            if (this.element.layerIndex === undefined) {\n                this.element.layerIndex = this.assignIndex(this.element, newElements);\n            }\n            return {\n                ...state,\n                layouts: {\n                    ...state.layouts,\n                    [this.layout.id]: {\n                        ...state.layouts[this.layout.id],\n                        elements: newElements,\n                        modificationID: generate(),\n                    },\n                },\n            };\n        }\n\n        // If product overlay exists then it is the final element.\n        const finalElement = currentElementsInLayout[currentElementsInLayout.length - 1];\n        const productOverlay = finalElement.productOverlay ? finalElement : null;\n\n        // Reindex elements.\n        if (productOverlay) {\n            currentElementsInLayout.pop();\n        }\n        let updatedLayoutsForElement: LayoutElement[];\n        if (this.element.layerIndex !== null && this.element.layerIndex !== undefined) {\n            updatedLayoutsForElement = [...currentElementsInLayout, this.element].sort((a, b) => {\n                if (a.layerIndex !== undefined && b.layerIndex !== undefined) {\n                    return a.layerIndex - b.layerIndex;\n                }\n                return 0;\n            });\n        } else {\n            const newIndex = this.assignIndex(this.element, currentElementsInLayout);\n            this.element.layerIndex = newIndex !== undefined ? newIndex : 0;\n            updatedLayoutsForElement = [...currentElementsInLayout, this.element];\n        }\n        if (productOverlay) {\n            updatedLayoutsForElement.push(productOverlay);\n        }\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [this.layout.id]: {\n                    ...state.layouts[this.layout.id],\n                    elements: updatedLayoutsForElement,\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n\n    // Calculate layer index for an element that doesn't have an explicit index.\n    private assignIndex(target: LayoutElement, elementArray: LayoutElement[]): number {\n        if (elementArray.length === 0) {\n            return 0;\n        }\n        // We find the highest index used on the layer of the target element.\n        const lastIndexOfLayer = elementArray\n            .filter((el) => (el.layer || 0) === (target.layer || 0))\n            .sort((a, b) => (a.layerIndex || 0) - (b.layerIndex || 0))[elementArray.length - 1]?.layerIndex;\n\n        return lastIndexOfLayer !== undefined ? lastIndexOfLayer + 1 : 0;\n    }\n}\n\n/**\n * Delete an element on the canvas\n */\nexport class DeleteElementCommand extends CanvasCommand {\n    private id: string;\n\n    constructor(id: string) {\n        super();\n        this.id = id;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        let elementFound = false;\n        const filteredLayouts = Object.values(state.layouts).map((layout) => {\n            const filteredElements = layout.elements.filter((el) => el.id !== this.id);\n            if (filteredElements.length !== layout.elements.length) {\n                elementFound = true;\n            }\n            return {\n                ...layout,\n                elements: layout.elements.filter((el) => {\n                    return el.id !== this.id;\n                }),\n                modificationID: generate(),\n            };\n        });\n        if (!elementFound) {\n            console.log(`Failed to delete element ${this.id}`);\n        }\n        const finalLayouts: { [key: string]: LayoutState } = {};\n        filteredLayouts.forEach((layoutState) => {\n            finalLayouts[layoutState.layout.id] = layoutState;\n        });\n        return {\n            ...state,\n            layouts: finalLayouts,\n        };\n    }\n}\n\nexport class CloneElementCommand extends CanvasCommand {\n    private el: LayoutElement;\n    private layout: ILayout;\n\n    constructor(el: LayoutElement, layout: ILayout) {\n        super();\n        this.el = cloneDeep(el);\n        this.layout = layout;\n        this.el.id = generate();\n        this.el.x += 5;\n        this.el.y += 5;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        return new CreateElementCommand(this.el, this.layout).apply(state);\n    }\n}\n\nexport class FontColorCommand extends CanvasCommand {\n    private id: string;\n    private color: string;\n    private textFillSpotColor?: TextFillSpotColor;\n\n    constructor(id: string, color: string, textFillSpotColor?: TextFillSpotColor) {\n        super();\n        this.id = id;\n        this.color = color;\n        this.textFillSpotColor = textFillSpotColor;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n\n        const updatedElement = {\n            ...el,\n            fill: this.color,\n            fillSpotColorDefinition: this.textFillSpotColor,\n            textFillImage: undefined,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class FontImageFillCommand extends CanvasCommand {\n    private id: string;\n    private imageFill: TextFillImage;\n\n    constructor(id: string, imageFill: TextFillImage) {\n        super();\n        this.id = id;\n        this.imageFill = imageFill;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n\n        const updatedElement = {\n            ...el,\n            textFillImage: this.imageFill,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class FontSizeCommand extends CanvasCommand {\n    private id: string;\n    private size: number;\n\n    constructor(id: string, size: number) {\n        super();\n        this.id = id;\n        this.size = size;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement: TextboxElement = {\n            ...el,\n            fontSize: this.size,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        // FIXME: The autosize algorithm injects newlines outside of the commands, we need\n        // to ignore the input text in that case. See getCalculatedMixins within recomputeTextOnElement\n        // The logic for autosize should be shifted into there in the future.\n        const text = (!el.algorithm || el.algorithm === TextAlgorithm.Autosize ? el.text : el.input) ?? \"\";\n        const updatedLayout = updatedLayoutForElement(recomputeTextOnElement(updatedElement, text), layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class FontAlgorithmCommand extends CanvasCommand {\n    private id: string;\n    private algorithm: TextAlgorithm;\n\n    constructor(id: string, algorithm: TextAlgorithm) {\n        super();\n        this.id = id;\n        this.algorithm = algorithm;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement = {\n            ...el,\n            algorithm: this.algorithm,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class FontSourceCommand extends CanvasCommand {\n    private id: string;\n    private fontData: FontData;\n\n    constructor(id: string, fontData: FontData) {\n        super();\n        this.id = id;\n        this.fontData = fontData;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement: TextboxElement = {\n            ...el,\n            fontData: this.fontData,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const text = (!el.algorithm || el.algorithm === TextAlgorithm.Autosize ? el.text : el.input) ?? \"\";\n        const updatedLayout = updatedLayoutForElement(recomputeTextOnElement(updatedElement, text), layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class FontAlignmentCommand extends CanvasCommand {\n    private id: string;\n    private align: \"left\" | \"center\" | \"right\";\n\n    constructor(id: string, align: \"left\" | \"center\" | \"right\") {\n        super();\n        this.id = id;\n        this.align = align;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement: TextboxElement = {\n            ...el,\n            align: this.align,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class UpdateFramePattern extends CanvasCommand {\n    private id: string;\n    private imageData: PatternImageData;\n    private offsets: FrameOffsets;\n\n    constructor(id: string, imageData: PatternImageData, offsets: FrameOffsets) {\n        super();\n        this.id = id;\n        this.imageData = imageData;\n        this.offsets = offsets;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const targetLayout = findLayoutForElement(this.id, Object.values(state.layouts));\n        const index = targetLayout.elements.findIndex((el) => el.id === this.id);\n        const existingPattern = (targetLayout.elements[index] as FrameElement).pattern;\n\n        const newElements = [...targetLayout.elements];\n        newElements.splice(index, 1, {\n            ...targetLayout.elements[index],\n            pattern: {\n                ...existingPattern,\n                src: this.imageData.src,\n                x: this.offsets.x,\n                y: this.offsets.y,\n                width: this.imageData.width,\n                height: this.imageData.height,\n                scaleX: this.offsets.zoom,\n                scaleY: this.offsets.zoom,\n                rotation: this.offsets.rotation ?? existingPattern?.rotation ?? 0,\n                svg: this.imageData.svg,\n                colors: this.imageData.colors,\n            },\n        } as FrameElement); // FIXME: How can we assign LayoutElement correctly?\n\n        const newLayout: LayoutState = {\n            ...targetLayout,\n            elements: newElements,\n            modificationID: generate(),\n        };\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [targetLayout.layout.id]: newLayout,\n            },\n        };\n    }\n}\n\nexport class UpdateFrameThresholdSettingsCommand extends CanvasCommand {\n    private id: string;\n    private useThreshold: boolean;\n    private invertThreshold: boolean;\n    private threshold: number;\n    private thresholdSaturation: number;\n\n    constructor(\n        id: string,\n        useThreshold: boolean,\n        invertThreshold: boolean,\n        threshold: number,\n        thresholdSaturation: number,\n    ) {\n        super();\n        this.id = id;\n        this.useThreshold = useThreshold;\n        this.invertThreshold = invertThreshold;\n        this.threshold = threshold;\n        this.thresholdSaturation = thresholdSaturation;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n        const el = findElement(this.id, Object.values(state.layouts)) as FrameElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n\n        const updatedElement = {\n            ...el,\n            useThreshold: this.useThreshold,\n            invertThreshold: this.invertThreshold,\n            threshold: this.threshold,\n            thresholdSaturation: this.thresholdSaturation,\n        };\n\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class UpdateImageSourceCommand extends CanvasCommand {\n    private id: string;\n    private src: string;\n\n    constructor(id: string, src: string) {\n        super();\n        this.id = id;\n        this.src = src;\n    }\n\n    public apply(state: LayoutsState): LayoutsState {\n        this.oldState = state;\n        const el = findElement(this.id, Object.values(state.layouts)) as ImageElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement: ImageElement = {\n            ...el,\n            src: this.src,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\n/**\n * TextChange will modify the text displayed in a text box\n */\nexport class TextChangeCommand extends CanvasCommand {\n    private id: string;\n    private text: string;\n\n    constructor(id: string, text: string) {\n        super();\n        this.id = id;\n        this.text = text;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(recomputeTextOnElement(el, this.text, el), layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class TextStrokeCommand extends CanvasCommand {\n    private id: string;\n    private strokeColor: ColorDefinition | undefined;\n    private strokeThickness: string | undefined;\n\n    constructor(id: string, strokeColor: ColorDefinition | undefined, strokeThickness: string | undefined) {\n        super();\n        this.id = id;\n        this.strokeColor = strokeColor;\n        this.strokeThickness = strokeThickness;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n        const el = findElement(this.id, Object.values(state.layouts)) as TextboxElement;\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const updatedElement = {\n            ...el,\n            strokeColor: this.strokeColor,\n            strokeThickness: this.strokeThickness,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class IllustrationColorCommand extends CanvasCommand {\n    private id: string;\n    private className: string;\n    private fill: string | ColorDefinition;\n\n    constructor(id: string, className: string, fill: string | ColorDefinition) {\n        super();\n        this.id = id;\n        this.className = className;\n        this.fill = fill;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const newColors = (el as IllustrationElement).colors || {};\n        const oldColor = newColors[this.className];\n\n        if (typeof this.fill === \"string\") {\n            newColors[this.className] = {\n                browserValue: this.fill,\n                spotColor: oldColor?.spotColor,\n                pmsValue: oldColor?.pmsValue,\n            };\n        } else {\n            newColors[this.className] = {\n                browserValue: this.fill.browserValue,\n                spotColor: oldColor?.spotColor,\n                pmsValue: this.fill.pmsValue,\n            };\n        }\n\n        const updatedElement = {\n            ...el,\n            colors: newColors,\n        };\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class IllustrationCacheCommand extends CanvasCommand {\n    private id: string;\n    private svgBody: string;\n    private objectURL: string;\n\n    constructor(id: string, svgBody: string, objectURL: string) {\n        super();\n        this.id = id;\n        this.svgBody = svgBody;\n        this.objectURL = objectURL;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n\n        const updatedElement = {\n            ...el,\n            svg: this.svgBody,\n            cachedObjectURL: this.objectURL,\n        };\n\n        const layout = findLayoutForElement(el.id, Object.values(state.layouts));\n        const updatedLayout = updatedLayoutForElement(updatedElement, layout);\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayout,\n            },\n        };\n    }\n}\n\nexport class BringToFrontCommand extends CanvasCommand {\n    private id: string;\n\n    /**\n     * @param id The targeted element to bring to the front.\n     */\n    constructor(id: string) {\n        super();\n        this.id = id;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const layout = Object.values(state.layouts).find((l) => l.elements.find((el) => el.id === this.id));\n        if (!layout) {\n            throw new Error(\"Layout missing from state!\");\n        }\n\n        // We shift the element in front of the last index and then reorganise the layer indices\n        // to suite the new ordering of the element array.\n        const fromIndex = layout.elements.findIndex((el) => el.id === this.id);\n        layout.elements.push(layout.elements.splice(fromIndex, 1)[0]);\n\n        const updatedElements = [...layout.elements];\n        updatedElements.forEach((el, idx) => (el.layerIndex = idx));\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: {\n                    ...state.layouts[layout.layout.id],\n                    elements: updatedElements,\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n}\n\nexport class BringToBackCommand extends CanvasCommand {\n    private id: string;\n\n    /**\n     * @param id The targeted element to bring to the back.\n     */\n    constructor(id: string) {\n        super();\n        this.id = id;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const layout = Object.values(state.layouts).find((l) => l.elements.find((el) => el.id === this.id));\n        if (!layout) {\n            throw new Error(\"Layout missing from state!\");\n        }\n\n        // We shift the element backwards and then reorganise the layer indices\n        // to suite the new ordering of the element array.\n        const fromIndex = layout.elements.findIndex((el) => el.id === this.id);\n\n        layout.elements.splice(fromIndex, 1);\n        layout.elements.unshift(el);\n\n        const updatedElements = [...layout.elements];\n        const element = updatedElements.splice(fromIndex, 1)[0];\n        updatedElements.splice(fromIndex, 0, element);\n        updatedElements.forEach((el, idx) => (el.layerIndex = idx));\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: {\n                    ...state.layouts[layout.layout.id],\n                    elements: updatedElements,\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n}\n\n/**\n * Bring an element forward by one layer. Does nothing if the element is already at the front.\n */\nexport class BringForwardCommand extends CanvasCommand {\n    private id: string;\n\n    /**\n     * @param id The targeted element to bring to the front.\n     */\n    constructor(id: string) {\n        super();\n        this.id = id;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const layout = Object.values(state.layouts).find((l) => l.elements.find((el) => el.id === this.id));\n        if (!layout) {\n            throw new Error(\"Layout missing from state!\");\n        }\n\n        // We shift the element forward and then reorganise the layer indices\n        // to suite the new ordering of the element array.\n        const fromIndex = layout.elements.findIndex((el) => el.id === this.id);\n        const toIndex = fromIndex + 1;\n        const updatedElements = [...layout.elements];\n        const element = updatedElements.splice(fromIndex, 1)[0];\n        updatedElements.splice(toIndex, 0, element);\n        updatedElements.forEach((el, idx) => (el.layerIndex = idx));\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: {\n                    ...state.layouts[layout.layout.id],\n                    elements: updatedElements,\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n}\n\n/**\n * Send an element backwards by one layer. Does nothing if the element is already at the back.\n */\nexport class SendBackwardsCommand extends CanvasCommand {\n    private id: string;\n\n    /**\n     * @param id The targeted element to bring to the front.\n     */\n    constructor(id: string) {\n        super();\n        this.id = id;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n        const layout = Object.values(state.layouts).find((l) => l.elements.find((el) => el.id === this.id));\n        if (!layout) {\n            throw new Error(\"Layout missing from state!\");\n        }\n\n        // We shift the element backwards and then reorganise the layer indices\n        // to suite the new ordering of the element array.\n        const fromIndex = layout.elements.findIndex((el) => el.id === this.id);\n        const toIndex = fromIndex - 1;\n        const updatedElements = [...layout.elements];\n        const element = updatedElements.splice(fromIndex, 1)[0];\n        updatedElements.splice(toIndex, 0, element);\n        updatedElements.forEach((el, idx) => (el.layerIndex = idx));\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: {\n                    ...state.layouts[layout.layout.id],\n                    elements: updatedElements,\n                    modificationID: generate(),\n                },\n            },\n        };\n    }\n}\n\n/**\n * Set the layer value of an element. The layer is half of the system involved with\n * determining order.\n */\nexport class LayerCommand extends CanvasCommand {\n    private id: string;\n    private value: number;\n\n    /**\n     * @param id The targeted element to change layer of.\n     * @param value The new layer to set this element within.\n     */\n    constructor(id: string, value: number) {\n        super();\n        this.id = id;\n        this.value = value;\n    }\n\n    public apply(state: LayoutsState) {\n        this.oldState = state;\n\n        const el = findElement(this.id, Object.values(state.layouts));\n        if (!el.id) {\n            throw new ElementNotFoundError();\n        }\n\n        const layout = Object.values(state.layouts).find((l) => l.elements.find((el) => el.id === this.id));\n        if (!layout) {\n            throw new Error(\"Layout missing from state!\");\n        }\n\n        return {\n            ...state,\n            layouts: {\n                ...state.layouts,\n                [layout.layout.id]: updatedLayoutForElement({ ...el, layer: this.value }, layout),\n            },\n        };\n    }\n}\n","import { CanvasCommand, CreateElementCommand } from \"../../command\";\nimport { svgObjectURL } from \"../../Elements/factory\";\nimport {\n    ILayout,\n    IllustrationElement,\n    ImageElement,\n    LayoutElementType,\n    Region,\n    RegionElement,\n    SilentStepData,\n    Step,\n    StepType,\n} from \"../../types\";\nimport { Product } from \"../../types\";\nimport { fetchAsString } from \"../../util/crossplatform\";\nimport { LayoutNotFoundError, MisconfigurationError } from \"../../util/exception\";\nimport { generate } from \"../../util/guid\";\nimport { generateSVGWithUnknownColors } from \"../../util/illustration\";\n\nexport interface SilentStepTriggerResult {\n    regionElement: RegionElement;\n    command: CanvasCommand;\n}\n\nexport class SilentStepHandler {\n    private configuration: Step<SilentStepData>;\n    private layouts: ILayout[];\n    private product?: Product;\n\n    constructor(config: Step<SilentStepData>, layouts: ILayout[], product?: Product) {\n        this.configuration = config;\n        this.layouts = layouts;\n        this.product = product ? product : undefined;\n    }\n\n    async trigger(): Promise<SilentStepTriggerResult[]> {\n        if (!this.configuration.data.regions) {\n            throw new MisconfigurationError(this.configuration, \"Missing regions.\");\n        }\n        if (this.configuration.type === StepType.SilentIllustration) {\n            const promises = this.configuration.data.regions.map(this.processRegion);\n            return Promise.all(promises);\n        } else if (this.configuration.type === StepType.ProductOverlay) {\n            return Promise.all(\n                this.configuration.data.regions.map((region) => {\n                    const layout = this.layouts.find((layout: ILayout) => region.panelId === layout.panelId);\n                    if (!layout) {\n                        throw new LayoutNotFoundError(region);\n                    }\n                    return this.processRegion(region);\n                }),\n            );\n        } else {\n            return Promise.reject(\"Unknown silent step. This is a bug\");\n        }\n    }\n\n    private processRegion = async (region: Region): Promise<SilentStepTriggerResult> => {\n        const layout = this.layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n\n        let assetUrl = \"\";\n        if (this.configuration.type === StepType.ProductOverlay) {\n            // Check related product for a overlay key\n            let assetFromProduct = \"\";\n            if (this.product?.overlayImageUrl) {\n                assetFromProduct = this.product.overlayImageUrl;\n            }\n            assetUrl = assetFromProduct;\n            if (!assetFromProduct) {\n                throw new MisconfigurationError(this.configuration, \"Couldn't find an asset for product overlay step\");\n            }\n        }\n\n        const assetType = this.evaluateAssetType();\n\n        if (assetType === LayoutElementType.Image) {\n            const assetUrl =\n                this.configuration.type === StepType.SilentIllustration\n                    ? this.configuration.data.asset?.fileLink\n                    : this.product?.overlayImageUrl;\n            if (!assetUrl) {\n                throw new Error(\"Undefined raster silent step source\");\n            }\n            const newElement: ImageElement = {\n                stepName: this.configuration.stepName,\n                id: generate(),\n                src: assetUrl,\n                type: assetType,\n                y: region.top,\n                x: region.left,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                immutable: region.immutable,\n                productOverlay: this.configuration.type === StepType.ProductOverlay ? true : undefined,\n                rotation: region.rotation,\n                excludeFromExport: this.configuration.data.excludeFromPrint,\n                preserveAspectRatio: \"none\",\n            };\n            return {\n                regionElement: {\n                    id: newElement.id,\n                    region,\n                },\n                command: new CreateElementCommand<ImageElement>(newElement, layout),\n            };\n        } else {\n            const src =\n                this.configuration.type === StepType.SilentIllustration\n                    ? this.configuration.data.asset?.fileLink\n                    : assetUrl;\n            const getIllustrationBody = async (): Promise<string> => {\n                return new Promise((resolve, reject) => {\n                    if (!src) {\n                        reject(\"Undefined vector silent step source\");\n                        return;\n                    }\n                    fetchAsString(src, true)\n                        .then((svg) => {\n                            resolve(svg);\n                        })\n                        .catch((e) => console.error(e));\n                });\n            };\n            const svgData = await generateSVGWithUnknownColors(await getIllustrationBody());\n            const newElement: IllustrationElement = {\n                stepName: this.configuration.stepName,\n                id: generate(),\n                cachedObjectURL: await svgObjectURL(svgData.svg),\n                src: src,\n                svg: svgData.svg,\n                colors: svgData.colors,\n                type: assetType,\n                y: region.top,\n                x: region.left,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                rotation: region.rotation,\n                immutable: region.immutable,\n                productOverlay: this.configuration.type === StepType.ProductOverlay ? true : undefined,\n                excludeFromExport: this.configuration.data.excludeFromPrint,\n            };\n            return {\n                regionElement: {\n                    id: newElement.id!,\n                    region,\n                },\n                command: new CreateElementCommand<IllustrationElement>(newElement, layout),\n            };\n        }\n    };\n\n    private evaluateAssetType(): LayoutElementType {\n        // Try to determine the type by asset path.\n        const url =\n            this.configuration.type === StepType.ProductOverlay && this.product?.overlayImageUrl\n                ? this.product.overlayImageUrl.toLowerCase()\n                : this.configuration.data.asset?.fileLink?.toLowerCase().split(\"?\")[0];\n        if (\n            url?.startsWith(\"data:image/png\") ||\n            url?.endsWith(\".jpeg\") ||\n            url?.endsWith(\".jpg\") ||\n            url?.endsWith(\".png\")\n        ) {\n            return LayoutElementType.Image;\n        }\n        if (url?.endsWith(\".svg\") || url?.startsWith(\"image/svg+xml\")) {\n            return LayoutElementType.Illustration;\n        }\n        return LayoutElementType.Illustration;\n    }\n}\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    this.data = new TextEncoder().encode(data)\n  } else {\n    this.data = new Uint8Array(data)\n  }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","import { spiffCoreConfiguration } from \"../Configuration\";\nimport { ResourceGenerationError } from \"../util/exception\";\nimport { fetch } from \"../util/crossplatform\";\n\nexport const shortenUrl = async (longUrl: string): Promise<string> => {\n    const shortenerUrl = `${spiffCoreConfiguration.getServicesApiUrl()}/shortener`;\n    try {\n        const response = await fetch(shortenerUrl, {\n            method: \"POST\",\n            body: JSON.stringify({ longUrl }),\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n        });\n        const json = await response.json();\n        return json.shortUrl;\n    } catch (e) {\n        console.error(e);\n        throw new ResourceGenerationError(\"Failed to shorten URL, see console.\");\n    }\n};\n","// Something that periodically checks a condition and\n// executes a callback once that condition is true.\nexport class Poller {\n    // The ID of the window setInterval call.\n    private pollingId: number;\n\n    // The amount of times that the condition has been checked.\n    private attempts: number;\n\n    // How long to wait between each poll.\n    private readonly interval: number;\n\n    // The maximum amount of times to check the condition.\n    private readonly maxAttempts: number;\n\n    // The condition to check.\n    private readonly predicate: () => Promise<boolean>;\n\n    // The function to execute when the condition is fulfilled.\n    private readonly onSuccess: () => void;\n\n    // The function to execute when the maximum polling attempts have been\n    // hit and no success result was returned by the predicate.\n    private readonly onFailure: () => void;\n\n    private async poll() {\n        try {\n            if (await this.predicate()) {\n                this.onSuccess();\n                if (this.pollingId > -1) {\n                    window.clearInterval(this.pollingId);\n                }\n                return;\n            }\n        } catch (e) {\n            //console.log(`Poller attempt ${this.attempts + 1} failed. Max attempts: ${this.maxAttempts}`);\n        }\n        this.attempts += 1;\n        if (this.attempts < this.maxAttempts) {\n            this.pollingId = window.setTimeout(this.poll.bind(this), this.interval);\n        } else {\n            this.onFailure();\n        }\n    }\n\n    /**\n     * Constructs a new polling service.\n     * @param predicate An async function that returns true when polling has returned a successful result.\n     * @param onSuccess The callback to be called when polling has returned a successful result.\n     * @param onFailure The callback to be called when polling has returned a failed result.\n     * @param interval The number of milliseconds to wait between each poll.\n     * @param maxAttempts The maximum amount of times to check the condition.\n     */\n    constructor(\n        predicate: () => Promise<boolean>,\n        onSuccess: () => void,\n        onFailure: () => void,\n        interval: number = 3000,\n        maxAttempts: number = 10,\n    ) {\n        this.onSuccess = onSuccess;\n        this.onFailure = onFailure;\n        this.predicate = predicate;\n        this.attempts = 0;\n        this.pollingId = -1;\n        this.interval = interval;\n        this.maxAttempts = maxAttempts;\n        this.poll();\n    }\n}\n","import {\n    StepService,\n    RegionElement,\n    CommandWithFollowup,\n    DigitalContentStepData,\n    Step,\n    LayoutsState,\n    Region,\n    ILayout,\n    ImageElement,\n    LayoutElementType,\n} from \"../../types\";\nimport { toString as urlToString } from \"qrcode\";\nimport { shortenUrl } from \"../shortener\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Poller } from \"../../util/Poller\";\nimport {\n    LayoutNotFoundError,\n    MisconfigurationError,\n    ResourceGenerationError,\n    ResourceNotFoundError,\n} from \"../../util/exception\";\nimport { getAssets } from \"../asset\";\nimport { CreateElementCommand, DeleteElementCommand, GroupCommand } from \"../../command\";\nimport { generate } from \"../../util/guid\";\n\nexport const MAX_UPLOAD_SIZE_IN_MB = 100;\n\nclass DigitalContentStepService implements StepService<DigitalContentStepData> {\n    async init(\n        stepData: Step<DigitalContentStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        }\n        return null;\n    }\n\n    private async reload(\n        stepData: Step<DigitalContentStepData>,\n        workflowManager: WorkflowManager,\n        reducerState: LayoutsState,\n    ) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const regionElements = elementsForStep.map((el) => ({\n            id: el.id,\n            region: el.stepRegion,\n            regionIndex: el.stepRegionIndex,\n        }));\n        await workflowManager.setSelectionsAndElements(stepData.stepName, [], regionElements, async () => {\n            const shortUrl = serializedStep?.storage?.videoShortUrl;\n            const url = serializedStep?.storage?.videoUrl;\n            workflowManager.updateStorage(stepData.stepName, {\n                videoShortUrl: shortUrl,\n                videoUrl: url,\n            });\n        });\n    }\n\n    async regenerateQRCode(\n        elements: RegionElement[],\n        assetKey: string,\n        workflowManager: WorkflowManager,\n        stepData: Step<DigitalContentStepData>,\n    ) {\n        const getMpegLink = async () => {\n            const asset = (await getAssets([assetKey]))[0];\n            const link = asset?.versions?.find((v) => v.name === \"mpeg4\")?.link;\n            return { asset, link };\n        };\n\n        // Asset versions are attached to the asset shortly after asset upload. We poll to find these versions and\n        // grab the link for the mp4 variant.\n        const videoLink = await new Promise<{ rel: string; href: string }>((resolve, reject) => {\n            new Poller(\n                async () => !!(await getMpegLink()).link,\n                async () => {\n                    const linkData = await getMpegLink();\n                    if (!linkData.link || !linkData.link) {\n                        throw new ResourceNotFoundError(linkData.asset);\n                    }\n                    resolve({\n                        rel: \"mpeg4\",\n                        href: linkData.link,\n                    });\n                },\n                () => {\n                    reject(\"Poller timed out with 40 attempts @ 3 second interval\");\n                },\n                3000,\n                40,\n            );\n        });\n\n        elements.forEach((elem) => workflowManager.getCommandDispatcher()(new DeleteElementCommand(elem.id)));\n        const protocolPrefix = stepData.data.baseUrl.slice(0, 4) === \"http\" ? \"\" : \"https://\";\n        const urlBuilder = new URL(protocolPrefix + stepData.data.baseUrl);\n        urlBuilder.searchParams.append(\"video\", btoa(JSON.stringify([videoLink])));\n\n        //iOS does not recognise a URL without the trailing slash on the pathname,\n        urlBuilder.pathname = urlBuilder.pathname + (urlBuilder.pathname.slice(-1) === \"/\" ? \"\" : \"/\");\n\n        const builtUrl = urlBuilder.toString();\n        if (builtUrl.length >= 2000) {\n            throw new ResourceGenerationError(\"Cannot create QR code, URL too long.\");\n        }\n        const shortUrl = await shortenUrl(builtUrl);\n\n        if (!stepData.data || !stepData.data.regions) {\n            throw new MisconfigurationError(stepData, \"Missing regions.\");\n        }\n        const regionElements = await this.regionElements(stepData);\n        const result = await this.command(shortUrl, regionElements, workflowManager, stepData.stepName);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n        await workflowManager.setSelectionsAndElements(stepData.stepName, [], regionElements, async () => {\n            workflowManager.updateStorage(stepData.stepName, {\n                videoShortUrl: shortUrl,\n                videoUrl: videoLink.href,\n            });\n        });\n\n        return shortUrl;\n    }\n\n    private async regionElements(stepData: Step<DigitalContentStepData>): Promise<RegionElement[]> {\n        const createElementForRegion = (region: Region, regionIndex: number): RegionElement => {\n            const elementKey = generate();\n            return { id: elementKey, region, regionIndex };\n        };\n\n        return stepData.data.regions.map(createElementForRegion);\n    }\n\n    private async command(\n        shortUrl: string,\n        regionElements: RegionElement[],\n        workflowManager: WorkflowManager,\n        stepName: string,\n    ): Promise<CommandWithFollowup | null> {\n        const layouts = workflowManager.getLayouts();\n        const base64data = btoa(await urlToString(shortUrl, { type: \"svg\" }));\n        const dataUri = `data:image/svg+xml;base64,${base64data}`;\n        const commands = regionElements.map((regionElement) => {\n            const region = regionElement.region;\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region?.panelId);\n\n            if (!layout && region) {\n                throw new LayoutNotFoundError(region);\n            }\n\n            if (layout && !region) {\n                throw new Error(\"Region not found\");\n            }\n\n            if (!layout || !region) {\n                throw new Error(\"Neither a region or layout found!\");\n            }\n\n            return new CreateElementCommand<ImageElement>(\n                {\n                    stepRegion: region,\n                    stepRegionIndex: regionElement.regionIndex,\n                    stepName: stepName,\n                    id: regionElement.id,\n                    src: dataUri,\n                    type: LayoutElementType.Image,\n                    y: region.top,\n                    x: region.left,\n                    width: region.width,\n                    height: region.height,\n                    rotation: 0,\n                },\n                layout,\n            );\n        });\n        return { command: new GroupCommand(commands), followup: async () => {} };\n    }\n}\n\nexport const digitalContentStepService = new DigitalContentStepService();\n","import { optionService } from \"../../option\";\nimport {\n    RegionElement,\n    StepService,\n    CommandWithFollowup,\n    FrameData,\n    ColorOption,\n    GlobalPropertyStateFileUploadStorage,\n    FrameStepData,\n    Step,\n    LayoutsState,\n    VariantResource,\n    Asset,\n    Region,\n    ILayout,\n    FrameElement,\n    LayoutElementType,\n    ColorDefinition,\n} from \"../../../types\";\nimport { Poller } from \"../../../util/Poller\";\nimport { WorkflowManager } from \"../../../WorkflowManager\";\nimport { assetService } from \"../../asset\";\nimport { FrameService } from \"./Service\";\nimport { LayoutNotFoundError, ResourceGenerationError, ResourceNotFoundError } from \"../../../util/exception\";\nimport { AssetNotFoundError } from \"../../../util/exception\";\nimport { browserColorToHex } from \"../../../util/color\";\nimport { fetch, fetchAsArrayBuffer, fetchAsString } from \"../../../util/crossplatform\";\nimport {\n    calculateOffsets,\n    generateDefaultRectangleFrameSvg,\n    getFrameData,\n    GetSVGDimensions,\n    patternImageDataCache,\n} from \"../../../util/frame\";\nimport { CreateElementCommand, DeleteElementCommand, GroupCommand } from \"../../../command\";\nimport { generateSVGWithUnknownColors } from \"../../../util/illustration\";\nimport { getAttributesFromArrayBuffer } from \"../../../util/image\";\nimport { generate } from \"../../../util/guid\";\nimport { FrameStepHandle } from \"../../../stepHandles/steps/frame\";\n\nexport interface FrameCreateOpts {\n    stepName?: string;\n    frameData: FrameData;\n    disablePlaceholder?: boolean;\n    pattern?: any;\n}\n\nclass FrameStepService implements StepService<FrameStepData> {\n    async init(\n        stepData: Step<FrameStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        // If existing state then use it.\n        const reducerStep = reducerState?.serializableWorkflow.steps.find(\n            (step) => step.stepName === stepData.stepName,\n        );\n        if (\n            (reducerStep?.storage && Object.keys(reducerStep.storage).length !== 0) ||\n            (reducerStep?.selectedVariants && reducerStep.selectedVariants.length !== 0)\n        ) {\n            await this.reload(stepData, workflowManager, reducerState!);\n            return null;\n        }\n\n        if (stepData.mandatory) {\n            workflowManager.setMandatoryFulfilled(stepData.stepName, false);\n        }\n        workflowManager.markStepsAsInitialised([stepData.stepName]);\n\n        // When a bundle is present we load the frame aspect.\n        let initialPatternOverride: string | undefined = undefined;\n        const bundle = workflowManager.getWorkflowExperience().getBundle();\n        if (bundle && stepData.globalPropertyAspectConfigurations) {\n            const stateManager = bundle.getGlobalPropertyStateManager();\n            // FIXME: This might not be robust enough. I think we support more than Upload on frames.\n            const uploadAspect = stepData.globalPropertyAspectConfigurations[0];\n            if (uploadAspect) {\n                const key = stateManager.getAspectStorage<GlobalPropertyStateFileUploadStorage>(\n                    uploadAspect.aspectName!,\n                );\n                if (key && key.originalAssetKey) {\n                    initialPatternOverride = (await assetService.getLocalOrFromServer(key.originalAssetKey)).fileLink;\n                }\n            }\n        }\n\n        // If an option exists then determine if there's a default variant.\n        const option = await optionService.getOptionForStep(stepData);\n        if (option) {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                return this.selectVariantCommand(\n                    stepData,\n                    defaultVariant,\n                    [],\n                    workflowManager,\n                    undefined,\n                    initialPatternOverride ? initialPatternOverride : stepData.data.placeholderImageUrl,\n                );\n            } else {\n                // If there are no variants on the option we want to fall through to creating a square below.\n                if (option.variants && option.variants?.length !== 0) return null;\n            }\n        }\n\n        // If no option then create a square box.\n        return this.selectVariantCommand(\n            stepData,\n            undefined,\n            [],\n            workflowManager,\n            undefined,\n            initialPatternOverride ? initialPatternOverride : stepData.data.placeholderImageUrl,\n        );\n    }\n\n    private async reload(stepData: Step<FrameStepData>, workflowManager: WorkflowManager, reducerState: LayoutsState) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const regionElements = elementsForStep.map((el) => ({\n            id: el.id,\n            region: el.stepRegion,\n            regionIndex: el.stepRegionIndex,\n        }));\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option || (option.variants || []).length === 0) {\n            const frameSvgs = stepData.data.regions.map((region) => generateDefaultRectangleFrameSvg(region));\n            workflowManager.updateStorage(stepData.stepName, {\n                currentFrameSources: frameSvgs,\n            });\n        }\n        if (serializedStep) {\n            const finish = async () => {\n                const storageColors = serializedStep.storage?.colors;\n                const patternSrc = serializedStep.storage?.framePatternSrc;\n                const offsets = serializedStep.storage?.frameOffsetsList;\n                workflowManager.updateMetadata(stepData.stepName, {\n                    frameOffsetsList: offsets,\n                    framePatternSrc: patternSrc,\n                });\n                if (patternSrc) {\n                    const frameService = (\n                        workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as\n                            | undefined\n                            | FrameStepHandle\n                    )?.frameService;\n                    if (!frameService) throw new Error(\"Frame service unavailable, cannot load pattern!\");\n                    // Load the pattern and recalculate offsets. Deserialized offsets will potentially be applied after.\n                    await this.loadPatternFromString(patternSrc, frameService, true, storageColors);\n                    workflowManager.updateMetadata(stepData.stepName, { image: patternSrc });\n                    workflowManager.updateStorage(stepData.stepName, {\n                        framePatternSrc: patternSrc,\n                    });\n                    this.validateColorCount(stepData, workflowManager);\n                }\n                if (offsets?.some((offset) => offset.zoom)) {\n                    const frameService = (\n                        workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as\n                            | undefined\n                            | FrameStepHandle\n                    )?.frameService;\n                    if (!frameService) throw new Error(\"Frame service unavailable, cannot load pattern!\");\n                    frameService.updateOffsets(offsets);\n                }\n                workflowManager.setMandatoryFulfilled(stepData.stepName, true);\n            };\n\n            if (serializedStep.selectedVariants && serializedStep.selectedVariants.length > 0) {\n                const variantId = serializedStep.selectedVariants[0].id;\n                if (option && variantId) {\n                    const variant = option.variants?.find((variant) => variant.id === variantId);\n                    if (variant) {\n                        await workflowManager.setSelectionsAndElements(\n                            stepData.stepName,\n                            [variant],\n                            regionElements,\n                            async () => {\n                                const frameSvgs = await Promise.all(\n                                    stepData.data.regions.map((region) => this.frameSourceSvg(variant, region)),\n                                );\n                                workflowManager.updateStorage(stepData.stepName, { currentFrameSources: frameSvgs });\n                                await finish();\n                            },\n                        );\n                    }\n                }\n            } else {\n                await workflowManager.setSelectionsAndElements(stepData.stepName, [], regionElements, finish);\n            }\n        }\n    }\n\n    async availableColors(stepData: Step<FrameStepData>, _workflowManager: WorkflowManager): Promise<ColorOption[]> {\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        return (\n            colorOption?.variants?.map((variant: VariantResource) => {\n                return {\n                    fill: variant.color,\n                    stroke: variant.color,\n                    variant,\n                    pmsValue: variant.name,\n                };\n            }) ?? []\n        );\n    }\n\n    selectImage(\n        stepData: Step<FrameStepData>,\n        asset: Asset,\n        workflowManager: WorkflowManager,\n        recalculateOffsets = true,\n    ): Promise<void> {\n        const assetSrc = FrameStepService.patternSource(asset);\n        const existingSrc = workflowManager.getStepStorage(stepData.stepName)?.framePatternSrc;\n        if (existingSrc && existingSrc === assetSrc) {\n            return Promise.resolve();\n        }\n        workflowManager.setEditedStatus(stepData.stepName, true);\n        const src = asset.fileLink || \"\";\n\n        // TODO: Use mime type instead of extension\n        if (src.endsWith(\".pdf\") || src.endsWith(\".eps\") || src.endsWith(\".ai\")) {\n            // In the case of PDF we need to transcode first as\n            // we don't have first class support for PDF files in frames.\n            return new Promise<void>((resolve) => {\n                workflowManager.addPoller(\n                    new Poller(\n                        async () => {\n                            const assetResponse = await assetService.getFromServer(asset.key || \"\");\n                            const svgVersion = assetResponse.versions?.find((v) => v.name === \"svg\");\n                            if (!svgVersion) return false;\n                            const fetchResult = await fetch(svgVersion.link);\n                            return fetchResult.status === 200;\n                        },\n                        () => {\n                            assetService.getLocalOrFromServer(asset.key || \"\").then((response) => {\n                                this.loadPatternFromAsset(response, stepData, workflowManager, recalculateOffsets).then(\n                                    resolve,\n                                );\n                            });\n                        },\n                        () => {\n                            throw new ResourceGenerationError(\"Failed to resolve transcoded PDF\");\n                        },\n                    ),\n                );\n            });\n        } else {\n            return this.loadPatternFromAsset(asset, stepData, workflowManager, recalculateOffsets);\n        }\n    }\n\n    async selectVariant(\n        stepData: Step<FrameStepData>,\n        variant: VariantResource | undefined,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n        setFrameIsUpdating?: (status: boolean) => void,\n    ) {\n        const result = await this.selectVariantCommand(\n            stepData,\n            variant,\n            elements,\n            workflowManager,\n            setFrameIsUpdating,\n        );\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    getCreateElementCommand(\n        id: string,\n        region: Region,\n        regionIndex: number | undefined,\n        layout: ILayout,\n        options: FrameCreateOpts,\n    ) {\n        return new CreateElementCommand<FrameElement>(\n            {\n                id,\n                type: LayoutElementType.Frame,\n                x: region.left,\n                y: region.top,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                rotation: region.rotation,\n                scaleX: region.width / options.frameData.width,\n                scaleY: region.height / options.frameData.height,\n                path: options.frameData.path,\n                dataWidth: options.frameData.width,\n                dataHeight: options.frameData.height,\n                stepRegion: region,\n                stepRegionIndex: regionIndex,\n                stepName: options.stepName,\n                disablePlaceholder: options.disablePlaceholder,\n                pattern: options.pattern,\n                immutable: region.immutable,\n            },\n            layout,\n        );\n    }\n\n    async loadPatternFromString(\n        src: string,\n        frameService: FrameService,\n        recalculateOffsets = true,\n        colors:\n            | {\n                  [key: string]: ColorDefinition;\n              }\n            | undefined = undefined,\n        colorSafeSvg?: boolean,\n    ) {\n        if (src.endsWith(\"svg\")) {\n            const svgData = await GetSVGDimensions(src);\n            const width = svgData.width;\n            const height = svgData.height;\n            const originalSvg = await fetchAsString(src);\n            if (colorSafeSvg) {\n                const matches = originalSvg.match(/<(image|linearGradient|radialGradient)(\\s|>|\\/>)/gim);\n                if (matches && matches.length > 0) {\n                    throw new Error(\n                        \"Vector files may not include images or gradients when a color limit is specified.\",\n                    );\n                }\n            }\n            const svgAndColors = await generateSVGWithUnknownColors(originalSvg);\n            const data = {\n                src: src,\n                width,\n                height,\n                aspect: width / height,\n                svg: svgAndColors.svg,\n                colors: colors ?? svgAndColors.colors,\n            };\n            patternImageDataCache.set(src, data);\n            frameService.setPatternData(data, recalculateOffsets);\n        } else {\n            const arrayBuffer = await fetchAsArrayBuffer(src, true);\n            const attributes = await getAttributesFromArrayBuffer(arrayBuffer);\n            const data = {\n                src: src,\n                width: attributes.width,\n                height: attributes.height,\n                aspect: attributes.width / attributes.height,\n                svg: undefined,\n                colors: undefined,\n            };\n            patternImageDataCache.set(src, data);\n            frameService.setPatternData(data, recalculateOffsets);\n        }\n    }\n\n    async changeColors(\n        stepData: Step<FrameStepData>,\n        workflowManager: WorkflowManager,\n        newFills: Map<string, ColorDefinition>,\n    ) {\n        const frameService = (\n            workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as undefined | FrameStepHandle\n        )?.frameService;\n        if (!frameService || !frameService.getImageData()?.svg) {\n            console.warn(\"changeColors was called without an SVG being assigned to a frame step\");\n            return;\n        }\n        const colorData = await this.calculateColorMetadata(frameService, stepData, newFills);\n        workflowManager.updateMetadata(stepData.stepName, { colors: colorData.metadataColors });\n        workflowManager.updateStorage(stepData.stepName, {\n            colors: colorData.storageColors,\n        });\n        // Update image data without updating offsets\n        frameService.setPatternData(\n            {\n                ...frameService.getImageData()!,\n                colors: colorData.newColors,\n            },\n            false,\n        );\n        this.validateColorCount(stepData, workflowManager);\n    }\n\n    getUniqueColorCount(stepData: Step<FrameStepData>, workflowManager: WorkflowManager): number {\n        const frameService = (\n            workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as undefined | FrameStepHandle\n        )?.frameService;\n        if (!frameService) return 0;\n        const colors = frameService.getImageData()?.colors ?? {};\n        const unique: string[] = [];\n        for (const key in colors) {\n            const color = colors[key];\n            if (color.pmsValue) {\n                const pms = color.pmsValue.trim().toLocaleLowerCase();\n                if (!unique.includes(pms)) {\n                    unique.push(pms);\n                }\n            } else if (color.browserValue) {\n                // browserColorToHex already sanitizes value\n                const hex = browserColorToHex(color.browserValue);\n                if (!unique.includes(hex)) {\n                    unique.push(hex);\n                }\n            }\n        }\n        return unique.length;\n    }\n\n    private async calculateColorMetadata(\n        frameService: FrameService,\n        stepData: Step<FrameStepData>,\n        newFills: Map<string, ColorDefinition>,\n    ) {\n        if (!frameService.getImageData()?.svg) {\n            return {\n                newColors: undefined,\n                metadataColors: undefined,\n                storageColors: undefined,\n            };\n        }\n        // Compute change in color and apply to metadata\n        const newColors: { [key: string]: ColorDefinition } = { ...(frameService.getImageData()!.colors ?? {}) };\n        const storageColors: any = {};\n        Object.entries(newColors).forEach(([key, value]) => {\n            const color: any = { browserValue: value.browserValue };\n            storageColors[key] = color;\n        });\n        for (const [className, newFill] of newFills.entries()) {\n            newColors[className] = { browserValue: newFill.browserValue, pmsValue: newFill.pmsValue };\n            storageColors[className] = newFill;\n        }\n\n        let colors = Array.from(Object.values(newColors)).map((c) => c.browserValue);\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        if (colorOption) {\n            colorOption.variants?.forEach((v: VariantResource) => {\n                colors = colors.map((c) => (c.toLowerCase() === v.color?.toLowerCase() ? v.name : c));\n            });\n        }\n        return {\n            newColors,\n            metadataColors: colors,\n            storageColors,\n        };\n    }\n\n    private validateColorCount(stepData: Step<FrameStepData>, workflowManager: WorkflowManager) {\n        const maxColors = stepData.data.colorPickerEnabled ? (stepData.data.maxColors ?? 0) : 0;\n        workflowManager.setStepError(\n            stepData.stepName,\n            \"colors\",\n            maxColors > 0 && this.getUniqueColorCount(stepData, workflowManager) > maxColors\n                ? \"workflow.steps.frame.tooManyColors\"\n                : undefined,\n        );\n    }\n\n    private async selectVariantCommand(\n        stepData: Step<FrameStepData>,\n        variant: VariantResource | undefined,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n        setFrameIsUpdating?: (status: boolean) => void,\n        loadedPattern?: string,\n    ): Promise<CommandWithFollowup | null> {\n        const frameService = (\n            workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as undefined | FrameStepHandle\n        )?.frameService;\n        if (!frameService) throw new Error(\"Frame service unavailable, cannot load pattern!\");\n        const frameSvgs = await Promise.all(\n            stepData.data.regions.map((region) => this.frameSourceSvg(variant, region)),\n        );\n        setFrameIsUpdating && setFrameIsUpdating(true);\n        const initZoom = stepData.data.initialZoomLevel;\n        const createdData = await Promise.all(\n            stepData.data.regions.map(async (r, index) => {\n                const newFrameData = await getFrameData(frameSvgs[index]);\n                const existingImage = frameService.getImageData();\n                const removeExistingCommands = elements.map((elem) => new DeleteElementCommand(elem.id));\n                const newOffsets = existingImage\n                    ? calculateOffsets(\n                          existingImage,\n                          newFrameData,\n                          initZoom && !stepData.data.forceImageCover ? { scale: initZoom } : undefined,\n                          stepData.data.forceImageCover,\n                      )\n                    : undefined;\n                const pattern = existingImage\n                    ? {\n                          id: generate(),\n                          src: existingImage.src,\n                          x: newOffsets?.x || 0,\n                          y: newOffsets?.y || 0,\n                          width: existingImage.width,\n                          height: existingImage.height,\n                          scaleX: newOffsets?.zoom || 1,\n                          scaleY: newOffsets?.zoom || 1,\n                          rotation: 0,\n                      }\n                    : undefined;\n\n                const newElementId = generate();\n                const layouts = workflowManager.getLayouts();\n                const layout = layouts.find((layout: ILayout) => layout.panelId === r.panelId);\n                if (!layout) {\n                    throw new LayoutNotFoundError(r);\n                }\n                return {\n                    command: this.getCreateElementCommand(newElementId, r, index, layout, {\n                        frameData: newFrameData,\n                        pattern,\n                        disablePlaceholder: stepData.data.disablePlaceholder,\n                        stepName: stepData.stepName,\n                    }),\n                    regionEl: {\n                        id: newElementId,\n                        region: r,\n                        regionIndex: index,\n                    },\n                    removeExistingCommands,\n                };\n            }),\n        );\n\n        const createCommands = createdData.map((d) => d.command);\n        const removeExistingCommands = createdData.map((d) => d.removeExistingCommands).flat();\n        return {\n            command: new GroupCommand([...createCommands, ...removeExistingCommands]),\n            followup: async () => {\n                setFrameIsUpdating && setFrameIsUpdating(false);\n                await workflowManager.setSelectionsAndElements(\n                    stepData.stepName,\n                    variant ? [variant] : [],\n                    [...createdData.map((d) => d.regionEl)],\n                    async () => {\n                        workflowManager.updateStorage(stepData.stepName, { currentFrameSources: frameSvgs });\n                        if (loadedPattern) {\n                            const frameService = (\n                                workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as\n                                    | undefined\n                                    | FrameStepHandle\n                            )?.frameService;\n                            if (!frameService) throw new Error(\"Frame service unavailable, cannot load pattern!\");\n                            await this.loadPatternFromString(loadedPattern, frameService, true);\n                        }\n                    },\n                );\n            },\n        };\n    }\n\n    private frameSourceSvg = async (variant: undefined | VariantResource, region: Region): Promise<string> => {\n        if (!variant) {\n            return generateDefaultRectangleFrameSvg(region);\n        }\n        const asset = variant.asset;\n        if (!asset) {\n            throw new AssetNotFoundError(variant);\n        }\n        const link = asset.fileLink;\n        if (link) {\n            return fetchAsString(link, true);\n        }\n        throw new ResourceNotFoundError(asset);\n    };\n\n    /**\n     * Grab the source to be used for a frame from the variant or throw otherwise.\n     */\n    static patternSource(asset: Asset) {\n        const svgVersion = asset.versions?.find((v) => v.name === \"svg\");\n        if (svgVersion?.link) {\n            return svgVersion.link;\n        }\n        const cdnLink = asset.fileLink;\n        if (cdnLink) {\n            return cdnLink;\n        }\n        throw new ResourceNotFoundError(asset);\n    }\n\n    private async loadPatternFromAsset(\n        asset: Asset,\n        stepData: Step<FrameStepData>,\n        workflowManager: WorkflowManager,\n        recalculateOffsets: boolean,\n    ): Promise<void> {\n        const src = FrameStepService.patternSource(asset);\n        const updateId = workflowManager.markUpdatePending();\n        const frameService = (\n            workflowManager.getWorkflowExperience().getStepById(stepData.stepName) as undefined | FrameStepHandle\n        )?.frameService;\n        if (!frameService) {\n            workflowManager.markUpdateCompleted(updateId);\n            throw new Error(\"Frame service unavailable, cannot load pattern!\");\n        }\n        try {\n            await this.loadPatternFromString(\n                src,\n                frameService,\n                recalculateOffsets,\n                undefined,\n                stepData.data.colorPickerEnabled && !!stepData.data.maxColors && stepData.data.maxColors > 0,\n            );\n        } catch (e: any) {\n            workflowManager.markUpdateCompleted(updateId);\n            throw e;\n        }\n        const colorData = await this.calculateColorMetadata(\n            frameService,\n            stepData,\n            new Map(Object.entries(frameService.getImageData()?.colors ?? {})),\n        );\n        workflowManager.updateMetadata(stepData.stepName, { image: src, colors: colorData.metadataColors });\n        workflowManager.updateStorage(stepData.stepName, {\n            framePatternSrc: src,\n            colors: colorData.storageColors,\n        });\n        workflowManager.markUpdateCompleted(updateId);\n\n        workflowManager.setMandatoryFulfilled(stepData.stepName, true);\n        workflowManager.setInformationResults(\n            workflowManager.getInformationResults().filter((it) => it.stepID === stepData.stepName),\n        );\n        this.validateColorCount(stepData, workflowManager);\n    }\n}\n\nexport const frameStepService = new FrameStepService();\n","import { optionService } from \"../option\";\nimport {\n    ColorDefinition,\n    CommandWithFollowup,\n    ILayout,\n    IllustrationElement,\n    IllustrationStepData,\n    LayoutElementType,\n    LayoutsState,\n    Region,\n    Step,\n    VariantResource,\n} from \"../../types\";\nimport { RegionElement, StepService } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { LayoutNotFoundError, MisconfigurationError, ResourceNotFoundError } from \"../../util/exception\";\nimport { AssetNotFoundError } from \"../../util/exception\";\nimport { fetchAsString } from \"../../util/crossplatform\";\nimport {\n    CanvasCommand,\n    CreateElementCommand,\n    DeleteElementCommand,\n    GroupCommand,\n    IllustrationCacheCommand,\n    IllustrationColorCommand,\n} from \"../../command\";\nimport { findElement } from \"../../LayoutsState\";\nimport { generateSVGWithUnknownColors, modifySVGWithElementProperties } from \"../../util/illustration\";\nimport { svgObjectURL } from \"../../Elements/factory\";\nimport { LayoutData } from \"../../CommandContext\";\nimport { generate } from \"../../util/guid\";\n\nexport interface SVGCreateOpts {\n    stepName?: string;\n    src: string;\n    objectURL: string;\n    svg: {\n        svg: string;\n        colors: { [key: string]: ColorDefinition };\n    };\n}\n\nclass IllustrationStepService implements StepService<IllustrationStepData> {\n    async getIllustrationBody(src: string): Promise<string> {\n        return new Promise((resolve) => {\n            fetchAsString(src as string, true)\n                .then((svg) => {\n                    resolve(svg);\n                })\n                .catch((e) => console.error(e));\n        });\n    }\n\n    getCreateElementCommand(id: string, region: Region, regionIndex: number, layout: ILayout, options: SVGCreateOpts) {\n        return new CreateElementCommand<IllustrationElement>(\n            {\n                stepRegion: region,\n                stepRegionIndex: regionIndex,\n                stepName: options.stepName,\n                colors: options.svg.colors,\n                id,\n                src: options.src,\n                svg: options.svg.svg,\n                cachedObjectURL: options.objectURL,\n                type: LayoutElementType.Illustration,\n                y: region.top,\n                x: region.left,\n                rotation: region.rotation,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                immutable: region.immutable,\n            },\n            layout,\n        );\n    }\n\n    getColors(stepData: Step<IllustrationStepData>, workflowManager: WorkflowManager) {\n        const regionEls = workflowManager.getRegionElements(stepData.stepName) || [];\n        if (regionEls.length === 0) return [];\n        try {\n            const layoutElement = findElement(\n                regionEls[0].id,\n                workflowManager.getAllLayoutData(),\n            ) as IllustrationElement;\n            return layoutElement.colors;\n        } catch (e) {\n            return [];\n        }\n    }\n\n    async init(\n        stepData: Step<IllustrationStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new MisconfigurationError(stepData, \"No option configured for illustration step.\");\n        }\n        if (reducerState) {\n            return await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                return await this.selectVariantCommand(stepData, defaultVariant, [], workflowManager);\n            }\n        }\n        return null;\n    }\n\n    private async reload(\n        stepData: Step<IllustrationStepData>,\n        workflowManager: WorkflowManager,\n        reducerState: LayoutsState,\n    ) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant: VariantResource) => variant.id === variantId);\n                if (variant) {\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [variant],\n                        regionElements,\n                        async () => {\n                            workflowManager.updateMetadata(stepData.stepName, {\n                                colors: serializedStep.storage?.colors,\n                            });\n                        },\n                    );\n                }\n            } else throw new Error(\"Required illustration variant no longer available\");\n        }\n        return null;\n    }\n\n    async availableColors(stepData: Step<IllustrationStepData>, _workflowManager: WorkflowManager) {\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        if (colorOption) {\n            return colorOption\n                ? colorOption.variants?.map((variant: VariantResource) => {\n                      return {\n                          fill: variant.color,\n                          stroke: variant.color,\n                          variant,\n                          pmsValue: variant.name,\n                      };\n                  })\n                : [];\n        }\n        return [];\n    }\n\n    async changeColorsCommand(\n        svg: string,\n        illustrationWidth: number,\n        illustrationHeight: number,\n        elements: string[],\n        newFills: Map<string, string | ColorDefinition>,\n    ): Promise<CanvasCommand> {\n        const newColors: { [key: string]: ColorDefinition } = {};\n        for (const [className, newFill] of newFills.entries()) {\n            if (typeof newFill === \"string\") {\n                newColors[className] = {\n                    browserValue: newFill,\n                    spotColor: undefined,\n                    pmsValue: undefined,\n                };\n            } else {\n                newColors[className] = {\n                    browserValue: newFill.browserValue,\n                    spotColor: newFill.spotColor,\n                    pmsValue: newFill.pmsValue,\n                };\n            }\n        }\n        const svgData = modifySVGWithElementProperties(svg, illustrationWidth, illustrationHeight, newColors);\n        const objectURL = await svgObjectURL(svgData);\n        const commands: CanvasCommand[] = [];\n        for (const id of elements) {\n            for (const [className, newFill] of newFills.entries()) {\n                commands.push(new IllustrationColorCommand(id, className, newFill));\n            }\n            commands.push(new IllustrationCacheCommand(id, svgData, objectURL));\n        }\n        return new GroupCommand(commands);\n    }\n\n    async changeColors(\n        stepData: Step<IllustrationStepData>,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n        newFills: Map<string, string | ColorDefinition>,\n    ) {\n        if (elements.length === 0) {\n            return;\n        }\n\n        const layoutElement = findElement(\n            elements[0].id,\n            workflowManager\n                .getCommandContext()\n                .getAllLayouts()\n                .map((layout) => layout.layoutState),\n        ) as IllustrationElement;\n\n        // Compute change in color and apply to metadata\n        const newColors: { [key: string]: ColorDefinition } = { ...(layoutElement as IllustrationElement).colors };\n        const storageColors: any = {};\n        Object.entries(newColors).forEach(([key, value]) => {\n            const color: any = { browserValue: value.browserValue, pmsValue: value.pmsValue };\n            const spotColor = value.spotColor;\n            if (spotColor) {\n                color[\"spotColor\"] = { profileName: spotColor.profileName, namedColor: spotColor.namedColor };\n            }\n            storageColors[key] = color;\n        });\n        for (const [className, newFill] of newFills.entries()) {\n            const fill = typeof newFill === \"string\" ? newFill : newFill.browserValue;\n            const pmsValue = typeof newFill === \"string\" ? undefined : newFill.pmsValue;\n\n            if (className === \"\") {\n                // Ultimately we need to be able to set color channels as global config, but until then we\n                // assume that if we have a color with ID \"\" then the illustration has one channel.\n                // Currently we set classes like spiff-fill-black and spiff-fill-000000 but for\n                // global config channels to work, ColorOptionGlobalPropertyHandle.applyColorVariant as written expects classes like spiff-fill-1.\n                Object.keys(newColors).forEach((key) => {\n                    // We expect just one key.\n                    newColors[key] = { browserValue: fill, spotColor: newColors[key]?.spotColor, pmsValue };\n                    storageColors[key] = { browserValue: fill };\n                });\n            } else {\n                newColors[className] = { browserValue: fill, spotColor: newColors[className]?.spotColor, pmsValue };\n                storageColors[className] = { browserValue: fill };\n            }\n        }\n\n        let colors = Array.from(Object.values(newColors)).map((c) => c.browserValue);\n\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        if (colorOption) {\n            colorOption.variants?.forEach((v: VariantResource) => {\n                colors = colors.map((c) => (c.toLowerCase() === v.color?.toLowerCase() ? v.name : c));\n            });\n        }\n        workflowManager.updateMetadata(stepData.stepName, { colors });\n        const colorsForCommand: Map<string, ColorDefinition> = new Map();\n        Object.entries(newColors).forEach(([key, value]) => {\n            colorsForCommand.set(key, value);\n        });\n\n        if (!layoutElement.svg) {\n            throw new Error(\"Colors changed before SVG loaded. This should never happen!\");\n        }\n\n        const command = await this.changeColorsCommand(\n            layoutElement.svg,\n            layoutElement.width,\n            layoutElement.height,\n            elements.map((el) => el.id),\n            colorsForCommand,\n        );\n        workflowManager.updateStorage(stepData.stepName, {\n            colors: storageColors,\n        });\n        workflowManager.getCommandDispatcher()(command);\n    }\n\n    async selectVariant(\n        stepData: Step<IllustrationStepData>,\n        variant: VariantResource,\n        elements: RegionElement[],\n        setIsUpdating: (isUpdating: boolean) => void,\n        workflowManager: WorkflowManager,\n    ) {\n        setIsUpdating(true);\n        try {\n            const result = await this.selectVariantCommand(stepData, variant, elements, workflowManager);\n            if (result) {\n                result.command && workflowManager.getCommandDispatcher()(result.command);\n                result.followup && (await result.followup());\n            }\n        } finally {\n            setIsUpdating(false);\n        }\n    }\n\n    private async selectVariantCommand(\n        stepData: Step<IllustrationStepData>,\n        variant: VariantResource,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ): Promise<CommandWithFollowup | null> {\n        if (!stepData.data || !stepData.data.regions) {\n            throw new MisconfigurationError(stepData, \"Missing regions.\");\n        }\n        const asset = variant.asset;\n        if (!asset) {\n            throw new AssetNotFoundError(variant);\n        }\n        const link = asset.fileLink;\n\n        if (!link) {\n            throw new ResourceNotFoundError(asset);\n        }\n\n        if (stepData.mandatory) {\n            workflowManager.setMandatoryFulfilled(stepData.stepName, false);\n        }\n\n        const deleteCommands = elements.map((el) => new DeleteElementCommand(el.id));\n\n        const svgData = await generateSVGWithUnknownColors(await this.getIllustrationBody(link));\n        const objectURL = await svgObjectURL(svgData.svg);\n        const createElementForRegion = (region: Region, regionIndex: number) => {\n            const layout = workflowManager.getLayouts().find((layout: ILayout) => layout.panelId === region.panelId);\n            if (!layout) {\n                throw new LayoutNotFoundError(region);\n            }\n            const elementKey = generate();\n            return {\n                regionElement: { id: elementKey, region, regionIndex },\n                command: this.getCreateElementCommand(elementKey, region, regionIndex, layout, {\n                    stepName: stepData.stepName,\n                    src: link,\n                    objectURL,\n                    svg: svgData,\n                }),\n            };\n        };\n        const elementsWithCommands = stepData.data.regions.map(createElementForRegion);\n        const createCommands = elementsWithCommands.map((r) => r.command);\n        const commandList: CanvasCommand[] = [...deleteCommands, ...createCommands];\n\n        let colors = Array.from(Object.values(svgData.colors)).map((c) => c.browserValue);\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        if (colorOption) {\n            colorOption.variants?.forEach((v: VariantResource) => {\n                colors = colors.map((c) => (c.toLowerCase() === v.color?.toLowerCase() ? v.name : c));\n            });\n        }\n\n        workflowManager.updateMetadata(stepData.stepName, { colors: colors });\n        return {\n            command: new GroupCommand(commandList),\n            followup: async () => {\n                const targetElements = elementsWithCommands.map((r) => r.regionElement);\n                await workflowManager.setSelectionsAndElements(stepData.stepName, [variant], targetElements);\n\n                // If the illustration has an asset configuration then we need to apply it.\n                const defaultColorVariants = asset.assetConfiguration?.defaultColorVariants || [];\n                if (defaultColorVariants.length !== 0) {\n                    const modifiedColors: { [id: string]: ColorDefinition } = {};\n                    const channelNumbers = asset.assetConfiguration?.channelNumbers || [];\n                    channelNumbers.forEach((cn) => {\n                        const v = defaultColorVariants.find((item) => item.channelNumber === cn.number);\n                        if (v) {\n                            modifiedColors[`${cn.id.replace(/\\W/g, \"\")}`] = { browserValue: v?.variant?.color || \"\" };\n                        }\n                    });\n                    await this.changeColors(\n                        stepData,\n                        targetElements,\n                        workflowManager,\n                        new Map(Object.entries(modifiedColors)),\n                    );\n                }\n\n                if (stepData.data.colorPickerEnabled) {\n                    // When the color picker is enabled & only 1 variant is available, we immediately apply\n                    // the variant to the illustration.\n                    const availableColors = (await this.availableColors(stepData, workflowManager)) || [];\n                    const colorEntries = Object.keys(svgData.colors);\n                    const singleColor = availableColors.length === 1 && colorEntries.length === 1;\n                    if (singleColor) {\n                        const color = availableColors[0];\n                        const entry = colorEntries[0];\n                        await this.changeColors(\n                            stepData,\n                            targetElements,\n                            workflowManager,\n                            new Map([[entry, color.variant.color!]]),\n                        );\n                    }\n\n                    if (!singleColor && defaultColorVariants.length === 0) {\n                        // This \"change\" is just to populate color metadata.\n                        await this.changeColors(stepData, targetElements, workflowManager, new Map());\n                    }\n                }\n            },\n        };\n    }\n}\n\nexport const illustrationStepService = new IllustrationStepService();\n","import { optionService } from \"../option\";\nimport { CommandWithFollowup, LayoutsState, MaterialStepData, Step, StepService, VariantResource } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { AssetNotFoundError, OptionNotFoundError } from \"../../util/exception\";\n\nclass MaterialStepService implements StepService<MaterialStepData> {\n    async init(\n        stepData: Step<MaterialStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<null | CommandWithFollowup> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new OptionNotFoundError(stepData);\n        }\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                return await this.selectVariantLambda(stepData, defaultVariant, workflowManager, () => {});\n            }\n        }\n        return null;\n    }\n\n    private async reload(\n        stepData: Step<MaterialStepData>,\n        workflowManager: WorkflowManager,\n        reducerState: LayoutsState,\n    ) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) throw new OptionNotFoundError(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (variantId) {\n                const variant = option.variants?.find((variant: VariantResource) => variant.id === variantId);\n                if (variant) {\n                    const material = variant.material;\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [variant],\n                        regionElements,\n                        async () => {\n                            const modelContainer = workflowManager.getModelContainer();\n                            if (modelContainer) {\n                                const variantPromises = stepData.data.targetMaterials.map((matName) => {\n                                    return modelContainer.applyMaterialVariant(\n                                        matName,\n                                        option.id || \"\",\n                                        material || {},\n                                    );\n                                });\n                                Promise.all(variantPromises);\n                            }\n                        },\n                    );\n                }\n            }\n        }\n    }\n\n    async selectVariant(\n        step: Step<MaterialStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setApplying: (status: boolean) => void,\n    ) {\n        const result = await this.selectVariantLambda(step, variant, workflowManager, setApplying);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async selectVariantLambda(\n        step: Step<MaterialStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setApplying: (status: boolean) => void,\n    ): Promise<CommandWithFollowup | null> {\n        const modelContainer = workflowManager.getModelContainer();\n        setApplying(true);\n        const material = variant.material;\n        if (!material) {\n            setApplying(false);\n            throw new AssetNotFoundError(variant);\n        }\n        return {\n            command: undefined,\n            followup: async () => {\n                await workflowManager.setSelectionsAndElements(step.stepName, [variant], [], async () => {\n                    try {\n                        if (modelContainer) {\n                            step.data.targetMaterials.forEach((matName) => {\n                                step.option &&\n                                    modelContainer.applyMaterialVariant(matName, step.option.id || \"\", material);\n                            });\n                        }\n                    } finally {\n                        setApplying(false);\n                    }\n                });\n            },\n        };\n    }\n}\n\nexport const materialStepService = new MaterialStepService();\n","import { optionService } from \"../option\";\nimport { CommandWithFollowup, LayoutsState, ModelStepData, Step, StepService, VariantResource } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { OptionNotFoundError } from \"../../util/exception\";\nimport { AssetNotFoundError } from \"../../util/exception\";\n\nclass ModelStepService implements StepService<ModelStepData> {\n    async init(\n        stepData: Step<ModelStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) throw new OptionNotFoundError(stepData);\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                return await this.selectVariantLambda(stepData, defaultVariant, workflowManager, () => {});\n            }\n        }\n        return null;\n    }\n\n    private async reload(stepData: Step<ModelStepData>, workflowManager: WorkflowManager, reducerState: LayoutsState) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant: VariantResource) => variant.id === variantId);\n                if (variant) {\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [variant],\n                        regionElements,\n                        async () => {\n                            const modelContainer = workflowManager.getModelContainer();\n                            if (modelContainer && stepData.option) {\n                                const highlightedRef = variant.asset?.fileLink;\n                                if (!highlightedRef) throw new AssetNotFoundError(variant);\n                                await modelContainer.applyModelVariant(\n                                    stepData.stepName || \"\",\n                                    {\n                                        model: highlightedRef,\n                                        contextService: workflowManager.getLayoutPreviewService(),\n                                    },\n                                    stepData.data.replaceProductModel || false,\n                                );\n                            }\n                        },\n                    );\n                }\n            }\n        }\n    }\n\n    async selectVariant(\n        step: Step<ModelStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setApplying: (status: boolean) => void,\n    ) {\n        const result = await this.selectVariantLambda(step, variant, workflowManager, setApplying);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async selectVariantLambda(\n        step: Step<ModelStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setApplying: (status: boolean) => void,\n    ): Promise<CommandWithFollowup | null> {\n        setApplying(true);\n        const modelRef = variant.asset?.fileLink;\n        if (!modelRef) {\n            throw new AssetNotFoundError(variant);\n        }\n        return {\n            command: undefined,\n            followup: async () => {\n                await workflowManager.setSelectionsAndElements(step.stepName, [variant], [], async () => {\n                    try {\n                        const modelContainer = workflowManager.getModelContainer();\n                        // We let selection logic apply. But if the preview service has failed\n                        // to load we don't want to throw an error. Instead we just don't\n                        // load the 3D model.\n                        if (modelContainer) {\n                            await modelContainer.applyModelVariant(\n                                step.stepName,\n                                {\n                                    model: modelRef,\n                                    contextService: workflowManager.getLayoutPreviewService(),\n                                },\n                                step.data.replaceProductModel || false,\n                            );\n                        }\n                    } finally {\n                        setApplying(false);\n                    }\n                });\n            },\n        };\n    }\n}\n\nexport const modelStepService = new ModelStepService();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\nexports.extendedPictographic = /^[\\u00A9\\u00AE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9-\\u21AA\\u231A-\\u231B\\u2328\\u2388\\u23CF\\u23E9-\\u23EC\\u23ED-\\u23EE\\u23EF\\u23F0\\u23F1-\\u23F2\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA-\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2601\\u2602-\\u2603\\u2604\\u2605\\u2607-\\u260D\\u260E\\u260F-\\u2610\\u2611\\u2612\\u2614-\\u2615\\u2616-\\u2617\\u2618\\u2619-\\u261C\\u261D\\u261E-\\u261F\\u2620\\u2621\\u2622-\\u2623\\u2624-\\u2625\\u2626\\u2627-\\u2629\\u262A\\u262B-\\u262D\\u262E\\u262F\\u2630-\\u2637\\u2638-\\u2639\\u263A\\u263B-\\u263F\\u2640\\u2641\\u2642\\u2643-\\u2647\\u2648-\\u2653\\u2654-\\u265E\\u265F\\u2660\\u2661-\\u2662\\u2663\\u2664\\u2665-\\u2666\\u2667\\u2668\\u2669-\\u267A\\u267B\\u267C-\\u267D\\u267E\\u267F\\u2680-\\u2685\\u2690-\\u2691\\u2692\\u2693\\u2694\\u2695\\u2696-\\u2697\\u2698\\u2699\\u269A\\u269B-\\u269C\\u269D-\\u269F\\u26A0-\\u26A1\\u26A2-\\u26A6\\u26A7\\u26A8-\\u26A9\\u26AA-\\u26AB\\u26AC-\\u26AF\\u26B0-\\u26B1\\u26B2-\\u26BC\\u26BD-\\u26BE\\u26BF-\\u26C3\\u26C4-\\u26C5\\u26C6-\\u26C7\\u26C8\\u26C9-\\u26CD\\u26CE\\u26CF\\u26D0\\u26D1\\u26D2\\u26D3\\u26D4\\u26D5-\\u26E8\\u26E9\\u26EA\\u26EB-\\u26EF\\u26F0-\\u26F1\\u26F2-\\u26F3\\u26F4\\u26F5\\u26F6\\u26F7-\\u26F9\\u26FA\\u26FB-\\u26FC\\u26FD\\u26FE-\\u2701\\u2702\\u2703-\\u2704\\u2705\\u2708-\\u270C\\u270D\\u270E\\u270F\\u2710-\\u2711\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733-\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2765-\\u2767\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934-\\u2935\\u2B05-\\u2B07\\u2B1B-\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299\\u{01F000}-\\u{01F003}\\u{01F004}\\u{01F005}-\\u{01F0CE}\\u{01F0CF}\\u{01F0D0}-\\u{01F0FF}\\u{01F10D}-\\u{01F10F}\\u{01F12F}\\u{01F16C}-\\u{01F16F}\\u{01F170}-\\u{01F171}\\u{01F17E}-\\u{01F17F}\\u{01F18E}\\u{01F191}-\\u{01F19A}\\u{01F1AD}-\\u{01F1E5}\\u{01F201}-\\u{01F202}\\u{01F203}-\\u{01F20F}\\u{01F21A}\\u{01F22F}\\u{01F232}-\\u{01F23A}\\u{01F23C}-\\u{01F23F}\\u{01F249}-\\u{01F24F}\\u{01F250}-\\u{01F251}\\u{01F252}-\\u{01F2FF}\\u{01F300}-\\u{01F30C}\\u{01F30D}-\\u{01F30E}\\u{01F30F}\\u{01F310}\\u{01F311}\\u{01F312}\\u{01F313}-\\u{01F315}\\u{01F316}-\\u{01F318}\\u{01F319}\\u{01F31A}\\u{01F31B}\\u{01F31C}\\u{01F31D}-\\u{01F31E}\\u{01F31F}-\\u{01F320}\\u{01F321}\\u{01F322}-\\u{01F323}\\u{01F324}-\\u{01F32C}\\u{01F32D}-\\u{01F32F}\\u{01F330}-\\u{01F331}\\u{01F332}-\\u{01F333}\\u{01F334}-\\u{01F335}\\u{01F336}\\u{01F337}-\\u{01F34A}\\u{01F34B}\\u{01F34C}-\\u{01F34F}\\u{01F350}\\u{01F351}-\\u{01F37B}\\u{01F37C}\\u{01F37D}\\u{01F37E}-\\u{01F37F}\\u{01F380}-\\u{01F393}\\u{01F394}-\\u{01F395}\\u{01F396}-\\u{01F397}\\u{01F398}\\u{01F399}-\\u{01F39B}\\u{01F39C}-\\u{01F39D}\\u{01F39E}-\\u{01F39F}\\u{01F3A0}-\\u{01F3C4}\\u{01F3C5}\\u{01F3C6}\\u{01F3C7}\\u{01F3C8}\\u{01F3C9}\\u{01F3CA}\\u{01F3CB}-\\u{01F3CE}\\u{01F3CF}-\\u{01F3D3}\\u{01F3D4}-\\u{01F3DF}\\u{01F3E0}-\\u{01F3E3}\\u{01F3E4}\\u{01F3E5}-\\u{01F3F0}\\u{01F3F1}-\\u{01F3F2}\\u{01F3F3}\\u{01F3F4}\\u{01F3F5}\\u{01F3F6}\\u{01F3F7}\\u{01F3F8}-\\u{01F3FA}\\u{01F400}-\\u{01F407}\\u{01F408}\\u{01F409}-\\u{01F40B}\\u{01F40C}-\\u{01F40E}\\u{01F40F}-\\u{01F410}\\u{01F411}-\\u{01F412}\\u{01F413}\\u{01F414}\\u{01F415}\\u{01F416}\\u{01F417}-\\u{01F429}\\u{01F42A}\\u{01F42B}-\\u{01F43E}\\u{01F43F}\\u{01F440}\\u{01F441}\\u{01F442}-\\u{01F464}\\u{01F465}\\u{01F466}-\\u{01F46B}\\u{01F46C}-\\u{01F46D}\\u{01F46E}-\\u{01F4AC}\\u{01F4AD}\\u{01F4AE}-\\u{01F4B5}\\u{01F4B6}-\\u{01F4B7}\\u{01F4B8}-\\u{01F4EB}\\u{01F4EC}-\\u{01F4ED}\\u{01F4EE}\\u{01F4EF}\\u{01F4F0}-\\u{01F4F4}\\u{01F4F5}\\u{01F4F6}-\\u{01F4F7}\\u{01F4F8}\\u{01F4F9}-\\u{01F4FC}\\u{01F4FD}\\u{01F4FE}\\u{01F4FF}-\\u{01F502}\\u{01F503}\\u{01F504}-\\u{01F507}\\u{01F508}\\u{01F509}\\u{01F50A}-\\u{01F514}\\u{01F515}\\u{01F516}-\\u{01F52B}\\u{01F52C}-\\u{01F52D}\\u{01F52E}-\\u{01F53D}\\u{01F546}-\\u{01F548}\\u{01F549}-\\u{01F54A}\\u{01F54B}-\\u{01F54E}\\u{01F54F}\\u{01F550}-\\u{01F55B}\\u{01F55C}-\\u{01F567}\\u{01F568}-\\u{01F56E}\\u{01F56F}-\\u{01F570}\\u{01F571}-\\u{01F572}\\u{01F573}-\\u{01F579}\\u{01F57A}\\u{01F57B}-\\u{01F586}\\u{01F587}\\u{01F588}-\\u{01F589}\\u{01F58A}-\\u{01F58D}\\u{01F58E}-\\u{01F58F}\\u{01F590}\\u{01F591}-\\u{01F594}\\u{01F595}-\\u{01F596}\\u{01F597}-\\u{01F5A3}\\u{01F5A4}\\u{01F5A5}\\u{01F5A6}-\\u{01F5A7}\\u{01F5A8}\\u{01F5A9}-\\u{01F5B0}\\u{01F5B1}-\\u{01F5B2}\\u{01F5B3}-\\u{01F5BB}\\u{01F5BC}\\u{01F5BD}-\\u{01F5C1}\\u{01F5C2}-\\u{01F5C4}\\u{01F5C5}-\\u{01F5D0}\\u{01F5D1}-\\u{01F5D3}\\u{01F5D4}-\\u{01F5DB}\\u{01F5DC}-\\u{01F5DE}\\u{01F5DF}-\\u{01F5E0}\\u{01F5E1}\\u{01F5E2}\\u{01F5E3}\\u{01F5E4}-\\u{01F5E7}\\u{01F5E8}\\u{01F5E9}-\\u{01F5EE}\\u{01F5EF}\\u{01F5F0}-\\u{01F5F2}\\u{01F5F3}\\u{01F5F4}-\\u{01F5F9}\\u{01F5FA}\\u{01F5FB}-\\u{01F5FF}\\u{01F600}\\u{01F601}-\\u{01F606}\\u{01F607}-\\u{01F608}\\u{01F609}-\\u{01F60D}\\u{01F60E}\\u{01F60F}\\u{01F610}\\u{01F611}\\u{01F612}-\\u{01F614}\\u{01F615}\\u{01F616}\\u{01F617}\\u{01F618}\\u{01F619}\\u{01F61A}\\u{01F61B}\\u{01F61C}-\\u{01F61E}\\u{01F61F}\\u{01F620}-\\u{01F625}\\u{01F626}-\\u{01F627}\\u{01F628}-\\u{01F62B}\\u{01F62C}\\u{01F62D}\\u{01F62E}-\\u{01F62F}\\u{01F630}-\\u{01F633}\\u{01F634}\\u{01F635}\\u{01F636}\\u{01F637}-\\u{01F640}\\u{01F641}-\\u{01F644}\\u{01F645}-\\u{01F64F}\\u{01F680}\\u{01F681}-\\u{01F682}\\u{01F683}-\\u{01F685}\\u{01F686}\\u{01F687}\\u{01F688}\\u{01F689}\\u{01F68A}-\\u{01F68B}\\u{01F68C}\\u{01F68D}\\u{01F68E}\\u{01F68F}\\u{01F690}\\u{01F691}-\\u{01F693}\\u{01F694}\\u{01F695}\\u{01F696}\\u{01F697}\\u{01F698}\\u{01F699}-\\u{01F69A}\\u{01F69B}-\\u{01F6A1}\\u{01F6A2}\\u{01F6A3}\\u{01F6A4}-\\u{01F6A5}\\u{01F6A6}\\u{01F6A7}-\\u{01F6AD}\\u{01F6AE}-\\u{01F6B1}\\u{01F6B2}\\u{01F6B3}-\\u{01F6B5}\\u{01F6B6}\\u{01F6B7}-\\u{01F6B8}\\u{01F6B9}-\\u{01F6BE}\\u{01F6BF}\\u{01F6C0}\\u{01F6C1}-\\u{01F6C5}\\u{01F6C6}-\\u{01F6CA}\\u{01F6CB}\\u{01F6CC}\\u{01F6CD}-\\u{01F6CF}\\u{01F6D0}\\u{01F6D1}-\\u{01F6D2}\\u{01F6D3}-\\u{01F6D4}\\u{01F6D5}\\u{01F6D6}-\\u{01F6D7}\\u{01F6D8}-\\u{01F6DF}\\u{01F6E0}-\\u{01F6E5}\\u{01F6E6}-\\u{01F6E8}\\u{01F6E9}\\u{01F6EA}\\u{01F6EB}-\\u{01F6EC}\\u{01F6ED}-\\u{01F6EF}\\u{01F6F0}\\u{01F6F1}-\\u{01F6F2}\\u{01F6F3}\\u{01F6F4}-\\u{01F6F6}\\u{01F6F7}-\\u{01F6F8}\\u{01F6F9}\\u{01F6FA}\\u{01F6FB}-\\u{01F6FC}\\u{01F6FD}-\\u{01F6FF}\\u{01F774}-\\u{01F77F}\\u{01F7D5}-\\u{01F7DF}\\u{01F7E0}-\\u{01F7EB}\\u{01F7EC}-\\u{01F7FF}\\u{01F80C}-\\u{01F80F}\\u{01F848}-\\u{01F84F}\\u{01F85A}-\\u{01F85F}\\u{01F888}-\\u{01F88F}\\u{01F8AE}-\\u{01F8FF}\\u{01F90C}\\u{01F90D}-\\u{01F90F}\\u{01F910}-\\u{01F918}\\u{01F919}-\\u{01F91E}\\u{01F91F}\\u{01F920}-\\u{01F927}\\u{01F928}-\\u{01F92F}\\u{01F930}\\u{01F931}-\\u{01F932}\\u{01F933}-\\u{01F93A}\\u{01F93C}-\\u{01F93E}\\u{01F93F}\\u{01F940}-\\u{01F945}\\u{01F947}-\\u{01F94B}\\u{01F94C}\\u{01F94D}-\\u{01F94F}\\u{01F950}-\\u{01F95E}\\u{01F95F}-\\u{01F96B}\\u{01F96C}-\\u{01F970}\\u{01F971}\\u{01F972}\\u{01F973}-\\u{01F976}\\u{01F977}-\\u{01F978}\\u{01F979}\\u{01F97A}\\u{01F97B}\\u{01F97C}-\\u{01F97F}\\u{01F980}-\\u{01F984}\\u{01F985}-\\u{01F991}\\u{01F992}-\\u{01F997}\\u{01F998}-\\u{01F9A2}\\u{01F9A3}-\\u{01F9A4}\\u{01F9A5}-\\u{01F9AA}\\u{01F9AB}-\\u{01F9AD}\\u{01F9AE}-\\u{01F9AF}\\u{01F9B0}-\\u{01F9B9}\\u{01F9BA}-\\u{01F9BF}\\u{01F9C0}\\u{01F9C1}-\\u{01F9C2}\\u{01F9C3}-\\u{01F9CA}\\u{01F9CB}\\u{01F9CC}\\u{01F9CD}-\\u{01F9CF}\\u{01F9D0}-\\u{01F9E6}\\u{01F9E7}-\\u{01F9FF}\\u{01FA00}-\\u{01FA6F}\\u{01FA70}-\\u{01FA73}\\u{01FA74}\\u{01FA75}-\\u{01FA77}\\u{01FA78}-\\u{01FA7A}\\u{01FA7B}-\\u{01FA7F}\\u{01FA80}-\\u{01FA82}\\u{01FA83}-\\u{01FA86}\\u{01FA87}-\\u{01FA8F}\\u{01FA90}-\\u{01FA95}\\u{01FA96}-\\u{01FAA8}\\u{01FAA9}-\\u{01FAAF}\\u{01FAB0}-\\u{01FAB6}\\u{01FAB7}-\\u{01FABF}\\u{01FAC0}-\\u{01FAC2}\\u{01FAC3}-\\u{01FACF}\\u{01FAD0}-\\u{01FAD6}\\u{01FAD7}-\\u{01FAFF}\\u{01FC00}-\\u{01FFFD}]/u;\nexports.WORD_BREAK_PROPERTY = [\n    [/*start*/ 0x0, 0 /* Other */],\n    [/*start*/ 0xA, 1 /* LF */],\n    [/*start*/ 0xB, 2 /* Newline */],\n    [/*start*/ 0xD, 3 /* CR */],\n    [/*start*/ 0xE, 0 /* Other */],\n    [/*start*/ 0x20, 4 /* WSegSpace */],\n    [/*start*/ 0x21, 0 /* Other */],\n    [/*start*/ 0x22, 5 /* Double_Quote */],\n    [/*start*/ 0x23, 0 /* Other */],\n    [/*start*/ 0x27, 6 /* Single_Quote */],\n    [/*start*/ 0x28, 0 /* Other */],\n    [/*start*/ 0x2C, 7 /* MidNum */],\n    [/*start*/ 0x2D, 0 /* Other */],\n    [/*start*/ 0x2E, 8 /* MidNumLet */],\n    [/*start*/ 0x2F, 0 /* Other */],\n    [/*start*/ 0x30, 9 /* Numeric */],\n    [/*start*/ 0x3A, 10 /* MidLetter */],\n    [/*start*/ 0x3B, 7 /* MidNum */],\n    [/*start*/ 0x3C, 0 /* Other */],\n    [/*start*/ 0x41, 11 /* ALetter */],\n    [/*start*/ 0x5B, 0 /* Other */],\n    [/*start*/ 0x5F, 12 /* ExtendNumLet */],\n    [/*start*/ 0x60, 0 /* Other */],\n    [/*start*/ 0x61, 11 /* ALetter */],\n    [/*start*/ 0x7B, 0 /* Other */],\n    [/*start*/ 0x85, 2 /* Newline */],\n    [/*start*/ 0x86, 0 /* Other */],\n    [/*start*/ 0xAA, 11 /* ALetter */],\n    [/*start*/ 0xAB, 0 /* Other */],\n    [/*start*/ 0xAD, 13 /* Format */],\n    [/*start*/ 0xAE, 0 /* Other */],\n    [/*start*/ 0xB5, 11 /* ALetter */],\n    [/*start*/ 0xB6, 0 /* Other */],\n    [/*start*/ 0xB7, 10 /* MidLetter */],\n    [/*start*/ 0xB8, 0 /* Other */],\n    [/*start*/ 0xBA, 11 /* ALetter */],\n    [/*start*/ 0xBB, 0 /* Other */],\n    [/*start*/ 0xC0, 11 /* ALetter */],\n    [/*start*/ 0xD7, 0 /* Other */],\n    [/*start*/ 0xD8, 11 /* ALetter */],\n    [/*start*/ 0xF7, 0 /* Other */],\n    [/*start*/ 0xF8, 11 /* ALetter */],\n    [/*start*/ 0x2D8, 0 /* Other */],\n    [/*start*/ 0x2DE, 11 /* ALetter */],\n    [/*start*/ 0x300, 14 /* Extend */],\n    [/*start*/ 0x370, 11 /* ALetter */],\n    [/*start*/ 0x375, 0 /* Other */],\n    [/*start*/ 0x376, 11 /* ALetter */],\n    [/*start*/ 0x378, 0 /* Other */],\n    [/*start*/ 0x37A, 11 /* ALetter */],\n    [/*start*/ 0x37E, 7 /* MidNum */],\n    [/*start*/ 0x37F, 11 /* ALetter */],\n    [/*start*/ 0x380, 0 /* Other */],\n    [/*start*/ 0x386, 11 /* ALetter */],\n    [/*start*/ 0x387, 10 /* MidLetter */],\n    [/*start*/ 0x388, 11 /* ALetter */],\n    [/*start*/ 0x38B, 0 /* Other */],\n    [/*start*/ 0x38C, 11 /* ALetter */],\n    [/*start*/ 0x38D, 0 /* Other */],\n    [/*start*/ 0x38E, 11 /* ALetter */],\n    [/*start*/ 0x3A2, 0 /* Other */],\n    [/*start*/ 0x3A3, 11 /* ALetter */],\n    [/*start*/ 0x3F6, 0 /* Other */],\n    [/*start*/ 0x3F7, 11 /* ALetter */],\n    [/*start*/ 0x482, 0 /* Other */],\n    [/*start*/ 0x483, 14 /* Extend */],\n    [/*start*/ 0x48A, 11 /* ALetter */],\n    [/*start*/ 0x530, 0 /* Other */],\n    [/*start*/ 0x531, 11 /* ALetter */],\n    [/*start*/ 0x557, 0 /* Other */],\n    [/*start*/ 0x559, 11 /* ALetter */],\n    [/*start*/ 0x55D, 0 /* Other */],\n    [/*start*/ 0x55E, 11 /* ALetter */],\n    [/*start*/ 0x55F, 10 /* MidLetter */],\n    [/*start*/ 0x560, 11 /* ALetter */],\n    [/*start*/ 0x589, 7 /* MidNum */],\n    [/*start*/ 0x58A, 11 /* ALetter */],\n    [/*start*/ 0x58B, 0 /* Other */],\n    [/*start*/ 0x591, 14 /* Extend */],\n    [/*start*/ 0x5BE, 0 /* Other */],\n    [/*start*/ 0x5BF, 14 /* Extend */],\n    [/*start*/ 0x5C0, 0 /* Other */],\n    [/*start*/ 0x5C1, 14 /* Extend */],\n    [/*start*/ 0x5C3, 0 /* Other */],\n    [/*start*/ 0x5C4, 14 /* Extend */],\n    [/*start*/ 0x5C6, 0 /* Other */],\n    [/*start*/ 0x5C7, 14 /* Extend */],\n    [/*start*/ 0x5C8, 0 /* Other */],\n    [/*start*/ 0x5D0, 15 /* Hebrew_Letter */],\n    [/*start*/ 0x5EB, 0 /* Other */],\n    [/*start*/ 0x5EF, 15 /* Hebrew_Letter */],\n    [/*start*/ 0x5F3, 11 /* ALetter */],\n    [/*start*/ 0x5F4, 10 /* MidLetter */],\n    [/*start*/ 0x5F5, 0 /* Other */],\n    [/*start*/ 0x600, 13 /* Format */],\n    [/*start*/ 0x606, 0 /* Other */],\n    [/*start*/ 0x60C, 7 /* MidNum */],\n    [/*start*/ 0x60E, 0 /* Other */],\n    [/*start*/ 0x610, 14 /* Extend */],\n    [/*start*/ 0x61B, 0 /* Other */],\n    [/*start*/ 0x61C, 13 /* Format */],\n    [/*start*/ 0x61D, 0 /* Other */],\n    [/*start*/ 0x620, 11 /* ALetter */],\n    [/*start*/ 0x64B, 14 /* Extend */],\n    [/*start*/ 0x660, 9 /* Numeric */],\n    [/*start*/ 0x66A, 0 /* Other */],\n    [/*start*/ 0x66B, 9 /* Numeric */],\n    [/*start*/ 0x66C, 7 /* MidNum */],\n    [/*start*/ 0x66D, 0 /* Other */],\n    [/*start*/ 0x66E, 11 /* ALetter */],\n    [/*start*/ 0x670, 14 /* Extend */],\n    [/*start*/ 0x671, 11 /* ALetter */],\n    [/*start*/ 0x6D4, 0 /* Other */],\n    [/*start*/ 0x6D5, 11 /* ALetter */],\n    [/*start*/ 0x6D6, 14 /* Extend */],\n    [/*start*/ 0x6DD, 13 /* Format */],\n    [/*start*/ 0x6DE, 0 /* Other */],\n    [/*start*/ 0x6DF, 14 /* Extend */],\n    [/*start*/ 0x6E5, 11 /* ALetter */],\n    [/*start*/ 0x6E7, 14 /* Extend */],\n    [/*start*/ 0x6E9, 0 /* Other */],\n    [/*start*/ 0x6EA, 14 /* Extend */],\n    [/*start*/ 0x6EE, 11 /* ALetter */],\n    [/*start*/ 0x6F0, 9 /* Numeric */],\n    [/*start*/ 0x6FA, 11 /* ALetter */],\n    [/*start*/ 0x6FD, 0 /* Other */],\n    [/*start*/ 0x6FF, 11 /* ALetter */],\n    [/*start*/ 0x700, 0 /* Other */],\n    [/*start*/ 0x70F, 13 /* Format */],\n    [/*start*/ 0x710, 11 /* ALetter */],\n    [/*start*/ 0x711, 14 /* Extend */],\n    [/*start*/ 0x712, 11 /* ALetter */],\n    [/*start*/ 0x730, 14 /* Extend */],\n    [/*start*/ 0x74B, 0 /* Other */],\n    [/*start*/ 0x74D, 11 /* ALetter */],\n    [/*start*/ 0x7A6, 14 /* Extend */],\n    [/*start*/ 0x7B1, 11 /* ALetter */],\n    [/*start*/ 0x7B2, 0 /* Other */],\n    [/*start*/ 0x7C0, 9 /* Numeric */],\n    [/*start*/ 0x7CA, 11 /* ALetter */],\n    [/*start*/ 0x7EB, 14 /* Extend */],\n    [/*start*/ 0x7F4, 11 /* ALetter */],\n    [/*start*/ 0x7F6, 0 /* Other */],\n    [/*start*/ 0x7F8, 7 /* MidNum */],\n    [/*start*/ 0x7F9, 0 /* Other */],\n    [/*start*/ 0x7FA, 11 /* ALetter */],\n    [/*start*/ 0x7FB, 0 /* Other */],\n    [/*start*/ 0x7FD, 14 /* Extend */],\n    [/*start*/ 0x7FE, 0 /* Other */],\n    [/*start*/ 0x800, 11 /* ALetter */],\n    [/*start*/ 0x816, 14 /* Extend */],\n    [/*start*/ 0x81A, 11 /* ALetter */],\n    [/*start*/ 0x81B, 14 /* Extend */],\n    [/*start*/ 0x824, 11 /* ALetter */],\n    [/*start*/ 0x825, 14 /* Extend */],\n    [/*start*/ 0x828, 11 /* ALetter */],\n    [/*start*/ 0x829, 14 /* Extend */],\n    [/*start*/ 0x82E, 0 /* Other */],\n    [/*start*/ 0x840, 11 /* ALetter */],\n    [/*start*/ 0x859, 14 /* Extend */],\n    [/*start*/ 0x85C, 0 /* Other */],\n    [/*start*/ 0x860, 11 /* ALetter */],\n    [/*start*/ 0x86B, 0 /* Other */],\n    [/*start*/ 0x8A0, 11 /* ALetter */],\n    [/*start*/ 0x8B5, 0 /* Other */],\n    [/*start*/ 0x8B6, 11 /* ALetter */],\n    [/*start*/ 0x8C8, 0 /* Other */],\n    [/*start*/ 0x8D3, 14 /* Extend */],\n    [/*start*/ 0x8E2, 13 /* Format */],\n    [/*start*/ 0x8E3, 14 /* Extend */],\n    [/*start*/ 0x904, 11 /* ALetter */],\n    [/*start*/ 0x93A, 14 /* Extend */],\n    [/*start*/ 0x93D, 11 /* ALetter */],\n    [/*start*/ 0x93E, 14 /* Extend */],\n    [/*start*/ 0x950, 11 /* ALetter */],\n    [/*start*/ 0x951, 14 /* Extend */],\n    [/*start*/ 0x958, 11 /* ALetter */],\n    [/*start*/ 0x962, 14 /* Extend */],\n    [/*start*/ 0x964, 0 /* Other */],\n    [/*start*/ 0x966, 9 /* Numeric */],\n    [/*start*/ 0x970, 0 /* Other */],\n    [/*start*/ 0x971, 11 /* ALetter */],\n    [/*start*/ 0x981, 14 /* Extend */],\n    [/*start*/ 0x984, 0 /* Other */],\n    [/*start*/ 0x985, 11 /* ALetter */],\n    [/*start*/ 0x98D, 0 /* Other */],\n    [/*start*/ 0x98F, 11 /* ALetter */],\n    [/*start*/ 0x991, 0 /* Other */],\n    [/*start*/ 0x993, 11 /* ALetter */],\n    [/*start*/ 0x9A9, 0 /* Other */],\n    [/*start*/ 0x9AA, 11 /* ALetter */],\n    [/*start*/ 0x9B1, 0 /* Other */],\n    [/*start*/ 0x9B2, 11 /* ALetter */],\n    [/*start*/ 0x9B3, 0 /* Other */],\n    [/*start*/ 0x9B6, 11 /* ALetter */],\n    [/*start*/ 0x9BA, 0 /* Other */],\n    [/*start*/ 0x9BC, 14 /* Extend */],\n    [/*start*/ 0x9BD, 11 /* ALetter */],\n    [/*start*/ 0x9BE, 14 /* Extend */],\n    [/*start*/ 0x9C5, 0 /* Other */],\n    [/*start*/ 0x9C7, 14 /* Extend */],\n    [/*start*/ 0x9C9, 0 /* Other */],\n    [/*start*/ 0x9CB, 14 /* Extend */],\n    [/*start*/ 0x9CE, 11 /* ALetter */],\n    [/*start*/ 0x9CF, 0 /* Other */],\n    [/*start*/ 0x9D7, 14 /* Extend */],\n    [/*start*/ 0x9D8, 0 /* Other */],\n    [/*start*/ 0x9DC, 11 /* ALetter */],\n    [/*start*/ 0x9DE, 0 /* Other */],\n    [/*start*/ 0x9DF, 11 /* ALetter */],\n    [/*start*/ 0x9E2, 14 /* Extend */],\n    [/*start*/ 0x9E4, 0 /* Other */],\n    [/*start*/ 0x9E6, 9 /* Numeric */],\n    [/*start*/ 0x9F0, 11 /* ALetter */],\n    [/*start*/ 0x9F2, 0 /* Other */],\n    [/*start*/ 0x9FC, 11 /* ALetter */],\n    [/*start*/ 0x9FD, 0 /* Other */],\n    [/*start*/ 0x9FE, 14 /* Extend */],\n    [/*start*/ 0x9FF, 0 /* Other */],\n    [/*start*/ 0xA01, 14 /* Extend */],\n    [/*start*/ 0xA04, 0 /* Other */],\n    [/*start*/ 0xA05, 11 /* ALetter */],\n    [/*start*/ 0xA0B, 0 /* Other */],\n    [/*start*/ 0xA0F, 11 /* ALetter */],\n    [/*start*/ 0xA11, 0 /* Other */],\n    [/*start*/ 0xA13, 11 /* ALetter */],\n    [/*start*/ 0xA29, 0 /* Other */],\n    [/*start*/ 0xA2A, 11 /* ALetter */],\n    [/*start*/ 0xA31, 0 /* Other */],\n    [/*start*/ 0xA32, 11 /* ALetter */],\n    [/*start*/ 0xA34, 0 /* Other */],\n    [/*start*/ 0xA35, 11 /* ALetter */],\n    [/*start*/ 0xA37, 0 /* Other */],\n    [/*start*/ 0xA38, 11 /* ALetter */],\n    [/*start*/ 0xA3A, 0 /* Other */],\n    [/*start*/ 0xA3C, 14 /* Extend */],\n    [/*start*/ 0xA3D, 0 /* Other */],\n    [/*start*/ 0xA3E, 14 /* Extend */],\n    [/*start*/ 0xA43, 0 /* Other */],\n    [/*start*/ 0xA47, 14 /* Extend */],\n    [/*start*/ 0xA49, 0 /* Other */],\n    [/*start*/ 0xA4B, 14 /* Extend */],\n    [/*start*/ 0xA4E, 0 /* Other */],\n    [/*start*/ 0xA51, 14 /* Extend */],\n    [/*start*/ 0xA52, 0 /* Other */],\n    [/*start*/ 0xA59, 11 /* ALetter */],\n    [/*start*/ 0xA5D, 0 /* Other */],\n    [/*start*/ 0xA5E, 11 /* ALetter */],\n    [/*start*/ 0xA5F, 0 /* Other */],\n    [/*start*/ 0xA66, 9 /* Numeric */],\n    [/*start*/ 0xA70, 14 /* Extend */],\n    [/*start*/ 0xA72, 11 /* ALetter */],\n    [/*start*/ 0xA75, 14 /* Extend */],\n    [/*start*/ 0xA76, 0 /* Other */],\n    [/*start*/ 0xA81, 14 /* Extend */],\n    [/*start*/ 0xA84, 0 /* Other */],\n    [/*start*/ 0xA85, 11 /* ALetter */],\n    [/*start*/ 0xA8E, 0 /* Other */],\n    [/*start*/ 0xA8F, 11 /* ALetter */],\n    [/*start*/ 0xA92, 0 /* Other */],\n    [/*start*/ 0xA93, 11 /* ALetter */],\n    [/*start*/ 0xAA9, 0 /* Other */],\n    [/*start*/ 0xAAA, 11 /* ALetter */],\n    [/*start*/ 0xAB1, 0 /* Other */],\n    [/*start*/ 0xAB2, 11 /* ALetter */],\n    [/*start*/ 0xAB4, 0 /* Other */],\n    [/*start*/ 0xAB5, 11 /* ALetter */],\n    [/*start*/ 0xABA, 0 /* Other */],\n    [/*start*/ 0xABC, 14 /* Extend */],\n    [/*start*/ 0xABD, 11 /* ALetter */],\n    [/*start*/ 0xABE, 14 /* Extend */],\n    [/*start*/ 0xAC6, 0 /* Other */],\n    [/*start*/ 0xAC7, 14 /* Extend */],\n    [/*start*/ 0xACA, 0 /* Other */],\n    [/*start*/ 0xACB, 14 /* Extend */],\n    [/*start*/ 0xACE, 0 /* Other */],\n    [/*start*/ 0xAD0, 11 /* ALetter */],\n    [/*start*/ 0xAD1, 0 /* Other */],\n    [/*start*/ 0xAE0, 11 /* ALetter */],\n    [/*start*/ 0xAE2, 14 /* Extend */],\n    [/*start*/ 0xAE4, 0 /* Other */],\n    [/*start*/ 0xAE6, 9 /* Numeric */],\n    [/*start*/ 0xAF0, 0 /* Other */],\n    [/*start*/ 0xAF9, 11 /* ALetter */],\n    [/*start*/ 0xAFA, 14 /* Extend */],\n    [/*start*/ 0xB00, 0 /* Other */],\n    [/*start*/ 0xB01, 14 /* Extend */],\n    [/*start*/ 0xB04, 0 /* Other */],\n    [/*start*/ 0xB05, 11 /* ALetter */],\n    [/*start*/ 0xB0D, 0 /* Other */],\n    [/*start*/ 0xB0F, 11 /* ALetter */],\n    [/*start*/ 0xB11, 0 /* Other */],\n    [/*start*/ 0xB13, 11 /* ALetter */],\n    [/*start*/ 0xB29, 0 /* Other */],\n    [/*start*/ 0xB2A, 11 /* ALetter */],\n    [/*start*/ 0xB31, 0 /* Other */],\n    [/*start*/ 0xB32, 11 /* ALetter */],\n    [/*start*/ 0xB34, 0 /* Other */],\n    [/*start*/ 0xB35, 11 /* ALetter */],\n    [/*start*/ 0xB3A, 0 /* Other */],\n    [/*start*/ 0xB3C, 14 /* Extend */],\n    [/*start*/ 0xB3D, 11 /* ALetter */],\n    [/*start*/ 0xB3E, 14 /* Extend */],\n    [/*start*/ 0xB45, 0 /* Other */],\n    [/*start*/ 0xB47, 14 /* Extend */],\n    [/*start*/ 0xB49, 0 /* Other */],\n    [/*start*/ 0xB4B, 14 /* Extend */],\n    [/*start*/ 0xB4E, 0 /* Other */],\n    [/*start*/ 0xB55, 14 /* Extend */],\n    [/*start*/ 0xB58, 0 /* Other */],\n    [/*start*/ 0xB5C, 11 /* ALetter */],\n    [/*start*/ 0xB5E, 0 /* Other */],\n    [/*start*/ 0xB5F, 11 /* ALetter */],\n    [/*start*/ 0xB62, 14 /* Extend */],\n    [/*start*/ 0xB64, 0 /* Other */],\n    [/*start*/ 0xB66, 9 /* Numeric */],\n    [/*start*/ 0xB70, 0 /* Other */],\n    [/*start*/ 0xB71, 11 /* ALetter */],\n    [/*start*/ 0xB72, 0 /* Other */],\n    [/*start*/ 0xB82, 14 /* Extend */],\n    [/*start*/ 0xB83, 11 /* ALetter */],\n    [/*start*/ 0xB84, 0 /* Other */],\n    [/*start*/ 0xB85, 11 /* ALetter */],\n    [/*start*/ 0xB8B, 0 /* Other */],\n    [/*start*/ 0xB8E, 11 /* ALetter */],\n    [/*start*/ 0xB91, 0 /* Other */],\n    [/*start*/ 0xB92, 11 /* ALetter */],\n    [/*start*/ 0xB96, 0 /* Other */],\n    [/*start*/ 0xB99, 11 /* ALetter */],\n    [/*start*/ 0xB9B, 0 /* Other */],\n    [/*start*/ 0xB9C, 11 /* ALetter */],\n    [/*start*/ 0xB9D, 0 /* Other */],\n    [/*start*/ 0xB9E, 11 /* ALetter */],\n    [/*start*/ 0xBA0, 0 /* Other */],\n    [/*start*/ 0xBA3, 11 /* ALetter */],\n    [/*start*/ 0xBA5, 0 /* Other */],\n    [/*start*/ 0xBA8, 11 /* ALetter */],\n    [/*start*/ 0xBAB, 0 /* Other */],\n    [/*start*/ 0xBAE, 11 /* ALetter */],\n    [/*start*/ 0xBBA, 0 /* Other */],\n    [/*start*/ 0xBBE, 14 /* Extend */],\n    [/*start*/ 0xBC3, 0 /* Other */],\n    [/*start*/ 0xBC6, 14 /* Extend */],\n    [/*start*/ 0xBC9, 0 /* Other */],\n    [/*start*/ 0xBCA, 14 /* Extend */],\n    [/*start*/ 0xBCE, 0 /* Other */],\n    [/*start*/ 0xBD0, 11 /* ALetter */],\n    [/*start*/ 0xBD1, 0 /* Other */],\n    [/*start*/ 0xBD7, 14 /* Extend */],\n    [/*start*/ 0xBD8, 0 /* Other */],\n    [/*start*/ 0xBE6, 9 /* Numeric */],\n    [/*start*/ 0xBF0, 0 /* Other */],\n    [/*start*/ 0xC00, 14 /* Extend */],\n    [/*start*/ 0xC05, 11 /* ALetter */],\n    [/*start*/ 0xC0D, 0 /* Other */],\n    [/*start*/ 0xC0E, 11 /* ALetter */],\n    [/*start*/ 0xC11, 0 /* Other */],\n    [/*start*/ 0xC12, 11 /* ALetter */],\n    [/*start*/ 0xC29, 0 /* Other */],\n    [/*start*/ 0xC2A, 11 /* ALetter */],\n    [/*start*/ 0xC3A, 0 /* Other */],\n    [/*start*/ 0xC3D, 11 /* ALetter */],\n    [/*start*/ 0xC3E, 14 /* Extend */],\n    [/*start*/ 0xC45, 0 /* Other */],\n    [/*start*/ 0xC46, 14 /* Extend */],\n    [/*start*/ 0xC49, 0 /* Other */],\n    [/*start*/ 0xC4A, 14 /* Extend */],\n    [/*start*/ 0xC4E, 0 /* Other */],\n    [/*start*/ 0xC55, 14 /* Extend */],\n    [/*start*/ 0xC57, 0 /* Other */],\n    [/*start*/ 0xC58, 11 /* ALetter */],\n    [/*start*/ 0xC5B, 0 /* Other */],\n    [/*start*/ 0xC60, 11 /* ALetter */],\n    [/*start*/ 0xC62, 14 /* Extend */],\n    [/*start*/ 0xC64, 0 /* Other */],\n    [/*start*/ 0xC66, 9 /* Numeric */],\n    [/*start*/ 0xC70, 0 /* Other */],\n    [/*start*/ 0xC80, 11 /* ALetter */],\n    [/*start*/ 0xC81, 14 /* Extend */],\n    [/*start*/ 0xC84, 0 /* Other */],\n    [/*start*/ 0xC85, 11 /* ALetter */],\n    [/*start*/ 0xC8D, 0 /* Other */],\n    [/*start*/ 0xC8E, 11 /* ALetter */],\n    [/*start*/ 0xC91, 0 /* Other */],\n    [/*start*/ 0xC92, 11 /* ALetter */],\n    [/*start*/ 0xCA9, 0 /* Other */],\n    [/*start*/ 0xCAA, 11 /* ALetter */],\n    [/*start*/ 0xCB4, 0 /* Other */],\n    [/*start*/ 0xCB5, 11 /* ALetter */],\n    [/*start*/ 0xCBA, 0 /* Other */],\n    [/*start*/ 0xCBC, 14 /* Extend */],\n    [/*start*/ 0xCBD, 11 /* ALetter */],\n    [/*start*/ 0xCBE, 14 /* Extend */],\n    [/*start*/ 0xCC5, 0 /* Other */],\n    [/*start*/ 0xCC6, 14 /* Extend */],\n    [/*start*/ 0xCC9, 0 /* Other */],\n    [/*start*/ 0xCCA, 14 /* Extend */],\n    [/*start*/ 0xCCE, 0 /* Other */],\n    [/*start*/ 0xCD5, 14 /* Extend */],\n    [/*start*/ 0xCD7, 0 /* Other */],\n    [/*start*/ 0xCDE, 11 /* ALetter */],\n    [/*start*/ 0xCDF, 0 /* Other */],\n    [/*start*/ 0xCE0, 11 /* ALetter */],\n    [/*start*/ 0xCE2, 14 /* Extend */],\n    [/*start*/ 0xCE4, 0 /* Other */],\n    [/*start*/ 0xCE6, 9 /* Numeric */],\n    [/*start*/ 0xCF0, 0 /* Other */],\n    [/*start*/ 0xCF1, 11 /* ALetter */],\n    [/*start*/ 0xCF3, 0 /* Other */],\n    [/*start*/ 0xD00, 14 /* Extend */],\n    [/*start*/ 0xD04, 11 /* ALetter */],\n    [/*start*/ 0xD0D, 0 /* Other */],\n    [/*start*/ 0xD0E, 11 /* ALetter */],\n    [/*start*/ 0xD11, 0 /* Other */],\n    [/*start*/ 0xD12, 11 /* ALetter */],\n    [/*start*/ 0xD3B, 14 /* Extend */],\n    [/*start*/ 0xD3D, 11 /* ALetter */],\n    [/*start*/ 0xD3E, 14 /* Extend */],\n    [/*start*/ 0xD45, 0 /* Other */],\n    [/*start*/ 0xD46, 14 /* Extend */],\n    [/*start*/ 0xD49, 0 /* Other */],\n    [/*start*/ 0xD4A, 14 /* Extend */],\n    [/*start*/ 0xD4E, 11 /* ALetter */],\n    [/*start*/ 0xD4F, 0 /* Other */],\n    [/*start*/ 0xD54, 11 /* ALetter */],\n    [/*start*/ 0xD57, 14 /* Extend */],\n    [/*start*/ 0xD58, 0 /* Other */],\n    [/*start*/ 0xD5F, 11 /* ALetter */],\n    [/*start*/ 0xD62, 14 /* Extend */],\n    [/*start*/ 0xD64, 0 /* Other */],\n    [/*start*/ 0xD66, 9 /* Numeric */],\n    [/*start*/ 0xD70, 0 /* Other */],\n    [/*start*/ 0xD7A, 11 /* ALetter */],\n    [/*start*/ 0xD80, 0 /* Other */],\n    [/*start*/ 0xD81, 14 /* Extend */],\n    [/*start*/ 0xD84, 0 /* Other */],\n    [/*start*/ 0xD85, 11 /* ALetter */],\n    [/*start*/ 0xD97, 0 /* Other */],\n    [/*start*/ 0xD9A, 11 /* ALetter */],\n    [/*start*/ 0xDB2, 0 /* Other */],\n    [/*start*/ 0xDB3, 11 /* ALetter */],\n    [/*start*/ 0xDBC, 0 /* Other */],\n    [/*start*/ 0xDBD, 11 /* ALetter */],\n    [/*start*/ 0xDBE, 0 /* Other */],\n    [/*start*/ 0xDC0, 11 /* ALetter */],\n    [/*start*/ 0xDC7, 0 /* Other */],\n    [/*start*/ 0xDCA, 14 /* Extend */],\n    [/*start*/ 0xDCB, 0 /* Other */],\n    [/*start*/ 0xDCF, 14 /* Extend */],\n    [/*start*/ 0xDD5, 0 /* Other */],\n    [/*start*/ 0xDD6, 14 /* Extend */],\n    [/*start*/ 0xDD7, 0 /* Other */],\n    [/*start*/ 0xDD8, 14 /* Extend */],\n    [/*start*/ 0xDE0, 0 /* Other */],\n    [/*start*/ 0xDE6, 9 /* Numeric */],\n    [/*start*/ 0xDF0, 0 /* Other */],\n    [/*start*/ 0xDF2, 14 /* Extend */],\n    [/*start*/ 0xDF4, 0 /* Other */],\n    [/*start*/ 0xE31, 14 /* Extend */],\n    [/*start*/ 0xE32, 0 /* Other */],\n    [/*start*/ 0xE34, 14 /* Extend */],\n    [/*start*/ 0xE3B, 0 /* Other */],\n    [/*start*/ 0xE47, 14 /* Extend */],\n    [/*start*/ 0xE4F, 0 /* Other */],\n    [/*start*/ 0xE50, 9 /* Numeric */],\n    [/*start*/ 0xE5A, 0 /* Other */],\n    [/*start*/ 0xEB1, 14 /* Extend */],\n    [/*start*/ 0xEB2, 0 /* Other */],\n    [/*start*/ 0xEB4, 14 /* Extend */],\n    [/*start*/ 0xEBD, 0 /* Other */],\n    [/*start*/ 0xEC8, 14 /* Extend */],\n    [/*start*/ 0xECE, 0 /* Other */],\n    [/*start*/ 0xED0, 9 /* Numeric */],\n    [/*start*/ 0xEDA, 0 /* Other */],\n    [/*start*/ 0xF00, 11 /* ALetter */],\n    [/*start*/ 0xF01, 0 /* Other */],\n    [/*start*/ 0xF18, 14 /* Extend */],\n    [/*start*/ 0xF1A, 0 /* Other */],\n    [/*start*/ 0xF20, 9 /* Numeric */],\n    [/*start*/ 0xF2A, 0 /* Other */],\n    [/*start*/ 0xF35, 14 /* Extend */],\n    [/*start*/ 0xF36, 0 /* Other */],\n    [/*start*/ 0xF37, 14 /* Extend */],\n    [/*start*/ 0xF38, 0 /* Other */],\n    [/*start*/ 0xF39, 14 /* Extend */],\n    [/*start*/ 0xF3A, 0 /* Other */],\n    [/*start*/ 0xF3E, 14 /* Extend */],\n    [/*start*/ 0xF40, 11 /* ALetter */],\n    [/*start*/ 0xF48, 0 /* Other */],\n    [/*start*/ 0xF49, 11 /* ALetter */],\n    [/*start*/ 0xF6D, 0 /* Other */],\n    [/*start*/ 0xF71, 14 /* Extend */],\n    [/*start*/ 0xF85, 0 /* Other */],\n    [/*start*/ 0xF86, 14 /* Extend */],\n    [/*start*/ 0xF88, 11 /* ALetter */],\n    [/*start*/ 0xF8D, 14 /* Extend */],\n    [/*start*/ 0xF98, 0 /* Other */],\n    [/*start*/ 0xF99, 14 /* Extend */],\n    [/*start*/ 0xFBD, 0 /* Other */],\n    [/*start*/ 0xFC6, 14 /* Extend */],\n    [/*start*/ 0xFC7, 0 /* Other */],\n    [/*start*/ 0x102B, 14 /* Extend */],\n    [/*start*/ 0x103F, 0 /* Other */],\n    [/*start*/ 0x1040, 9 /* Numeric */],\n    [/*start*/ 0x104A, 0 /* Other */],\n    [/*start*/ 0x1056, 14 /* Extend */],\n    [/*start*/ 0x105A, 0 /* Other */],\n    [/*start*/ 0x105E, 14 /* Extend */],\n    [/*start*/ 0x1061, 0 /* Other */],\n    [/*start*/ 0x1062, 14 /* Extend */],\n    [/*start*/ 0x1065, 0 /* Other */],\n    [/*start*/ 0x1067, 14 /* Extend */],\n    [/*start*/ 0x106E, 0 /* Other */],\n    [/*start*/ 0x1071, 14 /* Extend */],\n    [/*start*/ 0x1075, 0 /* Other */],\n    [/*start*/ 0x1082, 14 /* Extend */],\n    [/*start*/ 0x108E, 0 /* Other */],\n    [/*start*/ 0x108F, 14 /* Extend */],\n    [/*start*/ 0x1090, 9 /* Numeric */],\n    [/*start*/ 0x109A, 14 /* Extend */],\n    [/*start*/ 0x109E, 0 /* Other */],\n    [/*start*/ 0x10A0, 11 /* ALetter */],\n    [/*start*/ 0x10C6, 0 /* Other */],\n    [/*start*/ 0x10C7, 11 /* ALetter */],\n    [/*start*/ 0x10C8, 0 /* Other */],\n    [/*start*/ 0x10CD, 11 /* ALetter */],\n    [/*start*/ 0x10CE, 0 /* Other */],\n    [/*start*/ 0x10D0, 11 /* ALetter */],\n    [/*start*/ 0x10FB, 0 /* Other */],\n    [/*start*/ 0x10FC, 11 /* ALetter */],\n    [/*start*/ 0x1249, 0 /* Other */],\n    [/*start*/ 0x124A, 11 /* ALetter */],\n    [/*start*/ 0x124E, 0 /* Other */],\n    [/*start*/ 0x1250, 11 /* ALetter */],\n    [/*start*/ 0x1257, 0 /* Other */],\n    [/*start*/ 0x1258, 11 /* ALetter */],\n    [/*start*/ 0x1259, 0 /* Other */],\n    [/*start*/ 0x125A, 11 /* ALetter */],\n    [/*start*/ 0x125E, 0 /* Other */],\n    [/*start*/ 0x1260, 11 /* ALetter */],\n    [/*start*/ 0x1289, 0 /* Other */],\n    [/*start*/ 0x128A, 11 /* ALetter */],\n    [/*start*/ 0x128E, 0 /* Other */],\n    [/*start*/ 0x1290, 11 /* ALetter */],\n    [/*start*/ 0x12B1, 0 /* Other */],\n    [/*start*/ 0x12B2, 11 /* ALetter */],\n    [/*start*/ 0x12B6, 0 /* Other */],\n    [/*start*/ 0x12B8, 11 /* ALetter */],\n    [/*start*/ 0x12BF, 0 /* Other */],\n    [/*start*/ 0x12C0, 11 /* ALetter */],\n    [/*start*/ 0x12C1, 0 /* Other */],\n    [/*start*/ 0x12C2, 11 /* ALetter */],\n    [/*start*/ 0x12C6, 0 /* Other */],\n    [/*start*/ 0x12C8, 11 /* ALetter */],\n    [/*start*/ 0x12D7, 0 /* Other */],\n    [/*start*/ 0x12D8, 11 /* ALetter */],\n    [/*start*/ 0x1311, 0 /* Other */],\n    [/*start*/ 0x1312, 11 /* ALetter */],\n    [/*start*/ 0x1316, 0 /* Other */],\n    [/*start*/ 0x1318, 11 /* ALetter */],\n    [/*start*/ 0x135B, 0 /* Other */],\n    [/*start*/ 0x135D, 14 /* Extend */],\n    [/*start*/ 0x1360, 0 /* Other */],\n    [/*start*/ 0x1380, 11 /* ALetter */],\n    [/*start*/ 0x1390, 0 /* Other */],\n    [/*start*/ 0x13A0, 11 /* ALetter */],\n    [/*start*/ 0x13F6, 0 /* Other */],\n    [/*start*/ 0x13F8, 11 /* ALetter */],\n    [/*start*/ 0x13FE, 0 /* Other */],\n    [/*start*/ 0x1401, 11 /* ALetter */],\n    [/*start*/ 0x166D, 0 /* Other */],\n    [/*start*/ 0x166F, 11 /* ALetter */],\n    [/*start*/ 0x1680, 4 /* WSegSpace */],\n    [/*start*/ 0x1681, 11 /* ALetter */],\n    [/*start*/ 0x169B, 0 /* Other */],\n    [/*start*/ 0x16A0, 11 /* ALetter */],\n    [/*start*/ 0x16EB, 0 /* Other */],\n    [/*start*/ 0x16EE, 11 /* ALetter */],\n    [/*start*/ 0x16F9, 0 /* Other */],\n    [/*start*/ 0x1700, 11 /* ALetter */],\n    [/*start*/ 0x170D, 0 /* Other */],\n    [/*start*/ 0x170E, 11 /* ALetter */],\n    [/*start*/ 0x1712, 14 /* Extend */],\n    [/*start*/ 0x1715, 0 /* Other */],\n    [/*start*/ 0x1720, 11 /* ALetter */],\n    [/*start*/ 0x1732, 14 /* Extend */],\n    [/*start*/ 0x1735, 0 /* Other */],\n    [/*start*/ 0x1740, 11 /* ALetter */],\n    [/*start*/ 0x1752, 14 /* Extend */],\n    [/*start*/ 0x1754, 0 /* Other */],\n    [/*start*/ 0x1760, 11 /* ALetter */],\n    [/*start*/ 0x176D, 0 /* Other */],\n    [/*start*/ 0x176E, 11 /* ALetter */],\n    [/*start*/ 0x1771, 0 /* Other */],\n    [/*start*/ 0x1772, 14 /* Extend */],\n    [/*start*/ 0x1774, 0 /* Other */],\n    [/*start*/ 0x17B4, 14 /* Extend */],\n    [/*start*/ 0x17D4, 0 /* Other */],\n    [/*start*/ 0x17DD, 14 /* Extend */],\n    [/*start*/ 0x17DE, 0 /* Other */],\n    [/*start*/ 0x17E0, 9 /* Numeric */],\n    [/*start*/ 0x17EA, 0 /* Other */],\n    [/*start*/ 0x180B, 14 /* Extend */],\n    [/*start*/ 0x180E, 13 /* Format */],\n    [/*start*/ 0x180F, 0 /* Other */],\n    [/*start*/ 0x1810, 9 /* Numeric */],\n    [/*start*/ 0x181A, 0 /* Other */],\n    [/*start*/ 0x1820, 11 /* ALetter */],\n    [/*start*/ 0x1879, 0 /* Other */],\n    [/*start*/ 0x1880, 11 /* ALetter */],\n    [/*start*/ 0x1885, 14 /* Extend */],\n    [/*start*/ 0x1887, 11 /* ALetter */],\n    [/*start*/ 0x18A9, 14 /* Extend */],\n    [/*start*/ 0x18AA, 11 /* ALetter */],\n    [/*start*/ 0x18AB, 0 /* Other */],\n    [/*start*/ 0x18B0, 11 /* ALetter */],\n    [/*start*/ 0x18F6, 0 /* Other */],\n    [/*start*/ 0x1900, 11 /* ALetter */],\n    [/*start*/ 0x191F, 0 /* Other */],\n    [/*start*/ 0x1920, 14 /* Extend */],\n    [/*start*/ 0x192C, 0 /* Other */],\n    [/*start*/ 0x1930, 14 /* Extend */],\n    [/*start*/ 0x193C, 0 /* Other */],\n    [/*start*/ 0x1946, 9 /* Numeric */],\n    [/*start*/ 0x1950, 0 /* Other */],\n    [/*start*/ 0x19D0, 9 /* Numeric */],\n    [/*start*/ 0x19DA, 0 /* Other */],\n    [/*start*/ 0x1A00, 11 /* ALetter */],\n    [/*start*/ 0x1A17, 14 /* Extend */],\n    [/*start*/ 0x1A1C, 0 /* Other */],\n    [/*start*/ 0x1A55, 14 /* Extend */],\n    [/*start*/ 0x1A5F, 0 /* Other */],\n    [/*start*/ 0x1A60, 14 /* Extend */],\n    [/*start*/ 0x1A7D, 0 /* Other */],\n    [/*start*/ 0x1A7F, 14 /* Extend */],\n    [/*start*/ 0x1A80, 9 /* Numeric */],\n    [/*start*/ 0x1A8A, 0 /* Other */],\n    [/*start*/ 0x1A90, 9 /* Numeric */],\n    [/*start*/ 0x1A9A, 0 /* Other */],\n    [/*start*/ 0x1AB0, 14 /* Extend */],\n    [/*start*/ 0x1AC1, 0 /* Other */],\n    [/*start*/ 0x1B00, 14 /* Extend */],\n    [/*start*/ 0x1B05, 11 /* ALetter */],\n    [/*start*/ 0x1B34, 14 /* Extend */],\n    [/*start*/ 0x1B45, 11 /* ALetter */],\n    [/*start*/ 0x1B4C, 0 /* Other */],\n    [/*start*/ 0x1B50, 9 /* Numeric */],\n    [/*start*/ 0x1B5A, 0 /* Other */],\n    [/*start*/ 0x1B6B, 14 /* Extend */],\n    [/*start*/ 0x1B74, 0 /* Other */],\n    [/*start*/ 0x1B80, 14 /* Extend */],\n    [/*start*/ 0x1B83, 11 /* ALetter */],\n    [/*start*/ 0x1BA1, 14 /* Extend */],\n    [/*start*/ 0x1BAE, 11 /* ALetter */],\n    [/*start*/ 0x1BB0, 9 /* Numeric */],\n    [/*start*/ 0x1BBA, 11 /* ALetter */],\n    [/*start*/ 0x1BE6, 14 /* Extend */],\n    [/*start*/ 0x1BF4, 0 /* Other */],\n    [/*start*/ 0x1C00, 11 /* ALetter */],\n    [/*start*/ 0x1C24, 14 /* Extend */],\n    [/*start*/ 0x1C38, 0 /* Other */],\n    [/*start*/ 0x1C40, 9 /* Numeric */],\n    [/*start*/ 0x1C4A, 0 /* Other */],\n    [/*start*/ 0x1C4D, 11 /* ALetter */],\n    [/*start*/ 0x1C50, 9 /* Numeric */],\n    [/*start*/ 0x1C5A, 11 /* ALetter */],\n    [/*start*/ 0x1C7E, 0 /* Other */],\n    [/*start*/ 0x1C80, 11 /* ALetter */],\n    [/*start*/ 0x1C89, 0 /* Other */],\n    [/*start*/ 0x1C90, 11 /* ALetter */],\n    [/*start*/ 0x1CBB, 0 /* Other */],\n    [/*start*/ 0x1CBD, 11 /* ALetter */],\n    [/*start*/ 0x1CC0, 0 /* Other */],\n    [/*start*/ 0x1CD0, 14 /* Extend */],\n    [/*start*/ 0x1CD3, 0 /* Other */],\n    [/*start*/ 0x1CD4, 14 /* Extend */],\n    [/*start*/ 0x1CE9, 11 /* ALetter */],\n    [/*start*/ 0x1CED, 14 /* Extend */],\n    [/*start*/ 0x1CEE, 11 /* ALetter */],\n    [/*start*/ 0x1CF4, 14 /* Extend */],\n    [/*start*/ 0x1CF5, 11 /* ALetter */],\n    [/*start*/ 0x1CF7, 14 /* Extend */],\n    [/*start*/ 0x1CFA, 11 /* ALetter */],\n    [/*start*/ 0x1CFB, 0 /* Other */],\n    [/*start*/ 0x1D00, 11 /* ALetter */],\n    [/*start*/ 0x1DC0, 14 /* Extend */],\n    [/*start*/ 0x1DFA, 0 /* Other */],\n    [/*start*/ 0x1DFB, 14 /* Extend */],\n    [/*start*/ 0x1E00, 11 /* ALetter */],\n    [/*start*/ 0x1F16, 0 /* Other */],\n    [/*start*/ 0x1F18, 11 /* ALetter */],\n    [/*start*/ 0x1F1E, 0 /* Other */],\n    [/*start*/ 0x1F20, 11 /* ALetter */],\n    [/*start*/ 0x1F46, 0 /* Other */],\n    [/*start*/ 0x1F48, 11 /* ALetter */],\n    [/*start*/ 0x1F4E, 0 /* Other */],\n    [/*start*/ 0x1F50, 11 /* ALetter */],\n    [/*start*/ 0x1F58, 0 /* Other */],\n    [/*start*/ 0x1F59, 11 /* ALetter */],\n    [/*start*/ 0x1F5A, 0 /* Other */],\n    [/*start*/ 0x1F5B, 11 /* ALetter */],\n    [/*start*/ 0x1F5C, 0 /* Other */],\n    [/*start*/ 0x1F5D, 11 /* ALetter */],\n    [/*start*/ 0x1F5E, 0 /* Other */],\n    [/*start*/ 0x1F5F, 11 /* ALetter */],\n    [/*start*/ 0x1F7E, 0 /* Other */],\n    [/*start*/ 0x1F80, 11 /* ALetter */],\n    [/*start*/ 0x1FB5, 0 /* Other */],\n    [/*start*/ 0x1FB6, 11 /* ALetter */],\n    [/*start*/ 0x1FBD, 0 /* Other */],\n    [/*start*/ 0x1FBE, 11 /* ALetter */],\n    [/*start*/ 0x1FBF, 0 /* Other */],\n    [/*start*/ 0x1FC2, 11 /* ALetter */],\n    [/*start*/ 0x1FC5, 0 /* Other */],\n    [/*start*/ 0x1FC6, 11 /* ALetter */],\n    [/*start*/ 0x1FCD, 0 /* Other */],\n    [/*start*/ 0x1FD0, 11 /* ALetter */],\n    [/*start*/ 0x1FD4, 0 /* Other */],\n    [/*start*/ 0x1FD6, 11 /* ALetter */],\n    [/*start*/ 0x1FDC, 0 /* Other */],\n    [/*start*/ 0x1FE0, 11 /* ALetter */],\n    [/*start*/ 0x1FED, 0 /* Other */],\n    [/*start*/ 0x1FF2, 11 /* ALetter */],\n    [/*start*/ 0x1FF5, 0 /* Other */],\n    [/*start*/ 0x1FF6, 11 /* ALetter */],\n    [/*start*/ 0x1FFD, 0 /* Other */],\n    [/*start*/ 0x2000, 4 /* WSegSpace */],\n    [/*start*/ 0x2007, 0 /* Other */],\n    [/*start*/ 0x2008, 4 /* WSegSpace */],\n    [/*start*/ 0x200B, 0 /* Other */],\n    [/*start*/ 0x200C, 14 /* Extend */],\n    [/*start*/ 0x200D, 16 /* ZWJ */],\n    [/*start*/ 0x200E, 13 /* Format */],\n    [/*start*/ 0x2010, 0 /* Other */],\n    [/*start*/ 0x2018, 8 /* MidNumLet */],\n    [/*start*/ 0x201A, 0 /* Other */],\n    [/*start*/ 0x2024, 8 /* MidNumLet */],\n    [/*start*/ 0x2025, 0 /* Other */],\n    [/*start*/ 0x2027, 10 /* MidLetter */],\n    [/*start*/ 0x2028, 2 /* Newline */],\n    [/*start*/ 0x202A, 13 /* Format */],\n    [/*start*/ 0x202F, 12 /* ExtendNumLet */],\n    [/*start*/ 0x2030, 0 /* Other */],\n    [/*start*/ 0x203F, 12 /* ExtendNumLet */],\n    [/*start*/ 0x2041, 0 /* Other */],\n    [/*start*/ 0x2044, 7 /* MidNum */],\n    [/*start*/ 0x2045, 0 /* Other */],\n    [/*start*/ 0x2054, 12 /* ExtendNumLet */],\n    [/*start*/ 0x2055, 0 /* Other */],\n    [/*start*/ 0x205F, 4 /* WSegSpace */],\n    [/*start*/ 0x2060, 13 /* Format */],\n    [/*start*/ 0x2065, 0 /* Other */],\n    [/*start*/ 0x2066, 13 /* Format */],\n    [/*start*/ 0x2070, 0 /* Other */],\n    [/*start*/ 0x2071, 11 /* ALetter */],\n    [/*start*/ 0x2072, 0 /* Other */],\n    [/*start*/ 0x207F, 11 /* ALetter */],\n    [/*start*/ 0x2080, 0 /* Other */],\n    [/*start*/ 0x2090, 11 /* ALetter */],\n    [/*start*/ 0x209D, 0 /* Other */],\n    [/*start*/ 0x20D0, 14 /* Extend */],\n    [/*start*/ 0x20F1, 0 /* Other */],\n    [/*start*/ 0x2102, 11 /* ALetter */],\n    [/*start*/ 0x2103, 0 /* Other */],\n    [/*start*/ 0x2107, 11 /* ALetter */],\n    [/*start*/ 0x2108, 0 /* Other */],\n    [/*start*/ 0x210A, 11 /* ALetter */],\n    [/*start*/ 0x2114, 0 /* Other */],\n    [/*start*/ 0x2115, 11 /* ALetter */],\n    [/*start*/ 0x2116, 0 /* Other */],\n    [/*start*/ 0x2119, 11 /* ALetter */],\n    [/*start*/ 0x211E, 0 /* Other */],\n    [/*start*/ 0x2124, 11 /* ALetter */],\n    [/*start*/ 0x2125, 0 /* Other */],\n    [/*start*/ 0x2126, 11 /* ALetter */],\n    [/*start*/ 0x2127, 0 /* Other */],\n    [/*start*/ 0x2128, 11 /* ALetter */],\n    [/*start*/ 0x2129, 0 /* Other */],\n    [/*start*/ 0x212A, 11 /* ALetter */],\n    [/*start*/ 0x212E, 0 /* Other */],\n    [/*start*/ 0x212F, 11 /* ALetter */],\n    [/*start*/ 0x213A, 0 /* Other */],\n    [/*start*/ 0x213C, 11 /* ALetter */],\n    [/*start*/ 0x2140, 0 /* Other */],\n    [/*start*/ 0x2145, 11 /* ALetter */],\n    [/*start*/ 0x214A, 0 /* Other */],\n    [/*start*/ 0x214E, 11 /* ALetter */],\n    [/*start*/ 0x214F, 0 /* Other */],\n    [/*start*/ 0x2160, 11 /* ALetter */],\n    [/*start*/ 0x2189, 0 /* Other */],\n    [/*start*/ 0x24B6, 11 /* ALetter */],\n    [/*start*/ 0x24EA, 0 /* Other */],\n    [/*start*/ 0x2C00, 11 /* ALetter */],\n    [/*start*/ 0x2C2F, 0 /* Other */],\n    [/*start*/ 0x2C30, 11 /* ALetter */],\n    [/*start*/ 0x2C5F, 0 /* Other */],\n    [/*start*/ 0x2C60, 11 /* ALetter */],\n    [/*start*/ 0x2CE5, 0 /* Other */],\n    [/*start*/ 0x2CEB, 11 /* ALetter */],\n    [/*start*/ 0x2CEF, 14 /* Extend */],\n    [/*start*/ 0x2CF2, 11 /* ALetter */],\n    [/*start*/ 0x2CF4, 0 /* Other */],\n    [/*start*/ 0x2D00, 11 /* ALetter */],\n    [/*start*/ 0x2D26, 0 /* Other */],\n    [/*start*/ 0x2D27, 11 /* ALetter */],\n    [/*start*/ 0x2D28, 0 /* Other */],\n    [/*start*/ 0x2D2D, 11 /* ALetter */],\n    [/*start*/ 0x2D2E, 0 /* Other */],\n    [/*start*/ 0x2D30, 11 /* ALetter */],\n    [/*start*/ 0x2D68, 0 /* Other */],\n    [/*start*/ 0x2D6F, 11 /* ALetter */],\n    [/*start*/ 0x2D70, 0 /* Other */],\n    [/*start*/ 0x2D7F, 14 /* Extend */],\n    [/*start*/ 0x2D80, 11 /* ALetter */],\n    [/*start*/ 0x2D97, 0 /* Other */],\n    [/*start*/ 0x2DA0, 11 /* ALetter */],\n    [/*start*/ 0x2DA7, 0 /* Other */],\n    [/*start*/ 0x2DA8, 11 /* ALetter */],\n    [/*start*/ 0x2DAF, 0 /* Other */],\n    [/*start*/ 0x2DB0, 11 /* ALetter */],\n    [/*start*/ 0x2DB7, 0 /* Other */],\n    [/*start*/ 0x2DB8, 11 /* ALetter */],\n    [/*start*/ 0x2DBF, 0 /* Other */],\n    [/*start*/ 0x2DC0, 11 /* ALetter */],\n    [/*start*/ 0x2DC7, 0 /* Other */],\n    [/*start*/ 0x2DC8, 11 /* ALetter */],\n    [/*start*/ 0x2DCF, 0 /* Other */],\n    [/*start*/ 0x2DD0, 11 /* ALetter */],\n    [/*start*/ 0x2DD7, 0 /* Other */],\n    [/*start*/ 0x2DD8, 11 /* ALetter */],\n    [/*start*/ 0x2DDF, 0 /* Other */],\n    [/*start*/ 0x2DE0, 14 /* Extend */],\n    [/*start*/ 0x2E00, 0 /* Other */],\n    [/*start*/ 0x2E2F, 11 /* ALetter */],\n    [/*start*/ 0x2E30, 0 /* Other */],\n    [/*start*/ 0x3000, 4 /* WSegSpace */],\n    [/*start*/ 0x3001, 0 /* Other */],\n    [/*start*/ 0x3005, 11 /* ALetter */],\n    [/*start*/ 0x3006, 0 /* Other */],\n    [/*start*/ 0x302A, 14 /* Extend */],\n    [/*start*/ 0x3030, 0 /* Other */],\n    [/*start*/ 0x3031, 17 /* Katakana */],\n    [/*start*/ 0x3036, 0 /* Other */],\n    [/*start*/ 0x303B, 11 /* ALetter */],\n    [/*start*/ 0x303D, 0 /* Other */],\n    [/*start*/ 0x3099, 14 /* Extend */],\n    [/*start*/ 0x309B, 17 /* Katakana */],\n    [/*start*/ 0x309D, 0 /* Other */],\n    [/*start*/ 0x30A0, 17 /* Katakana */],\n    [/*start*/ 0x30FB, 0 /* Other */],\n    [/*start*/ 0x30FC, 17 /* Katakana */],\n    [/*start*/ 0x3100, 0 /* Other */],\n    [/*start*/ 0x3105, 11 /* ALetter */],\n    [/*start*/ 0x3130, 0 /* Other */],\n    [/*start*/ 0x3131, 11 /* ALetter */],\n    [/*start*/ 0x318F, 0 /* Other */],\n    [/*start*/ 0x31A0, 11 /* ALetter */],\n    [/*start*/ 0x31C0, 0 /* Other */],\n    [/*start*/ 0x31F0, 17 /* Katakana */],\n    [/*start*/ 0x3200, 0 /* Other */],\n    [/*start*/ 0x32D0, 17 /* Katakana */],\n    [/*start*/ 0x32FF, 0 /* Other */],\n    [/*start*/ 0x3300, 17 /* Katakana */],\n    [/*start*/ 0x3358, 0 /* Other */],\n    [/*start*/ 0xA000, 11 /* ALetter */],\n    [/*start*/ 0xA48D, 0 /* Other */],\n    [/*start*/ 0xA4D0, 11 /* ALetter */],\n    [/*start*/ 0xA4FE, 0 /* Other */],\n    [/*start*/ 0xA500, 11 /* ALetter */],\n    [/*start*/ 0xA60D, 0 /* Other */],\n    [/*start*/ 0xA610, 11 /* ALetter */],\n    [/*start*/ 0xA620, 9 /* Numeric */],\n    [/*start*/ 0xA62A, 11 /* ALetter */],\n    [/*start*/ 0xA62C, 0 /* Other */],\n    [/*start*/ 0xA640, 11 /* ALetter */],\n    [/*start*/ 0xA66F, 14 /* Extend */],\n    [/*start*/ 0xA673, 0 /* Other */],\n    [/*start*/ 0xA674, 14 /* Extend */],\n    [/*start*/ 0xA67E, 0 /* Other */],\n    [/*start*/ 0xA67F, 11 /* ALetter */],\n    [/*start*/ 0xA69E, 14 /* Extend */],\n    [/*start*/ 0xA6A0, 11 /* ALetter */],\n    [/*start*/ 0xA6F0, 14 /* Extend */],\n    [/*start*/ 0xA6F2, 0 /* Other */],\n    [/*start*/ 0xA708, 11 /* ALetter */],\n    [/*start*/ 0xA7C0, 0 /* Other */],\n    [/*start*/ 0xA7C2, 11 /* ALetter */],\n    [/*start*/ 0xA7CB, 0 /* Other */],\n    [/*start*/ 0xA7F5, 11 /* ALetter */],\n    [/*start*/ 0xA802, 14 /* Extend */],\n    [/*start*/ 0xA803, 11 /* ALetter */],\n    [/*start*/ 0xA806, 14 /* Extend */],\n    [/*start*/ 0xA807, 11 /* ALetter */],\n    [/*start*/ 0xA80B, 14 /* Extend */],\n    [/*start*/ 0xA80C, 11 /* ALetter */],\n    [/*start*/ 0xA823, 14 /* Extend */],\n    [/*start*/ 0xA828, 0 /* Other */],\n    [/*start*/ 0xA82C, 14 /* Extend */],\n    [/*start*/ 0xA82D, 0 /* Other */],\n    [/*start*/ 0xA840, 11 /* ALetter */],\n    [/*start*/ 0xA874, 0 /* Other */],\n    [/*start*/ 0xA880, 14 /* Extend */],\n    [/*start*/ 0xA882, 11 /* ALetter */],\n    [/*start*/ 0xA8B4, 14 /* Extend */],\n    [/*start*/ 0xA8C6, 0 /* Other */],\n    [/*start*/ 0xA8D0, 9 /* Numeric */],\n    [/*start*/ 0xA8DA, 0 /* Other */],\n    [/*start*/ 0xA8E0, 14 /* Extend */],\n    [/*start*/ 0xA8F2, 11 /* ALetter */],\n    [/*start*/ 0xA8F8, 0 /* Other */],\n    [/*start*/ 0xA8FB, 11 /* ALetter */],\n    [/*start*/ 0xA8FC, 0 /* Other */],\n    [/*start*/ 0xA8FD, 11 /* ALetter */],\n    [/*start*/ 0xA8FF, 14 /* Extend */],\n    [/*start*/ 0xA900, 9 /* Numeric */],\n    [/*start*/ 0xA90A, 11 /* ALetter */],\n    [/*start*/ 0xA926, 14 /* Extend */],\n    [/*start*/ 0xA92E, 0 /* Other */],\n    [/*start*/ 0xA930, 11 /* ALetter */],\n    [/*start*/ 0xA947, 14 /* Extend */],\n    [/*start*/ 0xA954, 0 /* Other */],\n    [/*start*/ 0xA960, 11 /* ALetter */],\n    [/*start*/ 0xA97D, 0 /* Other */],\n    [/*start*/ 0xA980, 14 /* Extend */],\n    [/*start*/ 0xA984, 11 /* ALetter */],\n    [/*start*/ 0xA9B3, 14 /* Extend */],\n    [/*start*/ 0xA9C1, 0 /* Other */],\n    [/*start*/ 0xA9CF, 11 /* ALetter */],\n    [/*start*/ 0xA9D0, 9 /* Numeric */],\n    [/*start*/ 0xA9DA, 0 /* Other */],\n    [/*start*/ 0xA9E5, 14 /* Extend */],\n    [/*start*/ 0xA9E6, 0 /* Other */],\n    [/*start*/ 0xA9F0, 9 /* Numeric */],\n    [/*start*/ 0xA9FA, 0 /* Other */],\n    [/*start*/ 0xAA00, 11 /* ALetter */],\n    [/*start*/ 0xAA29, 14 /* Extend */],\n    [/*start*/ 0xAA37, 0 /* Other */],\n    [/*start*/ 0xAA40, 11 /* ALetter */],\n    [/*start*/ 0xAA43, 14 /* Extend */],\n    [/*start*/ 0xAA44, 11 /* ALetter */],\n    [/*start*/ 0xAA4C, 14 /* Extend */],\n    [/*start*/ 0xAA4E, 0 /* Other */],\n    [/*start*/ 0xAA50, 9 /* Numeric */],\n    [/*start*/ 0xAA5A, 0 /* Other */],\n    [/*start*/ 0xAA7B, 14 /* Extend */],\n    [/*start*/ 0xAA7E, 0 /* Other */],\n    [/*start*/ 0xAAB0, 14 /* Extend */],\n    [/*start*/ 0xAAB1, 0 /* Other */],\n    [/*start*/ 0xAAB2, 14 /* Extend */],\n    [/*start*/ 0xAAB5, 0 /* Other */],\n    [/*start*/ 0xAAB7, 14 /* Extend */],\n    [/*start*/ 0xAAB9, 0 /* Other */],\n    [/*start*/ 0xAABE, 14 /* Extend */],\n    [/*start*/ 0xAAC0, 0 /* Other */],\n    [/*start*/ 0xAAC1, 14 /* Extend */],\n    [/*start*/ 0xAAC2, 0 /* Other */],\n    [/*start*/ 0xAAE0, 11 /* ALetter */],\n    [/*start*/ 0xAAEB, 14 /* Extend */],\n    [/*start*/ 0xAAF0, 0 /* Other */],\n    [/*start*/ 0xAAF2, 11 /* ALetter */],\n    [/*start*/ 0xAAF5, 14 /* Extend */],\n    [/*start*/ 0xAAF7, 0 /* Other */],\n    [/*start*/ 0xAB01, 11 /* ALetter */],\n    [/*start*/ 0xAB07, 0 /* Other */],\n    [/*start*/ 0xAB09, 11 /* ALetter */],\n    [/*start*/ 0xAB0F, 0 /* Other */],\n    [/*start*/ 0xAB11, 11 /* ALetter */],\n    [/*start*/ 0xAB17, 0 /* Other */],\n    [/*start*/ 0xAB20, 11 /* ALetter */],\n    [/*start*/ 0xAB27, 0 /* Other */],\n    [/*start*/ 0xAB28, 11 /* ALetter */],\n    [/*start*/ 0xAB2F, 0 /* Other */],\n    [/*start*/ 0xAB30, 11 /* ALetter */],\n    [/*start*/ 0xAB6A, 0 /* Other */],\n    [/*start*/ 0xAB70, 11 /* ALetter */],\n    [/*start*/ 0xABE3, 14 /* Extend */],\n    [/*start*/ 0xABEB, 0 /* Other */],\n    [/*start*/ 0xABEC, 14 /* Extend */],\n    [/*start*/ 0xABEE, 0 /* Other */],\n    [/*start*/ 0xABF0, 9 /* Numeric */],\n    [/*start*/ 0xABFA, 0 /* Other */],\n    [/*start*/ 0xAC00, 11 /* ALetter */],\n    [/*start*/ 0xD7A4, 0 /* Other */],\n    [/*start*/ 0xD7B0, 11 /* ALetter */],\n    [/*start*/ 0xD7C7, 0 /* Other */],\n    [/*start*/ 0xD7CB, 11 /* ALetter */],\n    [/*start*/ 0xD7FC, 0 /* Other */],\n    [/*start*/ 0xFB00, 11 /* ALetter */],\n    [/*start*/ 0xFB07, 0 /* Other */],\n    [/*start*/ 0xFB13, 11 /* ALetter */],\n    [/*start*/ 0xFB18, 0 /* Other */],\n    [/*start*/ 0xFB1D, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB1E, 14 /* Extend */],\n    [/*start*/ 0xFB1F, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB29, 0 /* Other */],\n    [/*start*/ 0xFB2A, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB37, 0 /* Other */],\n    [/*start*/ 0xFB38, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB3D, 0 /* Other */],\n    [/*start*/ 0xFB3E, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB3F, 0 /* Other */],\n    [/*start*/ 0xFB40, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB42, 0 /* Other */],\n    [/*start*/ 0xFB43, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB45, 0 /* Other */],\n    [/*start*/ 0xFB46, 15 /* Hebrew_Letter */],\n    [/*start*/ 0xFB50, 11 /* ALetter */],\n    [/*start*/ 0xFBB2, 0 /* Other */],\n    [/*start*/ 0xFBD3, 11 /* ALetter */],\n    [/*start*/ 0xFD3E, 0 /* Other */],\n    [/*start*/ 0xFD50, 11 /* ALetter */],\n    [/*start*/ 0xFD90, 0 /* Other */],\n    [/*start*/ 0xFD92, 11 /* ALetter */],\n    [/*start*/ 0xFDC8, 0 /* Other */],\n    [/*start*/ 0xFDF0, 11 /* ALetter */],\n    [/*start*/ 0xFDFC, 0 /* Other */],\n    [/*start*/ 0xFE00, 14 /* Extend */],\n    [/*start*/ 0xFE10, 7 /* MidNum */],\n    [/*start*/ 0xFE11, 0 /* Other */],\n    [/*start*/ 0xFE13, 10 /* MidLetter */],\n    [/*start*/ 0xFE14, 7 /* MidNum */],\n    [/*start*/ 0xFE15, 0 /* Other */],\n    [/*start*/ 0xFE20, 14 /* Extend */],\n    [/*start*/ 0xFE30, 0 /* Other */],\n    [/*start*/ 0xFE33, 12 /* ExtendNumLet */],\n    [/*start*/ 0xFE35, 0 /* Other */],\n    [/*start*/ 0xFE4D, 12 /* ExtendNumLet */],\n    [/*start*/ 0xFE50, 7 /* MidNum */],\n    [/*start*/ 0xFE51, 0 /* Other */],\n    [/*start*/ 0xFE52, 8 /* MidNumLet */],\n    [/*start*/ 0xFE53, 0 /* Other */],\n    [/*start*/ 0xFE54, 7 /* MidNum */],\n    [/*start*/ 0xFE55, 10 /* MidLetter */],\n    [/*start*/ 0xFE56, 0 /* Other */],\n    [/*start*/ 0xFE70, 11 /* ALetter */],\n    [/*start*/ 0xFE75, 0 /* Other */],\n    [/*start*/ 0xFE76, 11 /* ALetter */],\n    [/*start*/ 0xFEFD, 0 /* Other */],\n    [/*start*/ 0xFEFF, 13 /* Format */],\n    [/*start*/ 0xFF00, 0 /* Other */],\n    [/*start*/ 0xFF07, 8 /* MidNumLet */],\n    [/*start*/ 0xFF08, 0 /* Other */],\n    [/*start*/ 0xFF0C, 7 /* MidNum */],\n    [/*start*/ 0xFF0D, 0 /* Other */],\n    [/*start*/ 0xFF0E, 8 /* MidNumLet */],\n    [/*start*/ 0xFF0F, 0 /* Other */],\n    [/*start*/ 0xFF10, 9 /* Numeric */],\n    [/*start*/ 0xFF1A, 10 /* MidLetter */],\n    [/*start*/ 0xFF1B, 7 /* MidNum */],\n    [/*start*/ 0xFF1C, 0 /* Other */],\n    [/*start*/ 0xFF21, 11 /* ALetter */],\n    [/*start*/ 0xFF3B, 0 /* Other */],\n    [/*start*/ 0xFF3F, 12 /* ExtendNumLet */],\n    [/*start*/ 0xFF40, 0 /* Other */],\n    [/*start*/ 0xFF41, 11 /* ALetter */],\n    [/*start*/ 0xFF5B, 0 /* Other */],\n    [/*start*/ 0xFF66, 17 /* Katakana */],\n    [/*start*/ 0xFF9E, 14 /* Extend */],\n    [/*start*/ 0xFFA0, 11 /* ALetter */],\n    [/*start*/ 0xFFBF, 0 /* Other */],\n    [/*start*/ 0xFFC2, 11 /* ALetter */],\n    [/*start*/ 0xFFC8, 0 /* Other */],\n    [/*start*/ 0xFFCA, 11 /* ALetter */],\n    [/*start*/ 0xFFD0, 0 /* Other */],\n    [/*start*/ 0xFFD2, 11 /* ALetter */],\n    [/*start*/ 0xFFD8, 0 /* Other */],\n    [/*start*/ 0xFFDA, 11 /* ALetter */],\n    [/*start*/ 0xFFDD, 0 /* Other */],\n    [/*start*/ 0xFFF9, 13 /* Format */],\n    [/*start*/ 0xFFFC, 0 /* Other */],\n    [/*start*/ 0x10000, 11 /* ALetter */],\n    [/*start*/ 0x1000C, 0 /* Other */],\n    [/*start*/ 0x1000D, 11 /* ALetter */],\n    [/*start*/ 0x10027, 0 /* Other */],\n    [/*start*/ 0x10028, 11 /* ALetter */],\n    [/*start*/ 0x1003B, 0 /* Other */],\n    [/*start*/ 0x1003C, 11 /* ALetter */],\n    [/*start*/ 0x1003E, 0 /* Other */],\n    [/*start*/ 0x1003F, 11 /* ALetter */],\n    [/*start*/ 0x1004E, 0 /* Other */],\n    [/*start*/ 0x10050, 11 /* ALetter */],\n    [/*start*/ 0x1005E, 0 /* Other */],\n    [/*start*/ 0x10080, 11 /* ALetter */],\n    [/*start*/ 0x100FB, 0 /* Other */],\n    [/*start*/ 0x10140, 11 /* ALetter */],\n    [/*start*/ 0x10175, 0 /* Other */],\n    [/*start*/ 0x101FD, 14 /* Extend */],\n    [/*start*/ 0x101FE, 0 /* Other */],\n    [/*start*/ 0x10280, 11 /* ALetter */],\n    [/*start*/ 0x1029D, 0 /* Other */],\n    [/*start*/ 0x102A0, 11 /* ALetter */],\n    [/*start*/ 0x102D1, 0 /* Other */],\n    [/*start*/ 0x102E0, 14 /* Extend */],\n    [/*start*/ 0x102E1, 0 /* Other */],\n    [/*start*/ 0x10300, 11 /* ALetter */],\n    [/*start*/ 0x10320, 0 /* Other */],\n    [/*start*/ 0x1032D, 11 /* ALetter */],\n    [/*start*/ 0x1034B, 0 /* Other */],\n    [/*start*/ 0x10350, 11 /* ALetter */],\n    [/*start*/ 0x10376, 14 /* Extend */],\n    [/*start*/ 0x1037B, 0 /* Other */],\n    [/*start*/ 0x10380, 11 /* ALetter */],\n    [/*start*/ 0x1039E, 0 /* Other */],\n    [/*start*/ 0x103A0, 11 /* ALetter */],\n    [/*start*/ 0x103C4, 0 /* Other */],\n    [/*start*/ 0x103C8, 11 /* ALetter */],\n    [/*start*/ 0x103D0, 0 /* Other */],\n    [/*start*/ 0x103D1, 11 /* ALetter */],\n    [/*start*/ 0x103D6, 0 /* Other */],\n    [/*start*/ 0x10400, 11 /* ALetter */],\n    [/*start*/ 0x1049E, 0 /* Other */],\n    [/*start*/ 0x104A0, 9 /* Numeric */],\n    [/*start*/ 0x104AA, 0 /* Other */],\n    [/*start*/ 0x104B0, 11 /* ALetter */],\n    [/*start*/ 0x104D4, 0 /* Other */],\n    [/*start*/ 0x104D8, 11 /* ALetter */],\n    [/*start*/ 0x104FC, 0 /* Other */],\n    [/*start*/ 0x10500, 11 /* ALetter */],\n    [/*start*/ 0x10528, 0 /* Other */],\n    [/*start*/ 0x10530, 11 /* ALetter */],\n    [/*start*/ 0x10564, 0 /* Other */],\n    [/*start*/ 0x10600, 11 /* ALetter */],\n    [/*start*/ 0x10737, 0 /* Other */],\n    [/*start*/ 0x10740, 11 /* ALetter */],\n    [/*start*/ 0x10756, 0 /* Other */],\n    [/*start*/ 0x10760, 11 /* ALetter */],\n    [/*start*/ 0x10768, 0 /* Other */],\n    [/*start*/ 0x10800, 11 /* ALetter */],\n    [/*start*/ 0x10806, 0 /* Other */],\n    [/*start*/ 0x10808, 11 /* ALetter */],\n    [/*start*/ 0x10809, 0 /* Other */],\n    [/*start*/ 0x1080A, 11 /* ALetter */],\n    [/*start*/ 0x10836, 0 /* Other */],\n    [/*start*/ 0x10837, 11 /* ALetter */],\n    [/*start*/ 0x10839, 0 /* Other */],\n    [/*start*/ 0x1083C, 11 /* ALetter */],\n    [/*start*/ 0x1083D, 0 /* Other */],\n    [/*start*/ 0x1083F, 11 /* ALetter */],\n    [/*start*/ 0x10856, 0 /* Other */],\n    [/*start*/ 0x10860, 11 /* ALetter */],\n    [/*start*/ 0x10877, 0 /* Other */],\n    [/*start*/ 0x10880, 11 /* ALetter */],\n    [/*start*/ 0x1089F, 0 /* Other */],\n    [/*start*/ 0x108E0, 11 /* ALetter */],\n    [/*start*/ 0x108F3, 0 /* Other */],\n    [/*start*/ 0x108F4, 11 /* ALetter */],\n    [/*start*/ 0x108F6, 0 /* Other */],\n    [/*start*/ 0x10900, 11 /* ALetter */],\n    [/*start*/ 0x10916, 0 /* Other */],\n    [/*start*/ 0x10920, 11 /* ALetter */],\n    [/*start*/ 0x1093A, 0 /* Other */],\n    [/*start*/ 0x10980, 11 /* ALetter */],\n    [/*start*/ 0x109B8, 0 /* Other */],\n    [/*start*/ 0x109BE, 11 /* ALetter */],\n    [/*start*/ 0x109C0, 0 /* Other */],\n    [/*start*/ 0x10A00, 11 /* ALetter */],\n    [/*start*/ 0x10A01, 14 /* Extend */],\n    [/*start*/ 0x10A04, 0 /* Other */],\n    [/*start*/ 0x10A05, 14 /* Extend */],\n    [/*start*/ 0x10A07, 0 /* Other */],\n    [/*start*/ 0x10A0C, 14 /* Extend */],\n    [/*start*/ 0x10A10, 11 /* ALetter */],\n    [/*start*/ 0x10A14, 0 /* Other */],\n    [/*start*/ 0x10A15, 11 /* ALetter */],\n    [/*start*/ 0x10A18, 0 /* Other */],\n    [/*start*/ 0x10A19, 11 /* ALetter */],\n    [/*start*/ 0x10A36, 0 /* Other */],\n    [/*start*/ 0x10A38, 14 /* Extend */],\n    [/*start*/ 0x10A3B, 0 /* Other */],\n    [/*start*/ 0x10A3F, 14 /* Extend */],\n    [/*start*/ 0x10A40, 0 /* Other */],\n    [/*start*/ 0x10A60, 11 /* ALetter */],\n    [/*start*/ 0x10A7D, 0 /* Other */],\n    [/*start*/ 0x10A80, 11 /* ALetter */],\n    [/*start*/ 0x10A9D, 0 /* Other */],\n    [/*start*/ 0x10AC0, 11 /* ALetter */],\n    [/*start*/ 0x10AC8, 0 /* Other */],\n    [/*start*/ 0x10AC9, 11 /* ALetter */],\n    [/*start*/ 0x10AE5, 14 /* Extend */],\n    [/*start*/ 0x10AE7, 0 /* Other */],\n    [/*start*/ 0x10B00, 11 /* ALetter */],\n    [/*start*/ 0x10B36, 0 /* Other */],\n    [/*start*/ 0x10B40, 11 /* ALetter */],\n    [/*start*/ 0x10B56, 0 /* Other */],\n    [/*start*/ 0x10B60, 11 /* ALetter */],\n    [/*start*/ 0x10B73, 0 /* Other */],\n    [/*start*/ 0x10B80, 11 /* ALetter */],\n    [/*start*/ 0x10B92, 0 /* Other */],\n    [/*start*/ 0x10C00, 11 /* ALetter */],\n    [/*start*/ 0x10C49, 0 /* Other */],\n    [/*start*/ 0x10C80, 11 /* ALetter */],\n    [/*start*/ 0x10CB3, 0 /* Other */],\n    [/*start*/ 0x10CC0, 11 /* ALetter */],\n    [/*start*/ 0x10CF3, 0 /* Other */],\n    [/*start*/ 0x10D00, 11 /* ALetter */],\n    [/*start*/ 0x10D24, 14 /* Extend */],\n    [/*start*/ 0x10D28, 0 /* Other */],\n    [/*start*/ 0x10D30, 9 /* Numeric */],\n    [/*start*/ 0x10D3A, 0 /* Other */],\n    [/*start*/ 0x10E80, 11 /* ALetter */],\n    [/*start*/ 0x10EAA, 0 /* Other */],\n    [/*start*/ 0x10EAB, 14 /* Extend */],\n    [/*start*/ 0x10EAD, 0 /* Other */],\n    [/*start*/ 0x10EB0, 11 /* ALetter */],\n    [/*start*/ 0x10EB2, 0 /* Other */],\n    [/*start*/ 0x10F00, 11 /* ALetter */],\n    [/*start*/ 0x10F1D, 0 /* Other */],\n    [/*start*/ 0x10F27, 11 /* ALetter */],\n    [/*start*/ 0x10F28, 0 /* Other */],\n    [/*start*/ 0x10F30, 11 /* ALetter */],\n    [/*start*/ 0x10F46, 14 /* Extend */],\n    [/*start*/ 0x10F51, 0 /* Other */],\n    [/*start*/ 0x10FB0, 11 /* ALetter */],\n    [/*start*/ 0x10FC5, 0 /* Other */],\n    [/*start*/ 0x10FE0, 11 /* ALetter */],\n    [/*start*/ 0x10FF7, 0 /* Other */],\n    [/*start*/ 0x11000, 14 /* Extend */],\n    [/*start*/ 0x11003, 11 /* ALetter */],\n    [/*start*/ 0x11038, 14 /* Extend */],\n    [/*start*/ 0x11047, 0 /* Other */],\n    [/*start*/ 0x11066, 9 /* Numeric */],\n    [/*start*/ 0x11070, 0 /* Other */],\n    [/*start*/ 0x1107F, 14 /* Extend */],\n    [/*start*/ 0x11083, 11 /* ALetter */],\n    [/*start*/ 0x110B0, 14 /* Extend */],\n    [/*start*/ 0x110BB, 0 /* Other */],\n    [/*start*/ 0x110BD, 13 /* Format */],\n    [/*start*/ 0x110BE, 0 /* Other */],\n    [/*start*/ 0x110CD, 13 /* Format */],\n    [/*start*/ 0x110CE, 0 /* Other */],\n    [/*start*/ 0x110D0, 11 /* ALetter */],\n    [/*start*/ 0x110E9, 0 /* Other */],\n    [/*start*/ 0x110F0, 9 /* Numeric */],\n    [/*start*/ 0x110FA, 0 /* Other */],\n    [/*start*/ 0x11100, 14 /* Extend */],\n    [/*start*/ 0x11103, 11 /* ALetter */],\n    [/*start*/ 0x11127, 14 /* Extend */],\n    [/*start*/ 0x11135, 0 /* Other */],\n    [/*start*/ 0x11136, 9 /* Numeric */],\n    [/*start*/ 0x11140, 0 /* Other */],\n    [/*start*/ 0x11144, 11 /* ALetter */],\n    [/*start*/ 0x11145, 14 /* Extend */],\n    [/*start*/ 0x11147, 11 /* ALetter */],\n    [/*start*/ 0x11148, 0 /* Other */],\n    [/*start*/ 0x11150, 11 /* ALetter */],\n    [/*start*/ 0x11173, 14 /* Extend */],\n    [/*start*/ 0x11174, 0 /* Other */],\n    [/*start*/ 0x11176, 11 /* ALetter */],\n    [/*start*/ 0x11177, 0 /* Other */],\n    [/*start*/ 0x11180, 14 /* Extend */],\n    [/*start*/ 0x11183, 11 /* ALetter */],\n    [/*start*/ 0x111B3, 14 /* Extend */],\n    [/*start*/ 0x111C1, 11 /* ALetter */],\n    [/*start*/ 0x111C5, 0 /* Other */],\n    [/*start*/ 0x111C9, 14 /* Extend */],\n    [/*start*/ 0x111CD, 0 /* Other */],\n    [/*start*/ 0x111CE, 14 /* Extend */],\n    [/*start*/ 0x111D0, 9 /* Numeric */],\n    [/*start*/ 0x111DA, 11 /* ALetter */],\n    [/*start*/ 0x111DB, 0 /* Other */],\n    [/*start*/ 0x111DC, 11 /* ALetter */],\n    [/*start*/ 0x111DD, 0 /* Other */],\n    [/*start*/ 0x11200, 11 /* ALetter */],\n    [/*start*/ 0x11212, 0 /* Other */],\n    [/*start*/ 0x11213, 11 /* ALetter */],\n    [/*start*/ 0x1122C, 14 /* Extend */],\n    [/*start*/ 0x11238, 0 /* Other */],\n    [/*start*/ 0x1123E, 14 /* Extend */],\n    [/*start*/ 0x1123F, 0 /* Other */],\n    [/*start*/ 0x11280, 11 /* ALetter */],\n    [/*start*/ 0x11287, 0 /* Other */],\n    [/*start*/ 0x11288, 11 /* ALetter */],\n    [/*start*/ 0x11289, 0 /* Other */],\n    [/*start*/ 0x1128A, 11 /* ALetter */],\n    [/*start*/ 0x1128E, 0 /* Other */],\n    [/*start*/ 0x1128F, 11 /* ALetter */],\n    [/*start*/ 0x1129E, 0 /* Other */],\n    [/*start*/ 0x1129F, 11 /* ALetter */],\n    [/*start*/ 0x112A9, 0 /* Other */],\n    [/*start*/ 0x112B0, 11 /* ALetter */],\n    [/*start*/ 0x112DF, 14 /* Extend */],\n    [/*start*/ 0x112EB, 0 /* Other */],\n    [/*start*/ 0x112F0, 9 /* Numeric */],\n    [/*start*/ 0x112FA, 0 /* Other */],\n    [/*start*/ 0x11300, 14 /* Extend */],\n    [/*start*/ 0x11304, 0 /* Other */],\n    [/*start*/ 0x11305, 11 /* ALetter */],\n    [/*start*/ 0x1130D, 0 /* Other */],\n    [/*start*/ 0x1130F, 11 /* ALetter */],\n    [/*start*/ 0x11311, 0 /* Other */],\n    [/*start*/ 0x11313, 11 /* ALetter */],\n    [/*start*/ 0x11329, 0 /* Other */],\n    [/*start*/ 0x1132A, 11 /* ALetter */],\n    [/*start*/ 0x11331, 0 /* Other */],\n    [/*start*/ 0x11332, 11 /* ALetter */],\n    [/*start*/ 0x11334, 0 /* Other */],\n    [/*start*/ 0x11335, 11 /* ALetter */],\n    [/*start*/ 0x1133A, 0 /* Other */],\n    [/*start*/ 0x1133B, 14 /* Extend */],\n    [/*start*/ 0x1133D, 11 /* ALetter */],\n    [/*start*/ 0x1133E, 14 /* Extend */],\n    [/*start*/ 0x11345, 0 /* Other */],\n    [/*start*/ 0x11347, 14 /* Extend */],\n    [/*start*/ 0x11349, 0 /* Other */],\n    [/*start*/ 0x1134B, 14 /* Extend */],\n    [/*start*/ 0x1134E, 0 /* Other */],\n    [/*start*/ 0x11350, 11 /* ALetter */],\n    [/*start*/ 0x11351, 0 /* Other */],\n    [/*start*/ 0x11357, 14 /* Extend */],\n    [/*start*/ 0x11358, 0 /* Other */],\n    [/*start*/ 0x1135D, 11 /* ALetter */],\n    [/*start*/ 0x11362, 14 /* Extend */],\n    [/*start*/ 0x11364, 0 /* Other */],\n    [/*start*/ 0x11366, 14 /* Extend */],\n    [/*start*/ 0x1136D, 0 /* Other */],\n    [/*start*/ 0x11370, 14 /* Extend */],\n    [/*start*/ 0x11375, 0 /* Other */],\n    [/*start*/ 0x11400, 11 /* ALetter */],\n    [/*start*/ 0x11435, 14 /* Extend */],\n    [/*start*/ 0x11447, 11 /* ALetter */],\n    [/*start*/ 0x1144B, 0 /* Other */],\n    [/*start*/ 0x11450, 9 /* Numeric */],\n    [/*start*/ 0x1145A, 0 /* Other */],\n    [/*start*/ 0x1145E, 14 /* Extend */],\n    [/*start*/ 0x1145F, 11 /* ALetter */],\n    [/*start*/ 0x11462, 0 /* Other */],\n    [/*start*/ 0x11480, 11 /* ALetter */],\n    [/*start*/ 0x114B0, 14 /* Extend */],\n    [/*start*/ 0x114C4, 11 /* ALetter */],\n    [/*start*/ 0x114C6, 0 /* Other */],\n    [/*start*/ 0x114C7, 11 /* ALetter */],\n    [/*start*/ 0x114C8, 0 /* Other */],\n    [/*start*/ 0x114D0, 9 /* Numeric */],\n    [/*start*/ 0x114DA, 0 /* Other */],\n    [/*start*/ 0x11580, 11 /* ALetter */],\n    [/*start*/ 0x115AF, 14 /* Extend */],\n    [/*start*/ 0x115B6, 0 /* Other */],\n    [/*start*/ 0x115B8, 14 /* Extend */],\n    [/*start*/ 0x115C1, 0 /* Other */],\n    [/*start*/ 0x115D8, 11 /* ALetter */],\n    [/*start*/ 0x115DC, 14 /* Extend */],\n    [/*start*/ 0x115DE, 0 /* Other */],\n    [/*start*/ 0x11600, 11 /* ALetter */],\n    [/*start*/ 0x11630, 14 /* Extend */],\n    [/*start*/ 0x11641, 0 /* Other */],\n    [/*start*/ 0x11644, 11 /* ALetter */],\n    [/*start*/ 0x11645, 0 /* Other */],\n    [/*start*/ 0x11650, 9 /* Numeric */],\n    [/*start*/ 0x1165A, 0 /* Other */],\n    [/*start*/ 0x11680, 11 /* ALetter */],\n    [/*start*/ 0x116AB, 14 /* Extend */],\n    [/*start*/ 0x116B8, 11 /* ALetter */],\n    [/*start*/ 0x116B9, 0 /* Other */],\n    [/*start*/ 0x116C0, 9 /* Numeric */],\n    [/*start*/ 0x116CA, 0 /* Other */],\n    [/*start*/ 0x1171D, 14 /* Extend */],\n    [/*start*/ 0x1172C, 0 /* Other */],\n    [/*start*/ 0x11730, 9 /* Numeric */],\n    [/*start*/ 0x1173A, 0 /* Other */],\n    [/*start*/ 0x11800, 11 /* ALetter */],\n    [/*start*/ 0x1182C, 14 /* Extend */],\n    [/*start*/ 0x1183B, 0 /* Other */],\n    [/*start*/ 0x118A0, 11 /* ALetter */],\n    [/*start*/ 0x118E0, 9 /* Numeric */],\n    [/*start*/ 0x118EA, 0 /* Other */],\n    [/*start*/ 0x118FF, 11 /* ALetter */],\n    [/*start*/ 0x11907, 0 /* Other */],\n    [/*start*/ 0x11909, 11 /* ALetter */],\n    [/*start*/ 0x1190A, 0 /* Other */],\n    [/*start*/ 0x1190C, 11 /* ALetter */],\n    [/*start*/ 0x11914, 0 /* Other */],\n    [/*start*/ 0x11915, 11 /* ALetter */],\n    [/*start*/ 0x11917, 0 /* Other */],\n    [/*start*/ 0x11918, 11 /* ALetter */],\n    [/*start*/ 0x11930, 14 /* Extend */],\n    [/*start*/ 0x11936, 0 /* Other */],\n    [/*start*/ 0x11937, 14 /* Extend */],\n    [/*start*/ 0x11939, 0 /* Other */],\n    [/*start*/ 0x1193B, 14 /* Extend */],\n    [/*start*/ 0x1193F, 11 /* ALetter */],\n    [/*start*/ 0x11940, 14 /* Extend */],\n    [/*start*/ 0x11941, 11 /* ALetter */],\n    [/*start*/ 0x11942, 14 /* Extend */],\n    [/*start*/ 0x11944, 0 /* Other */],\n    [/*start*/ 0x11950, 9 /* Numeric */],\n    [/*start*/ 0x1195A, 0 /* Other */],\n    [/*start*/ 0x119A0, 11 /* ALetter */],\n    [/*start*/ 0x119A8, 0 /* Other */],\n    [/*start*/ 0x119AA, 11 /* ALetter */],\n    [/*start*/ 0x119D1, 14 /* Extend */],\n    [/*start*/ 0x119D8, 0 /* Other */],\n    [/*start*/ 0x119DA, 14 /* Extend */],\n    [/*start*/ 0x119E1, 11 /* ALetter */],\n    [/*start*/ 0x119E2, 0 /* Other */],\n    [/*start*/ 0x119E3, 11 /* ALetter */],\n    [/*start*/ 0x119E4, 14 /* Extend */],\n    [/*start*/ 0x119E5, 0 /* Other */],\n    [/*start*/ 0x11A00, 11 /* ALetter */],\n    [/*start*/ 0x11A01, 14 /* Extend */],\n    [/*start*/ 0x11A0B, 11 /* ALetter */],\n    [/*start*/ 0x11A33, 14 /* Extend */],\n    [/*start*/ 0x11A3A, 11 /* ALetter */],\n    [/*start*/ 0x11A3B, 14 /* Extend */],\n    [/*start*/ 0x11A3F, 0 /* Other */],\n    [/*start*/ 0x11A47, 14 /* Extend */],\n    [/*start*/ 0x11A48, 0 /* Other */],\n    [/*start*/ 0x11A50, 11 /* ALetter */],\n    [/*start*/ 0x11A51, 14 /* Extend */],\n    [/*start*/ 0x11A5C, 11 /* ALetter */],\n    [/*start*/ 0x11A8A, 14 /* Extend */],\n    [/*start*/ 0x11A9A, 0 /* Other */],\n    [/*start*/ 0x11A9D, 11 /* ALetter */],\n    [/*start*/ 0x11A9E, 0 /* Other */],\n    [/*start*/ 0x11AC0, 11 /* ALetter */],\n    [/*start*/ 0x11AF9, 0 /* Other */],\n    [/*start*/ 0x11C00, 11 /* ALetter */],\n    [/*start*/ 0x11C09, 0 /* Other */],\n    [/*start*/ 0x11C0A, 11 /* ALetter */],\n    [/*start*/ 0x11C2F, 14 /* Extend */],\n    [/*start*/ 0x11C37, 0 /* Other */],\n    [/*start*/ 0x11C38, 14 /* Extend */],\n    [/*start*/ 0x11C40, 11 /* ALetter */],\n    [/*start*/ 0x11C41, 0 /* Other */],\n    [/*start*/ 0x11C50, 9 /* Numeric */],\n    [/*start*/ 0x11C5A, 0 /* Other */],\n    [/*start*/ 0x11C72, 11 /* ALetter */],\n    [/*start*/ 0x11C90, 0 /* Other */],\n    [/*start*/ 0x11C92, 14 /* Extend */],\n    [/*start*/ 0x11CA8, 0 /* Other */],\n    [/*start*/ 0x11CA9, 14 /* Extend */],\n    [/*start*/ 0x11CB7, 0 /* Other */],\n    [/*start*/ 0x11D00, 11 /* ALetter */],\n    [/*start*/ 0x11D07, 0 /* Other */],\n    [/*start*/ 0x11D08, 11 /* ALetter */],\n    [/*start*/ 0x11D0A, 0 /* Other */],\n    [/*start*/ 0x11D0B, 11 /* ALetter */],\n    [/*start*/ 0x11D31, 14 /* Extend */],\n    [/*start*/ 0x11D37, 0 /* Other */],\n    [/*start*/ 0x11D3A, 14 /* Extend */],\n    [/*start*/ 0x11D3B, 0 /* Other */],\n    [/*start*/ 0x11D3C, 14 /* Extend */],\n    [/*start*/ 0x11D3E, 0 /* Other */],\n    [/*start*/ 0x11D3F, 14 /* Extend */],\n    [/*start*/ 0x11D46, 11 /* ALetter */],\n    [/*start*/ 0x11D47, 14 /* Extend */],\n    [/*start*/ 0x11D48, 0 /* Other */],\n    [/*start*/ 0x11D50, 9 /* Numeric */],\n    [/*start*/ 0x11D5A, 0 /* Other */],\n    [/*start*/ 0x11D60, 11 /* ALetter */],\n    [/*start*/ 0x11D66, 0 /* Other */],\n    [/*start*/ 0x11D67, 11 /* ALetter */],\n    [/*start*/ 0x11D69, 0 /* Other */],\n    [/*start*/ 0x11D6A, 11 /* ALetter */],\n    [/*start*/ 0x11D8A, 14 /* Extend */],\n    [/*start*/ 0x11D8F, 0 /* Other */],\n    [/*start*/ 0x11D90, 14 /* Extend */],\n    [/*start*/ 0x11D92, 0 /* Other */],\n    [/*start*/ 0x11D93, 14 /* Extend */],\n    [/*start*/ 0x11D98, 11 /* ALetter */],\n    [/*start*/ 0x11D99, 0 /* Other */],\n    [/*start*/ 0x11DA0, 9 /* Numeric */],\n    [/*start*/ 0x11DAA, 0 /* Other */],\n    [/*start*/ 0x11EE0, 11 /* ALetter */],\n    [/*start*/ 0x11EF3, 14 /* Extend */],\n    [/*start*/ 0x11EF7, 0 /* Other */],\n    [/*start*/ 0x11FB0, 11 /* ALetter */],\n    [/*start*/ 0x11FB1, 0 /* Other */],\n    [/*start*/ 0x12000, 11 /* ALetter */],\n    [/*start*/ 0x1239A, 0 /* Other */],\n    [/*start*/ 0x12400, 11 /* ALetter */],\n    [/*start*/ 0x1246F, 0 /* Other */],\n    [/*start*/ 0x12480, 11 /* ALetter */],\n    [/*start*/ 0x12544, 0 /* Other */],\n    [/*start*/ 0x13000, 11 /* ALetter */],\n    [/*start*/ 0x1342F, 0 /* Other */],\n    [/*start*/ 0x13430, 13 /* Format */],\n    [/*start*/ 0x13439, 0 /* Other */],\n    [/*start*/ 0x14400, 11 /* ALetter */],\n    [/*start*/ 0x14647, 0 /* Other */],\n    [/*start*/ 0x16800, 11 /* ALetter */],\n    [/*start*/ 0x16A39, 0 /* Other */],\n    [/*start*/ 0x16A40, 11 /* ALetter */],\n    [/*start*/ 0x16A5F, 0 /* Other */],\n    [/*start*/ 0x16A60, 9 /* Numeric */],\n    [/*start*/ 0x16A6A, 0 /* Other */],\n    [/*start*/ 0x16AD0, 11 /* ALetter */],\n    [/*start*/ 0x16AEE, 0 /* Other */],\n    [/*start*/ 0x16AF0, 14 /* Extend */],\n    [/*start*/ 0x16AF5, 0 /* Other */],\n    [/*start*/ 0x16B00, 11 /* ALetter */],\n    [/*start*/ 0x16B30, 14 /* Extend */],\n    [/*start*/ 0x16B37, 0 /* Other */],\n    [/*start*/ 0x16B40, 11 /* ALetter */],\n    [/*start*/ 0x16B44, 0 /* Other */],\n    [/*start*/ 0x16B50, 9 /* Numeric */],\n    [/*start*/ 0x16B5A, 0 /* Other */],\n    [/*start*/ 0x16B63, 11 /* ALetter */],\n    [/*start*/ 0x16B78, 0 /* Other */],\n    [/*start*/ 0x16B7D, 11 /* ALetter */],\n    [/*start*/ 0x16B90, 0 /* Other */],\n    [/*start*/ 0x16E40, 11 /* ALetter */],\n    [/*start*/ 0x16E80, 0 /* Other */],\n    [/*start*/ 0x16F00, 11 /* ALetter */],\n    [/*start*/ 0x16F4B, 0 /* Other */],\n    [/*start*/ 0x16F4F, 14 /* Extend */],\n    [/*start*/ 0x16F50, 11 /* ALetter */],\n    [/*start*/ 0x16F51, 14 /* Extend */],\n    [/*start*/ 0x16F88, 0 /* Other */],\n    [/*start*/ 0x16F8F, 14 /* Extend */],\n    [/*start*/ 0x16F93, 11 /* ALetter */],\n    [/*start*/ 0x16FA0, 0 /* Other */],\n    [/*start*/ 0x16FE0, 11 /* ALetter */],\n    [/*start*/ 0x16FE2, 0 /* Other */],\n    [/*start*/ 0x16FE3, 11 /* ALetter */],\n    [/*start*/ 0x16FE4, 14 /* Extend */],\n    [/*start*/ 0x16FE5, 0 /* Other */],\n    [/*start*/ 0x16FF0, 14 /* Extend */],\n    [/*start*/ 0x16FF2, 0 /* Other */],\n    [/*start*/ 0x1B000, 17 /* Katakana */],\n    [/*start*/ 0x1B001, 0 /* Other */],\n    [/*start*/ 0x1B164, 17 /* Katakana */],\n    [/*start*/ 0x1B168, 0 /* Other */],\n    [/*start*/ 0x1BC00, 11 /* ALetter */],\n    [/*start*/ 0x1BC6B, 0 /* Other */],\n    [/*start*/ 0x1BC70, 11 /* ALetter */],\n    [/*start*/ 0x1BC7D, 0 /* Other */],\n    [/*start*/ 0x1BC80, 11 /* ALetter */],\n    [/*start*/ 0x1BC89, 0 /* Other */],\n    [/*start*/ 0x1BC90, 11 /* ALetter */],\n    [/*start*/ 0x1BC9A, 0 /* Other */],\n    [/*start*/ 0x1BC9D, 14 /* Extend */],\n    [/*start*/ 0x1BC9F, 0 /* Other */],\n    [/*start*/ 0x1BCA0, 13 /* Format */],\n    [/*start*/ 0x1BCA4, 0 /* Other */],\n    [/*start*/ 0x1D165, 14 /* Extend */],\n    [/*start*/ 0x1D16A, 0 /* Other */],\n    [/*start*/ 0x1D16D, 14 /* Extend */],\n    [/*start*/ 0x1D173, 13 /* Format */],\n    [/*start*/ 0x1D17B, 14 /* Extend */],\n    [/*start*/ 0x1D183, 0 /* Other */],\n    [/*start*/ 0x1D185, 14 /* Extend */],\n    [/*start*/ 0x1D18C, 0 /* Other */],\n    [/*start*/ 0x1D1AA, 14 /* Extend */],\n    [/*start*/ 0x1D1AE, 0 /* Other */],\n    [/*start*/ 0x1D242, 14 /* Extend */],\n    [/*start*/ 0x1D245, 0 /* Other */],\n    [/*start*/ 0x1D400, 11 /* ALetter */],\n    [/*start*/ 0x1D455, 0 /* Other */],\n    [/*start*/ 0x1D456, 11 /* ALetter */],\n    [/*start*/ 0x1D49D, 0 /* Other */],\n    [/*start*/ 0x1D49E, 11 /* ALetter */],\n    [/*start*/ 0x1D4A0, 0 /* Other */],\n    [/*start*/ 0x1D4A2, 11 /* ALetter */],\n    [/*start*/ 0x1D4A3, 0 /* Other */],\n    [/*start*/ 0x1D4A5, 11 /* ALetter */],\n    [/*start*/ 0x1D4A7, 0 /* Other */],\n    [/*start*/ 0x1D4A9, 11 /* ALetter */],\n    [/*start*/ 0x1D4AD, 0 /* Other */],\n    [/*start*/ 0x1D4AE, 11 /* ALetter */],\n    [/*start*/ 0x1D4BA, 0 /* Other */],\n    [/*start*/ 0x1D4BB, 11 /* ALetter */],\n    [/*start*/ 0x1D4BC, 0 /* Other */],\n    [/*start*/ 0x1D4BD, 11 /* ALetter */],\n    [/*start*/ 0x1D4C4, 0 /* Other */],\n    [/*start*/ 0x1D4C5, 11 /* ALetter */],\n    [/*start*/ 0x1D506, 0 /* Other */],\n    [/*start*/ 0x1D507, 11 /* ALetter */],\n    [/*start*/ 0x1D50B, 0 /* Other */],\n    [/*start*/ 0x1D50D, 11 /* ALetter */],\n    [/*start*/ 0x1D515, 0 /* Other */],\n    [/*start*/ 0x1D516, 11 /* ALetter */],\n    [/*start*/ 0x1D51D, 0 /* Other */],\n    [/*start*/ 0x1D51E, 11 /* ALetter */],\n    [/*start*/ 0x1D53A, 0 /* Other */],\n    [/*start*/ 0x1D53B, 11 /* ALetter */],\n    [/*start*/ 0x1D53F, 0 /* Other */],\n    [/*start*/ 0x1D540, 11 /* ALetter */],\n    [/*start*/ 0x1D545, 0 /* Other */],\n    [/*start*/ 0x1D546, 11 /* ALetter */],\n    [/*start*/ 0x1D547, 0 /* Other */],\n    [/*start*/ 0x1D54A, 11 /* ALetter */],\n    [/*start*/ 0x1D551, 0 /* Other */],\n    [/*start*/ 0x1D552, 11 /* ALetter */],\n    [/*start*/ 0x1D6A6, 0 /* Other */],\n    [/*start*/ 0x1D6A8, 11 /* ALetter */],\n    [/*start*/ 0x1D6C1, 0 /* Other */],\n    [/*start*/ 0x1D6C2, 11 /* ALetter */],\n    [/*start*/ 0x1D6DB, 0 /* Other */],\n    [/*start*/ 0x1D6DC, 11 /* ALetter */],\n    [/*start*/ 0x1D6FB, 0 /* Other */],\n    [/*start*/ 0x1D6FC, 11 /* ALetter */],\n    [/*start*/ 0x1D715, 0 /* Other */],\n    [/*start*/ 0x1D716, 11 /* ALetter */],\n    [/*start*/ 0x1D735, 0 /* Other */],\n    [/*start*/ 0x1D736, 11 /* ALetter */],\n    [/*start*/ 0x1D74F, 0 /* Other */],\n    [/*start*/ 0x1D750, 11 /* ALetter */],\n    [/*start*/ 0x1D76F, 0 /* Other */],\n    [/*start*/ 0x1D770, 11 /* ALetter */],\n    [/*start*/ 0x1D789, 0 /* Other */],\n    [/*start*/ 0x1D78A, 11 /* ALetter */],\n    [/*start*/ 0x1D7A9, 0 /* Other */],\n    [/*start*/ 0x1D7AA, 11 /* ALetter */],\n    [/*start*/ 0x1D7C3, 0 /* Other */],\n    [/*start*/ 0x1D7C4, 11 /* ALetter */],\n    [/*start*/ 0x1D7CC, 0 /* Other */],\n    [/*start*/ 0x1D7CE, 9 /* Numeric */],\n    [/*start*/ 0x1D800, 0 /* Other */],\n    [/*start*/ 0x1DA00, 14 /* Extend */],\n    [/*start*/ 0x1DA37, 0 /* Other */],\n    [/*start*/ 0x1DA3B, 14 /* Extend */],\n    [/*start*/ 0x1DA6D, 0 /* Other */],\n    [/*start*/ 0x1DA75, 14 /* Extend */],\n    [/*start*/ 0x1DA76, 0 /* Other */],\n    [/*start*/ 0x1DA84, 14 /* Extend */],\n    [/*start*/ 0x1DA85, 0 /* Other */],\n    [/*start*/ 0x1DA9B, 14 /* Extend */],\n    [/*start*/ 0x1DAA0, 0 /* Other */],\n    [/*start*/ 0x1DAA1, 14 /* Extend */],\n    [/*start*/ 0x1DAB0, 0 /* Other */],\n    [/*start*/ 0x1E000, 14 /* Extend */],\n    [/*start*/ 0x1E007, 0 /* Other */],\n    [/*start*/ 0x1E008, 14 /* Extend */],\n    [/*start*/ 0x1E019, 0 /* Other */],\n    [/*start*/ 0x1E01B, 14 /* Extend */],\n    [/*start*/ 0x1E022, 0 /* Other */],\n    [/*start*/ 0x1E023, 14 /* Extend */],\n    [/*start*/ 0x1E025, 0 /* Other */],\n    [/*start*/ 0x1E026, 14 /* Extend */],\n    [/*start*/ 0x1E02B, 0 /* Other */],\n    [/*start*/ 0x1E100, 11 /* ALetter */],\n    [/*start*/ 0x1E12D, 0 /* Other */],\n    [/*start*/ 0x1E130, 14 /* Extend */],\n    [/*start*/ 0x1E137, 11 /* ALetter */],\n    [/*start*/ 0x1E13E, 0 /* Other */],\n    [/*start*/ 0x1E140, 9 /* Numeric */],\n    [/*start*/ 0x1E14A, 0 /* Other */],\n    [/*start*/ 0x1E14E, 11 /* ALetter */],\n    [/*start*/ 0x1E14F, 0 /* Other */],\n    [/*start*/ 0x1E2C0, 11 /* ALetter */],\n    [/*start*/ 0x1E2EC, 14 /* Extend */],\n    [/*start*/ 0x1E2F0, 9 /* Numeric */],\n    [/*start*/ 0x1E2FA, 0 /* Other */],\n    [/*start*/ 0x1E800, 11 /* ALetter */],\n    [/*start*/ 0x1E8C5, 0 /* Other */],\n    [/*start*/ 0x1E8D0, 14 /* Extend */],\n    [/*start*/ 0x1E8D7, 0 /* Other */],\n    [/*start*/ 0x1E900, 11 /* ALetter */],\n    [/*start*/ 0x1E944, 14 /* Extend */],\n    [/*start*/ 0x1E94B, 11 /* ALetter */],\n    [/*start*/ 0x1E94C, 0 /* Other */],\n    [/*start*/ 0x1E950, 9 /* Numeric */],\n    [/*start*/ 0x1E95A, 0 /* Other */],\n    [/*start*/ 0x1EE00, 11 /* ALetter */],\n    [/*start*/ 0x1EE04, 0 /* Other */],\n    [/*start*/ 0x1EE05, 11 /* ALetter */],\n    [/*start*/ 0x1EE20, 0 /* Other */],\n    [/*start*/ 0x1EE21, 11 /* ALetter */],\n    [/*start*/ 0x1EE23, 0 /* Other */],\n    [/*start*/ 0x1EE24, 11 /* ALetter */],\n    [/*start*/ 0x1EE25, 0 /* Other */],\n    [/*start*/ 0x1EE27, 11 /* ALetter */],\n    [/*start*/ 0x1EE28, 0 /* Other */],\n    [/*start*/ 0x1EE29, 11 /* ALetter */],\n    [/*start*/ 0x1EE33, 0 /* Other */],\n    [/*start*/ 0x1EE34, 11 /* ALetter */],\n    [/*start*/ 0x1EE38, 0 /* Other */],\n    [/*start*/ 0x1EE39, 11 /* ALetter */],\n    [/*start*/ 0x1EE3A, 0 /* Other */],\n    [/*start*/ 0x1EE3B, 11 /* ALetter */],\n    [/*start*/ 0x1EE3C, 0 /* Other */],\n    [/*start*/ 0x1EE42, 11 /* ALetter */],\n    [/*start*/ 0x1EE43, 0 /* Other */],\n    [/*start*/ 0x1EE47, 11 /* ALetter */],\n    [/*start*/ 0x1EE48, 0 /* Other */],\n    [/*start*/ 0x1EE49, 11 /* ALetter */],\n    [/*start*/ 0x1EE4A, 0 /* Other */],\n    [/*start*/ 0x1EE4B, 11 /* ALetter */],\n    [/*start*/ 0x1EE4C, 0 /* Other */],\n    [/*start*/ 0x1EE4D, 11 /* ALetter */],\n    [/*start*/ 0x1EE50, 0 /* Other */],\n    [/*start*/ 0x1EE51, 11 /* ALetter */],\n    [/*start*/ 0x1EE53, 0 /* Other */],\n    [/*start*/ 0x1EE54, 11 /* ALetter */],\n    [/*start*/ 0x1EE55, 0 /* Other */],\n    [/*start*/ 0x1EE57, 11 /* ALetter */],\n    [/*start*/ 0x1EE58, 0 /* Other */],\n    [/*start*/ 0x1EE59, 11 /* ALetter */],\n    [/*start*/ 0x1EE5A, 0 /* Other */],\n    [/*start*/ 0x1EE5B, 11 /* ALetter */],\n    [/*start*/ 0x1EE5C, 0 /* Other */],\n    [/*start*/ 0x1EE5D, 11 /* ALetter */],\n    [/*start*/ 0x1EE5E, 0 /* Other */],\n    [/*start*/ 0x1EE5F, 11 /* ALetter */],\n    [/*start*/ 0x1EE60, 0 /* Other */],\n    [/*start*/ 0x1EE61, 11 /* ALetter */],\n    [/*start*/ 0x1EE63, 0 /* Other */],\n    [/*start*/ 0x1EE64, 11 /* ALetter */],\n    [/*start*/ 0x1EE65, 0 /* Other */],\n    [/*start*/ 0x1EE67, 11 /* ALetter */],\n    [/*start*/ 0x1EE6B, 0 /* Other */],\n    [/*start*/ 0x1EE6C, 11 /* ALetter */],\n    [/*start*/ 0x1EE73, 0 /* Other */],\n    [/*start*/ 0x1EE74, 11 /* ALetter */],\n    [/*start*/ 0x1EE78, 0 /* Other */],\n    [/*start*/ 0x1EE79, 11 /* ALetter */],\n    [/*start*/ 0x1EE7D, 0 /* Other */],\n    [/*start*/ 0x1EE7E, 11 /* ALetter */],\n    [/*start*/ 0x1EE7F, 0 /* Other */],\n    [/*start*/ 0x1EE80, 11 /* ALetter */],\n    [/*start*/ 0x1EE8A, 0 /* Other */],\n    [/*start*/ 0x1EE8B, 11 /* ALetter */],\n    [/*start*/ 0x1EE9C, 0 /* Other */],\n    [/*start*/ 0x1EEA1, 11 /* ALetter */],\n    [/*start*/ 0x1EEA4, 0 /* Other */],\n    [/*start*/ 0x1EEA5, 11 /* ALetter */],\n    [/*start*/ 0x1EEAA, 0 /* Other */],\n    [/*start*/ 0x1EEAB, 11 /* ALetter */],\n    [/*start*/ 0x1EEBC, 0 /* Other */],\n    [/*start*/ 0x1F130, 11 /* ALetter */],\n    [/*start*/ 0x1F14A, 0 /* Other */],\n    [/*start*/ 0x1F150, 11 /* ALetter */],\n    [/*start*/ 0x1F16A, 0 /* Other */],\n    [/*start*/ 0x1F170, 11 /* ALetter */],\n    [/*start*/ 0x1F18A, 0 /* Other */],\n    [/*start*/ 0x1F1E6, 18 /* Regional_Indicator */],\n    [/*start*/ 0x1F200, 0 /* Other */],\n    [/*start*/ 0x1F3FB, 14 /* Extend */],\n    [/*start*/ 0x1F400, 0 /* Other */],\n    [/*start*/ 0x1FBF0, 9 /* Numeric */],\n    [/*start*/ 0x1FBFA, 0 /* Other */],\n    [/*start*/ 0xE0001, 13 /* Format */],\n    [/*start*/ 0xE0002, 0 /* Other */],\n    [/*start*/ 0xE0020, 14 /* Extend */],\n    [/*start*/ 0xE0080, 0 /* Other */],\n    [/*start*/ 0xE0100, 14 /* Extend */],\n    [/*start*/ 0xE01F0, 0 /* Other */],\n];\n//# sourceMappingURL=WordBreakProperty.js.map","\"use strict\";\n/*!\n * Copyright (c) 2019 Eddie Antonio Santos\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @file\n * This implements the Unicode 12.0 UAX #29 §4.1\n * default word boundary specification.\n *\n * It finds boundaries between words and also other things!\n *\n * See: https://unicode.org/reports/tr29/#Default_Word_Boundaries\n */\nconst WordBreakProperty_1 = require(\"./gen/WordBreakProperty\");\n/**\n * Yields a series of string indices where a word break should\n * occur. That is, there should be a break BEFORE each string\n * index yielded by this generator.\n *\n * @param text Text to find word boundaries in.\n */\nfunction* findBoundaries(text) {\n    // WB1 and WB2: no boundaries if given an empty string.\n    if (text.length === 0) {\n        // There are no boundaries in an empty string!\n        return;\n    }\n    // This algorithm works by maintaining a sliding window of four SCALAR VALUES.\n    //\n    //  - Scalar values? JavaScript strings are NOT actually a string of\n    //    Unicode code points; some characters are made up of TWO\n    //    JavaScript indices. e.g.,\n    //        \"💩\".length === 2;\n    //        \"💩\"[0] === '\\uD83D';\n    //        \"💩\"[1] === '\\uDCA9';\n    //\n    //    These characters that are represented by TWO indices are\n    //    called \"surrogate pairs\". Since we don't want to be in the\n    //    \"middle\" of a character, make sure we're always advancing\n    //    by scalar values, and NOT indices. That means, we sometimes\n    //    need to advance by TWO indices, not just one.\n    //  - Four values? Some rules look at what's to the left of\n    //    left, and some look at what's to the right of right. So\n    //    keep track of this!\n    let rightPos;\n    let lookaheadPos = 0; // lookahead, one scalar value to the right of right.\n    // Before the start of the string is also the start of the string.\n    let lookbehind;\n    let left = 19 /* sot */;\n    let right = 19 /* sot */;\n    let lookahead = wordbreakPropertyAt(0);\n    // Count RIs to make sure we're not splitting emoji flags:\n    let nConsecutiveRegionalIndicators = 0;\n    do {\n        // Shift all positions, one scalar value to the right.\n        rightPos = lookaheadPos;\n        lookaheadPos = positionAfter(lookaheadPos);\n        // Shift all properties, one scalar value to the right.\n        [lookbehind, left, right, lookahead] =\n            [left, right, lookahead, wordbreakPropertyAt(lookaheadPos)];\n        // Break at the start and end of text, unless the text is empty.\n        // WB1: Break at start of text...\n        if (left === 19 /* sot */) {\n            yield rightPos;\n            continue;\n        }\n        // WB2: Break at the end of text...\n        if (right === 20 /* eot */) {\n            void 0;\n            yield rightPos;\n            break; // Reached the end of the string. We're done!\n        }\n        // WB3: Do not break within CRLF:\n        if (left === 3 /* CR */ && right === 1 /* LF */)\n            continue;\n        // WB3b: Otherwise, break after...\n        if (left === 2 /* Newline */ ||\n            left == 3 /* CR */ ||\n            left === 1 /* LF */) {\n            yield rightPos;\n            continue;\n        }\n        // WB3a: ...and before newlines\n        if (right === 2 /* Newline */ ||\n            right === 3 /* CR */ ||\n            right === 1 /* LF */) {\n            yield rightPos;\n            continue;\n        }\n        // HACK: advance by TWO positions to handle tricky emoji\n        // combining sequences, that SHOULD be kept together by\n        // WB3c, but are prematurely split by WB4:\n        if (left === 0 /* Other */ &&\n            (right === 14 /* Extend */ || right === 13 /* Format */) &&\n            lookahead === 16 /* ZWJ */) {\n            // To ensure this is not split, advance TWO positions forward.\n            for (let i = 0; i < 2; i++) {\n                [rightPos, lookaheadPos] = [lookaheadPos, positionAfter(lookaheadPos)];\n            }\n            [left, right, lookahead] =\n                [lookahead, wordbreakPropertyAt(rightPos), wordbreakPropertyAt(lookaheadPos)];\n            // N.B. `left` now MUST be ZWJ, setting it up for WB3c proper.\n        }\n        // WB3c: Do not break within emoji ZWJ sequences.\n        if (left === 16 /* ZWJ */ && isExtendedPictographicAt(rightPos))\n            continue;\n        // WB3d: Keep horizontal whitespace together\n        if (left === 4 /* WSegSpace */ && right == 4 /* WSegSpace */)\n            continue;\n        // WB4: Ignore format and extend characters\n        // This is to keep grapheme clusters together!\n        // See: Section 6.2: https://unicode.org/reports/tr29/#Grapheme_Cluster_and_Format_Rules\n        // N.B.: The rule about \"except after sot, CR, LF, and\n        // Newline\" already been by WB1, WB2, WB3a, and WB3b above.\n        while (right === 13 /* Format */ ||\n            right === 14 /* Extend */ ||\n            right === 16 /* ZWJ */) {\n            // Continue advancing in the string, as if these\n            // characters do not exist. DO NOT update left and\n            // lookbehind however!\n            [rightPos, lookaheadPos] = [lookaheadPos, positionAfter(lookaheadPos)];\n            [right, lookahead] = [lookahead, wordbreakPropertyAt(lookaheadPos)];\n        }\n        // In ignoring the characters in the previous loop, we could\n        // have fallen off the end of the string, so end the loop\n        // prematurely if that happens!\n        if (right === 20 /* eot */) {\n            void 0;\n            yield rightPos;\n            break;\n        }\n        // WB4 (continued): Lookahead must ALSO ignore these format,\n        // extend, ZWJ characters!\n        while (lookahead === 13 /* Format */ ||\n            lookahead === 14 /* Extend */ ||\n            lookahead === 16 /* ZWJ */) {\n            // Continue advancing in the string, as if these\n            // characters do not exist. DO NOT update left and right,\n            // however!\n            lookaheadPos = positionAfter(lookaheadPos);\n            lookahead = wordbreakPropertyAt(lookaheadPos);\n        }\n        // WB5: Do not break between most letters.\n        if (isAHLetter(left) && isAHLetter(right))\n            continue;\n        // Do not break across certain punctuation\n        // WB6: (Don't break before apostrophes in contractions)\n        if (isAHLetter(left) && isAHLetter(lookahead) &&\n            (right === 10 /* MidLetter */ || isMidNumLetQ(right)))\n            continue;\n        // WB7: (Don't break after apostrophes in contractions)\n        if (isAHLetter(lookbehind) && isAHLetter(right) &&\n            (left === 10 /* MidLetter */ || isMidNumLetQ(left)))\n            continue;\n        // WB7a\n        if (left === 15 /* Hebrew_Letter */ && right === 6 /* Single_Quote */)\n            continue;\n        // WB7b\n        if (left === 15 /* Hebrew_Letter */ && right === 5 /* Double_Quote */ &&\n            lookahead === 15 /* Hebrew_Letter */)\n            continue;\n        // WB7c\n        if (lookbehind === 15 /* Hebrew_Letter */ && left === 5 /* Double_Quote */ &&\n            right === 15 /* Hebrew_Letter */)\n            continue;\n        // Do not break within sequences of digits, or digits adjacent to letters.\n        // e.g., \"3a\" or \"A3\"\n        // WB8\n        if (left === 9 /* Numeric */ && right === 9 /* Numeric */)\n            continue;\n        // WB9\n        if (isAHLetter(left) && right === 9 /* Numeric */)\n            continue;\n        // WB10\n        if (left === 9 /* Numeric */ && isAHLetter(right))\n            continue;\n        // Do not break within sequences, such as 3.2, 3,456.789\n        // WB11\n        if (lookbehind === 9 /* Numeric */ && right === 9 /* Numeric */ &&\n            (left === 7 /* MidNum */ || isMidNumLetQ(left)))\n            continue;\n        // WB12\n        if (left === 9 /* Numeric */ && lookahead === 9 /* Numeric */ &&\n            (right === 7 /* MidNum */ || isMidNumLetQ(right)))\n            continue;\n        // WB13: Do not break between Katakana\n        if (left === 17 /* Katakana */ && right === 17 /* Katakana */)\n            continue;\n        // Do not break from extenders (e.g., U+202F NARROW NO-BREAK SPACE)\n        // WB13a\n        if ((isAHLetter(left) ||\n            left === 9 /* Numeric */ ||\n            left === 17 /* Katakana */ ||\n            left === 12 /* ExtendNumLet */) &&\n            right === 12 /* ExtendNumLet */)\n            continue;\n        // WB13b\n        if ((isAHLetter(right) ||\n            right === 9 /* Numeric */ ||\n            right === 17 /* Katakana */) && left === 12 /* ExtendNumLet */)\n            continue;\n        // WB15 & WB16:\n        // Do not break within emoji flag sequences. That is, do not break between\n        // regional indicator (RI) symbols if there is an odd number of RI\n        // characters before the break point.\n        if (right === 18 /* Regional_Indicator */) {\n            // Emoji flags are actually composed of TWO scalar values, each being a\n            // \"regional indicator\". These indicators correspond to Latin letters. Put\n            // two of them together, and they spell out an ISO 3166-1-alpha-2 country\n            // code. Since these always come in pairs, NEVER split the pairs! So, if\n            // we happen to be inside the middle of an odd numbered of\n            // Regional_Indicators, DON'T SPLIT IT!\n            nConsecutiveRegionalIndicators += 1;\n            if ((nConsecutiveRegionalIndicators % 2) == 1) {\n                continue;\n            }\n        }\n        else {\n            nConsecutiveRegionalIndicators = 0;\n        }\n        // WB999: Otherwise, break EVERYWHERE (including around ideographs)\n        yield rightPos;\n    } while (rightPos < text.length);\n    ///// Internal utility functions /////\n    /**\n     * Returns the position of the start of the next scalar value. This jumps\n     * over surrogate pairs.\n     *\n     * If asked for the character AFTER the end of the string, this always\n     * returns the length of the string.\n     */\n    function positionAfter(pos) {\n        if (pos >= text.length) {\n            return text.length;\n        }\n        else if (isStartOfSurrogatePair(text[pos])) {\n            return pos + 2;\n        }\n        return pos + 1;\n    }\n    /**\n     * Return the value of the Word_Break property at the given string index.\n     * @param pos position in the text.\n     */\n    function wordbreakPropertyAt(pos) {\n        if (pos < 0) {\n            return 19 /* sot */; // Always \"start of string\" before the string starts!\n        }\n        else if (pos >= text.length) {\n            return 20 /* eot */; // Always \"end of string\" after the string ends!\n        }\n        else if (isStartOfSurrogatePair(text[pos])) {\n            // Surrogate pairs the next TWO items from the string!\n            return property(text[pos] + text[pos + 1]);\n        }\n        return property(text[pos]);\n    }\n    function isExtendedPictographicAt(pos) {\n        return WordBreakProperty_1.extendedPictographic.test(text.substring(pos, pos + 2));\n    }\n    // Word_Break rule macros\n    // See: https://unicode.org/reports/tr29/#WB_Rule_Macros\n    function isAHLetter(prop) {\n        return prop === 11 /* ALetter */ ||\n            prop === 15 /* Hebrew_Letter */;\n    }\n    function isMidNumLetQ(prop) {\n        return prop === 8 /* MidNumLet */ ||\n            prop === 6 /* Single_Quote */;\n    }\n}\nexports.findBoundaries = findBoundaries;\nfunction isStartOfSurrogatePair(character) {\n    let codeUnit = character.charCodeAt(0);\n    return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n}\n/**\n * Return the Word_Break property value for a character.\n * Note that\n * @param character a scalar value\n */\nfunction property(character) {\n    // This MUST be a scalar value.\n    void 0;\n    // TODO: remove dependence on character.codepointAt()?\n    let codepoint = character.codePointAt(0);\n    return searchForProperty(codepoint, 0, WordBreakProperty_1.WORD_BREAK_PROPERTY.length - 1);\n}\nexports.property = property;\n/**\n * Binary search for the word break property of a given CODE POINT.\n */\nfunction searchForProperty(codePoint, left, right) {\n    // All items that are not found in the array are assigned the 'Other' property.\n    if (right < left) {\n        return 0 /* Other */;\n    }\n    let midpoint = left + ~~((right - left) / 2);\n    let candidate = WordBreakProperty_1.WORD_BREAK_PROPERTY[midpoint];\n    let nextRange = WordBreakProperty_1.WORD_BREAK_PROPERTY[midpoint + 1];\n    let startOfNextRange = nextRange ? nextRange[0 /* Start */] : Infinity;\n    if (codePoint < candidate[0 /* Start */]) {\n        return searchForProperty(codePoint, left, midpoint - 1);\n    }\n    else if (codePoint >= startOfNextRange) {\n        return searchForProperty(codePoint, midpoint + 1, right);\n    }\n    // We found it!\n    void 0;\n    void 0;\n    return candidate[1 /* Value */];\n}\n//# sourceMappingURL=findBoundaries.js.map","\"use strict\";\n/*!\n * Copyright (c) 2019 Eddie Antonio Santos\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://unicode.org/reports/tr29/#Default_Word_Boundaries\nconst findBoundaries_1 = require(\"./findBoundaries\");\n/**\n * Splits text by its word breaks. Any spans that are composed entirely of\n * whitespace will not be returned. Returns an array of strings.\n *\n * @param text Any valid USVString with words to split.\n */\nfunction split(text) {\n    let spans = Array.from(findSpans(text));\n    return spans.map(span => span.text).filter(isNonSpace);\n}\nexports.split = split;\n/**\n * Generator that yields every successive span from the the text.\n * @param text Any valid USVString to segment.\n */\nfunction* findSpans(text) {\n    // TODO: don't throw the boundaries into an array.\n    let boundaries = Array.from(findBoundaries_1.findBoundaries(text));\n    if (boundaries.length == 0) {\n        return;\n    }\n    // All non-empty strings have at least TWO boundaries at the start and end of\n    // the string.\n    void 0;\n    for (let i = 0; i < boundaries.length - 1; i++) {\n        let start = boundaries[i];\n        let end = boundaries[i + 1];\n        yield new LazySpan(text, start, end);\n    }\n}\nexports.findSpans = findSpans;\n/**\n * A span that does not cut out the substring until it absolutely has to!\n */\nclass LazySpan {\n    constructor(source, start, end) {\n        this._source = source;\n        this.start = start;\n        this.end = end;\n    }\n    get text() {\n        return this._source.substring(this.start, this.end);\n    }\n    get length() {\n        return this.end - this.start;\n    }\n}\n/**\n * Returns true when the chunk does not solely consiste of whitespace.\n *\n * @param chunk a chunk of text. Starts and ends at word boundaries.\n */\nfunction isNonSpace(chunk) {\n    return !Array.from(chunk).map(findBoundaries_1.property).every(wb => (wb === 3 /* CR */ ||\n        wb === 1 /* LF */ ||\n        wb === 2 /* Newline */ ||\n        wb === 4 /* WSegSpace */));\n}\n//# sourceMappingURL=index.js.map","import { CanvasCommand, CreateElementCommand, DeleteElementCommand, GroupCommand } from \"../../command\";\nimport { TextChangeResult } from \"../../stepHandles/steps/text\";\nimport {\n    RegionElement,\n    StepService,\n    CommandWithFollowup,\n    ModuleStepData,\n    Step,\n    LayoutsState,\n    Region,\n    ILayout,\n    IllustrationElement,\n    LayoutElementType,\n} from \"../../types\";\nimport { generate } from \"../../util/guid\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { split } from \"unicode-default-word-boundary\";\n\nclass ModuleStepService implements StepService<ModuleStepData> {\n    async init(\n        stepData: Step<ModuleStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            workflowManager.updateMetadata(stepData.stepName, { text: \"\" });\n            return this.changeTextCommand(stepData, \"\", workflowManager, () => {});\n        }\n        return null;\n    }\n\n    private async reload(stepData: Step<ModuleStepData>, workflowManager: WorkflowManager, reducerState: LayoutsState) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const regionElements = elementsForStep.map((el) => ({\n            id: el.id,\n            region: el.stepRegion,\n            regionIndex: el.stepRegionIndex,\n        }));\n        await workflowManager.setSelectionsAndElements(stepData.stepName, [], regionElements, async () => {\n            workflowManager.updateStorage(stepData.stepName, { text: serializedStep?.storage?.text });\n            workflowManager.setMandatoryFulfilled(stepData.stepName, serializedStep?.storage?.text !== \"\");\n        });\n    }\n\n    async changeText(\n        stepData: Step<ModuleStepData>,\n        input: string,\n        workflowManager: WorkflowManager,\n        setError: (e: string) => void,\n    ) {\n        const result = await this.changeTextCommand(stepData, input, workflowManager, setError);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async changeTextCommand(\n        stepData: Step<ModuleStepData>,\n        input: string,\n        workflowManager: WorkflowManager,\n        setError: (e: string) => void,\n    ): Promise<CommandWithFollowup | null> {\n        const elements = workflowManager.getRegionElements(stepData.stepName);\n\n        const module = workflowManager.getStepSpecificServices(stepData.stepName)?.module;\n        if (!module) {\n            console.error(\"Missing module.\");\n            return null;\n        }\n\n        const profanityFilter = workflowManager.getWorkflowExperience().getProfanityList();\n        const validationResult = this.validateInput(stepData, input, profanityFilter, setError);\n        if (validationResult.errorData) {\n            workflowManager.setMandatoryFulfilled(stepData.stepName, false);\n            if (validationResult.errorData.blockedProfanity) {\n                console.error(\"Blocked profanity.\");\n            } else if (validationResult.errorData.hitCharacterLimit) {\n                console.error(\"Too many characters.\");\n            } else if (validationResult.errorData.unsupportedCharacters) {\n                console.error(\"Unsupported characters.\");\n            }\n            return null;\n        }\n        workflowManager.setMandatoryFulfilled(stepData.stepName, input !== \"\");\n\n        if (!stepData.data || !stepData.data.regions || stepData.data.regions.length <= 0) {\n            console.error(\"Missing configuration.\");\n            return null;\n        }\n\n        workflowManager.updateStorage(stepData.stepName, { text: input });\n        workflowManager.updateMetadata(stepData.stepName, { text: input });\n\n        const createElementFromRegion = (svg: string, region: Region, regionIndex?: number, existingKey?: string) => {\n            const elementKey = existingKey || generate();\n            const layouts = workflowManager.getLayouts();\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n            if (!layout) {\n                console.error(`Can not find layout for region: ${region.panelId}`);\n                return null;\n            }\n\n            const commands: CanvasCommand[] = [];\n            if (existingKey) {\n                commands.push(new DeleteElementCommand(elementKey));\n            }\n            commands.push(\n                new CreateElementCommand<IllustrationElement>(\n                    {\n                        stepRegion: region,\n                        stepRegionIndex: regionIndex,\n                        stepName: stepData.stepName,\n                        colors: {},\n                        id: elementKey,\n                        svg: svg,\n                        type: LayoutElementType.Illustration,\n                        y: region.top,\n                        x: region.left,\n                        rotation: region.rotation,\n                        width: region.width,\n                        height: region.height,\n                        layer: region.layer,\n                        layerIndex: region.layerIndex,\n                        immutable: region.immutable,\n                    },\n                    layout,\n                ),\n            );\n            return {\n                id: elementKey,\n                region,\n                command: new GroupCommand(commands),\n            };\n        };\n\n        if (elements.length > 0) {\n            // Create new elements from passed in elements' regions.\n            const results = elements\n                .map((regionElement) => {\n                    if (!regionElement.region) {\n                        return null;\n                    }\n                    const svg = module.svgPrint(input, regionElement.region);\n                    return createElementFromRegion(\n                        svg,\n                        regionElement.region,\n                        regionElement.regionIndex,\n                        regionElement.id,\n                    );\n                })\n                .filter((x) => !!x);\n            const commands = results.filter((r) => !!r).map((r) => r && r.command);\n            return {\n                command: new GroupCommand(commands as CanvasCommand[]),\n                followup: async () => {},\n            };\n        } else {\n            // Create new elements from workflow step's regions.\n            const results = stepData.data.regions.map((region, index) =>\n                createElementFromRegion(module.svgPrint(input, region), region, index),\n            );\n            const commands = results.filter((r) => !!r).map((r) => r && r.command);\n            return {\n                command: new GroupCommand(commands as CanvasCommand[]),\n                followup: async () => {\n                    const newElements = results.filter((r) => r).map((r) => r && { id: r.id, region: r.region });\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [],\n                        newElements as RegionElement[],\n                    );\n                },\n            };\n        }\n    }\n\n    private validateInput(\n        stepData: Step<ModuleStepData>,\n        input: string,\n        profanityFilter: string[],\n        setError: (e: string) => void,\n    ): TextChangeResult {\n        if (stepData.data && stepData.data.maxLength) {\n            const maxLength = stepData.data.maxLength;\n            if (input.length > maxLength) {\n                setError(\"Too many characters.\");\n                return { input, helperData: {}, errorData: { hitCharacterLimit: true } };\n            }\n        }\n\n        // Regex for filtering unwanted characters\n        if (!/^$|^[a-zA-Z0-9 ]+$/.test(input)) {\n            setError(\"Unsupported characters.\");\n            return { input, helperData: {}, errorData: { unsupportedCharacters: true } };\n        }\n\n        // Check text against our blacklist\n        const words = split(input.toLowerCase());\n        for (const word of words) {\n            for (const i in profanityFilter) {\n                const profanity = profanityFilter[i].toLowerCase().replace(/\\s/g, \"\");\n                const match = word === profanity;\n                if (match) {\n                    setError(\"Blocked profanity.\");\n                    return { input, helperData: {}, errorData: { blockedProfanity: true } };\n                }\n            }\n        }\n\n        setError(\"\");\n        return { input, helperData: {} };\n    }\n}\n\nexport const moduleStepService = new ModuleStepService();\n","import {\n    CommandWithFollowup,\n    ILayout,\n    ImageElement,\n    LayoutElementType,\n    LayoutsState,\n    PictureStepData,\n    Region,\n    Step,\n    VariantResource,\n} from \"../../types\";\nimport { StepService } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { LayoutNotFoundError, MisconfigurationError } from \"../../util/exception\";\nimport { AssetNotFoundError } from \"../../util/exception\";\nimport { CreateElementCommand, DeleteElementCommand, GroupCommand } from \"../../command\";\nimport { generate } from \"../../util/guid\";\nimport { optionService } from \"../option\";\n\nclass PictureStepService implements StepService<PictureStepData> {\n    async init(\n        stepData: Step<PictureStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new MisconfigurationError(stepData, \"Missing option for picture step\");\n        }\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                workflowManager.markStepsAsInitialised([stepData.stepName]);\n                return this.selectVariantCommand(stepData, defaultVariant, workflowManager, () => {});\n            }\n        }\n        workflowManager.markStepsAsInitialised([stepData.stepName]);\n        return null;\n    }\n\n    private async reload(\n        stepData: Step<PictureStepData>,\n        workflowManager: WorkflowManager,\n        reducerState: LayoutsState,\n    ) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant: VariantResource) => variant.id === variantId);\n                if (variant) {\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    await workflowManager.setSelectionsAndElements(stepData.stepName, [variant], regionElements);\n                }\n            }\n        }\n    }\n\n    async selectVariant(\n        stepData: Step<PictureStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setIsUpdating: (status: boolean) => void,\n    ) {\n        const result = await this.selectVariantCommand(stepData, variant, workflowManager, setIsUpdating);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async selectVariantCommand(\n        stepData: Step<PictureStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setIsUpdating: (status: boolean) => void,\n    ): Promise<CommandWithFollowup | null> {\n        const asset = variant.asset;\n        if (!asset) {\n            throw new AssetNotFoundError(variant);\n        }\n        const link = asset?.fileLink;\n        if (!link) {\n            console.error(\"No URL for picture!\");\n            return null;\n        }\n\n        setIsUpdating(true);\n        if (stepData.mandatory) {\n            workflowManager.setMandatoryFulfilled(stepData.stepName, false);\n        }\n\n        // Remove existing images.\n        const elements = workflowManager.getRegionElements(stepData.stepName);\n        const deletionCommands = elements.map((elem) => new DeleteElementCommand(elem.id));\n\n        // If images exists, delete them in preparation for creating new images.\n        const createElementForRegion = (region: Region, regionIndex: number) => {\n            const layouts = workflowManager.getLayouts();\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n            if (!layout) {\n                throw new LayoutNotFoundError(region);\n            }\n            // Create a new image.\n            const elementKey = generate();\n            return {\n                regionElement: { id: elementKey, region, regionIndex },\n                command: new CreateElementCommand<ImageElement>(\n                    {\n                        stepName: stepData.stepName,\n                        stepRegion: region,\n                        stepRegionIndex: regionIndex,\n                        id: elementKey,\n                        src: link,\n                        type: LayoutElementType.Image,\n                        y: region.top,\n                        x: region.left,\n                        rotation: region.rotation,\n                        width: region.width,\n                        height: region.height,\n                        layer: region.layer,\n                        layerIndex: region.layerIndex,\n                        immutable: region.immutable,\n                        preserveAspectRatio: \"none\",\n                    },\n                    layout,\n                ),\n            };\n        };\n\n        const newElements = stepData.data.regions.map(createElementForRegion);\n        return {\n            command: new GroupCommand([...deletionCommands, ...newElements.map((el) => el.command)]),\n            followup: async () => {\n                await workflowManager.setSelectionsAndElements(\n                    stepData.stepName,\n                    [variant],\n                    newElements.map((el) => el.regionElement),\n                    async () => {\n                        setIsUpdating(false);\n                    },\n                );\n            },\n        };\n    }\n}\n\nexport const pictureStepService = new PictureStepService();\n","import { optionService } from \"../option\";\nimport { CommandWithFollowup, LayoutsState, QuestionStepData, Step, StepService, VariantResource } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { MisconfigurationError } from \"../../util/exception\";\n\nclass QuestionStepService implements StepService<QuestionStepData> {\n    async init(\n        stepData: Step<QuestionStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new MisconfigurationError(stepData, \"Missing option for question step\");\n        }\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (defaultVariant) {\n                return this.selectVariantLambda(stepData, defaultVariant.id || \"\", workflowManager);\n            }\n        }\n        return null;\n    }\n\n    private async reload(\n        stepData: Step<QuestionStepData>,\n        workflowManager: WorkflowManager,\n        reducerState: LayoutsState,\n    ) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const option = await optionService.getOptionForStep(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant) => variant.id === variantId);\n                if (variant) {\n                    await workflowManager.setSelectionsAndElements(stepData.stepName, [variant], []);\n                }\n            }\n        }\n    }\n\n    async selectVariant(stepData: Step<QuestionStepData>, variantId: string, workflowManager: WorkflowManager) {\n        // Select variant.\n        const result = await this.selectVariantLambda(stepData, variantId, workflowManager);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async selectVariantLambda(\n        stepData: Step<QuestionStepData>,\n        variantId: string,\n        workflowManager: WorkflowManager,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new MisconfigurationError(stepData, \"Missing option for question step\");\n        }\n        const variants = option.variants;\n        if (!variants) {\n            throw new MisconfigurationError(stepData, \"Option for question step is missing variants\");\n        }\n        const variant =\n            variants.length > 1 ? variants.find((variant: VariantResource) => variant.id === variantId) : variants[0];\n        if (!variant) {\n            throw new Error(\n                `Failed to find selected variant ${variantId} in option ${option.id} of step ${stepData.stepName} (${stepData.stepTitle})`,\n            );\n        }\n\n        return {\n            command: undefined,\n            followup: async () => {\n                await workflowManager.setSelectionsAndElements(stepData.stepName, [variant], []);\n            },\n        };\n    }\n}\n\nexport const questionStepService = new QuestionStepService();\n","import { optionService } from \"../option\";\nimport {\n    RegionElement,\n    StepService,\n    ColorOption,\n    CommandWithFollowup,\n    ShapeStepData,\n    Step,\n    VariantResource,\n    ILayout,\n    LayoutsState,\n    Region,\n    ColorDefinition,\n    IllustrationElement,\n    LayoutElementType,\n} from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { LayoutNotFoundError, OptionNotFoundError } from \"../../util/exception\";\nimport { CanvasCommand, CreateElementCommand, GroupCommand, IllustrationColorCommand } from \"../../command\";\nimport { generate } from \"../../util/guid\";\n\nclass ShapeStepService implements StepService<ShapeStepData> {\n    readonly shapeFillId = \"spiff-fill-shape\";\n\n    // Get the step's options.\n    async availableColours(stepData: Step<ShapeStepData>) {\n        const option = await optionService.getOptionForStep(stepData);\n        if (option) {\n            return (\n                option.variants?.map((variant: VariantResource) => {\n                    return {\n                        fill: variant.color,\n                        stroke: variant.color,\n                        variant,\n                    };\n                }) || []\n            );\n        }\n        return [];\n    }\n\n    setCustomColor(color: string, stepData: Step<ShapeStepData>, manager: WorkflowManager) {\n        const layouts = manager.getLayouts();\n        const elements = manager.getRegionElements(stepData.stepName) || [];\n        const commands = elements\n            .map((stepElement: RegionElement) => {\n                const region = stepElement.region;\n                const layout = layouts.find((layout: ILayout) => layout.panelId === region?.panelId);\n                if (!layout) throw new LayoutNotFoundError(region!);\n                return new IllustrationColorCommand(stepElement.id, this.shapeFillId, color);\n            })\n            .filter((c) => !!c);\n        manager.getCommandDispatcher()(new GroupCommand(commands));\n        manager.updateStorage(stepData.stepName, { colour: color });\n    }\n\n    async init(\n        stepData: Step<ShapeStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            throw new OptionNotFoundError(stepData);\n        }\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const variant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n            if (!variant) {\n                return null;\n            }\n            return this.selectVariantCommand(\n                stepData,\n                {\n                    fill: variant.color,\n                    stroke: variant.color,\n                    variant,\n                },\n                [],\n                workflowManager,\n            );\n        }\n        return null;\n    }\n\n    async selectVariant(\n        stepData: Step<ShapeStepData>,\n        colourOption: ColorOption,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ) {\n        const result = await this.selectVariantCommand(stepData, colourOption, elements, workflowManager);\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    private async reload(stepData: Step<ShapeStepData>, workflowManager: WorkflowManager, reducerState: LayoutsState) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant) => variant.id === variantId);\n                if (variant) {\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [variant],\n                        regionElements,\n                        async () => {\n                            workflowManager.updateStorage(stepData.stepName, {\n                                colour: serializedStep?.storage?.colour || \"\",\n                            });\n                        },\n                    );\n                }\n            }\n        }\n    }\n\n    private async selectVariantCommand(\n        stepData: Step<ShapeStepData>,\n        colourOption: ColorOption,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ): Promise<CommandWithFollowup | null> {\n        const layouts = workflowManager.getLayouts();\n        const existingColor = workflowManager.getStepStorage(stepData.stepName)?.colour;\n        const getColor = () => {\n            if (colourOption.variant?.color === \"#custom\") return existingColor || \"#FFFFFF\";\n            if (colourOption.variant?.color) return colourOption.variant.color;\n            throw new Error(\"Failed to resolve color for shape step.\");\n        };\n        if (elements.length > 0) {\n            const updateCommand = (stepElement: RegionElement) => {\n                const region = stepElement.region;\n                const layout = layouts.find((layout: ILayout) => layout.panelId === region?.panelId);\n                if (!layout) {\n                    throw new LayoutNotFoundError(region!);\n                }\n                const newColor = getColor();\n                return new IllustrationColorCommand(stepElement.id, this.shapeFillId, newColor);\n            };\n            const commands = elements.map(updateCommand).filter((c) => !!c);\n            return {\n                command: new GroupCommand(commands as CanvasCommand[]),\n                followup: async () => {\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        colourOption.variant ? [colourOption.variant] : [],\n                        elements,\n                    );\n                    workflowManager.updateStorage(stepData.stepName, { colour: getColor() });\n                },\n            };\n        } else {\n            // No existing elements, create new ones.\n            const createElementForRegion = (region: Region, regionIndex: number) => {\n                const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n                if (!layout) {\n                    throw new LayoutNotFoundError(region);\n                }\n                const newColor = getColor();\n                const svg = `\n                    <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n                        xmlSpace=\"preserve\"\n                        preserveAspectRatio=\"none\"\n                        version=\"1.1\"\n                        width=\"1\"\n                        height=\"1\"\n                        viewBox=\"0 0 1 1\"\n                    >\n                        <rect\n                            x=\"0\"\n                            y=\"0\"\n                            width=\"1\"\n                            height=\"1\"\n                            class=\"${this.shapeFillId}\"\n                            fill=\"${newColor}\"\n                        />\n                    </svg>\n                `;\n                const colors: { [key: string]: ColorDefinition } = {};\n                colors[this.shapeFillId] = { browserValue: newColor };\n\n                const elementKey = generate();\n                return {\n                    id: elementKey,\n                    region,\n                    command: new CreateElementCommand<IllustrationElement>(\n                        {\n                            stepRegion: region,\n                            stepRegionIndex: regionIndex,\n                            stepName: stepData.stepName,\n                            colors,\n                            id: elementKey,\n                            svg,\n                            type: LayoutElementType.Illustration,\n                            y: region.top,\n                            x: region.left,\n                            rotation: region.rotation,\n                            width: region.width,\n                            height: region.height,\n                            layer: region.layer,\n                            layerIndex: region.layerIndex,\n                            immutable: region.immutable,\n                            excludeFromExport: stepData.data.excludeFromPrint,\n                        },\n                        layout,\n                    ),\n                };\n            };\n            const results = stepData.data.regions.map(createElementForRegion);\n            const commands = results.filter((r) => !!r).map((r) => r?.command);\n            const elements = results\n                .filter((r) => !!r)\n                .map((r, index) => {\n                    return { id: r!.id, region: r!.region, regionIndex: index };\n                });\n            return {\n                command: new GroupCommand(commands as CanvasCommand[]),\n                followup: async () => {\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        colourOption.variant ? [colourOption.variant] : [],\n                        elements,\n                        async () => {\n                            workflowManager.updateStorage(stepData.stepName, { colour: getColor() });\n                        },\n                    );\n                },\n            };\n        }\n    }\n}\n\nexport const shapeStepService = new ShapeStepService();\n","import { InformationMessageType } from \"../WorkflowManager\";\n\nexport type ToastCallback = (callbackOptions: {\n    toastMessage: null | string;\n    toastType: InformationMessageType | null;\n}) => void;\n\nclass Toast {\n    private latestToast: null | string;\n    private toastType: InformationMessageType | null;\n\n    private toastCallbacks: ToastCallback[];\n\n    constructor() {\n        this.latestToast = null;\n        this.toastType = null;\n        this.toastCallbacks = [];\n    }\n\n    addToastCallback(callback: ToastCallback) {\n        callback({\n            toastMessage: this.latestToast,\n            toastType: this.toastType,\n        });\n        this.toastCallbacks.push(callback);\n    }\n\n    removeToastCallback(callback: ToastCallback) {\n        this.toastCallbacks = this.toastCallbacks.filter((it) => it !== callback);\n    }\n\n    setLatestToast(errorMessage: null | string, errorType: InformationMessageType | null) {\n        this.latestToast = errorMessage;\n        this.toastType = errorType;\n        this.onToastChange();\n    }\n\n    private onToastChange() {\n        this.toastCallbacks.forEach((callback) =>\n            callback({\n                toastMessage: this.latestToast,\n                toastType: this.toastType,\n            }),\n        );\n    }\n}\n\nconst toast = new Toast();\nexport { toast };\n","import { FontMetrics, getFontMetrics } from \"../../util/font\";\nimport { FontData, Region, SizeRange } from \"../../types\";\nimport { fontSizeStep, textWidth } from \"../shared\";\n\n/**\n * Produce an array where text has been broken into lines that can\n * fit the region at the current size.\n * If it can't be done then return null;\n */\nconst linesThatFit = (\n    region: Region,\n    linesToBreak: string[],\n    fontSize: number,\n    fontScale: number,\n    cache: FontMetrics,\n): [null | string[], null | number] => {\n    if (linesToBreak.some((line) => line === undefined || line === null)) {\n        throw new Error(`Failed to autosize lines: ${linesToBreak.join(\", \")}`);\n    }\n    let lines = linesToBreak.map((line) => line.split(\"\\n\")).flat();\n    let amountLines = lines.length;\n    let widthsPerLine = lines.map((line) => textWidth(line, fontScale, cache));\n    const lineHeight = cache.getApproximateHeight() * fontScale;\n\n    let couldStillFit = true;\n    while (couldStillFit) {\n        // Determine if textbox would be too high.\n        // If the textbox is too high, line breaking isn't going to help.\n        // Height of the textbox is the height of the last line plus its vertical offset.\n        const textboxHeight = lineHeight + (amountLines - 1) * fontSize;\n        if (textboxHeight > region.height) {\n            return [null, null];\n        }\n\n        // Determine if textbox would be too wide.\n        // It's not too high, so if it's not too wide then we've succeeded.\n        // Width of the whole textbox is the width of the longest line.\n        const textboxWidth = Math.max(...widthsPerLine);\n        if (textboxWidth <= region.width) {\n            return [lines, textboxWidth];\n        }\n\n        // It's too wide. Find the widest line and look for a space.\n        const idxWidestLine = widthsPerLine.reduce((iMax, x, i, arr) => (x > arr[iMax] ? i : iMax), 0);\n        const widestLine = lines[idxWidestLine];\n\n        // Find the latest space to split at that makes the current widest line fit.\n        let foundGoodSpacing = false;\n        let idxOfSpace = widestLine.length;\n        while (!foundGoodSpacing && idxOfSpace > -1) {\n            idxOfSpace = widestLine.lastIndexOf(\" \", idxOfSpace - 1);\n            const splitLine = [widestLine.slice(0, idxOfSpace), widestLine.slice(idxOfSpace + 1)];\n            const splitWidths = splitLine.map((line) => textWidth(line, fontScale, cache));\n            const firstWidth = splitWidths[0];\n            if (firstWidth <= region.width) {\n                lines = [...lines.slice(0, idxWidestLine), ...splitLine, ...lines.slice(idxWidestLine + 1)];\n                widthsPerLine = [\n                    ...widthsPerLine.slice(0, idxWidestLine),\n                    ...splitWidths,\n                    ...widthsPerLine.slice(idxWidestLine + 1),\n                ];\n                amountLines += 1;\n                foundGoodSpacing = true;\n            }\n        }\n        if (!foundGoodSpacing) {\n            couldStillFit = false;\n        }\n    }\n\n    // No way to fit.\n    return [null, null];\n};\n\n/**\n * Determine what the font size for a text element should be,\n * taking autosizing into account.\n * @Deprecated Old Text system, Transition to new system when Autosizing has been brought across in a way that makes sense.\n */\nexport const determineCorrectFontSizeAndLines = (\n    curFontSize: number,\n    fontData: FontData,\n    region: Region,\n    linesToBreak: string[],\n    sizeRange: SizeRange,\n): [number, null | string[], null | number] => {\n    let lines;\n    let requiredWidth;\n\n    const cache = getFontMetrics(fontData.assetUrl);\n    const font = cache.getFont();\n\n    // Fixed Mode: Text is computed based on fixed text size.\n    if (sizeRange.size) {\n        const fontScale = curFontSize / font.unitsPerEm;\n        [lines, requiredWidth] = linesThatFit(region, linesToBreak, curFontSize, fontScale, cache);\n        return [sizeRange.size, lines, requiredWidth];\n    }\n\n    // Variable Mode: Text is computed based on a range\n    const nonUserMin = 6;\n    let calculatedFontSize = nonUserMin - fontSizeStep;\n    if (linesToBreak.length > 0) {\n        let lines: null | string[] = linesToBreak;\n        let fontScale = 0;\n        while ((!sizeRange.maxSize || calculatedFontSize <= sizeRange.maxSize) && lines) {\n            calculatedFontSize += fontSizeStep;\n            fontScale = calculatedFontSize / font.unitsPerEm;\n            [lines, requiredWidth] = linesThatFit(region, linesToBreak, calculatedFontSize, fontScale, cache);\n        }\n    }\n    if (calculatedFontSize > nonUserMin) {\n        // Correct for final enlargement.\n        calculatedFontSize -= fontSizeStep;\n    }\n    if (sizeRange.minSize && calculatedFontSize < sizeRange.minSize) {\n        // Correct for minimum font size.\n        calculatedFontSize = sizeRange.minSize;\n    }\n    const fontScale = calculatedFontSize / font.unitsPerEm;\n    [lines, requiredWidth] = linesThatFit(region, linesToBreak, calculatedFontSize, fontScale, cache);\n    return [calculatedFontSize, lines, requiredWidth];\n};\n\n// https://stackoverflow.com/a/22015771\nconst zip = (xs: any[], ys: any[]) => {\n    return xs.map((x, idx) => [x, ys[idx]]);\n};\n\n/**\n * If a textbox has a fixed font size, it's width should be changed to fit the text.\n * Needs to take rotation into consideration.\n * The left alignment case appears to be resolved but the other cases have not been addressed.\n * @Deprecated Old Text system, Transition to new system when Autosizing has been brought across in a way that makes sense.\n */\nexport const determineCorrectTextboxRegion = (\n    currentRegion: Region,\n    fontData: FontData,\n    fontSize: number,\n    textLines: string[],\n    align?: string,\n): Region => {\n    let region = { ...currentRegion };\n    const candidateRegion = { ...currentRegion };\n    // requiredWidth could be const but the others must be let.\n    // eslint-disable-next-line prefer-const\n    let [calculatedFontSize, goodLines, requiredWidth] = determineCorrectFontSizeAndLines(\n        fontSize,\n        fontData,\n        candidateRegion,\n        textLines,\n        { size: 0, minSize: fontSize, maxSize: fontSize },\n    );\n    if (requiredWidth && requiredWidth < region.width) {\n        candidateRegion.width = requiredWidth;\n        if (align === \"left\") {\n            candidateRegion.left += Math.sin((region.rotation * Math.PI) / 360) * (region.width - requiredWidth);\n            candidateRegion.top += (Math.sin((region.rotation * Math.PI) / 180) * (requiredWidth - region.width)) / 2;\n        } else if (align === \"right\") {\n            candidateRegion.left += region.width - requiredWidth;\n        } else {\n            candidateRegion.left += (region.width - requiredWidth) / 2;\n        }\n        [calculatedFontSize, goodLines] = determineCorrectFontSizeAndLines(\n            fontSize,\n            fontData,\n            candidateRegion,\n            textLines,\n            {\n                size: fontSize,\n            },\n        );\n        if (\n            calculatedFontSize === fontSize &&\n            goodLines &&\n            zip(textLines, goodLines).every(([lineA, lineB]) => lineA === lineB)\n        ) {\n            region = candidateRegion;\n        }\n    }\n    return region;\n};\n","import {\n    AspectType,\n    ColorDefinition,\n    ColorOption,\n    CommandWithFollowup,\n    FontData,\n    ILayout,\n    LayoutElementType,\n    LayoutsState,\n    OptionResource,\n    Region,\n    RegionElement,\n    Step,\n    StepService,\n    TextboxElement,\n    TextFillImage,\n    TextStepData,\n    TextStepStorage,\n    VariantResource,\n} from \"../../../types\";\nimport { InformationMessageType, WorkflowManager } from \"../../../WorkflowManager\";\nimport { optionService } from \"../../option\";\nimport { toast } from \"../../toast\";\nimport { AssetNotFoundError, ResourceNotFoundError, UnhandledBehaviorError } from \"../../../util/exception\";\nimport { split } from \"unicode-default-word-boundary\";\nimport {\n    CanvasCommand,\n    CreateElementCommand,\n    FontAlignmentCommand,\n    FontColorCommand,\n    FontImageFillCommand,\n    FontSizeCommand,\n    FontSourceCommand,\n    GroupCommand,\n    TextChangeCommand,\n    TextStrokeCommand,\n} from \"../../../command\";\nimport { getPatternImageData } from \"../../../util/frame\";\nimport { findElement } from \"../../../LayoutsState\";\nimport { getFontMetrics, loadFont } from \"../../../util/font\";\nimport { applyTextTransformations } from \"../../../text/shared\";\nimport { determineCorrectFontSizeAndLines } from \"../../../text/algorithm/autosize\";\nimport { generate } from \"../../../util/guid\";\nimport { renderTextTemplateForWorkflow } from \"../../../util/text\";\n\n/**\n * The font size used when the font size is not specified in configuration.\n */\nconst defaultFontSize = 30;\ninterface TextFillSpotColor {\n    profileName: string;\n    namedColor: string;\n}\ninterface CreatedElementData {\n    regionElement: RegionElement;\n    commands: CanvasCommand[];\n    newElement: TextboxElement;\n    fontData: FontData;\n}\n\ninterface TextUpdateResult {\n    command?: GroupCommand;\n    helperData: {\n        charactersRemaining?: number;\n    };\n    errorData?: TextErrorData;\n}\n\nexport interface TextErrorData {\n    blockedProfanity?: boolean;\n    doesNotFit?: boolean;\n    hitCharacterLimit?: boolean;\n    illegalMultipleLines?: boolean;\n    unsupportedCharacters?: boolean;\n}\n\n// https://joefallon.net/2018/09/typescript-try-catch-finally-and-custom-errors/\nclass FontLoadError extends Error {\n    constructor(message?: string) {\n        super(message);\n        Object.setPrototypeOf(this, new.target.prototype);\n        this.name = FontLoadError.name;\n    }\n}\n\n// A set of allowable glyphs, open type doesn't see these glyphs as valid\n// but they're generally always actually supplied. To prevent filtering them out\n// we check if a glyph matches this list.\nconst allowableGlyphs = [\"‘\", \"’\", \"“\", \"”\", \"\\n\"];\n\nclass RegionLayoutMissingError extends Error {\n    constructor(message?: string) {\n        super(message);\n        Object.setPrototypeOf(this, new.target.prototype);\n        this.name = RegionLayoutMissingError.name;\n    }\n}\n\nclass TextStepService implements StepService<TextStepData> {\n    // A cache of computed possible colors. We store here to get a stable reference\n    // to prevent react from re-rendering\n    private cachedColors = new Map<string, ColorOption[]>();\n    // HACK: These two could possibly be merged\n    private cachedStrokeColors = new Map<string, ColorOption[]>();\n\n    public async init(\n        stepData: Step<TextStepData>,\n        workflowManager: WorkflowManager,\n        reducerState?: LayoutsState,\n    ): Promise<CommandWithFollowup | null> {\n        const option = await optionService.getOptionForStep(stepData);\n        if (!option) {\n            return null;\n        }\n        if (reducerState) {\n            await this.reload(stepData, workflowManager, reducerState);\n        } else {\n            const defaultImageFillVariant = await this.getDefaultImageFillVariant(stepData.data);\n            const imageFillLink = defaultImageFillVariant?.asset?.fileLink;\n            const imageFillDataRaw = imageFillLink ? await getPatternImageData(imageFillLink) : undefined;\n            const imageFillData = imageFillDataRaw\n                ? {\n                      src: imageFillDataRaw.src,\n                      height: imageFillDataRaw.height,\n                      width: imageFillDataRaw.width,\n                      scale: stepData.data.imageFillScale || 1,\n                  }\n                : undefined;\n            const defaultStroke = await this.getDefaultStrokeColorVariant(stepData.data);\n            const strokeData =\n                stepData.data.strokeEnabled && defaultStroke?.color\n                    ? {\n                          browserValue: defaultStroke.color,\n                          pmsValue: defaultStroke.name,\n                      }\n                    : undefined;\n\n            let text = stepData.data.defaultText || \"\";\n            // When a bundle is present we load the text aspect.\n            const bundle = workflowManager.getWorkflowExperience().getBundle();\n            if (bundle && stepData.globalPropertyAspectConfigurations) {\n                const aspects = bundle.getGlobalPropertyConfiguration()?.aspects;\n                const aspect = aspects?.find(\n                    (a) =>\n                        a.type === AspectType.Text &&\n                        stepData.globalPropertyAspectConfigurations?.map((c) => c.aspectName).includes(a.name),\n                );\n                if (aspect) {\n                    const stateManager = bundle.getGlobalPropertyStateManager();\n                    const aspectText = stateManager.getAspect(aspect.name);\n                    if (aspectText) {\n                        text = aspectText;\n                    }\n                }\n            }\n\n            workflowManager.updateStorage(stepData.stepName, {\n                text,\n                inputText: stepData.data.defaultText || \"\",\n                color:\n                    (await this.getDefaultColorVariant(stepData.data))?.color ||\n                    (await this.getDefaultColor(stepData.data)),\n                fillImage: imageFillData,\n                strokeColor: strokeData,\n            });\n\n            workflowManager.updateMetadata(stepData.stepName, {\n                text,\n                color:\n                    (await this.getDefaultColorVariant(stepData.data))?.name ||\n                    (await this.getDefaultColor(stepData.data)),\n                fillImage: defaultImageFillVariant?.name,\n                strokeColor: stepData.data.strokeEnabled ? defaultStroke?.color : undefined,\n            });\n\n            const defaultVariant = await optionService.getDefaultVariant(option, stepData.overrideDefaultVariantId);\n\n            if (defaultVariant) {\n                return this.selectVariantCommand(\n                    stepData,\n                    defaultVariant,\n                    { text },\n                    [],\n                    workflowManager,\n                    () => {},\n                    () => {},\n                    imageFillData,\n                    strokeData,\n                );\n            }\n        }\n        return null;\n    }\n\n    public findLayoutElements(workflowManager: WorkflowManager, step: Step<TextStepData>) {\n        const elements = workflowManager.getRegionElements(step.stepName);\n        const foundElements = elements\n            .map((el) => {\n                try {\n                    return findElement(el.id, workflowManager.getAllLayoutData()) as TextboxElement;\n                } catch (e) {\n                    return null;\n                }\n            })\n            .filter((e) => !!e);\n        return foundElements;\n    }\n\n    /**\n     * Get the colors that can be used for a given text step.\n     * @param stepData The text step to get colors for.\n     * @returns A list of color objects containing fill, stroke and variant if available.\n     */\n    public async availableFillColors(stepData: Step<TextStepData>): Promise<ColorOption[]> {\n        // Check cache first.\n        const cached = this.cachedColors.get(stepData.stepName);\n        if (cached) {\n            return cached;\n        }\n\n        // Otherwise check option\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        if (colorOption) {\n            const colors =\n                colorOption.variants?.map((variant: VariantResource) => {\n                    return {\n                        fill: variant.color,\n                        stroke: variant.color,\n                        variant,\n                    };\n                }) || [];\n            this.cachedColors.set(stepData.stepName, colors);\n            return colors;\n        }\n\n        return [];\n    }\n\n    public changeAlignment(\n        stepData: Step<TextStepData>,\n        alignment: \"left\" | \"center\" | \"right\",\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ) {\n        if (!stepData.data || !stepData.data.regions) {\n            return;\n        }\n        const commandDispatcher = workflowManager.getCommandDispatcher();\n\n        for (const regionElement of elements) {\n            const command = new FontAlignmentCommand(regionElement.id, alignment);\n            commandDispatcher(command);\n        }\n    }\n\n    public async changeFillColor(\n        stepData: Step<TextStepData>,\n        newColor: ColorOption,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ) {\n        if (!stepData.data || !stepData.data.regions) {\n            return;\n        }\n        const commandDispatcher = workflowManager.getCommandDispatcher();\n\n        if (newColor.variant) {\n            workflowManager.updateMetadata(stepData.stepName, { color: newColor.variant.name });\n        } else {\n            workflowManager.updateMetadata(stepData.stepName, { color: newColor.fill });\n        }\n        // Handle generation of spot color information if required.\n        const colorOption = await optionService.ensureFullOption(stepData.data.colorOption);\n        const textFillSpotColor = colorOption\n            ? this.createTextFillSpotColor(colorOption, newColor.variant!)\n            : undefined;\n        if (colorOption) {\n            workflowManager.updateStorage(stepData.stepName, {\n                color: newColor.fill,\n                colorProfileAssetKey: colorOption.colorProfile?.key,\n            });\n        } else {\n            workflowManager.updateStorage(stepData.stepName, {\n                color: newColor.fill,\n            });\n        }\n        // Apply color changes to each element targeted by the step.\n        for (const regionElement of elements) {\n            if (!newColor.fill) {\n                throw new Error(\"Fill not set on new color selection!\");\n            }\n            const command = new FontColorCommand(regionElement.id, newColor.fill, textFillSpotColor);\n            commandDispatcher(command);\n        }\n    }\n\n    public async availableFillImages(stepData: Step<TextStepData>): Promise<TextFillImage[]> {\n        const imageFillOption = await optionService.ensureFullOption(stepData.data.imageFillOption);\n        if (imageFillOption) {\n            const imageFillUrls =\n                (imageFillOption.variants?.map((v) => v.asset?.fileLink)?.filter((url) => !!url) as string[]) || [];\n            return Promise.all(\n                imageFillUrls.map(async (url) => {\n                    const data = await getPatternImageData(url);\n                    return {\n                        src: url,\n                        width: data.width,\n                        height: data.height,\n                        scale: stepData.data.imageFillScale || 1,\n                    };\n                }),\n            );\n        }\n        return Promise.resolve([]);\n    }\n\n    public async changeFillImage(\n        stepData: Step<TextStepData>,\n        fillImage: TextFillImage,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ) {\n        if (!stepData.data || !stepData.data.regions) {\n            return;\n        }\n        const commandDispatcher = workflowManager.getCommandDispatcher();\n        const option = await optionService.getOptionForStep(stepData);\n        const variant = option?.variants?.find((v) => v.asset?.fileLink === fillImage.src);\n        workflowManager.updateMetadata(stepData.stepName, { fillImage: variant?.name });\n        workflowManager.updateStorage(stepData.stepName, {\n            fillImage,\n        });\n\n        for (const regionElement of elements) {\n            const command = new FontImageFillCommand(regionElement.id, fillImage);\n            commandDispatcher(command);\n        }\n    }\n\n    /**\n     * Get the colors that can be used for a given text step's stroke.\n     * @param stepData The text step to get colors for.\n     * @returns A list of color objects containing fill, stroke and variant if available.\n     */\n    public async availableStrokeColors(stepData: Step<TextStepData>): Promise<ColorOption[]> {\n        // Check cache first.\n        const cached = this.cachedStrokeColors.get(stepData.stepName);\n        if (cached) {\n            return cached;\n        }\n\n        // Otherwise check option\n        const strokeOption = await optionService.ensureFullOption(stepData.data.strokeOption);\n        if (strokeOption) {\n            const colors =\n                strokeOption.variants?.map((variant: VariantResource) => {\n                    return {\n                        fill: variant.color,\n                        stroke: variant.color,\n                        variant,\n                    };\n                }) || [];\n            this.cachedStrokeColors.set(stepData.stepName, colors);\n            return colors;\n        }\n\n        return [];\n    }\n\n    public async changeStrokeColor(\n        stepData: Step<TextStepData>,\n        newColor: ColorOption | undefined,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n    ) {\n        if (!stepData.data || !stepData.data.regions) {\n            return;\n        }\n        const commandDispatcher = workflowManager.getCommandDispatcher();\n\n        if (newColor?.variant) {\n            workflowManager.updateMetadata(stepData.stepName, { strokeColor: newColor.variant.name });\n        } else {\n            workflowManager.updateMetadata(stepData.stepName, { strokeColor: newColor?.fill });\n        }\n        const colorDefinition: ColorDefinition | undefined = newColor\n            ? {\n                  browserValue: newColor.fill!,\n                  pmsValue: newColor.pmsValue,\n              }\n            : undefined;\n        workflowManager.updateStorage(stepData.stepName, {\n            strokeColor: colorDefinition,\n        });\n        // Apply color changes to each element targeted by the step.\n        for (const regionElement of elements) {\n            const command = new TextStrokeCommand(regionElement.id, colorDefinition, stepData.data?.strokeThickness);\n            commandDispatcher(command);\n        }\n    }\n\n    /**\n     * Given an element and a string, filters any characters from the string that are\n     * not supported by the font of the given element.\n     * @param text The text string to filter.\n     * @param fontData An optional fontData object, when provided, we use the font table to determine glyphs that aren't provided and additionally strip these out also.\n     * @returns A new string representing the passed string with unsupported characters removed.\n     */\n    public filterUnsupportedCharacters = (text: string, fontData?: FontData): string => {\n        // A list of character code ranges that we don't support. Mostly known emoji ranges.\n        let filteredText = text.replace(\n            /(\\r\\n|\\r|(\\u2665|\\u00a9|\\u00ae|[\\u2000-\\u2017]|[\\u201E-\\u3300]]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]))/gm,\n            \"\",\n        );\n        // Use opentype to determine if the font supports the character, remove otherwise.\n        // There are special cases however. Refer to 'allowableGlyphs'\n        const badCharacterCodes: string[] = [];\n        const opentypeFont = fontData ? getFontMetrics(fontData.assetUrl) : undefined;\n        if (opentypeFont) {\n            const searchableGlyphs = filteredText\n                .split(\"\")\n                .filter((char) => !allowableGlyphs.includes(char))\n                .join(\"\");\n            const glyphs = searchableGlyphs.split(\"\").map((char) => opentypeFont.getFont().charToGlyph(char));\n            // Find all characters in the input text that don't work with our system.\n            for (let i = 0; i < glyphs.length; i++) {\n                const undefinedGlyph = glyphs[i].name === \".notdef\";\n                if (undefinedGlyph) {\n                    badCharacterCodes.push(String.fromCharCode(searchableGlyphs.charCodeAt(i)));\n                }\n            }\n        }\n        // Once we have a list of unsupported character codes, let's remove them.\n        for (let i = 0; i < badCharacterCodes.length; i++) {\n            filteredText = filteredText.replaceAll(badCharacterCodes[i], \"\");\n        }\n        return filteredText;\n    };\n\n    public getProcessedInput(input: string, stepData: TextStepData, customiseAllText: boolean): string {\n        const injectedText = customiseAllText ? input : this.injectReplaceableText(input, stepData);\n        return applyTextTransformations(injectedText, {\n            vertical: stepData.vertical,\n            uppercase: stepData.uppercase,\n        });\n    }\n\n    public updateInputText(\n        input: string,\n        elements: TextboxElement[],\n        step: Step<TextStepData>,\n        workflowManager: WorkflowManager,\n    ): TextUpdateResult {\n        const storage = workflowManager.getStepStorage(step.stepName) as TextStepStorage | undefined;\n        const renderedText = renderTextTemplateForWorkflow(input, workflowManager);\n        const processedText = this.getProcessedInput(renderedText, step.data, storage?.customiseAllText ?? false);\n\n        const response: TextUpdateResult = {\n            command: undefined,\n            helperData: {},\n            errorData: this.getErrorsForText(input, processedText, step, workflowManager),\n        };\n\n        // Check the input text for validity.\n        if (response.errorData) {\n            return response;\n        }\n\n        // Otherwise set helper text to character limit\n        response.helperData.charactersRemaining = step.data.maxLength - processedText.length;\n\n        // Calculate font size and lines with new text.\n        // TODO: We need to shift this into TextChangeCommand\n        const commands: CanvasCommand[] = [];\n        const correctFontSizes = new Map<string, number>();\n        const correctLineLists = new Map<string, null | string[]>();\n        for (const el of elements) {\n            if (!el.fontData) throw new UnhandledBehaviorError(\"Failed to resolve font data for text.\");\n            const [newFontSize, newLines] = determineCorrectFontSizeAndLines(\n                el.fontSize,\n                el.fontData,\n                { left: el.x, top: el.y, width: el.width, height: el.height, rotation: el.rotation, panelId: \"\" },\n                [processedText],\n                { size: step.data.size, minSize: step.data.minSize, maxSize: step.data.maxSize },\n            );\n            correctFontSizes.set(el.id, newFontSize);\n            correctLineLists.set(el.id, newLines);\n            const newText = step.data.curved ? processedText : (newLines || []).join(\"\\n\");\n            commands.push(this.generateTextChangeCommandsForRegion(newFontSize, step.data, el.id, newText));\n        }\n\n        if (!step.data.curved && elements.length > 0) {\n            const allFit = Array.from(correctLineLists.values()).every((x) => x);\n            if (!allFit) {\n                if (!response.errorData) {\n                    response.errorData = {};\n                }\n                response.errorData.doesNotFit = true;\n                return response;\n            }\n        }\n\n        // Notify workflow of text changes.\n        workflowManager.updateStorage(step.stepName, { text: input });\n        workflowManager.updateMetadata(step.stepName, {\n            text: processedText,\n        });\n\n        if ((storage?.defaultCleared || !step.data.deleteDefaultOnFocus) && processedText.trim() !== \"\") {\n            workflowManager.setMandatoryFulfilled(step.stepName, true);\n        }\n\n        response.command = new GroupCommand(commands);\n        return response;\n    }\n\n    public async selectVariant(\n        step: Step<TextStepData>,\n        variant: VariantResource,\n        workflowManager: WorkflowManager,\n        setError: (errorMessage?: string) => void,\n        setHelperText: (text: string) => void,\n    ) {\n        const result = await this.selectVariantCommand(\n            step,\n            variant,\n            workflowManager.getStepStorage(step.stepName) || {},\n            workflowManager.getRegionElements(step.stepName),\n            workflowManager,\n            setError,\n            setHelperText,\n        );\n        if (result) {\n            result.command && workflowManager.getCommandDispatcher()(result.command);\n            result.followup && (await result.followup());\n        }\n    }\n\n    public textAlign = (stepData: TextStepData) => {\n        if (stepData.vertical) {\n            return \"center\";\n        }\n        return stepData.textAlign || \"center\";\n    };\n\n    public createTextFillSpotColor(\n        colorOption: OptionResource,\n        variant: VariantResource,\n    ): TextFillSpotColor | undefined {\n        const colorProfileAsset = colorOption.colorProfile;\n        if (colorProfileAsset) {\n            const profileNameStrWithoutSpaces = (colorProfileAsset.name || \"\").replace(/\\s/g, \"-\");\n            const amountToSlice = profileNameStrWithoutSpaces.lastIndexOf(\"/\");\n            const profileNameFiltered = profileNameStrWithoutSpaces.slice(amountToSlice + 1); // Removes all characters before the last instance of /\n            const finalFilteredName = profileNameFiltered.slice(0, -4); // Removes last 4 characters in the string which is the file extension (eg .icc)\n            if (!variant.namedColor) throw new Error(\"variant named color not set!\");\n            return {\n                profileName: finalFilteredName,\n                namedColor: variant.namedColor,\n            };\n        }\n\n        return undefined;\n    }\n\n    private async reload(stepData: Step<TextStepData>, workflowManager: WorkflowManager, reducerState: LayoutsState) {\n        const serializedStep = workflowManager.getSerializedStep(\n            stepData.stepName,\n            reducerState.serializableWorkflow.steps,\n        );\n        const layouts = Object.values(reducerState.layouts);\n        const elements = layouts.map((layout) => layout.elements).flat();\n        const elementsForStep = elements.filter((el) => el.stepName === stepData.stepName);\n        const option = await optionService.getOptionForStep(stepData);\n\n        if (serializedStep?.selectedVariants) {\n            const variantId = serializedStep.selectedVariants[0].id;\n            if (option && variantId) {\n                const variant = option.variants?.find((variant: VariantResource) => variant.id === variantId);\n                if (variant) {\n                    const fontData = await this.fontDataFromVariant(variant);\n                    const regionElements = elementsForStep.map((el) => ({\n                        id: el.id,\n                        region: el.stepRegion,\n                        regionIndex: el.stepRegionIndex,\n                    }));\n                    const color = serializedStep.storage?.color;\n                    let text = serializedStep.storage?.text;\n\n                    // When a bundle is present we load the text aspect.\n                    const bundle = workflowManager.getWorkflowExperience().getBundle();\n                    if (bundle && stepData.globalPropertyAspectConfigurations) {\n                        const aspects = bundle.getGlobalPropertyConfiguration()?.aspects;\n                        const aspect = aspects?.find(\n                            (a) =>\n                                a.type === AspectType.Text &&\n                                stepData.globalPropertyAspectConfigurations?.map((c) => c.aspectName).includes(a.name),\n                        );\n                        if (aspect) {\n                            const stateManager = bundle.getGlobalPropertyStateManager();\n                            const aspectText = stateManager.getAspect(aspect.name);\n                            if (aspectText) {\n                                text = aspectText;\n                            }\n                        }\n                    }\n\n                    await workflowManager.setSelectionsAndElements(\n                        stepData.stepName,\n                        [variant],\n                        regionElements,\n                        async () => {\n                            workflowManager.updateMetadata(stepData.stepName, { color, text });\n                            workflowManager.updateStorage(stepData.stepName, { text, inputText: text });\n                            const fontSourceCommands = elementsForStep.map((el) => {\n                                const command = new FontSourceCommand(el.id, fontData);\n                                return command;\n                            });\n                            const groupCommand = new GroupCommand(fontSourceCommands);\n                            workflowManager.getCommandDispatcher()(groupCommand);\n                        },\n                    );\n                    if (elementsForStep.length === 0 && option) {\n                        // Assume we are reloading a conditional step.\n                        const defaultVariant = await optionService.getDefaultVariant(\n                            option,\n                            stepData.overrideDefaultVariantId,\n                        );\n                        if (defaultVariant) {\n                            const com = await this.selectVariantCommand(\n                                stepData,\n                                defaultVariant,\n                                { text },\n                                [],\n                                workflowManager,\n                                () => {},\n                                () => {},\n                            );\n                            if (com?.command) workflowManager.getCommandDispatcher()(com.command);\n                        }\n                    } else {\n                        const { command } = textStepService.updateInputText(\n                            text || \"\",\n                            elementsForStep as TextboxElement[],\n                            stepData,\n                            workflowManager,\n                        );\n                        command && workflowManager.getCommandDispatcher()(command);\n                    }\n                }\n            }\n        } else {\n            // When a bundle is present we load the text aspect.\n            const bundle = workflowManager.getWorkflowExperience().getBundle();\n            if (bundle && stepData.globalPropertyAspectConfigurations) {\n                const aspects = bundle.getGlobalPropertyConfiguration()?.aspects;\n                const aspect = aspects?.find(\n                    (a) =>\n                        a.type === AspectType.Text &&\n                        stepData.globalPropertyAspectConfigurations?.map((c) => c.aspectName).includes(a.name),\n                );\n                if (aspect) {\n                    const stateManager = bundle.getGlobalPropertyStateManager();\n                    const aspectText = stateManager.getAspect(aspect.name);\n                    if (aspectText) {\n                        if (elementsForStep.length === 0 && option) {\n                            // Assume we are reloading a conditional step.\n                            const defaultVariant = await optionService.getDefaultVariant(\n                                option,\n                                stepData.overrideDefaultVariantId,\n                            );\n                            if (defaultVariant) {\n                                const com = await this.selectVariantCommand(\n                                    stepData,\n                                    defaultVariant,\n                                    { text: aspectText },\n                                    [],\n                                    workflowManager,\n                                    () => {},\n                                    () => {},\n                                );\n                                if (com?.command) workflowManager.getCommandDispatcher()(com.command);\n                            }\n                        } else {\n                            const { command } = textStepService.updateInputText(\n                                aspectText,\n                                elementsForStep as TextboxElement[],\n                                stepData,\n                                workflowManager,\n                            );\n                            command && workflowManager.getCommandDispatcher()(command);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    private async getDefaultColorVariant(step: TextStepData): Promise<VariantResource | undefined> {\n        const colorOption = step.colorOption;\n        if (!colorOption) return undefined;\n        return optionService.getDefaultVariant(colorOption);\n    }\n\n    private async getDefaultColor(step: TextStepData): Promise<string | undefined> {\n        const colorOption = step.colorOption;\n        if (!colorOption) return undefined;\n        const defaultVariant = await optionService.getDefaultVariant(colorOption);\n        return defaultVariant?.color;\n    }\n\n    private async getDefaultImageFillVariant(step: TextStepData): Promise<VariantResource | undefined> {\n        const option = step.imageFillOption;\n        if (!option) return undefined;\n        return optionService.getDefaultVariant(option);\n    }\n\n    private async getDefaultStrokeColorVariant(step: TextStepData): Promise<VariantResource | undefined> {\n        const option = step.strokeOption;\n        if (!option) return undefined;\n        return optionService.getDefaultVariant(option);\n    }\n\n    /**\n     * Validates a string of text based on step configuration.\n     * @param text The text to validate\n     * @param renderedText The text after being rendered via templating\n     * @param step The step providing configuration\n     * @param workflowManager Workflow manager for access to workflow state\n     * @returns A list of errors. Empty if the text passes validation.\n     */\n    private getErrorsForText = (\n        text: string,\n        renderedText: string,\n        step: Step<TextStepData>,\n        workflowManager: WorkflowManager,\n    ): undefined | TextErrorData => {\n        let errorData: undefined | TextErrorData = undefined;\n\n        // Ensure character limit is maintained\n        if (!!step.data && !!step.data.maxLength && renderedText.length > step.data.maxLength) {\n            if (!errorData) {\n                errorData = {};\n            }\n            errorData.hitCharacterLimit = true;\n        }\n\n        // Check text against our blacklist\n        const profanityFilter = workflowManager.getWorkflowExperience().getProfanityList();\n        const words = split(text.toLowerCase());\n        for (const word of words) {\n            for (const i in profanityFilter) {\n                const profanity = profanityFilter[i].toLowerCase().replace(/\\s/g, \"\");\n                const match = word === profanity;\n                if (match) {\n                    if (!errorData) {\n                        errorData = {};\n                    }\n                    errorData.blockedProfanity = true;\n                    break;\n                }\n            }\n        }\n\n        // Potentially don't allow newlines.\n        const breaksNewlineRule = !step.data.allowNewlines && (text.includes(\"\\n\") || text.includes(\"\\r\"));\n        if (breaksNewlineRule) {\n            if (!errorData) {\n                errorData = {};\n            }\n            errorData.illegalMultipleLines = true;\n        }\n\n        return errorData;\n    };\n\n    private async fontDataFromVariant(variant: VariantResource): Promise<FontData> {\n        const fontAsset = variant.asset;\n        if (!fontAsset) {\n            throw new AssetNotFoundError(variant);\n        }\n        const fontUrl = fontAsset.fileLink;\n        if (!fontUrl) {\n            throw new ResourceNotFoundError(fontAsset);\n        }\n        const font = await loadFont(fontUrl);\n        return {\n            assetUrl: fontUrl,\n            name: font.names.fullName[\"en\"],\n        };\n    }\n\n    private async selectVariantCommand(\n        step: Step<TextStepData>,\n        variant: VariantResource,\n        storage: TextStepStorage,\n        elements: RegionElement[],\n        workflowManager: WorkflowManager,\n        setError: (errorMessage?: string) => void,\n        setHelperText: (text: string) => void,\n        imageFillData?: { src: string; height: number; width: number; scale: number },\n        strokeData?: ColorDefinition,\n    ): Promise<CommandWithFollowup | null> {\n        const updateId = workflowManager.markUpdatePending();\n\n        const fontData = await this.fontDataFromVariant(variant);\n\n        let shouldReturnResult = true;\n        const wrappedSetError = (errorMessage?: string) => {\n            setError(errorMessage);\n            if (errorMessage) {\n                shouldReturnResult = false;\n            }\n        };\n\n        if (elements.length > 0) {\n            const commands: CanvasCommand[] = elements.map((elem) => {\n                const command = new FontSourceCommand(elem.id, fontData);\n                return command;\n            });\n\n            if (imageFillData) {\n                const imageFillCommands = elements.map((elem) => new FontImageFillCommand(elem.id, imageFillData));\n                commands.push(...imageFillCommands);\n            }\n\n            if (strokeData) {\n                const strokeCommands = elements.map((elem) => {\n                    return new TextStrokeCommand(elem.id, strokeData, step.data.strokeThickness);\n                });\n                commands.push(...strokeCommands);\n            }\n\n            const sizingCommand = await this.changeInputTextWithRegion(\n                step,\n                step.data.size || defaultFontSize,\n                fontData,\n                storage.text || \"\",\n                storage,\n                workflowManager,\n                storage?.customiseAllText ?? false,\n                wrappedSetError,\n                setHelperText,\n            );\n            sizingCommand && commands.push(sizingCommand);\n            const command = new GroupCommand(commands);\n            if (shouldReturnResult) {\n                return {\n                    command: command,\n                    followup: async () => {\n                        workflowManager.markUpdateCompleted(updateId);\n                        await workflowManager.setSelectionsAndElements(step.stepName, [variant], elements);\n                    },\n                };\n            } else {\n                return null;\n            }\n        } else {\n            const newlyCreatedData = await this.createTextboxRegions(\n                step.stepName,\n                variant,\n                step.data,\n                fontData,\n                storage,\n                workflowManager,\n            );\n\n            const sizingCommand = await this.changeInputTextWithRegion(\n                step,\n                step.data.size || defaultFontSize,\n                fontData,\n                newlyCreatedData[0]?.newElement.input || storage.text || step.data.defaultText || \"\",\n                storage,\n                workflowManager,\n                storage?.customiseAllText ?? false,\n                wrappedSetError,\n                setHelperText,\n            );\n\n            const commands = newlyCreatedData.flatMap((data) => data.commands);\n\n            if (imageFillData) {\n                const imageFillCommands = newlyCreatedData.map(\n                    (data) => new FontImageFillCommand(data.regionElement.id, imageFillData),\n                );\n                commands.push(...imageFillCommands);\n            }\n\n            if (strokeData) {\n                const strokeCommands = newlyCreatedData.map(\n                    (elem) => new TextStrokeCommand(elem.newElement.id, strokeData, step.data.strokeThickness),\n                );\n                commands.push(...strokeCommands);\n            }\n\n            sizingCommand && commands.push(sizingCommand);\n            const groupCommand = new GroupCommand(commands);\n\n            if (shouldReturnResult) {\n                return {\n                    command: groupCommand,\n                    followup: async () => {\n                        workflowManager.markUpdateCompleted(updateId);\n                    },\n                };\n            } else {\n                return null;\n            }\n        }\n    }\n\n    /**\n     * When a text step specifies replaceable text, the text input by the user will replace\n     * a specific token within a larger string of text specified in the step configuration. Otherwise\n     * this function will just return the text it's given when the feature is disabled.\n     */\n    private injectReplaceableText(text: string, stepData: TextStepData) {\n        if (stepData.replaceableText) {\n            return stepData.replaceableText.replace(`{{}}`, text);\n        } else {\n            return text;\n        }\n    }\n\n    private async createTextboxRegions(\n        stepName: string,\n        variant: VariantResource,\n        stepData: TextStepData,\n        fontData: FontData,\n        storage: TextStepStorage,\n        workflowManager: WorkflowManager,\n    ): Promise<CreatedElementData[]> {\n        if (!stepData || !stepData.regions) {\n            throw new Error(\"Step data not supplied\");\n        }\n\n        const currentText = storage.text || stepData.defaultText || \"\";\n        const renderedText = renderTextTemplateForWorkflow(currentText, workflowManager);\n        const transformedText = this.getProcessedInput(renderedText, stepData, false);\n        const addFontToRegion = async (region: Region, regionIndex: number): Promise<CreatedElementData> => {\n            const layouts = workflowManager.getLayouts();\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n\n            // Create new element.\n            const elementId = generate();\n            try {\n                if (!layout) {\n                    throw new RegionLayoutMissingError(\"Failed to find layout for region: \" + region.panelId);\n                }\n                const colorOption = await optionService.ensureFullOption(stepData.colorOption);\n\n                let textFillSpotColor: TextFillSpotColor | undefined = undefined;\n                if (colorOption && colorOption.variants) {\n                    const defaultVariant = await optionService.getDefaultVariant(colorOption);\n                    if (defaultVariant) {\n                        textFillSpotColor = this.createTextFillSpotColor(colorOption, defaultVariant);\n                        workflowManager.updateStorage(stepName, {\n                            colorProfileAssetKey: colorOption.colorProfile?.key,\n                        });\n                    }\n                }\n\n                const defaultColor = await this.getDefaultColor(stepData);\n                const startingFill = defaultColor ? defaultColor : \"#000000\";\n\n                const newElement: TextboxElement = {\n                    stepRegion: region,\n                    stepRegionIndex: regionIndex,\n                    stepName: stepName,\n                    align: this.textAlign(stepData),\n                    fill: storage.color ? storage.color : startingFill,\n                    fontSize: stepData.size || defaultFontSize,\n                    fontData,\n                    id: elementId,\n                    layer: region.layer,\n                    layerIndex: region.layerIndex,\n                    rotation: region.rotation,\n                    text: transformedText,\n                    input: currentText,\n                    type: LayoutElementType.Textbox,\n                    vertical: stepData.vertical,\n                    x: region.left,\n                    y: region.top,\n                    height: region.height,\n                    width: region.width,\n                    immutable: region.immutable,\n                    verticalAlign: stepData.verticalAlign || \"middle\",\n                    curved: stepData.curved,\n                    paths: stepData.paths,\n                    fillSpotColorDefinition: textFillSpotColor,\n                };\n\n                const sizingCommands: CanvasCommand[] = [];\n                const correctFontSizes = new Map<string, number>();\n                const correctLineLists = new Map<string, null | string[]>();\n                if (!newElement.fontData) throw new UnhandledBehaviorError(\"Failed to resolve font data for text.\");\n                const [newFontSize, newLines] = determineCorrectFontSizeAndLines(\n                    newElement.fontSize,\n                    newElement.fontData,\n                    {\n                        left: newElement.x,\n                        top: newElement.y,\n                        width: newElement.width,\n                        height: newElement.height,\n                        rotation: newElement.rotation,\n                        panelId: \"\",\n                    },\n                    [transformedText],\n                    { size: stepData.size, minSize: stepData.minSize, maxSize: stepData.maxSize },\n                );\n                correctFontSizes.set(newElement.id, newFontSize);\n                correctLineLists.set(newElement.id, newLines);\n                const newText = stepData.curved || stepData.vertical ? transformedText : (newLines || []).join(\"\\n\");\n                sizingCommands.push(\n                    this.generateTextChangeCommandsForRegion(newFontSize, stepData, newElement.id, newText),\n                );\n\n                const newCommand = new CreateElementCommand(newElement, layout);\n\n                return {\n                    regionElement: { id: elementId, region, regionIndex },\n                    commands: [newCommand, ...sizingCommands],\n                    newElement,\n                    fontData,\n                };\n            } catch (err) {\n                console.log(err);\n                throw new FontLoadError(\"Error adding font to region\");\n            }\n        };\n\n        const newElementData = await Promise.all(stepData.regions.map(addFontToRegion)).catch((e) => {\n            if (e instanceof FontLoadError) {\n                toast.setLatestToast(\"Failed to load font.\", InformationMessageType.Error);\n                throw e;\n            } else if (e instanceof RegionLayoutMissingError) {\n                throw e;\n            } else {\n                throw new Error(e);\n            }\n        });\n\n        await workflowManager.setSelectionsAndElements(\n            stepName,\n            [variant],\n            newElementData.map((e) => e.regionElement),\n            async () => {\n                workflowManager.updateMetadata(stepName, {\n                    text: currentText,\n                });\n                workflowManager.updateStorage(stepName, {\n                    text: currentText,\n                });\n            },\n        );\n\n        return newElementData;\n    }\n\n    private generateTextChangeCommandsForRegion(\n        correctFontSize: number,\n        stepData: TextStepData,\n        elementId: string,\n        newText: string,\n    ): GroupCommand {\n        const commands: CanvasCommand[] = [];\n        const textChangeCommand = new TextChangeCommand(elementId, newText);\n        commands.push(textChangeCommand);\n        // If the user has specified a font size range as opposed to a\n        // static font size then do sizing.\n        if (!stepData.size) {\n            const fontSizeCommand = new FontSizeCommand(elementId, correctFontSize);\n            commands.push(fontSizeCommand);\n        }\n        const groupCommand = new GroupCommand(commands);\n        return groupCommand;\n    }\n\n    /**\n     * @deprecated\n     */\n    private async changeInputTextWithRegion(\n        step: Step<TextStepData>,\n        /**\n         * @deprecated\n         */\n        curFontSize: number,\n        /**\n         * @deprecated\n         */\n        curFontData: FontData,\n        input: string | undefined,\n        storage: TextStepStorage,\n        workflowManager: WorkflowManager,\n        customiseAllText: boolean,\n        setError: (errorMessage?: string) => void,\n        setHelperText: (text: string) => void,\n        setFlashRedError?: (status: boolean) => void,\n    ): Promise<GroupCommand | undefined> {\n        // Control characters are not valid in XML, we strip them from any input to\n        // ensure that invalid data doesn't enter the SVG generated by our system.\n        // \\u000A and \\u000D are carriage return and newline sequences, we want to keep these.\n        // eslint-disable-next-line no-control-regex\n        const newText = (input || \"\").replace(/^(?![\\u000A\\u000D])[\\u0000-\\u001F\\u007F-\\u009F]/g, \"\");\n        const renderedText = renderTextTemplateForWorkflow(newText, workflowManager);\n        const transformedText = this.getProcessedInput(renderedText, step.data, customiseAllText);\n\n        const existingRegionEls = workflowManager.getRegionElements(step.stepName);\n        const correctFontSizes = new Map<string, number>();\n        const correctLineLists = new Map<string, null | string[]>();\n\n        // Calculate font size and lines with new text.\n        for (const regionElement of existingRegionEls) {\n            if (regionElement.region) {\n                const [newFontSize, newLines] = determineCorrectFontSizeAndLines(\n                    curFontSize,\n                    curFontData,\n                    regionElement.region,\n                    [transformedText],\n                    { size: step.data.size, minSize: step.data.minSize, maxSize: step.data.maxSize },\n                );\n                correctFontSizes.set(regionElement.id, newFontSize);\n                correctLineLists.set(regionElement.id, newLines);\n            }\n        }\n\n        const helperTextGenerator = () => {\n            // Ensure character limit is maintained\n            if (!!step.data && !!step.data.maxLength && transformedText.length > step.data.maxLength) {\n                if (setFlashRedError) {\n                    setFlashRedError(true);\n                }\n                return { info: \"0\" };\n            }\n\n            // Check text against our blacklist\n            const profanityFilter = workflowManager.getWorkflowExperience().getProfanityList();\n            const words = split(transformedText.toLowerCase());\n            for (const word of words) {\n                for (const i in profanityFilter) {\n                    const profanity = profanityFilter[i].toLowerCase().replace(/\\s/g, \"\");\n                    const match = word === profanity;\n                    if (match) {\n                        const msg = \"Blocked profanity.\";\n                        setError(msg);\n                        return { error: msg };\n                    }\n                }\n            }\n\n            // Potentially don't allow newlines.\n            if (\n                !step.data.vertical &&\n                !step.data.allowNewlines &&\n                (transformedText.includes(\"\\n\") || transformedText.includes(\"\\r\"))\n            ) {\n                const msg = \"Text may not span multiple lines.\";\n                setError(msg);\n                return { error: msg };\n            }\n\n            if (!step.data.curved) {\n                const allFit = Array.from(correctLineLists.values()).every((x) => x);\n                if (!allFit) {\n                    const msg = \"Text does not fit.\";\n                    setError(msg);\n                    return { error: msg };\n                }\n            }\n\n            setError(undefined);\n            return { info: (step.data.maxLength - transformedText.length).toString() };\n        };\n\n        // Check the input text for validity.\n        const newHelperText = helperTextGenerator();\n\n        if (newHelperText.error) {\n            setHelperText(newHelperText.error);\n            return;\n        }\n\n        setHelperText(`${newHelperText.info} characters remaining` || \"\");\n\n        if (setFlashRedError) {\n            return;\n        }\n\n        workflowManager.updateStorage(step.stepName, { text: newText });\n        workflowManager.updateMetadata(step.stepName, {\n            text: this.injectReplaceableText(newText, step.data),\n        });\n\n        if ((storage.defaultCleared || !step.data.deleteDefaultOnFocus) && newText.trim() !== \"\") {\n            workflowManager.setMandatoryFulfilled(step.stepName, true);\n        }\n        const commands: CanvasCommand[] = [];\n        for (const regionElement of existingRegionEls) {\n            const newText = step.data.curved\n                ? transformedText\n                : (correctLineLists.get(regionElement.id) || []).join(\"\\n\");\n            commands.push(\n                this.generateTextChangeCommandsForRegion(\n                    correctFontSizes.get(regionElement.id) || 1,\n                    step.data,\n                    regionElement.id,\n                    newText,\n                ),\n            );\n        }\n\n        const groupCommand = new GroupCommand(commands);\n        return groupCommand;\n    }\n}\n\nexport const textStepService = new TextStepService();\n","import { Region } from \"../types\";\n\nexport abstract class ModuleProduct {\n    /**\n     * Name used by class. Usually product or brand name.\n     */\n    abstract moduleName: string;\n\n    /**\n     * SVG with styled path positioned on a background image. To be displayed to user.\n     */\n    abstract svgPreview(text: string, region: Region): string;\n\n    /**\n     * SVG with styled path positioned on a background image. To be submitted for print.\n     */\n    abstract svgPrint(text: string, region: Region): string;\n}\n","export const fontTtfDataUrl =\n    \"data:application/octet-stream;base64,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DOYNZA3mDlQOyg88D54QEBCGEQARchHsEmIS1BOWFAwUghTwFWIV1BaiFxQXkhgEGMYZdBomGtQbfhwYHL4dYB3+HpgfPh/oIJYhPCHmIpQjRiPsJJolSCXuJpQnQifoKJIpRAAmAAn/8QAK//sADP/7AA3/+wAO//sAD//7ABD/+wAR//sAEv/7ABP/+wAU//sAFf/xABb/8QAZ//sAHf/2AB7/+wAf//sAIP/xACH/+wAi//sAI//7ACT/+wAl//EAJv/2ACf/8QAo//sAKf/2ACr/+wAr//sALP/sAC3/7AAu/+IAL//dADD/9gAx/+wAMv/7ADP/+wA0//YAKwAG//EACP/nAAn/4gAK/9MAC//iAAz/9gAN/+IADv/sAA//4gAQ/9gAEf/iABL/1QAT//EAFP/nABX/8QAW/9gAMf/TADL/pgAz//MANP/nADX/8QA2//EAN//7ADj/7gA5//YAOv/7ADv/2AA8//EAPf/2AD7/9gA///EAQP/sAEH/+wBC/+wAQ//xAET/7ABF/+wARv/2AEf/3QBI/90ASf/EAEr/zgBL//YAKwAG//YAB//2AAn/3QAL/+wADP/sAA3/8QAO//YAD//sABD/8QAR/+wAEv/iABP/5wAU/+wAFf/dABb/7AAX/78AMf/YADL/sAAz/+IANP/iADX/8QA2/+cAN//xADj/3QA5/+wAOv/2ADv/4gA8//EAPf/xAD7/8QA///YAQP/YAEH/9gBC/+cAQ//sAET/7ABF/+wARv/xAEf/zgBI/9MASf/OAEr/zgBL/+wAKgAG//YAB//iAAj/4gAK/+IADP/dAA3/ugAO/+IAD//iABD/5wAR/+IAEv/dABP/yQAU/90AFf+mABb/0wAx/5gAMv/YADP/4gA0/9MANf/xADb/7AA3/+wAOP/iADn/7AA6//EAO//dADz/5wA9/+wAPv/sAD//5wBA/9gAQf/sAEL/zgBD/+wARP/YAEX/tQBG/90AR/+hAEj/oQBJ/8QASv+DAEv/7AAqAAb/8QAH/90ACP/YAAn/oQAL/8kADP/iAA3/sAAO/+cAD//YABD/4gAR/90AEv/bABP/4gAU/+IAFf/TABb/5wAg/+QAMf/nADL/3AAz//QANP/rADX/9AA2//IAN//4ADj/8AA5//QAOv/1ADv/7AA8/+oAPf/7AD7/9wA///IAQP/tAEH/+wBC/+IAQ//2AET/4wBF/7YARv/vAEf/pgBK/6MAS//yACYAB//TAAj/8QAK/84ADP/dAA3/9gAO//EAD//dABD/pgAR/8kAEv+6ABP/7AAU/90AFf/OADH/xAAy/5IAM//sADT/3QA1/+cANv/xADf/9gA4/90AO/9WADz/5wA9//EAPv/sAD//5wBA/84AQf/dAEL/0wBD/+cARP/nAEX/5wBG/+cAR//dAEj/2ABJ/7oASv/JAEv/4gAsAAb/+wAH//sACP/xAAn/zgAK/+cAC//dAAz/9gAN/9gADv/tAA//7AAQ/+kAEf/rABL/3QAT/90AFP/hABX/3QAW/90AMf/nADL/vwAz/+cANP/nADX/8QA2//EAN//sADj/5wA5//YAOv/2ADv/4gA8//EAPf/2AD7/+wA///sAQP/2AEH/+wBC/+wAQ//7AET/7ABF/9MARv/7AEf/yQBI/84ASf+wAEr/xABL/+cADgAG//sACf/xAAv/7AAN//sADv/7AA8AAAAR//EAEv/0ABP/9gAU//EAFf/xABb/7AAx//YAQP/2ACkABv/7AAf/9gAI//sACf/iAAr/5wAL/+wADP/vAA3/3QAO//sAD//qABD/8QAR/+wAEv/nABP/8QAU/+cAFf/iABb/7AAx/+cAMv/vADP//AA0/+cANf/7ADb//gA4//EAOf/8ADr//AA7/+kAPP/6AD3//QA+//4AP//7AEL/6gBD//0ARP/2AEX/7ABG//EAR//YAEj/4gBJ/+wASv/LAEv//AAsAAb/+wAH//EACP/2AAn/0wAK/+IAC//JAAz/5wAN/90ADv/iAA//7AAQ/+cAEf/sABL/3QAT/9MAFP/iABX/zgAW/+cAMf/YADL/xAAz/+wANP/dADX/6AA2//EAN//xADj/4wA5//EAOv/2ADv/7AA8/+wAPf/sAD7/9gA//+wAQP/iAEH/8QBC/90AQ//nAET/5wBF/8QARv/mAEf/xABI/8kASf+1AEr/rQBL/+IALAAG//sAB//7AAj/9gAJ/9MACv/2AAv/ugAM/+kADf/dAA7/9gAP/+wAEP/2ABH/8AAS//EAE//2ABT/5wAV/9gAFv/sADH/vwAy/9UAM//eADT/3wA1//EANv/xADf/9gA4/+IAOf/xADr/9gA7/+wAPP/xAD3/9gA+//EAP//2AED/2ABB//EAQv/nAEP/9gBE/+cARf/TAEb/8QBH/9gASP/YAEn/xgBK/78AS//xACsABv/7AAf/9gAI/+wACf/TAAr/5wAL/90ADP/lAA3/zgAO/90AD//dABD/7AAR/+IAEv/iABP/2AAU/+IAFf/JABb/5wAx/90AMv/EADP/6wA0/+EANf/wADb/8AA4/9wAOf/dADr/7AA7/9gAPP/sAD3/5wA+/+wAP//iAED/0wBB/+IAQv/YAEP/4gBE/84ARf/JAEb/4gBH/8kASP/OAEn/vwBK/8kAS//TACwABv/7AAf/3wAI/+cACf+wAAr/4wAL/8kADP/dAA3/xwAO/+cAD//dABD/7AAR/+cAEv/iABP/yQAU/9cAFf+/ABb/4gAa/+kAMf/YADL/uwAz/+EANP/dADb/6wA3//MAOP/lADn/8QA6//IAO//eADz/5wA9/+4APv/zAD//8ABA/+IAQf/2AEL/6gBD//YARP/kAEX/zABG/+8AR/+0AEj/uwBJ/64ASv+vAEv/5QAsAAb/+wAH/90ACP/nAAn/4gAK/9MAC//nAAz/3QAN//YADv/eAA//3QAQ/7AAEf/OABL/sAAT//sAFP/dABX/0wAW/9MAMf/iADL/iAAz//YANP/OADX/9gA2//EAN//xADj/0wA5//YAOv/zADv/gAA8//EAPf/7AD7/+wA///YAQP/OAEH/7gBC/84AQ//2AET/2ABF//sARv/2AEf/5wBI/+cASf/TAEr/4gBL/+wALAAG//sAB//2AAj/8QAJ/9gACv/nAAv/3QAM/+IADf/dAA7/4gAP/+IAEP/nABH/5wAS/9gAE//YABT/3QAV/84AFv/sADH/5wAy/78AM//nADT/2AA1/+cANv/nADf/7AA4/90AOf/sADr/7AA7/+cAPP/sAD3/8QA+/+wAP//xAED/4gBB//EAQv/dAEP/5wBE/+IARf/YAEb/5wBH/78ASP/HAEn/sABK/7UAS//dACsABv/xAAf/8QAI/+IACf/dAAr/0wAL/+IADP/iAA3/3QAO/+cAD//dABD/zgAR/9MAEv/EABP/0wAU/84AFv/dADH/4gAy/6EAM//jADT/3QA1/+wANv/sADf/5wA4/90AOf/nADr/8QA7/78APP/xAD3/9gA+/+wAP//nAED/3QBB/+cAQv/nAEP/5wBE/+IARf/OAEb/3QBH/8QASP/JAEn/lwBK/7oAS//YACkABv/sAAf/0wAI/90ACf/OAAr/3QAM/90ADf/EAA7/5wAP/9gAEP/YABH/3QAS/9MAE//YABT/4gAV/90AMf/sADL/wAAz/+8ANP/kADX/6wA2//AAN//2ADj/5AA5//EAOv/uADv/1gA8//QAPf/2AD7/8QA///AAQP/dAEH/7ABD/+gARP/YAEX/1QBG/+wAR/+3AEj/wwBJ/7UASv+wAEv/5gAeAAf/zgAi/+4AI//5ACT/7wAy/9AAM//pADT/sQA1/+sANv/nADf/5gA4/7oAOf/vADr/9wA7/9AAPP/sAD3/6wA+/+YAP//sAED/uwBB/+kAQv+7AEP/5ABE/9QARf+6AEb/0ABH/34ASP+SAEn/zQBK/5sAS//nABwAF//RACT//wAy/9EAM//uADT/5wA1/+8ANv/3ADf/7gA4/+gAOf/3ADr/+wA7/9oAPP/vAD3/9wA+/+4AP//vAED/4QBB//cAQv/nAEP/7wBE/+4ARf/QAEb/9wBH/8EASP/MAEn/wwBK/7sAS//nABwAF//QABv/+QAy/8EAM//zADT/6wA1//sANv/zADf/+wA4/+8AOf/zADr//gA7/+EAPP/vAD3/9wA+//kAP//3AED/4gBB//kAQv/jAEP/8wBE/+YARf/VAEb/+QBH/84ASP/JAEn/twBK/8EAS//rAB8ABv/7ABL/3wAX/8kAJf/5ACv/7wAy/7oAM//zADT/6wA1/+8ANv/uADf/8wA4/+oAOf/vADr/7wA7/9QAPP/5AD3//gA+//EAP//vAED/4wBB//MAQv/mAEP/7gBE/+cARf/XAEb/6wBH/8kASP/JAEn/twBK/7cAS//nACAABv/7ACQAAgAl/+8AJ//5AC3//gAv//4AMv/oADP//QA0/+sANf/7ADb/+gA3//sAOP/jADn/9wA6//oAO//kADz//wA9//0APv/+AD8AAABA/+gAQf/7AEL/6ABD//sARP/sAEX/8QBG//sAR//qAEj/6wBJ/+cASv/qAEv/+QAbAAb/+wAl/+8AMv+5ADP/+wA0/+8ANf/7ADb/+wA3//0AOP/vADn/+wA6AAAAO/+7ADz//gA9//4APv/7AED/7ABB//4AQv/nAEP/+QBE//kARf/7AEb/+QBH//MASP/rAEn/4gBK/+8AS//7AB0ABv/2ABf/zgAl/+8AMv+3ADP/9wA0/+sANf/3ADb/8QA3//kAOP/uADn/8wA6//sAO//YADz/8wA9/+4APv/3AD//8wBA/+MAQf/3AEL/6QBD/+8ARP/nAEX/1ABG/+8AR//JAEj/zABJ/6YASv/JAEv/3AAcAAb/+wAX//MAJf/7ADL/6wAz//4ANP/uADX/+wA2//4AN//+ADj/8wA5//0AOv/+ADv/7gA8//4APf/+AD7/+wA///4AQP/uAEL/9wBD//4ARP/+AEX/+QBG//4AR//uAEj/9wBJ/+4ASv/zAEv//gAYAAb/+wAx//YAMv/rADP//wA0//MANf//ADYAAQA3//8AOP/zADv/6AA8//4APf/+AD4AAQBA/+4AQf//AEL/8wBD//4ARP/4AEX//QBH/+wASP/3AEn/7ABK//EASwABABwABv/2ABf/4QAy/8oAM//9ADT/+QA1//4ANv/7ADf//gA4//MAOf/+ADr//wA7/+EAPP/7AD3//gA+//4AP//+AED/7wBB//4AQv/zAEP//gBE//sARf/7AEb//gBH/+8ASP/5AEn/2gBK//oAS//+AB0ABv/nABf/5wAx/7AAMv/hADP/7gA0/7QANf/rADb/5wA3/+4AOP+sADn/6wA6//kAO/+3ADz/6gA9/+8APv/nAD//5wBA/6wAQf/uAEL/rgBD/+cARP+8AEX/3ABG/9oAR//cAEj/0QBJ/9oASv/RAEv/7wAeAAb/9gAX//cAI//9ADH/vwAy/+4AM//5ADT/2gA1//4ANv/3ADf/+wA4/9oAOf/3ADr/+wA7/+cAPP/7AD3/+QA+//cAP//5AED/1ABB//sAQv/cAEP/9wBE/+8ARf/JAEb/6wBH/8QASP++AEn/5wBK/8EAS//+ABwAF//7ADH/7AAy/+QAM//+ADT/7gA1//4ANgAAADf//QA4//cAOf/7ADr//gA7/+4APP/+AD3//gA+//0AP//7AED/7wBB//4AQv/uAEP//gBE//cARf/7AEb/+QBH/+gASP/vAEn/6wBK/+gAS//+AB4ABv/7ABf/8wAa//4AHf/3ACX/9wAq//4AMf/2ADL/5AAz//0ANP/zADX/+wA2//4AN//+ADj/+QA7/+4APf/+AD7/+wA///4AQP/2AEH/+gBC/+4AQ//7AET/+QBF//sARv/+AEf/8wBI/+8ASf/zAEr/6wBL//4AHQAG//EAJP/3ADH/7AAy/7sAM//sADT/4wA1/+8ANv/vADf/9wA4/+QAOf/qADr/9wA7/98APP/vAD3/9wA+/+sAP//uAED/4wBB/+4AQv/mAEP/7wBE/+IARf/VAEb/7gBH/8MASP/GAEn/uwBK/7oAS//fABwABv/sACT//gAy/54AM//rADT/6gA1//EANv/rADf/9wA4/+MAOf/oADr/9wA7/64APP/sAD3/8QA+/+wAP//sAED/4QBB//MAQv/oAEP/5ABE/9gARf/kAEb/7gBH/9EASP/QAEn/uwBK/8QAS//zADAAF//3ABj//wAZ/+kAGv//ABv//QAc//4AHf/pAB7/+wAf//8AIP/iACH//gAi//8AI//+ACT//wAl/+IAJ//uACj//gAp/+cAKv/hACv/+QAs/8MALf/QAC7/5AAv/8wAMP//ADL/4QAz//4ANP/jADX/9wA3//kAOP/fADn/9wA7/+IAPP/5AD3/+gA+//EAP//6AED/2gBB/+8AQv/aAET/7wBF/9cARv/qAEf/xgBI/7sASf/qAEr/tABL//sAHQAG/+cAF//oACT/+gAy/+IAM//xADT/zAA1/+8ANv/sADf/+gA4/8wAOf/3ADr/8wA7/8kAPP/uAD3/7wA+/+wAP//rAED/yQBB//cAQv/MAEP/+ABE/9QARf/KAEb/2gBH/8EASP/EAEn/4gBK/7cAS//vAB0ABv/xABv/+QAl/+4AMv+8ADP/7wA0/9wANf/zADb/6AA3//cAOP/hADn/5gA6//MAO//aADz/6QA9//MAPv/pAD//6wBA/+MAQf/3AEL/2gBD/+kARP/rAEX/1ABG/+kAR//JAEj/zABJ/7QASv+7AEv/5wAbAAb/9gAy/6YAM//9ADT/0wA1//oANv/+ADf//QA4/9UAOf/3ADr//wA7/7kAPP/6AD3//gA+//sAP//7AED/0ABB//oAQv/XAEP/+QBE/+IARf/zAEb/9wBH/+8ASP/vAEn/6gBK/+cAS//6ABwABv/7ACQAAgAy/9UAM//7ADT/7wA1//cANv/9ADf//wA4/+4AOf/7ADr//wA7/+sAPP/+AD3//gA+//0AP//6AED/7gBB//sAQv/sAEP/+wBE/+8ARf/7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ABX/3QAx//YAMv+5ADP/+AA0/+MANf/3ADb/+AA3//kAOP/iADn/+gA6//0AO//OADz//QA9//4APv/5AD///ABA/+YAQv/jAEP/9wBE/+YARf/vAEb//gBH/+cASP/vAEn/0QBK/+YAS//9ACgAB//2AAj/4gAJ/90ACv/sAAv/4gAM/+gADf/iAA7/9QAP/+gAEP/dABH/4AAS/+YAE//OABT/4gAV/90AJP/7ADH/9gAy/8EAM//vADT/3wA2//QAN//4ADj/4wA5/+kAOv/6ADv/0QA8/+YAPf/zAD7/6QA///EAQP/qAEL/3ABD/+gARP/fAEb/+ABH/7sASP+7AEn/rwBK/68AS//jACcACP/xAAn/7AAK//gADP/2AA7/9wAP//YAEP/xABH/5wAS/+cAE//xABT/7AAV/+UAMf/2ADL/6AAz//kANP/qADX/+wA2//oAN//7ADj/6wA5//cAOv//ADv/4wA8//sAPf/+AD7/+wA///oAQP/sAEH/+gBC/+MAQ//5AET/7wBF/+oARv/7AEf/4wBI/+wASf/jAEr/6gBL//4AJgAH//sACP/7AAn/5wAK//oADP/2AA7/9gAP//YAEP/xABH/8QAS//IAE//xABT/5wAV//EAMv/nADP/+wA0//EANf/9ADb//gA3//4AOP/uADn/+wA6//4AO//oAD0AAAA+//sAP//+AED/7wBB//4AQv/qAEP//wBE//EARf/3AEb/+wBH/+YASP/3AEn/2gBK/+QAS//7ACkAB//2AAj/9gAJ/90ACv/yAAz/8QAO//EAD//wABD/6gAR/+wAEv/mABP/9AAU/+wAFf/rABf/zgAx//YAMv/OADP/7wA0/+oANf/5ADb//gA3//0AOP/oADn/+QA6//0AO//YADz//gA9//8APv/6AD//+QBA/+4AQf/5AEL/4wBD//gARP/qAEX/+QBG//oAR//pAEj/6QBJ/9UASv/rAEv/+gAqAAf/sgAI/8kACf+wAAr/ugAL/7UADP+1AA3/3QAO/+QAD/+6ABD/sgAR/7UAEv+xABP/4gAU/6sAFf+mADH/lwAy/9oAM//jADT/qwA1/+IANv/iADf/4wA4/5oAOf/XADr/7gA7/7QAPP/kAD3/6wA+/+4AP//mAED/rQBB/+8AQv+qAEP/6gBE/74ARf/XAEb/2gBH/9AASP/SAEn/1QBK/80AS//qACsAB//nAAj/8QAJ/6YACv/sAAv/nAAM/90ADf+6AA7/9gAP/+IAEP/sABH/3QAS/9oAE//sABT/3QAV/8QAJP/+ADH/pgAy/+sAM//vADT/ygA1//0ANv/zADf/+wA4/9MAOf/vADr/+wA7/9gAPP/3AD3/9wA+//EAP//7AED/1QBB//cAQv/PAEP/8wBE/+YARf+7AEb/5wBH/7UASP/JAEn/2gBK/6UAS//zACkAB//2AAn/7AAK//kAC//sAAz/9gAO//oAD//2ABD/7AAR/+cAEv/vABP/9gAU//EAFf/sABcAAQAx/+YAMv/pADP/+QA0/+oANf/zADb/+wA3//oAOP/nADn/9wA6//4AO//uADz/+QA9//oAPv/7AD//+QBA/+8AQf/3AEL/6QBD//oARP/sAEX/8wBG//gAR//pAEj/6QBJ/+MASv/nAEv//QAqAAf/9gAI//sACf/sAAr/9wAL/+wADP/7AA7/+gAP//EAEP/2ABH/7AAS//EAE//2ABT/9gAV/+QAFwABADH/8QAy/+kAM//3ADT/6QA1//kANv/5ADf/+QA4/+8AOf/6ADr//gA7/+8APP/7AD3/+gA+//oAP//4AED/7wBB//sAQv/rAEP//QBE/+8ARf/3AEb/+gBH/+4ASP/rAEn/4QBK/+wAS//5ACsAB//xAAj/4gAJ/9gACv/sAAv/2AAM//YADf/iAA7/8QAP/90AEP/iABH/0wAS/+IAE//JABT/4gAV/94AJP/7ADH/3QAy/7QAM//pADT/4QA1/+wANv/vADf/6gA4/+IAOf/qADr/+gA7/9oAPP/pAD3/6wA+/+wAP//pAED/4QBB/+sAQv/cAEP/6wBE/+IARf/JAEb/7gBH/7wASP/BAEn/pgBK/7UAS//kACwAB//iAAj/5wAJ/+IACv/OAAv/2AAM/+cADf/nAA7/8AAP/90AEP+6ABH/xAAS/9cAE//XABT/2AAV/9gAG//3ACT/+wAx/+IAMv+gADP/6QA0/+MANf/mADb/7wA3/+sAOP/aADn/6AA6//YAO/+xADz/6wA9/+4APv/oAD//7wBA/9oAQf/oAEL/1wBD/+MARP/aAEX/2ABG/+cAR//PAEj/yQBJ/7kASv/BAEv/6AApAAf/8QAI/+wACf/OAAr/6gAL/84ADP/nAA3/2AAO//YAD//fABD/4gAR/9gAEv/lABP/5wAU/+IAFf/YADH/4gAy/+cAM//3ADT/2gA1//gANv/5ADf/+wA4/9wAOf/3ADr//gA7/+MAPP/3AD3//QA+//cAP//3AED/1QBC/9UAQ//9AET/6QBF/+EARv/pAEf/ugBI/8QASf/aAEr/wgBL//sAKwAH/8kACP/YAAn/xAAK/9MAC/+/AAz/yQAN/9gADv/nAA//xAAQ/7oAEf+1ABL/wQAT/9gAFP+6ABX/vwAk//sAMf+/ADL/2gAz/+gANP/KADX/6QA2/+kAN//oADj/xgA5/+QAOv/nADv/uQA8/+wAPf/uAD7/6QA//+cAQP/GAEH/7ABC/8kAQ//mAET/2ABF/84ARv/VAEf/wQBI/7wASf/GAEr/tABL/+8AKwAH//EACP/2AAn/yQAK/+oAC//TAAz/3QAN/+cADv/sAA//4gAQ/+IAEf/YABL/3wAT/90AFP/dABX/2AAk//sAMf/nADL/xgAz//MANP/iADX/7wA2/+4AN//3ADj/4wA5/+kAOv/vADv/1wA8/+4APf/zAD7/6gA//+0AQP/kAEH/9wBC/98AQ//qAET/5wBF/9AARv/vAEf/yQBI/9AASf/PAEr/xABL/+8AKQAH/+cACP/sAAn/5wAK/+kAC//dAAz/2AAO/+wAD//XABD/qwAR/8kAEv/AABP/9gAU/9MAFf/OADH/2AAy/7AAM//5ADT/2gA1//0ANv/6ADf//gA4/98AOf/3ADr//QA7/8YAPP/7AD3//gA+//gAP//4AED/1QBB//0AQv/VAEP/+ABE/+MARf/zAEb/+QBH/+4ASP/zAEn/4gBK/+cAS//zACkACP/2AAn/5wAK//QAC//sAAz/+wAN//4ADv/2AA//5QAQ/+wAEf/nABL/8wAT//EAFP/nABX/3QAx/+QAMv/KADP/+QA0/+wANf/6ADb/+gA3//sAOP/vADn/+gA6AAAAO//hADz//wA9//0APv/5AD///gBA/+wAQf/7AEL/7ABD//sARP/vAEX/9wBG//sAR//zAEj/6gBJ/+EASv/jAEv/+wArAAf/zgAI/84ACf/YAAr/ygAL/9gADP/JAA3/+wAO/9kAD//JABD/ogAR/7oAEv+5ABP/5wAU/8QAFf+9ACT/+wAx/7oAMv+FADP/+wA0/7sANf/qADb/6wA3/+wAOP++ADn/5gA6/+8AO/+iADz/6AA9/+oAPv/sAD//7wBA/8MAQf/mAEL/uwBD/+YARP/KAEX/6QBG/+8AR//jAEj/3wBJ/9MASv/hAEv/6wApAAf/zgAI/84ACf/TAAv/2AAM/84ADv/eAA//xAAQ/7AAEf/TABL/sQAT/+wAFP/FABX/yQAk//sAMf/JADL/lQAz//MANP/BADX/+QA2//MAN//3ADj/xgA5//sAOv/3ADv/pQA8/+8APf/+AD7/7gA//+oAQP/DAEH/7gBC/8QAQ//vAET/0ABF/+4ARv/uAEf/6QBI/+QASf/aAEr/5gBL//cAKgAH/8QACP/OAAn/pgAL/7oADP+rAA3/3QAO/+cAD/+5ABD/twAR/8QAEv+zABP/0wAU/7AAFf+cACT/+wAx/6EAMv/aADP/4wA0/7cANf/4ADb/4wA3//0AOP+3ADn/7gA6/+8AO/+7ADz/7gA9//EAPv/jAD//6ABA/7oAQf/zAEL/uQBD/+sARP/OAEX/3wBG/+EAR//aAEj/2ABJ/9gASv/MAEv/7gAsAAf/yQAI/84ACf/JAAr/wgAL/8kADP/JAA3//gAO/8kAD/+6ABD/jQAR/7oAEv+gABP/4gAU/7UAFf+6AB7/8QAk//sAMf+1ADL/lwAz/+8ANP+7ADX/5gA2/+4AN//uADj/uQA5/+gAOv/3ADv/hAA8/+8APf/sAD7/7AA//+oAQP+6AEH/7ABC/7kAQ//pAET/ygBF/+8ARv/vAEf/6ABI/+kASf/fAEr/5ABL//EAJgAH//YACf/iAAr/7AAL/+cADP/iAA3//wAO//UAD//nABD/7AAR/+IAEv/gABP/7AAU/90AFf/TADH/4gAy/+sAM//+ADT/6AA1//4ANgAEADf//wA4/9wAOf/6ADv/5gA8//8APf//AD///QBA/+MAQf//AEMAAABE/+8ARf/4AEb/+wBH//cASP/rAEn/6QBK/+kAS//9AAIAAQAGAEsAAAAAAAAAAQAAAADUGBYRAAAAANmXsTQAAAAA2ZexNA==\";\n","/**\n * Functions for creating SVGs and SVG elements.\n */\n\nimport { createElement, createElementNS } from \"../../util/crossplatform\";\nimport { generate } from \"../../util/guid\";\n\nexport const svgElem = (type: string): SVGElement => {\n    return createElementNS(\"http://www.w3.org/2000/svg\", type) as SVGElement;\n};\n\nexport const svgRect = (height: number, width: number): SVGElement => {\n    const el = svgElem(\"rect\");\n    el.setAttribute(\"height\", `${height}`);\n    el.setAttribute(\"width\", `${width}`);\n    return el;\n};\n\nexport const svgRoot = (): SVGElement => {\n    const el = svgElem(\"svg\");\n    el.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n    el.setAttribute(\"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n    el.setAttribute(\"version\", \"1.1\");\n    return el;\n};\n\nexport const svgUse = (link: string): SVGElement => {\n    const el = svgElem(\"use\");\n    el.setAttribute(\"xlink:href\", link); // For environments where plain href is not supported.\n    el.setAttribute(\"href\", link); // For environments where xlink:href is deprecated.\n    return el;\n};\n\n// Create SVG with height and width of supplied SVG string.\nexport function initSvgFromBackground(img: string): [SVGElement | null, number, number] {\n    const svg = svgRoot();\n\n    // Get dimensions\n    const matches = /viewBox=\"0 0 (.+?) (.+?)\"/.exec(img) || [\"0\", \"0\"];\n    const bgWidth = parseFloat(matches[1]);\n    const bgHeight = parseFloat(matches[2]);\n\n    svg.setAttribute(\"height\", `${bgHeight}`);\n    svg.setAttribute(\"width\", `${bgWidth}`);\n    return [svg, bgHeight, bgWidth];\n}\n\n// Create SVG with supplied height and width.\nexport function initSvgFromDimensions(bgHeight: number, bgWidth: number): SVGElement {\n    const svg = svgRoot();\n    svg.setAttribute(\"height\", `${bgHeight}`);\n    svg.setAttribute(\"width\", `${bgWidth}`);\n    return svg;\n}\n\n// Add a definition by setting innerHTML to defText.\nexport const addDef = (defs: SVGElement, defText: string, id: string) => {\n    const elem = svgElem(\"g\");\n    defs.appendChild(elem);\n    elem.setAttribute(\"id\", id);\n    elem.innerHTML = defText;\n};\n\n// Add background image to SVG.\nexport function addBackground(svg: SVGElement, defs: SVGElement, backgroundImg: string) {\n    const uuid = generate();\n    addDef(defs, backgroundImg, `bgdef-${uuid}`);\n    svg.appendChild(svgUse(`#bgdef-${uuid}`));\n}\n\n// Definition for drop shadow.\nexport const dropShadow = (dx: number, dy: number, blur: number, id: string): HTMLElement => {\n    const shadow = createElement(\"filter\");\n    shadow.setAttribute(\"id\", id);\n    shadow.setAttribute(\"height\", \"200%\");\n    shadow.setAttribute(\"width\", \"200%\");\n    shadow.setAttribute(\"x\", \"-50%\");\n    shadow.setAttribute(\"y\", \"-50%\");\n\n    const feOffset = createElement(\"feOffset\");\n    shadow.appendChild(feOffset);\n    feOffset.setAttribute(\"result\", \"offOut\");\n    feOffset.setAttribute(\"in\", \"SourceAlpha\");\n    feOffset.setAttribute(\"dx\", `${dx}`);\n    feOffset.setAttribute(\"dy\", `${dy}`);\n\n    const feGaussianBlur = createElement(\"feGaussianBlur\");\n    shadow.appendChild(feGaussianBlur);\n    feGaussianBlur.setAttribute(\"result\", \"blurOut\");\n    feGaussianBlur.setAttribute(\"in\", \"offOut\");\n    feGaussianBlur.setAttribute(\"stdDeviation\", `${blur}`);\n\n    const feBlend = createElement(\"feBlend\");\n    shadow.appendChild(feBlend);\n    feBlend.setAttribute(\"in\", \"SourceGraphic\");\n    feBlend.setAttribute(\"in2\", \"blurOut\");\n    feBlend.setAttribute(\"mode\", \"normal\");\n\n    return shadow;\n};\n","/**\n * Functions for modifying SVGs and SVG elements.\n */\n\nimport { BBox } from \"svg-path-bbox\";\n\n/**\n * The innerHTML/outerHTML properties of an element does not respect case.\n * This function restores case to case-sensitive elements.\n */\nexport const fixCase = (svg: string): string => {\n    let str = svg;\n    str = str.replace(/feoffset/gi, \"feOffset\");\n    str = str.replace(/fegaussianblur/gi, \"feGaussianBlur\");\n    str = str.replace(/feblend/gi, \"feBlend\");\n    str = str.replace(/lineargradient/gi, \"linearGradient\");\n    str = str.replace(/stddeviation/gi, \"stdDeviation\");\n    return str;\n};\n\n// Translate and scale the group containing the text.\nexport function transformTextEnclosure(\n    textEnclosure: SVGElement,\n    textBbox: BBox,\n    boundsHeight: number,\n    boundsWidth: number,\n    heightPaddingFactor?: number,\n    widthPaddingFactor?: number,\n) {\n    const heightPadFactor = heightPaddingFactor || 1;\n    const widthPadFactor = widthPaddingFactor || 1;\n\n    const textRect = {\n        x: textBbox[0],\n        y: textBbox[1],\n        width: textBbox[2] - textBbox[0],\n        height: textBbox[3] - textBbox[1],\n    };\n    if (textRect.width <= 0) {\n        return;\n    }\n    const scaleFactor = boundsScaleFactor(\n        textRect.height,\n        textRect.width,\n        boundsHeight * heightPadFactor,\n        boundsWidth * widthPadFactor,\n    );\n    const shiftLeft = (boundsWidth - scaleFactor * textRect.width) / 2 - scaleFactor * textRect.x;\n    const shiftTop = (boundsHeight - scaleFactor * textRect.height) / 2 - scaleFactor * textRect.y;\n    textEnclosure.setAttribute(\"transform\", `translate(${shiftLeft} ${shiftTop}) scale(${scaleFactor} ${scaleFactor})`);\n}\n\n// Factor to multiply text dimensions by to scale it to the supplied bounds.\nfunction boundsScaleFactor(textRectHeight: number, textRectWidth: number, boundsHeight: number, boundsWidth: number) {\n    const heightRatio = boundsHeight / textRectHeight;\n    const widthRatio = boundsWidth / textRectWidth;\n    if (heightRatio > 1 && widthRatio > 1) {\n        // Text smaller than bounds.\n        return Math.min(heightRatio, widthRatio);\n    } else if (heightRatio > 1 && widthRatio < 1) {\n        // Text shorter but wider than bounds.\n        return widthRatio;\n    } else if (heightRatio < 1 && widthRatio > 1) {\n        // Text narrower but taller than bounds.\n        return heightRatio;\n    }\n    return Math.min(heightRatio, widthRatio); // Text larger than bounds.\n}\n","import { ParseError } from \"../../util/exception\";\n\ntype Coords = number[];\n\n// A function from [x, y] to [x', y'].\ntype Transformer = (coords: Coords) => Coords;\n\ninterface Path {\n    pathElement: SVGPathElement;\n    pathData: Segment[];\n}\n\ninterface Segment {\n    type: string;\n    relative: boolean;\n    // Plus any data stuck in for the segment.\n}\n\nconst segmentSchemas: { [key: string]: string[] } = {\n    m: [\"x\", \"y\"],\n    z: [],\n    l: [\"x\", \"y\"],\n    h: [\"x\"],\n    v: [\"y\"],\n    c: [\"x1\", \"y1\", \"x2\", \"y2\", \"x\", \"y\"],\n    s: [\"x2\", \"y2\", \"x\", \"y\"],\n    q: [\"x1\", \"y1\", \"x\", \"y\"],\n    t: [\"x\", \"y\"],\n    a: [\"rx\", \"ry\", \"xRotation\", \"largeArc\", \"sweep\", \"x\", \"y\"],\n};\n\n// An object that warps an SVG element.\n// Based on Warp.js.\nexport class Warp {\n    private paths: Path[];\n\n    constructor(elem: SVGElement) {\n        const pathElements = Array.from(elem.querySelectorAll(\"path\"));\n        this.paths = pathElements.map((pathElement: SVGPathElement) => {\n            const pathString = pathElement.getAttribute(\"d\") || \"\";\n            const pathData: Segment[] = this.parsePath(pathString);\n            return { pathElement, pathData };\n        });\n    }\n\n    transform(transformer: Transformer): void {\n        for (const path of this.paths) {\n            path.pathData = this.runTransformer(path.pathData, transformer);\n        }\n        this.update();\n    }\n\n    private encodePath(pathData: Segment[]): string {\n        let prevType = \"\";\n        const magnitude = 10 ** 2;\n        const callback = (segment: Segment) => {\n            const output: string[] = [];\n            const outputType = segment.relative ? segment.type : segment.type.toUpperCase();\n            let first = prevType !== outputType;\n            const schema: string[] = segmentSchemas[segment.type];\n            if (first) {\n                output.push(outputType);\n                prevType = outputType;\n            }\n            for (const property of schema) {\n                const value = (segment as any)[property];\n                let outputValue;\n                switch (typeof value) {\n                    case \"boolean\":\n                        {\n                            outputValue = (value as any) | 0;\n                        }\n                        break;\n                    case \"number\":\n                        {\n                            outputValue = ((value * magnitude) | 0) / magnitude;\n                        }\n                        break;\n                    default:\n                        throw new ParseError(\"Failed to encode path.\");\n                }\n                if (!first) {\n                    output.push(\" \");\n                }\n                output.push(outputValue);\n                first = false;\n            }\n            return output.join(\"\");\n        };\n        return pathData.map(callback).join(\"\");\n    }\n\n    private parsePath(pathString: string): Segment[] {\n        const segmentExpr = /([mzlhvcsqta])([^mzlhvcsqta]*)/gi;\n        const numberExpr = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi;\n\n        const pathData: { type; relative }[] = [];\n        let segmentMatch;\n        segmentExpr.lastIndex = 0;\n\n        while ((segmentMatch = segmentExpr.exec(pathString))) {\n            const type = segmentMatch[1].toLowerCase();\n            const numbers = (segmentMatch[2].match(numberExpr) || []).map(parseFloat);\n            const relative = type === segmentMatch[1];\n            const schema: string[] = segmentSchemas[type];\n            if (numbers.length < schema.length) {\n                throw new ParseError(\n                    `Path type \"${type}\" given ${numbers.length} arguments, expected ${schema.length}.`,\n                );\n            }\n            if (schema.length > 0) {\n                if (numbers.length % schema.length !== 0) {\n                    throw new ParseError(\n                        `Path type \"${type}\" given ${numbers.length} arguments, not divisible by ${schema.length}`,\n                    );\n                }\n                for (let i = 0; i < numbers.length / schema.length; i++) {\n                    const segmentData = { type, relative };\n                    for (let j = 0; j < schema.length; j++) {\n                        (segmentData as any)[schema[j]] = numbers[i * schema.length + j];\n                    }\n                    pathData.push(segmentData);\n                }\n            } else {\n                pathData.push({ type, relative });\n            }\n        }\n\n        return pathData;\n    }\n\n    private runTransformer(path: any, transformer: Transformer): any {\n        const pointGroups = [\n            [\"x1\", \"y1\"],\n            [\"x2\", \"y2\"],\n            [\"x\", \"y\"],\n        ];\n\n        const callback = (segment: Segment) => {\n            for (let i = 0; i < pointGroups.length; i++) {\n                const [x, y]: string[] = pointGroups[i];\n                if (x in segment && y in segment) {\n                    const oldPoints: Coords = [(segment as any)[x], (segment as any)[y]];\n                    const newPoints = transformer(oldPoints);\n                    if (newPoints.length < 2) {\n                        throw new ParseError(\"Transformer must return at least 2 points.\");\n                    }\n                    (segment as any)[x] = newPoints[0];\n                    (segment as any)[y] = newPoints[1];\n                }\n            }\n            return segment;\n        };\n\n        return this.transformPath(path, callback as any);\n    }\n\n    private transformPath(path: any, transformer: Transformer): any {\n        const newPath: number[] = [];\n        for (let i = 0; i < path.length; i++) {\n            const segment = JSON.parse(JSON.stringify(path[i]));\n            const result: Coords = transformer(segment);\n            if (Array.isArray(result)) {\n                newPath.push(...result);\n            } else if (result) {\n                newPath.push(result);\n            }\n        }\n        return newPath;\n    }\n\n    private update(): void {\n        for (const { pathElement, pathData } of this.paths) {\n            const pathString = this.encodePath(pathData);\n            pathElement.setAttribute(\"d\", pathString);\n        }\n    }\n}\n","'use strict';\n\n\nvar paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 };\n\nvar SPECIAL_SPACES = [\n  0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n  0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF\n];\n\nfunction isSpace(ch) {\n  return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029) || // Line terminators\n    // White spaces\n    (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n    (ch >= 0x1680 && SPECIAL_SPACES.indexOf(ch) >= 0);\n}\n\nfunction isCommand(code) {\n  /*eslint-disable no-bitwise*/\n  switch (code | 0x20) {\n    case 0x6D/* m */:\n    case 0x7A/* z */:\n    case 0x6C/* l */:\n    case 0x68/* h */:\n    case 0x76/* v */:\n    case 0x63/* c */:\n    case 0x73/* s */:\n    case 0x71/* q */:\n    case 0x74/* t */:\n    case 0x61/* a */:\n    case 0x72/* r */:\n      return true;\n  }\n  return false;\n}\n\nfunction isArc(code) {\n  return (code | 0x20) === 0x61;\n}\n\nfunction isDigit(code) {\n  return (code >= 48 && code <= 57);   // 0..9\n}\n\nfunction isDigitStart(code) {\n  return (code >= 48 && code <= 57) || /* 0..9 */\n          code === 0x2B || /* + */\n          code === 0x2D || /* - */\n          code === 0x2E;   /* . */\n}\n\n\nfunction State(path) {\n  this.index  = 0;\n  this.path   = path;\n  this.max    = path.length;\n  this.result = [];\n  this.param  = 0.0;\n  this.err    = '';\n  this.segmentStart = 0;\n  this.data   = [];\n}\n\nfunction skipSpaces(state) {\n  while (state.index < state.max && isSpace(state.path.charCodeAt(state.index))) {\n    state.index++;\n  }\n}\n\n\nfunction scanFlag(state) {\n  var ch = state.path.charCodeAt(state.index);\n\n  if (ch === 0x30/* 0 */) {\n    state.param = 0;\n    state.index++;\n    return;\n  }\n\n  if (ch === 0x31/* 1 */) {\n    state.param = 1;\n    state.index++;\n    return;\n  }\n\n  state.err = 'SvgPath: arc flag can be 0 or 1 only (at pos ' + state.index + ')';\n}\n\n\nfunction scanParam(state) {\n  var start = state.index,\n      index = start,\n      max = state.max,\n      zeroFirst = false,\n      hasCeiling = false,\n      hasDecimal = false,\n      hasDot = false,\n      ch;\n\n  if (index >= max) {\n    state.err = 'SvgPath: missed param (at pos ' + index + ')';\n    return;\n  }\n  ch = state.path.charCodeAt(index);\n\n  if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n    index++;\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  // This logic is shamelessly borrowed from Esprima\n  // https://github.com/ariya/esprimas\n  //\n  if (!isDigit(ch) && ch !== 0x2E/* . */) {\n    state.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n    return;\n  }\n\n  if (ch !== 0x2E/* . */) {\n    zeroFirst = (ch === 0x30/* 0 */);\n    index++;\n\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n\n    if (zeroFirst && index < max) {\n      // decimal number starts with '0' such as '09' is illegal.\n      if (ch && isDigit(ch)) {\n        state.err = 'SvgPath: numbers started with `0` such as `09` are illegal (at pos ' + start + ')';\n        return;\n      }\n    }\n\n    while (index < max && isDigit(state.path.charCodeAt(index))) {\n      index++;\n      hasCeiling = true;\n    }\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  if (ch === 0x2E/* . */) {\n    hasDot = true;\n    index++;\n    while (isDigit(state.path.charCodeAt(index))) {\n      index++;\n      hasDecimal = true;\n    }\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n  }\n\n  if (ch === 0x65/* e */ || ch === 0x45/* E */) {\n    if (hasDot && !hasCeiling && !hasDecimal) {\n      state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n      return;\n    }\n\n    index++;\n\n    ch = (index < max) ? state.path.charCodeAt(index) : 0;\n    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n      index++;\n    }\n    if (index < max && isDigit(state.path.charCodeAt(index))) {\n      while (index < max && isDigit(state.path.charCodeAt(index))) {\n        index++;\n      }\n    } else {\n      state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n      return;\n    }\n  }\n\n  state.index = index;\n  state.param = parseFloat(state.path.slice(start, index)) + 0.0;\n}\n\n\nfunction finalizeSegment(state) {\n  var cmd, cmdLC;\n\n  // Process duplicated commands (without comand name)\n\n  // This logic is shamelessly borrowed from Raphael\n  // https://github.com/DmitryBaranovskiy/raphael/\n  //\n  cmd   = state.path[state.segmentStart];\n  cmdLC = cmd.toLowerCase();\n\n  var params = state.data;\n\n  if (cmdLC === 'm' && params.length > 2) {\n    state.result.push([ cmd, params[0], params[1] ]);\n    params = params.slice(2);\n    cmdLC = 'l';\n    cmd = (cmd === 'm') ? 'l' : 'L';\n  }\n\n  if (cmdLC === 'r') {\n    state.result.push([ cmd ].concat(params));\n  } else {\n\n    while (params.length >= paramCounts[cmdLC]) {\n      state.result.push([ cmd ].concat(params.splice(0, paramCounts[cmdLC])));\n      if (!paramCounts[cmdLC]) {\n        break;\n      }\n    }\n  }\n}\n\n\nfunction scanSegment(state) {\n  var max = state.max,\n      cmdCode, is_arc, comma_found, need_params, i;\n\n  state.segmentStart = state.index;\n  cmdCode = state.path.charCodeAt(state.index);\n  is_arc = isArc(cmdCode);\n\n  if (!isCommand(cmdCode)) {\n    state.err = 'SvgPath: bad command ' + state.path[state.index] + ' (at pos ' + state.index + ')';\n    return;\n  }\n\n  need_params = paramCounts[state.path[state.index].toLowerCase()];\n\n  state.index++;\n  skipSpaces(state);\n\n  state.data = [];\n\n  if (!need_params) {\n    // Z\n    finalizeSegment(state);\n    return;\n  }\n\n  comma_found = false;\n\n  for (;;) {\n    for (i = need_params; i > 0; i--) {\n      if (is_arc && (i === 3 || i === 4)) scanFlag(state);\n      else scanParam(state);\n\n      if (state.err.length) {\n        finalizeSegment(state);\n        return;\n      }\n      state.data.push(state.param);\n\n      skipSpaces(state);\n      comma_found = false;\n\n      if (state.index < max && state.path.charCodeAt(state.index) === 0x2C/* , */) {\n        state.index++;\n        skipSpaces(state);\n        comma_found = true;\n      }\n    }\n\n    // after ',' param is mandatory\n    if (comma_found) {\n      continue;\n    }\n\n    if (state.index >= state.max) {\n      break;\n    }\n\n    // Stop on next segment\n    if (!isDigitStart(state.path.charCodeAt(state.index))) {\n      break;\n    }\n  }\n\n  finalizeSegment(state);\n}\n\n\n/* Returns array of segments:\n *\n * [\n *   [ command, coord1, coord2, ... ]\n * ]\n */\nmodule.exports = function pathParse(svgPath) {\n  var state = new State(svgPath);\n  var max = state.max;\n\n  skipSpaces(state);\n\n  while (state.index < max && !state.err.length) {\n    scanSegment(state);\n  }\n\n  if (state.result.length) {\n    if ('mM'.indexOf(state.result[0][0]) < 0) {\n      state.err = 'SvgPath: string should start with `M` or `m`';\n      state.result = [];\n    } else {\n      state.result[0][0] = 'M';\n    }\n  }\n\n  return {\n    err: state.err,\n    segments: state.result\n  };\n};\n","'use strict';\n\n// combine 2 matrixes\n// m1, m2 - [a, b, c, d, e, g]\n//\nfunction combine(m1, m2) {\n  return [\n    m1[0] * m2[0] + m1[2] * m2[1],\n    m1[1] * m2[0] + m1[3] * m2[1],\n    m1[0] * m2[2] + m1[2] * m2[3],\n    m1[1] * m2[2] + m1[3] * m2[3],\n    m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n    m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n  ];\n}\n\n\nfunction Matrix() {\n  if (!(this instanceof Matrix)) { return new Matrix(); }\n  this.queue = [];   // list of matrixes to apply\n  this.cache = null; // combined matrix cache\n}\n\n\nMatrix.prototype.matrix = function (m) {\n  if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {\n    return this;\n  }\n  this.cache = null;\n  this.queue.push(m);\n  return this;\n};\n\n\nMatrix.prototype.translate = function (tx, ty) {\n  if (tx !== 0 || ty !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, 0, 0, 1, tx, ty ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.scale = function (sx, sy) {\n  if (sx !== 1 || sy !== 1) {\n    this.cache = null;\n    this.queue.push([ sx, 0, 0, sy, 0, 0 ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.rotate = function (angle, rx, ry) {\n  var rad, cos, sin;\n\n  if (angle !== 0) {\n    this.translate(rx, ry);\n\n    rad = angle * Math.PI / 180;\n    cos = Math.cos(rad);\n    sin = Math.sin(rad);\n\n    this.queue.push([ cos, sin, -sin, cos, 0, 0 ]);\n    this.cache = null;\n\n    this.translate(-rx, -ry);\n  }\n  return this;\n};\n\n\nMatrix.prototype.skewX = function (angle) {\n  if (angle !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, 0, Math.tan(angle * Math.PI / 180), 1, 0, 0 ]);\n  }\n  return this;\n};\n\n\nMatrix.prototype.skewY = function (angle) {\n  if (angle !== 0) {\n    this.cache = null;\n    this.queue.push([ 1, Math.tan(angle * Math.PI / 180), 0, 1, 0, 0 ]);\n  }\n  return this;\n};\n\n\n// Flatten queue\n//\nMatrix.prototype.toArray = function () {\n  if (this.cache) {\n    return this.cache;\n  }\n\n  if (!this.queue.length) {\n    this.cache = [ 1, 0, 0, 1, 0, 0 ];\n    return this.cache;\n  }\n\n  this.cache = this.queue[0];\n\n  if (this.queue.length === 1) {\n    return this.cache;\n  }\n\n  for (var i = 1; i < this.queue.length; i++) {\n    this.cache = combine(this.cache, this.queue[i]);\n  }\n\n  return this.cache;\n};\n\n\n// Apply list of matrixes to (x,y) point.\n// If `isRelative` set, `translate` component of matrix will be skipped\n//\nMatrix.prototype.calc = function (x, y, isRelative) {\n  var m;\n\n  // Don't change point on empty transforms queue\n  if (!this.queue.length) { return [ x, y ]; }\n\n  // Calculate final matrix, if not exists\n  //\n  // NB. if you deside to apply transforms to point one-by-one,\n  // they should be taken in reverse order\n\n  if (!this.cache) {\n    this.cache = this.toArray();\n  }\n\n  m = this.cache;\n\n  // Apply matrix to point\n  return [\n    x * m[0] + y * m[2] + (isRelative ? 0 : m[4]),\n    x * m[1] + y * m[3] + (isRelative ? 0 : m[5])\n  ];\n};\n\n\nmodule.exports = Matrix;\n","'use strict';\n\n\nvar Matrix = require('./matrix');\n\nvar operations = {\n  matrix: true,\n  scale: true,\n  rotate: true,\n  translate: true,\n  skewX: true,\n  skewY: true\n};\n\nvar CMD_SPLIT_RE    = /\\s*(matrix|translate|scale|rotate|skewX|skewY)\\s*\\(\\s*(.+?)\\s*\\)[\\s,]*/;\nvar PARAMS_SPLIT_RE = /[\\s,]+/;\n\n\nmodule.exports = function transformParse(transformString) {\n  var matrix = new Matrix();\n  var cmd, params;\n\n  // Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate',  '-45', '']\n  transformString.split(CMD_SPLIT_RE).forEach(function (item) {\n\n    // Skip empty elements\n    if (!item.length) { return; }\n\n    // remember operation\n    if (typeof operations[item] !== 'undefined') {\n      cmd = item;\n      return;\n    }\n\n    // extract params & att operation to matrix\n    params = item.split(PARAMS_SPLIT_RE).map(function (i) {\n      return +i || 0;\n    });\n\n    // If params count is not correct - ignore command\n    switch (cmd) {\n      case 'matrix':\n        if (params.length === 6) {\n          matrix.matrix(params);\n        }\n        return;\n\n      case 'scale':\n        if (params.length === 1) {\n          matrix.scale(params[0], params[0]);\n        } else if (params.length === 2) {\n          matrix.scale(params[0], params[1]);\n        }\n        return;\n\n      case 'rotate':\n        if (params.length === 1) {\n          matrix.rotate(params[0], 0, 0);\n        } else if (params.length === 3) {\n          matrix.rotate(params[0], params[1], params[2]);\n        }\n        return;\n\n      case 'translate':\n        if (params.length === 1) {\n          matrix.translate(params[0], 0);\n        } else if (params.length === 2) {\n          matrix.translate(params[0], params[1]);\n        }\n        return;\n\n      case 'skewX':\n        if (params.length === 1) {\n          matrix.skewX(params[0]);\n        }\n        return;\n\n      case 'skewY':\n        if (params.length === 1) {\n          matrix.skewY(params[0]);\n        }\n        return;\n    }\n  });\n\n  return matrix;\n};\n","// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n  var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n  var dot  = ux * vx + uy * vy;\n\n  // Add this to work with arbitrary vectors:\n  // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n  // rounding errors, e.g. -1.0000000000000002 can screw up this\n  if (dot >  1.0) { dot =  1.0; }\n  if (dot < -1.0) { dot = -1.0; }\n\n  return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n  // Step 1.\n  //\n  // Moving an ellipse so origin will be the middlepoint between our two\n  // points. After that, rotate it to line up ellipse axes with coordinate\n  // axes.\n  //\n  var x1p =  cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n  var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n  var rx_sq  =  rx * rx;\n  var ry_sq  =  ry * ry;\n  var x1p_sq = x1p * x1p;\n  var y1p_sq = y1p * y1p;\n\n  // Step 2.\n  //\n  // Compute coordinates of the centre of this ellipse (cx', cy')\n  // in the new coordinate system.\n  //\n  var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n  if (radicant < 0) {\n    // due to rounding errors it might be e.g. -1.3877787807814457e-17\n    radicant = 0;\n  }\n\n  radicant /=   (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n  radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n  var cxp = radicant *  rx/ry * y1p;\n  var cyp = radicant * -ry/rx * x1p;\n\n  // Step 3.\n  //\n  // Transform back to get centre coordinates (cx, cy) in the original\n  // coordinate system.\n  //\n  var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n  var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n  // Step 4.\n  //\n  // Compute angles (theta1, delta_theta).\n  //\n  var v1x =  (x1p - cxp) / rx;\n  var v1y =  (y1p - cyp) / ry;\n  var v2x = (-x1p - cxp) / rx;\n  var v2y = (-y1p - cyp) / ry;\n\n  var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n  var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n  if (fs === 0 && delta_theta > 0) {\n    delta_theta -= TAU;\n  }\n  if (fs === 1 && delta_theta < 0) {\n    delta_theta += TAU;\n  }\n\n  return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n  var alpha = 4/3 * Math.tan(delta_theta/4);\n\n  var x1 = Math.cos(theta1);\n  var y1 = Math.sin(theta1);\n  var x2 = Math.cos(theta1 + delta_theta);\n  var y2 = Math.sin(theta1 + delta_theta);\n\n  return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nmodule.exports = function a2c(x1, y1, x2, y2, fa, fs, rx, ry, phi) {\n  var sin_phi = Math.sin(phi * TAU / 360);\n  var cos_phi = Math.cos(phi * TAU / 360);\n\n  // Make sure radii are valid\n  //\n  var x1p =  cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n  var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n  if (x1p === 0 && y1p === 0) {\n    // we're asked to draw line to itself\n    return [];\n  }\n\n  if (rx === 0 || ry === 0) {\n    // one of the radii is zero\n    return [];\n  }\n\n\n  // Compensate out-of-range radii\n  //\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n\n  var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n  if (lambda > 1) {\n    rx *= Math.sqrt(lambda);\n    ry *= Math.sqrt(lambda);\n  }\n\n\n  // Get center parameters (cx, cy, theta1, delta_theta)\n  //\n  var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n  var result = [];\n  var theta1 = cc[2];\n  var delta_theta = cc[3];\n\n  // Split an arc to multiple segments, so each segment\n  // will be less than τ/4 (= 90°)\n  //\n  var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n  delta_theta /= segments;\n\n  for (var i = 0; i < segments; i++) {\n    result.push(approximate_unit_arc(theta1, delta_theta));\n    theta1 += delta_theta;\n  }\n\n  // We have a bezier approximation of a unit circle,\n  // now need to transform back to the original ellipse\n  //\n  return result.map(function (curve) {\n    for (var i = 0; i < curve.length; i += 2) {\n      var x = curve[i + 0];\n      var y = curve[i + 1];\n\n      // scale\n      x *= rx;\n      y *= ry;\n\n      // rotate\n      var xp = cos_phi*x - sin_phi*y;\n      var yp = sin_phi*x + cos_phi*y;\n\n      // translate\n      curve[i + 0] = xp + cc[0];\n      curve[i + 1] = yp + cc[1];\n    }\n\n    return curve;\n  });\n};\n","'use strict';\n\n/* eslint-disable space-infix-ops */\n\n// The precision used to consider an ellipse as a circle\n//\nvar epsilon = 0.0000000001;\n\n// To convert degree in radians\n//\nvar torad = Math.PI / 180;\n\n// Class constructor :\n//  an ellipse centred at 0 with radii rx,ry and x - axis - angle ax.\n//\nfunction Ellipse(rx, ry, ax) {\n  if (!(this instanceof Ellipse)) { return new Ellipse(rx, ry, ax); }\n  this.rx = rx;\n  this.ry = ry;\n  this.ax = ax;\n}\n\n// Apply a linear transform m to the ellipse\n// m is an array representing a matrix :\n//    -         -\n//   | m[0] m[2] |\n//   | m[1] m[3] |\n//    -         -\n//\nEllipse.prototype.transform = function (m) {\n  // We consider the current ellipse as image of the unit circle\n  // by first scale(rx,ry) and then rotate(ax) ...\n  // So we apply ma =  m x rotate(ax) x scale(rx,ry) to the unit circle.\n  var c = Math.cos(this.ax * torad), s = Math.sin(this.ax * torad);\n  var ma = [\n    this.rx * (m[0]*c + m[2]*s),\n    this.rx * (m[1]*c + m[3]*s),\n    this.ry * (-m[0]*s + m[2]*c),\n    this.ry * (-m[1]*s + m[3]*c)\n  ];\n\n  // ma * transpose(ma) = [ J L ]\n  //                      [ L K ]\n  // L is calculated later (if the image is not a circle)\n  var J = ma[0]*ma[0] + ma[2]*ma[2],\n      K = ma[1]*ma[1] + ma[3]*ma[3];\n\n  // the discriminant of the characteristic polynomial of ma * transpose(ma)\n  var D = ((ma[0]-ma[3])*(ma[0]-ma[3]) + (ma[2]+ma[1])*(ma[2]+ma[1])) *\n          ((ma[0]+ma[3])*(ma[0]+ma[3]) + (ma[2]-ma[1])*(ma[2]-ma[1]));\n\n  // the \"mean eigenvalue\"\n  var JK = (J + K) / 2;\n\n  // check if the image is (almost) a circle\n  if (D < epsilon * JK) {\n    // if it is\n    this.rx = this.ry = Math.sqrt(JK);\n    this.ax = 0;\n    return this;\n  }\n\n  // if it is not a circle\n  var L = ma[0]*ma[1] + ma[2]*ma[3];\n\n  D = Math.sqrt(D);\n\n  // {l1,l2} = the two eigen values of ma * transpose(ma)\n  var l1 = JK + D/2,\n      l2 = JK - D/2;\n  // the x - axis - rotation angle is the argument of the l1 - eigenvector\n  /*eslint-disable indent*/\n  this.ax = (Math.abs(L) < epsilon && Math.abs(l1 - K) < epsilon) ?\n    90\n  :\n    Math.atan(Math.abs(L) > Math.abs(l1 - K) ?\n      (l1 - J) / L\n    :\n      L / (l1 - K)\n    ) * 180 / Math.PI;\n  /*eslint-enable indent*/\n\n  // if ax > 0 => rx = sqrt(l1), ry = sqrt(l2), else exchange axes and ax += 90\n  if (this.ax >= 0) {\n    // if ax in [0,90]\n    this.rx = Math.sqrt(l1);\n    this.ry = Math.sqrt(l2);\n  } else {\n    // if ax in ]-90,0[ => exchange axes\n    this.ax += 90;\n    this.rx = Math.sqrt(l2);\n    this.ry = Math.sqrt(l1);\n  }\n\n  return this;\n};\n\n// Check if the ellipse is (almost) degenerate, i.e. rx = 0 or ry = 0\n//\nEllipse.prototype.isDegenerate = function () {\n  return (this.rx < epsilon * this.ry || this.ry < epsilon * this.rx);\n};\n\nmodule.exports = Ellipse;\n","// SVG Path transformations library\n//\n// Usage:\n//\n//    SvgPath('...')\n//      .translate(-150, -100)\n//      .scale(0.5)\n//      .translate(-150, -100)\n//      .toFixed(1)\n//      .toString()\n//\n\n'use strict';\n\n\nvar pathParse      = require('./path_parse');\nvar transformParse = require('./transform_parse');\nvar matrix         = require('./matrix');\nvar a2c            = require('./a2c');\nvar ellipse        = require('./ellipse');\n\n\n// Class constructor\n//\nfunction SvgPath(path) {\n  if (!(this instanceof SvgPath)) { return new SvgPath(path); }\n\n  var pstate = pathParse(path);\n\n  // Array of path segments.\n  // Each segment is array [command, param1, param2, ...]\n  this.segments = pstate.segments;\n\n  // Error message on parse error.\n  this.err      = pstate.err;\n\n  // Transforms stack for lazy evaluation\n  this.__stack    = [];\n}\n\nSvgPath.from = function (src) {\n  if (typeof src === 'string') return new SvgPath(src);\n\n  if (src instanceof SvgPath) {\n    // Create empty object\n    var s = new SvgPath('');\n\n    // Clone properies\n    s.err = src.err;\n    s.segments = src.segments.map(function (sgm) { return sgm.slice(); });\n    s.__stack = src.__stack.map(function (m) {\n      return matrix().matrix(m.toArray());\n    });\n\n    return s;\n  }\n\n  throw new Error('SvgPath.from: invalid param type ' + src);\n};\n\n\nSvgPath.prototype.__matrix = function (m) {\n  var self = this, i;\n\n  // Quick leave for empty matrix\n  if (!m.queue.length) { return; }\n\n  this.iterate(function (s, index, x, y) {\n    var p, result, name, isRelative;\n\n    switch (s[0]) {\n\n      // Process 'assymetric' commands separately\n      case 'v':\n        p      = m.calc(0, s[1], true);\n        result = (p[0] === 0) ? [ 'v', p[1] ] : [ 'l', p[0], p[1] ];\n        break;\n\n      case 'V':\n        p      = m.calc(x, s[1], false);\n        result = (p[0] === m.calc(x, y, false)[0]) ? [ 'V', p[1] ] : [ 'L', p[0], p[1] ];\n        break;\n\n      case 'h':\n        p      = m.calc(s[1], 0, true);\n        result = (p[1] === 0) ? [ 'h', p[0] ] : [ 'l', p[0], p[1] ];\n        break;\n\n      case 'H':\n        p      = m.calc(s[1], y, false);\n        result = (p[1] === m.calc(x, y, false)[1]) ? [ 'H', p[0] ] : [ 'L', p[0], p[1] ];\n        break;\n\n      case 'a':\n      case 'A':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n\n        // Drop segment if arc is empty (end point === start point)\n        /*if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n            (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n          return [];\n        }*/\n\n        // Transform rx, ry and the x-axis-rotation\n        var ma = m.toArray();\n        var e = ellipse(s[1], s[2], s[3]).transform(ma);\n\n        // flip sweep-flag if matrix is not orientation-preserving\n        if (ma[0] * ma[3] - ma[1] * ma[2] < 0) {\n          s[5] = s[5] ? '0' : '1';\n        }\n\n        // Transform end point as usual (without translation for relative notation)\n        p = m.calc(s[6], s[7], s[0] === 'a');\n\n        // Empty arcs can be ignored by renderer, but should not be dropped\n        // to avoid collisions with `S A S` and so on. Replace with empty line.\n        if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n            (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n          result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n          break;\n        }\n\n        // if the resulting ellipse is (almost) a segment ...\n        if (e.isDegenerate()) {\n          // replace the arc by a line\n          result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n        } else {\n          // if it is a real ellipse\n          // s[0], s[4] and s[5] are not modified\n          result = [ s[0], e.rx, e.ry, e.ax, s[4], s[5], p[0], p[1] ];\n        }\n\n        break;\n\n      case 'm':\n        // Edge case. The very first `m` should be processed as absolute, if happens.\n        // Make sense for coord shift transforms.\n        isRelative = index > 0;\n\n        p = m.calc(s[1], s[2], isRelative);\n        result = [ 'm', p[0], p[1] ];\n        break;\n\n      default:\n        name       = s[0];\n        result     = [ name ];\n        isRelative = (name.toLowerCase() === name);\n\n        // Apply transformations to the segment\n        for (i = 1; i < s.length; i += 2) {\n          p = m.calc(s[i], s[i + 1], isRelative);\n          result.push(p[0], p[1]);\n        }\n    }\n\n    self.segments[index] = result;\n  }, true);\n};\n\n\n// Apply stacked commands\n//\nSvgPath.prototype.__evaluateStack = function () {\n  var m, i;\n\n  if (!this.__stack.length) { return; }\n\n  if (this.__stack.length === 1) {\n    this.__matrix(this.__stack[0]);\n    this.__stack = [];\n    return;\n  }\n\n  m = matrix();\n  i = this.__stack.length;\n\n  while (--i >= 0) {\n    m.matrix(this.__stack[i].toArray());\n  }\n\n  this.__matrix(m);\n  this.__stack = [];\n};\n\n\n// Convert processed SVG Path back to string\n//\nSvgPath.prototype.toString = function () {\n  var result = '', prevCmd = '', cmdSkipped = false;\n\n  this.__evaluateStack();\n\n  for (var i = 0, len = this.segments.length; i < len; i++) {\n    var segment = this.segments[i];\n    var cmd = segment[0];\n\n    // Command not repeating => store\n    if (cmd !== prevCmd || cmd === 'm' || cmd === 'M') {\n      // workaround for FontForge SVG importing bug, keep space between \"z m\".\n      if (cmd === 'm' && prevCmd === 'z') result += ' ';\n      result += cmd;\n\n      cmdSkipped = false;\n    } else {\n      cmdSkipped = true;\n    }\n\n    // Store segment params\n    for (var pos = 1; pos < segment.length; pos++) {\n      var val = segment[pos];\n      // Space can be skipped\n      // 1. After command (always)\n      // 2. For negative value (with '-' at start)\n      if (pos === 1) {\n        if (cmdSkipped && val >= 0) result += ' ';\n      } else if (val >= 0) result += ' ';\n\n      result += val;\n    }\n\n    prevCmd = cmd;\n  }\n\n  return result;\n};\n\n\n// Translate path to (x [, y])\n//\nSvgPath.prototype.translate = function (x, y) {\n  this.__stack.push(matrix().translate(x, y || 0));\n  return this;\n};\n\n\n// Scale path to (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.scale = function (sx, sy) {\n  this.__stack.push(matrix().scale(sx, (!sy && (sy !== 0)) ? sx : sy));\n  return this;\n};\n\n\n// Rotate path around point (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.rotate = function (angle, rx, ry) {\n  this.__stack.push(matrix().rotate(angle, rx || 0, ry || 0));\n  return this;\n};\n\n\n// Skew path along the X axis by `degrees` angle\n//\nSvgPath.prototype.skewX = function (degrees) {\n  this.__stack.push(matrix().skewX(degrees));\n  return this;\n};\n\n\n// Skew path along the Y axis by `degrees` angle\n//\nSvgPath.prototype.skewY = function (degrees) {\n  this.__stack.push(matrix().skewY(degrees));\n  return this;\n};\n\n\n// Apply matrix transform (array of 6 elements)\n//\nSvgPath.prototype.matrix = function (m) {\n  this.__stack.push(matrix().matrix(m));\n  return this;\n};\n\n\n// Transform path according to \"transform\" attr of SVG spec\n//\nSvgPath.prototype.transform = function (transformString) {\n  if (!transformString.trim()) {\n    return this;\n  }\n  this.__stack.push(transformParse(transformString));\n  return this;\n};\n\n\n// Round coords with given decimal precition.\n// 0 by default (to integers)\n//\nSvgPath.prototype.round = function (d) {\n  var contourStartDeltaX = 0, contourStartDeltaY = 0, deltaX = 0, deltaY = 0, l;\n\n  d = d || 0;\n\n  this.__evaluateStack();\n\n  this.segments.forEach(function (s) {\n    var isRelative = (s[0].toLowerCase() === s[0]);\n\n    switch (s[0]) {\n      case 'H':\n      case 'h':\n        if (isRelative) { s[1] += deltaX; }\n        deltaX = s[1] - s[1].toFixed(d);\n        s[1] = +s[1].toFixed(d);\n        return;\n\n      case 'V':\n      case 'v':\n        if (isRelative) { s[1] += deltaY; }\n        deltaY = s[1] - s[1].toFixed(d);\n        s[1] = +s[1].toFixed(d);\n        return;\n\n      case 'Z':\n      case 'z':\n        deltaX = contourStartDeltaX;\n        deltaY = contourStartDeltaY;\n        return;\n\n      case 'M':\n      case 'm':\n        if (isRelative) {\n          s[1] += deltaX;\n          s[2] += deltaY;\n        }\n\n        deltaX = s[1] - s[1].toFixed(d);\n        deltaY = s[2] - s[2].toFixed(d);\n\n        contourStartDeltaX = deltaX;\n        contourStartDeltaY = deltaY;\n\n        s[1] = +s[1].toFixed(d);\n        s[2] = +s[2].toFixed(d);\n        return;\n\n      case 'A':\n      case 'a':\n        // [cmd, rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        if (isRelative) {\n          s[6] += deltaX;\n          s[7] += deltaY;\n        }\n\n        deltaX = s[6] - s[6].toFixed(d);\n        deltaY = s[7] - s[7].toFixed(d);\n\n        s[1] = +s[1].toFixed(d);\n        s[2] = +s[2].toFixed(d);\n        s[3] = +s[3].toFixed(d + 2); // better precision for rotation\n        s[6] = +s[6].toFixed(d);\n        s[7] = +s[7].toFixed(d);\n        return;\n\n      default:\n        // a c l q s t\n        l = s.length;\n\n        if (isRelative) {\n          s[l - 2] += deltaX;\n          s[l - 1] += deltaY;\n        }\n\n        deltaX = s[l - 2] - s[l - 2].toFixed(d);\n        deltaY = s[l - 1] - s[l - 1].toFixed(d);\n\n        s.forEach(function (val, i) {\n          if (!i) { return; }\n          s[i] = +s[i].toFixed(d);\n        });\n        return;\n    }\n  });\n\n  return this;\n};\n\n\n// Apply iterator function to all segments. If function returns result,\n// current segment will be replaced to array of returned segments.\n// If empty array is returned, current regment will be deleted.\n//\nSvgPath.prototype.iterate = function (iterator, keepLazyStack) {\n  var segments = this.segments,\n      replacements = {},\n      needReplace = false,\n      lastX = 0,\n      lastY = 0,\n      countourStartX = 0,\n      countourStartY = 0;\n  var i, j, newSegments;\n\n  if (!keepLazyStack) {\n    this.__evaluateStack();\n  }\n\n  segments.forEach(function (s, index) {\n\n    var res = iterator(s, index, lastX, lastY);\n\n    if (Array.isArray(res)) {\n      replacements[index] = res;\n      needReplace = true;\n    }\n\n    var isRelative = (s[0] === s[0].toLowerCase());\n\n    // calculate absolute X and Y\n    switch (s[0]) {\n      case 'm':\n      case 'M':\n        lastX = s[1] + (isRelative ? lastX : 0);\n        lastY = s[2] + (isRelative ? lastY : 0);\n        countourStartX = lastX;\n        countourStartY = lastY;\n        return;\n\n      case 'h':\n      case 'H':\n        lastX = s[1] + (isRelative ? lastX : 0);\n        return;\n\n      case 'v':\n      case 'V':\n        lastY = s[1] + (isRelative ? lastY : 0);\n        return;\n\n      case 'z':\n      case 'Z':\n        // That make sence for multiple contours\n        lastX = countourStartX;\n        lastY = countourStartY;\n        return;\n\n      default:\n        lastX = s[s.length - 2] + (isRelative ? lastX : 0);\n        lastY = s[s.length - 1] + (isRelative ? lastY : 0);\n    }\n  });\n\n  // Replace segments if iterator return results\n\n  if (!needReplace) { return this; }\n\n  newSegments = [];\n\n  for (i = 0; i < segments.length; i++) {\n    if (typeof replacements[i] !== 'undefined') {\n      for (j = 0; j < replacements[i].length; j++) {\n        newSegments.push(replacements[i][j]);\n      }\n    } else {\n      newSegments.push(segments[i]);\n    }\n  }\n\n  this.segments = newSegments;\n\n  return this;\n};\n\n\n// Converts segments from relative to absolute\n//\nSvgPath.prototype.abs = function () {\n\n  this.iterate(function (s, index, x, y) {\n    var name = s[0],\n        nameUC = name.toUpperCase(),\n        i;\n\n    // Skip absolute commands\n    if (name === nameUC) { return; }\n\n    s[0] = nameUC;\n\n    switch (name) {\n      case 'v':\n        // v has shifted coords parity\n        s[1] += y;\n        return;\n\n      case 'a':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        // touch x, y only\n        s[6] += x;\n        s[7] += y;\n        return;\n\n      default:\n        for (i = 1; i < s.length; i++) {\n          s[i] += i % 2 ? x : y; // odd values are X, even - Y\n        }\n    }\n  }, true);\n\n  return this;\n};\n\n\n// Converts segments from absolute to relative\n//\nSvgPath.prototype.rel = function () {\n\n  this.iterate(function (s, index, x, y) {\n    var name = s[0],\n        nameLC = name.toLowerCase(),\n        i;\n\n    // Skip relative commands\n    if (name === nameLC) { return; }\n\n    // Don't touch the first M to avoid potential confusions.\n    if (index === 0 && name === 'M') { return; }\n\n    s[0] = nameLC;\n\n    switch (name) {\n      case 'V':\n        // V has shifted coords parity\n        s[1] -= y;\n        return;\n\n      case 'A':\n        // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n        // touch x, y only\n        s[6] -= x;\n        s[7] -= y;\n        return;\n\n      default:\n        for (i = 1; i < s.length; i++) {\n          s[i] -= i % 2 ? x : y; // odd values are X, even - Y\n        }\n    }\n  }, true);\n\n  return this;\n};\n\n\n// Converts arcs to cubic bézier curves\n//\nSvgPath.prototype.unarc = function () {\n  this.iterate(function (s, index, x, y) {\n    var new_segments, nextX, nextY, result = [], name = s[0];\n\n    // Skip anything except arcs\n    if (name !== 'A' && name !== 'a') { return null; }\n\n    if (name === 'a') {\n      // convert relative arc coordinates to absolute\n      nextX = x + s[6];\n      nextY = y + s[7];\n    } else {\n      nextX = s[6];\n      nextY = s[7];\n    }\n\n    new_segments = a2c(x, y, nextX, nextY, s[4], s[5], s[1], s[2], s[3]);\n\n    // Degenerated arcs can be ignored by renderer, but should not be dropped\n    // to avoid collisions with `S A S` and so on. Replace with empty line.\n    if (new_segments.length === 0) {\n      return [ [ s[0] === 'a' ? 'l' : 'L', s[6], s[7] ] ];\n    }\n\n    new_segments.forEach(function (s) {\n      result.push([ 'C', s[2], s[3], s[4], s[5], s[6], s[7] ]);\n    });\n\n    return result;\n  });\n\n  return this;\n};\n\n\n// Converts smooth curves (with missed control point) to generic curves\n//\nSvgPath.prototype.unshort = function () {\n  var segments = this.segments;\n  var prevControlX, prevControlY, prevSegment;\n  var curControlX, curControlY;\n\n  // TODO: add lazy evaluation flag when relative commands supported\n\n  this.iterate(function (s, idx, x, y) {\n    var name = s[0], nameUC = name.toUpperCase(), isRelative;\n\n    // First command MUST be M|m, it's safe to skip.\n    // Protect from access to [-1] for sure.\n    if (!idx) { return; }\n\n    if (nameUC === 'T') { // quadratic curve\n      isRelative = (name === 't');\n\n      prevSegment = segments[idx - 1];\n\n      if (prevSegment[0] === 'Q') {\n        prevControlX = prevSegment[1] - x;\n        prevControlY = prevSegment[2] - y;\n      } else if (prevSegment[0] === 'q') {\n        prevControlX = prevSegment[1] - prevSegment[3];\n        prevControlY = prevSegment[2] - prevSegment[4];\n      } else {\n        prevControlX = 0;\n        prevControlY = 0;\n      }\n\n      curControlX = -prevControlX;\n      curControlY = -prevControlY;\n\n      if (!isRelative) {\n        curControlX += x;\n        curControlY += y;\n      }\n\n      segments[idx] = [\n        isRelative ? 'q' : 'Q',\n        curControlX, curControlY,\n        s[1], s[2]\n      ];\n\n    } else if (nameUC === 'S') { // cubic curve\n      isRelative = (name === 's');\n\n      prevSegment = segments[idx - 1];\n\n      if (prevSegment[0] === 'C') {\n        prevControlX = prevSegment[3] - x;\n        prevControlY = prevSegment[4] - y;\n      } else if (prevSegment[0] === 'c') {\n        prevControlX = prevSegment[3] - prevSegment[5];\n        prevControlY = prevSegment[4] - prevSegment[6];\n      } else {\n        prevControlX = 0;\n        prevControlY = 0;\n      }\n\n      curControlX = -prevControlX;\n      curControlY = -prevControlY;\n\n      if (!isRelative) {\n        curControlX += x;\n        curControlY += y;\n      }\n\n      segments[idx] = [\n        isRelative ? 'c' : 'C',\n        curControlX, curControlY,\n        s[1], s[2], s[3], s[4]\n      ];\n    }\n  });\n\n  return this;\n};\n\n\nmodule.exports = SvgPath;\n","'use strict';\n\nmodule.exports = require('./lib/svgpath');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// WARNING: This file is autogenerated, edit lib/index.template.ts\nvar svgPath = require(\"svgpath\");\n// Precision for consider cubic polynom as quadratic one\nvar CBEZIER_MINMAX_EPSILON = 0.00000001;\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\nfunction minmaxQ(A) {\n    var min = Math.min(A[0], A[2]), max = Math.max(A[0], A[2]);\n    if (A[1] >= A[0] ? A[2] >= A[1] : A[2] <= A[1]) {\n        // if no extremum in ]0,1[\n        return [min, max];\n    }\n    // check if the extremum E is min or max\n    var E = (A[0] * A[2] - A[1] * A[1]) / (A[0] - 2 * A[1] + A[2]);\n    return E < min ? [E, max] : [min, E];\n}\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\nfunction minmaxC(A) {\n    var K = A[0] - 3 * A[1] + 3 * A[2] - A[3];\n    // if the polynomial is (almost) quadratic and not cubic\n    if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\n        if (A[0] === A[3] && A[0] === A[1]) {\n            // no curve, point targeting same location\n            return [A[0], A[3]];\n        }\n        return minmaxQ([\n            A[0],\n            -0.5 * A[0] + 1.5 * A[1],\n            A[0] - 3 * A[1] + 3 * A[2],\n        ]);\n    }\n    // the reduced discriminant of the derivative\n    var T = -A[0] * A[2] +\n        A[0] * A[3] -\n        A[1] * A[2] -\n        A[1] * A[3] +\n        A[1] * A[1] +\n        A[2] * A[2];\n    // if the polynomial is monotone in [0,1]\n    if (T <= 0) {\n        return [Math.min(A[0], A[3]), Math.max(A[0], A[3])];\n    }\n    var S = Math.sqrt(T);\n    // potential extrema\n    var min = Math.min(A[0], A[3]), max = Math.max(A[0], A[3]);\n    var L = A[0] - 2 * A[1] + A[2];\n    // check local extrema\n    for (var R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\n        if (R > 0 && R < 1) {\n            // if the extrema is for R in [0,1]\n            var Q = A[0] * (1 - R) * (1 - R) * (1 - R) +\n                A[1] * 3 * (1 - R) * (1 - R) * R +\n                A[2] * 3 * (1 - R) * R * R +\n                A[3] * R * R * R;\n            if (Q < min) {\n                min = Q;\n            }\n            if (Q > max) {\n                max = Q;\n            }\n        }\n    }\n    return [min, max];\n}\n/**\n * Compute bounding boxes of SVG paths.\n * @param {String} d SVG path for which their bounding box will be computed.\n * @returns {BBox}\n */\nfunction svgPathBbox(d) {\n    var min = [Infinity, Infinity], max = [-Infinity, -Infinity];\n    svgPath(d)\n        .abs()\n        .unarc()\n        .unshort()\n        .iterate(function (seg, _, x, y) {\n        switch (seg[0]) {\n            // The next cases are ordered based on simple-icons data\n            case \"M\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (min[1] > seg[2]) {\n                    min[1] = seg[2];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                if (max[1] < seg[2]) {\n                    max[1] = seg[2];\n                }\n                break;\n            }\n            case \"H\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                break;\n            }\n            case \"V\": {\n                if (min[1] > seg[1]) {\n                    min[1] = seg[1];\n                }\n                if (max[1] < seg[1]) {\n                    max[1] = seg[1];\n                }\n                break;\n            }\n            case \"L\": {\n                if (min[0] > seg[1]) {\n                    min[0] = seg[1];\n                }\n                if (min[1] > seg[2]) {\n                    min[1] = seg[2];\n                }\n                if (max[0] < seg[1]) {\n                    max[0] = seg[1];\n                }\n                if (max[1] < seg[2]) {\n                    max[1] = seg[2];\n                }\n                break;\n            }\n            case \"C\": {\n                var cxMinMax = minmaxC([x, seg[1], seg[3], seg[5]]);\n                if (min[0] > cxMinMax[0]) {\n                    min[0] = cxMinMax[0];\n                }\n                if (max[0] < cxMinMax[1]) {\n                    max[0] = cxMinMax[1];\n                }\n                var cyMinMax = minmaxC([y, seg[2], seg[4], seg[6]]);\n                if (min[1] > cyMinMax[0]) {\n                    min[1] = cyMinMax[0];\n                }\n                if (max[1] < cyMinMax[1]) {\n                    max[1] = cyMinMax[1];\n                }\n                break;\n            }\n            case \"Q\": {\n                var qxMinMax = minmaxQ([x, seg[1], seg[3]]);\n                if (min[0] > qxMinMax[0]) {\n                    min[0] = qxMinMax[0];\n                }\n                if (max[0] < qxMinMax[1]) {\n                    max[0] = qxMinMax[1];\n                }\n                var qyMinMax = minmaxQ([y, seg[2], seg[4]]);\n                if (min[1] > qyMinMax[0]) {\n                    min[1] = qyMinMax[0];\n                }\n                if (max[1] < qyMinMax[1]) {\n                    max[1] = qyMinMax[1];\n                }\n                break;\n            }\n        }\n    }, true);\n    return [min[0], min[1], max[0], max[1]];\n}\nmodule.exports = svgPathBbox;\n","import { ModuleProduct } from \"../../ModuleProduct\";\nimport { fontTtfDataUrl } from \"./font\";\nimport { svgElem, dropShadow, svgRect } from \"../../svg/elements\";\nimport { fixCase, transformTextEnclosure } from \"../../svg/modify\";\nimport { Warp } from \"../../svg/Warp\";\nimport svgPathBbox from \"svg-path-bbox\";\nimport { Region } from \"../../../types\";\nimport { _loadFontExternalDataURL } from \"../../../util/font\";\n\nexport class Vegemite extends ModuleProduct {\n    moduleName = \"Vegemite\";\n\n    svgPreview(text: string, region: Region): string {\n        return this.svgElement(text, region);\n    }\n\n    svgPrint(text: string, region: Region): string {\n        return this.svgElement(text, region);\n    }\n\n    private svgElement(text: string, region: Region): string {\n        const font = _loadFontExternalDataURL(fontTtfDataUrl);\n        const capitalise = (word: string): string => word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();\n        const parsedtext = text !== \"\" ? capitalise(text) : \"\";\n        const basePath = font.getPath(parsedtext, 0, 72, 72);\n        const pathSvg = basePath.toSVG(2);\n\n        const box = basePath.getBoundingBox();\n        const pathWidth = box.x2 - box.x1;\n        const pathData = basePath.toPathData(3);\n\n        const textSvg = (): SVGElement => {\n            const g = svgElem(\"g\");\n            g.classList.add(\"module-text-group\");\n            const gdefs = svgElem(\"defs\");\n            g.appendChild(gdefs);\n            gdefs.appendChild(dropShadow(0, 2, 2, \"shadow\"));\n\n            const thick = svgElem(\"path\");\n            thick.setAttribute(\"d\", pathData);\n            thick.setAttribute(\"stroke\", \"black\");\n            thick.setAttribute(\"stroke-width\", \"3\");\n            gdefs.appendChild(thick);\n\n            const layer0 = svgElem(\"g\");\n            layer0.classList.add(\"module-layer0\");\n            g.appendChild(layer0);\n            layer0.setAttribute(\"filter\", \"url(#shadow)\");\n            layer0.innerHTML = thick.outerHTML;\n\n            const layer1 = svgElem(\"g\");\n            layer1.classList.add(\"module-layer1\");\n            g.appendChild(layer1);\n            layer1.setAttribute(\"stroke-width\", \"3\");\n            layer1.setAttribute(\"stroke\", \"rgb(45,41,38)\");\n            layer1.setAttribute(\"fill\", \"rgb(45,41,38)\");\n            layer1.setAttribute(\"transform\", \"translate(0.5,0)\");\n            layer1.innerHTML = pathSvg;\n\n            const layer2 = svgElem(\"g\");\n            layer2.classList.add(\"module-layer2\");\n            g.appendChild(layer2);\n            layer2.setAttribute(\"fill\", \"rgb(255,209,0)\");\n            layer2.setAttribute(\"transform\", \"translate(1,-0.1)\");\n            layer2.innerHTML = pathSvg;\n\n            const layer3 = svgElem(\"g\");\n            layer3.classList.add(\"module-layer3\");\n            g.appendChild(layer3);\n            layer3.setAttribute(\"fill\", \"white\");\n            layer3.innerHTML = pathSvg;\n\n            const warp = new Warp(g);\n            warp.transform(([x, y]) => [x, y + (pathWidth / 2 - x) ** 2 / (pathWidth * 6)]); // Curve down from center\n            return g;\n        };\n\n        const rootElement = svgElem(\"g\");\n        rootElement.classList.add(\"module-root\");\n\n        const defs = svgElem(\"defs\");\n        rootElement.appendChild(defs);\n\n        const bounds = svgElem(\"g\");\n        bounds.classList.add(\"module-bounds\");\n        rootElement.appendChild(bounds);\n        const boundsRect = svgRect(region.height, region.width);\n        boundsRect.setAttribute(\"opacity\", \"0\");\n        bounds.appendChild(boundsRect);\n\n        const textEnclosure = svgElem(\"g\");\n        textEnclosure.classList.add(\"module-text-enclosure\");\n        rootElement.appendChild(textEnclosure);\n\n        const textGroup = textSvg();\n        textEnclosure.appendChild(textGroup);\n\n        const textBbox = svgPathBbox(pathData);\n        transformTextEnclosure(textEnclosure, textBbox, region.height, region.width, 0.35, 0.65);\n\n        return fixCase(rootElement.outerHTML);\n    }\n}\n","import { UnhandledBehaviorError } from \"../util/exception\";\nimport { ModuleProduct } from \"./ModuleProduct\";\nimport { Vegemite } from \"./products/Vegemite\";\n\nexport default async function moduleResolver(moduleName: string): Promise<ModuleProduct> {\n    if (moduleName === \"Vegemite\") {\n        return new Vegemite();\n    }\n    throw new UnhandledBehaviorError(`Failed to resolve Module, Module ${moduleName} not found`);\n}\n","import { toString as urlToQrString } from \"qrcode\";\nimport {\n    DesignInputStep,\n    DigitalContentDesignInputStepData,\n    FrameDesignInputStepData,\n    IllustrationDesignInputStepData,\n    ModuleDesignInputStepData,\n    PictureDesignInputStepData,\n    ShapeDesignInputStepData,\n    TextDesignInputStepData,\n} from \"./types\";\nimport moduleResolver from \"../module/resolver\";\nimport { LayoutNotFoundError, ParseError } from \"../util/exception\";\nimport { optionService } from \"../services/option\";\nimport {\n    AnyStepData,\n    ColorDefinition,\n    DigitalContentStepData,\n    FontData,\n    FrameElement,\n    FrameStepData,\n    ILayout,\n    IllustrationElement,\n    IllustrationStepData,\n    ImageElement,\n    LayoutElement,\n    LayoutElementType,\n    ModuleStepData,\n    PictureStepData,\n    Region,\n    ShapeStepData,\n    SilentStepData,\n    Step,\n    StepSelections,\n    StepType,\n    TextboxElement,\n    TextStepData,\n    VariantResource,\n    Workflow,\n} from \"../types\";\nimport { CanvasCommand, CreateElementCommand } from \"../command\";\nimport { domParser, fetchAsString, toBase64, xmlSerializer } from \"../util/crossplatform\";\nimport { generate } from \"../util/guid\";\nimport { calculateOffsets, generateFrameSVG, getFrameData, getPatternImageData, getVariant } from \"../util/frame\";\nimport { sanitizeSvgTree, traverse } from \"../util/illustration\";\nimport { applyTextTransformations } from \"../text/shared\";\nimport { determineCorrectFontSizeAndLines } from \"../text/algorithm/autosize\";\nimport { loadFont } from \"../util/font\";\nimport { metafieldManager } from \"../services/metafield\";\nimport { stepConditionsAreSatisfied } from \"../WorkflowManager/scenes\";\n\n// SVG tags which can take a fill.\nconst fillableTagNames = [\n    \"altGlyph\",\n    \"circle\",\n    \"ellipse\",\n    \"path\",\n    \"polygon\",\n    \"polyline\",\n    \"rect\",\n    \"text\",\n    \"textPath\",\n    \"tref\",\n    \"tspan\",\n];\n\nconst handleDigitalContentStep = async (\n    layouts: ILayout[],\n    step: DesignInputStep,\n    digitalContentStep: Step<DigitalContentStepData>,\n): Promise<CreateElementCommand<ImageElement>[]> => {\n    const designInputStepData = step.data as DigitalContentDesignInputStepData;\n    const baseUrl = digitalContentStep.data.baseUrl;\n    const videoSource = designInputStepData.assetUrl.replace(\"localhost\", \"localstack\");\n    const protocolPrefix = baseUrl.slice(0, 4) === \"http\" ? \"\" : \"https://\";\n    const urlBuilder = new URL(protocolPrefix + baseUrl);\n    urlBuilder.searchParams.append(\"video\", toBase64(JSON.stringify([{ href: videoSource }])));\n    //iOS does not recognise a URL without the trailing slash on the pathname,\n    urlBuilder.pathname = urlBuilder.pathname + (urlBuilder.pathname.slice(-1) === \"/\" ? \"\" : \"/\");\n    const finalUrl = urlBuilder.toString();\n    const base64data = toBase64(await urlToQrString(finalUrl, { type: \"svg\" }));\n    const dataUri = `data:image/svg+xml;base64,${base64data}`;\n\n    const createElementForRegion = (region: Region): CreateElementCommand<ImageElement> => {\n        const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n\n        // Create a new image.\n        const elementKey = generate();\n        return new CreateElementCommand<ImageElement>(\n            {\n                id: elementKey,\n                src: dataUri,\n                type: LayoutElementType.Image,\n                y: region.top,\n                x: region.left,\n                width: region.width,\n                height: region.height,\n                rotation: 0,\n            },\n            layout,\n        );\n    };\n    const regions = digitalContentStep.data.regions;\n    try {\n        return regions.map(createElementForRegion);\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handleFrameStep = async (\n    layouts: ILayout[],\n    stepSelections: StepSelections,\n    step: DesignInputStep,\n    frameStep: Step<FrameStepData>,\n): Promise<CanvasCommand[]> => {\n    const designInputStepData = step.data as FrameDesignInputStepData;\n\n    const src = designInputStepData.assetUrl;\n    const imageData = await getPatternImageData(src);\n\n    try {\n        const variant = await getVariant(designInputStepData, frameStep.option);\n        if (variant) {\n            stepSelections[frameStep.stepName] = { selectedVariants: [variant] };\n        }\n\n        const createFrameAndPattern = async (region: Region): Promise<CanvasCommand[]> => {\n            const frameSvg = await generateFrameSVG(region, variant?.asset?.fileLink);\n            const frameData = await getFrameData(frameSvg);\n            const newElementId = generate();\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n            if (!layout) {\n                throw new LayoutNotFoundError(region);\n            }\n            const offsets = calculateOffsets(\n                imageData,\n                frameData,\n                {\n                    scale: designInputStepData.scale,\n                    left: designInputStepData.x,\n                    top: designInputStepData.y,\n                },\n                frameStep.data.forceImageCover,\n            );\n            return [\n                new CreateElementCommand<FrameElement>(\n                    {\n                        id: newElementId,\n                        path: frameData.path,\n                        type: LayoutElementType.Frame,\n                        forceImageCover: frameStep.data.forceImageCover,\n                        x: region.left,\n                        y: region.top,\n                        width: region.width,\n                        height: region.height,\n                        layer: region.layer,\n                        layerIndex: region.layerIndex,\n                        rotation: region.rotation,\n                        scaleX: region.width / frameData.width,\n                        scaleY: region.height / frameData.height,\n                        pattern: {\n                            id: `${newElementId}-pattern`,\n                            src: imageData.src,\n                            x: offsets.x,\n                            y: offsets.y,\n                            width: imageData.width,\n                            height: imageData.height,\n                            rotation: 0,\n                            scaleX: offsets.zoom,\n                            scaleY: offsets.zoom,\n                            svg: imageData.svg,\n                            colors: imageData.colors,\n                        },\n                    },\n                    layout,\n                ),\n            ];\n        };\n        return (await Promise.all(frameStep.data.regions.map((r) => createFrameAndPattern(r)))).flat();\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handleIllustrationStep = async (\n    layouts: ILayout[],\n    stepSelections: StepSelections,\n    step: DesignInputStep,\n    illustrationStep: Step<IllustrationStepData>,\n): Promise<CreateElementCommand<IllustrationElement>[]> => {\n    const designInputStepData = step.data as IllustrationDesignInputStepData;\n\n    const option = await optionService.getOptionForStep(illustrationStep);\n    if (!option) {\n        console.error(`No option for step ${illustrationStep.stepName}.`);\n        return [];\n    }\n    const variant =\n        option.variants?.find((variant: VariantResource) => variant.id === designInputStepData.illustrationVariantId) ||\n        (await optionService.getDefaultVariant(option, illustrationStep.overrideDefaultVariantId));\n    if (!variant) {\n        console.error(`No variant with ID: ${designInputStepData.illustrationVariantId}`);\n        return [];\n    }\n    if (!variant.asset) {\n        console.error(`No asset for variant with ID: ${designInputStepData.illustrationVariantId}`);\n        return [];\n    }\n    stepSelections[illustrationStep.stepName] = { selectedVariants: [variant] };\n\n    const link = variant.asset?.fileLink;\n    if (!link) {\n        console.error(`No asset link for variant with ID: ${designInputStepData.illustrationVariantId}`);\n        return [];\n    }\n    const illustrationBody = await fetchAsString(link, true);\n\n    // Get the raw SVG without a doctype.\n    const svgRegex = /<svg.*?<\\/svg>/s;\n    const svgMatches = illustrationBody.match(svgRegex) || [];\n    const svg = svgMatches?.length > 0 ? svgMatches[0] : \"\";\n\n    // Parse the SVG into a tree.\n    const parser = domParser();\n    const parsedSvg = parser.parseFromString(svg, \"image/svg+xml\");\n    const root = parsedSvg.firstElementChild;\n    if (!root) {\n        console.error(\"Failed to read SVG.\");\n        return [];\n    }\n    sanitizeSvgTree(root);\n\n    // Annotate elements which have fills with a new class name.\n    const colors: { [key: string]: ColorDefinition } = {};\n    traverse(root, (node) => {\n        if (fillableTagNames.includes(node.tagName) && !node.attributes.getNamedItem(\"fill\")) {\n            node.setAttribute(\"fill\", \"#000000\");\n        }\n\n        const fill = node.attributes.getNamedItem(\"fill\");\n        if (fill && fill.value !== \"none\") {\n            const fillName = fill.value;\n            const alphanumericFill = fillName.replace(/\\W/g, \"\");\n            const className = `spiff-fill-${alphanumericFill}`;\n            node.classList.add(className);\n            colors[className] = { browserValue: fillName };\n        }\n\n        const stroke = node.attributes.getNamedItem(\"stroke\");\n        if (stroke && stroke.value !== \"none\") {\n            const fillName = stroke.value;\n            const alphanumericFill = fillName.replace(/\\W/g, \"\");\n            const className = `spiff-stroke-${alphanumericFill}`;\n            node.classList.add(className);\n            colors[className] = { browserValue: fillName };\n        }\n    });\n\n    // Serialise the traversed SVG back into a string.\n    const serialiser = xmlSerializer();\n    const rebuiltSvg = serialiser.serializeToString(root);\n\n    const replacementColors = designInputStepData.colors;\n    if (replacementColors) {\n        for (const [className, colorDefinition] of Object.entries(colors)) {\n            for (const k of Object.keys(replacementColors)) {\n                if (colorDefinition.browserValue === k) {\n                    colors[className] = { browserValue: replacementColors[k] };\n                    break;\n                }\n            }\n        }\n    }\n\n    const createElementForRegion = (region: Region): CreateElementCommand<IllustrationElement> => {\n        const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n        const elementKey = generate();\n        return new CreateElementCommand<IllustrationElement>(\n            {\n                colors,\n                id: elementKey,\n                svg: rebuiltSvg,\n                type: LayoutElementType.Illustration,\n                y: region.top,\n                x: region.left,\n                rotation: region.rotation,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                immutable: region.immutable,\n            },\n            layout,\n        );\n    };\n    const regions = illustrationStep.data.regions;\n    try {\n        return regions.map(createElementForRegion);\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handleModuleStep = async (\n    layouts: ILayout[],\n    step: DesignInputStep,\n    moduleStep: Step<ModuleStepData>,\n): Promise<CreateElementCommand<IllustrationElement>[]> => {\n    const module = await moduleResolver(moduleStep.data.module);\n    const designInputStepData = step.data as ModuleDesignInputStepData;\n    const createElementForRegion = (svg: string, region: Region): CreateElementCommand<IllustrationElement> => {\n        const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n        const elementKey = generate();\n        return new CreateElementCommand<IllustrationElement>(\n            {\n                colors: {},\n                id: elementKey,\n                svg: svg,\n                type: LayoutElementType.Illustration,\n                y: region.top,\n                x: region.left,\n                rotation: region.rotation,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n            },\n            layout,\n        );\n    };\n    const regions = moduleStep.data.regions;\n    try {\n        return regions.map((region) =>\n            createElementForRegion(module.svgPrint(designInputStepData.text, region), region),\n        );\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handlePictureStep = async (\n    layouts: ILayout[],\n    stepSelections: StepSelections,\n    step: DesignInputStep,\n    pictureStep: Step<PictureStepData>,\n): Promise<CreateElementCommand<ImageElement>[]> => {\n    const designInputStepData = step.data as PictureDesignInputStepData;\n\n    const option = await optionService.getOptionForStep(pictureStep);\n    if (!option) {\n        console.error(`No option for step ${pictureStep.stepName}.`);\n        return [];\n    }\n    const variant =\n        option.variants?.find((variant: VariantResource) => variant.id === designInputStepData.pictureVariantId) ||\n        (await optionService.getDefaultVariant(option, pictureStep.overrideDefaultVariantId));\n    if (!variant) {\n        console.error(`No variant with ID: ${designInputStepData.pictureVariantId}`);\n        return [];\n    }\n    if (!variant.asset) {\n        console.error(`No asset for variant with ID: ${designInputStepData.pictureVariantId}`);\n        return [];\n    }\n    stepSelections[pictureStep.stepName] = { selectedVariants: [variant] };\n    const link = variant.asset?.fileLink;\n    if (!link) {\n        console.error(`No asset link for variant with ID: ${designInputStepData.pictureVariantId}`);\n        return [];\n    }\n\n    const createElementForRegion = (region: Region): CreateElementCommand<ImageElement> => {\n        const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n        // Create a new image.\n        const elementKey = generate();\n        return new CreateElementCommand<ImageElement>(\n            {\n                id: elementKey,\n                src: link,\n                type: LayoutElementType.Image,\n                y: region.top,\n                x: region.left,\n                rotation: region.rotation,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                immutable: region.immutable,\n                preserveAspectRatio: \"none\",\n            },\n            layout,\n        );\n    };\n\n    const regions = pictureStep.data.regions;\n    try {\n        return regions.map(createElementForRegion);\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handleShapeStep = async (\n    layouts: ILayout[],\n    stepSelections: StepSelections,\n    step: DesignInputStep,\n    shapeStep: Step<ShapeStepData>,\n): Promise<CreateElementCommand<IllustrationElement>[]> => {\n    const designInputStepData = step.data as ShapeDesignInputStepData;\n    const option = await optionService.getOptionForStep(shapeStep);\n    if (!option) {\n        console.error(`No option for step ${shapeStep.stepName}.`);\n        return [];\n    }\n    const variant =\n        option.variants?.find((variant: VariantResource) => variant.id === designInputStepData.colorVariantId) ||\n        (await optionService.getDefaultVariant(option, shapeStep.overrideDefaultVariantId));\n    if (!variant) {\n        console.error(`No variant with ID: ${designInputStepData.colorVariantId}`);\n        return [];\n    }\n    stepSelections[shapeStep.stepName] = { selectedVariants: [variant] };\n\n    const createElementForRegion = (region: Region): CreateElementCommand<IllustrationElement> => {\n        const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n        if (!layout) {\n            throw new LayoutNotFoundError(region);\n        }\n\n        const svg = `\n        <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n            xmlSpace=\"preserve\"\n            preserveAspectRatio=\"none\"\n            version=\"1.1\"\n            width=\"1\"\n            height=\"1\"\n            viewBox=\"0 0 1 1\"\n        >\n            <rect\n                x=\"0\"\n                y=\"0\"\n                width=\"1\"\n                height=\"1\"\n                class=\"spiff-fill-shape\"\n                fill=\"${variant?.color}\"\n            />\n        </svg>\n        `;\n        const fill: ColorDefinition = { browserValue: variant.color || \"#000000\" };\n        const colors = { \"spiff-fill-shape\": fill };\n\n        const elementKey = generate();\n        return new CreateElementCommand<IllustrationElement>(\n            {\n                colors,\n                id: elementKey,\n                svg,\n                type: LayoutElementType.Illustration,\n                y: region.top,\n                x: region.left,\n                rotation: region.rotation,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                immutable: region.immutable,\n            },\n            layout,\n        );\n    };\n    const regions = shapeStep.data.regions;\n    try {\n        return regions.map(createElementForRegion);\n    } catch (e) {\n        console.error(e);\n        return [];\n    }\n};\n\nconst handleSilentStep = async (\n    layouts: ILayout[],\n    silentStep: Step<SilentStepData>,\n    productOverlayImageUrl?: string,\n): Promise<CreateElementCommand<LayoutElement>[]> => {\n    const commands: CreateElementCommand<LayoutElement>[] = [];\n\n    const getSource = (): string => {\n        if (silentStep.type === StepType.ProductOverlay) {\n            return productOverlayImageUrl || silentStep.data.asset?.fileLink || \"\";\n        } else {\n            return silentStep.data.asset?.fileLink || \"\";\n        }\n    };\n    const assetSource = getSource();\n\n    const evaluateAssetType = (): LayoutElementType => {\n        // Try to determine the type by asset path.\n        if (assetSource.endsWith(\".jpeg\") || assetSource.endsWith(\".jpg\") || assetSource.endsWith(\".png\")) {\n            return LayoutElementType.Image;\n        }\n        if (assetSource.endsWith(\".svg\")) {\n            return LayoutElementType.Illustration;\n        }\n        return LayoutElementType.Illustration;\n    };\n    const assetType = evaluateAssetType();\n    const regions = silentStep.data.regions;\n\n    if (assetType === \"image\") {\n        try {\n            regions.forEach((region) => {\n                const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n                if (!layout) {\n                    throw new LayoutNotFoundError(region);\n                }\n                const newElement = {\n                    id: generate(),\n                    src: assetSource,\n                    type: assetType,\n                    y: region.top,\n                    x: region.left,\n                    width: region.width,\n                    height: region.height,\n                    layer: region.layer,\n                    layerIndex: region.layerIndex,\n                    productOverlay: silentStep.type === StepType.ProductOverlay ? true : undefined,\n                    scaleX: 1,\n                    scaleY: 1,\n                    rotation: region.rotation,\n                    excludeFromExport: silentStep.data.excludeFromPrint,\n                    preserveAspectRatio: \"none\",\n                };\n                commands.push(new CreateElementCommand<ImageElement>(newElement, layout));\n            });\n        } catch (e) {\n            console.error(e);\n        }\n    } else {\n        const fetchedSrc = await fetchAsString(assetSource, true);\n        const sanitizeSvg = (rawSvg: string): string => {\n            // Get the raw SVG without a doctype.\n            const svgRegex = /<svg.*?<\\/svg>/s;\n            const svgMatches = rawSvg.match(svgRegex) || [];\n            const svg = svgMatches?.length > 0 ? svgMatches[0] : \"\";\n\n            // Parse the SVG into a tree.\n            const parser = domParser();\n            const parsedSvg = parser.parseFromString(svg, \"image/svg+xml\");\n            const root = parsedSvg.firstElementChild;\n            if (!root) {\n                throw new ParseError(\"Failed to read SVG.\");\n            }\n            sanitizeSvgTree(root);\n            const serialiser = xmlSerializer();\n            return serialiser.serializeToString(root);\n        };\n        regions.forEach((region) => {\n            const layout = layouts.find((layout: ILayout) => layout.panelId === region.panelId);\n            if (!layout) {\n                throw new LayoutNotFoundError(region);\n            }\n            const newElement = {\n                id: generate(),\n                src: assetSource,\n                asset_key: assetSource,\n                svg: sanitizeSvg(fetchedSrc),\n                colors: {},\n                type: assetType,\n                y: region.top,\n                x: region.left,\n                width: region.width,\n                height: region.height,\n                layer: region.layer,\n                layerIndex: region.layerIndex,\n                scaleX: 1,\n                scaleY: 1,\n                rotation: region.rotation,\n                productOverlay: silentStep.type === StepType.ProductOverlay ? true : undefined,\n                excludeFromExport: silentStep.data.excludeFromPrint,\n            };\n            commands.push(new CreateElementCommand<IllustrationElement>(newElement, layout));\n        });\n    }\n    return commands;\n};\n\nconst handleTextStep = async (\n    layouts: ILayout[],\n    stepSelections: StepSelections,\n    step: DesignInputStep,\n    textStep: Step<TextStepData>,\n): Promise<CreateElementCommand<TextboxElement>[]> => {\n    const commands: CreateElementCommand<TextboxElement>[] = [];\n\n    const designInputStepData = step.data as TextDesignInputStepData;\n\n    const defaultFontSize = 30;\n    const textAlign = (stepData: TextStepData) => {\n        if (stepData.vertical) {\n            return \"center\";\n        }\n        return stepData.textAlign || \"center\";\n    };\n\n    const getFontUrl = async (): Promise<string | undefined> => {\n        const option = await optionService.getOptionForStep(textStep);\n        if (!option) {\n            return undefined;\n        }\n        const variant =\n            option.variants?.find((variant: VariantResource) => variant.id === designInputStepData.fontVariantId) ||\n            (await optionService.getDefaultVariant(option, textStep.overrideDefaultVariantId));\n        if (!variant) {\n            return undefined;\n        }\n        if (!variant.asset) {\n            return undefined;\n        }\n        stepSelections[textStep.stepName] = { selectedVariants: [variant] };\n        const link = variant.asset.fileLink;\n        if (!link) {\n            return undefined;\n        }\n        return link;\n    };\n\n    const getFontData = async () => {\n        const fontUrl = await getFontUrl();\n        if (!fontUrl) {\n            return undefined;\n        }\n        const font = await loadFont(fontUrl);\n        const fontData: FontData = {\n            assetUrl: fontUrl,\n            name: font.names.fullName[\"en\"],\n        };\n        return fontData;\n    };\n    const fontData = await getFontData();\n\n    const replacedText =\n        (textStep.data.replaceableText\n            ? textStep.data.replaceableText.replace(\"{{}}\", designInputStepData.text)\n            : designInputStepData.text) || \"\";\n\n    const text = applyTextTransformations(replacedText, {\n        vertical: textStep.data.vertical,\n        uppercase: textStep.data.uppercase,\n    });\n\n    const getDefaultColor = async (step: TextStepData): Promise<string | undefined> => {\n        const colorOption = step.colorOption;\n        if (!colorOption) return undefined;\n        const defaultVariant = await optionService.getDefaultVariant(colorOption);\n        return defaultVariant?.color;\n    };\n    const defaultColor = designInputStepData.color || (await getDefaultColor(textStep.data));\n\n    const regions = textStep.data.regions;\n    for (const region of regions) {\n        const layout = layouts.find((layout) => layout.panelId === region.panelId);\n        if (!layout) {\n            continue;\n        }\n        const newBaseElement: TextboxElement = {\n            stepName: step.name,\n            id: generate(),\n            align: textAlign(textStep.data),\n            curved: textStep.data.curved,\n            fill: designInputStepData.color || defaultColor || \"#000000\",\n            fontData,\n            fontSize: textStep.data.size || defaultFontSize,\n            height: region.height,\n            layer: region.layer,\n            layerIndex: region.layerIndex,\n            paths: textStep.data.paths,\n            rotation: region.rotation,\n            text,\n            type: LayoutElementType.Textbox,\n            vertical: textStep.data.vertical,\n            verticalAlign: textStep.data.verticalAlign || \"middle\",\n            width: region.width,\n            x: region.left,\n            y: region.top,\n        };\n        if (fontData) {\n            const [correctFontSize, correctLines] = determineCorrectFontSizeAndLines(\n                textStep.data.size || defaultFontSize,\n                fontData,\n                region,\n                [\n                    applyTextTransformations(text, {\n                        vertical: textStep.data.vertical,\n                        uppercase: textStep.data.uppercase,\n                    }),\n                ],\n                {\n                    size: textStep.data.size,\n                    minSize: textStep.data.minSize,\n                    maxSize: textStep.data.maxSize,\n                },\n            );\n            commands.push(\n                new CreateElementCommand(\n                    {\n                        ...newBaseElement,\n                        fontSize: correctFontSize,\n                        text: newBaseElement.curved ? newBaseElement.text : (correctLines || []).join(\"\\n\"),\n                    },\n                    layout,\n                ),\n            );\n        } else {\n            commands.push(new CreateElementCommand(newBaseElement, layout));\n        }\n    }\n    return commands;\n};\n\n// Generate a set of commands corresponding to one workflow.\nconst generateCommands = async (\n    designInputSteps: DesignInputStep[],\n    workflow: Workflow,\n    layouts: ILayout[],\n    productOverlayImageUrl?: string,\n): Promise<CanvasCommand[]> => {\n    const commands: CanvasCommand[] = [];\n    const stepSelections = {};\n\n    // Apply steps.\n    for (const step of designInputSteps) {\n        const workflowStep = workflow.steps.find((s) => s.stepName === step.name);\n        if (!workflowStep) {\n            continue;\n        }\n        switch (workflowStep.type) {\n            case StepType.DigitalContent:\n                commands.push(\n                    ...(await handleDigitalContentStep(layouts, step, workflowStep as Step<DigitalContentStepData>)),\n                );\n                break;\n            case StepType.Frame:\n            case StepType.Photo:\n                commands.push(\n                    ...(await handleFrameStep(layouts, stepSelections, step, workflowStep as Step<FrameStepData>)),\n                );\n                break;\n            case StepType.Illustration:\n                commands.push(\n                    ...(await handleIllustrationStep(\n                        layouts,\n                        stepSelections,\n                        step,\n                        workflowStep as Step<IllustrationStepData>,\n                    )),\n                );\n                break;\n            case StepType.Module:\n                commands.push(...(await handleModuleStep(layouts, step, workflowStep as Step<ModuleStepData>)));\n                break;\n            case StepType.Picture:\n                commands.push(\n                    ...(await handlePictureStep(layouts, stepSelections, step, workflowStep as Step<PictureStepData>)),\n                );\n                break;\n            case StepType.Shape:\n                commands.push(\n                    ...(await handleShapeStep(layouts, stepSelections, step, workflowStep as Step<ShapeStepData>)),\n                );\n                break;\n            case StepType.Text:\n                commands.push(\n                    ...(await handleTextStep(layouts, stepSelections, step, workflowStep as Step<TextStepData>)),\n                );\n                break;\n        }\n    }\n\n    // Handle silent steps.\n    for (const workflowStep of workflow.steps) {\n        if (workflowStep.type !== StepType.SilentIllustration && workflowStep.type !== StepType.ProductOverlay) {\n            continue;\n        }\n        if (!(await stepConditionsAreSatisfied(workflowStep, stepSelections))) {\n            continue;\n        }\n        commands.push(\n            ...(await handleSilentStep(layouts, workflowStep as Step<SilentStepData>, productOverlayImageUrl)),\n        );\n    }\n\n    return commands;\n};\n\nexport { generateCommands };\n","import cloneDeep from \"lodash.clonedeep\";\nimport { PromiseQueue, QueueablePromise } from \"../../util/PromiseQueue\";\nimport { Pith } from \"pith\";\nimport { generateCommands } from \"../../generation\";\nimport { DesignInputStep } from \"../../generation/types\";\nimport type { RenderableContext, RenderableContextService } from \"@repo/preview\";\nimport { ILayout, LayoutRenderingPurpose, LayoutsState, StepType, Workflow } from \"../../types\";\nimport { createCanvas, getDomParser, loadImage } from \"../../customCanvas\";\nimport { getSvgElement, LayoutData } from \"../../CommandContext\";\nimport { renderPapyrusComponentAsString } from \"../../util/crossplatform\";\nimport { CreateLayoutCommand, GroupCommand } from \"../../command\";\nimport { WorkflowManager } from \"../..\";\n\nexport class LayoutPreviewService implements RenderableContextService {\n    private readonly layouts: ReadonlyMap<string, LayoutPreviewBridge>;\n    private workflowManager?: WorkflowManager;\n    private handleCompleteRender: null | ((layouts: LayoutPreviewBridge[]) => void);\n\n    constructor(layouts: ILayout[]) {\n        this.handleCompleteRender = null;\n        const map: Map<string, LayoutPreviewBridge> = new Map();\n        layouts.forEach((layout) =>\n            map.set(\n                layout.id,\n                new LayoutPreviewBridge(\n                    layout.id,\n                    layout.name,\n                    this,\n                    { width: layout.width, height: layout.height },\n                    this.getWorkflowManager.bind(this),\n                ),\n            ),\n        );\n        this.layouts = map as ReadonlyMap<string, LayoutPreviewBridge>;\n    }\n\n    setCompleteRenderCallback(handleCompleteRender: (layouts: LayoutPreviewBridge[]) => void) {\n        this.handleCompleteRender = handleCompleteRender;\n        handleCompleteRender(Array.from(this.layouts.values()));\n    }\n\n    onCompleteRender() {\n        this.handleCompleteRender && this.handleCompleteRender(Array.from(this.layouts.values()));\n    }\n\n    getAll(): ReadonlyMap<string, LayoutPreviewBridge> {\n        return this.layouts;\n    }\n\n    setWorkflowManager(workflowManager: WorkflowManager) {\n        this.workflowManager = workflowManager;\n    }\n\n    getWorkflowManager() {\n        return this.workflowManager;\n    }\n}\n\n/**\n * Determines wether power of two textures are supported based on\n * the availability of WebGL 2 on the target platform.\n *\n * Check WebGL2 support. Older Safari does not support WebGL2 and behaves badly when non POT textures are used.\n * If we fail to resolve a WebGL2 context we disable non power of two rendering.\n *\n * NOTE: DO NOT remove this without first testing behaviour against Safari on macOS Big Sur & mobile!!!\n */\nconst calculateNonPOTSupport = (): Promise<boolean> => {\n    return new Promise((resolve, _reject) => {\n        try {\n            const glEl = createCanvas();\n            const gl = glEl.getContext(\"webgl2\");\n            resolve(!!gl);\n        } catch (e) {\n            resolve(false);\n        }\n    });\n};\nexport const nonPotTexSupport: Promise<boolean> = calculateNonPOTSupport();\n\n/**\n * The panel canvas class that stores both the main rendering canvas as well as rendering context\n * for a rendering context\n */\nexport class LayoutPreviewBridge implements RenderableContext {\n    hasSetStaticContext: boolean = false;\n\n    private readonly id: string;\n    private readonly name: string;\n    private readonly panelSize: { width: number; height: number };\n    private readonly getWorkflowManager?: () => WorkflowManager | undefined;\n\n    private service: LayoutPreviewService;\n\n    private interactiveDirty: boolean = false;\n\n    // Texture context & associated dirty flag.\n    private textureCtx?: CanvasRenderingContext2D;\n    private staticCtxDirty: boolean = false;\n    private lastRequestedRenderArguments: LayoutData[] | undefined = undefined;\n\n    // Stores a timestamp for the last static render.\n    private lastCompletedStaticRender: number | undefined = undefined;\n\n    // A render queue for this layout.\n    // No more than 2 renders can be queued at any time.\n    // Beyond this, renders will be discarded before they can execute\n    private renderQueue: PromiseQueue<RenderQueuePromise> = new PromiseQueue(2);\n\n    constructor(\n        id: string,\n        name: string,\n        service: LayoutPreviewService,\n        panelSize: { width: number; height: number },\n        getWorkflowManager?: () => WorkflowManager | undefined,\n    ) {\n        this.id = id;\n        this.name = name;\n        this.service = service;\n        this.panelSize = panelSize;\n        this.getWorkflowManager = getWorkflowManager;\n    }\n\n    getID(): string {\n        return this.id;\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    getPanelSize(): { width: number; height: number } {\n        return this.panelSize;\n    }\n\n    getStaticContext(): CanvasRenderingContext2D | undefined {\n        return this.textureCtx;\n    }\n\n    /**\n     * Register canvas to be rendered to.\n     */\n    setStaticContext(ctx: CanvasRenderingContext2D) {\n        this.textureCtx = ctx;\n        if (this.lastRequestedRenderArguments) {\n            this.render(this.lastRequestedRenderArguments);\n        }\n    }\n\n    getStaticContextDirty(): boolean {\n        return this.staticCtxDirty;\n    }\n\n    setStaticContextDirty(dirty: boolean): void {\n        this.staticCtxDirty = dirty;\n    }\n\n    getInteractiveCanvasDirty() {\n        return this.interactiveDirty;\n    }\n\n    setInteractiveCanvasDirty(dirty: boolean) {\n        this.interactiveDirty = dirty;\n    }\n\n    markLastCompletedStaticRender() {\n        this.lastCompletedStaticRender = Date.now();\n        this.service.onCompleteRender();\n    }\n\n    /**\n     * Returns a timestamp for the last time that this canvas rendered to its dynamic texture in the\n     * form of Date.now(). If this panel has never rendered undefined will be returned.\n     */\n    getLastCompletedStaticRender() {\n        return this.lastCompletedStaticRender;\n    }\n\n    /**\n     * Actions to perform when a static render event is fired for this canvas.\n     */\n    async render(layouts: LayoutData[]) {\n        const clonedLayouts = cloneDeep(layouts);\n\n        // We store the parameters for this render so that we can re-render\n        // if the static context is set later.\n        this.lastRequestedRenderArguments = clonedLayouts;\n\n        // Pull the static context and handle the case where it isn't available yet.\n        const staticContext = this.getStaticContext();\n        if (!staticContext) {\n            this.markLastCompletedStaticRender();\n            this.setStaticContextDirty(false);\n            return;\n        }\n\n        // Queue the render.\n        this.renderQueue.enqueue(\n            new RenderQueuePromise(\n                this.getID(),\n                staticContext,\n                await nonPotTexSupport,\n                () => {\n                    this.markLastCompletedStaticRender();\n                    this.setStaticContextDirty(true);\n                },\n                clonedLayouts,\n                this.getWorkflowManager,\n            ),\n        );\n    }\n}\n\n/**\n * Encapsulates the behavior required to render a layout to a canvas. The promise can\n * be generated at any point in time allowing for queue systems to process the render\n * once at a time and enforce ordering rules.\n */\nclass RenderQueuePromise extends QueueablePromise {\n    private readonly layoutId: string;\n    private readonly ctx: CanvasRenderingContext2D;\n    private readonly nonPOTSupport: boolean;\n    private readonly onRender: () => void;\n    private readonly layouts: LayoutData[]; // TODO: Do we need to pass this whole array in?\n    private readonly getWorkflowManager?: () => WorkflowManager | undefined;\n\n    constructor(\n        layoutId: string,\n        ctx: CanvasRenderingContext2D,\n        nonPOTSupport: boolean,\n        onRender: () => void,\n        layouts: LayoutData[],\n        getWorkflowManager?: () => WorkflowManager | undefined,\n    ) {\n        super();\n        this.layoutId = layoutId;\n        this.ctx = ctx;\n        this.nonPOTSupport = nonPOTSupport;\n        this.onRender = onRender;\n        this.layouts = layouts;\n        this.getWorkflowManager = getWorkflowManager;\n    }\n\n    /**\n     * Returns the resolution expected for generated textures.\n     * FIXME: This is reimplemented from the preview package. Can we find a way to remove this duplication.\n     */\n    private getDynamicTextureResolution() {\n        return this.getIsMobile() || !this.offscreenRenderingSupported()\n            ? {\n                  width: 1024,\n                  height: 1024,\n              }\n            : {\n                  width: 2048,\n                  height: 2048,\n              };\n    }\n\n    private getIsMobile() {\n        return window.innerWidth <= 480;\n    }\n\n    /**\n     * Returns true when multithreaded rendering is supported.\n     */\n    private offscreenRenderingSupported(): boolean {\n        // Samsung browser has broken web worker custom fonts from v14. To be\n        // safe, if we detect this browser we immediately disable offscreen canvas. There\n        // may be a more specific feature we can detect to be more clean about this moving forwards.\n        if (navigator.userAgent.includes(\"SamsungBrowser\")) {\n            return false;\n        }\n        // Otherwise we check for relevant required functionality\n        return !!window.Worker && !!(window as any).OffscreenCanvas;\n    }\n\n    private resizeFit(\n        originalSize: { width: number; height: number },\n        maxSize = 4096,\n    ): { width: number; height: number } {\n        const widthRatio = maxSize / originalSize.width;\n        const heightRatio = maxSize / originalSize.height;\n        const minAspectRatio = Math.min(widthRatio, heightRatio);\n        if (minAspectRatio > 1) {\n            return originalSize;\n        }\n\n        return { width: originalSize.width * minAspectRatio, height: originalSize.height * minAspectRatio };\n    }\n\n    /**\n     * Render the internally stored layout to the canvas.\n     * NOTE: This function is performance critical code. Please throughly test any changes to\n     * ensure performance isn't lost and that rendering behavior is preserved when modifying this logic.\n     * The aim is to have this code rendering in less than 16.66ms (60fps) on modern hardware. This is\n     * a loose target but should be kept in mind when making changes.\n     */\n    public async execute() {\n        // Ensure layout is available. Cancel out of render otherwise.\n        const layout = this.layouts.find((layout) => layout.layoutState.layout.id === this.layoutId);\n        if (!layout) {\n            return;\n        }\n        const elements = layout.layoutState.elements || [];\n\n        const layoutWidth = layout.layoutState.layout.width;\n        const layoutHeight = layout.layoutState.layout.height;\n\n        const renderDims =\n            layoutWidth === 1 || layoutHeight === 1 ? { width: 1, height: 1 } : this.getDynamicTextureResolution();\n\n        // We need to ensure that we compute the correct width and height for the final texture\n        // based on whether or not we know the platform we're running on support non power of two\n        const targetWidth = renderDims.width;\n        const targetHeight = renderDims.height;\n        let width: number;\n        let height: number;\n\n        if (this.nonPOTSupport) {\n            const targetRatio = targetWidth / targetHeight;\n            const ratio = layoutWidth / layoutHeight;\n            if (ratio < targetRatio) {\n                width = targetWidth;\n                height = layoutHeight * (targetWidth / layoutWidth);\n            } else {\n                width = layoutWidth * (targetHeight / layoutHeight);\n                height = targetHeight;\n            }\n\n            const boundedSize = this.resizeFit({ width, height });\n            width = boundedSize.width;\n            height = boundedSize.height;\n        } else {\n            width = renderDims.width;\n            height = renderDims.height;\n        }\n\n        // Do the render with the SVG we have now generated\n        const templatingContext = this.getWorkflowManager?.()?.getTemplatingContext();\n        const svgElement = getSvgElement(layout.layoutState.layout, elements, {\n            renderingConfiguration: {\n                purpose: LayoutRenderingPurpose.ThreeD,\n                templatingContext,\n            },\n        });\n        const svgStr = renderPapyrusComponentAsString(svgElement);\n        const cvg = await Pith.from(this.ctx, svgStr, {\n            anonymousCrossOrigin: true,\n            ignoreDimensions: !this.nonPOTSupport,\n            ignoreAnimation: true,\n            ignoreClear: true,\n            ignoreMouse: true,\n            enableRedraw: false,\n            createCanvas: createCanvas as any,\n            createImage: loadImage as any,\n            DOMParser: getDomParser(),\n            fetch: fetch,\n        });\n        cvg.resize(width, height);\n        await cvg.render();\n        // Callback to notify the render has completed.\n        this.onRender();\n    }\n}\n\ninterface StepAspectValue {\n    stepName: string;\n    stepAspectType: string;\n    value?: string;\n}\nexport const stepAspectValuesToDesignInputSteps = (\n    stepAspectValues: StepAspectValue[],\n    workflow: Workflow,\n): DesignInputStep[] => {\n    const designInputSteps: DesignInputStep[] = [];\n    stepAspectValues.forEach((stepAspectValue) => {\n        const step = workflow.steps.find((step) => step.stepName === stepAspectValue.stepName);\n        if (step?.type === StepType.Text && stepAspectValue.stepAspectType === \"Text\") {\n            designInputSteps.push({\n                name: step.stepName,\n                data: {\n                    text: stepAspectValue.value,\n                },\n            });\n        }\n    });\n    return designInputSteps;\n};\n\nexport const generateStateFromDesignInputSteps = async (\n    designInputSteps: DesignInputStep[],\n    workflow: Workflow,\n    layouts: ILayout[],\n    productOverlayImageUrl?: string,\n): Promise<LayoutsState> => {\n    let state: LayoutsState = {\n        serializableWorkflow: { steps: [] },\n        layouts: {},\n    };\n    // Build base layouts.\n    const layoutGroup = new GroupCommand(layouts.map((layout) => new CreateLayoutCommand(layout)));\n    state = layoutGroup.apply(state);\n    // Build base commands\n    const commands = await generateCommands(designInputSteps, workflow, layouts, productOverlayImageUrl);\n    const commandGroup = new GroupCommand(commands);\n    return commandGroup.apply(state);\n};\n","import { gql } from \"@apollo/client/core\";\nimport { GlobalPropertyState } from \"../types\";\nimport { graphQlManager } from \"../services/server\";\n\nexport const globalPropertyStateAspectFragment = gql`\n    fragment GlobalPropertyStateAspectFields on GlobalPropertyStateAspect {\n        name\n        value\n        type\n        channel\n        hidden\n        storage {\n            ... on GlobalPropertyStateColorOptionStorage {\n                customColor\n            }\n            ... on GlobalPropertyStateFileUploadStorage {\n                originalAssetKey\n                backgroundRemovedAssetKey\n                useOriginalAsset\n                colors {\n                    key\n                    browserValue\n                    pmsValue\n                }\n            }\n        }\n    }\n`;\n\nexport const createGlobalPropertyStateMutation = gql`\n    ${globalPropertyStateAspectFragment}\n    mutation CreateGlobalPropertyState($bundleId: String!) {\n        globalPropertyStateCreate(bundleId: $bundleId) {\n            id\n            aspects {\n                ...GlobalPropertyStateAspectFields\n            }\n        }\n    }\n`;\n\nexport const updateGlobalPropertyStateMutation = gql`\n    ${globalPropertyStateAspectFragment}\n    mutation UpdateGlobalPropertyState($id: String!, $aspects: [GlobalPropertyStateAspectInput]!) {\n        globalPropertyStateUpdate(id: $id, aspects: $aspects) {\n            id\n            aspects {\n                ...GlobalPropertyStateAspectFields\n            }\n        }\n    }\n`;\n\nexport const getGlobalPropertyStateQuery = gql`\n    ${globalPropertyStateAspectFragment}\n    query GetGlobalPropertyState($bundleId: String!) {\n        globalPropertyState(bundleId: $bundleId) {\n            id\n            aspects {\n                ...GlobalPropertyStateAspectFields\n            }\n        }\n    }\n`;\n\n/**\n * Gets the raw Global Property State for a bundle.\n */\nexport const getGlobalPropertyStateForBundle = async (bundleId: string): Promise<GlobalPropertyState | undefined> => {\n    const resp = await graphQlManager.getShadowGraphqlClient().query<{ globalPropertyState: GlobalPropertyState }>({\n        query: getGlobalPropertyStateQuery,\n        fetchPolicy: \"cache-first\",\n        errorPolicy: \"all\",\n        variables: {\n            bundleId,\n        },\n    });\n    return resp.data.globalPropertyState;\n};\n","import { gql } from \"@apollo/client/core\";\nimport { additionalProductFragment } from \"../query\";\nimport { globalPropertyStateAspectFragment } from \"../GlobalPropertyStateManager/query\";\n\nconst productFields = (filterWorkflows: boolean) => gql`\n    ${additionalProductFragment}\n    fragment ProductFields on Product {\n        id\n        basePrice\n        enabled\n        imageUrl\n        minimumOrderQuantity\n        integrationProducts {\n            id\n            externalProductId\n            externalVariantId\n            additionalExternalProductId\n            additionalExternalVariantId\n            additionalIntegrationProduct {\n                ...AdditionalIntegrationProductFields\n            }\n            integration {\n                id\n                enabled\n                externalIntegrationId\n                type\n                isCurrent\n            }\n        }\n        modelUrl\n        name\n        description\n        overlayImageUrl\n        preloadImageUrl\n        sku\n        skuCode\n        workflows${filterWorkflows ? \"(filters: $productWorkflowFilters)\" : \"\"} {\n            id\n            index\n            friendlyName\n            isPresent\n            workflowName\n            imageUrl\n        }\n        productTags {\n            id\n            name\n        }\n    }\n`;\n\nconst productCollectionProductFieldsFragment = (filterWorkflows: boolean) => gql`\n    ${productFields(filterWorkflows)}\n    fragment ProductCollectionProductFields on ProductCollectionProduct {\n        id\n        productId\n        workflowId\n        product {\n            ...ProductFields\n        }\n    }\n`;\n\nexport const productCollectionFieldsFragment = (eagerFetchProducts: boolean, filterWorkflows: boolean = false) => gql`\n    ${eagerFetchProducts ? productCollectionProductFieldsFragment(filterWorkflows) : \"\"}\n    fragment ProductCollectionFields on ProductCollection {\n        id\n        name\n        description\n        dispatchStartDate\n        dispatchEndDate\n        total\n        productCollectionCustomers {\n            id\n            customer {\n                id\n            }\n        }\n        image {\n            key\n            name\n            fileLink\n        }\n        globalPropertyConfiguration {\n            id\n            aspects {\n                name\n                type\n                title\n                description\n                entityId\n                mandatory\n                silent\n                conditions {\n                    targetAspectName\n                    action\n                    requiredVariantSelections\n                }\n                conditionMode\n                data {\n                    fileUpload {\n                        colorPickerEnabled\n                        pmsPickerEnabled\n                        colorOptionId\n                    }\n                    text {\n                        templatingEnabled\n                    }\n                }\n            }\n        }\n        ${eagerFetchProducts ? \"productCollectionProducts { ...ProductCollectionProductFields }\" : \"\"}\n    }\n`;\n\n// For small things that you would expect to always have\nexport const bundleBaseFieldsFragment = gql`\n    fragment BundleBaseFields on Bundle {\n        id\n        dispatchDate\n        purchaseOrder\n        createdAt\n        updatedAt\n        name\n        completed\n        template\n        templateLocked\n        templateStatus\n        transactionsCount\n        productsCount\n        totalPriceSubunits\n        quoteId\n        orderId\n        externalOrderId\n        internalOrderId\n        workflowViewerLink\n        workflowViewerAmendLink\n    }\n`;\n\nexport const getBundleQuery = (eagerFetchProducts: boolean) => gql`\n    ${globalPropertyStateAspectFragment}\n    ${productCollectionFieldsFragment(eagerFetchProducts)}\n    ${bundleBaseFieldsFragment}\n    query GetBundle($id: String!) {\n        globalPropertyState(bundleId: $id) {\n            id\n            aspects {\n                ...GlobalPropertyStateAspectFields\n            }\n        }\n        bundles(ids: [$id]) {\n            ...BundleBaseFields\n            bundleStateData\n            metadata {\n                key\n                value\n            }\n            partner {\n                id\n            }\n            productCollection {\n                ...ProductCollectionFields\n            }\n            transactionIds\n            bundleShareActions {\n                id\n                title\n                type\n                stakeholderType\n                precedence\n                url\n            }\n        }\n    }\n`;\n\nexport const getBundleStakeholdersQuery = gql`\n    query GetBundleStakeholders($id: String!) {\n        bundles(ids: [$id]) {\n            id\n            dispatchDate\n            purchaseOrder\n            completed\n            workflowViewerLink\n            workflowViewerAmendLink\n            currentBundleStakeholder {\n                id\n                authorizationStatus\n                authorizationDate\n                authorizationNote\n                customer {\n                    id\n                    emailAddress\n                    firstName\n                    lastName\n                    phoneNumber\n                    partner {\n                        id\n                    }\n                }\n                type\n            }\n            bundleStakeholders {\n                id\n                authorizationStatus\n                authorizationDate\n                authorizationNote\n                customer {\n                    id\n                    emailAddress\n                    firstName\n                    lastName\n                    phoneNumber\n                    partner {\n                        id\n                    }\n                }\n                type\n            }\n        }\n    }\n`;\n\nexport const getBundlesAndStakeholdersForCustomerQuery = gql`\n    query GetBundlesForCustomer($id: String!) {\n        customers(ids: [$id]) {\n            bundleStakeholders {\n                id\n                authorizationStatus\n                authorizationDate\n                authorizationNote\n                type\n                bundle {\n                    id\n                    dispatchDate\n                    purchaseOrder\n                    completed\n                    workflowViewerLink\n                    workflowViewerAmendLink\n                    name\n                    createdAt\n                    metadata {\n                        key\n                        value\n                    }\n                    partner {\n                        id\n                    }\n                }\n            }\n        }\n    }\n`;\n\nexport const getProductCollectionProductsQuery = gql`\n    ${productCollectionProductFieldsFragment(false)}\n    query GetProductCollectionProducts($id: String!, $productIds: [String!]) {\n        productCollections(ids: [$id], productIds: $productIds) {\n            id\n            productCollectionProducts {\n                ...ProductCollectionProductFields\n            }\n        }\n    }\n`;\n\nexport const getProductCollectionProductsFilteredQuery = gql`\n    query GetProductCollectionForFilteredProducts(\n        $id: String!\n        $filters: ProductCollectionProductFilterInput\n        $tags: ProductCollectionProductTagFilterInput\n        $sortKey: ProductCollectionProductSortKey\n        $sortDescending: Boolean\n    ) {\n        productCollections(ids: [$id]) {\n            id\n            productCollectionProducts(\n                filters: $filters\n                tags: $tags\n                sortKey: $sortKey\n                sortDescending: $sortDescending\n            ) {\n                id\n                product {\n                    id\n                }\n            }\n        }\n    }\n`;\n\nexport const getProductCollectionProductsFeedQuery = gql`\n    ${productCollectionProductFieldsFragment(true)}\n    query GetProductCollectionForProductsFeed(\n        $id: String!\n        $limit: Int\n        $offset: Int\n        $productFilters: ProductCollectionProductFilterInput\n        $productWorkflowFilters: MetafieldFilterListInput\n        $tags: ProductCollectionProductTagFilterInput\n        $sortKey: ProductCollectionProductSortKey\n        $sortDescending: Boolean\n        $quickSearch: String\n    ) {\n        productCollections(ids: [$id]) {\n            id\n            productCollectionProductsFeed(\n                filters: $productFilters\n                workflowFilters: $productWorkflowFilters\n                tags: $tags\n                limit: $limit\n                offset: $offset\n                sortKey: $sortKey\n                sortDescending: $sortDescending\n                quickSearch: $quickSearch\n            ) {\n                items {\n                    ...ProductCollectionProductFields\n                }\n                total\n            }\n        }\n    }\n`;\n\nexport const createBundleMutation = (eagerFetchProducts: boolean) => gql`\n    ${productCollectionFieldsFragment(eagerFetchProducts)}\n    mutation CreateBundle(\n        $collectionId: String\n        $initialMetadata: [MetadataInput!]\n        $marketplaceThemeInstallId: String\n        $marketplaceThemeInstallConfigurationId: String\n    ) {\n        bundleCreate(\n            collectionId: $collectionId\n            metadata: $initialMetadata\n            marketplaceThemeInstallId: $marketplaceThemeInstallId\n            marketplaceThemeInstallConfigurationId: $marketplaceThemeInstallConfigurationId\n        ) {\n            id\n            bundleOwnerId\n            metadata {\n                key\n                value\n            }\n            name\n            partner {\n                id\n            }\n            productCollection {\n                ...ProductCollectionFields\n            }\n        }\n    }\n`;\n\nexport const duplicateBundleMutation = () => gql`\n    mutation DuplicateBundle(\n        $id: String!\n        $template: Boolean\n        $marketplaceThemeInstallId: String\n        $marketplaceThemeInstallConfigurationId: String\n        $duplicateTransactions: Boolean\n    ) {\n        bundleDuplicate(\n            id: $id\n            template: $template\n            marketplaceThemeInstallId: $marketplaceThemeInstallId\n            marketplaceThemeInstallConfigurationId: $marketplaceThemeInstallConfigurationId\n            duplicateTransactions: $duplicateTransactions\n        ) {\n            id\n            bundleOwnerId\n            partner {\n                id\n            }\n        }\n    }\n`;\n\nexport const updateBundleMutation = gql`\n    mutation UpdateBundle(\n        $id: String!\n        $name: String\n        $metadata: [MetadataInput!]\n        $bundleStateData: String\n        $dispatchDate: String\n        $purchaseOrder: String\n    ) {\n        bundleUpdate(\n            id: $id\n            name: $name\n            metadata: $metadata\n            bundleStateData: $bundleStateData\n            dispatchDate: $dispatchDate\n            purchaseOrder: $purchaseOrder\n        ) {\n            id\n        }\n    }\n`;\n\nexport const bundleAddTransactionMutation = gql`\n    mutation BundleAddTransaction($id: String!, $transactionId: String!) {\n        bundleAddTransaction(id: $id, transactionId: $transactionId) {\n            id\n        }\n    }\n`;\n\nexport const bundleAddTransactionsMutation = gql`\n    mutation BundleAddTransactions($id: String!, $transactionIds: [String!]!, $transactionOwnerIds: [String!]) {\n        bundleAddTransactions(id: $id, transactionIds: $transactionIds, transactionOwnerIds: $transactionOwnerIds) {\n            id\n        }\n    }\n`;\n\nexport const bundleRemoveTransactionMutation = gql`\n    mutation BundleRemoveTransaction(\n        $id: String!\n        $transactionId: String!\n        $name: String\n        $metadata: [MetadataInput!]\n        $bundleStateData: String\n    ) {\n        bundleRemoveTransaction(id: $id, transactionId: $transactionId) {\n            id\n        }\n        bundleUpdate(id: $id, name: $name, metadata: $metadata, bundleStateData: $bundleStateData) {\n            id\n        }\n    }\n`;\n\nexport const bundleRemoveTransactionsMutation = gql`\n    mutation BundleRemoveTransactions(\n        $id: String!\n        $transactionIds: [String!]!\n        $name: String\n        $metadata: [MetadataInput!]\n        $bundleStateData: String\n    ) {\n        bundleRemoveTransactions(id: $id, transactionIds: $transactionIds) {\n            id\n        }\n        bundleUpdate(id: $id, name: $name, metadata: $metadata, bundleStateData: $bundleStateData) {\n            id\n        }\n    }\n`;\n\nexport const bundleAddStakeholderMutation = gql`\n    mutation BundleAddStakeholder($id: String!, $details: CustomerDetailsInput!, $type: String!) {\n        bundleAddStakeholder(id: $id, details: $details, type: $type) {\n            id\n            bundleStakeholders {\n                id\n                customer {\n                    id\n                    emailAddress\n                    firstName\n                    lastName\n                    phoneNumber\n                    partner {\n                        id\n                    }\n                }\n                type\n            }\n        }\n    }\n`;\n\nexport const bundleRemoveStakeholderMutation = gql`\n    mutation BundleAddStakeholder($id: String!, $emailAddress: String!) {\n        bundleRemoveStakeholder(id: $id, emailAddress: $emailAddress) {\n            id\n        }\n    }\n`;\n\nexport const bundleUpdateStakeholdersMutation = gql`\n    mutation BundleUpdateStakeholders($id: String!, $input: [BundleStakeholderInput!]!) {\n        bundleUpdateStakeholders(id: $id, input: $input) {\n            id\n            bundleStakeholders {\n                id\n                customer {\n                    id\n                    emailAddress\n                    firstName\n                    lastName\n                    phoneNumber\n                    partner {\n                        id\n                    }\n                }\n                type\n            }\n        }\n    }\n`;\n\nexport const bundleUpdateTransactionOrderMutation = gql`\n    mutation BundleUpdateTransactionOrder($id: String!, $transactionIds: [String!]!) {\n        bundleUpdateTransactionOrder(id: $id, transactionIds: $transactionIds) {\n            id\n        }\n    }\n`;\n\nexport const bundleAssignProductCollectionMutation = (eagerFetchProducts: boolean) => gql`\n    ${productCollectionFieldsFragment(eagerFetchProducts)}\n    mutation BundleAssignProductCollection($id: String!, $productCollectionId: String!) {\n        bundleAssignProductCollection(id: $id, collectionId: $productCollectionId) {\n            id\n            productCollection {\n                ...ProductCollectionFields\n            }\n        }\n    }\n`;\n\nexport const bundleAssignGlobalPropertyConfiguration = gql`\n    mutation AssignGlobalPropertyConfiguration($bundleId: String!, $globalPropertyConfigurationId: String!) {\n        bundleUpdate(id: $bundleId, globalPropertyConfigurationId: $globalPropertyConfigurationId) {\n            id\n        }\n    }\n`;\n\nexport const customerBundlesFeedQuery = (includeMetadata: boolean) => gql`\n    ${bundleBaseFieldsFragment}\n    query CustomerBundlesFeed($id: String!, $limit: Int!, $offset: Int!, $template: Boolean, $templateStatus: BundleTemplateStatus, $ordered: Boolean) {\n        customerBundlesFeed(id: $id, limit: $limit, offset: $offset, template: $template, templateStatus: $templateStatus, ordered: $ordered) {\n            items {\n                ...BundleBaseFields\n                productCollection {\n                    id\n                    name\n                    description\n                    dispatchStartDate\n                    dispatchEndDate\n                    image {\n                        key\n                        name\n                        fileLink\n                    }\n                    globalPropertyConfiguration {\n                        id\n                    }\n                }\n                ${includeMetadata ? \"metadata { key, value }\" : \"\"}\n            }\n            total\n        }\n    }\n`;\n\nexport const finalizeUpdateBundleMutation = gql`\n    mutation FinalizeUpdateBundle($bundleId: String!) {\n        bundleFinalizeUpdate(bundleId: $bundleId)\n    }\n`;\n\nexport const bundleApprovalQuery = gql`\n    mutation ApproveBundle($id: String!, $note: String, $stakeholderId: String) {\n        bundleApprove(id: $id, note: $note, stakeholderId: $stakeholderId)\n    }\n`;\n\nexport const bundleRejectionQuery = gql`\n    mutation RejectBundle($id: String!, $note: String, $stakeholderId: String) {\n        bundleReject(id: $id, note: $note, stakeholderId: $stakeholderId)\n    }\n`;\n\nexport const transactionApprovalQuery = gql`\n    mutation ApproveTransaction($id: String!, $note: String) {\n        transactionApprove(id: $id, note: $note)\n    }\n`;\n\nexport const transactionRejectionQuery = gql`\n    mutation RejectTransaction($id: String!, $note: String) {\n        transactionReject(id: $id, note: $note)\n    }\n`;\n\nexport const createRecipientQuery = gql`\n    mutation CreateRecipient(\n        $firstName: String\n        $lastName: String\n        $address: String\n        $suburb: String\n        $state: String\n        $email: String\n        $postalCode: String\n        $country: String\n        $mobile: String\n        $company: String\n        $apartment: String\n        $customField1: String\n        $customField2: String\n        $customField3: String\n        $customField4: String\n        $customField5: String\n        $conversionConfigurationId: String\n    ) {\n        recipientCreate(\n            firstName: $firstName\n            lastName: $lastName\n            address: $address\n            suburb: $suburb\n            state: $state\n            email: $email\n            postalCode: $postalCode\n            country: $country\n            mobile: $mobile\n            company: $company\n            apartment: $apartment\n            customField1: $customField1\n            customField2: $customField2\n            customField3: $customField3\n            customField4: $customField4\n            customField5: $customField5\n            conversionConfigurationId: $conversionConfigurationId\n        ) {\n            id\n        }\n    }\n`;\n\nexport const updateRecipientQuery = gql`\n    mutation UpdateRecipient(\n        $id: String!\n        $firstName: String\n        $lastName: String\n        $address: String\n        $suburb: String\n        $state: String\n        $email: String\n        $postalCode: String\n        $country: String\n        $mobile: String\n        $company: String\n        $apartment: String\n        $customField1: String\n        $customField2: String\n        $customField3: String\n        $customField4: String\n        $customField5: String\n        $conversionConfigurationId: String\n        $prevalidated: Boolean\n    ) {\n        recipientUpdate(\n            id: $id\n            firstName: $firstName\n            lastName: $lastName\n            address: $address\n            suburb: $suburb\n            state: $state\n            email: $email\n            postalCode: $postalCode\n            country: $country\n            mobile: $mobile\n            company: $company\n            apartment: $apartment\n            customField1: $customField1\n            customField2: $customField2\n            customField3: $customField3\n            customField4: $customField4\n            customField5: $customField5\n            conversionConfigurationId: $conversionConfigurationId\n            prevalidated: $prevalidated\n        ) {\n            id\n        }\n    }\n`;\n\nexport const transactionAttachRecipientQuery = gql`\n    mutation AtttachRecipient($id: String!, $recipientId: String!) {\n        transactionAttachRecipient(id: $id, recipientId: $recipientId) {\n            id\n        }\n    }\n`;\n\nexport const deleteBundleQuery = gql`\n    mutation DeleteBundle($id: String!) {\n        bundleDelete(id: $id)\n    }\n`;\n\nexport const findBundleForTransactionsQuery = gql`\n    query FindBundleForTransactions($ids: [String!]!) {\n        transactions(ids: $ids) {\n            id\n            bundle {\n                id\n            }\n        }\n    }\n`;\n\nexport const bundleEmailMutation = gql`\n    mutation EmailBundleShareLink($bundleId: String!, $email: String!, $firstName: String, $lastName: String) {\n        bundleEmailSharePageLink(bundleId: $bundleId, email: $email, firstName: $firstName, lastName: $lastName) {\n            id\n        }\n    }\n`;\n","import { FrameElement, IllustrationElement, LayoutsState } from \"../types\";\n\n/**\n * Replacer function for JSON.stringify that sorts object keys alphabetically.\n * @param key The key of the current property being processed.\n * @param value The value of the current property being processed.\n * @returns The processed value with sorted keys if it's an object, otherwise the original value.\n */\nexport const sortKeysReplacer = (key: string, value: any): any => {\n    // Check if the value is a non-null object that is not an Array\n    if (value && typeof value === \"object\" && !Array.isArray(value)) {\n        // Create a new object with keys sorted alphabetically\n        return Object.keys(value)\n            .sort()\n            .reduce((sorted, key) => {\n                // Recursively process the value to ensure nested objects are also sorted\n                sorted[key] = value[key];\n                return sorted;\n            }, {} as any);\n    }\n    // Return primitives and arrays as is\n    return value;\n};\n\n/**\n * A helper to remove unwanted local cache data from the state before sending to the server.\n */\nexport const dehydrateState = (state: LayoutsState) => {\n    for (const el of Object.values(state.layouts)\n        .map((lay) => lay.elements)\n        .flat()) {\n        // FIXME:\" Can we achieve this better? Maybe non serializable fields could be removed entirely from the element.\"\n        if (el.type === \"illustration\") {\n            delete (el as IllustrationElement).cachedObjectURL;\n            // When a src is provided for an svg let's remove the parsed data from the network request.\n            if ((el as IllustrationElement).src) delete (el as IllustrationElement).svg;\n        }\n        if (el.type === \"frame\") {\n            delete (el as FrameElement).pattern?.svg;\n        }\n    }\n    // Ensure the __typename field used by apollo is not sent to the server.\n    deleteFieldNameFromObjectRecursive(state, \"__typename\");\n    return state;\n};\n\nconst deleteFieldNameFromObjectRecursive = (obj: any, fieldName: string) => {\n    if (typeof obj !== \"object\" || obj === null) {\n        return;\n    }\n    for (const key in obj) {\n        if (key === fieldName) {\n            delete obj[key];\n        } else {\n            deleteFieldNameFromObjectRecursive(obj[key], fieldName);\n        }\n    }\n};\n","import {\n    FrameMetadata,\n    IllustrationMetadata,\n    ModuleMetadata,\n    RegionElement,\n    TextMetadata,\n    StepSelections,\n    Transaction,\n    CommandWithFollowup,\n    Product,\n    Customer,\n    SilentStepData,\n    Placeable,\n    StepStorage,\n    VariantResource,\n    ILayout,\n    LayoutState,\n    SerializableStep,\n    Workflow,\n    LayoutsState,\n    StepType,\n    ModelStepData,\n    MaterialStepData,\n    SerializableWorkflow,\n    IllustrationElement,\n    FrameElement,\n    Step,\n    AnyStepData,\n    DigitalContentStepData,\n    FrameStepData,\n    IllustrationStepData,\n    ModuleStepData,\n    PictureStepData,\n    QuestionStepData,\n    ShapeStepData,\n    TextStepData,\n} from \"../types\";\nimport {\n    getAllScenes,\n    getActiveScenes,\n    getRenderableRelevantScenes,\n    stepConditionsAreSatisfied,\n    WorkflowScene,\n} from \"./scenes\";\nimport { PromiseQueue, QueueablePromise } from \"../util/PromiseQueue\";\nimport { FetchResult, MutationOptions } from \"@apollo/client/core\";\nimport { FrameService } from \"../services/steps/frame/Service\";\nimport { Poller } from \"../util/Poller\";\nimport cloneDeep from \"lodash.clonedeep\";\nimport isEqual from \"lodash.isequal\";\nimport { SilentStepHandler, SilentStepTriggerResult } from \"../services/SilentStepHandler\";\nimport { digitalContentStepService } from \"../services/steps/digitalContent\";\nimport { frameStepService } from \"../services/steps/frame\";\nimport { illustrationStepService } from \"../services/steps/illustration\";\nimport { materialStepService } from \"../services/steps/material\";\nimport { modelStepService } from \"../services/steps/model\";\nimport { moduleStepService } from \"../services/steps/module\";\nimport { pictureStepService } from \"../services/steps/picture\";\nimport { questionStepService } from \"../services/steps/question\";\nimport { shapeStepService } from \"../services/steps/shape\";\nimport { textStepService } from \"../services/steps/text\";\nimport { ModuleProduct } from \"../module/ModuleProduct\";\nimport moduleResolver from \"../module/resolver\";\nimport { UnhandledBehaviorError } from \"../util/exception\";\nimport { LayoutPreviewService } from \"./LayoutPreviewService\";\nimport type { ModelContainer, ThreeDPreviewService } from \"@repo/preview\";\nimport { SpiffCommerceClient } from \"../client\";\nimport { graphQlManager } from \"../services/server\";\nimport { getConversionConfigurationQuery, getTransactionStakeholdersQuery } from \"../query\";\nimport { WorkflowExperience } from \"../WorkflowExperience\";\nimport { CanvasCommand, DeleteElementCommand, GroupCommand, UpdateWorkflowStateCommand } from \"../command\";\nimport { CommandContext, CommandState } from \"../CommandContext\";\nimport { generate } from \"../util/guid\";\nimport {\n    createRecipientQuery,\n    transactionApprovalQuery,\n    transactionAttachRecipientQuery,\n    transactionRejectionQuery,\n    updateRecipientQuery,\n} from \"../Bundle/query\";\nimport type { ConversionConfiguration } from \"@repo/types\";\nimport { ConversionDataType } from \"../types\";\nimport { FrameStepHandle, optionService, Recipient, WorkflowExperienceEventType, WorkflowPanel } from \"..\";\nimport { GraphQlClientFunc } from \"../services/graphql\";\nimport { dehydrateState, sortKeysReplacer } from \"../util/object\";\n\nexport interface SilentIllustrationStepData extends SilentStepData, Placeable {}\n\nexport interface ProductOverlayStepData extends SilentStepData, Placeable {}\n\nexport interface EditedSteps {\n    [stepName: string]: boolean;\n}\n\nexport interface MandatorySteps {\n    [stepName: string]: boolean;\n}\n\nexport type StepElements = {\n    [key: string]: RegionElement[];\n};\n\nexport type StepInitialised = {\n    [key: string]: boolean;\n};\n\nexport type StepMetadata = FrameMetadata | IllustrationMetadata | ModuleMetadata | TextMetadata;\n\n// Non-variant decisions made in each step.\nexport interface WorkflowStorage {\n    [stepName: string]: StepStorage;\n}\n\nexport interface WorkflowMetadata {\n    [stepName: string]: StepMetadata;\n}\n\nexport interface WorkflowSelections {\n    [stepName: string]: {\n        selections: VariantResource[];\n    };\n}\n\nexport interface InformationResult {\n    message: string;\n    messageType: InformationMessageType;\n    stepID: string;\n}\n\nexport enum InformationMessageType {\n    Error = \"Error\",\n    Warning = \"Warning\",\n    Info = \"Info\",\n}\n\n/**\n * Services required for the operation of individual steps.\n */\nexport interface StepSpecificServices {\n    frameService?: FrameService;\n    module?: ModuleProduct;\n}\n\nexport interface ValidationErrors {\n    steps: Map<string, Map<string, string>>;\n}\n\nexport type DesignCreationProgressUpdate = (message: string) => void;\nexport type ConfirmCallback = (isConfirmed: boolean) => void;\nexport type EditedCallback = (editedSteps: EditedSteps) => void;\nexport type ElementsCallback = (elements: StepElements) => void;\nexport type EnsuredInitialisedCallback = (ensuredInitialised: boolean) => void;\nexport type InformationResultCallback = (messages: InformationResult[]) => void;\nexport type InitCallback = (stepInitialised: StepInitialised) => void;\nexport type MakingAdjustmentsCallback = (makingAdjustments: string) => void;\nexport type MandatoryCallback = (mandatorySteps: MandatorySteps) => void;\nexport type MetadataCallback = (metadata: WorkflowMetadata) => void;\nexport type SelectionCallback = (callbackOptions: {\n    selectionCost: number;\n    selections: StepSelections;\n    traversableScenes: WorkflowScene[];\n}) => void;\nexport type StepSpecificStorageCallback = (selections: StepStorage) => void;\nexport type StorageCallback = (storage: WorkflowStorage) => void;\nexport type ValidationCallback = (validationErrors: ValidationErrors) => void;\nexport type RecipientCallback = (recipient: Recipient | undefined) => void;\n\nexport type StateMutationFunc = (\n    options?: Omit<MutationOptions, \"mutation\">,\n) => Promise<FetchResult<any, Record<string, any>, Record<string, any>>>;\n\nexport type GraphQlRequest = (\n    options?: Omit<MutationOptions, \"mutation\">,\n) => Promise<FetchResult<any, Record<string, any>, Record<string, any>>>;\n\nexport const STATE_DEBOUNCE_TIME = 1000;\n\n/**\n * Encapsulates the behavior of updating layout state against a transaction on the server.\n */\nexport class WorkflowStatePromise extends QueueablePromise {\n    private readonly update: () => Promise<any>;\n    constructor(update: () => Promise<any>) {\n        super();\n        this.update = update;\n    }\n    public async execute() {\n        await this.update();\n        await new Promise<void>((resolve) => {\n            window.setTimeout(() => {\n                resolve();\n            }, STATE_DEBOUNCE_TIME);\n        });\n    }\n}\n\nexport interface WorkflowManager {\n    addPoller: (poller: Poller) => void;\n    addConfirmCallback: (callback: ConfirmCallback) => void;\n    addEditedCallback: (callback: EditedCallback) => void;\n    addElementsCallback: (callback: ElementsCallback) => void;\n    addInformationResultCallback: (callback: InformationResultCallback) => void;\n    addInitCallback: (callback: InitCallback) => void;\n    addMakingAdjustmentsCallback: (callback: MakingAdjustmentsCallback) => void;\n    addMandatoryCallback: (callback: MandatoryCallback) => void;\n    addMetadataCallback: (callback: MetadataCallback) => void;\n    addSelectionCallback: (callback: SelectionCallback) => void;\n    addStepSpecificStorageCallback: (callback: StepSpecificStorageCallback, stepName: string) => void;\n    addStorageCallback: (callback: StorageCallback) => void;\n    addValidationCallback: (callback: ValidationCallback) => void;\n    addRecipientCallback: (callback: RecipientCallback) => void;\n    removeRecipientCallback: (callback: RecipientCallback) => void;\n    getCommandDispatcher: () => (command: CanvasCommand) => void;\n    getCommandContext: () => CommandContext;\n    getLayouts: () => ILayout[];\n    getAllLayoutData: () => LayoutState[];\n    getLayoutPreviewService: () => LayoutPreviewService | undefined;\n    getPreviewService: () => ThreeDPreviewService | undefined;\n    getRegionElements: (stepName: string) => RegionElement[];\n    getSerializedStep: (stepName: string, serializedSteps: SerializableStep[]) => SerializableStep | undefined;\n    getStepSpecificServices: (stepName: string) => StepSpecificServices | undefined;\n    getStepStorage: (stepName: string) => StepStorage | undefined;\n    getMetadata: (stepName: string) => StepMetadata | undefined;\n    getWorkflowMetadata: () => WorkflowMetadata;\n    getInformationResults(): InformationResult[];\n    getTransactionCustomer: () => Customer | undefined;\n    setTransactionCustomer: (customer: Customer) => void;\n\n    /**\n     * Sets the current workflow for this experience.\n     * @param workflow The new workflow to set.\n     * @returns A promise that resolves when the workflow has been set.\n     */\n    setWorkflow: (workflow: Workflow) => Promise<void>;\n\n    /**\n     * @deprecated Use setTransactionCustomer instead.\n     */\n    setTransactionCustomerDetails: (details: { email: string }) => void;\n    getWorkflowSelections: () => WorkflowSelections;\n    getStepSelections: () => StepSelections;\n    /**\n     * A promise resolving when the initial state of the workflow has completed loading.\n     */\n    getInitializationPromise: () => Promise<void>;\n    /**\n     * Returns true when the initial state of the workflow has been loaded and settled.\n     */\n    isInitialized(): boolean;\n    /**\n     * Returns a set of strings representing the identifiers of the minimal set of options\n     * required to satisfy the default initial loaded state of the workflow.\n     */\n    getInitialOptionIds(existingSelections?: StepSelections): Promise<Set<string>>;\n    markStepsAsInitialised: (stepNames: string[]) => void;\n    getUpdatesPending: () => boolean;\n    markUpdateCompleted: (id: string) => void;\n    markUpdatePending: () => string;\n    outstandingRequestsPromise: () => Promise<void>;\n    reset: () => Promise<void>;\n    setCurrentAdjustingStepId: (stepId: string) => void;\n    setEditedStatus: (stepName: string, status: boolean) => void;\n    setInformationResults: (results: InformationResult[]) => void;\n    setMandatoryFulfilled: (stepName: string, status: boolean) => void;\n    getMandatoryUnfulfilledSteps: () => Promise<string[]>;\n    setSelectionsAndElements: (\n        stepName: string,\n        variants: VariantResource[],\n        elements: RegionElement[],\n        callback?: () => Promise<void>,\n    ) => Promise<void>;\n    getStateHash(): Promise<string>;\n    setStepError: (stepName: string, field: string, error: string | undefined) => void;\n    /** Gets any validation errors for a specific step, or `undefined` if there are none. */\n    getStepErrors: (stepName: string) => Map<string, string> | undefined;\n    /** Gets validation errors for all steps. Only steps with errors will be present. */\n    getValidationErrors: () => ValidationErrors;\n    toggleDesignConfirmed: () => void;\n    updateMetadata: (stepName: string, update: any) => void;\n    /**\n     * @deprecated State updates are being pulled internally. This function will be removed in the future.\n     */\n    updateStateWithServerImmediate: (getReducerState: () => CommandState) => Promise<void>;\n    updateStorage: (stepName: string, update: StepStorage) => void;\n    getModelContainer: () => ModelContainer | undefined;\n    setModelContainer: (container: ModelContainer) => void;\n\n    /**\n     * Injects the model of this product into the preview service.\n     * This also overwrites the internal preview service.\n     * @param previewService The preview service to inject into.\n     * @param refocusCamera Optional: Run camera focus Defaults to `true`.\n     */\n    injectIntoPreviewService(previewService: ThreeDPreviewService, refocusCamera?: boolean): Promise<void>;\n\n    /**\n     * Ejects the model of this product from the preview service. This also sets the internal preview service to undefined.\n     */\n    ejectFromPreviewService(): void;\n\n    /**\n     * Enables or disables uploading of workflow state to the server.\n     * @param enabled When true, workflow state will be uploaded to the server.\n     */\n    setWorkflowStateSyncEnabled: (enabled: boolean) => void;\n\n    /**\n     * Returns the client that was responsible for spawning this manager.\n     */\n    getClient(): SpiffCommerceClient;\n\n    /**\n     * Returns the workflow experience that was responsible for creating this manager.\n     */\n    getWorkflowExperience(): WorkflowExperience;\n\n    /**\n     * Re-fetches the transactionShareActions for this WorkflowManager's Transaction object.\n     * The updated transactionShareActions overwrite the existing values on the Transaction object returned by `getTransaction()`.\n     */\n    updateTransactionShareActions(): Promise<void>;\n\n    /**\n     * Re-fetches the stakeholders and currentStakeholder for this WorkflowManager's Transaction object.\n     * The updated stakeholders and currentStakeholder overwrite the existing values on the Transaction object returned by `getTransaction()`.\n     */\n    updateTransactionStakeholders(): Promise<void>;\n\n    /**\n     * Returns the tags for a step.\n     */\n    getStepTags(stepId: string): string[];\n\n    approveTransaction(note?: string): Promise<void>;\n\n    rejectTransaction(note?: string): Promise<void>;\n\n    /**\n     * Create or amend the recipient fo the transaction.\n     */\n    updateRecipient(\n        firstName?: string,\n        lastName?: string,\n        address?: string,\n        suburb?: string,\n        state?: string,\n        email?: string,\n        postalCode?: string,\n        country?: string,\n        mobile?: string,\n        company?: string,\n        apartment?: string,\n        customField1?: string,\n        customField2?: string,\n        customField3?: string,\n        customField4?: string,\n        customField5?: string,\n        conversionConfigurationId?: string,\n        prevalidated?: boolean,\n    ): Promise<void>;\n\n    /**\n     * Returns the context object used for text templating.\n     */\n    getTemplatingContext(): { [key: string]: any };\n\n    traversableScenes(): Promise<WorkflowScene[]>;\n}\n\nconst createLayoutsFromPanels = (panels: WorkflowPanel[]): ILayout[] => {\n    return panels\n        .sort((a, b) => a.index - b.index)\n        .map((panel: WorkflowPanel): ILayout => {\n            return {\n                id: generate(),\n                panelId: panel.name,\n                name: panel.name,\n                title: panel.title,\n                index: panel.index,\n                createdAt: new Date(),\n                updatedAt: new Date(),\n                transparentBackground: panel.transparentBackground,\n                height: panel.height,\n                width: panel.width,\n                previewRegion: panel.previewRegion,\n                useEditableArea: panel.useEditableArea,\n                editableArea: panel.editableArea,\n            };\n        });\n};\n\nconst getInitialLayouts = (transaction: Transaction, workflow: Workflow) => {\n    const serializedState = transaction.workflowState;\n    const initialReducerState = serializedState ? (JSON.parse(serializedState) as LayoutsState) : undefined;\n    if (initialReducerState) {\n        return Object.values(initialReducerState.layouts).map((state) => state.layout);\n    }\n    return createLayoutsFromPanels(workflow.panels);\n};\n\nexport class InternalWorkflowManager implements WorkflowManager {\n    readonly client: SpiffCommerceClient;\n    readonly experience: WorkflowExperience;\n\n    private reloadedState?: LayoutsState;\n    private ownerCustomer?: Customer;\n    private updateTransaction: StateMutationFunc;\n    private graphQlClient: GraphQlClientFunc;\n    private confirmedDesign: boolean;\n    private editedSteps: EditedSteps;\n    private informationResults: InformationResult[];\n    private layouts: ILayout[];\n    private mandatorySteps: MandatorySteps;\n    private pendingUpdates: string[];\n    private selectionCost: number;\n    private stepSpecificServices: { [stepName: string]: StepSpecificServices };\n    private previewService: ThreeDPreviewService | undefined;\n    private pollers: Poller[];\n    private commandContext: CommandContext;\n    private validationErrors: ValidationErrors;\n\n    private stepElements: StepElements;\n    private stepInitialised: StepInitialised;\n    private stepMetadata: WorkflowMetadata;\n    private stepSelections: StepSelections;\n    private storage: WorkflowStorage;\n\n    private confirmCallbacks: ConfirmCallback[];\n    private editedCallbacks: EditedCallback[];\n    private elementsCallbacks: ElementsCallback[];\n    private informationResultCallbacks: InformationResultCallback[];\n    private initCallbacks: InitCallback[];\n    private makingAdjustmentsCallback: MakingAdjustmentsCallback[];\n    private mandatoryCallbacks: MandatoryCallback[];\n    private metadataCallbacks: MetadataCallback[];\n    private selectionCallbacks: SelectionCallback[];\n    private stepSpecificStorageCallbacks: {\n        [stepName: string]: StepSpecificStorageCallback[];\n    };\n    private storageCallbacks: StorageCallback[];\n    private validationCallbacks: ValidationCallback[];\n    private recipientCallbacks: RecipientCallback[];\n\n    private allScenes: WorkflowScene[];\n\n    private currentAdjustingStepId: string;\n\n    private renderableContextService?: LayoutPreviewService;\n    private workflowStatePromiseQueue: PromiseQueue<WorkflowStatePromise> = new PromiseQueue<WorkflowStatePromise>(1);\n\n    private initializationPromise: Promise<void>; // A promise that resolves when the initial state of the workflow has been loaded and settled.\n    private initialized: boolean = false; // True when the initial state of the workflow has been loaded and settled.\n    private readOnly: boolean = false;\n    private modelContainer: ModelContainer | undefined;\n    private isReloadedTransaction: boolean = false; // True when the transaction is being reloaded, rather than newly created.\n\n    /** @deprecated This flag is made irrelevant by the introduction of step-specific silent flag */\n    private singleVariantsRenderable: boolean = false;\n\n    private stepTags: { [stepId: string]: string[] } = {};\n\n    private recipientConversionConfiguration: ConversionConfiguration | undefined;\n\n    constructor(\n        experience: WorkflowExperience,\n        client: SpiffCommerceClient,\n        updateTransaction: StateMutationFunc,\n        graphQlClient: GraphQlClientFunc,\n        reloadedState?: LayoutsState,\n        readOnly: boolean = false,\n        modelContainer?: ModelContainer,\n        /** @deprecated Should be determined via reloadedState */\n        isReloadedTransaction: boolean = false,\n        /** @deprecated Silent flag on steps makes this irrelevant */\n        singleVariantsRenderable: boolean = false,\n        /** @deprecated System should be smart enough to understand when to do this without manual instruction */\n        delayWorkflowStateSync: boolean = false,\n    ) {\n        this.experience = experience;\n        this.client = client;\n        this.updateTransaction = updateTransaction;\n        this.graphQlClient = graphQlClient;\n\n        this.reloadedState = reloadedState;\n        this.readOnly = readOnly;\n        this.singleVariantsRenderable = singleVariantsRenderable;\n\n        this.commandContext = new CommandContext();\n\n        this.confirmCallbacks = [];\n        this.editedCallbacks = [];\n        this.elementsCallbacks = [];\n        this.informationResultCallbacks = [];\n        this.initCallbacks = [];\n        this.mandatoryCallbacks = [];\n        this.makingAdjustmentsCallback = [];\n        this.metadataCallbacks = [];\n        this.selectionCallbacks = [];\n        this.stepSpecificStorageCallbacks = {};\n        this.storageCallbacks = [];\n        this.validationCallbacks = [];\n        this.recipientCallbacks = [];\n\n        this.modelContainer = modelContainer;\n\n        this.confirmedDesign = false;\n        this.editedSteps = {};\n        this.informationResults = [];\n        this.mandatorySteps = {};\n        this.pendingUpdates = [];\n        this.selectionCost = 0;\n        this.stepSpecificServices = {};\n        this.pollers = [];\n        this.allScenes = [];\n\n        this.stepElements = {};\n        this.stepInitialised = {};\n        this.stepMetadata = {};\n        this.stepSelections = {};\n        this.storage = {};\n        this.validationErrors = { steps: new Map() };\n\n        this.currentAdjustingStepId = \"\";\n\n        this.isReloadedTransaction = isReloadedTransaction;\n\n        if (delayWorkflowStateSync) {\n            this.workflowStatePromiseQueue.enabled = false;\n        }\n\n        const workflow = this.experience.getWorkflow();\n        if (workflow) {\n            this.setWorkflow(workflow);\n        }\n    }\n\n    /**\n     * Sets the current workflow for this experience.\n     * @param workflow The new workflow to set.\n     * @returns A promise that resolves when the workflow has been set.\n     */\n    setWorkflow: (workflow: Workflow) => Promise<void> = async (workflow: Workflow) => {\n        // Clear existing state\n        this.confirmedDesign = false;\n        this.editedSteps = {};\n        this.informationResults = [];\n        this.mandatorySteps = {};\n        this.pendingUpdates = [];\n        this.selectionCost = 0;\n        this.stepSpecificServices = {};\n        this.pollers = [];\n        this.allScenes = [];\n        this.stepElements = {};\n        this.stepInitialised = {};\n        this.stepMetadata = {};\n        this.stepSelections = {};\n        this.storage = {};\n        this.validationErrors = { steps: new Map() };\n        this.currentAdjustingStepId = \"\";\n\n        // We either reload initial state or we create a new one.\n        if (this.reloadedState) {\n            // FIXME: What if reloadedState is for a different workflow?\n            this.layouts = Object.values(this.reloadedState.layouts || {}).map((x) => x.layout);\n        } else if (workflow) {\n            this.layouts = getInitialLayouts(this.experience.getTransaction(), workflow);\n        } else {\n            this.layouts = [];\n        }\n\n        // Initialize the command context to a default state.\n        this.commandContext.initialize(this.layouts, this.reloadedState);\n        // Construct a renderable service for this manager.\n        this.renderableContextService = new LayoutPreviewService(this.layouts);\n        this.renderableContextService.setWorkflowManager(this);\n        // Load step tags\n        workflow.steps.forEach((step) => {\n            this.stepTags[step.stepName] = step.tags ?? [];\n        });\n\n        const ps = this.previewService;\n        this.ejectFromPreviewService();\n\n        // Fire initialisation process.\n        this.initializationPromise = this.initializeDefaultWorkflowState(workflow);\n        this.initializationPromise.then(() => {\n            this.initialized = true;\n        });\n        this.initializationPromise.catch((e) => {\n            this.initialized = false;\n            throw new Error(e);\n        });\n        this.initializationPromise.finally(() =>\n            this.commandContext.registerStateCallback(() => {\n                this.updateStateWithServer();\n                this.renderLayouts();\n            }),\n        );\n\n        if (ps) {\n            await this.injectIntoPreviewService(ps, true);\n        }\n    };\n\n    getTemplatingContext() {\n        const recipient = this.experience.getTransaction().recipient;\n        const c = { recipient };\n        this.recipientConversionConfiguration?.requestedDataItems?.forEach((item) => {\n            const id = item.uniqueIdentifier ?? item.title ?? \"\";\n            if (item.type === ConversionDataType.FirstName) {\n                c[id] = recipient?.firstName;\n            } else if (item.type === ConversionDataType.LastName) {\n                c[id] = recipient?.lastName;\n            } else if (item.type === ConversionDataType.Custom) {\n                if (item.customFieldIndex === 1) {\n                    c[id] = recipient?.customField1;\n                } else if (item.customFieldIndex === 2) {\n                    c[id] = recipient?.customField2;\n                } else if (item.customFieldIndex === 3) {\n                    c[id] = recipient?.customField3;\n                } else if (item.customFieldIndex === 4) {\n                    c[id] = recipient?.customField4;\n                } else if (item.customFieldIndex === 5) {\n                    c[id] = recipient?.customField5;\n                }\n                if (item.option) {\n                    c[id] = item.option.variants?.find((v) => v.id === c[id])?.name;\n                }\n            }\n        });\n        return c;\n    }\n\n    async updateRecipient(\n        firstName?: string,\n        lastName?: string,\n        address?: string,\n        suburb?: string,\n        state?: string,\n        email?: string,\n        postalCode?: string,\n        country?: string,\n        mobile?: string,\n        company?: string,\n        apartment?: string,\n        customField1?: string,\n        customField2?: string,\n        customField3?: string,\n        customField4?: string,\n        customField5?: string,\n        conversionConfigurationId?: string,\n        prevalidated?: boolean,\n    ): Promise<void> {\n        const transaction = this.experience.getTransaction();\n        if (transaction.recipient?.id) {\n            this.experience.getTransaction().recipient = {\n                id: transaction.recipient.id,\n                firstName: firstName ?? transaction.recipient.firstName,\n                lastName: lastName ?? transaction.recipient.lastName,\n                address: address ?? transaction.recipient.address,\n                suburb: suburb ?? transaction.recipient.suburb,\n                state: state ?? transaction.recipient.state,\n                email: email ?? transaction.recipient.email,\n                postalCode: postalCode ?? transaction.recipient.postalCode,\n                country: country ?? transaction.recipient.country,\n                mobile: mobile ?? transaction.recipient.mobile,\n                company: company ?? transaction.recipient.company,\n                apartment: apartment ?? transaction.recipient.apartment,\n                customField1: customField1 ?? transaction.recipient.customField1,\n                customField2: customField2 ?? transaction.recipient.customField2,\n                customField3: customField3 ?? transaction.recipient.customField3,\n                customField4: customField4 ?? transaction.recipient.customField4,\n                customField5: customField5 ?? transaction.recipient.customField5,\n                conversionConfigurationId: conversionConfigurationId || transaction.recipient.conversionConfigurationId,\n            };\n            this.experience.callEvent(WorkflowExperienceEventType.RecipientChanged);\n            await this.graphQlClient().mutate({\n                mutation: updateRecipientQuery,\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n                variables: {\n                    id: transaction.recipient.id,\n                    firstName: firstName || transaction.recipient.firstName,\n                    lastName: lastName || transaction.recipient.lastName,\n                    address: address || transaction.recipient.address,\n                    suburb: suburb || transaction.recipient.suburb,\n                    state: state || transaction.recipient.state,\n                    email: email || transaction.recipient.email,\n                    postalCode: postalCode || transaction.recipient.postalCode,\n                    country: country || transaction.recipient.country,\n                    mobile: mobile || transaction.recipient.mobile,\n                    company: company || transaction.recipient.company,\n                    apartment: apartment || transaction.recipient.apartment,\n                    customField1: customField1 || transaction.recipient.customField1,\n                    customField2: customField2 || transaction.recipient.customField2,\n                    customField3: customField3 || transaction.recipient.customField3,\n                    customField4: customField4 || transaction.recipient.customField4,\n                    customField5: customField5 || transaction.recipient.customField5,\n                    conversionConfigurationId:\n                        conversionConfigurationId || transaction.recipient.conversionConfigurationId,\n                    prevalidated,\n                },\n            });\n        } else {\n            const createRecipientResult = await this.graphQlClient().mutate<{ recipientCreate: { id: string } }>({\n                mutation: createRecipientQuery,\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n                variables: {\n                    firstName,\n                    lastName,\n                    address,\n                    suburb,\n                    state,\n                    email,\n                    postalCode,\n                    country,\n                    mobile,\n                    company,\n                    apartment,\n                    customField1,\n                    customField2,\n                    customField3,\n                    customField4,\n                    customField5,\n                    conversionConfigurationId,\n                },\n            });\n            transaction.recipient = {\n                id: createRecipientResult?.data?.recipientCreate?.id,\n                firstName,\n                lastName,\n                address,\n                suburb,\n                state,\n                email,\n                postalCode,\n                country,\n                mobile,\n                company,\n                apartment,\n                customField1,\n                customField2,\n                customField3,\n                customField4,\n                customField5,\n                conversionConfigurationId,\n            };\n            this.experience.callEvent(WorkflowExperienceEventType.RecipientChanged);\n            await this.graphQlClient().mutate({\n                mutation: transactionAttachRecipientQuery,\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n                variables: {\n                    id: this.experience.getTransaction().id,\n                    recipientId: createRecipientResult.data?.recipientCreate?.id,\n                },\n                context: {\n                    transactionOwnerId: this.experience.getTransaction().transactionOwnerId,\n                },\n            });\n        }\n        await this.fetchConversionConfiguration();\n        this.recipientCallbacks.forEach((c) => c(this.experience.getTransaction().recipient));\n    }\n\n    private static configurationPromiseMap = new Map<string, Promise<ConversionConfiguration | undefined>>();\n\n    private async fetchConversionConfiguration() {\n        const recipient = this.experience.getTransaction().recipient;\n        if (recipient?.conversionConfigurationId && !this.recipientConversionConfiguration) {\n            const existingPromise = InternalWorkflowManager.configurationPromiseMap.get(\n                recipient.conversionConfigurationId,\n            );\n            if (existingPromise) {\n                this.recipientConversionConfiguration = await existingPromise;\n            } else {\n                const getConfig = async () => {\n                    const response = await this.graphQlClient().query<{\n                        conversionConfiguration?: ConversionConfiguration;\n                    }>({\n                        query: getConversionConfigurationQuery,\n                        errorPolicy: \"all\",\n                        fetchPolicy: \"no-cache\",\n                        variables: {\n                            id: recipient.conversionConfigurationId,\n                        },\n                    });\n                    return response.data.conversionConfiguration;\n                };\n                const promise = getConfig();\n                InternalWorkflowManager.configurationPromiseMap.set(recipient.conversionConfigurationId, promise);\n                this.recipientConversionConfiguration = await promise;\n            }\n        }\n    }\n\n    private async initializeDefaultWorkflowState(workflow: Workflow) {\n        const fireReloadAnimation = () => {\n            const finalConfig = workflow.finalizeStepConfig;\n            if (!finalConfig) return;\n            const lookAt = finalConfig.lookAtAnimation;\n            const modelAnim = finalConfig.modelAnimation;\n            if (lookAt) this.previewService?.executeCameraAnimation(lookAt);\n            if (modelAnim) this.modelContainer?.executeAnimation(modelAnim);\n        };\n\n        // If a reloaded state exists, we want to load the state from that instead of initializing with defaults.\n        if (this.reloadedState) {\n            this.reloadedState.serializableWorkflow.steps.forEach((step) => {\n                this.storage[step.stepName] = step.storage || {};\n            });\n        }\n\n        const requiredInitialOptions = await this.getInitialOptionIds(\n            this.reloadedState?.serializableWorkflow?.steps.reduce<StepSelections>((acc, step) => {\n                if (step.selectedVariants?.length) {\n                    acc[step.stepName] = {\n                        selectedVariants: step.selectedVariants.map((v) => ({ id: v.id }) as VariantResource),\n                    };\n                }\n                return acc;\n            }, {}),\n        );\n        const initialOptionsPromise = optionService.getOptions(Array.from(requiredInitialOptions));\n        const conversionConfigPromise = this.fetchConversionConfiguration();\n\n        await Promise.all([initialOptionsPromise, conversionConfigPromise]);\n\n        // We set the scenes the workflow should start with\n        this.allScenes = getAllScenes(workflow);\n\n        // Initialize any relevant starting silent steps.\n        const activeScenes = getActiveScenes(this.allScenes, this.stepSelections);\n        const introducedSilentSteps = (await activeScenes).map((scene) => scene.silentSteps).flat();\n        const { stepElements: silentStepElements, commands: silentCommands } =\n            await this.stepElementsForIntroducedSilentSteps(introducedSilentSteps, !!this.reloadedState);\n        this.commandContext.apply(new GroupCommand(silentCommands), true);\n        this.stepElements = { ...this.stepElements, ...silentStepElements };\n\n        // Begin by setting the initial state of the workflow.\n        await this.ensureStepsAreLoaded();\n\n        // Sync the initial state\n        if (!this.isReloadedTransaction) {\n            this.updateStateWithServer();\n        }\n\n        // Initial render of the 3D scene.\n        this.renderLayouts();\n\n        // If we're dealing with a reloaded state, we want to fire of the initial animations at this point.\n        this.reloadedState && fireReloadAnimation();\n    }\n\n    getWorkflowExperience() {\n        return this.experience;\n    }\n\n    getClient() {\n        return this.client;\n    }\n\n    setWorkflowStateSyncEnabled(enabled: boolean) {\n        this.workflowStatePromiseQueue.enabled = enabled;\n    }\n\n    getInitializationPromise() {\n        return this.initializationPromise;\n    }\n\n    isInitialized() {\n        return this.initialized;\n    }\n\n    async getInitialOptionIds(existingSelections?: StepSelections): Promise<Set<string>> {\n        const optionIds = new Set<string>();\n        const workflow = this.experience.getWorkflow();\n\n        if (!workflow) {\n            return optionIds;\n        }\n\n        // Build a simulated set of step selections based on each step's default variant.\n        // We iteratively expand active steps until no new steps are activated, so that\n        // conditions satisfied by default selections are accounted for.\n        const allScenes = getAllScenes(workflow);\n        const simulatedSelections: StepSelections = { ...existingSelections };\n        let previousActiveStepCount = -1;\n\n        while (true) {\n            const activeScenes = getActiveScenes(allScenes, simulatedSelections);\n            const activeSteps = (await activeScenes).flatMap((scene) => scene.renderableSteps);\n\n            if (activeSteps.length === previousActiveStepCount) {\n                break;\n            }\n            previousActiveStepCount = activeSteps.length;\n\n            for (const step of activeSteps) {\n                if (simulatedSelections[step.stepName]) {\n                    continue;\n                }\n                const defaultVariantId = step.option?.defaultVariant?.id;\n                if (defaultVariantId) {\n                    simulatedSelections[step.stepName] = {\n                        selectedVariants: [{ id: defaultVariantId } as VariantResource],\n                    };\n                }\n            }\n        }\n\n        // Collect the option id from every initially active step that has one.\n        const activeScenes = getActiveScenes(allScenes, simulatedSelections);\n        (await activeScenes)\n            .flatMap((scene) => scene.renderableSteps)\n            .forEach((step) => {\n                // If we have variants we can assume we have the option in full and don't need to pull data.\n                if (step.option?.id && !step.option?.variants) {\n                    optionIds.add(step.option.id);\n                }\n            });\n\n        return optionIds;\n    }\n\n    addConfirmCallback(callback: ConfirmCallback) {\n        callback(this.confirmedDesign);\n        this.confirmCallbacks.push(callback);\n    }\n\n    addEditedCallback(callback: EditedCallback) {\n        callback(this.editedSteps);\n        this.editedCallbacks.push(callback);\n    }\n\n    addElementsCallback(callback: ElementsCallback) {\n        callback(this.stepElements);\n        this.elementsCallbacks.push(callback);\n    }\n\n    addInformationResultCallback(callback: InformationResultCallback) {\n        callback(this.informationResults);\n        this.informationResultCallbacks.push(callback);\n    }\n\n    addInitCallback(callback: InitCallback) {\n        callback(this.stepInitialised);\n        this.initCallbacks.push(callback);\n    }\n\n    addMandatoryCallback(callback: MandatoryCallback) {\n        callback(this.mandatorySteps);\n        this.mandatoryCallbacks.push(callback);\n    }\n\n    addMetadataCallback(callback: MetadataCallback) {\n        callback(this.stepMetadata);\n        this.metadataCallbacks.push(callback);\n    }\n\n    async addSelectionCallback(callback: SelectionCallback) {\n        callback({\n            selectionCost: this.selectionCost,\n            selections: this.stepSelections,\n            traversableScenes: await this.traversableScenes(),\n        });\n        this.selectionCallbacks.push(callback);\n    }\n\n    addStepSpecificStorageCallback(callback: StepSpecificStorageCallback, stepName: string) {\n        if (!Object.keys(this.storage).includes(stepName)) {\n            this.storage[stepName] = {};\n        }\n        callback(this.storage[stepName]);\n        if (!Object.keys(this.stepSpecificStorageCallbacks).includes(stepName)) {\n            this.stepSpecificStorageCallbacks[stepName] = [];\n        }\n        this.stepSpecificStorageCallbacks[stepName].push(callback);\n    }\n\n    /**\n     * @deprecated Any call to this causes all renderable steps to re-render even if they don't care about change.\n     */\n    addStorageCallback(callback: StorageCallback) {\n        callback(this.storage);\n        this.storageCallbacks.push(callback);\n    }\n\n    addMakingAdjustmentsCallback(callback: MakingAdjustmentsCallback) {\n        callback(this.currentAdjustingStepId);\n        this.makingAdjustmentsCallback.push(callback);\n    }\n\n    addPoller(poller: Poller) {\n        this.pollers.push(poller);\n    }\n\n    addValidationCallback(callback: ValidationCallback) {\n        this.validationCallbacks.push(callback);\n        callback(this.validationErrors);\n    }\n\n    addRecipientCallback(callback: RecipientCallback) {\n        this.recipientCallbacks.push(callback);\n        callback(this.experience.getTransaction().recipient);\n    }\n\n    removeRecipientCallback(callback: RecipientCallback) {\n        this.recipientCallbacks = this.recipientCallbacks.filter((it) => it !== callback);\n    }\n\n    getLayouts(): ILayout[] {\n        return this.layouts;\n    }\n\n    getAllLayoutData(): LayoutState[] {\n        return this.commandContext.getAllLayouts().map((l) => l.layoutState);\n    }\n\n    getLayoutPreviewService(): LayoutPreviewService | undefined {\n        return this.renderableContextService;\n    }\n\n    getInformationResults(): InformationResult[] {\n        return this.informationResults;\n    }\n\n    getPreviewService() {\n        return this.previewService;\n    }\n\n    getCommandContext(): CommandContext {\n        return this.commandContext;\n    }\n\n    getRegionElements(stepName: string): RegionElement[] {\n        return this.stepElements[stepName] || [];\n    }\n\n    getStepSpecificServices(stepName: string): StepSpecificServices | undefined {\n        return this.stepSpecificServices[stepName];\n    }\n\n    getTransactionCustomer(): Customer | undefined {\n        return this.ownerCustomer;\n    }\n\n    setTransactionCustomer(customer: Customer) {\n        this.ownerCustomer = customer;\n    }\n\n    setTransactionCustomerDetails(details: { email: string }) {\n        this.ownerCustomer = { ...this.ownerCustomer, emailAddress: details.email };\n    }\n\n    getModelContainer(): ModelContainer | undefined {\n        return this.modelContainer;\n    }\n\n    setModelContainer(container: ModelContainer): void {\n        if (!container || (this.previewService && this.previewService.getAllModels().includes(container))) {\n            this.modelContainer = container;\n            if (container && container.metadata && container.metadata instanceof Map) {\n                this.modelContainer.metadata.set(\"workflowManager\", this);\n            }\n        }\n    }\n\n    getCommandDispatcher() {\n        return (command: CanvasCommand) => this.commandContext.apply(command, !this.initialized);\n    }\n\n    getWorkflowSelections(): WorkflowSelections {\n        const selections: WorkflowSelections = {};\n        this.experience.getWorkflow()?.steps.forEach((step) => {\n            const stepStorage = this.stepSelections[step.stepName];\n            if (stepStorage && stepStorage.selectedVariants && stepStorage.selectedVariants.length > 0) {\n                selections[step.stepName] = {\n                    selections: stepStorage.selectedVariants,\n                };\n            }\n        });\n        return selections;\n    }\n\n    getStepSelections(): StepSelections {\n        return this.stepSelections;\n    }\n\n    markStepsAsInitialised(stepNames: string[]) {\n        const stepInitialised = { ...this.stepInitialised };\n        stepNames.forEach((stepName) => {\n            stepInitialised[stepName] = true;\n        });\n        this.stepInitialised = stepInitialised;\n        this.onInitChange();\n    }\n\n    getUpdatesPending() {\n        return this.pendingUpdates.length > 0;\n    }\n\n    markUpdateCompleted(id: string) {\n        this.pendingUpdates = this.pendingUpdates.filter((up) => up !== id);\n    }\n\n    markUpdatePending() {\n        const updateId = generate();\n        this.pendingUpdates = [...this.pendingUpdates, updateId];\n        return updateId;\n    }\n\n    setEditedStatus(stepName: string, status: boolean) {\n        this.editedSteps = { ...this.editedSteps, [stepName]: status };\n        this.onEditedChange();\n    }\n\n    setInformationResults(results: InformationResult[]) {\n        this.informationResults = [...results];\n        this.onInformationResultChange();\n    }\n\n    setCurrentAdjustingStepId(stepId: string) {\n        this.currentAdjustingStepId = stepId;\n        this.onMakingAdjustmentsChange();\n    }\n\n    setMandatoryFulfilled(stepName: string, status: boolean) {\n        // If the value hasn't changed don't notify listeners.\n        if (this.mandatorySteps[stepName] === status) {\n            return;\n        }\n        // Otherwise update mandatory structure and notify\n        this.mandatorySteps = { ...this.mandatorySteps, [stepName]: status };\n        this.onMandatoryChange();\n    }\n\n    async getMandatoryUnfulfilledSteps(): Promise<string[]> {\n        // Get the active mandatory steps.\n        const scenes = await getActiveScenes(this.allScenes, this.stepSelections);\n        const steps = scenes.flatMap((scene) => scene.renderableSteps);\n        const mandatorySteps = steps.filter((s) => s.mandatory);\n\n        // A mandatory step is unfulfilled if its value is false or absent.\n        const unfulfilledSteps = mandatorySteps.filter((s) => !this.mandatorySteps[s.stepName]);\n        return unfulfilledSteps.map((s) => s.stepName);\n    }\n\n    setStepError(stepName: string, field: string, error: string | undefined) {\n        let changed = false;\n        if (!this.validationErrors.steps.has(stepName) && error) {\n            // New step entry\n            changed = true;\n            this.validationErrors.steps.set(stepName, new Map([[field, error]]));\n        } else if (this.validationErrors.steps.has(stepName)) {\n            const stepErrors = this.validationErrors.steps.get(stepName)!;\n            if (error && error !== stepErrors.get(field)) {\n                // New or changed\n                changed = true;\n                stepErrors.set(field, error);\n            } else if (!error) {\n                // Deleted entry\n                changed = true;\n                stepErrors.delete(field);\n                if (stepErrors.size === 0) {\n                    // Delete step if no errors\n                    this.validationErrors.steps.delete(stepName);\n                }\n            }\n        }\n\n        if (changed) {\n            this.onValidationChange();\n        }\n    }\n\n    getStepErrors(stepName: string) {\n        return this.validationErrors.steps.get(stepName);\n    }\n\n    getValidationErrors() {\n        return this.validationErrors;\n    }\n\n    toggleDesignConfirmed() {\n        this.confirmedDesign = !this.confirmedDesign;\n        this.onConfirmChange();\n    }\n\n    toggleMakingAdjustmentsCallback(callback: MandatoryCallback) {\n        callback(this.mandatorySteps);\n        this.mandatoryCallbacks.push(callback);\n    }\n\n    async injectIntoPreviewService(previewService: ThreeDPreviewService, refocusCamera?: boolean): Promise<void> {\n        if (this.modelContainer) {\n            throw new Error(\"You must eject from the preview service before injecting again.\");\n        }\n        this.previewService = previewService;\n        const product = this.experience.getProduct();\n        if (!product?.modelUrl || !this.previewService) return;\n        const container = previewService.loadModel(\n            {\n                model: product.modelUrl,\n                contextService: this.getLayoutPreviewService(),\n            },\n            { refocusCamera },\n        );\n        this.setModelContainer(container);\n        const scenes = (await getActiveScenes(this.allScenes, this.stepSelections)).filter((scene) => scene);\n        const steps = scenes\n            .map((scene) => scene.renderableSteps)\n            .flat()\n            .filter((step) => step.type === StepType.Model || step.type === StepType.Material);\n        steps.forEach((step) => {\n            if (!step.option?.id) {\n                console.error(`Failed to read option id from step: ${step.stepName}`);\n                return;\n            }\n            const selectedVariants = this.stepSelections[step.stepName]?.selectedVariants || [];\n            if (selectedVariants.length === 0) return;\n            const variant = selectedVariants[0];\n            if (step.type === StepType.Model) {\n                if (!this.modelContainer)\n                    throw new UnhandledBehaviorError(\n                        \"We should always have a model container when injecting a preview!\",\n                    );\n                const modelRef = variant.asset?.fileLink;\n                if (!modelRef) {\n                    console.error(`Failed to read model url from variant: ${variant.id} for step: ${step.stepName}`);\n                    return;\n                }\n                const data = step.data as ModelStepData;\n                this.modelContainer.applyModelVariant(\n                    step.stepName,\n                    {\n                        model: modelRef,\n                        contextService: this.getLayoutPreviewService(),\n                    },\n                    data.replaceProductModel || false,\n                );\n            } else {\n                const material = variant.material;\n                if (!material) {\n                    console.error(`Failed to read material from variant: ${variant.id} for step: ${step.stepName}`);\n                    return;\n                }\n                const data = step.data as MaterialStepData;\n                data.targetMaterials.forEach((matName) => {\n                    if (!this.modelContainer)\n                        throw new UnhandledBehaviorError(\n                            \"We should always have a model container when injecting a preview!\",\n                        );\n                    this.modelContainer.applyMaterialVariant(matName, step.option!.id!, material);\n                });\n            }\n        });\n        await container.getInitializationPromise();\n        this.renderLayouts();\n    }\n\n    ejectFromPreviewService(): void {\n        if (this.modelContainer) {\n            if (!this.modelContainer.dispose) {\n                throw new Error(\"This feature is not supported in the current preview service.\");\n            }\n            this.modelContainer.dispose();\n            this.modelContainer = undefined;\n        }\n        this.previewService = undefined;\n    }\n\n    updateStorage(stepName: string, update: StepStorage) {\n        const newStorage = {\n            ...this.storage,\n            [stepName]: { ...this.storage[stepName], ...update },\n        };\n        if (!isEqual(newStorage, this.storage)) {\n            this.storage = newStorage;\n            const workflowCommand = new UpdateWorkflowStateCommand(this.constructSerializableWorkflow());\n            this.commandContext.apply(workflowCommand, true);\n            this.onStepSpecificStorageChange(stepName);\n            this.onStorageChange();\n        }\n    }\n\n    private constructSerializableWorkflow(): SerializableWorkflow {\n        const steps: SerializableStep[] = [];\n        this.allScenes.forEach((scene) => {\n            scene.renderableSteps.forEach((step) => {\n                const stepStructure: SerializableStep = { stepName: step.stepName };\n                stepStructure.storage = this.storage[step.stepName];\n                stepStructure.selectedVariants = this.stepSelections[step.stepName]?.selectedVariants?.map(\n                    (variant) => {\n                        return { id: variant.id!, priceModifier: variant.priceModifier };\n                    },\n                );\n                steps.push(stepStructure);\n            });\n        });\n        return { steps };\n    }\n\n    private updateStateWithServer() {\n        if (this.readOnly) return;\n        const workflowState = this.serialize();\n        this.workflowStatePromiseQueue.enqueue(\n            new WorkflowStatePromise(async () => {\n                // HACK: Immediately firing a network request can block the thread when many fire at once.\n                // Using setTimeout will push this promise to the end of the event loop, allowing the calling function to exit.\n                await new Promise<void>((resolve) => {\n                    setTimeout(() => {\n                        resolve();\n                    }, 1);\n                });\n                await this.updateTransaction({\n                    variables: {\n                        id: this.experience.getTransaction().id,\n                        workflowState,\n                    },\n                });\n            }),\n        );\n    }\n\n    private renderLayouts = () => {\n        if (!this.previewService) return;\n        const layouts = this.getCommandContext().getAllLayouts();\n        const previewHandles = this.getLayoutPreviewService()?.getAll();\n        if (!previewHandles) return;\n        for (const [, previewBridge] of previewHandles) {\n            previewBridge.render(layouts);\n        }\n    };\n\n    public async updateStateWithServerImmediate() {\n        if (this.readOnly) return;\n        const workflowState = this.serialize();\n        return new WorkflowStatePromise(async () => {\n            await this.updateTransaction({\n                variables: {\n                    id: this.experience.getTransaction().id,\n                    workflowState,\n                },\n            });\n        }).execute();\n    }\n\n    private serialize(): string {\n        const fullState = this.getCommandContext().getState();\n        if (!fullState) {\n            throw new UnhandledBehaviorError(\"Attempted to serialize state before it was initialized.\");\n        }\n        const deepClone = cloneDeep(fullState.transaction);\n        const dehydrated = dehydrateState(deepClone);\n        return JSON.stringify(dehydrated, sortKeysReplacer, undefined);\n    }\n\n    async getStateHash(): Promise<string> {\n        const state = this.getCommandContext().getState();\n        const modificationIds = Object.values(state?.transaction.layouts || {}).map((l) => l.modificationID ?? \"\");\n        const alphabetizedModificationIds = modificationIds.sort().join(\"\");\n\n        const encoder = new TextEncoder();\n        const data = encoder.encode(alphabetizedModificationIds);\n\n        // Browser Web Crypto API (preferred)\n        if (\n            typeof window !== \"undefined\" &&\n            window.crypto &&\n            (window.crypto as any).subtle &&\n            (window.crypto as any).subtle.digest\n        ) {\n            const hashBuffer = await (window.crypto as any).subtle.digest(\"SHA-256\", data);\n            const hashArray = Array.from(new Uint8Array(hashBuffer));\n            const hash = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n            return hash;\n        }\n\n        // Node fallback using dynamic import of 'crypto'\n        try {\n            const crypto = await import(\"crypto\");\n            return crypto.createHash(\"sha256\").update(alphabetizedModificationIds, \"utf8\").digest(\"hex\");\n        } catch (e) {\n            throw new Error(\"Unable to compute SHA-256 hash: no suitable crypto implementation available.\");\n        }\n    }\n\n    async outstandingRequestsPromise() {\n        return this.workflowStatePromiseQueue.finalize();\n    }\n\n    updateMetadata(stepName: string, update: any) {\n        this.stepMetadata = {\n            ...this.stepMetadata,\n            [stepName]: { ...this.stepMetadata[stepName], ...update },\n        };\n        this.onMetadataChange();\n    }\n\n    private removeElements(elements: RegionElement[]) {\n        const filterOutAllElementsFromSteps = (\n            existingStepElements: StepElements,\n            elements: RegionElement[],\n        ): StepElements => {\n            return Object.keys(existingStepElements).reduce<StepElements>((stepsWithoutOldElements, stepName) => {\n                const newListOfStepElements = [...(existingStepElements[stepName] || [])];\n                elements.forEach((regionElementToRemove) => {\n                    const index = newListOfStepElements.findIndex((currentRegionElement) => {\n                        return currentRegionElement.id === regionElementToRemove.id;\n                    });\n                    if (index > -1) {\n                        newListOfStepElements.splice(index, 1);\n                    }\n                });\n                stepsWithoutOldElements[stepName] = newListOfStepElements;\n                return stepsWithoutOldElements;\n            }, {});\n        };\n        this.stepElements = filterOutAllElementsFromSteps(this.stepElements, elements);\n    }\n\n    private async getInvalidCanvasRegions(): Promise<RegionElement[]> {\n        let selectionsToRemove: RegionElement[] = [];\n        for (const step of this.experience.getWorkflow()?.steps || []) {\n            if (!(await stepConditionsAreSatisfied(step, this.stepSelections))) {\n                if (this.stepElements[step.stepName]) {\n                    for (const regionElement of this.stepElements[step.stepName]) {\n                        selectionsToRemove.push(regionElement);\n                    }\n                }\n            }\n        }\n        return selectionsToRemove;\n    }\n\n    private async getInvalidModelVariants(): Promise<string[]> {\n        let invalidVariants: string[] = [];\n        for (const step of this.experience.getWorkflow()?.steps || []) {\n            if (step.type === StepType.Model && !(await stepConditionsAreSatisfied(step, this.stepSelections))) {\n                invalidVariants.push(step.stepName);\n            }\n        }\n        return invalidVariants;\n    }\n\n    /**\n     * @deprecated This function is only relevant for silent steps that are introduced by a selection. Steps now expose a silent flag that should allow any step to achieve the same behavior without needing special handling. We should remove this function once all silent steps have been migrated to use the new flag and logic.\n     */\n    private async stepElementsForIntroducedSilentSteps(\n        introducedSilentSteps: Step<AnyStepData>[],\n        handlingReload: boolean,\n    ): Promise<{ stepElements: StepElements; commands: CanvasCommand[] }> {\n        const product = this.experience.getProduct();\n        if (!product) {\n            return Promise.resolve({ stepElements: {}, commands: [] });\n        }\n\n        // Trigger the given silent step.\n        // Steps in completely silent scenes should trigger immediately when the step becomes relevant.\n        // Steps in renderable scenes should trigger when the scene becomes active the first time.\n        const executeSilentStep = async (\n            step: Step<AnyStepData>,\n            layouts: ILayout[],\n            product: Product,\n        ): Promise<{ step: Step<AnyStepData>; results: SilentStepTriggerResult[] }> => {\n            if (step.type === StepType.SilentIllustration) {\n                const result = await new SilentStepHandler(step as Step<SilentIllustrationStepData>, layouts).trigger();\n                return { step, results: result };\n            } else if (step.type === StepType.ProductOverlay) {\n                const result = await new SilentStepHandler(\n                    step as Step<ProductOverlayStepData>,\n                    layouts,\n                    product,\n                ).trigger();\n                return { step, results: result };\n            }\n\n            return Promise.reject(\"Unknown silent step. This is a bug\");\n        };\n\n        const uninitializedSteps: Step<AnyStepData>[] = introducedSilentSteps.filter(\n            (step) => !this.stepInitialised[step.stepName],\n        );\n\n        const result: { stepElements: StepElements; commands: CanvasCommand[] } = {\n            stepElements: {},\n            commands: [],\n        };\n\n        const silentStepPromises: Promise<{ step: Step<AnyStepData>; results: SilentStepTriggerResult[] }>[] = [];\n\n        for (const step of uninitializedSteps) {\n            this.markStepsAsInitialised([step.stepName]);\n            if (!handlingReload) {\n                silentStepPromises.push(executeSilentStep(step, this.layouts, product));\n            }\n        }\n        const silentStepResults = await Promise.all(silentStepPromises);\n        for (const stepResult of silentStepResults) {\n            result.stepElements[stepResult.step.stepName] = stepResult.results.map((r) => r.regionElement);\n            result.commands = [...result.commands, ...stepResult.results.map((r) => r.command)];\n        }\n\n        return result;\n    }\n\n    getStepStorage(stepName: string): StepStorage | undefined {\n        return this.storage[stepName];\n    }\n\n    getMetadata(stepName: string): StepMetadata | undefined {\n        return this.stepMetadata[stepName];\n    }\n\n    getWorkflowMetadata(): WorkflowMetadata {\n        return this.stepMetadata;\n    }\n\n    getStepTags(stepId: string): string[] {\n        return this.stepTags[stepId] || [];\n    }\n\n    /**\n     * @deprecated Simply run serializedSteps.find((step) => step.stepName === stepName) instead.\n     */\n    getSerializedStep(stepName: string, serializedSteps: SerializableStep[]): SerializableStep | undefined {\n        return serializedSteps.find((step) => step.stepName === stepName);\n    }\n\n    async updateTransactionShareActions() {\n        const shareActions = await this.client.getShareActionsForTransaction(this.experience.getTransaction().id);\n        this.experience.getTransaction().transactionShareActions = shareActions;\n    }\n\n    async updateTransactionStakeholders() {\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ transactions: Transaction[] }>({\n            query: getTransactionStakeholdersQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.experience.getTransaction().id,\n            },\n        });\n        if (!response?.data?.transactions || response.data.transactions.length !== 1) {\n            this.experience.getTransaction().currentStakeholder = undefined;\n            this.experience.getTransaction().stakeholders = undefined;\n        } else {\n            this.experience.getTransaction().stakeholders = response.data.transactions[0].stakeholders;\n            this.experience.getTransaction().currentStakeholder = response.data.transactions[0].currentStakeholder;\n        }\n    }\n\n    async approveTransaction(note?: string): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate<{ id: string }>({\n            mutation: transactionApprovalQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.experience.getTransaction().id,\n                note,\n            },\n        });\n    }\n\n    async rejectTransaction(note?: string): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate<{ id: string }>({\n            mutation: transactionRejectionQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.experience.getTransaction().id,\n                note,\n            },\n        });\n    }\n\n    async reset() {\n        this.stepElements = {};\n        this.stepInitialised = {};\n        this.stepMetadata = {};\n        this.stepSelections = {};\n        this.storage = {};\n        await this.ensureStepsAreLoaded();\n    }\n\n    async setSelectionsAndElements(\n        stepName: string,\n        variants: VariantResource[],\n        elements: RegionElement[],\n        callback?: () => Promise<void>,\n    ) {\n        const workflow = this.experience.getWorkflow();\n        if (!workflow) throw new Error(\"Attempted to set selections when no workflow is set!\");\n\n        const oldSelections = this.stepSelections;\n        this.stepSelections = {\n            ...this.stepSelections,\n            [stepName]: { selectedVariants: variants },\n        };\n\n        // Recursively tally the cost of all selections\n        this.selectionCost = Object.values(this.stepSelections).reduce((total, current) => {\n            return (\n                total +\n                current\n                    .selectedVariants!.map((vs) => vs.priceModifier || 0)\n                    .reduce((acc, val) => {\n                        return acc + val;\n                    }, 0)\n            );\n        }, 0);\n\n        // Unset state of steps which have become irrelevant.\n        for (const step of workflow.steps) {\n            if (!(await stepConditionsAreSatisfied(step, this.stepSelections))) {\n                this.stepInitialised[step.stepName] = false;\n                delete this.stepMetadata[step.stepName];\n                delete this.stepSelections[step.stepName];\n                delete this.storage[step.stepName];\n            }\n        }\n\n        // Find silent steps which have become relevant, cleanup any that have become irrelevant.\n        const allScenes = this.allScenes;\n        const oldScenes = await getActiveScenes(allScenes, oldSelections);\n        const newScenes = await getActiveScenes(allScenes, this.stepSelections);\n        const oldSilentSteps = oldScenes.map((scene) => scene.silentSteps).flat();\n        const newSilentSteps = newScenes.map((scene) => scene.silentSteps).flat();\n        const introducedSilentSteps = newSilentSteps.filter(\n            (newStep) => !oldSilentSteps.some((oldStep) => oldStep.stepName === newStep.stepName),\n        );\n        for (const step of oldSilentSteps) {\n            if (!(await stepConditionsAreSatisfied(step, this.stepSelections))) {\n                this.stepInitialised[step.stepName] = false;\n            }\n        }\n\n        const invalidCanvasRegions = await this.getInvalidCanvasRegions();\n\n        const { stepElements: silentStepElements, commands: silentCommands } =\n            await this.stepElementsForIntroducedSilentSteps(introducedSilentSteps, false);\n\n        // Set the new step elements\n        this.stepElements = {\n            ...this.stepElements,\n            ...silentStepElements,\n            [stepName]: elements,\n        };\n\n        // Remove any elements that have become invalid.\n        this.removeElements(invalidCanvasRegions);\n\n        // When target step is a frame, we need to notify frame service of new elements.\n        const step = workflow.steps.find((step) => step.stepName === stepName);\n        if (step?.type === StepType.Frame) {\n            const frameService = (\n                this.getWorkflowExperience().getStepById(step.stepName) as undefined | FrameStepHandle\n            )?.frameService;\n            frameService?.setTargetElements(elements.map((regionEl) => regionEl.id));\n        }\n\n        const deleteCommands = invalidCanvasRegions.map((el: RegionElement) => new DeleteElementCommand(el.id));\n        const workflowCommand = new UpdateWorkflowStateCommand(this.constructSerializableWorkflow());\n        const commands = [...silentCommands, ...deleteCommands, workflowCommand];\n        if (commands.length > 0) {\n            this.commandContext.apply(new GroupCommand(commands), true);\n        }\n\n        // Ensure any effects of this selection change are executed as a result.\n        await this.ensureStepsAreLoaded();\n\n        // Notify any listeners that the workflow has changed.\n        this.onElementsChange();\n\n        // When conditions change certain models may become invalid. We clean them up here.\n        const invalidModelVariants = await this.getInvalidModelVariants();\n        const modelContainer = this.modelContainer;\n        if (modelContainer) {\n            const removalPromises = invalidModelVariants.map((im) =>\n                modelContainer.applyModelVariant(\n                    im,\n                    {\n                        contextService: this.getLayoutPreviewService(),\n                    },\n                    false,\n                ),\n            );\n            await Promise.all(removalPromises);\n        }\n\n        await this.onSelectionChange();\n\n        // For step types except text/module/frame, setting a variant satisfies the mandatory flag.\n        if (step?.type !== StepType.Frame && step?.type !== StepType.Text) {\n            this.setMandatoryFulfilled(stepName, true);\n        }\n\n        if (callback) {\n            await callback();\n        }\n    }\n\n    /**\n     * Ensures all steps for active scenes are initialized and loads them in parallel.\n     *\n     * This method:\n     * 1. Identifies active scenes and their renderable steps\n     * 2. Initializes uninitialized steps by invoking the appropriate step service based on step type\n     * 3. Executes all initialization commands as a batch and processes followup actions\n     * 4. Recursively handles any followup conditions that may trigger additional step loading\n     * 5. Notifies listeners of initialization changes\n     *\n     * @throws {Error} If any step initialization fails during the settlement of promises\n     * @returns {Promise<void>}\n     */\n    private async ensureStepsAreLoaded() {\n        const activeScenes = await getActiveScenes(this.allScenes, this.stepSelections);\n        const stepsPerScene = activeScenes.map((scene) => scene.renderableSteps);\n\n        // We create a list of steps which are not yet initialized.\n        // Iterate over all required steps and run initialization, this should occur in parallel.\n        const stepPromises: Promise<any>[] = [];\n        const steps = stepsPerScene.flat();\n\n        for (const step of steps) {\n            if (!this.stepInitialised[step.stepName]) {\n                this.stepInitialised[step.stepName] = true;\n                switch (step.type) {\n                    case StepType.DigitalContent:\n                        stepPromises.push(\n                            digitalContentStepService.init(\n                                step as Step<DigitalContentStepData>,\n                                this,\n                                this.reloadedState,\n                            ),\n                        );\n                        break;\n                    case StepType.Frame:\n                        stepPromises.push(frameStepService.init(step as Step<FrameStepData>, this, this.reloadedState));\n                        break;\n                    case StepType.Illustration:\n                        stepPromises.push(\n                            illustrationStepService.init(step as Step<IllustrationStepData>, this, this.reloadedState),\n                        );\n                        break;\n                    case StepType.Material:\n                        stepPromises.push(\n                            materialStepService.init(step as Step<MaterialStepData>, this, this.reloadedState),\n                        );\n                        break;\n                    case StepType.Model:\n                        stepPromises.push(modelStepService.init(step as Step<ModelStepData>, this, this.reloadedState));\n                        break;\n                    case StepType.Module:\n                        // TODO: Mimic frame handles and scrap step specific services\n                        this.stepSpecificServices[step.stepName] = {\n                            module: await moduleResolver((step as Step<ModuleStepData>).data.module),\n                        };\n                        stepPromises.push(\n                            moduleStepService.init(step as Step<ModuleStepData>, this, this.reloadedState),\n                        );\n                        break;\n                    case StepType.Picture:\n                        stepPromises.push(\n                            pictureStepService.init(step as Step<PictureStepData>, this, this.reloadedState),\n                        );\n                        break;\n                    case StepType.Question:\n                        stepPromises.push(\n                            questionStepService.init(step as Step<QuestionStepData>, this, this.reloadedState),\n                        );\n                        break;\n                    case StepType.Shape:\n                        stepPromises.push(shapeStepService.init(step as Step<ShapeStepData>, this, this.reloadedState));\n                        break;\n                    case StepType.Text:\n                        stepPromises.push(textStepService.init(step as Step<TextStepData>, this, this.reloadedState));\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        // Settle all parallel logic.\n        const stepCwfs = (await Promise.allSettled<CommandWithFollowup | null>(stepPromises)).map((result) => {\n            if (result.status === \"rejected\") {\n                throw new Error(`Step initialization failed: ${result.reason}`);\n            }\n            return result.value;\n        });\n\n        // Map all non-null commands/followups to lists.\n        const commands = stepCwfs.flatMap((cwf) => (cwf?.command ? [cwf.command] : []));\n        const followups = stepCwfs.flatMap((cwf) => (cwf?.followup ? [cwf.followup] : []));\n\n        // Execute all commands in a single batch\n        if (commands && commands.length > 0) this.commandContext.apply(new GroupCommand(commands), true);\n        for (const followup of followups) await followup();\n\n        // Process any followup conditions\n        // A step will produce followup actions when a change has occured. To ensure\n        // any conditions that have become true are actioned, we run once again.\n        if (followups.length > 0) {\n            await this.ensureStepsAreLoaded();\n        }\n\n        // Notify listeners of changes.\n        this.onInitChange();\n    }\n\n    private onConfirmChange() {\n        this.confirmCallbacks.forEach((callback) => callback(this.confirmedDesign));\n    }\n\n    private onEditedChange() {\n        this.editedCallbacks.forEach((callback) => callback(this.editedSteps));\n    }\n\n    private onElementsChange() {\n        this.elementsCallbacks.forEach((callback) => callback(this.stepElements));\n    }\n\n    private onInformationResultChange() {\n        this.informationResultCallbacks.forEach((callback) => callback(this.informationResults));\n    }\n\n    private onInitChange() {\n        this.initCallbacks.forEach((callback) => callback(this.stepInitialised));\n    }\n\n    private onMakingAdjustmentsChange() {\n        this.makingAdjustmentsCallback.forEach((callback) => {\n            callback(this.currentAdjustingStepId);\n        });\n    }\n\n    private onMandatoryChange() {\n        this.mandatoryCallbacks.forEach((callback) => callback(this.mandatorySteps));\n    }\n\n    private onMetadataChange() {\n        this.metadataCallbacks.forEach((callback) => {\n            callback(this.stepMetadata);\n        });\n    }\n\n    private async onSelectionChange() {\n        const traversableScenes = await this.traversableScenes();\n        for (const cb of this.selectionCallbacks) {\n            cb({\n                selectionCost: this.selectionCost,\n                selections: this.stepSelections,\n                traversableScenes,\n            });\n        }\n    }\n\n    private onStepSpecificStorageChange(stepName: string) {\n        if (!Object.keys(this.stepSpecificStorageCallbacks).includes(stepName)) {\n            this.stepSpecificStorageCallbacks[stepName] = [];\n        }\n        this.stepSpecificStorageCallbacks[stepName].forEach((callback) => callback(this.storage[stepName]));\n    }\n\n    private onStorageChange() {\n        this.storageCallbacks.forEach((callback) => callback(this.storage));\n    }\n\n    private onValidationChange() {\n        this.validationCallbacks.forEach((callback) => callback(this.validationErrors));\n    }\n\n    traversableScenes(): Promise<WorkflowScene[]> {\n        return getRenderableRelevantScenes(this.allScenes, this.stepSelections, this.singleVariantsRenderable);\n    }\n}\n","import { Asset, AssetType, VariantResource } from \"../../types\";\nimport { getTransformedAssetURL } from \"../../util/asset\";\n\n/**\n * A wrapping component that provides a simple interface for interacting with a variant.\n */\nexport class Variant {\n    private readonly variantData: VariantResource;\n\n    constructor(variant: VariantResource) {\n        this.variantData = variant;\n    }\n\n    getType(): AssetType | undefined {\n        return this.variantData.asset?.type;\n    }\n\n    /**\n     * @returns The unique identifier for the variant.\n     */\n    getId(): string {\n        return this.variantData.id!;\n    }\n\n    /**\n     * @returns The configured name of the variant. Generally a human readable value.\n     */\n    getName(): string {\n        return this.variantData.name;\n    }\n\n    /**\n     * @returns The price modifier for this variant. This is the amount that will be added to the base price of the product.\n     */\n    getPriceFormatted(locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions | undefined): string {\n        return this.variantData.priceModifier.toLocaleString(locales ? locales : \"en-US\", {\n            style: \"currency\",\n            currency: \"USD\",\n            ...options,\n        });\n    }\n\n    /**\n     * @returns The price modifier for this variant. This is the amount that will be added to the base price of the product.\n     *          Presented in subunits of the currency of the option. For example, if the option is configured to use USD, the price modifier will be in cents.\n     */\n    getPrice(): number {\n        return this.variantData.priceModifier;\n    }\n\n    /**\n     * @returns The URL for the base asset resource configured on this variant\n     */\n    getAsset(): string | undefined {\n        return this.variantData.asset?.fileLink;\n    }\n\n    /**\n     * @returns The URL for the base asset resource configured on this variant\n     */\n    getAssetResource(): Asset | undefined {\n        return this.variantData.asset;\n    }\n\n    /**\n     * @returns The URL for a thumbnail resource configured on this variant.\n     */\n    getThumbnail(resolution: number = 256, quality?: number): string | undefined {\n        const thumbAsset = this.variantData.thumbnail;\n        if (!thumbAsset || !thumbAsset.fileLink) {\n            return undefined;\n        }\n        return getTransformedAssetURL(thumbAsset, resolution, \"webp\", quality);\n    }\n\n    /**\n     * @returns When this variant is configured to have a color, this will return the hex value for that color.\n     */\n    getColor(): string | undefined {\n        return this.variantData.color;\n    }\n\n    /**\n     * @returns True when the variant is the default for its containing option. False otherwise.\n     */\n    isDefault(): boolean {\n        return !!this.variantData.default;\n    }\n\n    /**\n     * @returns The underlying variant resource. Generally not needed but made available just in case.\n     */\n    getResource(): VariantResource {\n        return this.variantData;\n    }\n\n    /**\n     * @returns True when the variant is enabled. False otherwise.\n     */\n    isEnabled(): boolean {\n        return this.variantData.enabled;\n    }\n\n    /**\n     * @returns The category for grouping variants in an option.\n     */\n    getCategory(): string | undefined {\n        return this.variantData.category;\n    }\n}\n","import { optionService } from \"../services/option\";\nimport { AnyStepData, AspectType, OptionResource, Step, StepType } from \"../types\";\nimport { MisconfigurationError } from \"../util/exception\";\nimport { WorkflowManager } from \"../WorkflowManager\";\nimport { Variant } from \"./resource/variant\";\n\n/**\n * Steps that support custom color variants should implement the following interface to\n * add the behavior in the way that makes sense to the step.\n */\nexport interface CustomColorSupport {\n    /**\n     * Allows for setting a custom color when the custom variant is selected. Will\n     * throw when a non-custom variant is selected.\n     */\n    setCustomColor(color: string);\n    /**\n     * Get the custom color that is currently set on the step.\n     */\n    getCustomColor(): string;\n}\n\n/**\n * A StepHandle allows for managing the state of a specific step in a workflow. This class\n * abstracts away the complexities of dealing with a step directly and allows for using high level\n * concepts instead of dealing with the underlying data structures.\n */\nexport abstract class StepHandle<T extends AnyStepData> {\n    /**\n     * Stores whether or not the step is currently updating.\n     */\n    private static readonly updateState: Map<string, boolean> = new Map<string, boolean>();\n    /**\n     * Access to the workflow manager this step is contained by.\n     */\n    protected readonly manager: WorkflowManager;\n    /**\n     * The step metadata, useful for determining logic based on configuration.\n     */\n    protected readonly step: Step<T>;\n    /**\n     * The tags set against this step.\n     */\n    protected readonly tags: string[];\n\n    constructor(manager: WorkflowManager, step: Step<T>, tags: string[]) {\n        this.manager = manager;\n        this.step = step;\n        this.tags = tags;\n    }\n\n    /**\n     * Set the current update state of this step. All step handles pointing to this step will\n     * see this value.\n     * @param value The new value\n     */\n    protected setUpdateState(value: boolean) {\n        StepHandle.updateState.set(\n            `${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`,\n            value,\n        );\n    }\n\n    /**\n     * @returns Gets the current update state of this step. All step handles for this step will see this value.\n     */\n    protected getUpdateState() {\n        return !!StepHandle.updateState.get(\n            `${this.step.stepName}-${this.manager.getWorkflowExperience().getTransaction().id}`,\n        );\n    }\n\n    /**\n     * Gets the currently selected variant, or undefined if no variant is selected.\n     */\n    getCurrentVariant() {\n        const selections = this.manager.getWorkflowSelections();\n        const stepSelections = selections[this.step.stepName];\n        const variantResource = stepSelections?.selections[0];\n        if (!variantResource) return undefined;\n        return new Variant(variantResource);\n    }\n\n    /**\n     * @returns A list of valid variants for this step. Does not include disabled variants.\n     */\n    async getAvailableVariants(): Promise<Variant[]> {\n        const variants = await this.getAllVariants();\n        return variants.filter((v) => v.isEnabled()) || [];\n    }\n\n    /**\n     * @returns A list of all variants for this step, including disabled ones.\n     */\n    async getAllVariants(): Promise<Variant[]> {\n        if (!this.step.option?.id) return []; // If no option then zero variants.\n        // If the workflow was requested with the option data included in the step, use that instead of making an API call\n        if (this.step.option.variants) {\n            return (this.step.option.variants || []).map((v) => new Variant(v)) || [];\n        }\n        // Otherwise we lazy load the the steps variants when requested\n        const option = await optionService.getOption(this.step.option?.id);\n        if (!option) throw new Error(\"Option not found, cannot fetch variants.\");\n        return (option.variants || []).map((v) => new Variant(v)) || [];\n    }\n\n    /**\n     * Most step types have a base option type that variants can be selected for.\n     * Selects a specific variant for this step. This will execute all required changes to\n     * the design and update the metadata to include the new selection. Any conditions\n     * that would be triggered will also be executed.\n     */\n    abstract selectVariant(variant: Variant): Promise<void>;\n\n    /**\n     * @returns A unique identifier for this step within the workflow.\n     */\n    getId() {\n        return this.step.stepName;\n    }\n\n    /**\n     * @returns The name of the step\n     */\n    getName(): string {\n        return this.step.stepTitle;\n    }\n\n    /**\n     * @returns A message that can accompany the step name in UI components. Used to describe the purpose of the step in more detail.\n     */\n    getHelpText() {\n        return this.step.helpText;\n    }\n\n    /**\n     * @returns The type of the step handle.\n     */\n    getType(): StepType {\n        return this.step.type;\n    }\n\n    /**\n     * @returns The underlying data for this step. Favor using the step handle methods instead of this.\n     */\n    getRaw(): Step<T> {\n        return this.step;\n    }\n\n    /**\n     * @returns Returns all of the tags that are present on this step.\n     */\n    getTags(): string[] {\n        return this.tags;\n    }\n\n    /**\n     * @param tag The tag to check for.\n     * @returns True if the step has the specified tag, false otherwise.\n     */\n    hasTag(tag: string): boolean {\n        return this.tags.includes(tag) || false;\n    }\n\n    /**\n     * @returns True if the step is required to be filled by the customer. False otherwise.\n     */\n    getMandatory() {\n        return this.step.mandatory || false;\n    }\n\n    /**\n     * @param type The AspectType to fetch the value for.\n     * @returns A boolean indicating whether this step should override Global Properties.\n     * Only relevant when the Workflow Experience is associated with a Bundle that is using Global Properties,\n     * and when this step is associated with one or more Global Property Aspects.\n     */\n    getOverrideGlobalPropertyConfiguration(type: AspectType): boolean {\n        const map = this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations ?? {};\n        return map[type.toString()] ?? false;\n    }\n\n    /**\n     * Sets whether or not this step should override Global Properties.\n     * Only relevant when the Workflow Experience is associated with a Bundle that is using Global Properties,\n     * and when this step is associated with one or more Global Property Aspects.\n     * @param type The AspectType to override.\n     */\n    setOverrideGlobalPropertyConfiguration(type: AspectType, value: boolean) {\n        const map = this.manager.getStepStorage(this.step.stepName)?.overrideGlobalConfigurations ?? {};\n        this.manager.updateStorage(this.step.stepName, {\n            overrideGlobalConfigurations: { ...map, [type.toString()]: value },\n        });\n    }\n\n    /**\n     * Retrieves the identifiers of all of the configured aspects for the specified Global Property Configuration.\n     * @param configurationId The ID of the Global Property Configuration. You can usually find this with `bundle.getGlobalPropertyConfiguration()?.id`\n     * @returns An array of strings matching the keys of all the Global Property Aspects in the Configuration that this step is configured to use.\n     */\n    getGlobalPropertyAspects(configurationId: string) {\n        return (\n            this.step.globalPropertyAspectConfigurations\n                ?.filter((c) => c.globalPropertyConfigurationId === configurationId && c.aspectName)\n                .map((c) => c.aspectName!) ?? []\n        );\n    }\n\n    /**\n     * Fires any configured animations on the 3D preview for this step.\n     * This includes camera & model animations. If the preview is unavailable\n     * this function will do nothing.\n     */\n    executeAnimations(immediate?: boolean) {\n        const preview = this.manager.getPreviewService();\n        const modelContainer = this.manager.getModelContainer();\n        const modelAnimation = (this.step.data as any).modelAnimation;\n        const lookAtAnimation = (this.step.data as any).lookAtAnimation;\n        if (preview) {\n            lookAtAnimation && preview.executeCameraAnimation(lookAtAnimation);\n        } else {\n            console.warn(\"No preview service available, cannot execute camera animations.\");\n        }\n        if (modelContainer) {\n            modelAnimation && modelContainer.executeAnimation(modelAnimation, immediate);\n        } else {\n            console.warn(\"No model container available, cannot execute model animations.\");\n        }\n    }\n}\n","import { StepHandle } from \"..\";\nimport { findElement } from \"../../LayoutsState\";\nimport { optionService } from \"../../services/option\";\nimport { illustrationStepService } from \"../../services/steps/illustration\";\nimport { ColorDefinition, IllustrationElement, IllustrationStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport class IllustrationStepHandle extends StepHandle<IllustrationStepData> {\n    constructor(manager: WorkflowManager, step: Step<IllustrationStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    /**\n     * Allows for select a vector from the available vectors configured on this steps base option.\n     * @param variant The new vector variant to use for this step.\n     * @returns A promise that can be awaited to know when the new vector asset has been updated on the design.\n     */\n    async selectVariant(variant: Variant) {\n        if (this.getUpdateState()) return; // Don't update this step if in the middle of updating it.\n        if (this.getCurrentVariant() === variant) return;\n        return illustrationStepService.selectVariant(\n            this.step,\n            variant.getResource(),\n            this.manager.getRegionElements(this.step.stepName) || [],\n            (v) => this.setUpdateState(v),\n            this.manager,\n        );\n    }\n\n    /**\n     * Get the colors that are in the illustration.\n     * @returns A list of color definitions that are currently applied to the illustration.\n     */\n    getColors() {\n        const regionEls = this.manager.getRegionElements(this.step.stepName) || [];\n        if (regionEls.length === 0) return;\n        const layoutElement = findElement(regionEls[0].id, this.manager.getAllLayoutData()) as IllustrationElement;\n        const elementColors = layoutElement.colors;\n\n        // For illustrations with asset configs, return one color per channel.\n        const asset = this.getCurrentVariant()?.getAssetResource();\n        const assetConfiguration = asset?.assetConfiguration;\n        const defaultColorVariants = assetConfiguration?.defaultColorVariants || [];\n        if (defaultColorVariants.length !== 0) {\n            const colors: { [key: string]: ColorDefinition } = {};\n            defaultColorVariants.forEach((item) => {\n                // Only include channel numbers that are in use.\n                const cn = assetConfiguration!.channelNumbers.find((cn) => cn.number === item.channelNumber);\n                if (cn) {\n                    const hex = cn.id.replace(/\\W/g, \"\");\n                    colors[item.channelNumber] = { browserValue: elementColors[hex]?.browserValue || \"\" };\n                }\n            });\n            return colors;\n        }\n\n        // For the standard case, return one color per color in the illustration.\n        try {\n            return elementColors;\n        } catch (e) {\n            console.error(e);\n        }\n    }\n\n    /**\n     * Set color for the illustration.\n     */\n    setColor(key: string, value: string, pmsValue?: string) {\n        const newFillMap = new Map<string, string | ColorDefinition>();\n\n        // For illustrations with asset configs, we have to map the channel number to colors in the illustration.\n        const asset = this.getCurrentVariant()?.getAssetResource();\n        const assetConfiguration = asset?.assetConfiguration;\n        const defaultColorVariants = assetConfiguration?.defaultColorVariants || [];\n        if (defaultColorVariants.length !== 0) {\n            assetConfiguration!.channelNumbers.forEach((item) => {\n                if (item.number.toString() === key) {\n                    const hex = item.id.replace(/\\W/g, \"\");\n                    if (pmsValue) {\n                        newFillMap.set(hex, { browserValue: value, pmsValue });\n                    } else {\n                        newFillMap.set(hex, value);\n                    }\n                }\n            });\n        } else {\n            // The standard case.\n            if (pmsValue) {\n                newFillMap.set(key, { browserValue: value, pmsValue });\n            } else {\n                newFillMap.set(key, value);\n            }\n        }\n\n        return illustrationStepService.changeColors(\n            this.step,\n            this.manager.getRegionElements(this.step.stepName),\n            this.manager,\n            newFillMap,\n        );\n    }\n\n    async getColorOption() {\n        return await optionService.ensureFullOption(this.step.data.colorOption);\n    }\n\n    getAvailableColors() {\n        if (!this.step.data.colorPickerEnabled) {\n            return Promise.resolve([]);\n        }\n        return illustrationStepService.availableColors(this.step, this.manager);\n    }\n\n    isColorPickerEnabled() {\n        return this.step.data.colorPickerEnabled ?? false;\n    }\n\n    isPMSPickerEnabled() {\n        return this.step.data.pmsPickerEnabled ?? false;\n    }\n\n    isVariantSearchEnabled(): boolean {\n        return this.step.data.enableVariantSearch ?? false;\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { materialStepService } from \"../../services/steps/material\";\nimport { MaterialStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport class MaterialStepHandle extends StepHandle<MaterialStepData> {\n    constructor(manager: WorkflowManager, step: Step<MaterialStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    selectVariant(variant: Variant) {\n        return materialStepService.selectVariant(this.step, variant.getResource(), this.manager, (val) =>\n            this.setUpdateState(val),\n        );\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { modelStepService, WorkflowManager } from \"../..\";\nimport { ModelStepData, Step } from \"../../types\";\nimport { Variant } from \"../resource/variant\";\n\nexport class ModelStepHandle extends StepHandle<ModelStepData> {\n    constructor(manager: WorkflowManager, step: Step<ModelStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    selectVariant(variant: Variant) {\n        return modelStepService.selectVariant(this.step, variant.getResource(), this.manager, (v) =>\n            this.setUpdateState(v),\n        );\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { pictureStepService } from \"../../services/steps/picture\";\nimport { PictureStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport class PictureStepHandle extends StepHandle<PictureStepData> {\n    constructor(manager: WorkflowManager, step: Step<PictureStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n    /**\n     * Allows the user to select an image variant from the available variants configured on this steps base option.\n     * @param variant The new image variant to use.\n     * @returns A promise that can be awaited to ensure the new image asset has been updated on the design.\n     */\n    selectVariant(variant: Variant) {\n        return pictureStepService.selectVariant(this.step, variant.getResource(), this.manager, (v) =>\n            this.setUpdateState(v),\n        );\n    }\n\n    isVariantSearchEnabled(): boolean {\n        return this.step.data.enableVariantSearch ?? false;\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { optionService } from \"../../services/option\";\nimport { questionStepService } from \"../../services/steps/question\";\nimport { QuestionStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport class QuestionStepHandle extends StepHandle<QuestionStepData> {\n    constructor(manager: WorkflowManager, step: Step<QuestionStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    async selectVariant(variant: Variant) {\n        if (!variant.getId()) {\n            throw new Error(\"Unable to select variant with a null ID\");\n        }\n        await questionStepService.selectVariant(this.step, variant.getId(), this.manager);\n    }\n\n    /**\n     * The way that this step expects to be rendered.\n     */\n    async getDisplayType() {\n        if ((this.step.data as any).displayType) {\n            return (this.step.data as any).displayType;\n        }\n        const option = await optionService.getOptionForStep(this.step);\n        return option?.displayType;\n    }\n}\n","import { CustomColorSupport, StepHandle } from \"..\";\nimport { shapeStepService } from \"../../services/steps/shape\";\nimport { ColorOption, ShapeStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport class ShapeStepHandle extends StepHandle<ShapeStepData> implements CustomColorSupport {\n    constructor(manager: WorkflowManager, step: Step<ShapeStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    selectVariant(variant: Variant) {\n        const colorVariant = variant.getResource();\n        return shapeStepService.selectVariant(\n            this.step,\n            {\n                fill: colorVariant.color,\n                stroke: colorVariant.color,\n                variant: colorVariant,\n            },\n            this.manager.getRegionElements(this.step.stepName) || [],\n            this.manager,\n        );\n    }\n\n    /**\n     * Sets the color of the shape.\n     * @param color The color option to use.\n     * @returns A promise resolving when the color has changed in the design.\n     * @deprecated The shape step can now pass through colors returned by getColors via selectVariant. Please swap setColor for selectVariant.\n     */\n    setColor(color: ColorOption) {\n        return shapeStepService.selectVariant(\n            this.step,\n            color,\n            this.manager.getRegionElements(this.step.stepName) || [],\n            this.manager,\n        );\n    }\n\n    /**\n     * Get available colors for the shape.\n     * @returns A list of color definitions that are currently applied to the illustration.\n     */\n    getColors() {\n        return shapeStepService.availableColours(this.step);\n    }\n\n    /**\n     * Allows for setting a custom color when the custom variant is selected. Will\n     * throw when a non-custom variant is selected.\n     */\n    setCustomColor(color: string) {\n        if (this.getCurrentVariant()?.getColor() !== \"#custom\") {\n            console.warn(\n                `setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`,\n            );\n        }\n        return shapeStepService.setCustomColor(color, this.step, this.manager);\n    }\n\n    getCustomColor(): string {\n        if (this.getCurrentVariant()?.getColor() !== \"#custom\") {\n            console.warn(\n                `setting custom color for step ${this.step.stepName} but color is ${this.getCurrentVariant()?.getColor()}`,\n            );\n        }\n        const color = this.manager.getStepStorage(this.step.stepName)?.colour;\n        if (!color)\n            throw new Error(\n                `Color not available on step ${this.step.stepName}. Set a default on the workflow to fix this.`,\n            );\n        return color;\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { CustomColorSupport, StepHandle } from \"..\";\nimport { TextErrorData, textStepService } from \"../../services/steps/text\";\nimport { ColorOption, Step, TextFillImage, TextStepData, TextStepStorage } from \"../../types\";\nimport { renderTextTemplateForWorkflow } from \"../../util/text\";\nimport { WorkflowManager, InformationMessageType } from \"../../WorkflowManager\";\nimport { Variant } from \"../resource/variant\";\n\nexport interface TextChangeResult {\n    /**\n     * The text of the input field.\n     */\n    input: string;\n\n    /**\n     * Data that can be used by the theme to decide what helper text should be.\n     */\n    helperData: {\n        charactersRemaining?: number;\n    };\n\n    /**\n     * Data that can be used by the theme to decide what error text should be.\n     */\n    errorData?: TextErrorData;\n}\n\nexport class TextStepHandle extends StepHandle<TextStepData> implements CustomColorSupport {\n    constructor(manager: WorkflowManager, step: Step<TextStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    /**\n     * Allows for select a font from the available fonts configured on this steps base option.\n     * @param variant The font variant to use.\n     */\n    async selectVariant(variant: Variant) {\n        await textStepService.selectVariant(\n            this.step,\n            variant.getResource(),\n            this.manager,\n            (error) => {\n                if (error) {\n                    this.manager.setInformationResults([\n                        ...this.manager.getInformationResults(),\n                        {\n                            message: error,\n                            messageType: InformationMessageType.Error,\n                            stepID: this.step.stepName,\n                        },\n                    ]);\n                } else {\n                    const results = this.manager.getInformationResults().filter((r) => r.stepID !== this.step.stepName);\n                    this.manager.setInformationResults(results);\n                }\n            },\n            () => {\n                // noop\n            },\n        );\n    }\n\n    /**\n     * @returns A list of colors that can be used to fill the text.\n     */\n    async getAvailableFillColors(): Promise<ColorOption[]> {\n        if (!this.step.data.colorPickerEnabled) {\n            return [];\n        }\n        return textStepService.availableFillColors(this.step);\n    }\n\n    /**\n     * Changes the fill of text related to this step to the new fill value.\n     * @param fill A new fill value to use.\n     */\n    async setFillColor(fill: ColorOption) {\n        const stepElements = this.manager.getRegionElements(this.step.stepName);\n        await textStepService.changeFillColor(this.step, fill, stepElements, this.manager);\n    }\n\n    /**\n     * Gets the color currently applied to the element.\n     */\n    getFillColor() {\n        return this.manager.getStepStorage(this.step.stepName)?.color || \"#000000\";\n    }\n\n    getAvailableFillImages(): Promise<TextFillImage[]> {\n        return textStepService.availableFillImages(this.step);\n    }\n\n    async setFillImage(fillImage: TextFillImage) {\n        const stepElements = this.manager.getRegionElements(this.step.stepName);\n        await textStepService.changeFillImage(this.step, fillImage, stepElements, this.manager);\n    }\n\n    getFillImage(): TextFillImage | undefined {\n        return this.manager.getStepStorage(this.step.stepName)?.fillImage;\n    }\n\n    getAlignment(): string | undefined {\n        const elements = textStepService.findLayoutElements(this.manager, this.step);\n        return elements?.[0].align;\n    }\n\n    setAlignment(alignment: \"left\" | \"center\" | \"right\") {\n        const stepElements = this.manager.getRegionElements(this.step.stepName);\n        textStepService.changeAlignment(this.step, alignment, stepElements, this.manager);\n    }\n\n    /**\n     * When true & the step has replaceable text configured the user will be\n     * abled to edit the entire text string including the non-replaceable text.\n     * @param shouldCustomizeAll When true the user can configure the entire text string.\n     */\n    setFullTextCustomization(shouldCustomizeAll: boolean): TextChangeResult {\n        const inputText = this.manager.getStepStorage(this.step.stepName)?.inputText || \"\";\n\n        const customiseableText =\n            this.step.data.replaceableText !== undefined\n                ? this.step.data.replaceableText.replace(\"{{}}\", inputText)\n                : inputText;\n\n        const text = shouldCustomizeAll ? customiseableText : this.step.data.defaultText;\n        this.manager.updateStorage(this.step.stepName, {\n            customiseAllText: shouldCustomizeAll,\n            text,\n            defaultCleared: false,\n        });\n        const result = this.setText(text);\n        return result;\n    }\n\n    /**\n     * Changes the text value of text related to this step to a new value.\n     * @param userInput Input from the user.\n     */\n    setText(userInput: string): TextChangeResult {\n        const result: TextChangeResult = {\n            input: userInput,\n            helperData: {},\n        };\n\n        // Find all related elements in the design and update them. Return immediately if none are found.\n        const layoutElements = textStepService.findLayoutElements(this.manager, this.step);\n        // Filter any unsupported characters from the input.\n        const filteredUserInput = textStepService.filterUnsupportedCharacters(userInput, layoutElements[0]?.fontData);\n\n        // Whilst the maximum length of user input is not exceeded, set the updated input value.\n        const inputLength = renderTextTemplateForWorkflow(filteredUserInput, this.manager).length;\n        const maxLengthExceeded =\n            !!this.step.data && !!this.step.data.maxLength && inputLength > this.step.data.maxLength;\n        if (!maxLengthExceeded) {\n            result.input = filteredUserInput;\n        }\n\n        // Update storage.\n        const regionless = layoutElements.length <= 0;\n        const newStorage = regionless\n            ? { inputText: filteredUserInput, text: filteredUserInput }\n            : { inputText: filteredUserInput };\n        this.manager.updateStorage(this.step.stepName, newStorage);\n\n        // Calculate the text that will be metadata if no errors.\n        const storage = this.manager.getStepStorage(this.step.stepName) as TextStepStorage;\n        const candidateMetadata = textStepService.getProcessedInput(\n            filteredUserInput,\n            this.step.data,\n            storage?.customiseAllText ?? false,\n        );\n\n        if (regionless) {\n            // Update metadata if new text doesn't cause errors.\n            if (!maxLengthExceeded) {\n                this.manager.updateMetadata(this.step.stepName, {\n                    text: candidateMetadata,\n                });\n            }\n        } else {\n            // Request the text step service to update the text in the design.\n            const { command, errorData, helperData } = textStepService.updateInputText(\n                filteredUserInput,\n                layoutElements,\n                this.step,\n                this.manager,\n            );\n            command && this.manager.getCommandDispatcher()(command);\n\n            result.helperData = helperData;\n            result.errorData = errorData;\n\n            // Update metadata if new text doesn't cause errors.\n            if (!maxLengthExceeded && !errorData) {\n                this.manager.updateMetadata(this.step.stepName, {\n                    text: candidateMetadata,\n                });\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Gets the text currently applied to the elements of this step.\n     */\n    getText() {\n        const defaultText = this.step.data.defaultText;\n        const storage = this.manager.getStepStorage(this.step.stepName);\n        if (defaultText && storage?.defaultCleared !== undefined && !storage?.defaultCleared) {\n            return defaultText;\n        }\n        return this.manager.getStepStorage(this.step.stepName)?.text || \"\";\n    }\n\n    isReplaceable() {\n        return this.step.data.userCanReplaceText;\n    }\n\n    /**\n     * @returns True if the step allows new lines in the text input.\n     */\n    newLinesSupported() {\n        return this.step.data.allowNewlines || false;\n    }\n\n    /**\n     * Inform the step that now is the time to\n     * clear default text if it should do so.\n     * Returns a text change rwsult if a clear occurred.\n     */\n    clearDefaultTextIfNecessary(): TextChangeResult | undefined {\n        const storage = this.manager.getStepStorage(this.step.stepName);\n        if (!storage?.defaultCleared && this.step.data.deleteDefaultOnFocus) {\n            const result = this.setText(\"\");\n            this.manager.updateStorage(this.step.stepName, { defaultCleared: true, inputText: \"\" });\n            const layoutElements = textStepService.findLayoutElements(this.manager, this.step);\n            textStepService.updateInputText(\"\", layoutElements, this.step, this.manager);\n            return result;\n        }\n    }\n\n    hasColorPicker() {\n        return this.step.data.colorPickerEnabled;\n    }\n\n    getRegions() {\n        return this.step.data.regions;\n    }\n\n    /**\n     * Return the maximum characters allowed for\n     * this step, or undefined if there is no limit.\n     */\n    getCharacterLimit(): number | undefined {\n        return this.step.data.maxLength;\n    }\n\n    /**\n     * Return the remaining amount of characters that\n     * the user is allowed to add, or undefined if there is no limit.\n     */\n    getCharactersRemaining(): number | undefined {\n        const limit = this.step.data.maxLength;\n        if (limit === undefined) {\n            return undefined;\n        }\n        const text = renderTextTemplateForWorkflow(this.getText(), this.manager);\n        return limit - text.length;\n    }\n\n    setCustomColor(_color: string) {\n        throw new Error(\"Custom color support is not yet available on text. Check back soon.\");\n    }\n\n    getCustomColor(): string {\n        throw new Error(\"Custom color support is not yet available on text. Check back soon.\");\n    }\n\n    /**\n     * @returns A list of colors that can be used for the text's outline.\n     */\n    async getAvailableStrokeColors(): Promise<ColorOption[]> {\n        if (!this.step.data.strokeEnabled) {\n            return [];\n        }\n        return textStepService.availableStrokeColors(this.step);\n    }\n\n    getStrokeColor(): string {\n        return this.manager.getStepStorage(this.step.stepName)?.strokeColor?.browserValue || \"#000000\";\n    }\n\n    /**\n     * Changes the stroke of text related to this step to the new stroke value.\n     * @param stroke A new stroke value to use.\n     */\n    async setStrokeColor(stroke: ColorOption | undefined) {\n        const stepElements = this.manager.getRegionElements(this.step.stepName);\n        await textStepService.changeStrokeColor(this.step, stroke, stepElements, this.manager);\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { InformationStepData, Step } from \"../../types\";\nimport { WorkflowManager } from \"../../WorkflowManager\";\n\nexport class InformationStepHandle extends StepHandle<InformationStepData> {\n    constructor(manager: WorkflowManager, step: Step<InformationStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    async selectVariant() {\n        // Noop\n    }\n\n    /**\n     * The way that this step expects to be rendered.\n     */\n    getContent() {\n        return this.step.data.content;\n    }\n}\n","import { StepHandle } from \"..\";\nimport { digitalContentStepService, WorkflowManager } from \"../..\";\nimport { DigitalContentStepData, Step, Asset } from \"../../types\";\n\n/**\n * The digital content step allows for associating uploaded content with a QR code. This code\n * can be displayed on the users design such as in a gift card and people can access\n * the hosted content by scanning the QR.\n */\nexport class DigitalContentStepHandle extends StepHandle<DigitalContentStepData> {\n    constructor(manager: WorkflowManager, step: Step<DigitalContentStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    async selectVariant() {\n        //noop\n    }\n\n    /**\n     * Returns a preview URL used to show the generated QR code in your UI.\n     */\n    getPreviewURL(): string {\n        return this.manager.getStepStorage(this.step.stepName)?.videoUrl || \"\";\n    }\n\n    /**\n     * Turns an asset into a QR code that can be used to access the content.\n     * @param asset The asset to use for the QR code.\n     * @returns The final URL string for the QR code.\n     */\n    async selectVideo(asset: Asset): Promise<string> {\n        return digitalContentStepService.regenerateQRCode(\n            this.manager.getRegionElements(this.step.stepName),\n            asset.key!,\n            this.manager,\n            this.step,\n        );\n    }\n}\n","import { StepHandle } from \"..\";\nimport { InformationMessageType, moduleStepService, WorkflowManager } from \"../..\";\nimport { ModuleStepData, Step } from \"../../types\";\nimport { renderTextTemplateForWorkflow } from \"../../util/text\";\n\nexport class ModuleStepHandle extends StepHandle<ModuleStepData> {\n    constructor(manager: WorkflowManager, step: Step<ModuleStepData>, tags: string[]) {\n        super(manager, step, tags);\n    }\n\n    async selectVariant() {\n        console.info(\"Text Modules don't support variants.\");\n        //noop\n    }\n\n    /**\n     * Return the remaining amount of characters that\n     * the user is allowed to add, or undefined if there is no limit.\n     */\n    getCharactersRemaining(): number | undefined {\n        const limit = this.step.data.maxLength;\n        if (limit === undefined) {\n            return undefined;\n        }\n        const text = renderTextTemplateForWorkflow(this.getText(), this.manager);\n        return limit - text.length;\n    }\n\n    /**\n     * Return the maximum characters allowed for\n     * this step, or undefined if there is no limit.\n     */\n    getCharacterLimit(): number | undefined {\n        return this.step.data.maxLength;\n    }\n\n    getText(): string {\n        return this.manager.getStepStorage(this.step.stepName)?.text || \"\";\n    }\n\n    setText(value: string) {\n        moduleStepService.changeText(this.step, value, this.manager, (error) => {\n            if (error) {\n                const errors = [\n                    ...this.manager.getInformationResults(),\n                    {\n                        message: error,\n                        messageType: InformationMessageType.Error,\n                        stepID: this.step.stepName,\n                    },\n                ];\n                this.manager.setInformationResults(errors);\n            } else {\n                const results = this.manager.getInformationResults().filter((r) => r.stepID !== this.step.stepName);\n                this.manager.setInformationResults(results);\n            }\n        });\n    }\n}\n","import { FrameStepHandle } from \"..\";\nimport { UnhandledBehaviorError } from \"../util/exception\";\nimport { WorkflowManager } from \"../WorkflowManager\";\nimport { IllustrationStepHandle } from \"./steps/illustration\";\nimport { MaterialStepHandle } from \"./steps/material\";\nimport { ModelStepHandle } from \"./steps/model\";\nimport { PictureStepHandle } from \"./steps/picture\";\nimport { QuestionStepHandle } from \"./steps/question\";\nimport { ShapeStepHandle } from \"./steps/shape\";\nimport { TextStepHandle } from \"./steps/text\";\nimport { InformationStepHandle } from \"./steps/information\";\nimport { DigitalContentStepHandle } from \"./steps/digitalContent\";\nimport { ModuleStepHandle } from \"./steps/module\";\nimport {\n    AnyStepData,\n    DigitalContentStepData,\n    FrameStepData,\n    IllustrationStepData,\n    InformationStepData,\n    MaterialStepData,\n    ModelStepData,\n    ModuleStepData,\n    PictureStepData,\n    QuestionStepData,\n    ShapeStepData,\n    Step,\n    StepType,\n    TextStepData,\n} from \"../types\";\n\n/**\n * A factory that generates the correct concrete StepHandle implementation\n * for a given step.\n */\nexport class StepHandleFactory {\n    static get(manager: WorkflowManager, step: Step<AnyStepData>) {\n        switch (step.type) {\n            case StepType.DigitalContent:\n                return new DigitalContentStepHandle(\n                    manager,\n                    step as Step<DigitalContentStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Information:\n                return new InformationStepHandle(\n                    manager,\n                    step as Step<InformationStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Question:\n                return new QuestionStepHandle(\n                    manager,\n                    step as Step<QuestionStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Text:\n                return new TextStepHandle(manager, step as Step<TextStepData>, manager.getStepTags(step.stepName));\n            case StepType.Illustration:\n                return new IllustrationStepHandle(\n                    manager,\n                    step as Step<IllustrationStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Picture:\n                return new PictureStepHandle(\n                    manager,\n                    step as Step<PictureStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Shape:\n                return new ShapeStepHandle(manager, step as Step<ShapeStepData>, manager.getStepTags(step.stepName));\n            case StepType.Material:\n                return new MaterialStepHandle(\n                    manager,\n                    step as Step<MaterialStepData>,\n                    manager.getStepTags(step.stepName),\n                );\n            case StepType.Model:\n                return new ModelStepHandle(manager, step as Step<ModelStepData>, manager.getStepTags(step.stepName));\n            case StepType.Frame:\n                return new FrameStepHandle(manager, step as Step<FrameStepData>, manager.getStepTags(step.stepName));\n            case StepType.Module:\n                return new ModuleStepHandle(manager, step as Step<ModuleStepData>, manager.getStepTags(step.stepName));\n            default:\n                throw new UnhandledBehaviorError(`Step type ${step.type} not yet supported in Core SDK`);\n        }\n    }\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\nfunction chunk(array, size, guard) {\n  if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n    size = 1;\n  } else {\n    size = nativeMax(toInteger(size), 0);\n  }\n  var length = array ? array.length : 0;\n  if (!length || size < 1) {\n    return [];\n  }\n  var index = 0,\n      resIndex = 0,\n      result = Array(nativeCeil(length / size));\n\n  while (index < length) {\n    result[resIndex++] = baseSlice(array, index, (index += size));\n  }\n  return result;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = chunk;\n","import { confirmWorkflowStates } from \"../query\";\nimport { graphQlManager } from \"../services/server\";\nimport {\n    Product,\n    DesignCreationMessage,\n    SelectedVariants,\n    Transaction,\n    DesignDetails,\n    DesignWorkflowMetadata,\n    ExportedData,\n    FrameMetadata,\n    IllustrationMetadata,\n    ModuleMetadata,\n    TextMetadata,\n    Design,\n    Workflow,\n    Step,\n    AnyStepData,\n    FrameStepData,\n    IllustrationStepData,\n    ModuleStepData,\n    TextStepData,\n    ILayout,\n    AssetType,\n} from \"../types\";\nimport { WorkflowManager, WorkflowSelections, WorkflowMetadata } from \"../WorkflowManager\";\nimport { persistenceService } from \"./persistence\";\nimport { UnhandledBehaviorError } from \"../util/exception\";\nimport { gql } from \"@apollo/client/core\";\nimport { assetService } from \"./asset\";\nimport { CommandState } from \"../CommandContext\";\nimport { fetch } from \"../util/crossplatform\";\nimport { optionService, SpiffCommerceClient } from \"..\";\nimport chunk from \"lodash.chunk\";\n\n/**\n * This file contains all the functions that contribute to the createDesign function.\n */\n\nconst createDesignTransactionFragment = gql`\n    fragment CreateDesignTransaction on Transaction {\n        id\n        designName\n        externalCartProductId\n        externalCartProductVariantId\n        externalDesignProductId\n        externalDesignProductVariantId\n        lastSyncedAt\n        quantity\n        previewImageLink\n        priceModifierTotal\n        workflowViewerLink\n        workflowViewerReadOnlyLink\n        integrationProduct {\n            id\n            additionalExternalProductId\n            additionalExternalVariantId\n        }\n        designExternalVariants {\n            id\n            externalProductId\n            externalProductVariantId\n        }\n    }\n`;\n\nconst createDesignsMutation = gql`\n    ${createDesignTransactionFragment}\n    mutation CreateDesigns($inputs: [DesignCreateInput]!) {\n        designCreateMany(inputs: $inputs) {\n            id\n            sku\n            transaction {\n                ...CreateDesignTransaction\n            }\n            processExecution {\n                id\n            }\n        }\n    }\n`;\n\n// https://stackoverflow.com/a/69058154\nexport function isTokenExpired(token: string) {\n    const expiry = JSON.parse(atob(token.split(\".\")[1])).exp;\n    return Math.floor(new Date().getTime() / 1000) >= expiry;\n}\n\nconst createDesignsGqlCall = async (\n    designDetails: DesignDetails[],\n    spiffClient: SpiffCommerceClient,\n): Promise<undefined | Design[]> => {\n    const extraHeaders: { [key: string]: string } = {};\n    try {\n        if (spiffClient) {\n            const token = await spiffClient.loggedInBearerToken();\n            extraHeaders[\"Authorization\"] = `Bearer ${token}`;\n        } else {\n            throw new Error(); // Fall back to the amplify hack.\n        }\n    } catch (e) {\n        // Hack to get the token from editor's amplify.\n        const keys = Object.entries(localStorage);\n        const jwtTokenKey =\n            keys.find(([k, _]) => {\n                return k.startsWith(\"CognitoIdentityServiceProvider\") && k.endsWith(\"idToken\");\n            })?.[0] || \"\";\n        const jwtToken = localStorage.getItem(jwtTokenKey);\n        if (jwtToken && !isTokenExpired(jwtToken)) {\n            extraHeaders[\"Authorization\"] = `Bearer ${jwtToken}`;\n        }\n    }\n    if (await spiffClient.getBetaEnabled()) {\n        extraHeaders[\"X-Spiff-Beta\"] = \"true\";\n    }\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{ designCreateMany: Design[] }>({\n        mutation: createDesignsMutation,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            inputs: designDetails.map((designDetail) => ({\n                name: designDetail.name,\n                layouts: designDetail.layouts,\n                workflowId: designDetail.workflowId,\n                transactionId: designDetail.transactionId,\n                previewImage: designDetail.previewImage,\n                useThreeDimPreview: designDetail.useThreeDimPreview,\n                metadata: designDetail.metadata,\n                selectedVariants: designDetail.selectedVariants,\n            })),\n        },\n        context: {\n            headers: extraHeaders,\n        },\n    });\n    return response.data?.designCreateMany;\n};\n\nconst formatMetadata = (\n    metadata: WorkflowMetadata,\n    workflow: Workflow,\n    forCart: boolean,\n): { [name: string]: string } => {\n    const metadataObjectForStep = (step: Step<AnyStepData>) => {\n        const formattedMetadata = {} as any;\n        if (step.type === \"Frame\") {\n            const stepMetadata = metadata[step.stepName] as FrameMetadata;\n            const stepData = step.data as FrameStepData;\n            if (!stepMetadata || !stepMetadata.image || (stepData.hideImageInCart && forCart)) {\n                return formattedMetadata;\n            }\n            // TODO: Need to replace 'image' with locize key 'exportedData.image'\n            formattedMetadata[`${step.stepTitle} ${\"image\"}`] = stepMetadata.image;\n        }\n        if (step.type === \"Illustration\") {\n            const stepMetadata = metadata[step.stepName] as IllustrationMetadata;\n            const stepData = step.data as IllustrationStepData;\n            if (!stepMetadata || (stepData.hideColorsInCart && forCart) || !stepMetadata.colors) {\n                return formattedMetadata;\n            }\n            if (stepMetadata.colors.length > 0) {\n                const colorString = stepMetadata.colors.join(\", \").toUpperCase();\n                // TODO: Need to replace 'colors' with locize key 'exportedData.colors'\n                formattedMetadata[`${step.stepTitle} ${\"colors\"}`] = colorString;\n            }\n        }\n        if (step.type === \"Module\") {\n            const stepMetadata = metadata[step.stepName] as ModuleMetadata;\n            const stepData = step.data as ModuleStepData;\n            if (\n                !stepMetadata ||\n                stepMetadata.text === undefined ||\n                stepMetadata.text === null ||\n                (stepData.hideTextInCart && forCart)\n            ) {\n                return formattedMetadata;\n            }\n            // TODO: Need to replace 'text' with locize key 'exportedData.text'\n            formattedMetadata[`${step.stepTitle} ${\"text\"}`] = stepMetadata.text;\n        }\n        if (step.type === \"Text\") {\n            const stepMetadata = metadata[step.stepName] as TextMetadata;\n            if (!stepMetadata) {\n                return formattedMetadata;\n            }\n            const stepData = step.data as TextStepData;\n            if (\n                !stepData.hideTextInCart ||\n                (!forCart && stepMetadata.text !== undefined && stepMetadata.text !== null)\n            ) {\n                // TODO: Need to replace 'text' with locize key 'exportedData.text'\n                formattedMetadata[`${step.stepTitle} ${\"text\"}`] = stepMetadata.text;\n            }\n            if (stepMetadata.color && (!stepData.hideColorInCart || !forCart)) {\n                // TODO: Need to replace 'color' with locize key 'exportedData.color'\n                formattedMetadata[`${step.stepTitle} ${\"color\"}`] = stepMetadata.color;\n            }\n            if (stepMetadata.strokeColor && (!stepData.hideStrokeInCart || !forCart)) {\n                formattedMetadata[`${step.stepTitle} ${\"stroke\"}`] = stepMetadata.strokeColor;\n            }\n        }\n        return formattedMetadata;\n    };\n\n    const formattedMetadata = {};\n    workflow.steps.forEach((step) => {\n        Object.assign(formattedMetadata, metadataObjectForStep(step));\n    });\n    return formattedMetadata;\n};\n\n// Combine selections and metadata into exported data.\n// Items should be grouped by step in workflow order.\nconst prepareExportedData = (\n    selections: SelectedVariants,\n    workflow: Workflow,\n    metadata?: WorkflowMetadata,\n    designWorkflowMetadata?: DesignWorkflowMetadata,\n): ExportedData => {\n    const exportedData = {} as any;\n    let formattedMetadata: DesignWorkflowMetadata = {};\n    if (metadata) {\n        formattedMetadata = formatMetadata(metadata, workflow, false);\n    } else if (designWorkflowMetadata) {\n        formattedMetadata = designWorkflowMetadata;\n    }\n\n    const stepTitles = workflow.steps.map((s) => s.stepTitle);\n    // https://stackoverflow.com/a/39272981\n    const distinctStepTitles = stepTitles.filter((x, i, a) => a.indexOf(x) == i);\n    for (const stepTitle of distinctStepTitles) {\n        if (Object.keys(selections).includes(stepTitle)) {\n            const selection = selections[stepTitle];\n            const step = workflow.steps.find((step) => step.stepTitle === stepTitle);\n            // TODO: Need to replace 'selection' with locize key 'exportedData.selection'\n            exportedData[`${step?.stepTitle} ${\"selection\"}`] = {\n                value: selection[0].name,\n                priceModifier: selection[0].priceModifier,\n            };\n        }\n        for (const key of Object.keys(formattedMetadata)) {\n            if (\n                [`${stepTitle} color`, `${stepTitle} colors`, `${stepTitle} text`, `${stepTitle} image`].includes(key)\n            ) {\n                exportedData[key] = {\n                    value: formattedMetadata[key],\n                    priceModifier: 0,\n                };\n            }\n        }\n    }\n\n    return exportedData;\n};\n\nconst createDesignMessage = (\n    transaction: Transaction,\n    product: Product,\n    workflow: Workflow,\n    selectedVariants: SelectedVariants,\n    generatedSku?: string,\n    metadata?: { [stepName: string]: string },\n    lineItemImageLink?: string,\n    processExecutionId?: string,\n): DesignCreationMessage => {\n    const baseCost = product.basePrice || 0;\n    const optionsCost = transaction.priceModifierTotal || 0;\n    const exportedData = prepareExportedData(selectedVariants, workflow, undefined, metadata);\n\n    const ownerMap = persistenceService.getMap(\"transactionOwnerIds\") || new Map();\n    const ownerId = ownerMap.get(transaction.id);\n\n    const msgObject: DesignCreationMessage = {\n        additionalExternalProductId: transaction.integrationProduct?.additionalExternalProductId,\n        additionalExternalVariantId: transaction.integrationProduct?.additionalExternalVariantId,\n        baseCost,\n        designExternalVariants: transaction.designExternalVariants,\n        designProductId: transaction.externalDesignProductId,\n        designProductVariantId: transaction.externalDesignProductVariantId,\n        event: \"onComplete\",\n        exportedData,\n        externalCartProductId: transaction.externalCartProductId,\n        externalCartProductVariantId: transaction.externalCartProductVariantId,\n        lineItemImageUrl: lineItemImageLink || \"\",\n        optionsCost,\n        processExecutionId,\n        quantity: transaction.quantity,\n        transactionId: transaction.id,\n        transactionOwnerId: ownerId,\n        weight: product.weight,\n        workflowViewerLink: transaction.workflowViewerLink || \"\",\n        workflowViewerReadOnlyLink: transaction.workflowViewerReadOnlyLink || \"\",\n    };\n    if (metadata) {\n        msgObject.metadata = metadata;\n    }\n    if (selectedVariants) {\n        msgObject.selectedVariants = selectedVariants;\n    }\n    if (generatedSku) {\n        msgObject.sku = generatedSku;\n    }\n    return msgObject;\n};\n\nexport const createDesignDetails = async (\n    workflowManager: WorkflowManager,\n    workflow: Workflow,\n    layouts: ILayout[],\n    getReducerState: () => CommandState,\n    transaction: Transaction,\n    workflowSelections: WorkflowSelections,\n    designName: string,\n    createPreviewImage: (shouldRender3D?: boolean, transactionId?: string) => Promise<string | undefined>,\n    workflowMetadata?: WorkflowMetadata,\n    forceFlushState?: boolean,\n): Promise<{\n    designDetails: DesignDetails;\n    cartSelectionsWithPrices: SelectedVariants;\n    cartMetadata: { [stepName: string]: string } | undefined;\n}> => {\n    if (forceFlushState) {\n        console.warn(\"State mismatch detected. Uploading known state explicitly\");\n        console.warn(\"State Object:\", JSON.stringify(getReducerState()));\n        await workflowManager.updateStateWithServerImmediate(getReducerState);\n        console.log(\"Server state is undefined @ Workflow completion\"!);\n    }\n\n    const previewService = workflowManager.getPreviewService();\n    const cameraOrientation = workflow?.finalizeStepConfig?.lookAtAnimation;\n    const shouldUploadThreeDimPreview = previewService && workflow.showModelOnFinishStep && !!cameraOrientation;\n\n    const cartMetadata = workflowMetadata && formatMetadata(workflowMetadata, workflow, true);\n    const designMetadata = workflowMetadata && formatMetadata(workflowMetadata, workflow, false);\n\n    const getSelections = async (forCart: boolean): Promise<[SelectedVariants, number]> => {\n        const selectedVariants: SelectedVariants = {};\n        let optionsCost = 0;\n        if (Object.keys(workflowSelections).length > 0) {\n            for (const stepId of Object.keys(workflowSelections)) {\n                const stepSelections = workflowSelections[stepId];\n                const step = workflow.steps.find((step) => step.stepName === stepId);\n                for (let i = 0; i < stepSelections.selections.length; ++i) {\n                    const variant = stepSelections.selections[i];\n                    // Attach a selection if:\n                    // * these selections aren't for the cart; or\n                    // * the selection isn't configured to be hidden and there's\n                    // multiple variants for the step.\n                    if (step) {\n                        const stepOption = await optionService.getOptionForStep(step);\n                        if (\n                            !forCart ||\n                            (stepOption &&\n                                (stepOption.variants || []).length > 1 &&\n                                !(step.data as any).hideSelectionInCart &&\n                                !(step.data as any).hideSelectionsInCart)\n                        ) {\n                            const stepTitle = step.stepTitle;\n                            if (selectedVariants[stepTitle]) {\n                                selectedVariants[stepTitle].push({\n                                    id: variant.id || \"\",\n                                    name: variant.name,\n                                    priceModifier: variant.priceModifier,\n                                });\n                            } else {\n                                selectedVariants[stepTitle] = [\n                                    {\n                                        id: variant.id || \"\",\n                                        name: variant.name,\n                                        priceModifier: variant.priceModifier,\n                                    },\n                                ];\n                            }\n                        }\n                    }\n\n                    optionsCost += variant.priceModifier;\n                }\n            }\n        }\n        return [selectedVariants, optionsCost];\n    };\n\n    const [cartSelectionsWithPrices] = await getSelections(true);\n    const cartSelections: { [key: string]: string[] } = Object.fromEntries(\n        Object.keys(cartSelectionsWithPrices).map((key) => [key, cartSelectionsWithPrices[key].map((item) => item.id)]),\n    );\n\n    const [designSelectionsWithPrices] = await getSelections(false);\n    const designSelections: { [key: string]: string[] } = Object.fromEntries(\n        Object.keys(designSelectionsWithPrices).map((key) => [\n            key,\n            designSelectionsWithPrices[key].map((item) => item.id),\n        ]),\n    );\n\n    // We are required to upload some assets now, we'll store their upload promises here\n    // and await them at the end so we can get through as much computation as possible without\n    // holding up the main thread.\n    let previewImageUrl = await createPreviewImage(shouldUploadThreeDimPreview, transaction.id);\n    if (previewImageUrl) {\n        const previewImageBlob = await (await fetch(previewImageUrl)).blob();\n        const asset = await assetService.uploadAsset(\n            { name: `${transaction.id}-preview-image.png`, blob: previewImageBlob },\n            AssetType.Image,\n            true,\n            false,\n        );\n        previewImageUrl = asset.fileLink!;\n    }\n\n    const assembleDesignDetails = () => {\n        const designDetails: DesignDetails = {\n            name: designName,\n            layouts: layouts.map((layout) => {\n                return {\n                    index: layout.index,\n                    panelId: layout.panelId,\n                };\n            }),\n            workflowId: workflow.id,\n            transactionId: transaction.id,\n            useThreeDimPreview: !!shouldUploadThreeDimPreview,\n            previewImage: previewImageUrl,\n        };\n        if (designMetadata) {\n            const metadataList: { key: string; value: string }[] = [];\n            for (const [key, value] of Object.entries(designMetadata)) {\n                metadataList.push({ key, value });\n            }\n            designDetails.metadata = metadataList;\n        }\n        if (cartSelections) {\n            const selectionsList: { key: string; ids: string[] }[] = [];\n            for (const [key, value] of Object.entries(designSelections)) {\n                selectionsList.push({ key, ids: value });\n            }\n            designDetails.selectedVariants = selectionsList;\n        }\n        return designDetails;\n    };\n    return {\n        designDetails: assembleDesignDetails(),\n        cartSelectionsWithPrices,\n        cartMetadata,\n    };\n};\n\nexport const createDesigns = async (\n    options: {\n        workflowManager: WorkflowManager;\n        workflow: Workflow;\n        layouts: ILayout[];\n        getReducerState: () => CommandState;\n        product: Product;\n        transaction: Transaction;\n        workflowSelections: WorkflowSelections;\n        designName: string;\n        workflowMetadata?: WorkflowMetadata;\n    }[],\n    createPreviewImage?: (shouldRender3D?: boolean, transactionId?: string) => Promise<string | undefined>,\n): Promise<DesignCreationMessage[]> => {\n    // Flush any outstanding workflow manager state updates.\n    await Promise.all(\n        options.map(async (option) => {\n            await option.workflowManager.outstandingRequestsPromise();\n        }),\n    );\n\n    const getFailedStates = async (): Promise<string[]> => {\n        const graphQlClient = graphQlManager.getShadowGraphqlClient();\n        const transactions = await Promise.all(\n            options.map(async (option) => ({\n                id: option.transaction.id,\n                hash: await option.workflowManager.getStateHash(),\n            })),\n        );\n        const chunkSize = 100;\n        const chunkedTransactions = chunk(transactions, chunkSize);\n        const failedStates: string[] = [];\n        for (const items of chunkedTransactions) {\n            const serverWorkflowStates = await graphQlClient.query<{ transactionConfirmWorkflowStates: string[] }>({\n                query: confirmWorkflowStates,\n                variables: {\n                    transactions: items,\n                },\n                fetchPolicy: \"no-cache\",\n                errorPolicy: \"all\",\n            });\n            if (serverWorkflowStates.errors && serverWorkflowStates.errors.length > 0) {\n                return transactions.map((t) => t.id);\n            }\n            failedStates.push(...(serverWorkflowStates.data?.transactionConfirmWorkflowStates ?? []));\n        }\n        return failedStates;\n    };\n\n    const unsyncedStates = await getFailedStates();\n\n    const createDesignResults = await Promise.all(\n        options.map(async (option) => {\n            return await createDesignDetails(\n                option.workflowManager,\n                option.workflow,\n                option.layouts,\n                option.getReducerState,\n                option.transaction,\n                option.workflowSelections,\n                option.designName,\n                createPreviewImage ?? (() => Promise.resolve(undefined)),\n                option.workflowMetadata,\n                unsyncedStates.includes(option.transaction.id),\n            );\n        }),\n    );\n    const client = options[0].workflowManager.getClient();\n    const createDesignsResponse = await createDesignsGqlCall(\n        createDesignResults.map((result) => result.designDetails),\n        client,\n    );\n    if (!createDesignsResponse) {\n        throw new Error(\"Failed to create designs\");\n    }\n    return createDesignsResponse.map((design, index) => {\n        const option = options[index];\n        const createDesignResult = createDesignResults[index];\n        const upToDateTransaction = design.transaction!;\n        return createDesignMessage(\n            upToDateTransaction,\n            option.product,\n            option.workflow,\n            createDesignResult.cartSelectionsWithPrices,\n            design.sku,\n            createDesignResult.cartMetadata,\n            upToDateTransaction.previewImageLink,\n            design.processExecution?.id,\n        );\n    });\n};\n\nexport interface SavedDesign {\n    /**\n     * The user's name for this saved design.\n     */\n    title: string;\n    /**\n     * A URL pointing to an image of the design. Typically a data URL\n     */\n    thumbnail?: string;\n    /**\n     * The ID of the transaction relating to this design.\n     */\n    transactionId: string;\n    /**\n     * The product ID for this transaction.\n     */\n    productId: string;\n    /**\n     * The integration product ID related to this order.\n     */\n    integrationProductId: string;\n    /**\n     * The name of the workflow annotated at time of save (may be different from current workflow name).\n     */\n    workflowName: string;\n    /**\n     * The ID of the workflow annotated at time of save.\n     */\n    workflowId: string;\n    /**\n     * The last edit that occured on this saved design.\n     */\n    lastEdited: Date;\n}\n/**\n * Represents the current method of storage for saved designs.\n */\nenum StorageMethod {\n    Local = \"Local\",\n    Remote = \"Remote\",\n}\n\n/**\n * The design service exposes helper functionality wrapping important design management operations.\n * NOTE: In the future this interface should allow for storing/pulling designs from the server.\n */\nclass DesignService {\n    public readonly localPersistenceKey = \"designTransactions\";\n    private storageMethod: StorageMethod = StorageMethod.Local;\n    private designSavedListeners: ((designs: SavedDesign) => void)[] = [];\n\n    /**\n     * @param func The function to call when a design is saved.\n     */\n    attachSaveListener(func: (design: SavedDesign) => void) {\n        this.designSavedListeners.push(func);\n    }\n\n    /**\n     * @param func The function to remove from the list of listeners.\n     */\n    detachSaveListener(func: (design: SavedDesign) => void) {\n        this.designSavedListeners = this.designSavedListeners.filter((f) => f !== func);\n    }\n\n    /**\n     * Gets the currently persisted designs.\n     */\n    async getSavedDesigns(): Promise<SavedDesign[]> {\n        if (this.storageMethod === StorageMethod.Local) {\n            const persistedString = persistenceService.get(this.localPersistenceKey);\n            const savedDesigns = persistedString ? (JSON.parse(persistedString) as SavedDesign[]) : [];\n            return savedDesigns;\n        }\n        throw new UnhandledBehaviorError(\"Unexpected storage method requested\");\n    }\n\n    /**\n     * Search for a transaction that has been saved.\n     * @param transactionId The id to search for.\n     * @returns The transaction for the given id provided it has been saved. undefined if it doesn't exist.\n     */\n    async getSavedDesignByTransaction(transactionId: string): Promise<SavedDesign | undefined> {\n        const designs = await this.getSavedDesigns();\n        return designs.find((d) => d.transactionId === transactionId);\n    }\n\n    /**\n     * Saves a design to storage.\n     * @param design The design to save.\n     */\n    async addDesign(design: SavedDesign) {\n        const designs = await this.getSavedDesigns();\n        const newDesigns = designs.filter((d) => d.transactionId !== design.transactionId);\n        newDesigns.unshift(design);\n        await this.setDesigns(newDesigns);\n        this.designSavedListeners.forEach((listener) => listener(design));\n    }\n\n    /**\n     * Change the user's name of the given saved design.\n     */\n    async renameDesign(transactionId: string, title: string) {\n        const designs = await this.getSavedDesigns();\n        const design = designs.find((d) => d.transactionId === transactionId);\n        if (!design) {\n            throw new Error(`No saved design for transaction ${transactionId}.`);\n        }\n        design.title = title;\n        await this.setDesigns(designs);\n    }\n\n    /**\n     * Removes a given design from storage.\n     * @param transactionId\n     */\n    async removeDesign(transactionId: string) {\n        const designs = await this.getSavedDesigns();\n        await this.setDesigns(designs.filter((d) => d.transactionId !== transactionId));\n    }\n\n    private async setDesigns(designs: SavedDesign[]) {\n        if (this.storageMethod === StorageMethod.Local) {\n            persistenceService.set(this.localPersistenceKey, JSON.stringify(designs));\n            return;\n        }\n        throw new UnhandledBehaviorError(\"Unexpected storage method requested\");\n    }\n}\nconst designService = new DesignService();\nexport { designService };\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { Pith } from \"pith\";\nimport {\n    Bundle,\n    CommandContext,\n    FrameStepData,\n    getWorkflow,\n    IllustrationStepData,\n    LayoutsState,\n    ModuleStepData,\n    optionService,\n    persistenceService,\n    SpiffCommerceClient,\n    TextStepData,\n    TextStepHandle,\n    WorkflowSelections,\n} from \"../index\";\nimport { StepHandle } from \"../stepHandles\";\nimport {\n    Product,\n    DesignCreationMessage,\n    Transaction,\n    CustomerDetailsInput,\n    Workflow,\n    ILayout,\n    AnyStepData,\n    StepType,\n    LayoutRenderingPurpose,\n    GlobalPropertyAspectConfiguration,\n    Step,\n    FrameMetadata,\n    IllustrationMetadata,\n    ModuleMetadata,\n    TextMetadata,\n} from \"../types\";\nimport { WorkflowManager, InternalWorkflowManager, StateMutationFunc } from \"../WorkflowManager\";\nimport { StepHandleFactory } from \"../stepHandles/factory\";\nimport { designService, SavedDesign, createDesigns } from \"../services/design\";\nimport cloneDeep from \"lodash.clonedeep\";\nimport { ResourceGenerationError, UnhandledBehaviorError } from \"../util/exception\";\nimport debounce from \"lodash.debounce\";\nimport { RenderableScene, stepConditionsAreSatisfied } from \"../WorkflowManager/scenes\";\nimport type { ModelContainer } from \"@repo/preview\";\nimport { LayoutPreviewService } from \"../WorkflowManager/LayoutPreviewService\";\nimport { gql } from \"@apollo/client/core\";\nimport {\n    additionalProductFragment,\n    conversionConfigurationFragment,\n    finalizeUpdateTransactionMutation,\n    updateTransactionQuantityQuery,\n    updateTransactionWorkflowQuery,\n} from \"../query\";\nimport { createCanvas, getDomParser, loadImage } from \"../customCanvas\";\nimport { getSvgElement } from \"../CommandContext\";\nimport { renderPapyrusComponentAsString } from \"../util/crossplatform\";\nimport { GraphQlClientFunc } from \"../services/graphql\";\n\nconst addTransactionStakeholderMutation = gql`\n    mutation AddTransactionStakeholder($id: String!, $type: String!, $details: CustomerDetailsInput!) {\n        transactionAddStakeholder(id: $id, details: $details, type: $type) {\n            id\n            stakeholders {\n                id\n                type\n                customer {\n                    id\n                    emailAddress\n                }\n            }\n        }\n    }\n`;\n\nconst addAddressToTransactionMutation = gql`\n    mutation AddAddressToTransaction(\n        $transactionId: String!\n        $streetAddress: String\n        $apartment: String\n        $city: String\n        $country: String\n        $state: String\n        $postCode: String\n    ) {\n        addressAttachToTransaction(\n            transactionId: $transactionId\n            streetAddress: $streetAddress\n            apartment: $apartment\n            city: $city\n            country: $country\n            state: $state\n            postCode: $postCode\n        ) {\n            id\n        }\n    }\n`;\n\nconst addOrganizationToTransactionMutation = gql`\n    mutation AddOrganizationToTransaction($transactionId: String!, $organizationName: String!) {\n        organizationAttachToTransaction(transactionId: $transactionId, organizationName: $organizationName) {\n            id\n        }\n    }\n`;\n\nconst transactionUpdateIntegrationProductMutation = gql`\n    ${additionalProductFragment}\n    ${conversionConfigurationFragment}\n    mutation TransactionUpdateIntegrationProduct($id: String!, $integrationProductId: String) {\n        transactionUpdateIntegrationProduct(id: $id, integrationProductId: $integrationProductId) {\n            id\n            integrationProduct {\n                id\n                externalProductId\n                externalVariantId\n                additionalExternalProductId\n                additionalExternalVariantId\n            }\n            product {\n                id\n                basePrice\n                enabled\n                minimumOrderQuantity\n                name\n                description\n                partner {\n                    id\n                    name\n                    currencyCode\n                    customerDetailsPromptMarkdown\n                }\n                productImages {\n                    id\n                    precedence\n                    asset {\n                        key\n                        fileLink\n                        name\n                        type\n                    }\n                }\n                integrationProducts {\n                    id\n                    integration {\n                        id\n                        type\n                    }\n                    externalProductId\n                    externalVariantId\n                    additionalExternalProductId\n                    additionalExternalVariantId\n                    additionalIntegrationProduct {\n                        ...AdditionalIntegrationProductFields\n                    }\n                }\n                profanities {\n                    id\n                    word\n                }\n                sku\n                skuCode\n                weight\n                workflows {\n                    id\n                    friendlyName\n                    isPresent\n                    workflowName\n                    imageUrl\n                }\n                imageUrl\n                modelUrl\n                overlayImageUrl\n                preloadImageUrl\n                promptForCustomerDetails\n                conversionConfiguration {\n                    ...ConversionConfigurationFields\n                }\n                productTags {\n                    id\n                    name\n                }\n                priceBreaks {\n                    id\n                    minQty\n                    percentage\n                }\n            }\n        }\n    }\n`;\n\n/**\n * A scene is a collection of steps that can be used to group steps together.\n */\nexport interface Scene {\n    /**\n     * The unique identifier for the scene.\n     */\n    id?: string;\n    /**\n     * The name of the scene.\n     */\n    name: string;\n    /**\n     * The steps that are part of the scene. A list of ids. See getStepById.\n     */\n    stepIds: string[];\n}\n\n/**\n * State related to a workflow experience.\n */\nexport interface ExperienceOptions {\n    transaction: Transaction;\n\n    workflow?: Workflow;\n\n    modelContainer?: ModelContainer;\n    renderableContextService?: LayoutPreviewService;\n    reloadedState?: LayoutsState;\n    /**\n     * When true the experience is intended to be immutable.\n     */\n    readOnly?: boolean;\n    /**\n     * A function that communicates state changes to the server.\n     */\n    stateMutationFunc: StateMutationFunc;\n    /**\n     * The interface for the graphql client\n     */\n    graphQlClient: GraphQlClientFunc;\n    /**\n     * Should be set to true when the experience is loaded from an existing transaction.\n     * FIXME: Wouldn't we know this from existance of reloadedState\n     */\n    isReloadedTransaction?: boolean;\n    /**\n     * When true the system will treat steps with\n     * a single variant as renderable. False\n     * by default.\n     */\n    singleVariantsRenderable?: boolean;\n\n    /**\n     * When true, will delay syncing the workflow state until manually enabled.\n     */\n    delayWorkflowStateSync?: boolean;\n}\n\n/**\n * A Workflow experience encapsulates the workflow manager and command context. It\n * provides a simplified interface for interacting with the workflow manager. You\n * should get an instance of this class from a Client you have constructed previously.\n */\nexport interface WorkflowExperience {\n    /**\n     * Get the current transaction for this experience.\n     */\n    getTransaction(): Transaction;\n\n    /**\n     * Get the bundle this experience is part of. May be undefined.\n     */\n    getBundle(): Bundle | undefined;\n\n    /**\n     * Set the bundle this experience is part of. Can be cleared using undefined.\n     */\n    setBundle(bundle: Bundle | undefined);\n\n    /**\n     * Get the current product for this experience. May be undefined.\n     */\n    getProduct(): Product | undefined;\n\n    /**\n     * Get the current profanity list for this experience. May be empty.\n     */\n    getProfanityList(): string[];\n\n    /**\n     * Set the current product for this experience.\n     * @param product The new product to set.\n     */\n    setProduct(integrationProductId: string): Promise<void>;\n\n    /**\n     * Clear the product from this experience.\n     */\n    clearProduct(): Promise<void>;\n\n    /**\n     * Get the current workflow for this experience. May be undefined.\n     */\n    getWorkflow(): Workflow | undefined;\n\n    /**\n     * Set the current workflow for this experience.\n     * @param workflow The new workflow to set.\n     */\n    setWorkflow(workflow: Workflow): Promise<void>;\n\n    /**\n     * Returns the client that was responsible for spawning this experience.\n     */\n    getClient(): SpiffCommerceClient;\n    /**\n     * State related to the design of the user.\n     */\n    getCommandContext(): CommandContext;\n    /**\n     * Returns true when the user may only view the design.\n     */\n    getIsReadOnly(): boolean;\n    /**\n     * Get the low level workflow amanager instance for this experience. Don't touch this unless you're willing to break things.\n     */\n    getWorkflowManager(): WorkflowManager;\n\n    /**\n     * Returns the step matching a given name, undefined if not found.\n     * @param id The id the step must match.\n     */\n    getStepById(id: string): StepHandle<AnyStepData> | undefined;\n\n    /**\n     * Returns the step matching a given name, undefined if not found.\n     * @param name The name the step must match.\n     */\n    getStepByName(name: string): StepHandle<AnyStepData> | undefined;\n\n    /**\n     * Returns all steps matching a specific type in the workflow. These steps\n     * may be across multiple scenes and may or may not be active based on condition state.\n     */\n    getStepsByType(type: StepType): StepHandle<AnyStepData>[];\n\n    /**\n     * Returns all steps that are children of a given scene.\n     * @param scene The scene you want the steps for.\n     */\n    getStepsByScene(scene: Scene): StepHandle<AnyStepData>[];\n\n    /**\n     * Returns all steps in the workflow. Ordered by scene and appearance within their respective scenes.\n     */\n    getSteps(): StepHandle<AnyStepData>[];\n\n    /**\n     * Returns all steps in the workflow that are conditionally active. Ordered by scene and appearance within their respective scenes.\n     */\n    getStepsConditionallyActive(): Promise<StepHandle<AnyStepData>[]>;\n\n    /**\n     * Returns a list of scenes that are configured in the workflow. Each scene\n     * contains a list of steps. See getStepsByScene to access these.\n     */\n    getScenes(): Scene[];\n\n    /**\n     * Returns the total cost in subunits for all selections made on the design.\n     * @param disablePriceBreaks Whether to exclude price breaks from the calculation.\n     */\n    getSelectionPriceSubunits(disablePriceBreaks?: boolean): number;\n\n    /**\n     * Returns the total cost in subunits for the base product.\n     * @param includeAdditionalProduct When true the additional product cost will be included in the total (if configured).\n     * @param disablePriceBreaks Whether to exclude price breaks from the calculation.\n     */\n    getBasePriceSubunits(includeAdditionalProduct?: boolean, disablePriceBreaks?: boolean): number;\n\n    /**\n     * If an additional product is configured, returns the base price of that product. Returns undefined otherwise.\n     * @param disablePriceBreaks Whether to exclude price breaks from the calculation.\n     */\n    getAdditionalProductPriceSubunits(disablePriceBreaks?: boolean): number | undefined;\n\n    /**\n     * A convenience function returning the sum of the selection and base price values.\n     * @param disablePriceBreaks Whether to exclude price breaks from the calculation.\n     */\n    getTotalPriceSubunits(disablePriceBreaks?: boolean): number;\n\n    /**\n     * The price break percentage that is expected to be applied in price calculations.\n     */\n    priceBreakToBeApplied(): number;\n\n    /**\n     * Calculates the price break and fires the \"PriceBreakChanged\" event if required.\n     * This function is primarily intended for internal use.\n     */\n    checkForPriceBreakChanges(): void;\n\n    /**\n     * Takes selections made by the user in another workflow and applies them to this workflow. For\n     * selections to be copied they must both have a matching global property configuration.\n     * @param experience The experience to take selections from.\n     * @param filter A list of steps to apply the selections to. If undefined all steps will be updated.\n     */\n    copySelectionsViaGlobalConfiguration(\n        bundle: Bundle,\n        experience: WorkflowExperience,\n        filter?: StepHandle<AnyStepData>[],\n    ): Promise<void>;\n\n    /**\n     * Attach specific details about the customer to the experience. This is useful for things like retargeting. Currently only\n     * email is supported. From SpiffCommerce hosted experiences these details will be attached whenever the customer has provided & given permission.\n     * @param details The new customer details. Only email is supported.\n     * @deprecated Use assignCustomerDetails instead.\n     */\n    attachCustomerDetails(details: {\n        /**\n         * An email used for things like sending a design to the user.\n         */\n        email: string;\n    }): Promise<void>;\n\n    /**\n     * Attach specific details about the customer to the experience. This is useful for things like retargeting.\n     * From SpiffCommerce hosted experiences these details will be attached whenever the customer has provided & given permission.\n     * @param details The new customer details.\n     */\n    assignCustomerDetails(details: CustomerDetailsInput): Promise<void>;\n\n    /**\n     * Attaches a listener to the scenes on a workflow experience. The scenes returned are a subset of the scenes configured in the\n     * workflow and are based on the current state of the experience. This is useful for building a navigation menu.\n     * @param cb The callback to be called when the scenes change. The new scenes are passed as an argument.\n     */\n    attachRenderableSceneListener(cb: (scenes: RenderableScene[]) => void): void;\n\n    /**\n     * Detaches a listener from the scenes on a workflow experience.\n     */\n    detachRenderableSceneListener(cb: (scenes: RenderableScene[]) => void): void;\n\n    /**\n     * Saves this experience to storage. This may be local or remote depending\n     * on configuration.\n     * @param title The title for the saved design.\n     */\n    save(title: string): Promise<SavedDesign>;\n\n    /**\n     * Returns a copy of the currently loaded design as a new, seperated workflow experience with\n     * a fresh transaction.\n     */\n    copy(): Promise<WorkflowExperience>;\n\n    /**\n     * Creates a data URL preview for the current design.\n     */\n    createPreviewImage(isThreeD?: boolean, resolution?: number): Promise<string>;\n\n    /**\n     * To be called when the workflow experience is considered completed by the user.\n     * @param onProgressUpdate Progress callback for finalizing the design. Optional\n     * @param capturePreviewImage When true a preview image will be generated for the design. Defaults to true.\n     */\n    onDesignFinished(capturePreviewImage?: boolean): Promise<DesignCreationMessage>;\n\n    /**\n     * Returns the metadata associated with this workflow experience.\n     * This is a combination of the metadata from the workflow, and the selections made by the user.\n     * @returns An array of ExportedStepData objects, each containing the step ID, title, and properties.\n     */\n    getExportedStepData(): Promise<ExportedStepData[]>;\n\n    /**\n     * Get the quantity of this WorkflowExperience's Transaction.\n     * @returns The amount that was, or will be, ordered.\n     */\n    getQuantity(): number;\n\n    /**\n     * Sets the quantity of this WorkflowExperience's Transaction.\n     * @throws {Error} if the WorkflowExperience is read-only.\n     * @throws {RangeError} if the value is below 1.\n     * @param quantity The amount that was, or will be, ordered.\n     * @returns A promise that resolves when the Transaction has been updated on the server.\n     */\n    setQuantity(quantity: number): Promise<void>;\n\n    /**\n     * Registers a callback function to be called when the specified event is raised.\n     * TODO: We should include a second param to pass information about the event?\n     * @param type The type of event to listen for.\n     * @param callback The function to call when the event occurs.\n     */\n    addEventListener(\n        type: WorkflowExperienceEventType,\n        callback: (workflowExperience: WorkflowExperience) => void,\n    ): void;\n\n    /**\n     * Removes a previously registered callback.\n     * @param type The type of event.\n     * @param callback The function to remove.\n     */\n    removeEventListener(\n        type: WorkflowExperienceEventType,\n        callback: (workflowExperience: WorkflowExperience) => void,\n    ): void;\n\n    attachAddress(\n        streetAddress?: string,\n        apartment?: string,\n        city?: string,\n        country?: string,\n        state?: string,\n        postCode?: string,\n    ): Promise<void>;\n\n    attachOrganization(name: string): Promise<void>;\n\n    // TODO: merge this with fireEvent\n    callEvent(type: WorkflowExperienceEventType);\n}\n\nexport type ExportedStepDataPropertyType = \"selection\" | \"color\" | \"image\" | \"text\";\n\nexport interface ExportedStepDataProperty {\n    type: ExportedStepDataPropertyType;\n    value: string;\n    priceModifier: number;\n}\n\n// The metadata and variant selections of a step.\nexport interface ExportedStepData {\n    stepId: string;\n    title: string;\n    properties: ExportedStepDataProperty[];\n}\n\n// The variant selections of a completed step.\nexport interface SelectedVariants {\n    [stepName: string]: {\n        id: string;\n        name: string;\n        priceModifier: number;\n    }[];\n}\n\nexport enum WorkflowExperienceEventType {\n    PriceBreakChanged = \"PriceBreakChanged\",\n    ProductChanged = \"ProductChanged\",\n    QuantityChanged = \"QuantityChanged\",\n    RecipientChanged = \"RecipientChanged\",\n    SelectionChanged = \"SelectionChanged\",\n}\n\n/**\n * Different types of aspect of a step that can be configured to be the target of global properties\n */\nenum AspectType {\n    FileUpload = \"FileUpload\",\n    Option = \"Option\",\n    Text = \"Text\",\n}\n\nexport class WorkflowExperienceImpl implements WorkflowExperience {\n    readonly client: SpiffCommerceClient;\n    readonly transaction: Transaction;\n\n    readonly graphQlClient: GraphQlClientFunc;\n    readonly workflowManager: WorkflowManager;\n    readonly isReadOnly: boolean;\n    readonly cachedStepHandles: Map<string, StepHandle<any>> = new Map();\n\n    /**\n     * Bundle this experience has been added to.\n     */\n    private bundle?: Bundle;\n    private profanityList: string[] = [];\n    private workflow?: Workflow;\n    private currentPriceBreak = 1;\n\n    // A list of scenes that currently available to the user. This is a subset of the scenes available in the workflow.\n    // The steps contained within are also a subset.\n    private renderableScenes: RenderableScene[] = [];\n    private renderableSceneCallbacks: ((scenes: RenderableScene[]) => void)[] = [];\n\n    private eventCallbacks: Map<WorkflowExperienceEventType, ((workflowExperience: WorkflowExperience) => void)[]> =\n        new Map();\n\n    constructor(client: SpiffCommerceClient, experienceOptions: ExperienceOptions) {\n        this.client = client;\n        this.transaction = experienceOptions.transaction;\n        this.workflow = experienceOptions.workflow;\n        this.profanityList = this.transaction.product?.profanities?.map((x) => x.word) || [];\n\n        this.isReadOnly = experienceOptions.transaction.isOrdered || !!experienceOptions.readOnly;\n        this.graphQlClient = experienceOptions.graphQlClient;\n\n        this.workflowManager = new InternalWorkflowManager(\n            this,\n            client,\n            (request) => {\n                try {\n                    this.debouncedSavedDesignUpdate();\n                } catch {\n                    console.error(\"Failed to update saved design details.\");\n                }\n                return experienceOptions.stateMutationFunc(request);\n            },\n            experienceOptions.graphQlClient,\n            experienceOptions.reloadedState,\n            experienceOptions.readOnly,\n            experienceOptions.modelContainer,\n            experienceOptions.isReloadedTransaction,\n            experienceOptions.singleVariantsRenderable,\n            experienceOptions.delayWorkflowStateSync,\n        );\n\n        // We attach a listener to the manager and update the available scenes when they change. We store simplified information about the scenes\n        // instead of the full complex structure. Internal scene state/configuration should be considered private & exposed through handles instead.\n        // The user can get reference to a handle via the step ID returned here.\n        this.workflowManager.addSelectionCallback((callbackOptions) => {\n            const newScenes = callbackOptions.traversableScenes.map((workflowScene) => {\n                const newSteps = workflowScene.renderableSteps.map((step) => step.stepName);\n                return {\n                    id: workflowScene.name,\n                    title: workflowScene.title,\n                    renderableSteps: newSteps,\n                    workflowScene,\n                } as RenderableScene;\n            });\n            this.renderableScenes = newScenes;\n            this.renderableSceneCallbacks.forEach((cb) => cb(newScenes));\n            this.callEvent(WorkflowExperienceEventType.SelectionChanged);\n        });\n\n        this.currentPriceBreak = this.priceBreakToBeApplied();\n    }\n\n    getTransaction(): Transaction {\n        return this.transaction;\n    }\n\n    getProduct(): Product | undefined {\n        return this.transaction.product;\n    }\n\n    getProfanityList(): string[] {\n        return this.profanityList;\n    }\n\n    async setProduct(integrationProductId: string): Promise<void> {\n        this.workflow = undefined;\n        const response = await this.graphQlClient().mutate({\n            mutation: transactionUpdateIntegrationProductMutation,\n            variables: {\n                id: this.getTransaction().id,\n                integrationProductId,\n            },\n        });\n        const newProduct = response.data?.transactionUpdateIntegrationProduct.product;\n        if (!newProduct) {\n            throw new UnhandledBehaviorError(\"Failed to set product. No product returned from server.\");\n        }\n        if (!this.bundle) {\n            throw new UnhandledBehaviorError(\"Cannot set product on experience that is not part of a bundle.\");\n        }\n\n        this.transaction.product = {\n            ...this.transaction.product,\n            ...response.data?.transactionUpdateIntegrationProduct.product,\n        };\n\n        this.transaction.integrationProduct = {\n            ...this.transaction.integrationProduct,\n            ...response.data?.transactionUpdateIntegrationProduct.integrationProduct,\n        };\n\n        this.transaction.workflowState = undefined;\n\n        this.currentPriceBreak = this.priceBreakToBeApplied();\n\n        this.callEvent(WorkflowExperienceEventType.ProductChanged);\n\n        const collectionProduct = (await this.bundle.getProductCollection()!.fetchProducts()).find(\n            (p) => p.getId() === newProduct.id,\n        );\n        try {\n            const defaultWorkflow = collectionProduct?.getDefaultWorkflow();\n            if (defaultWorkflow) {\n                const workflow = await getWorkflow(defaultWorkflow.getId());\n                await this.setWorkflow(workflow);\n                console.log(\"Setting Product - Workflow set to default for product.\");\n            }\n        } catch (e) {\n            console.log(\"Setting Product - No default workflow available, must be set manually.\");\n        }\n    }\n\n    async clearProduct(): Promise<void> {\n        if (!this.bundle) {\n            throw new UnhandledBehaviorError(\"Cannot clear product on experience that is not part of a bundle.\");\n        }\n        this.workflow = undefined;\n        this.transaction.workflowState = undefined;\n        this.transaction.product = undefined;\n        this.transaction.integrationProduct = undefined;\n        this.currentPriceBreak = this.priceBreakToBeApplied();\n        this.callEvent(WorkflowExperienceEventType.ProductChanged);\n        await this.graphQlClient().mutate({\n            mutation: transactionUpdateIntegrationProductMutation,\n            variables: {\n                id: this.getTransaction().id,\n            },\n        });\n    }\n\n    getWorkflow(): Workflow | undefined {\n        return this.workflow;\n    }\n\n    async setWorkflow(workflow: Workflow): Promise<void> {\n        this.workflow = workflow;\n        await this.graphQlClient().mutate({\n            mutation: updateTransactionWorkflowQuery,\n            variables: {\n                id: this.getTransaction().id,\n                workflowId: workflow.id,\n            },\n        });\n        return this.workflowManager.setWorkflow(workflow);\n    }\n\n    async attachAddress(\n        streetAddress?: string,\n        apartment?: string,\n        city?: string,\n        country?: string,\n        state?: string,\n        postCode?: string,\n    ): Promise<void> {\n        await this.graphQlClient().mutate({\n            mutation: addAddressToTransactionMutation,\n            variables: {\n                transactionId: this.getTransaction().id,\n                streetAddress: streetAddress || undefined,\n                apartment: apartment || undefined,\n                city: city || undefined,\n                country: country || undefined,\n                state: state || undefined,\n                postCode: postCode || undefined,\n            },\n        });\n    }\n\n    async attachOrganization(name: string): Promise<void> {\n        await this.graphQlClient().mutate({\n            mutation: addOrganizationToTransactionMutation,\n            variables: {\n                transactionId: this.getTransaction().id,\n                organizationName: name,\n            },\n        });\n    }\n\n    getBundle() {\n        return this.bundle;\n    }\n\n    setBundle(bundle: Bundle) {\n        this.bundle = bundle;\n    }\n\n    getClient() {\n        return this.client;\n    }\n\n    getIsReadOnly() {\n        return this.isReadOnly;\n    }\n\n    getCommandContext() {\n        return this.workflowManager.getCommandContext();\n    }\n\n    getWorkflowManager() {\n        return this.workflowManager;\n    }\n\n    async createPreviewImage(isThreeD?: boolean, resolution?: number): Promise<string> {\n        const workflow = this.getWorkflow();\n        const cameraOrientation = workflow?.finalizeStepConfig?.lookAtAnimation;\n\n        if (!workflow) {\n            throw new Error(\"Failed to generate cart preview image! No workflow is set.\");\n        }\n\n        if (isThreeD) {\n            if (!cameraOrientation) {\n                throw new Error(\"Failed to generate cart preview image! No camera orientation configured.\");\n            }\n            const data = await this.workflowManager\n                .getPreviewService()\n                ?.renderSceneScreenshot(resolution ?? 512, cameraOrientation);\n            return data || \"\";\n        }\n\n        let res = 2048;\n        if (resolution && resolution <= 2048) {\n            res = resolution;\n        }\n\n        const canvas = createCanvas(res, res);\n\n        // Resolve default layout for rendering.\n        const layouts = this.workflowManager.getCommandContext().getAllLayouts();\n        const defaultPanelIndex = workflow.defaultPreviewPanelIndex || 0;\n        const targetPanel = workflow.panels[defaultPanelIndex];\n        const defaultLayout = layouts.find((l) => l.layoutState?.layout.panelId === targetPanel?.name) || layouts[0];\n        const region = defaultLayout.layoutState.layout.previewRegion\n            ? {\n                  x: defaultLayout.layoutState.layout.previewRegion.left,\n                  y: defaultLayout.layoutState.layout.previewRegion.top,\n                  width: defaultLayout.layoutState.layout.previewRegion.width,\n                  height: defaultLayout.layoutState.layout.previewRegion.height,\n              }\n            : {\n                  x: 0,\n                  y: 0,\n                  width: defaultLayout.layoutState.layout.width,\n                  height: defaultLayout.layoutState.layout.height,\n              };\n\n        // Render the SVG for the target layout to a data URL for return.\n        const layout = this.workflowManager.getCommandContext().getLayoutById(defaultLayout.layoutState.layout.id);\n        const ctx = canvas.getContext(\"2d\");\n        if (!ctx) {\n            throw new ResourceGenerationError(\"Failed to obtain 2D context for preview image creation\");\n        }\n        const templatingContext = this.workflowManager.getTemplatingContext();\n        const svgElement = getSvgElement(layout.layoutState.layout, layout.layoutState.elements, {\n            renderingConfiguration: {\n                purpose: LayoutRenderingPurpose.Print,\n                region: { left: region.x, top: region.y, width: region.width, height: region.height },\n                templatingContext,\n            },\n        });\n        const svgString = renderPapyrusComponentAsString(svgElement);\n        const pith = await Pith.from(ctx as any, svgString, {\n            anonymousCrossOrigin: true,\n            ignoreDimensions: false,\n            createCanvas: createCanvas as any,\n            createImage: loadImage as any,\n            DOMParser: getDomParser(),\n            fetch: fetch,\n        });\n        await pith.render();\n        const objectUrl = await this.getCanvasObjectURLAsync(canvas as any);\n        return canvas.toDataURL(objectUrl as any);\n    }\n\n    getStepById(id: string) {\n        const stepData = this.getWorkflow()?.steps.find((step) => step.stepName === id);\n        if (!stepData || !this.stepHasHandle(stepData)) return undefined;\n        const cachedHandle = this.cachedStepHandles.get(stepData.stepName);\n        if (cachedHandle) {\n            return cachedHandle;\n        }\n        const createdHandle = StepHandleFactory.get(this.getWorkflowManager(), stepData);\n        this.cachedStepHandles.set(stepData.stepName, createdHandle);\n        return createdHandle;\n    }\n\n    getSteps(): StepHandle<AnyStepData>[] {\n        return this.getScenes().flatMap((scene) => this.getStepsByScene(scene));\n    }\n\n    async getStepsConditionallyActive(): Promise<StepHandle<AnyStepData>[]> {\n        const scenes = this.getScenes();\n        const mapped = await Promise.all(\n            scenes.map(async (scene) => {\n                const steps = this.getStepsByScene(scene);\n                const bools = await Promise.all(\n                    steps.map((step) =>\n                        stepConditionsAreSatisfied(step.getRaw(), this.getWorkflowManager().getStepSelections()),\n                    ),\n                );\n                return steps.filter((_, idx) => bools[idx]);\n            }),\n        );\n        return mapped.flat();\n    }\n\n    getScenes(): Scene[] {\n        // Internally scenes are called step groups, but we expose them to the user as 'scenes'.\n        const stepGroups = this.getWorkflow()?.stepGroups || [];\n        return stepGroups.map((sg) => {\n            return {\n                id: sg.id,\n                name: sg.name,\n                stepIds: sg.stepNames,\n            } as Scene;\n        });\n    }\n\n    getSelectionPriceSubunits(disablePriceBreaks?: boolean): number {\n        const selections = this.getWorkflowManager().getWorkflowSelections();\n        let totalSelectionCost = 0;\n        Object.values(selections).forEach((step) => {\n            totalSelectionCost += step.selections.reduce((acc, variant) => acc + (variant.priceModifier || 0), 0);\n        });\n        return this.getPriceSubUnitsAfterPriceBreaks(totalSelectionCost, disablePriceBreaks);\n    }\n\n    getBasePriceSubunits(includeAdditionalProduct?: boolean, disablePriceBreaks?: boolean): number {\n        const basePrice = this.getPriceSubUnitsAfterPriceBreaks(this.getProduct()?.basePrice || 0, disablePriceBreaks);\n        if (includeAdditionalProduct) {\n            const additionalPrice = this.getAdditionalProductPriceSubunits(disablePriceBreaks) || 0;\n            return basePrice + additionalPrice;\n        }\n        return basePrice;\n    }\n\n    getAdditionalProductPriceSubunits(disablePriceBreaks?: boolean): number | undefined {\n        const integrationProduct = this.getTransaction().integrationProduct;\n        if (integrationProduct?.additionalIntegrationProduct?.product) {\n            const additionalProductPrice = integrationProduct.additionalIntegrationProduct.product.basePrice || 0;\n            return this.getPriceSubUnitsAfterPriceBreaks(additionalProductPrice, disablePriceBreaks);\n        }\n        return undefined;\n    }\n\n    getTotalPriceSubunits(disablePriceBreaks?: boolean): number {\n        return (\n            this.getBasePriceSubunits(false, disablePriceBreaks) + this.getSelectionPriceSubunits(disablePriceBreaks)\n        );\n    }\n\n    private getPriceSubUnitsAfterPriceBreaks(subUnits: number, disablePriceBreaks?: boolean): number {\n        const percentage = disablePriceBreaks ? 1 : this.priceBreakToBeApplied();\n        const finalPrice = subUnits * percentage;\n        return Math.ceil(finalPrice);\n    }\n\n    priceBreakToBeApplied(): number {\n        // Sort price breaks from largest minQty to smallest.\n        const priceBreaks = (this.getProduct()?.priceBreaks || []).sort((a, b) => -(a.minQty - b.minQty));\n        const matchingExperiences = [...this.getMatchingExperiencesFromBundle(), this];\n        const totalQuantity = matchingExperiences.reduce((acc, exp) => acc + exp.getQuantity(), 0);\n        for (const pb of priceBreaks) {\n            if (pb.minQty <= totalQuantity) {\n                return pb.percentage;\n            }\n        }\n        return 1;\n    }\n\n    checkForPriceBreakChanges(): void {\n        const updatedPriceBreak = this.priceBreakToBeApplied();\n        if (this.currentPriceBreak !== updatedPriceBreak) {\n            this.updatePriceBreak(updatedPriceBreak);\n            this.getMatchingExperiencesFromBundle().forEach((wfe: WorkflowExperienceImpl) =>\n                wfe.updatePriceBreak(updatedPriceBreak),\n            );\n        }\n    }\n\n    private getMatchingExperiencesFromBundle(): WorkflowExperience[] {\n        return (this.bundle?.getWorkflowExperiences() || []).filter((exp) => {\n            const transactionIdA = exp.getTransaction().id;\n            const transactionIdB = this.getTransaction().id;\n            const productIdA = exp.getProduct()?.id;\n            const productIdB = this.getProduct()?.id;\n            return transactionIdA !== transactionIdB && productIdA === productIdB;\n        });\n    }\n\n    private updatePriceBreak(value: number) {\n        this.currentPriceBreak = value;\n        this.callEvent(WorkflowExperienceEventType.PriceBreakChanged);\n    }\n\n    async copySelectionsViaGlobalConfiguration(\n        bundle: Bundle,\n        experience: WorkflowExperience,\n        filter?: StepHandle<AnyStepData>[],\n    ) {\n        const bundleProperties = await bundle.getGlobalProperties();\n        const filterIds = filter?.map((s) => s.getId());\n        const targetSteps = this.getSteps().filter((s) => filterIds === undefined || filterIds.includes(s.getId()));\n        const originatingSteps = experience.getSteps();\n\n        const getGlobalPropertyFromConfig = (config: GlobalPropertyAspectConfiguration) => {\n            return bundleProperties.find((p) => p.getRawProperty().name === config.aspectName);\n        };\n\n        targetSteps.forEach((targetStep) => {\n            // Grab the properties of the step, stringify them for easier comparison\n            const uniqueProperties = new Set<string>();\n            const propertyConfigurations = targetStep.getRaw().globalPropertyAspectConfigurations;\n            if (propertyConfigurations === undefined) return;\n            propertyConfigurations.forEach((p) => uniqueProperties.add(JSON.stringify(p)));\n            // Go through properties of originating experience and search for matches\n            originatingSteps.forEach((originatingStep) => {\n                const properties = originatingStep.getRaw().globalPropertyAspectConfigurations;\n                if (properties === undefined) return;\n                properties.forEach((p) => {\n                    const actualProperty = getGlobalPropertyFromConfig(p);\n                    const requiredProperty = uniqueProperties.has(JSON.stringify(p));\n                    if (requiredProperty && actualProperty?.getType() === AspectType.Option) {\n                        const curVariant = originatingStep.getCurrentVariant();\n                        if (!curVariant) return;\n                        targetStep.selectVariant(curVariant);\n                        uniqueProperties.delete(JSON.stringify(p));\n                    } else if (requiredProperty && actualProperty?.getType() === AspectType.Text) {\n                        const text = (originatingStep as TextStepHandle).getText();\n                        (targetStep as TextStepHandle).setText(text);\n                        uniqueProperties.delete(JSON.stringify(p));\n                    }\n                    // TODO: File Upload, not required now.\n                });\n            });\n        });\n    }\n\n    getStepByName(name: string) {\n        const stepData = this.getWorkflow()?.steps.find((step) => step.stepTitle === name);\n        if (!stepData || !this.stepHasHandle(stepData)) return undefined;\n        return StepHandleFactory.get(this.getWorkflowManager(), stepData);\n    }\n\n    getStepsByType(type: StepType): StepHandle<AnyStepData>[] {\n        return (\n            this.getWorkflow()\n                ?.steps.filter((step) => step.type === type)\n                .map((step) => StepHandleFactory.get(this.getWorkflowManager(), step)) || []\n        );\n    }\n\n    getStepsByScene(scene: Scene): StepHandle<AnyStepData>[] {\n        const workflow = this.getWorkflow();\n        // Enforce scene existence.\n        if (!workflow?.stepGroups.find((s) => s.name === scene.name)) {\n            throw new Error(\n                \"Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.\",\n            );\n        }\n        const steps = scene.stepIds\n            .map((id) => workflow.steps.find((step) => step.stepName === id))\n            .filter((s): s is Step<AnyStepData> => !!s && this.stepHasHandle(s));\n        return steps.map((step) => StepHandleFactory.get(this.getWorkflowManager(), step));\n    }\n\n    async attachCustomerDetails(details: { email: string }): Promise<void> {\n        return this.assignCustomerDetails({ emailAddress: details.email });\n    }\n\n    async assignCustomerDetails(details: CustomerDetailsInput): Promise<void> {\n        const response = await this.graphQlClient().mutate<{ transactionAddStakeholder: Transaction }>({\n            mutation: addTransactionStakeholderMutation,\n            variables: {\n                id: this.getTransaction().id,\n                details,\n                type: \"Owner\",\n            },\n        });\n        const stakeholder = response.data?.transactionAddStakeholder?.stakeholders?.find(\n            (s) => s.customer?.emailAddress === details.emailAddress,\n        );\n        if (stakeholder?.customer) {\n            this.getWorkflowManager().setTransactionCustomer(stakeholder.customer);\n            // Persist the customer ID for this transaction so that we can retrieve it when authenticating on reload.\n            const transactionCustomerIds = persistenceService.getMap(\"transactionCustomerIds\") || new Map();\n            transactionCustomerIds.set(this.getTransaction().id, stakeholder.customer.id);\n            persistenceService.setMap(\"transactionCustomerIds\", transactionCustomerIds);\n        }\n    }\n\n    attachRenderableSceneListener(cb: (scenes: RenderableScene[]) => void): void {\n        this.renderableSceneCallbacks.push(cb);\n        cb(this.renderableScenes);\n    }\n\n    detachRenderableSceneListener(cb: (scenes: RenderableScene[]) => void): void {\n        this.renderableSceneCallbacks = this.renderableSceneCallbacks.filter((x) => x !== cb);\n    }\n\n    debouncedSavedDesignUpdate = debounce(async () => {\n        const existingDesign = await designService.getSavedDesignByTransaction(this.getTransaction().id);\n        if (existingDesign) this.save();\n    }, 2500);\n\n    async save(title?: string) {\n        const product = this.getProduct();\n        const workflow = this.getWorkflow();\n        const state = this.getCommandContext().getState();\n\n        if (!product) throw new UnhandledBehaviorError(\"Product undefined!\");\n        if (!workflow) throw new UnhandledBehaviorError(\"Workflow undefined!\");\n        if (!state) throw new UnhandledBehaviorError(\"State undefined!\");\n\n        const getTitle = async () => {\n            if (title) return title;\n            const transactionId = this.getTransaction().id;\n            const ds = await designService.getSavedDesigns();\n            const existingTitle = ds.find((d) => d.transactionId === transactionId)?.title;\n            return existingTitle ? existingTitle : `My design`;\n        };\n        const saveData: SavedDesign = {\n            title: await getTitle(),\n            thumbnail: await this.createPreviewImage(false, 256),\n            transactionId: this.getTransaction().id,\n            productId: product.id,\n            integrationProductId: this.getTransaction().integrationProduct!.id,\n            workflowName: workflow.name,\n            workflowId: workflow.id,\n            lastEdited: new Date(),\n        };\n        await designService.addDesign(saveData);\n        return saveData;\n    }\n\n    async copy() {\n        const state = cloneDeep(this.getCommandContext().getState());\n        if (!state) throw new UnhandledBehaviorError(\"Internal state is undefined! Cannot copy experience!\");\n        const savedWorkflowState = JSON.stringify(state.transaction);\n        const workflow = this.getWorkflow();\n        if (!workflow) throw new UnhandledBehaviorError(\"Workflow is undefined! Cannot copy experience!\");\n        const integrationProductId = this.getTransaction().integrationProduct?.id;\n        if (!integrationProductId) throw new UnhandledBehaviorError(\"Integration product id is undefined!\");\n        const experience = await this.getClient().getWorkflowExperience({\n            type: \"integration\",\n            integrationProductId,\n            workflowId: workflow.id,\n            workflowState: savedWorkflowState,\n        });\n        return experience;\n    }\n\n    async onDesignFinished(capturePreviewImage: boolean = true): Promise<DesignCreationMessage> {\n        const transaction = this.getTransaction();\n        const product = this.getProduct();\n        const workflow = this.getWorkflow();\n\n        if (!product)\n            throw new UnhandledBehaviorError(\"Product undefined! Cannot finish an experience without a product.\");\n        if (!workflow)\n            throw new UnhandledBehaviorError(\"Workflow undefined! Cannot finish an experience without a workflow.\");\n\n        // Break out if the transaction is ordered. We don't want to allow anything here.\n        if (transaction.isOrdered) {\n            return {\n                event: \"\",\n                exportedData: {},\n                lineItemImageUrl: \"\",\n                optionsCost: 0,\n                transactionId: transaction.id,\n                workflowViewerLink: \"\",\n                workflowViewerReadOnlyLink: \"\",\n            };\n        }\n\n        const result = await createDesigns(\n            [\n                {\n                    workflowManager: this.workflowManager,\n                    workflow,\n                    layouts: this.workflowManager.getLayouts(),\n                    getReducerState: () => this.workflowManager.getCommandContext().getState()!, // Handle case where undefined (create a default state)\n                    product,\n                    transaction,\n                    workflowSelections: this.workflowManager.getWorkflowSelections(),\n                    workflowMetadata: this.workflowManager.getWorkflowMetadata(),\n                    designName: workflow.name,\n                },\n            ],\n            (show3D?: boolean) => {\n                if (capturePreviewImage) {\n                    return this.createPreviewImage(show3D, 1024);\n                }\n                return Promise.resolve(undefined);\n            },\n        );\n\n        // If the transaction is marked as completed we need to run an update transaction flow.\n        if (transaction.completed) {\n            await this.graphQlClient().mutate({\n                mutation: finalizeUpdateTransactionMutation,\n                variables: {\n                    transactionId: transaction.id,\n                },\n            });\n        }\n\n        return result[0];\n    }\n\n    /**\n     * @param step The step to test against.\n     * @returns Returns true when a valid handle is implemented for a given step type. Certain steps don't support handles, such as silent illustrations.\n     */\n    private stepHasHandle(step: Step<AnyStepData>): boolean {\n        return step.type !== StepType.SilentIllustration && step.type !== StepType.ProductOverlay;\n    }\n\n    private getCanvasObjectURLAsync = async (canvas: HTMLCanvasElement): Promise<string> => {\n        return new Promise((resolve, reject) => {\n            try {\n                canvas.toBlob((blob) => {\n                    if (blob) {\n                        const objectURL = URL.createObjectURL(blob);\n                        resolve(objectURL);\n                    }\n                });\n            } catch (e: any) {\n                reject(e);\n            }\n        });\n    };\n\n    async getExportedStepData(): Promise<ExportedStepData[]> {\n        const workflow = this.getWorkflow();\n        const metadata = this.getWorkflowManager().getWorkflowMetadata();\n        const selections = this.getWorkflowManager().getWorkflowSelections();\n        const exportedData: ExportedStepData[] = [];\n\n        for (const step of workflow?.steps || []) {\n            const stepId = step.stepName;\n            const stepMetadata = metadata[stepId];\n            const stepSelection = selections[stepId]?.selections[0]; // Legacy: Multi selection was deprecated and removed years ago. Selections as an array on a step is a legacy concept.\n\n            const curStepExportedData: ExportedStepData = {\n                stepId: stepId,\n                title: step.stepTitle,\n                properties: [],\n            };\n\n            // First we pull the selected variant for the step. This is the most common piece of metadata\n            if (stepSelection && (await stepHasExportableSelection(step, selections))) {\n                curStepExportedData.properties.push({\n                    type: \"selection\",\n                    value: stepSelection.name,\n                    priceModifier: stepSelection.priceModifier,\n                });\n            }\n\n            // We can skip the remaining logic if metadata isn't present for this step.\n            if (!stepMetadata) {\n                exportedData.push(curStepExportedData);\n                continue;\n            }\n\n            switch (step.type) {\n                case StepType.Frame:\n                    {\n                        const stepData = step.data as FrameStepData;\n                        const stepmd = stepMetadata as FrameMetadata;\n                        if (stepmd.image && stepData.displayImageOnFinishStep) {\n                            curStepExportedData.properties.push({\n                                type: \"image\",\n                                value: stepmd.image,\n                                priceModifier: 0,\n                            });\n                        }\n                    }\n                    break;\n                case StepType.Illustration:\n                    {\n                        const stepData = step.data as IllustrationStepData;\n                        const stepmd = stepMetadata as IllustrationMetadata;\n                        if (stepmd && stepmd.colors && stepmd.colors.length > 0 && stepData.displayColorsOnFinishStep) {\n                            const colorString = stepmd.colors.join(\", \").toUpperCase();\n                            curStepExportedData.properties.push({\n                                type: \"color\",\n                                value: colorString,\n                                priceModifier: 0,\n                            });\n                        }\n                    }\n                    break;\n                case StepType.Module:\n                    {\n                        const stepData = step.data as ModuleStepData;\n                        const stepmd = stepMetadata as ModuleMetadata;\n                        if (stepmd && stepmd.text && stepData.displayTextOnFinishStep) {\n                            curStepExportedData.properties.push({\n                                type: \"text\",\n                                value: stepmd.text,\n                                priceModifier: 0,\n                            });\n                        }\n                    }\n                    break;\n                case StepType.Text: {\n                    const stepData = step.data as TextStepData;\n                    const stepmd = stepMetadata as TextMetadata;\n                    if (stepmd && stepmd.text && stepData.displayTextOnFinishStep) {\n                        curStepExportedData.properties.push({\n                            type: \"text\",\n                            value: stepmd.text,\n                            priceModifier: 0,\n                        });\n                    }\n                    if (stepmd && stepmd.color && stepData.displayColorOnFinishStep) {\n                        curStepExportedData.properties.push({\n                            type: \"color\",\n                            value: stepmd.color,\n                            priceModifier: 0,\n                        });\n                    }\n                }\n            }\n\n            exportedData.push(curStepExportedData);\n        }\n\n        return exportedData.filter((step) => step.properties && step.properties.length > 0);\n    }\n\n    getQuantity(): number {\n        return this.getTransaction().quantity || 1;\n    }\n\n    async setQuantity(quantity: number): Promise<void> {\n        if (quantity < 1) {\n            throw new RangeError(\"WorkflowExperience quantity must be greater than zero.\");\n        }\n        if (this.isReadOnly) {\n            throw new Error(\"Cannot update quantity on a read-only WorkflowExperience\");\n        }\n        this.getTransaction().quantity = quantity;\n        this.callEvent(WorkflowExperienceEventType.QuantityChanged);\n        this.checkForPriceBreakChanges();\n        const transaction = this.getTransaction();\n        await this.graphQlClient().mutate({\n            mutation: updateTransactionQuantityQuery,\n            variables: {\n                id: transaction.id,\n                quantity,\n            },\n        });\n    }\n\n    addEventListener(\n        type: WorkflowExperienceEventType,\n        callback: (workflowExperience: WorkflowExperience) => void,\n    ): void {\n        const events = this.eventCallbacks.get(type) || [];\n        events.push(callback);\n        this.eventCallbacks.set(type, events);\n    }\n\n    removeEventListener(\n        type: WorkflowExperienceEventType,\n        callback: (workflowExperience: WorkflowExperience) => void,\n    ): void {\n        const events = this.eventCallbacks.get(type) || [];\n        this.eventCallbacks.set(\n            type,\n            events.filter((evt) => evt !== callback),\n        );\n    }\n\n    callEvent(type: WorkflowExperienceEventType): void {\n        (this.eventCallbacks.get(type) || []).forEach((cb) => cb(this));\n    }\n}\n\n/**\n * Returns true when a step supports display of data in the finish step and\n * the step is configured to do so in the workflow configuration.\n * @param step The step to check.\n * @returns True when the step supports display of data in the finish step and false otherwise.\n */\nconst selectionConfiguredToExport = (step: Step): boolean => {\n    const validStepsForDisplay = [\n        StepType.Question,\n        StepType.Frame,\n        StepType.Illustration,\n        StepType.Material,\n        StepType.Model,\n        StepType.Picture,\n        StepType.Shape,\n        StepType.Text,\n    ];\n    if (validStepsForDisplay.includes(step.type)) {\n        const data = step.data as { displaySelectionOnFinishStep?: boolean; displaySelectionsOnFinishStep?: boolean };\n        return !!data.displaySelectionOnFinishStep || !!data.displaySelectionsOnFinishStep;\n    }\n    return false;\n};\n\n/**\n * Checks if a step has selections that are valid for the finish step.\n * @param step The step to check.\n * @param workflowSelections The current workflow selection object.\n * @returns True when a valid selection is found, false otherwise.\n */\nconst stepHasExportableSelection = async (step: Step, workflowSelections: WorkflowSelections): Promise<boolean> => {\n    if (!selectionConfiguredToExport(step)) return false;\n    const stepOption = await optionService.getOptionForStep(step);\n    if (stepOption && (stepOption.variants || []).length > 1) {\n        const stepSelections = workflowSelections[step.stepName];\n        if (stepSelections && stepSelections.selections.length > 0) {\n            return true;\n        }\n        return false;\n    }\n    return false;\n};\n","import { Bundle } from \"../Bundle\";\nimport { Variant } from \"../stepHandles/resource/variant\";\nimport { FrameStepHandle } from \"../stepHandles/steps/frame\";\nimport { assetService } from \"../services/asset\";\nimport {\n    AnyStepData,\n    ColorDefinition,\n    ColorOption,\n    fetchAsString,\n    generateSVGWithUnknownColors,\n    IllustrationStepHandle,\n    optionService,\n    ShapeStepHandle,\n    StepHandle,\n    svgToDataUrl,\n    TextStepHandle,\n    VariantResource,\n    WorkflowExperience,\n} from \"..\";\nimport {\n    AddonHandle,\n    AspectType,\n    Asset,\n    GlobalPropertyConfigurationAspect,\n    GlobalPropertyConfigurationConditionMode,\n    GlobalPropertyState,\n    GlobalPropertyStateColorOptionStorage,\n    GlobalPropertyStateFileUploadStorage,\n    OptionResource,\n    PatternImageData,\n    StepType,\n} from \"../types\";\nimport { GetSVGDimensions, patternImageDataCache } from \"../util/frame\";\nimport { modifySVGColors } from \"../util/illustration\";\n\n/**\n * TODO: Optimize workflow experience state updates.\n */\n\nexport class GlobalPropertyHandleService {\n    private readonly bundle: Bundle;\n    private handleCache: { [key: string]: GlobalPropertyHandle } = {};\n\n    constructor(bundle: Bundle) {\n        this.bundle = bundle;\n    }\n\n    /**\n     * Gets a handle for the given global property. Fetches from cache if available.\n     * @param property The property to get a handle for.\n     * @returns A promise resolving to the handle.\n     */\n    async getHandle(property: GlobalPropertyConfigurationAspect): Promise<GlobalPropertyHandle> {\n        if (this.handleCache[property.name]) return this.handleCache[property.name];\n        const handle = await this.createHandle(property);\n        this.handleCache[property.name] = handle;\n        return handle;\n    }\n\n    /**\n     * Gets a list of handles for all global properties. Fetches from cache if available.\n     * @returns A promise resolving to the handles.\n     */\n    async getHandles(): Promise<GlobalPropertyHandle[]> {\n        if (!this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration) return [];\n        await this.bundle.getGlobalPropertyStateManager().getInitializationPromise();\n        const configuration = this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration;\n        if (!configuration) return [];\n        return Promise.all(configuration.aspects.map((p) => this.getHandle(p)));\n    }\n\n    /**\n     * Applies the global state to all handles, if the state is set.\n     * @param handles The handles to apply the state to.\n     * @param state\n     * @returns\n     */\n    applyConditionsFromState(\n        handles: GlobalPropertyHandle[],\n        state: GlobalPropertyState | undefined,\n    ): GlobalPropertyHandle[] {\n        if (!state) return handles;\n        return handles.filter((h) => {\n            return this.aspectConditionsSatisfied(h.getRawProperty(), state);\n        });\n    }\n\n    private aspectConditionsSatisfied(aspect: GlobalPropertyConfigurationAspect, state: GlobalPropertyState): boolean {\n        if (!aspect.conditions || aspect.conditions.length === 0) return true;\n        const operation =\n            aspect.conditionMode === GlobalPropertyConfigurationConditionMode.AND\n                ? Array.prototype.every.bind(aspect.conditions)\n                : Array.prototype.some.bind(aspect.conditions); // Default is OR\n        return operation((c) => {\n            const targetAspect = state.aspects.find((a) => a.name === c.targetAspectName);\n            if (!targetAspect) return false;\n            return c.requiredVariantSelections.some((v) => v === targetAspect.value);\n        });\n    }\n\n    private async createHandle(property: GlobalPropertyConfigurationAspect): Promise<GlobalPropertyHandle> {\n        switch (property.type) {\n            case AspectType.FileUpload:\n                return new FileUploadGlobalPropertyHandle(this.bundle, property).initialize();\n            case AspectType.ColorOption:\n                return new ColorOptionGlobalPropertyHandle(\n                    this.bundle,\n                    property,\n                    property.entityId ? await optionService.getOption(property.entityId) : undefined,\n                );\n            case AspectType.Option: {\n                const option = property.entityId ? await optionService.getOption(property.entityId) : undefined;\n                if (option?.type === \"Color\") {\n                    return new ColorOptionGlobalPropertyHandle(this.bundle, property, option);\n                } else {\n                    return new OptionGlobalPropertyHandle(this.bundle, property, option);\n                }\n            }\n            case AspectType.Text:\n                return new TextGlobalPropertyHandle(this.bundle, property);\n            default:\n                throw new Error(\"Unhandled Global Property Aspect Type\");\n        }\n    }\n}\n\n/**\n * A GlobalPropertyHandle acts as an interface to global properties on our platform. Currently\n * bundles can return a handle for any global properties associated to the collection.\n */\nexport abstract class GlobalPropertyHandle {\n    protected readonly bundle: Bundle;\n    protected readonly property: GlobalPropertyConfigurationAspect;\n\n    constructor(bundle: Bundle, property: GlobalPropertyConfigurationAspect) {\n        this.bundle = bundle;\n        this.property = property;\n    }\n\n    /**\n     * @returns The name of the global property. This is the key used to store the property in the state.\n     */\n    getName() {\n        return this.property.name;\n    }\n\n    /**\n     * @returns A human-friendly title.\n     */\n    getTitle() {\n        return this.property.title;\n    }\n\n    /**\n     * @returns A human-friendly description.\n     */\n    getDescription() {\n        return this.property.description;\n    }\n\n    /**\n     * @returns The type of the global property. Use this to determine how to render the property.\n     */\n    getType(): AspectType {\n        return this.property.type;\n    }\n\n    /**\n     * @returns The underlying property data object.\n     */\n    getRawProperty(): GlobalPropertyConfigurationAspect {\n        return this.property;\n    }\n\n    /**\n     * @returns Whether this aspect has been marked as required to be completed before the user can continue.\n     */\n    isMandatory(): boolean {\n        return !!this.property.mandatory;\n    }\n\n    /**\n     * @returns Whether this aspect has been marked as `completed` for mandatory checks. Note that this function always returns `true` if the aspect has not been marked as mandatory.\n     */\n    isMandatoryFulfilled(): boolean {\n        return (\n            !this.property.mandatory ||\n            !!this.bundle.getGlobalPropertyStateManager().getAspectMandatoryFulfilled(this.property.name)\n        );\n    }\n\n    /**\n     * @returns Whether this aspect has been marked as silent and therefore should not be displayed to the user.\n     */\n    isSilent(): boolean {\n        return (\n            !!this.property.silent || this.bundle.getGlobalPropertyStateManager().getAspectHidden(this.property.name)\n        );\n    }\n\n    /**\n     * Applies the global state to all shared steps, if the state is set.\n     * @param targetExperiences Optionally filter the workflow experiences it should be applied to.\n     */\n    abstract applyGlobalState(targetExperiences?: WorkflowExperience[]): Promise<void>;\n\n    /**\n     * Returns all steps that share this property.\n     * @param targetExperiences Optionally filter the steps to only those in the given experiences.\n     */\n    protected async getSharedSteps(targetExperiences?: WorkflowExperience[]) {\n        const experiences = targetExperiences ?? this.bundle.getWorkflowExperiences();\n        const activeSteps = await Promise.all(experiences.map((e) => e.getStepsConditionallyActive()));\n        const sharedStepsBeforeFlatten = activeSteps.map((steps) =>\n            steps.filter((s) => {\n                if (s.getOverrideGlobalPropertyConfiguration(this.property.type)) {\n                    return false;\n                }\n                return s\n                    .getRaw()\n                    .globalPropertyAspectConfigurations?.some(\n                        (c) =>\n                            c.globalPropertyConfigurationId ===\n                                this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id &&\n                            c.aspectName === this.property.name,\n                    );\n            }),\n        );\n        return sharedStepsBeforeFlatten.flat();\n    }\n\n    protected getStateValue(): string | undefined {\n        return this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);\n    }\n}\n\n/**\n * A file upload global property allows for setting a frame image against all shared steps.\n */\nexport class FileUploadGlobalPropertyHandle extends GlobalPropertyHandle {\n    private colorOption?: OptionResource;\n    private imageData?: PatternImageData;\n\n    constructor(bundle: Bundle, property: GlobalPropertyConfigurationAspect) {\n        super(bundle, property);\n    }\n\n    async initialize(): Promise<FileUploadGlobalPropertyHandle> {\n        if (this.property.data?.fileUpload?.colorOptionId) {\n            this.colorOption = await optionService.getOption(this.property.data?.fileUpload?.colorOptionId);\n        }\n        await this.loadImageData();\n        return this;\n    }\n\n    private async loadImageData() {\n        const img = await this.getImage();\n        if (img?.fileLink) {\n            if (img?.fileLink.endsWith(\".svg\")) {\n                const originalSvg = await fetchAsString(img?.fileLink);\n                const svgData = await GetSVGDimensions(img?.fileLink);\n                const width = svgData.width;\n                const height = svgData.height;\n                const svgAndColors = await generateSVGWithUnknownColors(originalSvg);\n                const storage = this.bundle\n                    .getGlobalPropertyStateManager()\n                    .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n                storage?.colors?.forEach((it) => {\n                    svgAndColors.colors[it.key] = {\n                        browserValue: it.browserValue,\n                        pmsValue: it.pmsValue,\n                    };\n                });\n                const data = {\n                    src: img?.fileLink,\n                    width,\n                    height,\n                    aspect: width / height,\n                    svg: svgAndColors.svg,\n                    colors: svgAndColors.colors,\n                };\n                patternImageDataCache.set(img?.fileLink, data);\n                this.imageData = data;\n            } else {\n                this.imageData = undefined;\n            }\n        }\n    }\n\n    /**\n     * Select an image to be used for all shared steps.\n     * @param asset The asset to use.\n     * @returns A promise resolving when all affected steps have been updated.\n     */\n    async selectImage(asset: Asset) {\n        const stateManager = this.bundle.getGlobalPropertyStateManager();\n        await Promise.all([\n            stateManager.setAspect(\n                this.property.name,\n                asset.key!,\n                {\n                    ...(stateManager.getAspectStorage(this.property.name) || {}),\n                    originalAssetKey: asset.key,\n                    backgroundRemovedAssetKey: undefined,\n                    vectorizedAssetKey: undefined,\n                    useOriginalAsset: undefined,\n                },\n                undefined,\n            ),\n            this.applyImageSelection(asset),\n            this.loadImageData(),\n        ]);\n    }\n\n    async canUseAdvancedImageManipulation(): Promise<boolean> {\n        return this.bundle.getClient().canUseAddon(AddonHandle.AdvancedImageManipulation);\n    }\n\n    /**\n     * Removes the background from an image, stores it in the state, and returns the new asset.\n     * @param applyNewAsset Optionally applies the new asset to all shared steps. Default: `true`.\n     * @returns A promise that resolves with the newly generated Asset.\n     */\n    async removeBackgroundFromImage(applyNewAsset = true): Promise<Asset> {\n        if (!(await this.canUseAdvancedImageManipulation())) {\n            throw new Error(\n                \"The current Integration does not have access to the Advanced Image Manipulation addon. Please call canUseAdvancedImageManipulation to ensure you disable this feature when appropriate.\",\n            );\n        }\n        const image = await this.getOriginalImage();\n        if (!image) {\n            throw new Error(\"You must supply an image selection before attempting to remove the background.\");\n        }\n        const stateManager = this.bundle.getGlobalPropertyStateManager();\n        const bgRemoved = await assetService.removeBackgroundFromAsset(image);\n        const existingStorage = stateManager.getAspectStorage(this.property.name);\n        const updatedStorage: GlobalPropertyStateFileUploadStorage = {\n            ...existingStorage,\n            backgroundRemovedAssetKey: bgRemoved.key,\n            useOriginalAsset: !applyNewAsset,\n        };\n        const updatePromise = applyNewAsset\n            ? stateManager.setAspect(this.property.name, bgRemoved.key!, updatedStorage)\n            : stateManager.setAspectStorage(this.property.name, updatedStorage);\n        const promises = [updatePromise];\n        if (applyNewAsset) {\n            promises.push(this.applyImageSelection(bgRemoved, undefined, false, false));\n            promises.push(this.loadImageData());\n        }\n        await Promise.all(promises);\n        this.updateSharedStepStorage(updatedStorage);\n        return bgRemoved;\n    }\n\n    /**\n     * Vectorizes the current image selection, stores it in the state, and returns the new asset.\n     * Note: This is a more expensive operation than raster background removal, so should only be used when necessary (e.g., for large images or when the user needs a transparent background for printing).\n     * @param applyNewAsset Optionally applies the new asset to all shared steps. Default: `true`.\n     * @returns A promise that resolves with the newly generated Asset.\n     */\n    async vectorizeImage(applyNewAsset = true): Promise<Asset> {\n        if (!(await this.canUseAdvancedImageManipulation())) {\n            throw new Error(\n                \"The current Integration does not have access to the Advanced Image Manipulation addon. Please call canUseAdvancedImageManipulation to ensure you disable this feature when appropriate.\",\n            );\n        }\n\n        const image = await this.getOriginalImage();\n        if (!image) {\n            throw new Error(\"You must supply an image selection before attempting to vectorize the image.\");\n        }\n\n        const stateManager = this.bundle.getGlobalPropertyStateManager();\n        const vectorized = await assetService.vectorizeAsset(image);\n        const existingStorage = stateManager.getAspectStorage(this.property.name);\n        const updatedStorage: GlobalPropertyStateFileUploadStorage = {\n            ...existingStorage,\n            vectorizedAssetKey: vectorized.key,\n            useOriginalAsset: !applyNewAsset,\n        };\n        const updatePromise = applyNewAsset\n            ? stateManager.setAspect(this.property.name, vectorized.key!, updatedStorage)\n            : stateManager.setAspectStorage(this.property.name, updatedStorage);\n        const promises = [updatePromise];\n        if (applyNewAsset) {\n            promises.push(this.applyImageSelection(vectorized, undefined, false, false));\n            promises.push(this.loadImageData());\n        }\n        await Promise.all(promises);\n        this.updateSharedStepStorage(updatedStorage);\n        return vectorized;\n    }\n\n    /**\n     * Returns `true` if the state has an image assigned, otherwise `false`.\n     */\n    hasImage(): boolean {\n        return !!this.getStateValue();\n    }\n\n    /**\n     * Retrieves the current image selection, if one exists.\n     * @returns A promise that resolves with an `Asset` object if one is assigned to the state, otherwise `undefined`.\n     */\n    async getImage(): Promise<Asset | undefined> {\n        const stateValue = this.getStateValue();\n        if (!stateValue) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(stateValue);\n    }\n\n    async getImageWithColors(): Promise<string | undefined> {\n        await this.loadImageData();\n        if (!this.imageData?.svg) {\n            return this.imageData?.src;\n        }\n        return svgToDataUrl(modifySVGColors(this.imageData.svg, this.imageData.colors ?? {}, false));\n    }\n\n    /**\n     * Retrieves the original, unmodified image selection, if one exists.\n     * @returns A promise that resolves with an `Asset` object if one is assigned to the state, otherwise `undefined`.\n     */\n    async getOriginalImage(): Promise<Asset | undefined> {\n        const storage = this.bundle\n            .getGlobalPropertyStateManager()\n            .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n        if (!storage?.originalAssetKey) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(storage.originalAssetKey);\n    }\n\n    /**\n     * Retrieves the version of the image selection that has the background removed, if one exists.\n     * @returns A promise that resolves with an `Asset` object if one is assigned to the state, otherwise `undefined`.\n     */\n    async getBackgroundRemovedImage(): Promise<Asset | undefined> {\n        const storage = this.bundle\n            .getGlobalPropertyStateManager()\n            .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n        if (!storage?.backgroundRemovedAssetKey) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(storage.backgroundRemovedAssetKey);\n    }\n\n    getUseOriginalImage(): boolean {\n        return (\n            this.bundle\n                .getGlobalPropertyStateManager()\n                .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name)?.useOriginalAsset ?? false\n        );\n    }\n\n    async setUseOriginalImage(value: boolean): Promise<void> {\n        const originalImage = await this.getOriginalImage();\n        if (!originalImage) {\n            throw new Error(\"You must select an image before calling setUseOriginalImage\");\n        }\n        const stateManager = this.bundle.getGlobalPropertyStateManager();\n        const existingStorage = stateManager.getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n        if (existingStorage?.useOriginalAsset === value) {\n            return;\n        }\n        const updatedStorage = {\n            ...existingStorage,\n            useOriginalAsset: value,\n        };\n        const targetKey = value ? existingStorage?.originalAssetKey : existingStorage?.backgroundRemovedAssetKey;\n        const promises = [stateManager.setAspect(this.property.name, targetKey || \"\", updatedStorage)];\n        if (value) {\n            promises.push(this.applyImageSelection(originalImage, undefined, false, false));\n        } else {\n            const updateUsingBg = async () => {\n                const bgRemovedImage = await this.getBackgroundRemovedImage();\n                if (!bgRemovedImage) {\n                    throw new Error(\n                        \"You must call removeBackgroundFromImage before attempting to use that version of the image.\",\n                    );\n                }\n                this.applyImageSelection(bgRemovedImage, undefined, false, false);\n            };\n            promises.push(updateUsingBg());\n        }\n        promises.push(this.loadImageData());\n        await Promise.all(promises);\n        this.updateSharedStepStorage(updatedStorage);\n    }\n\n    async applyGlobalState(targetExperiences?: WorkflowExperience[]) {\n        const aspect = this.getStateValue();\n        if (!aspect) return;\n        const asset = await assetService.getLocalOrFromServer(aspect);\n        if (!asset) return;\n        await this.applyImageSelection(asset, targetExperiences, false, true);\n        const storage = this.bundle\n            .getGlobalPropertyStateManager()\n            .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n        if (storage) {\n            this.updateSharedStepStorage({ ...storage });\n            if (storage.colors) {\n                const colorMap = new Map(\n                    storage.colors!.map((it) => [it.key, { browserValue: it.browserValue, pmsValue: it.pmsValue }]) ??\n                        [],\n                );\n                await Promise.all(\n                    (await this.getSharedSteps(targetExperiences)).map(async (step) => {\n                        await (step as FrameStepHandle).changeColors(colorMap);\n                    }),\n                );\n            }\n        } else {\n            this.updateSharedStepStorage({ originalAssetKey: aspect });\n            await this.bundle\n                .getGlobalPropertyStateManager()\n                .setAspectStorage(this.property.name, { originalAssetKey: aspect });\n        }\n    }\n\n    getAvailableColors(): ColorOption[] {\n        if (!this.property.data?.fileUpload?.colorPickerEnabled) {\n            return [];\n        }\n        return (\n            this.colorOption?.variants?.map((variant: VariantResource) => {\n                return {\n                    fill: variant.color,\n                    stroke: variant.color,\n                    variant,\n                    pmsValue: variant.name,\n                };\n            }) ?? []\n        );\n    }\n\n    getCurrentColors():\n        | {\n              [key: string]: ColorDefinition;\n          }\n        | undefined {\n        return this.imageData?.colors;\n    }\n\n    isColorPickerEnabled() {\n        return this.property.data?.fileUpload?.colorPickerEnabled ?? false;\n    }\n\n    isPmsPickerEnabled() {\n        return this.property.data?.fileUpload?.pmsPickerEnabled ?? false;\n    }\n\n    async getOriginalColors(): Promise<\n        | {\n              [key: string]: ColorDefinition;\n          }\n        | undefined\n    > {\n        if (!this.imageData?.svg) {\n            return undefined;\n        }\n        const svgData = await generateSVGWithUnknownColors(this.imageData.svg);\n        return svgData.colors;\n    }\n\n    async changeColors(newFills: { [key: string]: ColorDefinition }): Promise<void> {\n        if (!this.imageData?.svg) {\n            return;\n        }\n        const sharedSteps = this.getSharedSteps();\n        const fills = new Map(Object.entries(newFills));\n        await Promise.all(\n            (await sharedSteps).map(async (step) => {\n                const frameStep = step as FrameStepHandle;\n                await frameStep.changeColors(fills);\n            }),\n        );\n        const storage = this.bundle\n            .getGlobalPropertyStateManager()\n            .getAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name);\n        await Promise.all([\n            this.bundle\n                .getGlobalPropertyStateManager()\n                .setAspectStorage<GlobalPropertyStateFileUploadStorage>(this.property.name, {\n                    ...storage,\n                    colors: Object.entries(newFills).map(([key, color]) => ({\n                        key: key,\n                        browserValue: color.browserValue,\n                        pmsValue: color.pmsValue,\n                    })),\n                }),\n            await this.loadImageData(),\n        ]);\n    }\n\n    private async applyImageSelection(\n        asset: Asset,\n        targetExperiences?: WorkflowExperience[],\n        useAsOriginalImage = true,\n        updateFrameOffsets = true,\n    ) {\n        const sharedSteps = await this.getSharedSteps(targetExperiences);\n        const experiencesUpdates = sharedSteps.map((step) => {\n            const frameStep = step as FrameStepHandle;\n            if (!frameStep.getFrameService()) return;\n            return frameStep.selectImage(asset, useAsOriginalImage, updateFrameOffsets);\n        });\n        await Promise.all(experiencesUpdates);\n    }\n\n    private updateSharedStepStorage(storage: GlobalPropertyStateFileUploadStorage) {\n        const experiences = this.bundle.getWorkflowExperiences();\n        experiences.forEach((e) =>\n            e.getSteps().forEach((s) => {\n                if (s.getOverrideGlobalPropertyConfiguration(this.property.type)) {\n                    return;\n                }\n                const shouldUpdateStep = s\n                    .getRaw()\n                    .globalPropertyAspectConfigurations?.some(\n                        (c) =>\n                            c.globalPropertyConfigurationId ===\n                                this.bundle.getProductCollection()?.getResource().globalPropertyConfiguration?.id &&\n                            c.aspectName === this.property.name,\n                    );\n                if (shouldUpdateStep) {\n                    e.getWorkflowManager().updateStorage(s.getId(), {\n                        framePatternData: {\n                            originalAssetKey: storage.originalAssetKey,\n                            backgroundRemovedAssetKey: storage.backgroundRemovedAssetKey,\n                            useOriginalAsset: storage.useOriginalAsset,\n                        },\n                    });\n                }\n            }),\n        );\n    }\n}\n\nexport class TextGlobalPropertyHandle extends GlobalPropertyHandle {\n    constructor(bundle: Bundle, property: GlobalPropertyConfigurationAspect) {\n        super(bundle, property);\n    }\n\n    /**\n     * If this returns false, you should not display any templating tools.\n     * Note: Templates will currently still be rendered, regardless of what this function returns.\n     */\n    isTemplatingEnabled(): boolean {\n        return this.property.data?.text?.templatingEnabled || false;\n    }\n\n    /**\n     * Gets the current text\n     */\n    getText(): string {\n        const aspectValue = this.getStateValue();\n        if (!aspectValue) return \"\";\n        return aspectValue;\n    }\n\n    /**\n     * Set the text.\n     */\n    async setText(text: string) {\n        await Promise.all([\n            this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name, text, undefined, undefined),\n            this.applyTextSelection(text),\n        ]);\n    }\n\n    async applyGlobalState(targetExperiences?: WorkflowExperience[]) {\n        const value = this.getStateValue();\n        if (!value) return Promise.resolve();\n        await this.applyTextSelection(value, targetExperiences);\n    }\n\n    private async applyTextSelection(text: string, targetExperiences?: WorkflowExperience[]) {\n        const sharedSteps = await this.getSharedSteps(targetExperiences);\n        const experiencesUpdates = sharedSteps.map((step) => {\n            const textStep = step as TextStepHandle;\n            textStep.setText(text);\n        });\n        await Promise.all(experiencesUpdates);\n    }\n}\n\n/**\n * An option property handle represents a property that can\n * affect the option of steps across multiple transactions.\n */\nexport class OptionGlobalPropertyHandle extends GlobalPropertyHandle {\n    protected optionResource?: OptionResource;\n\n    constructor(\n        bundle: Bundle,\n        property: GlobalPropertyConfigurationAspect,\n        optionResource: OptionResource | undefined,\n    ) {\n        super(bundle, property);\n        this.optionResource = optionResource;\n    }\n\n    /**\n     * Ensures the option resource has its variants loaded. If the option was loaded\n     * with minimal fields (e.g., lazy loading), this will re-fetch the full option.\n     */\n    protected async ensureOptionLoaded(): Promise<OptionResource | undefined> {\n        if (this.optionResource?.variants) return this.optionResource;\n        if (!this.property.entityId) return this.optionResource;\n        const option = await optionService.getOption(this.property.entityId);\n        if (option) this.optionResource = option;\n        return this.optionResource;\n    }\n\n    /**\n     * If the option has a default variant, select it.\n     */\n    async initDefaultVariant() {\n        await this.ensureOptionLoaded();\n        const defaultVariant = this.optionResource?.variants?.find(\n            (v) => v.id === this.optionResource?.defaultVariant?.id,\n        );\n        if (defaultVariant) {\n            await this.selectVariant(new Variant(defaultVariant));\n        }\n    }\n\n    /**\n     * Gets the currently selected variant, or undefined if no variant is selected.\n     */\n    getCurrentVariant() {\n        if (!this.optionResource) return undefined;\n        const aspectValue = this.getStateValue();\n        if (!aspectValue) {\n            const defaultVariant = this.optionResource.variants?.find(\n                (v) => v.id === this.optionResource?.defaultVariant?.id,\n            );\n            if (!defaultVariant) return undefined;\n            return new Variant(defaultVariant);\n        } else {\n            const variantResource = this.optionResource.variants?.find((v) => v.id === aspectValue);\n            if (!variantResource) return undefined;\n            return new Variant(variantResource);\n        }\n    }\n\n    /**\n     * @returns A list of valid variants for this step. Does not include disabled variants.\n     */\n    async getAvailableVariants() {\n        await this.ensureOptionLoaded();\n        const variants = this.optionResource?.variants?.filter((v) => v.enabled) || [];\n        return variants.map((v) => new Variant(v));\n    }\n\n    /**\n     * @returns A list of all variants for this step, including disabled ones.\n     */\n    async getAllVariants() {\n        await this.ensureOptionLoaded();\n        const variants = this.optionResource?.variants || [];\n        return variants.map((v) => new Variant(v));\n    }\n\n    /**\n     * Select a given variant on the option for all shared steps.\n     * @param variant The variant to select.\n     */\n    async selectVariant(variant: Variant, channel?: number) {\n        await this.applyVariantSelection(variant); // Wait for regular elements to be ready before global logic runs.\n        await this.bundle\n            .getGlobalPropertyStateManager()\n            .setAspect(this.property.name, variant.getId(), undefined, channel);\n    }\n\n    async applyGlobalState(targetExperiences?: WorkflowExperience[]) {\n        const aspect = this.getStateValue();\n        if (!aspect) return;\n        await this.ensureOptionLoaded();\n        const variant = this.optionResource?.variants?.find((v) => v.id === aspect);\n        if (!variant) return;\n        return this.applyVariantSelection(new Variant(variant), targetExperiences);\n    }\n\n    private async applyVariantSelection(variant: Variant, targetExperiences?: WorkflowExperience[]) {\n        const sharedSteps = await this.getSharedSteps(targetExperiences);\n        const promises = sharedSteps.map((step) => {\n            return step.selectVariant(variant);\n        });\n        await Promise.all(promises);\n    }\n}\n\n/**\n * A color option property handle represents a property that can\n * affect the option of steps across multiple transactions. This class is a specialization of the OptionGlobalPropertyHandle which includes functionality for\n * setting custom color values when a custom color variant is selected.\n */\nexport class ColorOptionGlobalPropertyHandle extends OptionGlobalPropertyHandle {\n    constructor(\n        bundle: Bundle,\n        property: GlobalPropertyConfigurationAspect,\n        optionResource: OptionResource | undefined,\n    ) {\n        super(bundle, property, optionResource);\n    }\n\n    /**\n     * Select a given variant on the option for all shared steps.\n     * @param variant The variant to select.\n     */\n    override async selectVariant(variant: Variant, channel?: number) {\n        await this.bundle\n            .getGlobalPropertyStateManager()\n            .setAspect(this.property.name, variant.getId(), undefined, channel);\n        await this.applyColorVariant(variant, undefined, channel);\n    }\n\n    override async applyGlobalState(targetExperiences?: WorkflowExperience[]) {\n        const aspect = this.getStateValue();\n        if (!aspect) return;\n        await this.ensureOptionLoaded();\n        const variant = this.optionResource?.variants?.find((v) => v.id === aspect);\n        if (!variant) return;\n        await this.applyColorVariant(new Variant(variant), targetExperiences);\n        const customColor = this.bundle\n            .getGlobalPropertyStateManager()\n            .getAspectStorage<GlobalPropertyStateColorOptionStorage>(this.property.name)?.customColor;\n        if (customColor) await this.setCustomColor(customColor);\n    }\n\n    private async applyColorVariant(variant: Variant, targetExperiences?: WorkflowExperience[], channel?: number) {\n        const sharedSteps = await this.getSharedSteps(targetExperiences);\n        const promises = sharedSteps.map((step) => {\n            switch (step.getType()) {\n                case StepType.Shape:\n                    return step.selectVariant(variant);\n                case StepType.Text:\n                    return (step as TextStepHandle).setFillColor({\n                        fill: variant.getColor(),\n                        stroke: variant.getColor(),\n                        variant: variant.getResource(),\n                    });\n                case StepType.Illustration: {\n                    const illustrationStep = step as IllustrationStepHandle;\n                    return illustrationStep.setColor(channel?.toString() || \"\", variant.getColor() || \"\");\n                }\n            }\n        });\n        await Promise.all(promises);\n    }\n\n    /**\n     * Sets a custom color on the global state.\n     */\n    async setCustomColor(color: string) {\n        const currentColor = this.getCurrentVariant()?.getColor();\n        if (currentColor && currentColor.toLowerCase() === \"#custom\") {\n            // Only apply to workflows when the variant is custom\n            const sharedSteps = (await this.getSharedSteps()) as ShapeStepHandle[];\n            sharedSteps.forEach((step) => step.setCustomColor(color));\n        }\n        this.bundle\n            .getGlobalPropertyStateManager()\n            .setAspectStorage<GlobalPropertyStateColorOptionStorage>(this.property.name, { customColor: color });\n    }\n\n    /**\n     * Gets the custom color used by the global state.\n     */\n    getCustomColor(): string {\n        return (\n            this.bundle\n                .getGlobalPropertyStateManager()\n                .getAspectStorage<GlobalPropertyStateColorOptionStorage>(this.property.name)?.customColor ||\n            this.getCurrentVariant()?.getColor() ||\n            \"#ffffff\"\n        );\n    }\n}\n\nconst getStepsForAspect = (bundle: Bundle, aspectName: string, stepType: StepType): StepHandle<AnyStepData>[] => {\n    const experiences = bundle.getWorkflowExperiences();\n    const globalConfig = bundle.getGlobalPropertyConfiguration();\n    if (!globalConfig) {\n        return [];\n    }\n    const steps = experiences\n        .flatMap((ex) => ex.getSteps())\n        .filter((s) => s.getGlobalPropertyAspects(globalConfig.id).includes(aspectName) && s.getType() === stepType);\n    return steps;\n};\n\n/**\n * Get the amount of channels needed to cover illustration steps of the given aspect name.\n * @param bundle\n * @param aspectName\n * @returns\n */\nexport const amtChannelsForAspect = (bundle: Bundle, aspectName: string): number => {\n    const steps = getStepsForAspect(bundle, aspectName, StepType.Illustration) as IllustrationStepHandle[];\n    const channelAmts = steps.map((s) => {\n        const asset = s.getCurrentVariant()?.getAssetResource();\n        if (!asset?.assetConfiguration) {\n            return 0;\n        }\n        const colors = s.getColors();\n        if (!colors) {\n            return 0;\n        }\n        return Object.getOwnPropertyNames(colors).length;\n    });\n    return Math.max(...channelAmts);\n};\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap,\n    nodeIsSet = nodeUtil && nodeUtil.isSet,\n    nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object),\n    nativeMax = Math.max,\n    nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution:\n  // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n  // https://github.com/lodash/lodash/security/advisories/GHSA-w36w-cm3g-pc62\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block constructor/prototype as non-terminal traversal keys to prevent\n    // escaping the object graph into built-in constructors and prototypes.\n    if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = omit;\n","import omit from \"lodash.omit\";\n\n/**\n * Omits any object key that is in the provided blacklist.\n */\nexport default function omitDeep(input: any, blacklist: string[]) {\n    function omitDeepOnOwnProps(obj: any) {\n        if (typeof obj === \"undefined\") {\n            return obj;\n        }\n\n        if (!Array.isArray(obj) && !isObject(obj)) {\n            return obj;\n        }\n\n        if (Array.isArray(obj)) {\n            return omitDeep(obj, blacklist);\n        }\n\n        let o = {};\n        for (const [key, value] of Object.entries(obj)) {\n            o[key] = !isNil(value) ? omitDeep(value, blacklist) : value;\n        }\n        return omit(o, blacklist);\n    }\n\n    if (Array.isArray(input)) {\n        return input.map(omitDeepOnOwnProps);\n    }\n    return omitDeepOnOwnProps(input);\n}\n\nfunction isNil(value: any) {\n    return value === null || value === undefined;\n}\n\nfunction isObject(obj: any) {\n    return typeof obj == \"object\" && !Array.isArray(obj) && obj !== null;\n}\n","import isEqual from \"lodash.isequal\";\nimport { graphQlManager } from \"../services/server\";\nimport {\n    AspectType,\n    GlobalPropertyConfiguration,\n    GlobalPropertyState,\n    GlobalPropertyStateAspectStorage,\n} from \"../types\";\nimport { createGlobalPropertyStateMutation, updateGlobalPropertyStateMutation } from \"./query\";\nimport cloneDeep from \"lodash.clonedeep\";\nimport omitDeep from \"../util/omitDeep\";\nimport { PromiseQueue, QueueablePromise } from \"../util/PromiseQueue\";\n\nexport function calculateMandatoryStates(globalPropertyState: GlobalPropertyState | undefined) {\n    const mandatoryFulfilledAspects = new Map<string, boolean>();\n    globalPropertyState?.aspects?.forEach((aspect) => {\n        // TODO: may need to validate differently for each type of aspect\n        if (aspect.value !== \"\") {\n            mandatoryFulfilledAspects.set(aspect.name, true);\n        }\n        // No need to add incomplete aspects\n    });\n    return mandatoryFulfilledAspects;\n}\n\nexport interface GlobalPropertyStateManager {\n    getInitializationPromise(): Promise<void>;\n    getGlobalPropertyState(): GlobalPropertyState | undefined;\n    setGlobalPropertyState(state: GlobalPropertyState): Promise<void>;\n    getAspect(name: string, channel?: number): string | undefined;\n    getAspectStorage<S extends GlobalPropertyStateAspectStorage>(name: string, channel?: number): S | undefined;\n    getAspectMandatoryFulfilled(name: string): boolean | undefined;\n    getAspectHidden(name: string): boolean;\n    /**\n     * Updates the value of a named aspect in the state.\n     * @param name The name (key) of the aspect. This must match the key in the associated Global Property Config\n     * @param value The value, represented as a string.\n     * @param storage Optional: Additional data storage for the aspect. Not specifying this parameter, or providing `undefined`, will not update the\n     * storage (if it already exists). Providing `null` will clear the existing storage.\n     * @param channel Optional: Additional sub-identifier.\n     */\n    setAspect(\n        name: string,\n        value: string,\n        storage?: GlobalPropertyStateAspectStorage | null,\n        channel?: number,\n        hidden?: boolean,\n    ): Promise<void>;\n    setAspectStorage<S extends GlobalPropertyStateAspectStorage>(\n        name: string,\n        storage: S | null,\n        channel?: number,\n    ): Promise<void>;\n    setBundleOptions(bundleOptions?: BundleOptions): void;\n    getBundleOptions(): BundleOptions | undefined;\n    setConfiguration(configuration: GlobalPropertyConfiguration | undefined): void;\n    clearAspects(names: string[]): Promise<void>;\n}\n\nexport interface BundleOptions {\n    additionalHeaders?: { [key: string]: string };\n    /**\n     * If set to true, the products associated with the bundle will be eagerly fetched.\n     */\n    eagerFetchProducts?: boolean;\n\n    bundleOwnerId?: string;\n\n    /**\n     * When reloading a bundle we may have an existing state to pull with it.\n     */\n    existingGlobalPropertyState?: GlobalPropertyState;\n\n    readonly?: boolean;\n}\n\n/**\n * Encapsulates the behavior of updating layout state against a transaction on the server.\n */\nexport class GlobalPropertyStateUpdate extends QueueablePromise {\n    private readonly update: () => Promise<any>;\n    constructor(update: () => Promise<any>) {\n        super();\n        this.update = update;\n    }\n    public async execute() {\n        await this.update();\n        await new Promise<void>((resolve) => {\n            window.setTimeout(() => {\n                resolve();\n            }, 1000);\n        });\n    }\n}\n\n// Omits __typename from state fetched from the network.\n// Need to guarantee this is never present, since the isEqual check appears to fail\n// on this from time to time.\nfunction cloneStateFromNetwork(state: GlobalPropertyState): GlobalPropertyState {\n    return omitDeep(state, [\"__typename\"]) as GlobalPropertyState;\n}\n\nexport class GlobalPropertyStateManagerImpl implements GlobalPropertyStateManager {\n    private readonly bundleId: string;\n    private readonly bundleOwnerId?: string;\n    private readonly initPromise: Promise<void>;\n    private globalPropertyState?: GlobalPropertyState;\n    private stateUpdateQueue: PromiseQueue<GlobalPropertyStateUpdate> = new PromiseQueue<GlobalPropertyStateUpdate>(1);\n    private readonly onGlobalPropertyStateChange: (\n        previousState: GlobalPropertyState,\n        newState: GlobalPropertyState,\n    ) => Promise<void>;\n    private bundleOptions?: BundleOptions;\n    private configuration?: GlobalPropertyConfiguration;\n    private mandatoryFulfilledAspects = new Map<string, boolean>();\n\n    constructor(\n        bundleId: string,\n        bundleOwnerId: string | undefined,\n        configuration: GlobalPropertyConfiguration | undefined,\n        onGlobalPropertyStateChange: (\n            previousState: GlobalPropertyState,\n            newState: GlobalPropertyState,\n        ) => Promise<void>,\n        bundleOptions?: BundleOptions,\n    ) {\n        this.bundleId = bundleId;\n        this.bundleOwnerId = bundleOwnerId;\n        this.configuration = configuration;\n        this.bundleOptions = bundleOptions;\n\n        const existingState = bundleOptions?.existingGlobalPropertyState;\n        this.initPromise = existingState\n            ? Promise.resolve(existingState).then(() => {\n                  console.log(`Setting global property state to existing state.`);\n                  this.globalPropertyState = cloneStateFromNetwork(existingState);\n                  this.recalculateMandatoryStates();\n                  return undefined;\n              })\n            : this.createGlobalPropertyState().then((state) => {\n                  console.log(`Setting global property state to new state.`);\n                  this.globalPropertyState = cloneStateFromNetwork(state);\n                  this.recalculateMandatoryStates();\n                  return undefined;\n              });\n\n        this.onGlobalPropertyStateChange = onGlobalPropertyStateChange;\n    }\n\n    async clearAspects(names: string[]): Promise<void> {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        const aspects = this.globalPropertyState.aspects;\n        this.globalPropertyState.aspects = aspects.filter((a) => !names.includes(a.name));\n\n        // clearAspects is currently only used in onGlobalPropertiesChanged, which means\n        // we don't have to end this function with the sort of cleanup that setAspect needs.\n    }\n\n    private recalculateMandatoryStates() {\n        this.mandatoryFulfilledAspects = calculateMandatoryStates(this.globalPropertyState);\n    }\n\n    setBundleOptions(bundleOptions?: BundleOptions) {\n        this.bundleOptions = bundleOptions;\n    }\n\n    getBundleOptions() {\n        return this.bundleOptions;\n    }\n\n    setConfiguration(configuration: GlobalPropertyConfiguration) {\n        this.configuration = configuration;\n    }\n\n    getInitializationPromise(): Promise<void> {\n        return this.initPromise;\n    }\n\n    getGlobalPropertyState(): GlobalPropertyState | undefined {\n        return this.globalPropertyState;\n    }\n\n    async setGlobalPropertyState(state: GlobalPropertyState): Promise<void> {\n        if (!this.globalPropertyState) {\n            await this.initPromise;\n        }\n        const previousState = cloneDeep(this.globalPropertyState!);\n        this.globalPropertyState = { ...cloneStateFromNetwork(state), id: previousState.id };\n        this.recalculateMandatoryStates();\n        this.queueGlobalPropertyStateUpdate();\n        await this.onGlobalPropertyStateChange(previousState, this.globalPropertyState!);\n    }\n\n    getAspectMandatoryFulfilled(name: string): boolean | undefined {\n        return this.mandatoryFulfilledAspects.get(name);\n    }\n\n    getAspectHidden(name: string): boolean {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        return !!this.globalPropertyState.aspects.find((a) => a.name === name)?.hidden;\n    }\n\n    getAspect(name: string, channel?: number): string | undefined {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        const aspect = this.globalPropertyState.aspects.find((a) => a.name === name && a.channel === channel);\n        if (aspect) {\n            return aspect.value;\n        }\n        return undefined;\n    }\n\n    getAspectStorage<S extends GlobalPropertyStateAspectStorage>(name: string, channel?: number): S | undefined {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        return this.globalPropertyState.aspects.find((a) => a.name === name && a.channel === channel)?.storage as\n            | S\n            | undefined;\n    }\n\n    async setAspect(\n        name: string,\n        value: string,\n        storage?: GlobalPropertyStateAspectStorage | null,\n        channel?: number,\n        hidden?: boolean,\n    ): Promise<void> {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        if (!this.configuration) {\n            throw new Error(\"Global property configuration not linked to the state manager.\");\n        }\n        const configAspect = this.configuration.aspects.find((a) => a.name === name);\n        if (!configAspect) {\n            throw new Error(`Failed to find configuration aspect with name: ${name}`);\n        }\n        // Update mandatory state\n        // Some future steps may need custom logic for this\n        this.mandatoryFulfilledAspects.set(name, value !== \"\");\n\n        const previousState = cloneDeep(this.globalPropertyState);\n        const aspects = this.globalPropertyState.aspects.filter((a) => a.name === name);\n        if (aspects.length > 0) {\n            if (channel) {\n                const aspect = aspects.find((a) => a.channel === channel);\n                if (aspect) {\n                    aspect.value = value;\n                    aspect.type = configAspect.type;\n                    aspect.channel = channel;\n                    aspect.hidden = hidden ?? aspect.hidden;\n                    if (storage !== undefined) {\n                        aspect.storage = storage !== null ? storage : undefined;\n                    }\n                } else {\n                    let aspectHidden: boolean | undefined = undefined;\n                    // We don't have an aspect for that channel.\n                    if (channel === 1) {\n                        // Find the aspect with undefined channel so that we can remove it because\n                        // the aspect with channel 1 will serve that purpose.\n                        const aspectIndex = this.globalPropertyState.aspects.findIndex(\n                            (a) => !a.channel && a.name === name,\n                        );\n                        if (aspectIndex && aspectIndex > 0) {\n                            const asp = this.globalPropertyState.aspects.splice(aspectIndex, 1);\n                            aspectHidden = asp[0].hidden;\n                        }\n                    }\n                    this.globalPropertyState.aspects.push({\n                        name,\n                        value,\n                        type: configAspect.type,\n                        storage: storage !== null ? storage : undefined,\n                        channel,\n                        hidden: hidden ?? aspectHidden,\n                    });\n                }\n            } else {\n                const aspect = aspects[0];\n                aspect.value = value;\n                aspect.type = configAspect.type;\n                aspect.hidden = hidden ?? aspect.hidden;\n                if (storage !== undefined) {\n                    aspect.storage = storage !== null ? storage : undefined;\n                }\n            }\n        } else {\n            this.globalPropertyState.aspects.push({\n                name,\n                value,\n                type: configAspect.type,\n                storage: storage !== null ? storage : undefined,\n                channel,\n                hidden,\n            });\n        }\n        if (isEqual(previousState, this.globalPropertyState)) {\n            return; // No-op\n        }\n        this.queueGlobalPropertyStateUpdate();\n        await this.onGlobalPropertyStateChange(previousState, this.globalPropertyState);\n    }\n\n    async setAspectStorage(\n        name: string,\n        storage: GlobalPropertyStateAspectStorage | null,\n        channel?: number,\n    ): Promise<void> {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        if (!this.configuration) {\n            throw new Error(\"Global property configuration not linked to the state manager.\");\n        }\n        const configAspect = this.configuration.aspects.find((a) => a.name === name);\n        if (!configAspect) {\n            throw new Error(`Failed to find configuration aspect with name: ${name}`);\n        }\n        const previousState = cloneDeep(this.globalPropertyState);\n        const aspects = this.globalPropertyState.aspects.filter((a) => a.name === name);\n        if (aspects.length > 0) {\n            if (channel) {\n                const aspect = aspects.find((a) => a.channel === channel);\n                if (aspect) {\n                    aspect.storage = storage !== null ? storage : undefined;\n                    aspect.type = configAspect.type;\n                }\n            } else {\n                const aspect = aspects[0];\n                aspect.storage = storage !== null ? storage : undefined;\n                aspect.type = configAspect.type;\n            }\n        } else {\n            this.globalPropertyState.aspects.push({\n                name,\n                value: \"\",\n                type: configAspect.type,\n                storage: storage !== null ? storage : undefined,\n                channel,\n            });\n        }\n        if (isEqual(previousState, this.globalPropertyState)) {\n            return; // No-op\n        }\n        this.queueGlobalPropertyStateUpdate();\n        await this.onGlobalPropertyStateChange(previousState, this.globalPropertyState);\n    }\n\n    private queueGlobalPropertyStateUpdate() {\n        this.stateUpdateQueue.enqueue(\n            new GlobalPropertyStateUpdate(async () => {\n                await this.updateGlobalPropertyState();\n            }),\n        );\n    }\n\n    private async updateGlobalPropertyState(): Promise<void> {\n        if (!this.globalPropertyState) {\n            throw new Error(\"Global property state not initialized\");\n        }\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ globalPropertyStateUpdate: GlobalPropertyState }>({\n                mutation: updateGlobalPropertyStateMutation,\n                variables: {\n                    id: this.globalPropertyState.id,\n                    aspects: this.globalPropertyState.aspects.map((aspect) => {\n                        let storageInput = !!aspect.type && !!aspect.storage ? {} : undefined;\n                        if (storageInput) {\n                            switch (aspect.type) {\n                                case AspectType.FileUpload: {\n                                    storageInput[\"fileUpload\"] = aspect.storage;\n                                    break;\n                                }\n                                case AspectType.ColorOption:\n                                case AspectType.Option: {\n                                    storageInput[\"option\"] = aspect.storage;\n                                    break;\n                                }\n                            }\n                        }\n                        return {\n                            name: aspect.name,\n                            value: aspect.value,\n                            type: aspect.type,\n                            storage: storageInput,\n                            channel: aspect.channel,\n                            hidden: aspect.hidden,\n                        };\n                    }),\n                },\n                context: {\n                    headers: {\n                        bundleOwnerId: this.bundleOwnerId,\n                        ...this.bundleOptions?.additionalHeaders,\n                    },\n                },\n            });\n\n        if (!response.data?.globalPropertyStateUpdate) {\n            throw new Error(\"Unable to update global property state\");\n        }\n    }\n\n    private async createGlobalPropertyState(): Promise<GlobalPropertyState> {\n        const createResponse = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ globalPropertyStateCreate: GlobalPropertyState }>({\n                mutation: createGlobalPropertyStateMutation,\n                variables: {\n                    bundleId: this.bundleId,\n                },\n                context: {\n                    headers: {\n                        bundleOwnerId: this.bundleOwnerId,\n                        ...this.bundleOptions?.additionalHeaders,\n                    },\n                },\n            });\n        if (createResponse.data?.globalPropertyStateCreate && createResponse.data.globalPropertyStateCreate.id) {\n            return createResponse.data.globalPropertyStateCreate;\n        }\n        throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`);\n    }\n}\n","import { BundleStateData } from \"../types\";\n\n/**\n * Helpful state serialization and deserialization for bundle state, which can be used to persist and restore information related to a bundle.\n */\nexport class BundleStateManager {\n    private state: BundleStateData;\n\n    constructor(stateData?: string) {\n        this.setState(stateData || `{\"transactions\": []}`);\n    }\n\n    setState(stateData?: string) {\n        if (!stateData) {\n            return;\n        }\n        this.state = JSON.parse(stateData);\n    }\n\n    getState() {\n        return this.state;\n    }\n\n    removeStateForTransaction(transactionId: string) {\n        if (!this.state || !this.state.transactions) {\n            return;\n        }\n        const index = this.state.transactions.findIndex((t) => t.transactionId === transactionId);\n        if (index !== -1) {\n            this.state.transactions.splice(index, 1);\n        }\n    }\n\n    getSerializedState() {\n        if (!this.state) {\n            return undefined;\n        }\n        this.deleteFieldNameFromObjectRecursive(this.state, \"__typename\");\n        return JSON.stringify(this.state);\n    }\n\n    private deleteFieldNameFromObjectRecursive(obj: any, fieldName: string) {\n        if (typeof obj !== \"object\" || obj === null) {\n            return;\n        }\n        for (const key in obj) {\n            if (key === fieldName) {\n                delete obj[key];\n            } else {\n                this.deleteFieldNameFromObjectRecursive(obj[key], fieldName);\n            }\n        }\n    }\n}\n","import { gql } from \"@apollo/client/core\";\nimport { graphQlManager } from \"./server\";\n\n/** For fetching metafields on many entities at once */\nconst metafieldsQuery = gql`\n    query GetManyMetafields($entityIds: [String!]!) {\n        metafieldsMany(entityIds: $entityIds) {\n            id\n            value\n            metafieldConfiguration {\n                id\n                metafieldType\n                name\n            }\n        }\n    }\n`;\n\ninterface MetafieldMapValue {\n    key: string;\n    value: string;\n    metafieldConfigurationId: string;\n    metafieldType: string;\n}\n\n// This is a helper class that can be used to load metafields for a given entity.\n// It will load the metafields for the entity and store them in a map.\n// TODO: There are a number of areas in the code that request metafields in manual ways. Update each to use this service.\nclass MetafieldManager {\n    readonly internalMap = new Map<string, MetafieldMapValue[]>();\n\n    /**\n     * Given a specific entity, request the given keys for that entity.\n     * This will first check if the keys are already present in the internal map, and if not, it will fetch them from the server.\n     * @param entityId The entity to check.\n     * @param keys The keys to look for.\n     * @returns Returns map of keys and values for the given entity. Missing keys will not be present. Use map.has() to check if a key was present.\n     */\n    async requestKeysForEntity(entityId: string, keys: string[]): Promise<Map<string, string>> {\n        const loadedKeys = new Map<string, string>();\n        await this.ensureIdsArePresent([entityId]);\n        keys.forEach((key) => {\n            const value = this.requestKeyForEntityIfAvailable(entityId, key);\n            if (value) {\n                loadedKeys.set(key, value);\n            }\n        });\n        return loadedKeys;\n    }\n\n    async ensureIdsArePresent(entityIds: string[]) {\n        // If ids are already present we bust out, we already have what we need\n        if (entityIds.every((id) => this.internalMap.has(id))) return;\n        // Request the metafields for required entities.\n        const queryResponse = await graphQlManager.getShadowGraphqlClient().query<{\n            metafieldsMany: {\n                id: string;\n                value: string;\n                metafieldConfiguration: { id: string; name: string; metafieldType: string };\n            }[][];\n        }>({\n            query: metafieldsQuery,\n            errorPolicy: \"all\",\n            variables: {\n                entityIds: entityIds.filter((id) => !this.internalMap.has(id)),\n            },\n        });\n        // Map the data to a better representation for retrieval.\n        entityIds.forEach((id, idx) => {\n            const entityFields = queryResponse.data.metafieldsMany[idx];\n            this.internalMap.set(\n                id,\n                entityFields.map((lf) => {\n                    return {\n                        key: lf.metafieldConfiguration.name,\n                        value: lf.value,\n                        metafieldConfigurationId: lf.metafieldConfiguration.id,\n                        metafieldType: lf.metafieldConfiguration.metafieldType,\n                    };\n                }),\n            );\n        });\n    }\n\n    /**\n     * Returns a metafield for this product if available. Fetching from the server if not available locally.\n     * @param entityId The entity to request a field for.\n     * @param key The field name to request\n     * @returns A promise resolving to the field if available or undefined if not.\n     */\n    async requestKeyForEntity(entityId: string, key: string): Promise<string | undefined> {\n        if (!this.internalMap.has(entityId)) {\n            return undefined;\n        }\n        let entityFields = this.internalMap.get(entityId)!;\n        const field = entityFields.find((ef) => ef.key === key);\n        if (!field) {\n            await this.ensureIdsArePresent([entityId]);\n            entityFields = this.internalMap.get(entityId)!;\n        }\n        return field ? JSON.parse(field.value) : undefined;\n    }\n\n    /**\n     * Returns a metafield for this product if available. Checks locally only, use ensureIdsArePresent to fetch first from the server.\n     * @param entityId The entity to request a field for.\n     * @param key The field name to request\n     * @returns A promise resolving to the field if available or undefined if not.\n     */\n    requestKeyForEntityIfAvailable(entityId: string, key: string): string | undefined {\n        if (!this.internalMap.has(entityId)) {\n            return undefined;\n        }\n        const entityFields = this.internalMap.get(entityId)!;\n        const field = entityFields.find((ef) => {\n            return ef.key === key;\n        });\n        if (!field) {\n            return undefined;\n        }\n        return JSON.parse(field.value);\n    }\n\n    /*\n     * Returns a metafield for this product if available. Checks locally only, use ensureIdsArePresent to fetch first from the server.\n     * The metafield value in the returned value will need to be parsed to be used.\n     * Uses the metafield configuration ID as opposed to the metafield name.\n     */\n    requestIfAvailable(entityId: string, metafieldConfigurationId: string): MetafieldMapValue | undefined {\n        if (!this.internalMap.has(entityId)) {\n            return undefined;\n        }\n        const entityFields = this.internalMap.get(entityId)!;\n        const field = entityFields.find((ef) => {\n            const result = ef.metafieldConfigurationId === metafieldConfigurationId;\n            return result;\n        });\n        return field;\n    }\n}\n\nconst metafieldManager = new MetafieldManager();\n\nexport { metafieldManager };\n","import { gql } from \"@apollo/client/core\";\nimport {\n    getProductCollectionProductsQuery,\n    getProductCollectionProductsFilteredQuery,\n    getProductCollectionProductsFeedQuery,\n    productCollectionFieldsFragment,\n} from \"./Bundle/query\";\nimport { metafieldManager } from \"./services/metafield\";\nimport { graphQlManager } from \"./services/server\";\nimport {\n    IntegrationProductResource,\n    IntegrationType,\n    ProductCollectionResource,\n    Product,\n    ProductWorkflow as ProductWorkflowInterface,\n    ProductCollectionProductResource,\n    Asset,\n} from \"./types\";\nimport { ClientError } from \"./util/exception\";\nimport cloneDeep from \"lodash.clonedeep\";\nimport { getTransformedAssetURL } from \"./util/asset\";\n\ninterface MetafieldFilter {\n    operator: \"Equals\" | \"IsEmpty\";\n    invert?: boolean;\n    metafieldConfigurationId: string;\n    value?: string;\n}\n\ninterface ProductTagFilter {\n    /** Only products with tags matching all entries in this array will be included. */\n    include: string[];\n    /** Only products that have no tags matching any entry in this array will be included. */\n    exclude: string[];\n}\n\nexport enum ProductCollectionProductSortKey {\n    Default = \"Default\",\n    Name = \"Name\",\n    Price = \"Price\",\n}\n\ninterface FilteredProductCollectionQueryResponse {\n    productCollections: {\n        id: string;\n        productCollectionProducts: { id: string; product: { id: string } }[];\n    }[];\n}\n\n/**\n * A collection of products that can be used to form a bundle.\n */\nexport class ProductCollection {\n    private readonly collection: ProductCollectionResource;\n    private fullFetched = false;\n\n    constructor(collection: ProductCollectionResource) {\n        this.collection = collection;\n        // When the collection passed in as the basis for this class\n        // contains products we know the products were eagerly fetched.\n        const products = this.collection.productCollectionProducts;\n        if (products && products.length >= this.collection.total) {\n            this.fullFetched = true;\n        }\n    }\n\n    /**\n     * The ID of the product collection.\n     */\n    getId(): string {\n        return this.collection.id;\n    }\n\n    /**\n     * The name of the collection.\n     */\n    getName(): string {\n        return this.collection.name;\n    }\n\n    /**\n     * The description of the collection.\n     */\n    getDescription(): string {\n        return this.collection.description || \"\";\n    }\n\n    /**\n     * The start date of the dispatch.\n     * @returns The start date of the dispatch or undefined if not set.\n     */\n    getDispatchStartDate(): Date | undefined {\n        if (!this.collection.dispatchStartDate) return undefined;\n        return new Date(this.collection.dispatchStartDate);\n    }\n\n    /**\n     * The end date of the dispatch.\n     * @returns The end date of the dispatch or undefined if not set.\n     */\n    getDispatchEndDate(): Date | undefined {\n        if (!this.collection.dispatchEndDate) return undefined;\n        return new Date(this.collection.dispatchEndDate);\n    }\n\n    /**\n     * The image of the collection.\n     */\n    getImage(): undefined | Asset {\n        return this.collection.image;\n    }\n\n    /**\n     * A list of products in this collections with useful helpers for interacting with them.\n     */\n    getProducts(): CollectionProduct[] {\n        if (!this.collection.productCollectionProducts) {\n            throw new Error(\"Failed to find products on collection. Ensure you fetch them first!\");\n        }\n        return this.collection.productCollectionProducts\n            .filter((pcp) => !!pcp.product)\n            .map((pcp) => {\n                return new CollectionProduct(pcp);\n            });\n    }\n\n    /**\n     * A list of products in this collections with useful helpers for interacting with them.\n     */\n    async fetchProducts(productIds?: string[]): Promise<CollectionProduct[]> {\n        if (this.fullFetched) {\n            return (this.collection.productCollectionProducts ?? [])\n                .filter((pcp) => !!pcp.product)\n                .map((pcp) => {\n                    return new CollectionProduct(pcp);\n                });\n        }\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .query<{ productCollections: ProductCollectionResource[] }>({\n                query: getProductCollectionProductsQuery,\n                variables: {\n                    id: this.getId(),\n                    productIds,\n                },\n                errorPolicy: \"all\",\n            });\n        const currentProducts = this.collection.productCollectionProducts || [];\n        this.collection.productCollectionProducts = [\n            ...currentProducts,\n            ...(response.data.productCollections[0].productCollectionProducts?.filter(\n                (pcp) => !currentProducts.some((curr) => pcp.id === curr.id),\n            ) || []),\n        ];\n        if (this.collection.productCollectionProducts.length >= this.collection.total) {\n            this.fullFetched = true;\n        }\n        return this.collection.productCollectionProducts\n            .filter((pcp) => !!pcp.product && (!productIds || productIds.includes(pcp.product.id)))\n            .map((pcp) => {\n                return new CollectionProduct(pcp);\n            });\n    }\n\n    /**\n     * Returns a list of collections products matching the associated metafield/tag filters.\n     * @param filters A list of metafield filters to apply.\n     * @param tags An object of tag filters to apply.\n     */\n    async filterProducts(\n        filters?: MetafieldFilter[],\n        tags?: ProductTagFilter,\n        sortKey?: ProductCollectionProductSortKey,\n        sortDescending?: boolean,\n    ) {\n        const response = await graphQlManager.getShadowGraphqlClient().query<FilteredProductCollectionQueryResponse>({\n            query: getProductCollectionProductsFilteredQuery,\n            errorPolicy: \"all\",\n            variables: {\n                id: this.getId(),\n                filters: filters\n                    ? {\n                          link: \"And\",\n                          metafields: filters,\n                      }\n                    : undefined,\n                tags: tags\n                    ? {\n                          include: tags.include ?? [],\n                          exclude: tags.exclude ?? [],\n                      }\n                    : undefined,\n                sortKey: sortKey,\n                sortDescending: sortDescending,\n            },\n        });\n        if (!response.data?.productCollections || response.data?.productCollections.length === 0) {\n            throw new Error(\"Failed to filter product collection products.\");\n        }\n        const currentProducts = this.getProducts();\n        const filteredResults = response.data.productCollections[0].productCollectionProducts.map(\n            (it) => it.product.id,\n        );\n        return currentProducts.filter((it) => filteredResults.includes(it.getId()));\n    }\n\n    /**\n     * Fetches a paginated feed of products.\n     * @param offset The zero-based start index.\n     * @param limit The maximum number of products to return.\n     * @param productFilters Optional product metafields to filter the products by.\n     * @param tags Optional object of tag filters to apply.\n     * @param sortKey Optional field of the products to sort by.\n     * @param sortDescending Optional boolean to indicate if the sort should be in descending order.\n     * @param quickSearch Optional string to filter products by name.\n     * @param workflowFilters Optional workflow metafields to filter the products and their workflows by.\n     * @returns\n     */\n    async fetchProductsFeed(\n        offset: number,\n        limit: number,\n        productFilters?: MetafieldFilter[],\n        tags?: ProductTagFilter,\n        sortKey?: ProductCollectionProductSortKey,\n        sortDescending?: boolean,\n        quickSearch?: string,\n        workflowFilters?: MetafieldFilter[],\n    ): Promise<{\n        items: CollectionProduct[];\n        total: number;\n    }> {\n        if (this.fullFetched) {\n            // Local pagination\n            const filteredProducts = await (productFilters\n                ? this.filterProducts(productFilters)\n                : this.fetchProducts());\n            return {\n                total: filteredProducts.length,\n                items: filteredProducts.slice(offset, offset + limit),\n            };\n        }\n        const abortController = new AbortController();\n        const { signal } = abortController;\n        const observable = graphQlManager\n            .getShadowGraphqlClient()\n            .watchQuery<{ productCollections: ProductCollectionResource[] }>({\n                query: getProductCollectionProductsFeedQuery,\n                variables: {\n                    id: this.getId(),\n                    limit,\n                    offset,\n                    productFilters: productFilters\n                        ? {\n                              link: \"And\",\n                              metafields: productFilters,\n                          }\n                        : undefined,\n                    productWorkflowFilters: workflowFilters\n                        ? {\n                              link: \"And\",\n                              metafields: workflowFilters,\n                          }\n                        : undefined,\n                    tags: tags\n                        ? {\n                              include: tags.include ?? [],\n                              exclude: tags.exclude ?? [],\n                          }\n                        : undefined,\n                    sortKey: sortKey,\n                    sortDescending: sortDescending,\n                    quickSearch,\n                },\n                errorPolicy: \"all\",\n                fetchPolicy: \"cache-first\",\n                returnPartialData: true,\n                context: {\n                    fetchOptions: {\n                        signal,\n                    },\n                },\n            });\n        // HACK: Apollo's query caching doesn't play nicely with nullable fields, so instead we're using a watchQuery which can resolve data that Apollo\n        // believes it needs to refetch, and then cancelling the query once we have what we want.\n        // Some cleaner alternatives include:\n        // - Marking the nullable fields as intentionally nullable in Apollo's cache config\n        // - Replacing Apollo with something that handles caching better\n        return new Promise((resolve) => {\n            let fetched = false;\n            const subscription = observable.subscribe({\n                next(value) {\n                    if (fetched) {\n                        return;\n                    }\n                    if (\n                        value.partial &&\n                        (!value.data.productCollections ||\n                            value.data.productCollections.length === 0 ||\n                            !value.data.productCollections[0].productCollectionProductsFeed?.items ||\n                            value.data.productCollections[0].productCollectionProductsFeed?.items.length === 0)\n                    ) {\n                        return; // Wait for full data\n                    }\n                    abortController.abort();\n                    fetched = true;\n                    subscription.unsubscribe();\n                    const items =\n                        value.data.productCollections?.[0].productCollectionProductsFeed?.items\n                            .filter((pcp) => !!pcp.product)\n                            .map((pcp) => {\n                                return new CollectionProduct(cloneDeep(pcp));\n                            }) || [];\n                    resolve({\n                        items: items, // Clone items because it could be cached data (immutable)\n                        total: value.data.productCollections?.[0].productCollectionProductsFeed?.total ?? 0,\n                    });\n                },\n                error() {\n                    if (fetched) {\n                        return;\n                    }\n                    fetched = true;\n                    subscription.unsubscribe();\n                    resolve({ items: [], total: 0 });\n                },\n            });\n        });\n    }\n\n    /**\n     * The raw collection resource. This is generally not needed and should be avoided.\n     */\n    getResource(): ProductCollectionResource {\n        return this.collection;\n    }\n}\n\n/**\n * A collection product is a product within a ProductCollection. It provides a simple interface for interacting with the product.\n */\nexport class CollectionProduct {\n    private readonly product: Product;\n    private readonly productResource: ProductCollectionProductResource;\n\n    constructor(productCollectionProduct: ProductCollectionProductResource) {\n        this.product = productCollectionProduct.product; // Code should not attempt to use the CollectionProduct() constructor on PCPs with a null product.\n        this.productResource = productCollectionProduct;\n    }\n\n    /**\n     * The ID of the product in SpiffCommerce.\n     * @returns\n     */\n    getId(): string {\n        return this.product.id;\n    }\n\n    /**\n     * The name of the product. Human readable.\n     */\n    getName(): string {\n        return this.product.name;\n    }\n\n    /**\n     * A helper function for getting integrations\n     * @param type The type of integration you want.\n     * @param externalId An external integration ID to further filter by. Otherwise we return the first encountered.\n     * @returns The integration if found. Throws an error if not found as this data is typically a neccesity.\n     */\n    getIntegrationByType(type: IntegrationType, externalId?: string): IntegrationProductResource {\n        const ips = this.product.integrationProducts || [];\n        const ip = ips.find((ip) => {\n            const hasType = ip.integration?.type;\n            const typeMatches = ip.integration?.type === type;\n            const externalIdMatches = externalId ? ip.integration?.externalIntegrationId === externalId : true;\n            return hasType && typeMatches && externalIdMatches;\n        });\n        if (!ip) {\n            throw new Error(\n                \"Failed to find requested integration type on product. This is generally due to a configuration error\",\n            );\n        }\n        return ip;\n    }\n\n    getCurrentIntegration(): IntegrationProductResource {\n        const ips = this.product.integrationProducts || [];\n        const ip = ips.find((ip) => ip.integration?.isCurrent);\n        if (!ip) {\n            throw new Error(\n                `Product: ${this.productResource.id} is not linked to this current integration. This is generally due to a configuration error.`,\n            );\n        }\n        return ip;\n    }\n\n    /**\n     * A helper function for pulling the default workflow.\n     */\n    getDefaultWorkflow(): ProductWorkflow {\n        const workflows = this.product.workflows;\n\n        if (workflows === undefined) {\n            throw new ClientError(\n                \"Called getDefaultWorkflow() before fetching collection products. Use collection.fetchProducts() first to ensure the data is available.\",\n            );\n        }\n\n        if (workflows.length === 0) {\n            throw new ClientError(\n                \"Called getDefaultWorkflow() but no workflows on requested product. Ensure at least 1 workflow is assigned to this product.\",\n            );\n        }\n\n        // Check for a default configured on the collection\n        const configuredDefault = this.productResource.workflowId;\n        if (configuredDefault) {\n            const found = workflows.find((w) => w.workflowName === configuredDefault);\n            if (found) return new ProductWorkflow(found);\n        }\n\n        if (workflows.length === 1) {\n            return new ProductWorkflow(workflows[0]);\n        }\n\n        throw new ClientError(\n            \"Called getDefaultWorkflow() but no default workflow is configured for the requested product. Multiple workflows exist so we can't assume!\",\n        );\n    }\n\n    /**\n     * @returns All workflows associated with this Product.\n     */\n    getAllWorkflows(): ProductWorkflow[] {\n        const workflows = this.product.workflows || [];\n\n        if (workflows.length === 0) {\n            throw new ClientError(\n                \"No workflows on configured product. Ensure at least 1 workflow is assigned to this product.\",\n            );\n        }\n        return this.product\n            .workflows!.sort((a, b) => (a.index ?? 0) - (b.index ?? 0))\n            .map((workflow) => new ProductWorkflow(workflow));\n    }\n\n    /**\n     * A list of all integrations this product is connected to.\n     */\n    getIntegrations(): IntegrationProductResource[] {\n        return this.product.integrationProducts || [];\n    }\n\n    /**\n     * The raw product resource. This is generally not needed and should be avoided.\n     */\n    getResource(): Product {\n        return this.product;\n    }\n\n    /**\n     * Gets the base price of the product. Optionally include additional product pricing.\n     * @param includeAdditionalProduct Optionally include additional product pricing. You must provide at least one of the fields on this object.\n     * @returns\n     */\n    getBasePrice(includeAdditionalProduct?: {\n        /**\n         * The integration type to locate the additional product on.\n         */\n        integrationType?: IntegrationType;\n        /**\n         * The external ID of the integration to locate the additional product on.\n         */\n        externalId?: string;\n        /**\n         * The internal Spiff integration ID to locate the additional product on.\n         */\n        integrationId?: string;\n    }): number {\n        const price = this.product.basePrice || 0;\n        if (!includeAdditionalProduct) return price;\n        if (\n            !includeAdditionalProduct.integrationType &&\n            !includeAdditionalProduct.externalId &&\n            !includeAdditionalProduct.integrationId\n        ) {\n            throw new Error(\n                \"You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId\",\n            );\n        }\n        let ip: IntegrationProductResource | undefined;\n        if (includeAdditionalProduct.integrationId) {\n            ip = this.product.integrationProducts?.find(\n                (ip) => ip.integration?.id === includeAdditionalProduct.integrationId,\n            );\n        } else if (includeAdditionalProduct.externalId) {\n            ip = this.product.integrationProducts?.find(\n                (ip) => ip.integration?.externalIntegrationId === includeAdditionalProduct.externalId,\n            );\n        } else {\n            ip = this.product.integrationProducts?.find(\n                (ip) => ip.integration?.type === includeAdditionalProduct.integrationType,\n            );\n        }\n        if (!ip?.additionalIntegrationProduct?.product) return price;\n        return price + (ip.additionalIntegrationProduct.product.basePrice || 0);\n    }\n\n    /**\n     * Requests a set of metafields for this product. Metafields that are not available locally will be fetched from the server.\n     * @param keys The set of metafield keys to request.\n     * @returns A map of metafield key to value. Any unavailable keys will not be present in the map. use map.has() to check if a key is present.\n     */\n    async requestMetafields(keys: string[]): Promise<Map<string, string>> {\n        return metafieldManager.requestKeysForEntity(this.product.id, keys);\n    }\n}\n\n/**\n * Represents a the relationship between a workflow and a product.\n */\nexport class ProductWorkflow {\n    private readonly workflow: ProductWorkflowInterface;\n\n    constructor(workflow: ProductWorkflowInterface) {\n        this.workflow = workflow;\n    }\n\n    /**\n     * @returns The ID of this workflow, to be used when starting an experience.\n     */\n    getId(): string {\n        return this.workflow.workflowName;\n    }\n\n    /**\n     * @returns The name of the workflow.\n     */\n    getName(): string {\n        return this.workflow.friendlyName;\n    }\n\n    /**\n     * An image to be used to display this workflow in a UI to the customer.\n     * @returns A resource URL.\n     */\n    getThumbnail(resolution: number = 128, quality?: number): string | undefined {\n        const full = this.workflow?.imageUrl;\n        const pixelRatio = window?.devicePixelRatio || 1;\n        if (!full) {\n            return undefined;\n        }\n        return getTransformedAssetURL(full, resolution * pixelRatio, \"webp\", quality);\n    }\n}\n\nconst getCollectionsQuery = gql`\n    ${productCollectionFieldsFragment(false)}\n    query GetProductCollections($ids: [String!]!) {\n        productCollections(ids: $ids) {\n            ...ProductCollectionFields\n        }\n    }\n`;\n\nexport const getProductCollections = async (ids: string[]): Promise<ProductCollection[] | undefined> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        productCollections: ProductCollectionResource[];\n    }>({\n        query: getCollectionsQuery,\n        errorPolicy: \"all\",\n        variables: {\n            ids: ids,\n        },\n    });\n    return response.data?.productCollections?.map((it) => new ProductCollection(it));\n};\n","// An EventMap specifies the types of events and what payload they expect.\n// This allows for type-safe event handling in TypeScript.\ntype EventMap = {\n    [event: string]: any;\n};\n\n// A generic event emitter which can be used anywhere with customizable event shapes & naming.\n// TODO: 'once' listeners\nexport class EventEmitter<T extends EventMap> {\n    private listeners: {\n        [K in keyof T]?: Array<(payload: T[K]) => void>;\n    } = {};\n\n    // Add a listener for a specific event type\n    on<K extends keyof T>(event: K, listener: (payload: T[K]) => void): void {\n        if (!this.listeners[event]) {\n            this.listeners[event] = [];\n        }\n        this.listeners[event]!.push(listener);\n    }\n\n    // Remove a listener for a specific event type\n    off<K extends keyof T>(event: K, listener: (payload: T[K]) => void): void {\n        if (!this.listeners[event]) return;\n        this.listeners[event] = this.listeners[event]!.filter((l) => l !== listener);\n    }\n\n    // Emit an event with the given payload\n    emit<K extends keyof T>(event: K, payload: T[K]): void {\n        if (!this.listeners[event]) return;\n        for (const listener of this.listeners[event]!) {\n            listener(payload);\n        }\n    }\n\n    // Clear all listeners for a specific event or all events\n    clear<K extends keyof T>(event?: K): void {\n        if (event) {\n            delete this.listeners[event];\n        } else {\n            for (const key in this.listeners) {\n                delete this.listeners[key as keyof T];\n            }\n        }\n    }\n}\n","import { WorkflowExperience } from \"../WorkflowExperience\";\nimport { getIntegrationProducts, GetWorkflowGraphqlOptions, SpiffCommerceClient } from \"../client\";\nimport { graphQlManager } from \"../services/server\";\nimport {\n    AspectType,\n    BundleDesignCreationMessage,\n    Bundle as BundleEntity,\n    BundleStakeholder,\n    BundleStakeholderInput,\n    CustomerDetailsInput,\n    GlobalPropertyConfiguration,\n    GlobalPropertyState,\n    GlobalPropertyStateColorOptionStorage,\n    GlobalPropertyStateFileUploadStorage,\n    IntegrationProductResource,\n    Order,\n    ProductCollectionResource,\n    ShareAction,\n    StakeholderType,\n    StepType,\n    Transaction,\n} from \"../types\";\nimport {\n    bundleAddStakeholderMutation,\n    bundleAddTransactionMutation,\n    bundleAddTransactionsMutation,\n    bundleApprovalQuery,\n    bundleAssignGlobalPropertyConfiguration,\n    bundleAssignProductCollectionMutation,\n    bundleRejectionQuery,\n    bundleRemoveStakeholderMutation,\n    bundleRemoveTransactionMutation,\n    bundleRemoveTransactionsMutation,\n    bundleUpdateStakeholdersMutation,\n    bundleUpdateTransactionOrderMutation,\n    finalizeUpdateBundleMutation,\n    getBundleStakeholdersQuery,\n    updateBundleMutation,\n} from \"./query\";\nimport {\n    amtChannelsForAspect,\n    GlobalPropertyHandle,\n    GlobalPropertyHandleService,\n    OptionGlobalPropertyHandle,\n    ColorOptionGlobalPropertyHandle,\n    FileUploadGlobalPropertyHandle,\n    TextGlobalPropertyHandle,\n} from \"../GlobalPropertyConfiguration\";\nimport {\n    BundleOptions,\n    GlobalPropertyStateManager,\n    GlobalPropertyStateManagerImpl,\n    calculateMandatoryStates,\n} from \"../GlobalPropertyStateManager\";\nimport type { DesignCreationProgressUpdate, WorkflowManager } from \"../WorkflowManager\";\nimport { BundleStateManager } from \"./stateManager\";\nimport { persistenceService } from \"../services/persistence\";\nimport { ProductCollection } from \"../productCollection\";\nimport { createDesigns } from \"../services/design\";\nimport type { ModelContainer, ThreeDPreviewService } from \"@repo/preview\";\nimport { gql } from \"@apollo/client/core\";\nimport type { CompleteQuoteMessage } from \"@repo/types\";\nimport { EventEmitter } from \"../util/event\";\nimport { BundleEvent, BundleEventMap } from \"./event\";\nimport { getAssets } from \"../services/asset\";\nimport isEqual from \"lodash.isequal\";\nimport { readIntegrationProductsQuery } from \"../query\";\n\nconst addAddressToBundleMutation = gql`\n    mutation AddAddressToBundle(\n        $bundleId: String!\n        $streetAddress: String\n        $apartment: String\n        $city: String\n        $country: String\n        $state: String\n        $postCode: String\n    ) {\n        addressAttachToBundle(\n            bundleId: $bundleId\n            streetAddress: $streetAddress\n            apartment: $apartment\n            city: $city\n            country: $country\n            state: $state\n            postCode: $postCode\n        ) {\n            id\n        }\n    }\n`;\n\nconst addOrganizationToBundleMutation = gql`\n    mutation AddOrganizationToBundle($bundleId: String!, $organizationName: String!) {\n        organizationAttachToBundle(bundleId: $bundleId, organizationName: $organizationName) {\n            id\n        }\n    }\n`;\n\nconst generateQuoteIdMutation = gql`\n    mutation GenerateQuoteId($id: String!) {\n        bundleGenerateQuoteId(id: $id) {\n            id\n            quoteId\n        }\n    }\n`;\n\n/**\n * A bundle serves as a container for a set of workflow experience.\n */\nexport interface Bundle {\n    /**\n     * @returns The client that this bundle is associated with.\n     */\n    getClient(): SpiffCommerceClient;\n\n    /**\n     * @returns The id of the bundle entity in the Spiff Commerce system.\n     */\n    getId(): string;\n\n    /**\n     * @returns The name of the bundle.\n     */\n    getName(): string;\n\n    /**\n     * @returns True if this bundle is a template, false otherwise.\n     */\n    getTemplate(): boolean;\n\n    /**\n     * @returns The quote id of the bundle, if it has one.\n     * This is used to identify the bundle in the Spiff Commerce system for quoting purposes.\n     */\n    getQuoteId(): string | undefined;\n\n    /**\n     * Set the name of the bundle.\n     * @param name The new name for the bundle.\n     * @returns A promise that resolves when the name has been updated in the Spiff Commerce system.\n     */\n    setName(name: string): Promise<void>;\n\n    setDispatchDate(dd: string): Promise<void>;\n\n    getDispatchDate(): string | undefined;\n\n    setPurchaseOrder(po: string): Promise<void>;\n\n    getPurchaseOrder(): string | undefined;\n\n    /**\n     * @returns Custom metadata associated with this bundle.\n     */\n    getMetadata(): Map<string, string>;\n\n    /**\n     * Set custom metadata associated with this bundle.\n     * @param metadata Updated map of metadata items.\n     * @returns A promise that resolves when the metadata has been updated in the Spiff Commerce system.\n     */\n    setMetadata(metadata: Map<string, string>): Promise<void>;\n\n    /**\n     * Set the name and metadata for this bundle.\n     * @param name The new name for the bundle.\n     * @param metadata Updated map of metadata items.\n     * @returns A promise that resolves when the name and metadata have been updated in the Spiff Commerce system.\n     */\n    setNameAndMetadata(name: string, metadata: Map<string, string>): Promise<void>;\n\n    /**\n     * Returns true if this bundle is associated with a Product Collection that is linked to a Global Property Configuration\n     */\n    hasGlobalProperties(): boolean;\n\n    /**\n     * Get a handle to the global properties available within this bundle. Setting values\n     * via this method will make selections on all bundles that share the property.\n     */\n    getGlobalProperties(): Promise<GlobalPropertyHandle[]>;\n\n    /**\n     * Get the low level state manager for this bundle. Don't use this unless you know what you're doing.\n     */\n    getGlobalPropertyStateManager(): GlobalPropertyStateManager;\n\n    /**\n     * Get the total in subunits for all global properties in this bundle.\n     */\n    getGlobalPropertyTotalSubunits(): Promise<number>;\n\n    /**\n     * Return the total in subunits for this bundle. This is the sum of the total for all individual transactions.\n     */\n    getTotalSubunits(): number;\n\n    /**\n     * Retrieves the product collection associated with this bundle.\n     * If the bundle is not associated with a product collection, this method will return undefined.\n     */\n    getProductCollection(): ProductCollection | undefined;\n\n    /**\n     * Add another workflow experience to this bundle.\n     * @param experience The workflow experience to add to this bundle.\n     */\n    addWorkflowExperience(experience: WorkflowExperience): Promise<void>;\n\n    /**\n     * Adds multiple workflow experiences to this bundle.\n     * @param experiences The workflow experiences to add to this bundle.\n     */\n    addWorkflowExperiences(experiences: WorkflowExperience[]): Promise<void>;\n\n    /**\n     * Remove a workflow experience from this bundle.\n     * @param experience The workflow experience to remove from this bundle.\n     */\n    removeWorkflowExperience(experience: WorkflowExperience): Promise<void>;\n\n    /**\n     * Removes multiple workflow experiences from this bundle.\n     * @param experiences The workflow experiences to remove from this bundle.\n     */\n    removeWorkflowExperiences(experiences: WorkflowExperience[]): Promise<void>;\n\n    /**\n     * Remove a workflow experience from this bundle by transaction.\n     * @param transaction The transaction to remove from this bundle.\n     */\n    removeWorkflowExperienceByTransaction(transaction: Transaction): Promise<void>;\n\n    /**\n     * Removes multiple workflow experiences from this bundle by their transactions.\n     * @param transactions The transactions to remove from this bundle.\n     */\n    removeWorkflowExperiencesByTransactions(transactions: Transaction[]): Promise<void>;\n\n    /**\n     * Inserts the given workflow experience into the bundle at the given index.\n     * NOTE: If you intend to insert a workflow experience at the end of the bundle, use `addWorkflowExperience` instead as it is more efficient.\n     * @param experience The workflow experience to insert.\n     * @param index The index to insert the workflow experience at.\n     */\n    insertWorkflowExperience(experience: WorkflowExperience, index: number): Promise<void>;\n\n    /**\n     * Replaces a workflow experience at the given index with the given workflow experience. This essentially removes the old one and inserts the new one.\n     * @param index The index to replace the workflow experience at.\n     * @param experience The workflow experience to replace the old one with.\n     */\n    replaceWorkflowExperience(index: number, experience: WorkflowExperience): Promise<void>;\n\n    /**\n     * Swaps the workflow experiences at the given indices.\n     */\n    swapWorkflowExperiences(a: number, b: number): Promise<void>;\n\n    /**\n     * Returns all workflow experiences currently added to this bundle.\n     */\n    getWorkflowExperiences(): WorkflowExperience[];\n\n    /**\n     * Sort the list of workflow experiences. The sorting is performed locally, and then the order is updated in the Spiff Commerce system.\n     * @returns A promise that resolves when the re-ordering of the workflow experiences has been updated in the Spiff Commerce system.\n     * The sorting will occur immediately, but the promise will not resolve until the Spiff Commerce system has been updated.\n     */\n    sortWorkflowExperiences(sortFunc: (expA: WorkflowExperience, expB: WorkflowExperience) => number): Promise<void>;\n\n    /**\n     * @returns The number of workflow experiences in this bundle.\n     */\n    getWorkflowExperienceCount(): number;\n\n    /**\n     * Add a stakeholder to this bundle. If the stakeholder already exists, it will be updated. Write access to the bundle is required.\n     * @param customerDetails The details of the customer to add. The emailAddress field is required.\n     * @param stakeholderType The type of stakeholder to add. Defaults to Owner.\n     */\n    addStakeholder(customerDetails: CustomerDetailsInput, stakeholderType?: StakeholderType): Promise<void>;\n\n    /**\n     * Removes a stakeholder from this bundle. Write access to the bundle is required.\n     * @param emailAddress The email address of the stakeholder to remove.\n     */\n    removeStakeholder(emailAddress: string): Promise<void>;\n\n    /**\n     * Updates all stakeholders associated with this bundle. Write access to the bundle is required.\n     * @param stakeholders An array of stakeholders to update. Unknown stakeholders will be added, and absent stakeholders will be removed.\n     */\n    updateStakeholders(stakeholders: BundleStakeholderInput[]): Promise<void>;\n\n    /**\n     * Retrieves all stakeholders associated with this bundle.\n     */\n    getAllStakeholders(): Promise<BundleStakeholder[]>;\n\n    /**\n     * Retrieves the current stakeholder for this bundle. This is the stakeholder that has write access to the bundle.\n     * If no stakeholder has write access, this will return undefined.\n     * @returns A promise that resolves with the current stakeholder, or undefined if no stakeholder has write access.\n     */\n    getCurrentStakeholder(): Promise<BundleStakeholder | undefined>;\n\n    /**\n     * Finalizes all experiences within the bundle. This will return a promise that resolves when all experiences have been finalized.\n     * The promise resolves with a list of messages that indicate the status of each experience including\n     * helpful details like what product to add to cart on supported e-commerce platforms.\n     * @param onProgressUpdate A callback that will be called when the progress of the finalization changes.\n     * @param createPreviewImage A callback that will be called when a preview image is required. This is used to generate a preview image for the design.\n     * If this callback is not provided, no preview image will be generated.\n     * @returns {BundleDesignCreationMessage} An object containing an array of design messages, along with the Bundle's Id and the event type.\n     */\n    finish(\n        onProgressUpdate?: DesignCreationProgressUpdate,\n        createPreviewImage?: (\n            workflowExperience: WorkflowExperience,\n            shouldRender3D?: boolean,\n        ) => Promise<string | undefined>,\n    ): Promise<BundleDesignCreationMessage>;\n\n    /**\n     * A convenience function allowing you to place an order with all the items in the bundle.\n     */\n    placeOrder(): Promise<Order>;\n\n    /**\n     * Add an event listener to this bundle.\n     * @param event The event to listen for.\n     * @param listener The listener to call when the event occurs.\n     */\n    addEventListener<K extends keyof BundleEventMap>(event: K, listener: (event: BundleEvent<K>) => void): void;\n\n    /**\n     * Remove a previously added event listener from this bundle.\n     */\n    removeEventListener<K extends keyof BundleEventMap>(event: K, listener: (event: BundleEvent<K>) => void): void;\n\n    /**\n     * Retrieves the current preview service for this bundle, if one exists.\n     * If a preview service was specified when calling client.getExistingBundle, this will return that service.\n     * Call `setPreviewService` to update the preview service for this bundle.\n     */\n    getPreviewService(): ThreeDPreviewService | undefined;\n\n    /**\n     * Set the preview service for this bundle. This will update the preview service for all workflow experiences in this bundle, and will\n     * also automatically inject the preview service into any new workflow experiences that are added to this bundle.\n     * If this method is called with no arguments or undefined, the preview service will be removed from this bundle.\n     * @param previewService The preview service to use for this bundle.\n     * @returns A promise that resolves when the preview service has been updated for all workflow experiences in this bundle.\n     */\n    setPreviewService(previewService?: ThreeDPreviewService): Promise<void>;\n\n    /**\n     * Returns a promise that resolves when the bundle has been initialized.\n     * This will resolve immediately if the bundle has no experiences, or if the bundle has already been initialized.\n     */\n    getInitializationPromise(): Promise<void>;\n\n    /**\n     * @returns The raw Global Property Configuration that is in use, otherwise `undefined`.\n     */\n    getGlobalPropertyConfiguration(): GlobalPropertyConfiguration | undefined;\n\n    setBundleOptions(bundleOptions?: BundleOptions);\n\n    /**\n     * Assigns a Product Collection to the Bundle. This will only succeed if the Bundle does not already have a Product Collection assigned to it.\n     * @param productCollectionId The ID of the Product Collection to assign to this Bundle.\n     */\n    assignProductCollection(productCollectionId: string): Promise<void>;\n\n    getShareActions(): undefined | ShareAction[];\n\n    getWorkflowViewerLink(): string;\n\n    getWorkflowViewerAmendLink(): string;\n\n    approve(note?: string, stakeholderId?: string): Promise<void>;\n\n    reject(note?: string, stakeholderId?: string): Promise<void>;\n\n    attachAddress(\n        streetAddress?: string,\n        apartment?: string,\n        city?: string,\n        country?: string,\n        state?: string,\n        postCode?: string,\n    ): Promise<void>;\n\n    attachOrganization(name: string): Promise<void>;\n\n    generateQuoteId(): Promise<string>;\n\n    getQuoteCompleteMessage(): CompleteQuoteMessage;\n\n    applyGlobalPropertyState(state: GlobalPropertyState): Promise<void>;\n\n    getProductIds(): undefined | string[];\n\n    addProductId(id: string): Promise<void>;\n\n    removeProductIds(ids: string[]): Promise<void>;\n}\n\nexport class BundleImpl implements Bundle {\n    readonly client: SpiffCommerceClient;\n\n    private readonly id: string;\n    private name: string;\n    private dispatchDate?: string;\n    private purchaseOrder?: string;\n    private quoteId?: string;\n    private metadata: ReadonlyMap<string, string>;\n    private completed: boolean;\n    private template: boolean;\n    private productCollection?: ProductCollectionResource;\n\n    private readonly bundleStateManager: BundleStateManager;\n    private readonly globalPropertyStateManager: GlobalPropertyStateManager;\n    private readonly globalPropertyHandleService: GlobalPropertyHandleService;\n    private readonly initializationPromise: Promise<any>;\n    private readonly ownerId?: string;\n    private readonly shareActions?: ShareAction[];\n    private readonly workflowViewerLink: string;\n    private readonly workflowViewerAmendLink: string;\n\n    private globalConfigurationPropertyId?: string;\n\n    private workflowExperiences: WorkflowExperience[] = [];\n    private previewService?: ThreeDPreviewService;\n\n    private eventEmitter = new EventEmitter<BundleEventMap>();\n\n    private updatesLocked = false;\n\n    constructor(\n        client: SpiffCommerceClient,\n        entity: BundleEntity,\n        previewService?: ThreeDPreviewService,\n        graphqlOptions?: GetWorkflowGraphqlOptions,\n        ownerId?: string,\n        bundleOptions?: BundleOptions,\n        transactionLoadProgressCallback?: (loaded: number, total: number) => void,\n    ) {\n        this.client = client;\n        this.id = entity.id!;\n        this.name = entity.name || \"\";\n        this.dispatchDate = entity.dispatchDate;\n        this.template = entity.template || false;\n        this.quoteId = entity.quoteId;\n        this.shareActions = entity.bundleShareActions;\n        this.workflowViewerLink = entity.workflowViewerLink;\n        this.workflowViewerAmendLink = entity.workflowViewerAmendLink;\n        this.ownerId = ownerId;\n        this.metadata = new Map(entity.metadata?.map((m) => [m.key, m.value]) || []);\n        this.completed = entity.completed ?? false;\n        this.productCollection = entity.productCollection;\n        this.bundleStateManager = new BundleStateManager(entity.bundleStateData);\n        const defaultGlobalPropertyConfiguration = this.productCollection?.globalPropertyConfiguration;\n        this.globalConfigurationPropertyId = defaultGlobalPropertyConfiguration?.id;\n        this.globalPropertyStateManager = new GlobalPropertyStateManagerImpl(\n            this.id,\n            this.ownerId,\n            defaultGlobalPropertyConfiguration,\n            this.onGlobalPropertiesChanged.bind(this),\n            bundleOptions,\n        );\n        this.globalPropertyHandleService = new GlobalPropertyHandleService(this);\n        this.setPreviewService(previewService);\n\n        this.initializationPromise = (async () => {\n            if (!bundleOptions?.readonly) {\n                // Replace deprecated integrationProductIds from state with their actual product ids\n                const state = this.bundleStateManager.getState();\n                if (state.integrationProductIds && state.integrationProductIds.length > 0) {\n                    // Using this instead of the function from client.ts so we can throw any errors and avoid wiping the bundle info if something broke.\n                    const resp = await graphQlManager\n                        .getShadowGraphqlClient()\n                        .query<{ integrationProducts?: IntegrationProductResource[] }>({\n                            query: readIntegrationProductsQuery,\n                            variables: {\n                                ids: state.integrationProductIds,\n                            },\n                            errorPolicy: \"all\",\n                            fetchPolicy: \"no-cache\",\n                        });\n                    if (resp.errors) {\n                        throw new Error(`Failed to fetch integration products for Bundle ${entity.id!}`);\n                    }\n                    const productIds = resp.data.integrationProducts\n                        ?.filter((ip) => !!ip.product?.id && state.integrationProductIds!.includes(ip.id))\n                        .map((ip) => ip.product!.id);\n                    state.integrationProductIds = [];\n                    // de-dup\n                    state.productIds = Array.from(new Set([...(state.productIds || []), ...(productIds || [])]));\n\n                    // Update on server\n                    const stateString = JSON.stringify(state);\n                    this.bundleStateManager.setState(stateString);\n                    await graphQlManager.getShadowGraphqlClient().mutate({\n                        mutation: updateBundleMutation,\n                        variables: {\n                            id: this.id,\n                            bundleStateData: stateString,\n                        },\n                        context: {\n                            bundleOwnerId: ownerId,\n                        },\n                    });\n                }\n            }\n\n            return Promise.all([\n                this.loadExistingWorkflowExperiences(\n                    entity.transactionIds || [],\n                    {\n                        ...graphqlOptions,\n                        bundleOwnerId: ownerId,\n                    },\n                    transactionLoadProgressCallback,\n                ),\n                this.globalPropertyStateManager.getInitializationPromise(),\n            ]).then(\n                () =>\n                    new Promise<void[]>((resolve, reject) => {\n                        if (bundleOptions?.readonly) {\n                            resolve([]);\n                            return;\n                        }\n                        console.log(`Setting default global variants.`);\n                        this.initializeUninitializedHandles().then(resolve).catch(reject);\n                    }),\n            );\n        })();\n        this.initializationPromise.catch((e) => {\n            console.error(`Bundle initialization failed: ${e}`);\n        });\n        this.initializationPromise.then(() => {\n            this.getGlobalProperties().then((handles) => this.checkMandatoryHandlesChanged(undefined, handles));\n        });\n    }\n\n    async initializeUninitializedHandles(): Promise<void[]> {\n        const state = this.globalPropertyStateManager.getGlobalPropertyState();\n        if (!state) {\n            console.log(`Attempted to set global default variant before state was initialized.`);\n            return [];\n        }\n        const handles = await this.globalPropertyHandleService.getHandles();\n        const promises = handles.map(async (handle) => {\n            if (handle.getType() === AspectType.ColorOption || handle.getType() === AspectType.Option) {\n                const h = handle as OptionGlobalPropertyHandle;\n                const aspect = state.aspects.find((a) => a.name === h.getName());\n                if (!aspect) {\n                    try {\n                        // Only init aspects that aren't already set.\n                        return await h.initDefaultVariant();\n                    } catch (e) {\n                        // FIXME: It appears that some layout elements aren't immediately available on reload\n                        console.error(`Failed to initialize default global variant - ${e}`);\n                    }\n                }\n            }\n        });\n        return Promise.all(promises);\n    }\n\n    getProductIds(): undefined | string[] {\n        return this.bundleStateManager.getState()?.productIds;\n    }\n\n    async addProductId(id: string): Promise<void> {\n        const state = this.bundleStateManager.getState();\n        if (state) {\n            if (!state.productIds) {\n                state.productIds = [];\n            } else if (state.productIds.some((it) => it === id)) {\n                // No need to send a network request or update state.\n                // Still fire event to maintain existing behaviour\n                this.fireEvent(\"bundle-products-added\", {\n                    productIds: state.productIds,\n                    added: [],\n                });\n                return;\n            }\n            state.productIds = [...state.productIds, id];\n            const stateString = JSON.stringify(state);\n            this.bundleStateManager.setState(stateString);\n            this.fireEvent(\"bundle-products-added\", {\n                productIds: state.productIds,\n                added: [id],\n            });\n            await graphQlManager.getShadowGraphqlClient().mutate({\n                mutation: updateBundleMutation,\n                variables: {\n                    id: this.id,\n                    bundleStateData: stateString,\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n        }\n    }\n\n    async removeProductIds(ids: string[]) {\n        const state = this.bundleStateManager.getState();\n        if (state) {\n            const idsToRemove = ids.filter((id) => (state.productIds ?? []).includes(id));\n            if (idsToRemove.length === 0) {\n                return;\n            }\n            state.productIds = (state.productIds ?? []).filter((it) => !idsToRemove.includes(it));\n            const stateString = JSON.stringify(state);\n            this.bundleStateManager.setState(stateString);\n            this.fireEvent(\"bundle-products-removed\", {\n                productIds: state.productIds,\n                removed: idsToRemove, // Technically might not include all of these, but that's not important.\n            });\n            await graphQlManager.getShadowGraphqlClient().mutate({\n                mutation: updateBundleMutation,\n                variables: {\n                    id: this.id,\n                    bundleStateData: stateString,\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n        }\n    }\n\n    getTemplate(): boolean {\n        return this.template;\n    }\n\n    async generateQuoteId(): Promise<string> {\n        const result = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleGenerateQuoteId: BundleEntity }>({\n            mutation: generateQuoteIdMutation,\n            variables: {\n                id: this.id,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        const quoteId = result.data?.bundleGenerateQuoteId?.quoteId;\n        this.quoteId = quoteId;\n        return quoteId || \"\";\n    }\n\n    async attachAddress(\n        streetAddress?: string,\n        apartment?: string,\n        city?: string,\n        country?: string,\n        state?: string,\n        postCode?: string,\n    ): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: addAddressToBundleMutation,\n            variables: {\n                bundleId: this.id,\n                streetAddress: streetAddress || undefined,\n                apartment: apartment || undefined,\n                city: city || undefined,\n                country: country || undefined,\n                state: state || undefined,\n                postCode: postCode || undefined,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n    }\n\n    async attachOrganization(name: string): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: addOrganizationToBundleMutation,\n            variables: {\n                bundleId: this.id,\n                organizationName: name,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n    }\n\n    setBundleOptions(bundleOptions?: BundleOptions) {\n        this.globalPropertyStateManager.setBundleOptions(bundleOptions);\n    }\n\n    getInitializationPromise(): Promise<void> {\n        return this.initializationPromise;\n    }\n\n    addEventListener<K extends keyof BundleEventMap>(event: K, listener: (event: BundleEvent<K>) => void): void {\n        this.eventEmitter.on(event, listener);\n    }\n\n    removeEventListener<K extends keyof BundleEventMap>(event: K, listener: (event: BundleEvent<K>) => void): void {\n        this.eventEmitter.off(event, listener);\n    }\n\n    getClient() {\n        return this.client;\n    }\n\n    getId() {\n        return this.id;\n    }\n\n    getName(): string {\n        return this.name;\n    }\n\n    getQuoteId(): string | undefined {\n        return this.quoteId;\n    }\n\n    setName(name: string): Promise<void> {\n        this.name = name;\n        return this.updateBundle();\n    }\n\n    getDispatchDate(): string | undefined {\n        return this.dispatchDate;\n    }\n\n    setDispatchDate(dd: string): Promise<void> {\n        this.dispatchDate = dd;\n        return this.updateBundle();\n    }\n\n    getPurchaseOrder(): string | undefined {\n        return this.purchaseOrder;\n    }\n\n    setPurchaseOrder(po: string): Promise<void> {\n        this.purchaseOrder = po;\n        return this.updateBundle();\n    }\n\n    getMetadata(): Map<string, string> {\n        return new Map(this.metadata);\n    }\n\n    setMetadata(metadata: Map<string, string>): Promise<void> {\n        this.metadata = new Map(metadata);\n        return this.updateBundle();\n    }\n\n    setNameAndMetadata(name: string, metadata: Map<string, string>): Promise<void> {\n        this.name = name;\n        this.metadata = new Map(metadata);\n        return this.updateBundle();\n    }\n\n    hasGlobalProperties(): boolean {\n        // For now we just check if this bundle is linked to a product collection that has global properties.\n        // In the future there could be other ways of providing global properties.\n        return !!this.productCollection?.globalPropertyConfiguration;\n    }\n\n    getGlobalPropertyConfiguration() {\n        return this.productCollection?.globalPropertyConfiguration;\n    }\n\n    async getGlobalProperties(): Promise<GlobalPropertyHandle[]> {\n        return this.globalPropertyHandleService.applyConditionsFromState(\n            await this.globalPropertyHandleService.getHandles(),\n            this.getGlobalPropertyStateManager().getGlobalPropertyState(),\n        );\n    }\n\n    async applyGlobalPropertyState(state: GlobalPropertyState): Promise<void> {\n        this.updatesLocked = true;\n        const handles = await this.globalPropertyHandleService.getHandles();\n        try {\n            // First we have to ensure that the aspects have been set,\n            // because the rest of the logic relies on it.\n            for (const aspect of state.aspects) {\n                const name = aspect?.name;\n                await this.getGlobalPropertyStateManager().setAspect(\n                    name,\n                    aspect.value,\n                    undefined,\n                    undefined,\n                    aspect.hidden,\n                );\n            }\n\n            // Then we do the general work.\n            for (const aspect of state.aspects) {\n                const name = aspect?.name;\n                const handle = handles.find((h) => h.getName() === name);\n                if (handle) {\n                    switch (aspect.type) {\n                        case AspectType.FileUpload: {\n                            const fileHandle = handle as FileUploadGlobalPropertyHandle;\n                            const assets = await getAssets([aspect.value]);\n                            if (assets.length > 0) {\n                                await fileHandle.selectImage(assets[0]);\n                            }\n                            const colors = (aspect.storage as GlobalPropertyStateFileUploadStorage | undefined)?.colors;\n                            if (colors) {\n                                const colorMap = Object.fromEntries(\n                                    colors.map((it) => [\n                                        it.key,\n                                        { browserValue: it.browserValue, pmsValue: it.pmsValue },\n                                    ]) ?? [],\n                                );\n                                await fileHandle.changeColors(colorMap);\n                            }\n                            break;\n                        }\n                        case AspectType.ColorOption: {\n                            const colorHandle = handle as ColorOptionGlobalPropertyHandle;\n                            const variants = await colorHandle.getAllVariants();\n                            const variant = variants.find((v) => v.getId() === aspect.value);\n                            const storage = aspect.storage\n                                ? (aspect.storage as GlobalPropertyStateColorOptionStorage)\n                                : undefined;\n                            if (variant) {\n                                await colorHandle.selectVariant(variant);\n                            }\n                            if (storage?.customColor) {\n                                colorHandle.setCustomColor(storage.customColor);\n                            }\n                            break;\n                        }\n                        case AspectType.Option: {\n                            const optionHandle = handle as OptionGlobalPropertyHandle;\n                            const variants = await optionHandle.getAllVariants();\n                            const variant = variants.find((v) => v.getId() === aspect.value);\n                            if (variant) {\n                                await optionHandle.selectVariant(variant);\n                            }\n                            break;\n                        }\n                        case AspectType.Text: {\n                            const textHandle = handle as TextGlobalPropertyHandle;\n                            await textHandle.setText(aspect.value);\n                            break;\n                        }\n                    }\n                }\n            }\n        } finally {\n            this.updatesLocked = false;\n            // Fire off any relevant events\n            this.onGlobalPropertiesChanged(undefined, this.globalPropertyStateManager.getGlobalPropertyState()!);\n        }\n    }\n\n    getGlobalPropertyStateManager(): GlobalPropertyStateManager {\n        return this.globalPropertyStateManager;\n    }\n\n    async getGlobalPropertyTotalSubunits(): Promise<number> {\n        const handles = await this.globalPropertyHandleService.getHandles();\n        const options = handles.filter((h) => h.getType() === AspectType.Option) as OptionGlobalPropertyHandle[];\n        return options.map((o) => o.getCurrentVariant()?.getPrice() || 0).reduce((partialSum, a) => partialSum + a, 0);\n    }\n\n    getTotalSubunits() {\n        return this.workflowExperiences.map((we) => we.getTotalPriceSubunits()).reduce((a, b) => a + b, 0);\n    }\n\n    getProductCollection(): ProductCollection | undefined {\n        return this.productCollection ? new ProductCollection(this.productCollection) : undefined;\n    }\n\n    private async initializeAdditionalRequiredColorChannels(experience: WorkflowExperience) {\n        // If the experience corresponds to a global illustration we check whether the\n        // experience we're adding has more channels than have been initialized.\n        for (const step of experience.getStepsByType(StepType.Illustration)) {\n            const aspectNames = step.getGlobalPropertyAspects(this.globalConfigurationPropertyId || \"\");\n            for (const aspectName of aspectNames) {\n                const matchingAspect = this.getGlobalPropertyConfiguration()?.aspects.find(\n                    (a) => a.name === aspectName,\n                );\n                if (matchingAspect && matchingAspect.type === AspectType.ColorOption) {\n                    const asset = step.getCurrentVariant()?.getAssetResource();\n                    const channelNumbers = asset?.assetConfiguration?.channelNumbers || [];\n                    const defaultColors = asset?.assetConfiguration?.defaultColorVariants || [];\n                    const amtChannelsInitialized = amtChannelsForAspect(this, aspectName);\n                    const uniqueChannelNumbers = [...new Set(channelNumbers.map((cn) => cn.number))];\n                    const amtChannelsInExperience = uniqueChannelNumbers.length;\n                    if (amtChannelsInExperience > amtChannelsInitialized) {\n                        for (const channelNumber of uniqueChannelNumbers) {\n                            const manager = this.getGlobalPropertyStateManager();\n                            const dc = defaultColors.find((dc) => dc.channelNumber === channelNumber);\n                            if (dc) {\n                                await manager.setAspect(aspectName, dc.variant.id || \"\", undefined, dc.channelNumber);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    async addWorkflowExperience(experience: WorkflowExperience) {\n        await this.initializeAdditionalRequiredColorChannels(experience);\n\n        // Append the experience to the bundle.\n        experience.setBundle(this);\n        await this.appendWorkflowExperience(experience);\n        // If a preview is attached to the bundle inject it into that.\n        await this.injectExperienceIntoPreviewService(experience);\n        // Ensure the experience is loaded to prevent timing issues with global property application.\n        await experience.getWorkflowManager().getInitializationPromise();\n\n        // Apply global state if required.\n        const globalProperties = await this.getGlobalProperties();\n        for (const p of globalProperties) {\n            await p.applyGlobalState([experience]);\n        }\n\n        this.fireEvent(\"workflow-experience-added\", {\n            workflowExperiences: [experience],\n        });\n    }\n\n    async addWorkflowExperiences(experiences: WorkflowExperience[]) {\n        for (const experience of experiences) {\n            await this.initializeAdditionalRequiredColorChannels(experience);\n        }\n\n        const transactionIds = experiences.map((experience) => experience.getTransaction().id);\n        const existing = transactionIds.map((transactionId) =>\n            this.workflowExperiences.find((exp) => exp.getTransaction().id === transactionId),\n        );\n        if (existing.some((e) => !!e))\n            throw new Error(\n                \"Unable to add transaction to bundle - Already Exists: \" +\n                    existing\n                        .filter((e) => !!e)\n                        .map((e) => e?.getTransaction().id)\n                        .join(\", \"),\n            );\n        // Use the owner ID from the persistence service if it exists. Otherwise the client will fall back to other methods.\n        const ownerMap = persistenceService.getMap(\"transactionOwnerIds\") || new Map();\n        const existingOwnerIds = transactionIds.map((transactionId) => ownerMap.get(transactionId));\n        await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate({\n                mutation: bundleAddTransactionsMutation,\n                variables: {\n                    id: this.id,\n                    transactionIds: transactionIds,\n                    transactionOwnerIds: existingOwnerIds,\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            })\n            .catch((e) => {\n                console.error(e);\n            });\n        this.workflowExperiences.push(...experiences);\n\n        const initializeExperience = async () => {\n            for (const experience of experiences) {\n                experience.setBundle(this);\n                await this.injectExperienceIntoPreviewService(experience);\n            }\n            await Promise.all(experiences.map((exp) => exp.getWorkflowManager().getInitializationPromise()));\n            const globalProperties = await this.getGlobalProperties();\n            for (const p of globalProperties) {\n                await p.applyGlobalState(experiences);\n            }\n        };\n\n        await Promise.all([this.updateTransactionOrder(), initializeExperience()]);\n        await this.initializeUninitializedHandles();\n        // Check changes after adding all (experiences rely on checking each other)\n        this.workflowExperiences.forEach((experience) => experience.checkForPriceBreakChanges());\n\n        this.fireEvent(\"workflow-experience-added\", {\n            workflowExperiences: this.workflowExperiences,\n        });\n    }\n\n    private async appendWorkflowExperience(experience: WorkflowExperience, updateArray = true) {\n        const transactionId = experience.getTransaction().id;\n        const existing = this.workflowExperiences.find((exp) => exp.getTransaction().id === transactionId);\n        if (existing) throw new Error(\"Unable to add transaction to bundle - Already Exists!\");\n        // Use the owner ID from the persistence service if it exists. Otherwise the client will fall back to other methods.\n        const ownerMap = persistenceService.getMap(\"transactionOwnerIds\") || new Map();\n        const existingOwnerId = ownerMap.get(transactionId);\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: bundleAddTransactionMutation,\n            variables: {\n                id: this.id,\n                transactionId: transactionId,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n                transactionOwnerId: existingOwnerId,\n            },\n        });\n        if (updateArray) {\n            this.workflowExperiences.push(experience);\n            this.workflowExperiences.forEach((experience) => experience.checkForPriceBreakChanges());\n        }\n    }\n\n    async removeWorkflowExperience(experience: WorkflowExperience) {\n        const index = this.workflowExperiences.indexOf(experience);\n        await this.removeTransaction(index, this.workflowExperiences[index].getTransaction());\n        this.fireEvent(\"workflow-experience-added\", {\n            workflowExperiences: [experience],\n        });\n    }\n\n    async removeWorkflowExperiences(experiences: WorkflowExperience[]) {\n        await this.removeTransactions(experiences.map((exp) => exp.getTransaction()));\n    }\n\n    async removeWorkflowExperienceByTransaction(transaction: Transaction) {\n        const index = this.workflowExperiences.findIndex((we) => we.getTransaction().id === transaction.id);\n        await this.removeTransaction(index, transaction);\n    }\n\n    async removeWorkflowExperiencesByTransactions(transactions: Transaction[]) {\n        await this.removeTransactions(transactions);\n    }\n\n    private async removeTransaction(index: number, transaction: Transaction, updateArray = true) {\n        if (index > -1) {\n            const removed = this.workflowExperiences.find((we) => we.getTransaction().id === transaction.id)!;\n            removed.setBundle(undefined);\n            if (this.previewService) {\n                removed.getWorkflowManager().ejectFromPreviewService();\n            }\n            this.bundleStateManager.removeStateForTransaction(transaction.id);\n            await graphQlManager.getShadowGraphqlClient().mutate({\n                mutation: bundleRemoveTransactionMutation,\n                variables: {\n                    id: this.id,\n                    transactionId: transaction.id,\n                    name: this.name,\n                    metadata: Array.from(this.metadata.entries()).map(([key, value]) => ({ key, value })),\n                    bundleStateData: this.bundleStateManager.getSerializedState(),\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n            if (updateArray) {\n                const removedExp = this.workflowExperiences.splice(index, 1);\n                this.workflowExperiences.forEach((experience) => experience.checkForPriceBreakChanges());\n                removed.checkForPriceBreakChanges();\n                await this.updateTransactionOrder();\n                this.fireEvent(\"workflow-experience-removed\", {\n                    workflowExperiences: removedExp,\n                });\n            }\n        } else {\n            throw new Error(\"Unable to remove workflow experience from bundle - Not Found! - \" + transaction.id);\n        }\n    }\n\n    private async removeTransactions(transactions: Transaction[]) {\n        const indices = transactions.map((transaction) =>\n            this.workflowExperiences.findIndex((we) => we.getTransaction().id === transaction.id),\n        );\n        if (indices.some((index) => index === -1)) {\n            throw new Error(\n                \"Unable to remove workflow experience from bundle - The following aren't included in the bundle: \" +\n                    transactions\n                        .filter((_, i) => indices[i] === -1)\n                        .map((t) => t.id)\n                        .join(\", \"),\n            );\n        }\n        const removedExperiences = transactions.map(\n            (t) =>\n                this.workflowExperiences.splice(\n                    this.workflowExperiences.findIndex((we) => we.getTransaction().id === t.id),\n                    1,\n                )[0],\n        );\n        removedExperiences.forEach((experience) => experience.setBundle(undefined));\n        [...this.workflowExperiences, ...removedExperiences].forEach((experience) =>\n            experience.checkForPriceBreakChanges(),\n        );\n        if (this.previewService) {\n            removedExperiences.forEach((experience) => experience.getWorkflowManager().ejectFromPreviewService());\n        }\n        transactions.forEach((transaction) => this.bundleStateManager.removeStateForTransaction(transaction.id));\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: bundleRemoveTransactionsMutation,\n            variables: {\n                id: this.id,\n                transactionIds: transactions.map((t) => t.id),\n                name: this.name,\n                metadata: Array.from(this.metadata.entries()).map(([key, value]) => ({ key, value })),\n                bundleStateData: this.bundleStateManager.getSerializedState(),\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        this.fireEvent(\"workflow-experience-removed\", {\n            workflowExperiences: removedExperiences,\n        });\n        await this.updateTransactionOrder();\n    }\n\n    async insertWorkflowExperience(experience: WorkflowExperience, index: number): Promise<void> {\n        await this.appendWorkflowExperience(experience, false);\n        this.workflowExperiences.splice(index, 0, experience);\n        await Promise.all([\n            this.updateTransactionOrder(),\n            (async () => {\n                await this.injectExperienceIntoPreviewService(experience);\n                const globalProperties = await this.getGlobalProperties();\n                await Promise.all(globalProperties.map((p) => p.applyGlobalState([experience])));\n            })(),\n        ]);\n    }\n\n    async replaceWorkflowExperience(index: number, experience: WorkflowExperience): Promise<void> {\n        if (index < 0 || index >= this.workflowExperiences.length) {\n            throw new Error(\"Unable to replace workflow experience in bundle - Index out of range!\");\n        }\n        const oldExperience = this.workflowExperiences[index];\n        if (oldExperience.getTransaction().id === experience.getTransaction().id) {\n            throw new Error(\"Unable to replace workflow experience in bundle - Same transaction!\");\n        }\n        await Promise.all([\n            this.removeTransaction(index, oldExperience.getTransaction(), false),\n            this.appendWorkflowExperience(experience, false),\n        ]);\n        this.workflowExperiences[index] = experience;\n        await Promise.all([\n            this.updateTransactionOrder(),\n            (async () => {\n                await this.injectExperienceIntoPreviewService(experience);\n                const globalProperties = await this.getGlobalProperties();\n                await Promise.all(globalProperties.map((p) => p.applyGlobalState([experience])));\n            })(),\n        ]);\n    }\n\n    async swapWorkflowExperiences(a: number, b: number): Promise<void> {\n        if (a < 0 || a >= this.workflowExperiences.length || b < 0 || b >= this.workflowExperiences.length) {\n            throw new Error(\"Unable to swap workflow experiences in bundle - Index out of range!\");\n        }\n        if (a === b) return;\n        const temp = this.workflowExperiences[a];\n        this.workflowExperiences[a] = this.workflowExperiences[b];\n        this.workflowExperiences[b] = temp;\n        await this.updateTransactionOrder();\n    }\n\n    getWorkflowExperiences() {\n        return [...this.workflowExperiences];\n    }\n\n    async sortWorkflowExperiences(\n        sortFunc: (expA: WorkflowExperience, expB: WorkflowExperience) => number,\n    ): Promise<void> {\n        this.workflowExperiences = this.workflowExperiences.sort(sortFunc);\n        await this.updateTransactionOrder();\n    }\n\n    getWorkflowExperienceCount(): number {\n        return this.workflowExperiences.length;\n    }\n\n    async addStakeholder(customerDetails: CustomerDetailsInput, stakeholderType?: StakeholderType): Promise<void> {\n        const response = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleAddStakeholder: BundleEntity }>({\n            mutation: bundleAddStakeholderMutation,\n            variables: {\n                id: this.id,\n                details: customerDetails,\n                type: stakeholderType || StakeholderType.Owner,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        if (!response.data?.bundleAddStakeholder) throw new Error(\"Bundle not found!\");\n        const stakeholders = response.data.bundleAddStakeholder.bundleStakeholders || [];\n        this.storeStakeholderCustomers(stakeholders);\n    }\n\n    async removeStakeholder(emailAddress: string): Promise<void> {\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ bundleRemoveStakeholder: BundleEntity }>({\n                mutation: bundleRemoveStakeholderMutation,\n                variables: {\n                    id: this.id,\n                    emailAddress,\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n        if (!response.data?.bundleRemoveStakeholder) throw new Error(\"Bundle not found!\");\n    }\n\n    async updateStakeholders(stakeholders: BundleStakeholderInput[]): Promise<void> {\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ bundleUpdateStakeholders: BundleEntity }>({\n                mutation: bundleUpdateStakeholdersMutation,\n                variables: {\n                    id: this.id,\n                    input: stakeholders,\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n        if (!response.data?.bundleUpdateStakeholders) throw new Error(\"Bundle not found!\");\n        const updatedStakeholders = response.data.bundleUpdateStakeholders.bundleStakeholders || [];\n        this.storeStakeholderCustomers(updatedStakeholders);\n    }\n\n    async getAllStakeholders(): Promise<BundleStakeholder[]> {\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ bundles: BundleEntity[] }>({\n            query: getBundleStakeholdersQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.id,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        if (!response.data.bundles || response.data.bundles.length === 0) throw new Error(\"Bundle not found!\");\n        const stakeholders = response.data.bundles[0].bundleStakeholders || [];\n        this.storeStakeholderCustomers(stakeholders);\n        return stakeholders;\n    }\n\n    async getCurrentStakeholder(): Promise<BundleStakeholder | undefined> {\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ bundles: BundleEntity[] }>({\n            query: getBundleStakeholdersQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.id,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        if (!response.data.bundles || response.data.bundles.length === 0) throw new Error(\"Bundle not found!\");\n        const bundle = response.data.bundles[0];\n        return bundle.currentBundleStakeholder;\n    }\n\n    private storeStakeholderCustomers(stakeholders: BundleStakeholder[]) {\n        stakeholders.forEach((stakeholder) => {\n            if (stakeholder.customer) {\n                this.client.storeCustomer(stakeholder.customer);\n            }\n        });\n    }\n\n    async finish(\n        onProgressUpdate?: DesignCreationProgressUpdate,\n        createPreviewImage?: (\n            workflowExperience: WorkflowExperience,\n            shouldRender3D?: boolean,\n        ) => Promise<string | undefined>,\n    ): Promise<BundleDesignCreationMessage> {\n        // Flush any changes beforehand\n        if (this.completed) {\n            await graphQlManager.getShadowGraphqlClient().mutate({\n                mutation: finalizeUpdateBundleMutation,\n                variables: {\n                    bundleId: this.id,\n                },\n            });\n        }\n        // Compute the results\n        const results = await createDesigns(\n            this.workflowExperiences.map((exp) => {\n                const workflow = exp.getWorkflow();\n                if (!workflow) throw new Error(\"Unable to create designs - Workflow not found!\");\n                const product = exp.getProduct();\n                if (!product) throw new Error(\"Unable to create designs - Product not found!\");\n                return {\n                    workflowManager: exp.getWorkflowManager(),\n                    workflow: workflow,\n                    layouts: exp.getWorkflowManager().getLayouts(),\n                    getReducerState: () => exp.getCommandContext().getState()!,\n                    product: product,\n                    transaction: exp.getTransaction(),\n                    workflowSelections: exp.getWorkflowManager().getWorkflowSelections(),\n                    designName: workflow.name,\n                    workflowMetadata: exp.getWorkflowManager().getWorkflowMetadata(),\n                };\n            }),\n            createPreviewImage\n                ? (shouldRender3D?: boolean, transactionId?: string) => {\n                      const experience = this.workflowExperiences.find(\n                          (exp) => exp.getTransaction().id === transactionId,\n                      );\n                      if (!experience) {\n                          console.warn(\n                              \"SpiffCommerce - Bundle create design - Unable to find experience for transaction: \" +\n                                  transactionId,\n                          );\n                          return Promise.resolve(undefined);\n                      }\n                      return createPreviewImage(experience, shouldRender3D);\n                  }\n                : undefined,\n        );\n        return {\n            bundleId: this.id,\n            name: this.getName(),\n            dispatchDate: this.getDispatchDate() || \"\",\n            purchaseOrder: this.getPurchaseOrder() || \"\",\n            collectionId: this.getProductCollection()?.getId() || \"\",\n            collectionName: this.getProductCollection()?.getName() || \"\",\n            items: results,\n            bundleOwnerId: this.ownerId,\n        };\n    }\n\n    async placeOrder(): Promise<Order> {\n        const orderItems = this.workflowExperiences.map((exp) => {\n            return {\n                transactionId: exp.getTransaction().id,\n                amountToOrder: exp.getTransaction().quantity || 1,\n            };\n        });\n        return await this.getClient().placeOrder(orderItems);\n    }\n\n    getPreviewService() {\n        return this.previewService;\n    }\n\n    async setPreviewService(previewService?: ThreeDPreviewService): Promise<void> {\n        if (this.workflowExperiences && this.workflowExperiences.length > 0) {\n            this.workflowExperiences.forEach((exp) => exp.getWorkflowManager().ejectFromPreviewService());\n            if (previewService) {\n                // Sequentially inject each experience into the preview service, for performance reasons.\n                for (const experience of this.workflowExperiences) {\n                    await this.injectExperienceIntoPreviewService(experience);\n                }\n            }\n        }\n        if (previewService && previewService.registerModelLoadEventListener) {\n            previewService.registerModelLoadEventListener(this.onModelLoadEvent.bind(this));\n        }\n        if (\n            this.previewService &&\n            this.previewService !== previewService &&\n            this.previewService.unregisterModelLoadEventListener\n        ) {\n            this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this));\n        }\n        this.previewService = previewService;\n    }\n\n    async assignGlobalPropertyConfiguration(globalPropertyConfigurationId: string) {\n        await graphQlManager.getShadowGraphqlClient().mutate<{ bundleAssignProductCollection: BundleEntity }>({\n            mutation: bundleAssignGlobalPropertyConfiguration,\n            variables: {\n                bundleId: this.id,\n                globalPropertyConfigurationId,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        this.globalConfigurationPropertyId = globalPropertyConfigurationId;\n    }\n\n    async assignProductCollection(productCollectionId: string) {\n        const response = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ bundleAssignProductCollection: BundleEntity }>({\n                mutation: bundleAssignProductCollectionMutation(\n                    this.globalPropertyStateManager.getBundleOptions()?.eagerFetchProducts ?? false,\n                ),\n                variables: {\n                    id: this.id,\n                    productCollectionId: productCollectionId ?? \"\",\n                },\n                context: {\n                    bundleOwnerId: this.ownerId,\n                },\n            });\n        if (response.data?.bundleAssignProductCollection.productCollection) {\n            this.productCollection = response.data.bundleAssignProductCollection.productCollection;\n            const globalPropertyConfiguration =\n                response.data.bundleAssignProductCollection.productCollection.globalPropertyConfiguration;\n            this.globalPropertyStateManager.setConfiguration(globalPropertyConfiguration);\n            await this.globalPropertyHandleService.getHandles();\n            this.globalConfigurationPropertyId = globalPropertyConfiguration?.id;\n            await this.clearOldProducts(this.workflowExperiences);\n        }\n    }\n\n    private onModelLoadEvent(e: { eventType: \"load\" | \"unload\"; modelContainer: ModelContainer }): void {\n        if (e.eventType === \"unload\" || !e.modelContainer) return;\n        e.modelContainer.registerMaterialSelectedCallback(() => this.onModelSelectedEvent(e.modelContainer, true));\n        e.modelContainer.registerMaterialDeselectedCallback(() => this.onModelSelectedEvent(e.modelContainer, false));\n    }\n\n    private onModelSelectedEvent(modelContainer: ModelContainer, selected: boolean): void {\n        if (modelContainer && modelContainer.metadata && modelContainer.metadata instanceof Map) {\n            if (modelContainer.metadata.has(\"workflowManager\")) {\n                const workflowManager: WorkflowManager = modelContainer.metadata.get(\"workflowManager\");\n                const transaction = workflowManager.getWorkflowExperience().getTransaction();\n                const experience = this.workflowExperiences.find((exp) => exp.getTransaction().id === transaction.id);\n                if (experience) {\n                    this.fireEvent(selected ? \"workflow-experience-hover-enter\" : \"workflow-experience-hover-exit\", {\n                        workflowExperience: experience,\n                    });\n                }\n            }\n        }\n    }\n\n    private async injectExperienceIntoPreviewService(experience: WorkflowExperience) {\n        if (this.previewService) {\n            await experience.getWorkflowManager().injectIntoPreviewService(this.previewService);\n        }\n    }\n\n    private async loadExistingWorkflowExperiences(\n        transactionIds: string[],\n        graphqlOptions?: GetWorkflowGraphqlOptions,\n        transactionLoadProgressCallback?: (loaded: number, total: number) => void,\n    ): Promise<void> {\n        let experiences: WorkflowExperience[] = [];\n        if (transactionIds.length > 0) {\n            experiences = await this.client.getWorkflowExperiences(\n                transactionIds.map((id) => ({\n                    type: \"transaction\",\n                    transactionId: id,\n                })),\n                graphqlOptions,\n                undefined,\n                transactionLoadProgressCallback,\n            );\n            experiences.forEach((wfe) => wfe.setBundle(this));\n            experiences.forEach((wfe) => wfe.checkForPriceBreakChanges());\n            this.workflowExperiences = experiences;\n            if (this.previewService) {\n                for (const experience of experiences) {\n                    await this.injectExperienceIntoPreviewService(experience);\n                }\n            }\n        }\n        await this.clearOldProducts(experiences);\n    }\n\n    // Remove products from bundle that aren't in the collection.\n    private async clearOldProducts(experiences: WorkflowExperience[]) {\n        if (!this.globalPropertyStateManager.getBundleOptions()?.readonly) {\n            // Get products in bundle.\n            // Get products in bundle's product collection.\n            // Check that each bundle product is still in the collection.\n            // For any product that has since been removed from the collection:\n            // - Iterate over the bundle's transactions, remove product if the product matches\n            // - Remove the product from the bundle.\n            const productIds = this.getProductIds() || [];\n            const productCollection = this.getProductCollection();\n            if (productCollection && productIds.length > 0) {\n                await productCollection.fetchProducts();\n                const products = productCollection.getProducts();\n                const idsToRemove: string[] = [];\n                const experiencesToClear: WorkflowExperience[] = [];\n                for (const productId of productIds) {\n                    const product = products.find((p) => p.getId() === productId);\n                    if (!product) {\n                        for (const experience of experiences) {\n                            if (experience.getProduct()?.id === productId) {\n                                experiencesToClear.push(experience);\n                            }\n                        }\n                        idsToRemove.push(productId);\n                    }\n                }\n                const promises: Promise<any>[] = [];\n                if (idsToRemove.length > 0) {\n                    promises.push(this.removeProductIds(idsToRemove));\n                }\n                if (experiencesToClear.length > 0) {\n                    promises.push(Promise.all(experiencesToClear.map((exp) => exp.clearProduct())));\n                }\n                if (promises.length > 0) {\n                    await Promise.all(promises);\n                }\n            }\n        }\n    }\n\n    private async updateBundle() {\n        const response = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleUpdate: BundleEntity }>({\n            mutation: updateBundleMutation,\n            variables: {\n                id: this.id,\n                name: this.name,\n                metadata: Array.from(this.metadata.entries()).map(([key, value]) => ({ key, value })),\n                bundleStateData: this.bundleStateManager.getSerializedState(),\n                dispatchDate: this.dispatchDate,\n                purchaseOrder: this.purchaseOrder,\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n        if (!response.data?.bundleUpdate) throw new Error(\"Bundle not found!\");\n    }\n\n    private async updateTransactionOrder() {\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: bundleUpdateTransactionOrderMutation,\n            variables: {\n                id: this.id,\n                transactionIds: this.workflowExperiences.map((exp) => exp.getTransaction().id),\n            },\n            context: {\n                bundleOwnerId: this.ownerId,\n            },\n        });\n    }\n\n    private async onGlobalPropertiesChanged(\n        previousState: GlobalPropertyState | undefined,\n        newState: GlobalPropertyState,\n    ) {\n        if (this.updatesLocked) {\n            return;\n        }\n        const handles = await this.globalPropertyHandleService.getHandles();\n        const previousHandles = this.globalPropertyHandleService.applyConditionsFromState(handles, previousState);\n        const newHandles = this.globalPropertyHandleService.applyConditionsFromState(handles, newState);\n\n        // Check changes and fire events\n        this.checkConditionalHandlesChanged(previousHandles, newHandles);\n        this.checkMandatoryHandlesChanged(previousState, newHandles);\n\n        // Aspects that are no longer active need to be cleared from the\n        // state (particularly to deactivate aspects that are transitively dependent).\n        const stateManager = this.getGlobalPropertyStateManager();\n        let oldAspects: string[] = [];\n        for (const handle of handles) {\n            if (!newHandles.find((newHandle) => newHandle.getName() == handle.getName())) {\n                oldAspects = [...oldAspects, handle.getName()];\n            }\n        }\n        await stateManager.clearAspects(oldAspects);\n\n        // Apply default variants on new handles\n        const promises = newHandles.map((handle) => {\n            if (handle.getType() === AspectType.ColorOption || handle.getType() === AspectType.Option) {\n                const h = handle as OptionGlobalPropertyHandle;\n                const aspect = newState.aspects.find((a) => a.name === h.getName());\n                if (!aspect) {\n                    // Only init aspects that aren't already set.\n                    return h.initDefaultVariant();\n                }\n            }\n        });\n        await Promise.all(promises);\n\n        // Ensure new handles' associated workflow experiences have up-to-date global property state\n        await Promise.all(newHandles.map((handle) => handle.applyGlobalState()));\n\n        const resultingState = this.globalPropertyStateManager.getGlobalPropertyState()!;\n        const nextHandles = this.globalPropertyHandleService.applyConditionsFromState(handles, resultingState);\n        if (!isEqual(newHandles.sort(), nextHandles.sort())) {\n            // Recurse to remove transitively conditional steps.\n            this.checkConditionalHandlesChanged(newHandles, nextHandles);\n            this.checkMandatoryHandlesChanged(resultingState, nextHandles);\n            await this.onGlobalPropertiesChanged(newState, resultingState);\n        }\n    }\n\n    private checkConditionalHandlesChanged(\n        previousHandles: GlobalPropertyHandle[],\n        newHandles: GlobalPropertyHandle[],\n    ) {\n        const checkHandlesChanged = () => {\n            if (previousHandles.length !== newHandles.length) return true;\n            for (let i = 0; i < previousHandles.length; i++) {\n                if (previousHandles[i].getName() !== newHandles[i].getName()) return true;\n            }\n            return false;\n        };\n        const changed = checkHandlesChanged();\n        if (changed) {\n            this.fireEvent(\"conditional-global-properties-changed\", {\n                globalProperties: newHandles,\n            });\n        }\n    }\n\n    private checkMandatoryHandlesChanged(\n        previousState: GlobalPropertyState | undefined,\n        newHandles: GlobalPropertyHandle[],\n    ) {\n        const changed: GlobalPropertyHandle[] = [];\n        const completed: GlobalPropertyHandle[] = [];\n        const remaining: GlobalPropertyHandle[] = [];\n        const previousMandatory = calculateMandatoryStates(previousState);\n        newHandles.forEach((handle) => {\n            if (handle.isMandatory()) {\n                const fulfilled = handle.isMandatoryFulfilled();\n                if (fulfilled) {\n                    completed.push(handle);\n                } else {\n                    remaining.push(handle);\n                }\n                const oldAspects = previousMandatory.get(handle.getName());\n                if (oldAspects === undefined || oldAspects !== fulfilled) {\n                    changed.push(handle);\n                }\n            }\n        });\n        this.fireEvent(\"global-properties-mandatory-changed\", {\n            changed,\n            completed,\n            remaining,\n        });\n    }\n\n    private fireEvent<K extends keyof BundleEventMap>(event: K, data: BundleEventMap[K]): void {\n        this.eventEmitter.emit(event, data);\n    }\n\n    getShareActions(): undefined | ShareAction[] {\n        return this.shareActions;\n    }\n\n    getWorkflowViewerLink(): string {\n        return this.workflowViewerLink;\n    }\n\n    getWorkflowViewerAmendLink(): string {\n        return this.workflowViewerAmendLink;\n    }\n\n    async approve(note?: string, stakeholderId?: string): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate<{ bundleApprove: string }>({\n            mutation: bundleApprovalQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.id,\n                note,\n                stakeholderId,\n            },\n        });\n    }\n\n    async reject(note?: string, stakeholderId?: string): Promise<void> {\n        await graphQlManager.getShadowGraphqlClient().mutate<{ bundleReject: string }>({\n            mutation: bundleRejectionQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: this.id,\n                note,\n                stakeholderId,\n            },\n        });\n    }\n\n    getQuoteCompleteMessage(): CompleteQuoteMessage {\n        return {\n            bundleId: this.id,\n            bundleOwnerId: this.ownerId,\n            quoteId: this.quoteId || \"\",\n        };\n    }\n}\n","import { ApolloQueryResult, gql } from \"@apollo/client/core\";\nimport { graphQlManager } from \"./services/server\";\n\n/**\n * Graphql query for executing a process flow.\n */\nconst executeProcessFlow = gql`\n    mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {\n        processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {\n            id\n        }\n    }\n`;\n\n/**\n * The response from the server when executing a process flow.\n */\ninterface ExecutionResponseGraphQL {\n    processExecutions: ExecutionResponse;\n}\n\n/**\n * A list of node types available in executions\n */\nexport enum NodeType {\n    Split = \"Split\",\n    TextJoin = \"TextJoin\",\n    TextSlice = \"TextSlice\",\n    TextUpper = \"TextUpper\",\n    TextLower = \"TextLower\",\n    ParseJson = \"ParseJson\",\n    TextBuilder = \"TextBuilder\",\n    Design = \"Design\",\n    OverlayImage = \"OverlayImage\",\n    OverlayText = \"OverlayText\",\n    TableGenerator = \"TableGenerator\",\n    QR = \"QR\",\n    CSV = \"CSV\",\n    PDF = \"PDF\",\n    PNG = \"PNG\",\n    Email = \"Email\",\n    LocationDelivery = \"LocationDelivery\",\n    TemplateEmail = \"TemplateEmail\",\n    Map = \"Map\",\n    Sort = \"Sort\",\n    Group = \"Group\",\n    InnerJoin = \"InnerJoin\",\n    Contains = \"Contains\",\n    Flatten = \"Flatten\",\n    KeyValuePairs = \"KeyValuePairs\",\n    ListConcatenate = \"ListConcatenate\",\n    Repeat = \"Repeat\",\n    Size = \"Size\",\n    ListBuilder = \"ListBuilder\",\n    MapBuilder = \"MapBuilder\",\n    PairBuilder = \"PairBuilder\",\n    AND = \"AND\",\n    OR = \"OR\",\n    NOT = \"NOT\",\n    Equals = \"Equals\",\n    Present = \"Present\",\n    ManualOperation = \"ManualOperation\",\n    Switch = \"Switch\",\n    AssetMetadata = \"AssetMetadata\",\n    DataSelect = \"DataSelect\",\n    LayoutSelect = \"LayoutSelect\",\n    TransactionMetadata = \"TransactionMetadata\",\n    VariantSelection = \"VariantSelection\",\n    StartTerminal = \"StartTerminal\",\n    EndTerminal = \"EndTerminal\",\n    MiscNote = \"MiscNote\",\n    Assign = \"Assign\",\n    CsvVlookup = \"CsvVlookup\",\n    ProcessFlow = \"ProcessFlow\",\n    TemporaryAssetUrl = \"TemporaryAssetUrl\",\n    WebRequest = \"WebRequest\",\n}\n\ninterface ExecutionNodeResponse {\n    id: string;\n    type: NodeType;\n    artifacts: string;\n}\n\ninterface ExecutionResponse {\n    id: string;\n    nodes: ExecutionNodeResponse[];\n    completedAt?: string;\n    failedAt?: string;\n}\n\n/**\n * A service containing functionality for interacting with the Spiff Commerce API to execute and inspect the result of process flows.\n */\nexport class FlowService {\n    /**\n     *\n     * @param id\n     * @param inputs\n     * @param options\n     * @returns\n     */\n    async execute(\n        id: string,\n        inputs: FlowExecutionInput[],\n        options?: { sleepTime?: number; repeats?: number },\n    ): Promise<FlowExecutionResult> {\n        // Fire the execution\n        const createResponse = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ processExecutionCreate: { id: string } }>({\n                mutation: executeProcessFlow,\n                variables: {\n                    processFlowId: id,\n                    inputs: [...inputs.map((input) => input.getValueForTransmission())],\n                },\n            });\n\n        const executionId = createResponse.data?.processExecutionCreate?.id;\n        if (!executionId) throw new Error(\"Failed to create process execution.\");\n\n        function delay(ms: number) {\n            return new Promise((resolve) => {\n                setTimeout(resolve, ms); // Convert seconds to milliseconds\n            });\n        }\n\n        // Evaluate completion\n        let completed: boolean = false;\n        let repeats = 0;\n        let response: ApolloQueryResult<ExecutionResponseGraphQL> | undefined;\n        let flowResult: FlowExecutionResult | undefined = undefined;\n        while (!completed) {\n            response = await graphQlManager.getShadowGraphqlClient().query<ExecutionResponseGraphQL>({\n                query: gql`\n                    query getProcessFlowExecution($ids: [String]!) {\n                        processExecutions(ids: $ids) {\n                            id\n                            completedAt\n                            failedAt\n                            nodes {\n                                id\n                                type\n                                artifacts\n                            }\n                        }\n                    }\n                `,\n                variables: {\n                    ids: [executionId],\n                },\n            });\n            const responseData = response.data?.processExecutions[0];\n\n            // Check valid response\n            if (!response || !responseData) throw new Error(\"Failed to retrieve server response for execution.\");\n\n            // If the execution failed prompt developer to access execution details in hub\n            if (responseData.failedAt) {\n                throw new Error(\n                    \"Execution has failed to complete. See Automation > FLows in Flight on partner account on SpiffCommerce Hub.\",\n                );\n            }\n\n            // Check for completion otherwise.\n            if (responseData.completedAt) {\n                completed = true;\n                flowResult = new FlowExecutionResult(responseData);\n                break;\n            }\n\n            repeats += 1;\n\n            const maxRepeats = options?.repeats ? options?.repeats : 5;\n            if (repeats >= maxRepeats) throw new Error(\"Maximum wait time exceeded for execution result.\");\n            await delay(options?.sleepTime ? Math.max(options.sleepTime, 500) : 2000);\n        }\n        if (!flowResult) throw new Error(\"Failed to retrieve server response for execution.\");\n        return Promise.resolve(flowResult);\n    }\n}\n\n/**\n * Handles preparing a flow input for transmission to the server.\n */\nexport class FlowExecutionResult {\n    protected readonly execution: ExecutionResponse;\n\n    constructor(execution: ExecutionResponse) {\n        this.execution = execution;\n    }\n\n    /**\n     * @returns The raw response from the server.\n     */\n    getRaw(): ExecutionResponse {\n        return this.execution;\n    }\n\n    /**\n     * @returns The nodes contained within the execution.\n     */\n    getNodes(): FlowExecutionNodeResult[] {\n        return this.execution.nodes.map((n) => new FlowExecutionNodeResult(n));\n    }\n\n    /**\n     * @param type The type of node to return.\n     * @returns A list of nodes matching the requested type.\n     */\n    getNodesByType(type: NodeType): FlowExecutionNodeResult[] {\n        return this.execution.nodes.filter((n) => n.type === type).map((n) => new FlowExecutionNodeResult(n));\n    }\n\n    /**\n     * @returns A list of input nodes that exist in this execution.\n     */\n    getInputs(): FlowExecutionNodeResult[] {\n        return this.execution.nodes\n            .filter((n) => n.type === NodeType.StartTerminal)\n            .map((n) => new FlowExecutionNodeResult(n));\n    }\n\n    /**\n     * @returns A list of out put nodes that exist in this execution.\n     */\n    getOutputs(): FlowExecutionNodeResult[] {\n        return this.execution.nodes\n            .filter((n) => n.type === NodeType.EndTerminal)\n            .map((n) => new FlowExecutionNodeResult(n));\n    }\n\n    /**\n     * @returns A date object representing the point in time this execution completed.\n     */\n    getCompletedAt(): Date | undefined {\n        if (!this.execution.completedAt) return undefined;\n        return new Date(this.execution.completedAt);\n    }\n\n    /**\n     * @returns A date object representing the point in time this execution failed.\n     */\n    getFailedAt(): Date | undefined {\n        if (!this.execution.failedAt) return undefined;\n        return new Date(this.execution.failedAt);\n    }\n}\n\n/**\n * Handles preparing a flow input for transmission to the server.\n */\nexport class FlowExecutionNodeResult {\n    protected readonly node: ExecutionNodeResponse;\n\n    constructor(node: ExecutionNodeResponse) {\n        this.node = node;\n    }\n\n    getId(): string {\n        return this.node.id;\n    }\n\n    getType(): NodeType {\n        return this.node.type;\n    }\n\n    getArtifacts(): Map<string, any> {\n        return new Map(Object.entries(JSON.parse(this.node.artifacts).value));\n    }\n\n    getArtifactByName<T>(name: string): T {\n        return this.getArtifacts().get(name) as T;\n    }\n}\n\n/**\n * Handles preparing a flow input for transmission to the server.\n */\nabstract class FlowExecutionInput {\n    protected readonly value: string;\n    constructor(value: string) {\n        this.value = value;\n    }\n    getRaw(): string {\n        return this.value;\n    }\n    getValueForTransmission(): string {\n        const v = this.value;\n        if (v.startsWith(\"[\")) {\n            return JSON.stringify(JSON.parse(v));\n        } else {\n            return v;\n        }\n    }\n}\n\n/**\n * Represents the type of object being referenced by the input.\n */\nexport const enum ObjectInputType {\n    Transaction = \"Transaction\",\n    Bundle = \"Bundle\",\n    Product = \"Product\",\n    Variant = \"Variant\",\n    Option = \"Option\",\n    LineItem = \"LineItem\",\n    Asset = \"Asset\",\n}\n\nexport class TextInput extends FlowExecutionInput {\n    constructor(input: string) {\n        super(`\"${input}\"`);\n    }\n}\n\n/**\n * Handles validation of spiffObject structure for transmission to the server.\n */\nexport class ObjectInput extends FlowExecutionInput {\n    constructor(id: string, type: ObjectInputType) {\n        // Assets aren't a UUID but most other assets will be UUID values.\n        if (type !== ObjectInputType.Asset && !ObjectInput.validUUID(id))\n            throw new Error(\"Invalid ID, must be a valid v4 UUID. https://www.uuidgenerator.net/\");\n        // The server expects a specific structure for representing a reference to an object in our platform.\n        super(`{\"isSpiffObject\": true, \"id\": \"${id}\", \"type\": \"${type}\"}`);\n    }\n    static validUUID(uuid: string) {\n        return uuid.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);\n    }\n}\n\n/**\n * Handles validation of array input for transmission to the server.\n */\nexport class ArrayInput extends FlowExecutionInput {\n    constructor(elements: FlowExecutionInput[]) {\n        super(`[${elements.map((e) => e.getRaw()).join(\",\")}]`);\n    }\n}\n","import { ProductWorkflow } from \"./productCollection\";\nimport { IntegrationProductResource } from \"./types\";\n\nexport class IntegrationProduct {\n    private readonly integrationProduct: IntegrationProductResource;\n\n    constructor(product: IntegrationProductResource) {\n        this.integrationProduct = product;\n    }\n\n    getId(): string {\n        return this.integrationProduct.id;\n    }\n\n    getResource(): IntegrationProductResource {\n        return this.integrationProduct;\n    }\n\n    getBasePrice(): number {\n        if (!this.integrationProduct.product) {\n            throw new Error(\"IntegrationProductResource does not have a product\");\n        }\n        const basePrice = this.integrationProduct.product.basePrice || 0;\n        const additionalIP = this.integrationProduct?.additionalIntegrationProduct;\n        if (!additionalIP) return basePrice;\n        if (additionalIP && !additionalIP.product) {\n            throw new Error(\"An additional integration product was found, but it does not have a product\");\n        }\n        return basePrice + (additionalIP.product!.basePrice || 0);\n    }\n\n    getDefaultWorkflow(): ProductWorkflow {\n        if (!this.integrationProduct.product) {\n            throw new Error(\"IntegrationProductResource does not have a product\");\n        }\n        const workflows = this.integrationProduct.product.workflows || [];\n        if (workflows.length === 0) {\n            throw new Error(\n                \"No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.\",\n            );\n        }\n        return new ProductWorkflow(workflows[0]);\n    }\n\n    getAllWorkflows(): ProductWorkflow[] {\n        if (!this.integrationProduct.product) {\n            throw new Error(\"IntegrationProductResource does not have a product\");\n        }\n        const workflows = this.integrationProduct.product.workflows || [];\n        if (workflows.length === 0) {\n            throw new Error(\n                \"No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.\",\n            );\n        }\n        return workflows\n            .sort((a, b) => (a.index ?? 0) - (b.index ?? 0))\n            .map((workflow) => new ProductWorkflow(workflow));\n    }\n}\n","import { gql } from \"@apollo/client/core\";\n\nexport const getCustomerQuery = gql`\n    query GetCustomer($emailAddress: String!) {\n        customer(emailAddress: $emailAddress) {\n            id\n            emailAddress\n            defaultTemplateBundleId\n            hasBundleTemplates\n            partner {\n                id\n            }\n            productCollectionCustomers {\n                id\n                productCollection {\n                    id\n                }\n            }\n        }\n    }\n`;\n\nexport const customerCreateMutation = gql`\n    mutation CustomerCreate($details: CustomerDetailsInput!) {\n        customerCreate(details: $details) {\n            id\n            emailAddress\n            partner {\n                id\n            }\n        }\n    }\n`;\n\nexport const customerAuthenticateMutation = gql`\n    mutation CustomerAuthenticate($loginToken: String!) {\n        customerAuthenticate(loginToken: $loginToken) {\n            id\n            emailAddress\n            stakeholders {\n                id\n                type\n                transaction {\n                    id\n                }\n            }\n            bundleStakeholders {\n                id\n                authorizationStatus\n                authorizationDate\n                authorizationNote\n                type\n                bundle {\n                    id\n                    transactions {\n                        id\n                    }\n                }\n            }\n            partner {\n                id\n            }\n        }\n    }\n`;\n\nexport const customerGenerateVerificationCodeMutation = gql`\n    mutation CustomerGenerateVerificationCode($emailAddress: String!) {\n        customerGenerateVerificationCode(emailAddress: $emailAddress)\n    }\n`;\n\nexport const customerVerifyCodeMutation = gql`\n    mutation CustomerVerifyCode($emailAddress: String!, $verificationCode: String!) {\n        customerVerifyCode(emailAddress: $emailAddress, verificationCode: $verificationCode) {\n            id\n            emailAddress\n            loginToken\n            partner {\n                id\n            }\n            stakeholders {\n                id\n                type\n                transaction {\n                    id\n                }\n            }\n            bundleStakeholders {\n                id\n                authorizationStatus\n                authorizationDate\n                authorizationNote\n                type\n                bundle {\n                    id\n                    transactions {\n                        id\n                    }\n                }\n            }\n        }\n    }\n`;\n\nexport const customerMetafieldsQuery = gql`\n    query CustomerMetafields($id: String!) {\n        metafields(entityId: $id) {\n            id\n            createdAt\n            updatedAt\n            entityId\n            value\n            metafieldConfiguration {\n                id\n                createdAt\n                updatedAt\n                entityType\n                metafieldType\n                name\n            }\n        }\n    }\n`;\n","import {\n    ApolloClient,\n    ApolloQueryResult,\n    DefaultContext,\n    FetchResult,\n    MutationOptions,\n    OperationVariables,\n    QueryOptions,\n} from \"@apollo/client/core\";\nimport { graphQlManager } from \"./server\";\n\ninterface GraphQlClient {\n    query<T = any, TVariables extends OperationVariables = OperationVariables>(\n        options: QueryOptions<TVariables, T>,\n    ): Promise<ApolloQueryResult<T>>;\n    mutate<\n        TData = any,\n        TVariables extends OperationVariables = OperationVariables,\n        TContext extends Record<string, any> = DefaultContext,\n    >(\n        options: MutationOptions<TData, TVariables, TContext>,\n    ): Promise<FetchResult<TData>>;\n}\n\nexport type GraphQlClientFunc = () => GraphQlClient;\n\n/**\n * Provides an interface to customize GraphQL requests before they are processed.\n */\nexport class GraphQlClientWrapper implements GraphQlClient {\n    constructor(\n        private readonly options?: {\n            onQuery?: (\n                options: QueryOptions<OperationVariables, any>,\n            ) => Partial<QueryOptions<OperationVariables, any>>;\n            onMutate?: (\n                options: MutationOptions<any, OperationVariables, DefaultContext>,\n            ) => Partial<MutationOptions<any, OperationVariables, DefaultContext>>;\n        },\n        private readonly client: () => ApolloClient<any> = graphQlManager.getShadowGraphqlClient.bind(graphQlManager),\n    ) {}\n\n    query<T = any, TVariables extends OperationVariables = OperationVariables>(\n        options: QueryOptions<TVariables, T>,\n    ): Promise<ApolloQueryResult<T>> {\n        const base = this.options?.onQuery ? this.options?.onQuery(options) : {};\n        return this.client().query({\n            ...base,\n            ...options,\n            context: {\n                ...(base.context ?? {}),\n                ...(options.context ?? {}),\n            },\n        });\n    }\n\n    mutate<\n        TData = any,\n        TVariables extends OperationVariables = OperationVariables,\n        TContext extends Record<string, any> = DefaultContext,\n    >(options: MutationOptions<TData, TVariables, TContext>): Promise<FetchResult<TData>> {\n        const base = this.options?.onMutate ? this.options?.onMutate(options) : {};\n        return this.client().mutate({\n            ...base,\n            ...options,\n            context: {\n                ...(base.context ?? {}),\n                ...(options.context ?? {}),\n            },\n        });\n    }\n}\n","export const getHttpHandlerExtensionConfiguration = (runtimeConfig) => {\n    return {\n        setHttpHandler(handler) {\n            runtimeConfig.httpHandler = handler;\n        },\n        httpHandler() {\n            return runtimeConfig.httpHandler;\n        },\n        updateHttpClientConfig(key, value) {\n            runtimeConfig.httpHandler?.updateHttpClientConfig(key, value);\n        },\n        httpHandlerConfigs() {\n            return runtimeConfig.httpHandler.httpHandlerConfigs();\n        },\n    };\n};\nexport const resolveHttpHandlerRuntimeConfig = (httpHandlerExtensionConfiguration) => {\n    return {\n        httpHandler: httpHandlerExtensionConfiguration.httpHandler(),\n    };\n};\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n    EndpointURLScheme[\"HTTP\"] = \"http\";\n    EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n    AlgorithmId[\"MD5\"] = \"md5\";\n    AlgorithmId[\"CRC32\"] = \"crc32\";\n    AlgorithmId[\"CRC32C\"] = \"crc32c\";\n    AlgorithmId[\"SHA1\"] = \"sha1\";\n    AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n    const checksumAlgorithms = [];\n    if (runtimeConfig.sha256 !== undefined) {\n        checksumAlgorithms.push({\n            algorithmId: () => AlgorithmId.SHA256,\n            checksumConstructor: () => runtimeConfig.sha256,\n        });\n    }\n    if (runtimeConfig.md5 != undefined) {\n        checksumAlgorithms.push({\n            algorithmId: () => AlgorithmId.MD5,\n            checksumConstructor: () => runtimeConfig.md5,\n        });\n    }\n    return {\n        addChecksumAlgorithm(algo) {\n            checksumAlgorithms.push(algo);\n        },\n        checksumAlgorithms() {\n            return checksumAlgorithms;\n        },\n    };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n    const runtimeConfig = {};\n    clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n        runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n    });\n    return runtimeConfig;\n};\n","export const SMITHY_CONTEXT_KEY = \"__smithy_context\";\n","export class HttpRequest {\n    method;\n    protocol;\n    hostname;\n    port;\n    path;\n    query;\n    headers;\n    username;\n    password;\n    fragment;\n    body;\n    constructor(options) {\n        this.method = options.method || \"GET\";\n        this.hostname = options.hostname || \"localhost\";\n        this.port = options.port;\n        this.query = options.query || {};\n        this.headers = options.headers || {};\n        this.body = options.body;\n        this.protocol = options.protocol\n            ? options.protocol.slice(-1) !== \":\"\n                ? `${options.protocol}:`\n                : options.protocol\n            : \"https:\";\n        this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n        this.username = options.username;\n        this.password = options.password;\n        this.fragment = options.fragment;\n    }\n    static clone(request) {\n        const cloned = new HttpRequest({\n            ...request,\n            headers: { ...request.headers },\n        });\n        if (cloned.query) {\n            cloned.query = cloneQuery(cloned.query);\n        }\n        return cloned;\n    }\n    static isInstance(request) {\n        if (!request) {\n            return false;\n        }\n        const req = request;\n        return (\"method\" in req &&\n            \"protocol\" in req &&\n            \"hostname\" in req &&\n            \"path\" in req &&\n            typeof req[\"query\"] === \"object\" &&\n            typeof req[\"headers\"] === \"object\");\n    }\n    clone() {\n        return HttpRequest.clone(this);\n    }\n}\nfunction cloneQuery(query) {\n    return Object.keys(query).reduce((carry, paramName) => {\n        const param = query[paramName];\n        return {\n            ...carry,\n            [paramName]: Array.isArray(param) ? [...param] : param,\n        };\n    }, {});\n}\n","export class HttpResponse {\n    statusCode;\n    reason;\n    headers;\n    body;\n    constructor(options) {\n        this.statusCode = options.statusCode;\n        this.reason = options.reason;\n        this.headers = options.headers || {};\n        this.body = options.body;\n    }\n    static isInstance(response) {\n        if (!response)\n            return false;\n        const resp = response;\n        return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n    }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport function resolveHostHeaderConfig(input) {\n    return input;\n}\nexport const hostHeaderMiddleware = (options) => (next) => async (args) => {\n    if (!HttpRequest.isInstance(args.request))\n        return next(args);\n    const { request } = args;\n    const { handlerProtocol = \"\" } = options.requestHandler.metadata || {};\n    if (handlerProtocol.indexOf(\"h2\") >= 0 && !request.headers[\":authority\"]) {\n        delete request.headers[\"host\"];\n        request.headers[\":authority\"] = request.hostname + (request.port ? \":\" + request.port : \"\");\n    }\n    else if (!request.headers[\"host\"]) {\n        let host = request.hostname;\n        if (request.port != null)\n            host += `:${request.port}`;\n        request.headers[\"host\"] = host;\n    }\n    return next(args);\n};\nexport const hostHeaderMiddlewareOptions = {\n    name: \"hostHeaderMiddleware\",\n    step: \"build\",\n    priority: \"low\",\n    tags: [\"HOST\"],\n    override: true,\n};\nexport const getHostHeaderPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(hostHeaderMiddleware(options), hostHeaderMiddlewareOptions);\n    },\n});\n","export const loggerMiddleware = () => (next, context) => async (args) => {\n    try {\n        const response = await next(args);\n        const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n        const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n        const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n        const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog ?? context.outputFilterSensitiveLog;\n        const { $metadata, ...outputWithoutMetadata } = response.output;\n        logger?.info?.({\n            clientName,\n            commandName,\n            input: inputFilterSensitiveLog(args.input),\n            output: outputFilterSensitiveLog(outputWithoutMetadata),\n            metadata: $metadata,\n        });\n        return response;\n    }\n    catch (error) {\n        const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n        const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n        const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n        logger?.error?.({\n            clientName,\n            commandName,\n            input: inputFilterSensitiveLog(args.input),\n            error,\n            metadata: error.$metadata,\n        });\n        throw error;\n    }\n};\nexport const loggerMiddlewareOptions = {\n    name: \"loggerMiddleware\",\n    tags: [\"LOGGER\"],\n    step: \"initialize\",\n    override: true,\n};\nexport const getLoggerPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(loggerMiddleware(), loggerMiddlewareOptions);\n    },\n});\n","export const recursionDetectionMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"RECURSION_DETECTION\"],\n    name: \"recursionDetectionMiddleware\",\n    override: true,\n    priority: \"low\",\n};\n","export const recursionDetectionMiddleware = () => (next) => async (args) => next(args);\n","import { recursionDetectionMiddlewareOptions } from \"./configuration\";\nimport { recursionDetectionMiddleware } from \"./recursionDetectionMiddleware\";\nexport const getRecursionDetectionPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(recursionDetectionMiddleware(), recursionDetectionMiddlewareOptions);\n    },\n});\n","import { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport const getSmithyContext = (context) => context[SMITHY_CONTEXT_KEY] || (context[SMITHY_CONTEXT_KEY] = {});\n","export const normalizeProvider = (input) => {\n    if (typeof input === \"function\")\n        return input;\n    const promisified = Promise.resolve(input);\n    return () => promisified;\n};\n","export const resolveAuthOptions = (candidateAuthOptions, authSchemePreference) => {\n    if (!authSchemePreference || authSchemePreference.length === 0) {\n        return candidateAuthOptions;\n    }\n    const preferredAuthOptions = [];\n    for (const preferredSchemeName of authSchemePreference) {\n        for (const candidateAuthOption of candidateAuthOptions) {\n            const candidateAuthSchemeName = candidateAuthOption.schemeId.split(\"#\")[1];\n            if (candidateAuthSchemeName === preferredSchemeName) {\n                preferredAuthOptions.push(candidateAuthOption);\n            }\n        }\n    }\n    for (const candidateAuthOption of candidateAuthOptions) {\n        if (!preferredAuthOptions.find(({ schemeId }) => schemeId === candidateAuthOption.schemeId)) {\n            preferredAuthOptions.push(candidateAuthOption);\n        }\n    }\n    return preferredAuthOptions;\n};\n","import { getSmithyContext } from \"@smithy/util-middleware\";\nimport { resolveAuthOptions } from \"./resolveAuthOptions\";\nfunction convertHttpAuthSchemesToMap(httpAuthSchemes) {\n    const map = new Map();\n    for (const scheme of httpAuthSchemes) {\n        map.set(scheme.schemeId, scheme);\n    }\n    return map;\n}\nexport const httpAuthSchemeMiddleware = (config, mwOptions) => (next, context) => async (args) => {\n    const options = config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config, context, args.input));\n    const authSchemePreference = config.authSchemePreference ? await config.authSchemePreference() : [];\n    const resolvedOptions = resolveAuthOptions(options, authSchemePreference);\n    const authSchemes = convertHttpAuthSchemesToMap(config.httpAuthSchemes);\n    const smithyContext = getSmithyContext(context);\n    const failureReasons = [];\n    for (const option of resolvedOptions) {\n        const scheme = authSchemes.get(option.schemeId);\n        if (!scheme) {\n            failureReasons.push(`HttpAuthScheme \\`${option.schemeId}\\` was not enabled for this service.`);\n            continue;\n        }\n        const identityProvider = scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));\n        if (!identityProvider) {\n            failureReasons.push(`HttpAuthScheme \\`${option.schemeId}\\` did not have an IdentityProvider configured.`);\n            continue;\n        }\n        const { identityProperties = {}, signingProperties = {} } = option.propertiesExtractor?.(config, context) || {};\n        option.identityProperties = Object.assign(option.identityProperties || {}, identityProperties);\n        option.signingProperties = Object.assign(option.signingProperties || {}, signingProperties);\n        smithyContext.selectedHttpAuthScheme = {\n            httpAuthOption: option,\n            identity: await identityProvider(option.identityProperties),\n            signer: scheme.signer,\n        };\n        break;\n    }\n    if (!smithyContext.selectedHttpAuthScheme) {\n        throw new Error(failureReasons.join(\"\\n\"));\n    }\n    return next(args);\n};\n","import { httpAuthSchemeMiddleware } from \"./httpAuthSchemeMiddleware\";\nexport const httpAuthSchemeEndpointRuleSetMiddlewareOptions = {\n    step: \"serialize\",\n    tags: [\"HTTP_AUTH_SCHEME\"],\n    name: \"httpAuthSchemeMiddleware\",\n    override: true,\n    relation: \"before\",\n    toMiddleware: \"endpointV2Middleware\",\n};\nexport const getHttpAuthSchemeEndpointRuleSetPlugin = (config, { httpAuthSchemeParametersProvider, identityProviderConfigProvider, }) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(httpAuthSchemeMiddleware(config, {\n            httpAuthSchemeParametersProvider,\n            identityProviderConfigProvider,\n        }), httpAuthSchemeEndpointRuleSetMiddlewareOptions);\n    },\n});\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nconst defaultErrorHandler = (signingProperties) => (error) => {\n    throw error;\n};\nconst defaultSuccessHandler = (httpResponse, signingProperties) => { };\nexport const httpSigningMiddleware = (config) => (next, context) => async (args) => {\n    if (!HttpRequest.isInstance(args.request)) {\n        return next(args);\n    }\n    const smithyContext = getSmithyContext(context);\n    const scheme = smithyContext.selectedHttpAuthScheme;\n    if (!scheme) {\n        throw new Error(`No HttpAuthScheme was selected: unable to sign request`);\n    }\n    const { httpAuthOption: { signingProperties = {} }, identity, signer, } = scheme;\n    const output = await next({\n        ...args,\n        request: await signer.sign(args.request, identity, signingProperties),\n    }).catch((signer.errorHandler || defaultErrorHandler)(signingProperties));\n    (signer.successHandler || defaultSuccessHandler)(output.response, signingProperties);\n    return output;\n};\n","import { httpSigningMiddleware } from \"./httpSigningMiddleware\";\nexport const httpSigningMiddlewareOptions = {\n    step: \"finalizeRequest\",\n    tags: [\"HTTP_SIGNING\"],\n    name: \"httpSigningMiddleware\",\n    aliases: [\"apiKeyMiddleware\", \"tokenMiddleware\", \"awsAuthMiddleware\"],\n    override: true,\n    relation: \"after\",\n    toMiddleware: \"retryMiddleware\",\n};\nexport const getHttpSigningPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(httpSigningMiddleware(config), httpSigningMiddlewareOptions);\n    },\n});\n","export const normalizeProvider = (input) => {\n    if (typeof input === \"function\")\n        return input;\n    const promisified = Promise.resolve(input);\n    return () => promisified;\n};\n","const chars = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;\nexport const alphabetByEncoding = Object.entries(chars).reduce((acc, [i, c]) => {\n    acc[c] = Number(i);\n    return acc;\n}, {});\nexport const alphabetByValue = chars.split(\"\");\nexport const bitsPerLetter = 6;\nexport const bitsPerByte = 8;\nexport const maxLetterValue = 0b111111;\n","import { alphabetByEncoding, bitsPerByte, bitsPerLetter } from \"./constants.browser\";\nexport const fromBase64 = (input) => {\n    let totalByteLength = (input.length / 4) * 3;\n    if (input.slice(-2) === \"==\") {\n        totalByteLength -= 2;\n    }\n    else if (input.slice(-1) === \"=\") {\n        totalByteLength--;\n    }\n    const out = new ArrayBuffer(totalByteLength);\n    const dataView = new DataView(out);\n    for (let i = 0; i < input.length; i += 4) {\n        let bits = 0;\n        let bitLength = 0;\n        for (let j = i, limit = i + 3; j <= limit; j++) {\n            if (input[j] !== \"=\") {\n                if (!(input[j] in alphabetByEncoding)) {\n                    throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n                }\n                bits |= alphabetByEncoding[input[j]] << ((limit - j) * bitsPerLetter);\n                bitLength += bitsPerLetter;\n            }\n            else {\n                bits >>= bitsPerLetter;\n            }\n        }\n        const chunkOffset = (i / 4) * 3;\n        bits >>= bitLength % bitsPerByte;\n        const byteLength = Math.floor(bitLength / bitsPerByte);\n        for (let k = 0; k < byteLength; k++) {\n            const offset = (byteLength - k - 1) * bitsPerByte;\n            dataView.setUint8(chunkOffset + k, (bits & (255 << offset)) >> offset);\n        }\n    }\n    return new Uint8Array(out);\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"./fromUtf8\";\nexport const toUint8Array = (data) => {\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n};\n","export const toUtf8 = (input) => {\n    if (typeof input === \"string\") {\n        return input;\n    }\n    if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n        throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n    }\n    return new TextDecoder(\"utf-8\").decode(input);\n};\n","import { fromUtf8 } from \"@smithy/util-utf8\";\nimport { alphabetByValue, bitsPerByte, bitsPerLetter, maxLetterValue } from \"./constants.browser\";\nexport function toBase64(_input) {\n    let input;\n    if (typeof _input === \"string\") {\n        input = fromUtf8(_input);\n    }\n    else {\n        input = _input;\n    }\n    const isArrayLike = typeof input === \"object\" && typeof input.length === \"number\";\n    const isUint8Array = typeof input === \"object\" &&\n        typeof input.byteOffset === \"number\" &&\n        typeof input.byteLength === \"number\";\n    if (!isArrayLike && !isUint8Array) {\n        throw new Error(\"@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.\");\n    }\n    let str = \"\";\n    for (let i = 0; i < input.length; i += 3) {\n        let bits = 0;\n        let bitLength = 0;\n        for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n            bits |= input[j] << ((limit - j - 1) * bitsPerByte);\n            bitLength += bitsPerByte;\n        }\n        const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n        bits <<= bitClusterCount * bitsPerLetter - bitLength;\n        for (let k = 1; k <= bitClusterCount; k++) {\n            const offset = (bitClusterCount - k) * bitsPerLetter;\n            str += alphabetByValue[(bits & (maxLetterValue << offset)) >> offset];\n        }\n        str += \"==\".slice(0, 4 - bitClusterCount);\n    }\n    return str;\n}\n","import { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nexport class Uint8ArrayBlobAdapter extends Uint8Array {\n    static fromString(source, encoding = \"utf-8\") {\n        if (typeof source === \"string\") {\n            if (encoding === \"base64\") {\n                return Uint8ArrayBlobAdapter.mutate(fromBase64(source));\n            }\n            return Uint8ArrayBlobAdapter.mutate(fromUtf8(source));\n        }\n        throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);\n    }\n    static mutate(source) {\n        Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);\n        return source;\n    }\n    transformToString(encoding = \"utf-8\") {\n        if (encoding === \"base64\") {\n            return toBase64(this);\n        }\n        return toUtf8(this);\n    }\n}\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nexport function buildQueryString(query) {\n    const parts = [];\n    for (let key of Object.keys(query).sort()) {\n        const value = query[key];\n        key = escapeUri(key);\n        if (Array.isArray(value)) {\n            for (let i = 0, iLen = value.length; i < iLen; i++) {\n                parts.push(`${key}=${escapeUri(value[i])}`);\n            }\n        }\n        else {\n            let qsEntry = key;\n            if (value || typeof value === \"string\") {\n                qsEntry += `=${escapeUri(value)}`;\n            }\n            parts.push(qsEntry);\n        }\n    }\n    return parts.join(\"&\");\n}\n","export function createRequest(url, requestOptions) {\n    return new Request(url, requestOptions);\n}\n","export function requestTimeout(timeoutInMs = 0) {\n    return new Promise((resolve, reject) => {\n        if (timeoutInMs) {\n            setTimeout(() => {\n                const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n                timeoutError.name = \"TimeoutError\";\n                reject(timeoutError);\n            }, timeoutInMs);\n        }\n    });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { createRequest } from \"./create-request\";\nimport { requestTimeout as requestTimeoutFn } from \"./request-timeout\";\nexport const keepAliveSupport = {\n    supported: undefined,\n};\nexport class FetchHttpHandler {\n    config;\n    configProvider;\n    static create(instanceOrOptions) {\n        if (typeof instanceOrOptions?.handle === \"function\") {\n            return instanceOrOptions;\n        }\n        return new FetchHttpHandler(instanceOrOptions);\n    }\n    constructor(options) {\n        if (typeof options === \"function\") {\n            this.configProvider = options().then((opts) => opts || {});\n        }\n        else {\n            this.config = options ?? {};\n            this.configProvider = Promise.resolve(this.config);\n        }\n        if (keepAliveSupport.supported === undefined) {\n            keepAliveSupport.supported = Boolean(typeof Request !== \"undefined\" && \"keepalive\" in createRequest(\"https://[::1]\"));\n        }\n    }\n    destroy() {\n    }\n    async handle(request, { abortSignal, requestTimeout } = {}) {\n        if (!this.config) {\n            this.config = await this.configProvider;\n        }\n        const requestTimeoutInMs = requestTimeout ?? this.config.requestTimeout;\n        const keepAlive = this.config.keepAlive === true;\n        const credentials = this.config.credentials;\n        if (abortSignal?.aborted) {\n            const abortError = buildAbortError(abortSignal);\n            return Promise.reject(abortError);\n        }\n        let path = request.path;\n        const queryString = buildQueryString(request.query || {});\n        if (queryString) {\n            path += `?${queryString}`;\n        }\n        if (request.fragment) {\n            path += `#${request.fragment}`;\n        }\n        let auth = \"\";\n        if (request.username != null || request.password != null) {\n            const username = request.username ?? \"\";\n            const password = request.password ?? \"\";\n            auth = `${username}:${password}@`;\n        }\n        const { port, method } = request;\n        const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n        const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n        const requestOptions = {\n            body,\n            headers: new Headers(request.headers),\n            method: method,\n            credentials,\n        };\n        if (this.config?.cache) {\n            requestOptions.cache = this.config.cache;\n        }\n        if (body) {\n            requestOptions.duplex = \"half\";\n        }\n        if (typeof AbortController !== \"undefined\") {\n            requestOptions.signal = abortSignal;\n        }\n        if (keepAliveSupport.supported) {\n            requestOptions.keepalive = keepAlive;\n        }\n        if (typeof this.config.requestInit === \"function\") {\n            Object.assign(requestOptions, this.config.requestInit(request));\n        }\n        let removeSignalEventListener = () => { };\n        const fetchRequest = createRequest(url, requestOptions);\n        const raceOfPromises = [\n            fetch(fetchRequest).then((response) => {\n                const fetchHeaders = response.headers;\n                const transformedHeaders = {};\n                for (const pair of fetchHeaders.entries()) {\n                    transformedHeaders[pair[0]] = pair[1];\n                }\n                const hasReadableStream = response.body != undefined;\n                if (!hasReadableStream) {\n                    return response.blob().then((body) => ({\n                        response: new HttpResponse({\n                            headers: transformedHeaders,\n                            reason: response.statusText,\n                            statusCode: response.status,\n                            body,\n                        }),\n                    }));\n                }\n                return {\n                    response: new HttpResponse({\n                        headers: transformedHeaders,\n                        reason: response.statusText,\n                        statusCode: response.status,\n                        body: response.body,\n                    }),\n                };\n            }),\n            requestTimeoutFn(requestTimeoutInMs),\n        ];\n        if (abortSignal) {\n            raceOfPromises.push(new Promise((resolve, reject) => {\n                const onAbort = () => {\n                    const abortError = buildAbortError(abortSignal);\n                    reject(abortError);\n                };\n                if (typeof abortSignal.addEventListener === \"function\") {\n                    const signal = abortSignal;\n                    signal.addEventListener(\"abort\", onAbort, { once: true });\n                    removeSignalEventListener = () => signal.removeEventListener(\"abort\", onAbort);\n                }\n                else {\n                    abortSignal.onabort = onAbort;\n                }\n            }));\n        }\n        return Promise.race(raceOfPromises).finally(removeSignalEventListener);\n    }\n    updateHttpClientConfig(key, value) {\n        this.config = undefined;\n        this.configProvider = this.configProvider.then((config) => {\n            config[key] = value;\n            return config;\n        });\n    }\n    httpHandlerConfigs() {\n        return this.config ?? {};\n    }\n}\nfunction buildAbortError(abortSignal) {\n    const reason = abortSignal && typeof abortSignal === \"object\" && \"reason\" in abortSignal\n        ? abortSignal.reason\n        : undefined;\n    if (reason) {\n        if (reason instanceof Error) {\n            const abortError = new Error(\"Request aborted\");\n            abortError.name = \"AbortError\";\n            abortError.cause = reason;\n            return abortError;\n        }\n        const abortError = new Error(String(reason));\n        abortError.name = \"AbortError\";\n        return abortError;\n    }\n    const abortError = new Error(\"Request aborted\");\n    abortError.name = \"AbortError\";\n    return abortError;\n}\n","import { fromBase64 } from \"@smithy/util-base64\";\nexport const streamCollector = async (stream) => {\n    if ((typeof Blob === \"function\" && stream instanceof Blob) || stream.constructor?.name === \"Blob\") {\n        if (Blob.prototype.arrayBuffer !== undefined) {\n            return new Uint8Array(await stream.arrayBuffer());\n        }\n        return collectBlob(stream);\n    }\n    return collectStream(stream);\n};\nasync function collectBlob(blob) {\n    const base64 = await readToBase64(blob);\n    const arrayBuffer = fromBase64(base64);\n    return new Uint8Array(arrayBuffer);\n}\nasync function collectStream(stream) {\n    const chunks = [];\n    const reader = stream.getReader();\n    let isDone = false;\n    let length = 0;\n    while (!isDone) {\n        const { done, value } = await reader.read();\n        if (value) {\n            chunks.push(value);\n            length += value.length;\n        }\n        isDone = done;\n    }\n    const collected = new Uint8Array(length);\n    let offset = 0;\n    for (const chunk of chunks) {\n        collected.set(chunk, offset);\n        offset += chunk.length;\n    }\n    return collected;\n}\nfunction readToBase64(blob) {\n    return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n            if (reader.readyState !== 2) {\n                return reject(new Error(\"Reader aborted too early\"));\n            }\n            const result = (reader.result ?? \"\");\n            const commaIndex = result.indexOf(\",\");\n            const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;\n            resolve(result.substring(dataOffset));\n        };\n        reader.onabort = () => reject(new Error(\"Read aborted\"));\n        reader.onerror = () => reject(reader.error);\n        reader.readAsDataURL(blob);\n    });\n}\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n    let encodedByte = i.toString(16).toLowerCase();\n    if (encodedByte.length === 1) {\n        encodedByte = `0${encodedByte}`;\n    }\n    SHORT_TO_HEX[i] = encodedByte;\n    HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n    if (encoded.length % 2 !== 0) {\n        throw new Error(\"Hex encoded strings must have an even number length\");\n    }\n    const out = new Uint8Array(encoded.length / 2);\n    for (let i = 0; i < encoded.length; i += 2) {\n        const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n        if (encodedByte in HEX_TO_SHORT) {\n            out[i / 2] = HEX_TO_SHORT[encodedByte];\n        }\n        else {\n            throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n        }\n    }\n    return out;\n}\nexport function toHex(bytes) {\n    let out = \"\";\n    for (let i = 0; i < bytes.byteLength; i++) {\n        out += SHORT_TO_HEX[bytes[i]];\n    }\n    return out;\n}\n","import { Uint8ArrayBlobAdapter } from \"@smithy/util-stream\";\nexport const collectBody = async (streamBody = new Uint8Array(), context) => {\n    if (streamBody instanceof Uint8Array) {\n        return Uint8ArrayBlobAdapter.mutate(streamBody);\n    }\n    if (!streamBody) {\n        return Uint8ArrayBlobAdapter.mutate(new Uint8Array());\n    }\n    const fromContext = context.streamCollector(streamBody);\n    return Uint8ArrayBlobAdapter.mutate(await fromContext);\n};\n","export const deref = (schemaRef) => {\n    if (typeof schemaRef === \"function\") {\n        return schemaRef();\n    }\n    return schemaRef;\n};\n","export const operation = (namespace, name, traits, input, output) => ({\n    name,\n    namespace,\n    traits,\n    input,\n    output,\n});\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { operation } from \"../schemas/operation\";\nexport const schemaDeserializationMiddleware = (config) => (next, context) => async (args) => {\n    const { response } = await next(args);\n    const { operationSchema } = getSmithyContext(context);\n    const [, ns, n, t, i, o] = operationSchema ?? [];\n    try {\n        const parsed = await config.protocol.deserializeResponse(operation(ns, n, t, i, o), {\n            ...config,\n            ...context,\n        }, response);\n        return {\n            response,\n            output: parsed,\n        };\n    }\n    catch (error) {\n        Object.defineProperty(error, \"$response\", {\n            value: response,\n            enumerable: false,\n            writable: false,\n            configurable: false,\n        });\n        if (!(\"$metadata\" in error)) {\n            const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;\n            try {\n                error.message += \"\\n  \" + hint;\n            }\n            catch (e) {\n                if (!context.logger || context.logger?.constructor?.name === \"NoOpLogger\") {\n                    console.warn(hint);\n                }\n                else {\n                    context.logger?.warn?.(hint);\n                }\n            }\n            if (typeof error.$responseBodyText !== \"undefined\") {\n                if (error.$response) {\n                    error.$response.body = error.$responseBodyText;\n                }\n            }\n            try {\n                if (HttpResponse.isInstance(response)) {\n                    const { headers = {} } = response;\n                    const headerEntries = Object.entries(headers);\n                    error.$metadata = {\n                        httpStatusCode: response.statusCode,\n                        requestId: findHeader(/^x-[\\w-]+-request-?id$/, headerEntries),\n                        extendedRequestId: findHeader(/^x-[\\w-]+-id-2$/, headerEntries),\n                        cfId: findHeader(/^x-[\\w-]+-cf-id$/, headerEntries),\n                    };\n                }\n            }\n            catch (e) {\n            }\n        }\n        throw error;\n    }\n};\nconst findHeader = (pattern, headers) => {\n    return (headers.find(([k]) => {\n        return k.match(pattern);\n    }) || [void 0, void 1])[1];\n};\n","export function parseQueryString(querystring) {\n    const query = {};\n    querystring = querystring.replace(/^\\?/, \"\");\n    if (querystring) {\n        for (const pair of querystring.split(\"&\")) {\n            let [key, value = null] = pair.split(\"=\");\n            key = decodeURIComponent(key);\n            if (value) {\n                value = decodeURIComponent(value);\n            }\n            if (!(key in query)) {\n                query[key] = value;\n            }\n            else if (Array.isArray(query[key])) {\n                query[key].push(value);\n            }\n            else {\n                query[key] = [query[key], value];\n            }\n        }\n    }\n    return query;\n}\n","import { parseQueryString } from \"@smithy/querystring-parser\";\nexport const parseUrl = (url) => {\n    if (typeof url === \"string\") {\n        return parseUrl(new URL(url));\n    }\n    const { hostname, pathname, port, protocol, search } = url;\n    let query;\n    if (search) {\n        query = parseQueryString(search);\n    }\n    return {\n        hostname,\n        port: port ? parseInt(port) : undefined,\n        protocol,\n        path: pathname,\n        query,\n    };\n};\n","import { parseUrl } from \"@smithy/url-parser\";\nexport const toEndpointV1 = (endpoint) => {\n    if (typeof endpoint === \"object\") {\n        if (\"url\" in endpoint) {\n            const v1Endpoint = parseUrl(endpoint.url);\n            if (endpoint.headers) {\n                v1Endpoint.headers = {};\n                for (const [name, values] of Object.entries(endpoint.headers)) {\n                    v1Endpoint.headers[name.toLowerCase()] = values.join(\", \");\n                }\n            }\n            return v1Endpoint;\n        }\n        return endpoint;\n    }\n    return parseUrl(endpoint);\n};\n","import { toEndpointV1 } from \"@smithy/core/endpoints\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { operation } from \"../schemas/operation\";\nexport const schemaSerializationMiddleware = (config) => (next, context) => async (args) => {\n    const { operationSchema } = getSmithyContext(context);\n    const [, ns, n, t, i, o] = operationSchema ?? [];\n    const endpoint = context.endpointV2\n        ? async () => toEndpointV1(context.endpointV2)\n        : config.endpoint;\n    const request = await config.protocol.serializeRequest(operation(ns, n, t, i, o), args.input, {\n        ...config,\n        ...context,\n        endpoint,\n    });\n    return next({\n        ...args,\n        request,\n    });\n};\n","import { schemaDeserializationMiddleware } from \"./schemaDeserializationMiddleware\";\nimport { schemaSerializationMiddleware } from \"./schemaSerializationMiddleware\";\nexport const deserializerMiddlewareOption = {\n    name: \"deserializerMiddleware\",\n    step: \"deserialize\",\n    tags: [\"DESERIALIZER\"],\n    override: true,\n};\nexport const serializerMiddlewareOption = {\n    name: \"serializerMiddleware\",\n    step: \"serialize\",\n    tags: [\"SERIALIZER\"],\n    override: true,\n};\nexport function getSchemaSerdePlugin(config) {\n    return {\n        applyToStack: (commandStack) => {\n            commandStack.add(schemaSerializationMiddleware(config), serializerMiddlewareOption);\n            commandStack.add(schemaDeserializationMiddleware(config), deserializerMiddlewareOption);\n            config.protocol.setSerdeContext(config);\n        },\n    };\n}\n","export const traitsCache = [];\nexport function translateTraits(indicator) {\n    if (typeof indicator === \"object\") {\n        return indicator;\n    }\n    indicator = indicator | 0;\n    if (traitsCache[indicator]) {\n        return traitsCache[indicator];\n    }\n    const traits = {};\n    let i = 0;\n    for (const trait of [\n        \"httpLabel\",\n        \"idempotent\",\n        \"idempotencyToken\",\n        \"sensitive\",\n        \"httpPayload\",\n        \"httpResponseCode\",\n        \"httpQueryParams\",\n    ]) {\n        if (((indicator >> i++) & 1) === 1) {\n            traits[trait] = 1;\n        }\n    }\n    return (traitsCache[indicator] = traits);\n}\n","import { deref } from \"../deref\";\nimport { translateTraits } from \"./translateTraits\";\nconst anno = {\n    it: Symbol.for(\"@smithy/nor-struct-it\"),\n    ns: Symbol.for(\"@smithy/ns\"),\n};\nexport const simpleSchemaCacheN = [];\nexport const simpleSchemaCacheS = {};\nexport class NormalizedSchema {\n    ref;\n    memberName;\n    static symbol = Symbol.for(\"@smithy/nor\");\n    symbol = NormalizedSchema.symbol;\n    name;\n    schema;\n    _isMemberSchema;\n    traits;\n    memberTraits;\n    normalizedTraits;\n    constructor(ref, memberName) {\n        this.ref = ref;\n        this.memberName = memberName;\n        const traitStack = [];\n        let _ref = ref;\n        let schema = ref;\n        this._isMemberSchema = false;\n        while (isMemberSchema(_ref)) {\n            traitStack.push(_ref[1]);\n            _ref = _ref[0];\n            schema = deref(_ref);\n            this._isMemberSchema = true;\n        }\n        if (traitStack.length > 0) {\n            this.memberTraits = {};\n            for (let i = traitStack.length - 1; i >= 0; --i) {\n                const traitSet = traitStack[i];\n                Object.assign(this.memberTraits, translateTraits(traitSet));\n            }\n        }\n        else {\n            this.memberTraits = 0;\n        }\n        if (schema instanceof NormalizedSchema) {\n            const computedMemberTraits = this.memberTraits;\n            Object.assign(this, schema);\n            this.memberTraits = Object.assign({}, computedMemberTraits, schema.getMemberTraits(), this.getMemberTraits());\n            this.normalizedTraits = void 0;\n            this.memberName = memberName ?? schema.memberName;\n            return;\n        }\n        this.schema = deref(schema);\n        if (isStaticSchema(this.schema)) {\n            this.name = `${this.schema[1]}#${this.schema[2]}`;\n            this.traits = this.schema[3];\n        }\n        else {\n            this.name = this.memberName ?? String(schema);\n            this.traits = 0;\n        }\n        if (this._isMemberSchema && !memberName) {\n            throw new Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(true)} missing member name.`);\n        }\n    }\n    static [Symbol.hasInstance](lhs) {\n        const isPrototype = this.prototype.isPrototypeOf(lhs);\n        if (!isPrototype && typeof lhs === \"object\" && lhs !== null) {\n            const ns = lhs;\n            return ns.symbol === this.symbol;\n        }\n        return isPrototype;\n    }\n    static of(ref) {\n        const keyAble = typeof ref === \"function\" || (typeof ref === \"object\" && ref !== null);\n        if (typeof ref === \"number\") {\n            if (simpleSchemaCacheN[ref]) {\n                return simpleSchemaCacheN[ref];\n            }\n        }\n        else if (typeof ref === \"string\") {\n            if (simpleSchemaCacheS[ref]) {\n                return simpleSchemaCacheS[ref];\n            }\n        }\n        else if (keyAble) {\n            if (ref[anno.ns]) {\n                return ref[anno.ns];\n            }\n        }\n        const sc = deref(ref);\n        if (sc instanceof NormalizedSchema) {\n            return sc;\n        }\n        if (isMemberSchema(sc)) {\n            const [ns, traits] = sc;\n            if (ns instanceof NormalizedSchema) {\n                Object.assign(ns.getMergedTraits(), translateTraits(traits));\n                return ns;\n            }\n            throw new Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(ref, null, 2)}.`);\n        }\n        const ns = new NormalizedSchema(sc);\n        if (keyAble) {\n            return (ref[anno.ns] = ns);\n        }\n        if (typeof sc === \"string\") {\n            return (simpleSchemaCacheS[sc] = ns);\n        }\n        if (typeof sc === \"number\") {\n            return (simpleSchemaCacheN[sc] = ns);\n        }\n        return ns;\n    }\n    getSchema() {\n        const sc = this.schema;\n        if (Array.isArray(sc) && sc[0] === 0) {\n            return sc[4];\n        }\n        return sc;\n    }\n    getName(withNamespace = false) {\n        const { name } = this;\n        const short = !withNamespace && name && name.includes(\"#\");\n        return short ? name.split(\"#\")[1] : name || undefined;\n    }\n    getMemberName() {\n        return this.memberName;\n    }\n    isMemberSchema() {\n        return this._isMemberSchema;\n    }\n    isListSchema() {\n        const sc = this.getSchema();\n        return typeof sc === \"number\"\n            ? sc >= 64 && sc < 128\n            : sc[0] === 1;\n    }\n    isMapSchema() {\n        const sc = this.getSchema();\n        return typeof sc === \"number\"\n            ? sc >= 128 && sc <= 0b1111_1111\n            : sc[0] === 2;\n    }\n    isStructSchema() {\n        const sc = this.getSchema();\n        if (typeof sc !== \"object\") {\n            return false;\n        }\n        const id = sc[0];\n        return (id === 3 ||\n            id === -3 ||\n            id === 4);\n    }\n    isUnionSchema() {\n        const sc = this.getSchema();\n        if (typeof sc !== \"object\") {\n            return false;\n        }\n        return sc[0] === 4;\n    }\n    isBlobSchema() {\n        const sc = this.getSchema();\n        return sc === 21 || sc === 42;\n    }\n    isTimestampSchema() {\n        const sc = this.getSchema();\n        return (typeof sc === \"number\" &&\n            sc >= 4 &&\n            sc <= 7);\n    }\n    isUnitSchema() {\n        return this.getSchema() === \"unit\";\n    }\n    isDocumentSchema() {\n        return this.getSchema() === 15;\n    }\n    isStringSchema() {\n        return this.getSchema() === 0;\n    }\n    isBooleanSchema() {\n        return this.getSchema() === 2;\n    }\n    isNumericSchema() {\n        return this.getSchema() === 1;\n    }\n    isBigIntegerSchema() {\n        return this.getSchema() === 17;\n    }\n    isBigDecimalSchema() {\n        return this.getSchema() === 19;\n    }\n    isStreaming() {\n        const { streaming } = this.getMergedTraits();\n        return !!streaming || this.getSchema() === 42;\n    }\n    isIdempotencyToken() {\n        return !!this.getMergedTraits().idempotencyToken;\n    }\n    getMergedTraits() {\n        return (this.normalizedTraits ??\n            (this.normalizedTraits = {\n                ...this.getOwnTraits(),\n                ...this.getMemberTraits(),\n            }));\n    }\n    getMemberTraits() {\n        return translateTraits(this.memberTraits);\n    }\n    getOwnTraits() {\n        return translateTraits(this.traits);\n    }\n    getKeySchema() {\n        const [isDoc, isMap] = [this.isDocumentSchema(), this.isMapSchema()];\n        if (!isDoc && !isMap) {\n            throw new Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(true)}`);\n        }\n        const schema = this.getSchema();\n        const memberSchema = isDoc\n            ? 15\n            : schema[4] ?? 0;\n        return member([memberSchema, 0], \"key\");\n    }\n    getValueSchema() {\n        const sc = this.getSchema();\n        const [isDoc, isMap, isList] = [this.isDocumentSchema(), this.isMapSchema(), this.isListSchema()];\n        const memberSchema = typeof sc === \"number\"\n            ? 0b0011_1111 & sc\n            : sc && typeof sc === \"object\" && (isMap || isList)\n                ? sc[3 + sc[0]]\n                : isDoc\n                    ? 15\n                    : void 0;\n        if (memberSchema != null) {\n            return member([memberSchema, 0], isMap ? \"value\" : \"member\");\n        }\n        throw new Error(`@smithy/core/schema - ${this.getName(true)} has no value member.`);\n    }\n    getMemberSchema(memberName) {\n        const struct = this.getSchema();\n        if (this.isStructSchema() && struct[4].includes(memberName)) {\n            const i = struct[4].indexOf(memberName);\n            const memberSchema = struct[5][i];\n            return member(isMemberSchema(memberSchema) ? memberSchema : [memberSchema, 0], memberName);\n        }\n        if (this.isDocumentSchema()) {\n            return member([15, 0], memberName);\n        }\n        throw new Error(`@smithy/core/schema - ${this.getName(true)} has no member=${memberName}.`);\n    }\n    getMemberSchemas() {\n        const buffer = {};\n        try {\n            for (const [k, v] of this.structIterator()) {\n                buffer[k] = v;\n            }\n        }\n        catch (ignored) { }\n        return buffer;\n    }\n    getEventStreamMember() {\n        if (this.isStructSchema()) {\n            for (const [memberName, memberSchema] of this.structIterator()) {\n                if (memberSchema.isStreaming() && memberSchema.isStructSchema()) {\n                    return memberName;\n                }\n            }\n        }\n        return \"\";\n    }\n    *structIterator() {\n        if (this.isUnitSchema()) {\n            return;\n        }\n        if (!this.isStructSchema()) {\n            throw new Error(\"@smithy/core/schema - cannot iterate non-struct schema.\");\n        }\n        const struct = this.getSchema();\n        const z = struct[4].length;\n        let it = struct[anno.it];\n        if (it && z === it.length) {\n            yield* it;\n            return;\n        }\n        it = Array(z);\n        for (let i = 0; i < z; ++i) {\n            const k = struct[4][i];\n            const v = member([struct[5][i], 0], k);\n            yield (it[i] = [k, v]);\n        }\n        struct[anno.it] = it;\n    }\n}\nfunction member(memberSchema, memberName) {\n    if (memberSchema instanceof NormalizedSchema) {\n        return Object.assign(memberSchema, {\n            memberName,\n            _isMemberSchema: true,\n        });\n    }\n    const internalCtorAccess = NormalizedSchema;\n    return new internalCtorAccess(memberSchema, memberName);\n}\nconst isMemberSchema = (sc) => Array.isArray(sc) && sc.length === 2;\nexport const isStaticSchema = (sc) => Array.isArray(sc) && sc.length >= 5;\n","export class TypeRegistry {\n    namespace;\n    schemas;\n    exceptions;\n    static registries = new Map();\n    constructor(namespace, schemas = new Map(), exceptions = new Map()) {\n        this.namespace = namespace;\n        this.schemas = schemas;\n        this.exceptions = exceptions;\n    }\n    static for(namespace) {\n        if (!TypeRegistry.registries.has(namespace)) {\n            TypeRegistry.registries.set(namespace, new TypeRegistry(namespace));\n        }\n        return TypeRegistry.registries.get(namespace);\n    }\n    copyFrom(other) {\n        const { schemas, exceptions } = this;\n        for (const [k, v] of other.schemas) {\n            if (!schemas.has(k)) {\n                schemas.set(k, v);\n            }\n        }\n        for (const [k, v] of other.exceptions) {\n            if (!exceptions.has(k)) {\n                exceptions.set(k, v);\n            }\n        }\n    }\n    register(shapeId, schema) {\n        const qualifiedName = this.normalizeShapeId(shapeId);\n        for (const r of [this, TypeRegistry.for(qualifiedName.split(\"#\")[0])]) {\n            r.schemas.set(qualifiedName, schema);\n        }\n    }\n    getSchema(shapeId) {\n        const id = this.normalizeShapeId(shapeId);\n        if (!this.schemas.has(id)) {\n            throw new Error(`@smithy/core/schema - schema not found for ${id}`);\n        }\n        return this.schemas.get(id);\n    }\n    registerError(es, ctor) {\n        const $error = es;\n        const ns = $error[1];\n        for (const r of [this, TypeRegistry.for(ns)]) {\n            r.schemas.set(ns + \"#\" + $error[2], $error);\n            r.exceptions.set($error, ctor);\n        }\n    }\n    getErrorCtor(es) {\n        const $error = es;\n        if (this.exceptions.has($error)) {\n            return this.exceptions.get($error);\n        }\n        const registry = TypeRegistry.for($error[1]);\n        return registry.exceptions.get($error);\n    }\n    getBaseException() {\n        for (const exceptionKey of this.exceptions.keys()) {\n            if (Array.isArray(exceptionKey)) {\n                const [, ns, name] = exceptionKey;\n                const id = ns + \"#\" + name;\n                if (id.startsWith(\"smithy.ts.sdk.synthetic.\") && id.endsWith(\"ServiceException\")) {\n                    return exceptionKey;\n                }\n            }\n        }\n        return undefined;\n    }\n    find(predicate) {\n        return [...this.schemas.values()].find(predicate);\n    }\n    clear() {\n        this.schemas.clear();\n        this.exceptions.clear();\n    }\n    normalizeShapeId(shapeId) {\n        if (shapeId.includes(\"#\")) {\n            return shapeId;\n        }\n        return this.namespace + \"#\" + shapeId;\n    }\n}\n","export const parseBoolean = (value) => {\n    switch (value) {\n        case \"true\":\n            return true;\n        case \"false\":\n            return false;\n        default:\n            throw new Error(`Unable to parse boolean value \"${value}\"`);\n    }\n};\nexport const expectBoolean = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value === \"number\") {\n        if (value === 0 || value === 1) {\n            logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n        }\n        if (value === 0) {\n            return false;\n        }\n        if (value === 1) {\n            return true;\n        }\n    }\n    if (typeof value === \"string\") {\n        const lower = value.toLowerCase();\n        if (lower === \"false\" || lower === \"true\") {\n            logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n        }\n        if (lower === \"false\") {\n            return false;\n        }\n        if (lower === \"true\") {\n            return true;\n        }\n    }\n    if (typeof value === \"boolean\") {\n        return value;\n    }\n    throw new TypeError(`Expected boolean, got ${typeof value}: ${value}`);\n};\nexport const expectNumber = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value === \"string\") {\n        const parsed = parseFloat(value);\n        if (!Number.isNaN(parsed)) {\n            if (String(parsed) !== String(value)) {\n                logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));\n            }\n            return parsed;\n        }\n    }\n    if (typeof value === \"number\") {\n        return value;\n    }\n    throw new TypeError(`Expected number, got ${typeof value}: ${value}`);\n};\nconst MAX_FLOAT = Math.ceil(2 ** 127 * (2 - 2 ** -23));\nexport const expectFloat32 = (value) => {\n    const expected = expectNumber(value);\n    if (expected !== undefined && !Number.isNaN(expected) && expected !== Infinity && expected !== -Infinity) {\n        if (Math.abs(expected) > MAX_FLOAT) {\n            throw new TypeError(`Expected 32-bit float, got ${value}`);\n        }\n    }\n    return expected;\n};\nexport const expectLong = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (Number.isInteger(value) && !Number.isNaN(value)) {\n        return value;\n    }\n    throw new TypeError(`Expected integer, got ${typeof value}: ${value}`);\n};\nexport const expectInt = expectLong;\nexport const expectInt32 = (value) => expectSizedInt(value, 32);\nexport const expectShort = (value) => expectSizedInt(value, 16);\nexport const expectByte = (value) => expectSizedInt(value, 8);\nconst expectSizedInt = (value, size) => {\n    const expected = expectLong(value);\n    if (expected !== undefined && castInt(expected, size) !== expected) {\n        throw new TypeError(`Expected ${size}-bit integer, got ${value}`);\n    }\n    return expected;\n};\nconst castInt = (value, size) => {\n    switch (size) {\n        case 32:\n            return Int32Array.of(value)[0];\n        case 16:\n            return Int16Array.of(value)[0];\n        case 8:\n            return Int8Array.of(value)[0];\n    }\n};\nexport const expectNonNull = (value, location) => {\n    if (value === null || value === undefined) {\n        if (location) {\n            throw new TypeError(`Expected a non-null value for ${location}`);\n        }\n        throw new TypeError(\"Expected a non-null value\");\n    }\n    return value;\n};\nexport const expectObject = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value === \"object\" && !Array.isArray(value)) {\n        return value;\n    }\n    const receivedType = Array.isArray(value) ? \"array\" : typeof value;\n    throw new TypeError(`Expected object, got ${receivedType}: ${value}`);\n};\nexport const expectString = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value === \"string\") {\n        return value;\n    }\n    if ([\"boolean\", \"number\", \"bigint\"].includes(typeof value)) {\n        logger.warn(stackTraceWarning(`Expected string, got ${typeof value}: ${value}`));\n        return String(value);\n    }\n    throw new TypeError(`Expected string, got ${typeof value}: ${value}`);\n};\nexport const expectUnion = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    const asObject = expectObject(value);\n    const setKeys = Object.entries(asObject)\n        .filter(([, v]) => v != null)\n        .map(([k]) => k);\n    if (setKeys.length === 0) {\n        throw new TypeError(`Unions must have exactly one non-null member. None were found.`);\n    }\n    if (setKeys.length > 1) {\n        throw new TypeError(`Unions must have exactly one non-null member. Keys ${setKeys} were not null.`);\n    }\n    return asObject;\n};\nexport const strictParseDouble = (value) => {\n    if (typeof value == \"string\") {\n        return expectNumber(parseNumber(value));\n    }\n    return expectNumber(value);\n};\nexport const strictParseFloat = strictParseDouble;\nexport const strictParseFloat32 = (value) => {\n    if (typeof value == \"string\") {\n        return expectFloat32(parseNumber(value));\n    }\n    return expectFloat32(value);\n};\nconst NUMBER_REGEX = /(-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(-?Infinity)|(NaN)/g;\nconst parseNumber = (value) => {\n    const matches = value.match(NUMBER_REGEX);\n    if (matches === null || matches[0].length !== value.length) {\n        throw new TypeError(`Expected real number, got implicit NaN`);\n    }\n    return parseFloat(value);\n};\nexport const limitedParseDouble = (value) => {\n    if (typeof value == \"string\") {\n        return parseFloatString(value);\n    }\n    return expectNumber(value);\n};\nexport const handleFloat = limitedParseDouble;\nexport const limitedParseFloat = limitedParseDouble;\nexport const limitedParseFloat32 = (value) => {\n    if (typeof value == \"string\") {\n        return parseFloatString(value);\n    }\n    return expectFloat32(value);\n};\nconst parseFloatString = (value) => {\n    switch (value) {\n        case \"NaN\":\n            return NaN;\n        case \"Infinity\":\n            return Infinity;\n        case \"-Infinity\":\n            return -Infinity;\n        default:\n            throw new Error(`Unable to parse float value: ${value}`);\n    }\n};\nexport const strictParseLong = (value) => {\n    if (typeof value === \"string\") {\n        return expectLong(parseNumber(value));\n    }\n    return expectLong(value);\n};\nexport const strictParseInt = strictParseLong;\nexport const strictParseInt32 = (value) => {\n    if (typeof value === \"string\") {\n        return expectInt32(parseNumber(value));\n    }\n    return expectInt32(value);\n};\nexport const strictParseShort = (value) => {\n    if (typeof value === \"string\") {\n        return expectShort(parseNumber(value));\n    }\n    return expectShort(value);\n};\nexport const strictParseByte = (value) => {\n    if (typeof value === \"string\") {\n        return expectByte(parseNumber(value));\n    }\n    return expectByte(value);\n};\nconst stackTraceWarning = (message) => {\n    return String(new TypeError(message).stack || message)\n        .split(\"\\n\")\n        .slice(0, 5)\n        .filter((s) => !s.includes(\"stackTraceWarning\"))\n        .join(\"\\n\");\n};\nexport const logger = {\n    warn: console.warn,\n};\n","import { strictParseByte, strictParseDouble, strictParseFloat32, strictParseShort } from \"./parse-utils\";\nconst DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nexport function dateToUtcString(date) {\n    const year = date.getUTCFullYear();\n    const month = date.getUTCMonth();\n    const dayOfWeek = date.getUTCDay();\n    const dayOfMonthInt = date.getUTCDate();\n    const hoursInt = date.getUTCHours();\n    const minutesInt = date.getUTCMinutes();\n    const secondsInt = date.getUTCSeconds();\n    const dayOfMonthString = dayOfMonthInt < 10 ? `0${dayOfMonthInt}` : `${dayOfMonthInt}`;\n    const hoursString = hoursInt < 10 ? `0${hoursInt}` : `${hoursInt}`;\n    const minutesString = minutesInt < 10 ? `0${minutesInt}` : `${minutesInt}`;\n    const secondsString = secondsInt < 10 ? `0${secondsInt}` : `${secondsInt}`;\n    return `${DAYS[dayOfWeek]}, ${dayOfMonthString} ${MONTHS[month]} ${year} ${hoursString}:${minutesString}:${secondsString} GMT`;\n}\nconst RFC3339 = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?[zZ]$/);\nexport const parseRfc3339DateTime = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n    }\n    const match = RFC3339.exec(value);\n    if (!match) {\n        throw new TypeError(\"Invalid RFC-3339 date-time value\");\n    }\n    const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n    const year = strictParseShort(stripLeadingZeroes(yearStr));\n    const month = parseDateValue(monthStr, \"month\", 1, 12);\n    const day = parseDateValue(dayStr, \"day\", 1, 31);\n    return buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n};\nconst RFC3339_WITH_OFFSET = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(([-+]\\d{2}\\:\\d{2})|[zZ])$/);\nexport const parseRfc3339DateTimeWithOffset = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n    }\n    const match = RFC3339_WITH_OFFSET.exec(value);\n    if (!match) {\n        throw new TypeError(\"Invalid RFC-3339 date-time value\");\n    }\n    const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, offsetStr] = match;\n    const year = strictParseShort(stripLeadingZeroes(yearStr));\n    const month = parseDateValue(monthStr, \"month\", 1, 12);\n    const day = parseDateValue(dayStr, \"day\", 1, 31);\n    const date = buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n    if (offsetStr.toUpperCase() != \"Z\") {\n        date.setTime(date.getTime() - parseOffsetToMilliseconds(offsetStr));\n    }\n    return date;\n};\nconst IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? (\\d{4})$/);\nexport const parseRfc7231DateTime = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    if (typeof value !== \"string\") {\n        throw new TypeError(\"RFC-7231 date-times must be expressed as strings\");\n    }\n    let match = IMF_FIXDATE.exec(value);\n    if (match) {\n        const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n        return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n    }\n    match = RFC_850_DATE.exec(value);\n    if (match) {\n        const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n        return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), {\n            hours,\n            minutes,\n            seconds,\n            fractionalMilliseconds,\n        }));\n    }\n    match = ASC_TIME.exec(value);\n    if (match) {\n        const [_, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, yearStr] = match;\n        return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr.trimLeft(), \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n    }\n    throw new TypeError(\"Invalid RFC-7231 date-time value\");\n};\nexport const parseEpochTimestamp = (value) => {\n    if (value === null || value === undefined) {\n        return undefined;\n    }\n    let valueAsDouble;\n    if (typeof value === \"number\") {\n        valueAsDouble = value;\n    }\n    else if (typeof value === \"string\") {\n        valueAsDouble = strictParseDouble(value);\n    }\n    else if (typeof value === \"object\" && value.tag === 1) {\n        valueAsDouble = value.value;\n    }\n    else {\n        throw new TypeError(\"Epoch timestamps must be expressed as floating point numbers or their string representation\");\n    }\n    if (Number.isNaN(valueAsDouble) || valueAsDouble === Infinity || valueAsDouble === -Infinity) {\n        throw new TypeError(\"Epoch timestamps must be valid, non-Infinite, non-NaN numerics\");\n    }\n    return new Date(Math.round(valueAsDouble * 1000));\n};\nconst buildDate = (year, month, day, time) => {\n    const adjustedMonth = month - 1;\n    validateDayOfMonth(year, adjustedMonth, day);\n    return new Date(Date.UTC(year, adjustedMonth, day, parseDateValue(time.hours, \"hour\", 0, 23), parseDateValue(time.minutes, \"minute\", 0, 59), parseDateValue(time.seconds, \"seconds\", 0, 60), parseMilliseconds(time.fractionalMilliseconds)));\n};\nconst parseTwoDigitYear = (value) => {\n    const thisYear = new Date().getUTCFullYear();\n    const valueInThisCentury = Math.floor(thisYear / 100) * 100 + strictParseShort(stripLeadingZeroes(value));\n    if (valueInThisCentury < thisYear) {\n        return valueInThisCentury + 100;\n    }\n    return valueInThisCentury;\n};\nconst FIFTY_YEARS_IN_MILLIS = 50 * 365 * 24 * 60 * 60 * 1000;\nconst adjustRfc850Year = (input) => {\n    if (input.getTime() - new Date().getTime() > FIFTY_YEARS_IN_MILLIS) {\n        return new Date(Date.UTC(input.getUTCFullYear() - 100, input.getUTCMonth(), input.getUTCDate(), input.getUTCHours(), input.getUTCMinutes(), input.getUTCSeconds(), input.getUTCMilliseconds()));\n    }\n    return input;\n};\nconst parseMonthByShortName = (value) => {\n    const monthIdx = MONTHS.indexOf(value);\n    if (monthIdx < 0) {\n        throw new TypeError(`Invalid month: ${value}`);\n    }\n    return monthIdx + 1;\n};\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst validateDayOfMonth = (year, month, day) => {\n    let maxDays = DAYS_IN_MONTH[month];\n    if (month === 1 && isLeapYear(year)) {\n        maxDays = 29;\n    }\n    if (day > maxDays) {\n        throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year}: ${day}`);\n    }\n};\nconst isLeapYear = (year) => {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n};\nconst parseDateValue = (value, type, lower, upper) => {\n    const dateVal = strictParseByte(stripLeadingZeroes(value));\n    if (dateVal < lower || dateVal > upper) {\n        throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);\n    }\n    return dateVal;\n};\nconst parseMilliseconds = (value) => {\n    if (value === null || value === undefined) {\n        return 0;\n    }\n    return strictParseFloat32(\"0.\" + value) * 1000;\n};\nconst parseOffsetToMilliseconds = (value) => {\n    const directionStr = value[0];\n    let direction = 1;\n    if (directionStr == \"+\") {\n        direction = 1;\n    }\n    else if (directionStr == \"-\") {\n        direction = -1;\n    }\n    else {\n        throw new TypeError(`Offset direction, ${directionStr}, must be \"+\" or \"-\"`);\n    }\n    const hour = Number(value.substring(1, 3));\n    const minute = Number(value.substring(4, 6));\n    return direction * (hour * 60 + minute) * 60 * 1000;\n};\nconst stripLeadingZeroes = (value) => {\n    let idx = 0;\n    while (idx < value.length - 1 && value.charAt(idx) === \"0\") {\n        idx++;\n    }\n    if (idx === 0) {\n        return value;\n    }\n    return value.slice(idx);\n};\n","export const randomUUID = typeof crypto !== \"undefined\" && crypto.randomUUID && crypto.randomUUID.bind(crypto);\n","import { randomUUID } from \"./randomUUID\";\nconst decimalToHex = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nexport const v4 = () => {\n    if (randomUUID) {\n        return randomUUID();\n    }\n    const rnds = new Uint8Array(16);\n    crypto.getRandomValues(rnds);\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    return (decimalToHex[rnds[0]] +\n        decimalToHex[rnds[1]] +\n        decimalToHex[rnds[2]] +\n        decimalToHex[rnds[3]] +\n        \"-\" +\n        decimalToHex[rnds[4]] +\n        decimalToHex[rnds[5]] +\n        \"-\" +\n        decimalToHex[rnds[6]] +\n        decimalToHex[rnds[7]] +\n        \"-\" +\n        decimalToHex[rnds[8]] +\n        decimalToHex[rnds[9]] +\n        \"-\" +\n        decimalToHex[rnds[10]] +\n        decimalToHex[rnds[11]] +\n        decimalToHex[rnds[12]] +\n        decimalToHex[rnds[13]] +\n        decimalToHex[rnds[14]] +\n        decimalToHex[rnds[15]]);\n};\n","export const LazyJsonString = function LazyJsonString(val) {\n    const str = Object.assign(new String(val), {\n        deserializeJSON() {\n            return JSON.parse(String(val));\n        },\n        toString() {\n            return String(val);\n        },\n        toJSON() {\n            return String(val);\n        },\n    });\n    return str;\n};\nLazyJsonString.from = (object) => {\n    if (object && typeof object === \"object\" && (object instanceof LazyJsonString || \"deserializeJSON\" in object)) {\n        return object;\n    }\n    else if (typeof object === \"string\" || Object.getPrototypeOf(object) === String.prototype) {\n        return LazyJsonString(String(object));\n    }\n    return LazyJsonString(JSON.stringify(object));\n};\nLazyJsonString.fromObject = LazyJsonString.from;\n","const format = /^-?\\d*(\\.\\d+)?$/;\nexport class NumericValue {\n    string;\n    type;\n    constructor(string, type) {\n        this.string = string;\n        this.type = type;\n        if (!format.test(string)) {\n            throw new Error(`@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point \".\", and an optional negation prefix \"-\".`);\n        }\n    }\n    toString() {\n        return this.string;\n    }\n    static [Symbol.hasInstance](object) {\n        if (!object || typeof object !== \"object\") {\n            return false;\n        }\n        const _nv = object;\n        return NumericValue.prototype.isPrototypeOf(object) || (_nv.type === \"bigDecimal\" && format.test(_nv.string));\n    }\n}\nexport function nv(input) {\n    return new NumericValue(String(input), \"bigDecimal\");\n}\n","export class SerdeContext {\n    serdeContext;\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n    }\n}\n","import { NormalizedSchema, translateTraits, TypeRegistry } from \"@smithy/core/schema\";\nimport { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { SerdeContext } from \"./SerdeContext\";\nexport class HttpProtocol extends SerdeContext {\n    options;\n    compositeErrorRegistry;\n    constructor(options) {\n        super();\n        this.options = options;\n        this.compositeErrorRegistry = TypeRegistry.for(options.defaultNamespace);\n        for (const etr of options.errorTypeRegistries ?? []) {\n            this.compositeErrorRegistry.copyFrom(etr);\n        }\n    }\n    getRequestType() {\n        return HttpRequest;\n    }\n    getResponseType() {\n        return HttpResponse;\n    }\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n        this.serializer.setSerdeContext(serdeContext);\n        this.deserializer.setSerdeContext(serdeContext);\n        if (this.getPayloadCodec()) {\n            this.getPayloadCodec().setSerdeContext(serdeContext);\n        }\n    }\n    updateServiceEndpoint(request, endpoint) {\n        if (\"url\" in endpoint) {\n            request.protocol = endpoint.url.protocol;\n            request.hostname = endpoint.url.hostname;\n            request.port = endpoint.url.port ? Number(endpoint.url.port) : undefined;\n            request.path = endpoint.url.pathname;\n            request.fragment = endpoint.url.hash || void 0;\n            request.username = endpoint.url.username || void 0;\n            request.password = endpoint.url.password || void 0;\n            if (!request.query) {\n                request.query = {};\n            }\n            for (const [k, v] of endpoint.url.searchParams.entries()) {\n                request.query[k] = v;\n            }\n            if (endpoint.headers) {\n                for (const [name, values] of Object.entries(endpoint.headers)) {\n                    request.headers[name] = values.join(\", \");\n                }\n            }\n            return request;\n        }\n        else {\n            request.protocol = endpoint.protocol;\n            request.hostname = endpoint.hostname;\n            request.port = endpoint.port ? Number(endpoint.port) : undefined;\n            request.path = endpoint.path;\n            request.query = {\n                ...endpoint.query,\n            };\n            if (endpoint.headers) {\n                for (const [name, value] of Object.entries(endpoint.headers)) {\n                    request.headers[name] = value;\n                }\n            }\n            return request;\n        }\n    }\n    setHostPrefix(request, operationSchema, input) {\n        if (this.serdeContext?.disableHostPrefix) {\n            return;\n        }\n        const inputNs = NormalizedSchema.of(operationSchema.input);\n        const opTraits = translateTraits(operationSchema.traits ?? {});\n        if (opTraits.endpoint) {\n            let hostPrefix = opTraits.endpoint?.[0];\n            if (typeof hostPrefix === \"string\") {\n                const hostLabelInputs = [...inputNs.structIterator()].filter(([, member]) => member.getMergedTraits().hostLabel);\n                for (const [name] of hostLabelInputs) {\n                    const replacement = input[name];\n                    if (typeof replacement !== \"string\") {\n                        throw new Error(`@smithy/core/schema - ${name} in input must be a string as hostLabel.`);\n                    }\n                    hostPrefix = hostPrefix.replace(`{${name}}`, replacement);\n                }\n                request.hostname = hostPrefix + request.hostname;\n            }\n        }\n    }\n    deserializeMetadata(output) {\n        return {\n            httpStatusCode: output.statusCode,\n            requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n            extendedRequestId: output.headers[\"x-amz-id-2\"],\n            cfId: output.headers[\"x-amz-cf-id\"],\n        };\n    }\n    async serializeEventStream({ eventStream, requestSchema, initialRequest, }) {\n        const eventStreamSerde = await this.loadEventStreamCapability();\n        return eventStreamSerde.serializeEventStream({\n            eventStream,\n            requestSchema,\n            initialRequest,\n        });\n    }\n    async deserializeEventStream({ response, responseSchema, initialResponseContainer, }) {\n        const eventStreamSerde = await this.loadEventStreamCapability();\n        return eventStreamSerde.deserializeEventStream({\n            response,\n            responseSchema,\n            initialResponseContainer,\n        });\n    }\n    async loadEventStreamCapability() {\n        const { EventStreamSerde } = await import(\"@smithy/core/event-streams\");\n        return new EventStreamSerde({\n            marshaller: this.getEventStreamMarshaller(),\n            serializer: this.serializer,\n            deserializer: this.deserializer,\n            serdeContext: this.serdeContext,\n            defaultContentType: this.getDefaultContentType(),\n        });\n    }\n    getDefaultContentType() {\n        throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`);\n    }\n    async deserializeHttpMessage(schema, context, response, arg4, arg5) {\n        void schema;\n        void context;\n        void response;\n        void arg4;\n        void arg5;\n        return [];\n    }\n    getEventStreamMarshaller() {\n        const context = this.serdeContext;\n        if (!context.eventStreamMarshaller) {\n            throw new Error(\"@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.\");\n        }\n        return context.eventStreamMarshaller;\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { collectBody } from \"./collect-stream-body\";\nimport { HttpProtocol } from \"./HttpProtocol\";\nexport class RpcProtocol extends HttpProtocol {\n    async serializeRequest(operationSchema, _input, context) {\n        const serializer = this.serializer;\n        const query = {};\n        const headers = {};\n        const endpoint = await context.endpoint();\n        const ns = NormalizedSchema.of(operationSchema?.input);\n        const schema = ns.getSchema();\n        let payload;\n        const input = _input && typeof _input === \"object\" ? _input : {};\n        const request = new HttpRequest({\n            protocol: \"\",\n            hostname: \"\",\n            port: undefined,\n            path: \"/\",\n            fragment: undefined,\n            query: query,\n            headers: headers,\n            body: undefined,\n        });\n        if (endpoint) {\n            this.updateServiceEndpoint(request, endpoint);\n            this.setHostPrefix(request, operationSchema, input);\n        }\n        if (input) {\n            const eventStreamMember = ns.getEventStreamMember();\n            if (eventStreamMember) {\n                if (input[eventStreamMember]) {\n                    const initialRequest = {};\n                    for (const [memberName, memberSchema] of ns.structIterator()) {\n                        if (memberName !== eventStreamMember && input[memberName]) {\n                            serializer.write(memberSchema, input[memberName]);\n                            initialRequest[memberName] = serializer.flush();\n                        }\n                    }\n                    payload = await this.serializeEventStream({\n                        eventStream: input[eventStreamMember],\n                        requestSchema: ns,\n                        initialRequest,\n                    });\n                }\n            }\n            else {\n                serializer.write(schema, input);\n                payload = serializer.flush();\n            }\n        }\n        request.headers = Object.assign(request.headers, headers);\n        request.query = query;\n        request.body = payload;\n        request.method = \"POST\";\n        return request;\n    }\n    async deserializeResponse(operationSchema, context, response) {\n        const deserializer = this.deserializer;\n        const ns = NormalizedSchema.of(operationSchema.output);\n        const dataObject = {};\n        if (response.statusCode >= 300) {\n            const bytes = await collectBody(response.body, context);\n            if (bytes.byteLength > 0) {\n                Object.assign(dataObject, await deserializer.read(15, bytes));\n            }\n            await this.handleError(operationSchema, context, response, dataObject, this.deserializeMetadata(response));\n            throw new Error(\"@smithy/core/protocols - RPC Protocol error handler failed to throw.\");\n        }\n        for (const header in response.headers) {\n            const value = response.headers[header];\n            delete response.headers[header];\n            response.headers[header.toLowerCase()] = value;\n        }\n        const eventStreamMember = ns.getEventStreamMember();\n        if (eventStreamMember) {\n            dataObject[eventStreamMember] = await this.deserializeEventStream({\n                response,\n                responseSchema: ns,\n                initialResponseContainer: dataObject,\n            });\n        }\n        else {\n            const bytes = await collectBody(response.body, context);\n            if (bytes.byteLength > 0) {\n                Object.assign(dataObject, await deserializer.read(ns, bytes));\n            }\n        }\n        dataObject.$metadata = this.deserializeMetadata(response);\n        return dataObject;\n    }\n}\n","export function determineTimestampFormat(ns, settings) {\n    if (settings.timestampFormat.useTrait) {\n        if (ns.isTimestampSchema() &&\n            (ns.getSchema() === 5 ||\n                ns.getSchema() === 6 ||\n                ns.getSchema() === 7)) {\n            return ns.getSchema();\n        }\n    }\n    const { httpLabel, httpPrefixHeaders, httpHeader, httpQuery } = ns.getMergedTraits();\n    const bindingFormat = settings.httpBindings\n        ? typeof httpPrefixHeaders === \"string\" || Boolean(httpHeader)\n            ? 6\n            : Boolean(httpQuery) || Boolean(httpLabel)\n                ? 5\n                : undefined\n        : undefined;\n    return bindingFormat ?? settings.timestampFormat.default;\n}\n","export function setFeature(context, feature, value) {\n    if (!context.__smithy_context) {\n        context.__smithy_context = {\n            features: {},\n        };\n    }\n    else if (!context.__smithy_context.features) {\n        context.__smithy_context.features = {};\n    }\n    context.__smithy_context.features[feature] = value;\n}\n","export class DefaultIdentityProviderConfig {\n    authSchemes = new Map();\n    constructor(config) {\n        for (const [key, value] of Object.entries(config)) {\n            if (value !== undefined) {\n                this.authSchemes.set(key, value);\n            }\n        }\n    }\n    getIdentityProvider(schemeId) {\n        return this.authSchemes.get(schemeId);\n    }\n}\n","export class NoAuthSigner {\n    async sign(httpRequest, identity, signingProperties) {\n        return httpRequest;\n    }\n}\n","export const createIsIdentityExpiredFunction = (expirationMs) => function isIdentityExpired(identity) {\n    return doesIdentityRequireRefresh(identity) && identity.expiration.getTime() - Date.now() < expirationMs;\n};\nexport const EXPIRATION_MS = 300_000;\nexport const isIdentityExpired = createIsIdentityExpiredFunction(EXPIRATION_MS);\nexport const doesIdentityRequireRefresh = (identity) => identity.expiration !== undefined;\nexport const memoizeIdentityProvider = (provider, isExpired, requiresRefresh) => {\n    if (provider === undefined) {\n        return undefined;\n    }\n    const normalizedProvider = typeof provider !== \"function\" ? async () => Promise.resolve(provider) : provider;\n    let resolved;\n    let pending;\n    let hasResult;\n    let isConstant = false;\n    const coalesceProvider = async (options) => {\n        if (!pending) {\n            pending = normalizedProvider(options);\n        }\n        try {\n            resolved = await pending;\n            hasResult = true;\n            isConstant = false;\n        }\n        finally {\n            pending = undefined;\n        }\n        return resolved;\n    };\n    if (isExpired === undefined) {\n        return async (options) => {\n            if (!hasResult || options?.forceRefresh) {\n                resolved = await coalesceProvider(options);\n            }\n            return resolved;\n        };\n    }\n    return async (options) => {\n        if (!hasResult || options?.forceRefresh) {\n            resolved = await coalesceProvider(options);\n        }\n        if (isConstant) {\n            return resolved;\n        }\n        if (!requiresRefresh(resolved)) {\n            isConstant = true;\n            return resolved;\n        }\n        if (isExpired(resolved)) {\n            await coalesceProvider(options);\n            return resolved;\n        }\n        return resolved;\n    };\n};\n","import { normalizeProvider } from \"@smithy/core\";\nexport const DEFAULT_UA_APP_ID = undefined;\nfunction isValidUserAgentAppId(appId) {\n    if (appId === undefined) {\n        return true;\n    }\n    return typeof appId === \"string\" && appId.length <= 50;\n}\nexport function resolveUserAgentConfig(input) {\n    const normalizedAppIdProvider = normalizeProvider(input.userAgentAppId ?? DEFAULT_UA_APP_ID);\n    const { customUserAgent } = input;\n    return Object.assign(input, {\n        customUserAgent: typeof customUserAgent === \"string\" ? [[customUserAgent]] : customUserAgent,\n        userAgentAppId: async () => {\n            const appId = await normalizedAppIdProvider();\n            if (!isValidUserAgentAppId(appId)) {\n                const logger = input.logger?.constructor?.name === \"NoOpLogger\" || !input.logger ? console : input.logger;\n                if (typeof appId !== \"string\") {\n                    logger?.warn(\"userAgentAppId must be a string or undefined.\");\n                }\n                else if (appId.length > 50) {\n                    logger?.warn(\"The provided userAgentAppId exceeds the maximum length of 50 characters.\");\n                }\n            }\n            return appId;\n        },\n    });\n}\n","export class EndpointCache {\n    capacity;\n    data = new Map();\n    parameters = [];\n    constructor({ size, params }) {\n        this.capacity = size ?? 50;\n        if (params) {\n            this.parameters = params;\n        }\n    }\n    get(endpointParams, resolver) {\n        const key = this.hash(endpointParams);\n        if (key === false) {\n            return resolver();\n        }\n        if (!this.data.has(key)) {\n            if (this.data.size > this.capacity + 10) {\n                const keys = this.data.keys();\n                let i = 0;\n                while (true) {\n                    const { value, done } = keys.next();\n                    this.data.delete(value);\n                    if (done || ++i > 10) {\n                        break;\n                    }\n                }\n            }\n            this.data.set(key, resolver());\n        }\n        return this.data.get(key);\n    }\n    size() {\n        return this.data.size;\n    }\n    hash(endpointParams) {\n        let buffer = \"\";\n        const { parameters } = this;\n        if (parameters.length === 0) {\n            return false;\n        }\n        for (const param of parameters) {\n            const val = String(endpointParams[param] ?? \"\");\n            if (val.includes(\"|;\")) {\n                return false;\n            }\n            buffer += val + \"|;\";\n        }\n        return buffer;\n    }\n}\n","const IP_V4_REGEX = new RegExp(`^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$`);\nexport const isIpAddress = (value) => IP_V4_REGEX.test(value) || (value.startsWith(\"[\") && value.endsWith(\"]\"));\n","const VALID_HOST_LABEL_REGEX = new RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`);\nexport const isValidHostLabel = (value, allowSubDomains = false) => {\n    if (!allowSubDomains) {\n        return VALID_HOST_LABEL_REGEX.test(value);\n    }\n    const labels = value.split(\".\");\n    for (const label of labels) {\n        if (!isValidHostLabel(label)) {\n            return false;\n        }\n    }\n    return true;\n};\n","export const customEndpointFunctions = {};\n","export const debugId = \"endpoints\";\n","export function toDebugString(input) {\n    if (typeof input !== \"object\" || input == null) {\n        return input;\n    }\n    if (\"ref\" in input) {\n        return `$${toDebugString(input.ref)}`;\n    }\n    if (\"fn\" in input) {\n        return `${input.fn}(${(input.argv || []).map(toDebugString).join(\", \")})`;\n    }\n    return JSON.stringify(input, null, 2);\n}\n","export class EndpointError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"EndpointError\";\n    }\n}\n","export const booleanEquals = (value1, value2) => value1 === value2;\n","import { EndpointError } from \"../types\";\nexport const getAttrPathList = (path) => {\n    const parts = path.split(\".\");\n    const pathList = [];\n    for (const part of parts) {\n        const squareBracketIndex = part.indexOf(\"[\");\n        if (squareBracketIndex !== -1) {\n            if (part.indexOf(\"]\") !== part.length - 1) {\n                throw new EndpointError(`Path: '${path}' does not end with ']'`);\n            }\n            const arrayIndex = part.slice(squareBracketIndex + 1, -1);\n            if (Number.isNaN(parseInt(arrayIndex))) {\n                throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path}'`);\n            }\n            if (squareBracketIndex !== 0) {\n                pathList.push(part.slice(0, squareBracketIndex));\n            }\n            pathList.push(arrayIndex);\n        }\n        else {\n            pathList.push(part);\n        }\n    }\n    return pathList;\n};\n","import { EndpointError } from \"../types\";\nimport { getAttrPathList } from \"./getAttrPathList\";\nexport const getAttr = (value, path) => getAttrPathList(path).reduce((acc, index) => {\n    if (typeof acc !== \"object\") {\n        throw new EndpointError(`Index '${index}' in '${path}' not found in '${JSON.stringify(value)}'`);\n    }\n    else if (Array.isArray(acc)) {\n        return acc[parseInt(index)];\n    }\n    return acc[index];\n}, value);\n","export const isSet = (value) => value != null;\n","export const not = (value) => !value;\n","import { EndpointURLScheme } from \"@smithy/types\";\nimport { isIpAddress } from \"./isIpAddress\";\nconst DEFAULT_PORTS = {\n    [EndpointURLScheme.HTTP]: 80,\n    [EndpointURLScheme.HTTPS]: 443,\n};\nexport const parseURL = (value) => {\n    const whatwgURL = (() => {\n        try {\n            if (value instanceof URL) {\n                return value;\n            }\n            if (typeof value === \"object\" && \"hostname\" in value) {\n                const { hostname, port, protocol = \"\", path = \"\", query = {} } = value;\n                const url = new URL(`${protocol}//${hostname}${port ? `:${port}` : \"\"}${path}`);\n                url.search = Object.entries(query)\n                    .map(([k, v]) => `${k}=${v}`)\n                    .join(\"&\");\n                return url;\n            }\n            return new URL(value);\n        }\n        catch (error) {\n            return null;\n        }\n    })();\n    if (!whatwgURL) {\n        console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);\n        return null;\n    }\n    const urlString = whatwgURL.href;\n    const { host, hostname, pathname, protocol, search } = whatwgURL;\n    if (search) {\n        return null;\n    }\n    const scheme = protocol.slice(0, -1);\n    if (!Object.values(EndpointURLScheme).includes(scheme)) {\n        return null;\n    }\n    const isIp = isIpAddress(hostname);\n    const inputContainsDefaultPort = urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`) ||\n        (typeof value === \"string\" && value.includes(`${host}:${DEFAULT_PORTS[scheme]}`));\n    const authority = `${host}${inputContainsDefaultPort ? `:${DEFAULT_PORTS[scheme]}` : ``}`;\n    return {\n        scheme,\n        authority,\n        path: pathname,\n        normalizedPath: pathname.endsWith(\"/\") ? pathname : `${pathname}/`,\n        isIp,\n    };\n};\n","export const stringEquals = (value1, value2) => value1 === value2;\n","export const substring = (input, start, stop, reverse) => {\n    if (start >= stop || input.length < stop || /[^\\u0000-\\u007f]/.test(input)) {\n        return null;\n    }\n    if (!reverse) {\n        return input.substring(start, stop);\n    }\n    return input.substring(input.length - stop, input.length - start);\n};\n","export const uriEncode = (value) => encodeURIComponent(value).replace(/[!*'()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n","import { booleanEquals, getAttr, isSet, isValidHostLabel, not, parseURL, stringEquals, substring, uriEncode, } from \"../lib\";\nexport const endpointFunctions = {\n    booleanEquals,\n    getAttr,\n    isSet,\n    isValidHostLabel,\n    not,\n    parseURL,\n    stringEquals,\n    substring,\n    uriEncode,\n};\n","import { getAttr } from \"../lib\";\nexport const evaluateTemplate = (template, options) => {\n    const evaluatedTemplateArr = [];\n    const templateContext = {\n        ...options.endpointParams,\n        ...options.referenceRecord,\n    };\n    let currentIndex = 0;\n    while (currentIndex < template.length) {\n        const openingBraceIndex = template.indexOf(\"{\", currentIndex);\n        if (openingBraceIndex === -1) {\n            evaluatedTemplateArr.push(template.slice(currentIndex));\n            break;\n        }\n        evaluatedTemplateArr.push(template.slice(currentIndex, openingBraceIndex));\n        const closingBraceIndex = template.indexOf(\"}\", openingBraceIndex);\n        if (closingBraceIndex === -1) {\n            evaluatedTemplateArr.push(template.slice(openingBraceIndex));\n            break;\n        }\n        if (template[openingBraceIndex + 1] === \"{\" && template[closingBraceIndex + 1] === \"}\") {\n            evaluatedTemplateArr.push(template.slice(openingBraceIndex + 1, closingBraceIndex));\n            currentIndex = closingBraceIndex + 2;\n        }\n        const parameterName = template.substring(openingBraceIndex + 1, closingBraceIndex);\n        if (parameterName.includes(\"#\")) {\n            const [refName, attrName] = parameterName.split(\"#\");\n            evaluatedTemplateArr.push(getAttr(templateContext[refName], attrName));\n        }\n        else {\n            evaluatedTemplateArr.push(templateContext[parameterName]);\n        }\n        currentIndex = closingBraceIndex + 1;\n    }\n    return evaluatedTemplateArr.join(\"\");\n};\n","export const getReferenceValue = ({ ref }, options) => {\n    const referenceRecord = {\n        ...options.endpointParams,\n        ...options.referenceRecord,\n    };\n    return referenceRecord[ref];\n};\n","import { EndpointError } from \"../types\";\nimport { customEndpointFunctions } from \"./customEndpointFunctions\";\nimport { endpointFunctions } from \"./endpointFunctions\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getReferenceValue } from \"./getReferenceValue\";\nexport const evaluateExpression = (obj, keyName, options) => {\n    if (typeof obj === \"string\") {\n        return evaluateTemplate(obj, options);\n    }\n    else if (obj[\"fn\"]) {\n        return group.callFunction(obj, options);\n    }\n    else if (obj[\"ref\"]) {\n        return getReferenceValue(obj, options);\n    }\n    throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`);\n};\nexport const callFunction = ({ fn, argv }, options) => {\n    const evaluatedArgs = argv.map((arg) => [\"boolean\", \"number\"].includes(typeof arg) ? arg : group.evaluateExpression(arg, \"arg\", options));\n    const fnSegments = fn.split(\".\");\n    if (fnSegments[0] in customEndpointFunctions && fnSegments[1] != null) {\n        return customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs);\n    }\n    return endpointFunctions[fn](...evaluatedArgs);\n};\nexport const group = {\n    evaluateExpression,\n    callFunction,\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nexport const evaluateCondition = ({ assign, ...fnArgs }, options) => {\n    if (assign && assign in options.referenceRecord) {\n        throw new EndpointError(`'${assign}' is already defined in Reference Record.`);\n    }\n    const value = callFunction(fnArgs, options);\n    options.logger?.debug?.(`${debugId} evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);\n    return {\n        result: value === \"\" ? true : !!value,\n        ...(assign != null && { toAssign: { name: assign, value } }),\n    };\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateCondition } from \"./evaluateCondition\";\nexport const evaluateConditions = (conditions = [], options) => {\n    const conditionsReferenceRecord = {};\n    for (const condition of conditions) {\n        const { result, toAssign } = evaluateCondition(condition, {\n            ...options,\n            referenceRecord: {\n                ...options.referenceRecord,\n                ...conditionsReferenceRecord,\n            },\n        });\n        if (!result) {\n            return { result };\n        }\n        if (toAssign) {\n            conditionsReferenceRecord[toAssign.name] = toAssign.value;\n            options.logger?.debug?.(`${debugId} assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`);\n        }\n    }\n    return { result: true, referenceRecord: conditionsReferenceRecord };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointHeaders = (headers, options) => Object.entries(headers).reduce((acc, [headerKey, headerVal]) => ({\n    ...acc,\n    [headerKey]: headerVal.map((headerValEntry) => {\n        const processedExpr = evaluateExpression(headerValEntry, \"Header value entry\", options);\n        if (typeof processedExpr !== \"string\") {\n            throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);\n        }\n        return processedExpr;\n    }),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nexport const getEndpointProperties = (properties, options) => Object.entries(properties).reduce((acc, [propertyKey, propertyVal]) => ({\n    ...acc,\n    [propertyKey]: group.getEndpointProperty(propertyVal, options),\n}), {});\nexport const getEndpointProperty = (property, options) => {\n    if (Array.isArray(property)) {\n        return property.map((propertyEntry) => getEndpointProperty(propertyEntry, options));\n    }\n    switch (typeof property) {\n        case \"string\":\n            return evaluateTemplate(property, options);\n        case \"object\":\n            if (property === null) {\n                throw new EndpointError(`Unexpected endpoint property: ${property}`);\n            }\n            return group.getEndpointProperties(property, options);\n        case \"boolean\":\n            return property;\n        default:\n            throw new EndpointError(`Unexpected endpoint property type: ${typeof property}`);\n    }\n};\nexport const group = {\n    getEndpointProperty,\n    getEndpointProperties,\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointUrl = (endpointUrl, options) => {\n    const expression = evaluateExpression(endpointUrl, \"Endpoint URL\", options);\n    if (typeof expression === \"string\") {\n        try {\n            return new URL(expression);\n        }\n        catch (error) {\n            console.error(`Failed to construct URL with ${expression}`, error);\n            throw error;\n        }\n    }\n    throw new EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { getEndpointHeaders } from \"./getEndpointHeaders\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nimport { getEndpointUrl } from \"./getEndpointUrl\";\nexport const evaluateEndpointRule = (endpointRule, options) => {\n    const { conditions, endpoint } = endpointRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    const endpointRuleOptions = {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    };\n    const { url, properties, headers } = endpoint;\n    options.logger?.debug?.(`${debugId} Resolving endpoint from template: ${toDebugString(endpoint)}`);\n    return {\n        ...(headers != undefined && {\n            headers: getEndpointHeaders(headers, endpointRuleOptions),\n        }),\n        ...(properties != undefined && {\n            properties: getEndpointProperties(properties, endpointRuleOptions),\n        }),\n        url: getEndpointUrl(url, endpointRuleOptions),\n    };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const evaluateErrorRule = (errorRule, options) => {\n    const { conditions, error } = errorRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    throw new EndpointError(evaluateExpression(error, \"Error\", {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    }));\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateEndpointRule } from \"./evaluateEndpointRule\";\nimport { evaluateErrorRule } from \"./evaluateErrorRule\";\nexport const evaluateRules = (rules, options) => {\n    for (const rule of rules) {\n        if (rule.type === \"endpoint\") {\n            const endpointOrUndefined = evaluateEndpointRule(rule, options);\n            if (endpointOrUndefined) {\n                return endpointOrUndefined;\n            }\n        }\n        else if (rule.type === \"error\") {\n            evaluateErrorRule(rule, options);\n        }\n        else if (rule.type === \"tree\") {\n            const endpointOrUndefined = group.evaluateTreeRule(rule, options);\n            if (endpointOrUndefined) {\n                return endpointOrUndefined;\n            }\n        }\n        else {\n            throw new EndpointError(`Unknown endpoint rule: ${rule}`);\n        }\n    }\n    throw new EndpointError(`Rules evaluation failed`);\n};\nexport const evaluateTreeRule = (treeRule, options) => {\n    const { conditions, rules } = treeRule;\n    const { result, referenceRecord } = evaluateConditions(conditions, options);\n    if (!result) {\n        return;\n    }\n    return group.evaluateRules(rules, {\n        ...options,\n        referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n    });\n};\nexport const group = {\n    evaluateRules,\n    evaluateTreeRule,\n};\n","import { debugId, toDebugString } from \"./debug\";\nimport { EndpointError } from \"./types\";\nimport { evaluateRules } from \"./utils\";\nexport const resolveEndpoint = (ruleSetObject, options) => {\n    const { endpointParams, logger } = options;\n    const { parameters, rules } = ruleSetObject;\n    options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);\n    const paramsWithDefault = Object.entries(parameters)\n        .filter(([, v]) => v.default != null)\n        .map(([k, v]) => [k, v.default]);\n    if (paramsWithDefault.length > 0) {\n        for (const [paramKey, paramDefaultValue] of paramsWithDefault) {\n            endpointParams[paramKey] = endpointParams[paramKey] ?? paramDefaultValue;\n        }\n    }\n    const requiredParams = Object.entries(parameters)\n        .filter(([, v]) => v.required)\n        .map(([k]) => k);\n    for (const requiredParam of requiredParams) {\n        if (endpointParams[requiredParam] == null) {\n            throw new EndpointError(`Missing required parameter: '${requiredParam}'`);\n        }\n    }\n    const endpoint = evaluateRules(rules, { endpointParams, logger, referenceRecord: {} });\n    options.logger?.debug?.(`${debugId} Resolved endpoint: ${toDebugString(endpoint)}`);\n    return endpoint;\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n    if (allowSubDomains) {\n        for (const label of value.split(\".\")) {\n            if (!isVirtualHostableS3Bucket(label)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    if (!isValidHostLabel(value)) {\n        return false;\n    }\n    if (value.length < 3 || value.length > 63) {\n        return false;\n    }\n    if (value !== value.toLowerCase()) {\n        return false;\n    }\n    if (isIpAddress(value)) {\n        return false;\n    }\n    return true;\n};\n","const ARN_DELIMITER = \":\";\nconst RESOURCE_DELIMITER = \"/\";\nexport const parseArn = (value) => {\n    const segments = value.split(ARN_DELIMITER);\n    if (segments.length < 6)\n        return null;\n    const [arn, partition, service, region, accountId, ...resourcePath] = segments;\n    if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourcePath.join(ARN_DELIMITER) === \"\")\n        return null;\n    const resourceId = resourcePath.map((resource) => resource.split(RESOURCE_DELIMITER)).flat();\n    return {\n        partition,\n        service,\n        region,\n        accountId,\n        resourceId,\n    };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n    const { partitions } = selectedPartitionsInfo;\n    for (const partition of partitions) {\n        const { regions, outputs } = partition;\n        for (const [region, regionData] of Object.entries(regions)) {\n            if (region === value) {\n                return {\n                    ...outputs,\n                    ...regionData,\n                };\n            }\n        }\n    }\n    for (const partition of partitions) {\n        const { regionRegex, outputs } = partition;\n        if (new RegExp(regionRegex).test(value)) {\n            return {\n                ...outputs,\n            };\n        }\n    }\n    const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n    if (!DEFAULT_PARTITION) {\n        throw new Error(\"Provided region was not found in the partition array or regex,\" +\n            \" and default partition with id 'aws' doesn't exist.\");\n    }\n    return {\n        ...DEFAULT_PARTITION.outputs,\n    };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n    selectedPartitionsInfo = partitionsInfo;\n    selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n    setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nexport const awsEndpointFunctions = {\n    isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n    parseArn: parseArn,\n    partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","export function setCredentialFeature(credentials, feature, value) {\n    if (!credentials.$source) {\n        credentials.$source = {};\n    }\n    credentials.$source[feature] = value;\n    return credentials;\n}\n","export function setFeature(context, feature, value) {\n    if (!context.__aws_sdk_context) {\n        context.__aws_sdk_context = {\n            features: {},\n        };\n    }\n    else if (!context.__aws_sdk_context.features) {\n        context.__aws_sdk_context.features = {};\n    }\n    context.__aws_sdk_context.features[feature] = value;\n}\n","export var RETRY_MODES;\n(function (RETRY_MODES) {\n    RETRY_MODES[\"STANDARD\"] = \"standard\";\n    RETRY_MODES[\"ADAPTIVE\"] = \"adaptive\";\n})(RETRY_MODES || (RETRY_MODES = {}));\nexport const DEFAULT_MAX_ATTEMPTS = 3;\nexport const DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;\n","export const CLOCK_SKEW_ERROR_CODES = [\n    \"AuthFailure\",\n    \"InvalidSignatureException\",\n    \"RequestExpired\",\n    \"RequestInTheFuture\",\n    \"RequestTimeTooSkewed\",\n    \"SignatureDoesNotMatch\",\n];\nexport const THROTTLING_ERROR_CODES = [\n    \"BandwidthLimitExceeded\",\n    \"EC2ThrottledException\",\n    \"LimitExceededException\",\n    \"PriorRequestNotComplete\",\n    \"ProvisionedThroughputExceededException\",\n    \"RequestLimitExceeded\",\n    \"RequestThrottled\",\n    \"RequestThrottledException\",\n    \"SlowDown\",\n    \"ThrottledException\",\n    \"Throttling\",\n    \"ThrottlingException\",\n    \"TooManyRequestsException\",\n    \"TransactionInProgressException\",\n];\nexport const TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexport const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexport const NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\nexport const NODEJS_NETWORK_ERROR_CODES = [\"EHOSTUNREACH\", \"ENETUNREACH\", \"ENOTFOUND\"];\n","import { CLOCK_SKEW_ERROR_CODES, NODEJS_NETWORK_ERROR_CODES, NODEJS_TIMEOUT_ERROR_CODES, THROTTLING_ERROR_CODES, TRANSIENT_ERROR_CODES, TRANSIENT_ERROR_STATUS_CODES, } from \"./constants\";\nexport const isRetryableByTrait = (error) => error?.$retryable !== undefined;\nexport const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexport const isClockSkewCorrectedError = (error) => error.$metadata?.clockSkewCorrected;\nexport const isBrowserNetworkError = (error) => {\n    const errorMessages = new Set([\n        \"Failed to fetch\",\n        \"NetworkError when attempting to fetch resource\",\n        \"The Internet connection appears to be offline\",\n        \"Load failed\",\n        \"Network request failed\",\n    ]);\n    const isValid = error && error instanceof TypeError;\n    if (!isValid) {\n        return false;\n    }\n    return errorMessages.has(error.message);\n};\nexport const isThrottlingError = (error) => error.$metadata?.httpStatusCode === 429 ||\n    THROTTLING_ERROR_CODES.includes(error.name) ||\n    error.$retryable?.throttling == true;\nexport const isTransientError = (error, depth = 0) => isRetryableByTrait(error) ||\n    isClockSkewCorrectedError(error) ||\n    TRANSIENT_ERROR_CODES.includes(error.name) ||\n    NODEJS_TIMEOUT_ERROR_CODES.includes(error?.code || \"\") ||\n    NODEJS_NETWORK_ERROR_CODES.includes(error?.code || \"\") ||\n    TRANSIENT_ERROR_STATUS_CODES.includes(error.$metadata?.httpStatusCode || 0) ||\n    isBrowserNetworkError(error) ||\n    (error.cause !== undefined && depth <= 10 && isTransientError(error.cause, depth + 1));\nexport const isServerError = (error) => {\n    if (error.$metadata?.httpStatusCode !== undefined) {\n        const statusCode = error.$metadata.httpStatusCode;\n        if (500 <= statusCode && statusCode <= 599 && !isTransientError(error)) {\n            return true;\n        }\n        return false;\n    }\n    return false;\n};\n","import { setFeature } from \"@aws-sdk/core/client\";\nimport { RETRY_MODES } from \"@smithy/util-retry\";\nconst ACCOUNT_ID_ENDPOINT_REGEX = /\\d{12}\\.ddb/;\nexport async function checkFeatures(context, config, args) {\n    const request = args.request;\n    if (request?.headers?.[\"smithy-protocol\"] === \"rpc-v2-cbor\") {\n        setFeature(context, \"PROTOCOL_RPC_V2_CBOR\", \"M\");\n    }\n    if (typeof config.retryStrategy === \"function\") {\n        const retryStrategy = await config.retryStrategy();\n        if (typeof retryStrategy.mode === \"string\") {\n            switch (retryStrategy.mode) {\n                case RETRY_MODES.ADAPTIVE:\n                    setFeature(context, \"RETRY_MODE_ADAPTIVE\", \"F\");\n                    break;\n                case RETRY_MODES.STANDARD:\n                    setFeature(context, \"RETRY_MODE_STANDARD\", \"E\");\n                    break;\n            }\n        }\n    }\n    if (typeof config.accountIdEndpointMode === \"function\") {\n        const endpointV2 = context.endpointV2;\n        if (String(endpointV2?.url?.hostname).match(ACCOUNT_ID_ENDPOINT_REGEX)) {\n            setFeature(context, \"ACCOUNT_ID_ENDPOINT\", \"O\");\n        }\n        switch (await config.accountIdEndpointMode?.()) {\n            case \"disabled\":\n                setFeature(context, \"ACCOUNT_ID_MODE_DISABLED\", \"Q\");\n                break;\n            case \"preferred\":\n                setFeature(context, \"ACCOUNT_ID_MODE_PREFERRED\", \"P\");\n                break;\n            case \"required\":\n                setFeature(context, \"ACCOUNT_ID_MODE_REQUIRED\", \"R\");\n                break;\n        }\n    }\n    const identity = context.__smithy_context?.selectedHttpAuthScheme?.identity;\n    if (identity?.$source) {\n        const credentials = identity;\n        if (credentials.accountId) {\n            setFeature(context, \"RESOLVED_ACCOUNT_ID\", \"T\");\n        }\n        for (const [key, value] of Object.entries(credentials.$source ?? {})) {\n            setFeature(context, key, value);\n        }\n    }\n}\n","export const USER_AGENT = \"user-agent\";\nexport const X_AMZ_USER_AGENT = \"x-amz-user-agent\";\nexport const SPACE = \" \";\nexport const UA_NAME_SEPARATOR = \"/\";\nexport const UA_NAME_ESCAPE_REGEX = /[^!$%&'*+\\-.^_`|~\\w]/g;\nexport const UA_VALUE_ESCAPE_REGEX = /[^!$%&'*+\\-.^_`|~\\w#]/g;\nexport const UA_ESCAPE_CHAR = \"-\";\n","const BYTE_LIMIT = 1024;\nexport function encodeFeatures(features) {\n    let buffer = \"\";\n    for (const key in features) {\n        const val = features[key];\n        if (buffer.length + val.length + 1 <= BYTE_LIMIT) {\n            if (buffer.length) {\n                buffer += \",\" + val;\n            }\n            else {\n                buffer += val;\n            }\n            continue;\n        }\n        break;\n    }\n    return buffer;\n}\n","import { getUserAgentPrefix } from \"@aws-sdk/util-endpoints\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { checkFeatures } from \"./check-features\";\nimport { SPACE, UA_ESCAPE_CHAR, UA_NAME_ESCAPE_REGEX, UA_NAME_SEPARATOR, UA_VALUE_ESCAPE_REGEX, USER_AGENT, X_AMZ_USER_AGENT, } from \"./constants\";\nimport { encodeFeatures } from \"./encode-features\";\nexport const userAgentMiddleware = (options) => (next, context) => async (args) => {\n    const { request } = args;\n    if (!HttpRequest.isInstance(request)) {\n        return next(args);\n    }\n    const { headers } = request;\n    const userAgent = context?.userAgent?.map(escapeUserAgent) || [];\n    const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);\n    await checkFeatures(context, options, args);\n    const awsContext = context;\n    defaultUserAgent.push(`m/${encodeFeatures(Object.assign({}, context.__smithy_context?.features, awsContext.__aws_sdk_context?.features))}`);\n    const customUserAgent = options?.customUserAgent?.map(escapeUserAgent) || [];\n    const appId = await options.userAgentAppId();\n    if (appId) {\n        defaultUserAgent.push(escapeUserAgent([`app`, `${appId}`]));\n    }\n    const prefix = getUserAgentPrefix();\n    const sdkUserAgentValue = (prefix ? [prefix] : [])\n        .concat([...defaultUserAgent, ...userAgent, ...customUserAgent])\n        .join(SPACE);\n    const normalUAValue = [\n        ...defaultUserAgent.filter((section) => section.startsWith(\"aws-sdk-\")),\n        ...customUserAgent,\n    ].join(SPACE);\n    if (options.runtime !== \"browser\") {\n        if (normalUAValue) {\n            headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT]\n                ? `${headers[USER_AGENT]} ${normalUAValue}`\n                : normalUAValue;\n        }\n        headers[USER_AGENT] = sdkUserAgentValue;\n    }\n    else {\n        headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;\n    }\n    return next({\n        ...args,\n        request,\n    });\n};\nconst escapeUserAgent = (userAgentPair) => {\n    const name = userAgentPair[0]\n        .split(UA_NAME_SEPARATOR)\n        .map((part) => part.replace(UA_NAME_ESCAPE_REGEX, UA_ESCAPE_CHAR))\n        .join(UA_NAME_SEPARATOR);\n    const version = userAgentPair[1]?.replace(UA_VALUE_ESCAPE_REGEX, UA_ESCAPE_CHAR);\n    const prefixSeparatorIndex = name.indexOf(UA_NAME_SEPARATOR);\n    const prefix = name.substring(0, prefixSeparatorIndex);\n    let uaName = name.substring(prefixSeparatorIndex + 1);\n    if (prefix === \"api\") {\n        uaName = uaName.toLowerCase();\n    }\n    return [prefix, uaName, version]\n        .filter((item) => item && item.length > 0)\n        .reduce((acc, item, index) => {\n        switch (index) {\n            case 0:\n                return item;\n            case 1:\n                return `${acc}/${item}`;\n            default:\n                return `${acc}#${item}`;\n        }\n    }, \"\");\n};\nexport const getUserAgentMiddlewareOptions = {\n    name: \"getUserAgentMiddleware\",\n    step: \"build\",\n    priority: \"low\",\n    tags: [\"SET_USER_AGENT\", \"USER_AGENT\"],\n    override: true,\n};\nexport const getUserAgentPlugin = (config) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(userAgentMiddleware(config), getUserAgentMiddlewareOptions);\n    },\n});\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_DUALSTACK_ENDPOINT = \"AWS_USE_DUALSTACK_ENDPOINT\";\nexport const CONFIG_USE_DUALSTACK_ENDPOINT = \"use_dualstack_endpoint\";\nexport const DEFAULT_USE_DUALSTACK_ENDPOINT = false;\nexport const NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_DUALSTACK_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_DUALSTACK_ENDPOINT, SelectorType.CONFIG),\n    default: false,\n};\nexport const nodeDualstackConfigSelectors = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_DUALSTACK_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_DUALSTACK_ENDPOINT, SelectorType.CONFIG),\n    default: undefined,\n};\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_FIPS_ENDPOINT = \"AWS_USE_FIPS_ENDPOINT\";\nexport const CONFIG_USE_FIPS_ENDPOINT = \"use_fips_endpoint\";\nexport const DEFAULT_USE_FIPS_ENDPOINT = false;\nexport const NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_FIPS_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_FIPS_ENDPOINT, SelectorType.CONFIG),\n    default: false,\n};\nexport const nodeFipsConfigSelectors = {\n    environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_FIPS_ENDPOINT, SelectorType.ENV),\n    configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_FIPS_ENDPOINT, SelectorType.CONFIG),\n    default: undefined,\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nconst validRegions = new Set();\nexport const checkRegion = (region, check = isValidHostLabel) => {\n    if (!validRegions.has(region) && !check(region)) {\n        if (region === \"*\") {\n            console.warn(`@smithy/config-resolver WARN - Please use the caller region instead of \"*\". See \"sigv4a\" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.`);\n        }\n        else {\n            throw new Error(`Region not accepted: region=\"${region}\" is not a valid hostname component.`);\n        }\n    }\n    else {\n        validRegions.add(region);\n    }\n};\n","export const isFipsRegion = (region) => typeof region === \"string\" && (region.startsWith(\"fips-\") || region.endsWith(\"-fips\"));\n","import { isFipsRegion } from \"./isFipsRegion\";\nexport const getRealRegion = (region) => isFipsRegion(region)\n    ? [\"fips-aws-global\", \"aws-fips\"].includes(region)\n        ? \"us-east-1\"\n        : region.replace(/fips-(dkr-|prod-)?|-fips/, \"\")\n    : region;\n","import { checkRegion } from \"./checkRegion\";\nimport { getRealRegion } from \"./getRealRegion\";\nimport { isFipsRegion } from \"./isFipsRegion\";\nexport const resolveRegionConfig = (input) => {\n    const { region, useFipsEndpoint } = input;\n    if (!region) {\n        throw new Error(\"Region is missing\");\n    }\n    return Object.assign(input, {\n        region: async () => {\n            const providedRegion = typeof region === \"function\" ? await region() : region;\n            const realRegion = getRealRegion(providedRegion);\n            checkRegion(realRegion);\n            return realRegion;\n        },\n        useFipsEndpoint: async () => {\n            const providedRegion = typeof region === \"string\" ? region : await region();\n            if (isFipsRegion(providedRegion)) {\n                return true;\n            }\n            return typeof useFipsEndpoint !== \"function\" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();\n        },\n    });\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst CONTENT_LENGTH_HEADER = \"content-length\";\nexport function contentLengthMiddleware(bodyLengthChecker) {\n    return (next) => async (args) => {\n        const request = args.request;\n        if (HttpRequest.isInstance(request)) {\n            const { body, headers } = request;\n            if (body &&\n                Object.keys(headers)\n                    .map((str) => str.toLowerCase())\n                    .indexOf(CONTENT_LENGTH_HEADER) === -1) {\n                try {\n                    const length = bodyLengthChecker(body);\n                    request.headers = {\n                        ...request.headers,\n                        [CONTENT_LENGTH_HEADER]: String(length),\n                    };\n                }\n                catch (error) {\n                }\n            }\n        }\n        return next({\n            ...args,\n            request,\n        });\n    };\n}\nexport const contentLengthMiddlewareOptions = {\n    step: \"build\",\n    tags: [\"SET_CONTENT_LENGTH\", \"CONTENT_LENGTH\"],\n    name: \"contentLengthMiddleware\",\n    override: true,\n};\nexport const getContentLengthPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), contentLengthMiddlewareOptions);\n    },\n});\n","export const resolveParamsForS3 = async (endpointParams) => {\n    const bucket = endpointParams?.Bucket || \"\";\n    if (typeof endpointParams.Bucket === \"string\") {\n        endpointParams.Bucket = bucket.replace(/#/g, encodeURIComponent(\"#\")).replace(/\\?/g, encodeURIComponent(\"?\"));\n    }\n    if (isArnBucketName(bucket)) {\n        if (endpointParams.ForcePathStyle === true) {\n            throw new Error(\"Path-style addressing cannot be used with ARN buckets\");\n        }\n    }\n    else if (!isDnsCompatibleBucketName(bucket) ||\n        (bucket.indexOf(\".\") !== -1 && !String(endpointParams.Endpoint).startsWith(\"http:\")) ||\n        bucket.toLowerCase() !== bucket ||\n        bucket.length < 3) {\n        endpointParams.ForcePathStyle = true;\n    }\n    if (endpointParams.DisableMultiRegionAccessPoints) {\n        endpointParams.disableMultiRegionAccessPoints = true;\n        endpointParams.DisableMRAP = true;\n    }\n    return endpointParams;\n};\nconst DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/;\nconst IP_ADDRESS_PATTERN = /(\\d+\\.){3}\\d+/;\nconst DOTS_PATTERN = /\\.\\./;\nexport const DOT_PATTERN = /\\./;\nexport const S3_HOSTNAME_PATTERN = /^(.+\\.)?s3(-fips)?(\\.dualstack)?[.-]([a-z0-9-]+)\\./;\nexport const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);\nexport const isArnBucketName = (bucketName) => {\n    const [arn, partition, service, , , bucket] = bucketName.split(\":\");\n    const isArn = arn === \"arn\" && bucketName.split(\":\").length >= 6;\n    const isValidArn = Boolean(isArn && partition && service && bucket);\n    if (isArn && !isValidArn) {\n        throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);\n    }\n    return isValidArn;\n};\n","export const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config, isClientContextParam = false) => {\n    const configProvider = async () => {\n        let configValue;\n        if (isClientContextParam) {\n            const clientContextParams = config.clientContextParams;\n            const nestedValue = clientContextParams?.[configKey];\n            configValue = nestedValue ?? config[configKey] ?? config[canonicalEndpointParamKey];\n        }\n        else {\n            configValue = config[configKey] ?? config[canonicalEndpointParamKey];\n        }\n        if (typeof configValue === \"function\") {\n            return configValue();\n        }\n        return configValue;\n    };\n    if (configKey === \"credentialScope\" || canonicalEndpointParamKey === \"CredentialScope\") {\n        return async () => {\n            const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n            const configValue = credentials?.credentialScope ?? credentials?.CredentialScope;\n            return configValue;\n        };\n    }\n    if (configKey === \"accountId\" || canonicalEndpointParamKey === \"AccountId\") {\n        return async () => {\n            const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n            const configValue = credentials?.accountId ?? credentials?.AccountId;\n            return configValue;\n        };\n    }\n    if (configKey === \"endpoint\" || canonicalEndpointParamKey === \"endpoint\") {\n        return async () => {\n            if (config.isCustomEndpoint === false) {\n                return undefined;\n            }\n            const endpoint = await configProvider();\n            if (endpoint && typeof endpoint === \"object\") {\n                if (\"url\" in endpoint) {\n                    return endpoint.url.href;\n                }\n                if (\"hostname\" in endpoint) {\n                    const { protocol, hostname, port, path } = endpoint;\n                    return `${protocol}//${hostname}${port ? \":\" + port : \"\"}${path}`;\n                }\n            }\n            return endpoint;\n        };\n    }\n    return configProvider;\n};\n","export const getEndpointFromConfig = async (serviceId) => undefined;\n","import { parseUrl } from \"@smithy/url-parser\";\nexport const toEndpointV1 = (endpoint) => {\n    if (typeof endpoint === \"object\") {\n        if (\"url\" in endpoint) {\n            const v1Endpoint = parseUrl(endpoint.url);\n            if (endpoint.headers) {\n                v1Endpoint.headers = {};\n                for (const [name, values] of Object.entries(endpoint.headers)) {\n                    v1Endpoint.headers[name.toLowerCase()] = values.join(\", \");\n                }\n            }\n            return v1Endpoint;\n        }\n        return endpoint;\n    }\n    return parseUrl(endpoint);\n};\n","import { resolveParamsForS3 } from \"../service-customizations\";\nimport { createConfigValueProvider } from \"./createConfigValueProvider\";\nimport { getEndpointFromConfig } from \"./getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./toEndpointV1\";\nexport const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {\n    if (!clientConfig.isCustomEndpoint) {\n        let endpointFromConfig;\n        if (clientConfig.serviceConfiguredEndpoint) {\n            endpointFromConfig = await clientConfig.serviceConfiguredEndpoint();\n        }\n        else {\n            endpointFromConfig = await getEndpointFromConfig(clientConfig.serviceId);\n        }\n        if (endpointFromConfig) {\n            clientConfig.endpoint = () => Promise.resolve(toEndpointV1(endpointFromConfig));\n            clientConfig.isCustomEndpoint = true;\n        }\n    }\n    const endpointParams = await resolveParams(commandInput, instructionsSupplier, clientConfig);\n    if (typeof clientConfig.endpointProvider !== \"function\") {\n        throw new Error(\"config.endpointProvider is not set.\");\n    }\n    const endpoint = clientConfig.endpointProvider(endpointParams, context);\n    if (clientConfig.isCustomEndpoint && clientConfig.endpoint) {\n        const customEndpoint = await clientConfig.endpoint();\n        if (customEndpoint?.headers) {\n            endpoint.headers ??= {};\n            for (const [name, value] of Object.entries(customEndpoint.headers)) {\n                endpoint.headers[name] = Array.isArray(value) ? value : [value];\n            }\n        }\n    }\n    return endpoint;\n};\nexport const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {\n    const endpointParams = {};\n    const instructions = instructionsSupplier?.getEndpointParameterInstructions?.() || {};\n    for (const [name, instruction] of Object.entries(instructions)) {\n        switch (instruction.type) {\n            case \"staticContextParams\":\n                endpointParams[name] = instruction.value;\n                break;\n            case \"contextParams\":\n                endpointParams[name] = commandInput[instruction.name];\n                break;\n            case \"clientContextParams\":\n            case \"builtInParams\":\n                endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig, instruction.type !== \"builtInParams\")();\n                break;\n            case \"operationContextParams\":\n                endpointParams[name] = instruction.get(commandInput);\n                break;\n            default:\n                throw new Error(\"Unrecognized endpoint parameter instruction: \" + JSON.stringify(instruction));\n        }\n    }\n    if (Object.keys(instructions).length === 0) {\n        Object.assign(endpointParams, clientConfig);\n    }\n    if (String(clientConfig.serviceId).toLowerCase() === \"s3\") {\n        await resolveParamsForS3(endpointParams);\n    }\n    return endpointParams;\n};\n","import { setFeature } from \"@smithy/core\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { getEndpointFromInstructions } from \"./adaptors/getEndpointFromInstructions\";\nexport const endpointMiddleware = ({ config, instructions, }) => {\n    return (next, context) => async (args) => {\n        if (config.isCustomEndpoint) {\n            setFeature(context, \"ENDPOINT_OVERRIDE\", \"N\");\n        }\n        const endpoint = await getEndpointFromInstructions(args.input, {\n            getEndpointParameterInstructions() {\n                return instructions;\n            },\n        }, { ...config }, context);\n        context.endpointV2 = endpoint;\n        context.authSchemes = endpoint.properties?.authSchemes;\n        const authScheme = context.authSchemes?.[0];\n        if (authScheme) {\n            context[\"signing_region\"] = authScheme.signingRegion;\n            context[\"signing_service\"] = authScheme.signingName;\n            const smithyContext = getSmithyContext(context);\n            const httpAuthOption = smithyContext?.selectedHttpAuthScheme?.httpAuthOption;\n            if (httpAuthOption) {\n                httpAuthOption.signingProperties = Object.assign(httpAuthOption.signingProperties || {}, {\n                    signing_region: authScheme.signingRegion,\n                    signingRegion: authScheme.signingRegion,\n                    signing_service: authScheme.signingName,\n                    signingName: authScheme.signingName,\n                    signingRegionSet: authScheme.signingRegionSet,\n                }, authScheme.properties);\n            }\n        }\n        return next({\n            ...args,\n        });\n    };\n};\n","import { deserializerMiddleware } from \"./deserializerMiddleware\";\nimport { serializerMiddleware } from \"./serializerMiddleware\";\nexport const deserializerMiddlewareOption = {\n    name: \"deserializerMiddleware\",\n    step: \"deserialize\",\n    tags: [\"DESERIALIZER\"],\n    override: true,\n};\nexport const serializerMiddlewareOption = {\n    name: \"serializerMiddleware\",\n    step: \"serialize\",\n    tags: [\"SERIALIZER\"],\n    override: true,\n};\nexport function getSerdePlugin(config, serializer, deserializer) {\n    return {\n        applyToStack: (commandStack) => {\n            commandStack.add(deserializerMiddleware(config, deserializer), deserializerMiddlewareOption);\n            commandStack.add(serializerMiddleware(config, serializer), serializerMiddlewareOption);\n        },\n    };\n}\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { endpointMiddleware } from \"./endpointMiddleware\";\nexport const endpointMiddlewareOptions = {\n    step: \"serialize\",\n    tags: [\"ENDPOINT_PARAMETERS\", \"ENDPOINT_V2\", \"ENDPOINT\"],\n    name: \"endpointV2Middleware\",\n    override: true,\n    relation: \"before\",\n    toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getEndpointPlugin = (config, instructions) => ({\n    applyToStack: (clientStack) => {\n        clientStack.addRelativeTo(endpointMiddleware({\n            config,\n            instructions,\n        }), endpointMiddlewareOptions);\n    },\n});\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { getEndpointFromConfig } from \"./adaptors/getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./adaptors/toEndpointV1\";\nexport const resolveEndpointConfig = (input) => {\n    const tls = input.tls ?? true;\n    const { endpoint, useDualstackEndpoint, useFipsEndpoint } = input;\n    const customEndpointProvider = endpoint != null ? async () => toEndpointV1(await normalizeProvider(endpoint)()) : undefined;\n    const isCustomEndpoint = !!endpoint;\n    const resolvedConfig = Object.assign(input, {\n        endpoint: customEndpointProvider,\n        tls,\n        isCustomEndpoint,\n        useDualstackEndpoint: normalizeProvider(useDualstackEndpoint ?? false),\n        useFipsEndpoint: normalizeProvider(useFipsEndpoint ?? false),\n    });\n    let configuredEndpointPromise = undefined;\n    resolvedConfig.serviceConfiguredEndpoint = async () => {\n        if (input.serviceId && !configuredEndpointPromise) {\n            configuredEndpointPromise = getEndpointFromConfig(input.serviceId);\n        }\n        return configuredEndpointPromise;\n    };\n    return resolvedConfig;\n};\n","export var RETRY_MODES;\n(function (RETRY_MODES) {\n    RETRY_MODES[\"STANDARD\"] = \"standard\";\n    RETRY_MODES[\"ADAPTIVE\"] = \"adaptive\";\n})(RETRY_MODES || (RETRY_MODES = {}));\nexport const DEFAULT_MAX_ATTEMPTS = 3;\nexport const DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;\n","import { isThrottlingError } from \"@smithy/service-error-classification\";\nexport class DefaultRateLimiter {\n    static setTimeoutFn = setTimeout;\n    beta;\n    minCapacity;\n    minFillRate;\n    scaleConstant;\n    smooth;\n    enabled = false;\n    availableTokens = 0;\n    lastMaxRate = 0;\n    measuredTxRate = 0;\n    requestCount = 0;\n    fillRate;\n    lastThrottleTime;\n    lastTimestamp = 0;\n    lastTxRateBucket;\n    maxCapacity;\n    timeWindow = 0;\n    constructor(options) {\n        this.beta = options?.beta ?? 0.7;\n        this.minCapacity = options?.minCapacity ?? 1;\n        this.minFillRate = options?.minFillRate ?? 0.5;\n        this.scaleConstant = options?.scaleConstant ?? 0.4;\n        this.smooth = options?.smooth ?? 0.8;\n        this.lastThrottleTime = this.getCurrentTimeInSeconds();\n        this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds());\n        this.fillRate = this.minFillRate;\n        this.maxCapacity = this.minCapacity;\n    }\n    async getSendToken() {\n        return this.acquireTokenBucket(1);\n    }\n    updateClientSendingRate(response) {\n        let calculatedRate;\n        this.updateMeasuredRate();\n        const retryErrorInfo = response;\n        const isThrottling = retryErrorInfo?.errorType === \"THROTTLING\" || isThrottlingError(retryErrorInfo?.error ?? response);\n        if (isThrottling) {\n            const rateToUse = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate);\n            this.lastMaxRate = rateToUse;\n            this.calculateTimeWindow();\n            this.lastThrottleTime = this.getCurrentTimeInSeconds();\n            calculatedRate = this.cubicThrottle(rateToUse);\n            this.enableTokenBucket();\n        }\n        else {\n            this.calculateTimeWindow();\n            calculatedRate = this.cubicSuccess(this.getCurrentTimeInSeconds());\n        }\n        const newRate = Math.min(calculatedRate, 2 * this.measuredTxRate);\n        this.updateTokenBucketRate(newRate);\n    }\n    getCurrentTimeInSeconds() {\n        return Date.now() / 1000;\n    }\n    async acquireTokenBucket(amount) {\n        if (!this.enabled) {\n            return;\n        }\n        this.refillTokenBucket();\n        if (amount > this.availableTokens) {\n            const delay = ((amount - this.availableTokens) / this.fillRate) * 1000;\n            await new Promise((resolve) => DefaultRateLimiter.setTimeoutFn(resolve, delay));\n        }\n        this.availableTokens = this.availableTokens - amount;\n    }\n    refillTokenBucket() {\n        const timestamp = this.getCurrentTimeInSeconds();\n        if (!this.lastTimestamp) {\n            this.lastTimestamp = timestamp;\n            return;\n        }\n        const fillAmount = (timestamp - this.lastTimestamp) * this.fillRate;\n        this.availableTokens = Math.min(this.maxCapacity, this.availableTokens + fillAmount);\n        this.lastTimestamp = timestamp;\n    }\n    calculateTimeWindow() {\n        this.timeWindow = this.getPrecise(Math.pow((this.lastMaxRate * (1 - this.beta)) / this.scaleConstant, 1 / 3));\n    }\n    cubicThrottle(rateToUse) {\n        return this.getPrecise(rateToUse * this.beta);\n    }\n    cubicSuccess(timestamp) {\n        return this.getPrecise(this.scaleConstant * Math.pow(timestamp - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate);\n    }\n    enableTokenBucket() {\n        this.enabled = true;\n    }\n    updateTokenBucketRate(newRate) {\n        this.refillTokenBucket();\n        this.fillRate = Math.max(newRate, this.minFillRate);\n        this.maxCapacity = Math.max(newRate, this.minCapacity);\n        this.availableTokens = Math.min(this.availableTokens, this.maxCapacity);\n    }\n    updateMeasuredRate() {\n        const t = this.getCurrentTimeInSeconds();\n        const timeBucket = Math.floor(t * 2) / 2;\n        this.requestCount++;\n        if (timeBucket > this.lastTxRateBucket) {\n            const currentRate = this.requestCount / (timeBucket - this.lastTxRateBucket);\n            this.measuredTxRate = this.getPrecise(currentRate * this.smooth + this.measuredTxRate * (1 - this.smooth));\n            this.requestCount = 0;\n            this.lastTxRateBucket = timeBucket;\n        }\n    }\n    getPrecise(num) {\n        return parseFloat(num.toFixed(8));\n    }\n}\n","export const DEFAULT_RETRY_DELAY_BASE = 100;\nexport const MAXIMUM_RETRY_DELAY = 20 * 1000;\nexport const THROTTLING_RETRY_DELAY_BASE = 500;\nexport const INITIAL_RETRY_TOKENS = 500;\nexport const RETRY_COST = 5;\nexport const TIMEOUT_RETRY_COST = 10;\nexport const NO_RETRY_INCREMENT = 1;\nexport const INVOCATION_ID_HEADER = \"amz-sdk-invocation-id\";\nexport const REQUEST_HEADER = \"amz-sdk-request\";\n","export class Retry {\n    static v2026 = typeof process !== \"undefined\" && process.env?.SMITHY_NEW_RETRIES_2026 === \"true\";\n    static delay() {\n        return Retry.v2026 ? 50 : 100;\n    }\n    static throttlingDelay() {\n        return Retry.v2026 ? 1_000 : 500;\n    }\n    static cost() {\n        return Retry.v2026 ? 14 : 5;\n    }\n    static throttlingCost() {\n        return Retry.v2026 ? 5 : 10;\n    }\n    static modifiedCostType() {\n        return Retry.v2026 ? \"THROTTLING\" : \"TRANSIENT\";\n    }\n}\n","import { MAXIMUM_RETRY_DELAY } from \"./constants\";\nimport { Retry } from \"./retries-2026-config\";\nexport class DefaultRetryBackoffStrategy {\n    x = Retry.delay();\n    computeNextBackoffDelay(i) {\n        const b = Math.random();\n        const r = 2;\n        const t_i = b * Math.min(this.x * r ** i, MAXIMUM_RETRY_DELAY);\n        return Math.floor(t_i);\n    }\n    setDelayBase(delay) {\n        this.x = delay;\n    }\n}\n","import { MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport class DefaultRetryToken {\n    delay;\n    count;\n    cost;\n    longPoll;\n    constructor(delay, count, cost, longPoll) {\n        this.delay = delay;\n        this.count = count;\n        this.cost = cost;\n        this.longPoll = longPoll;\n    }\n    getRetryCount() {\n        return this.count;\n    }\n    getRetryDelay() {\n        return Math.min(MAXIMUM_RETRY_DELAY, this.delay);\n    }\n    getRetryCost() {\n        return this.cost;\n    }\n    isLongPoll() {\n        return this.longPoll;\n    }\n}\n","import { DEFAULT_MAX_ATTEMPTS, RETRY_MODES } from \"./config\";\nimport { INITIAL_RETRY_TOKENS, NO_RETRY_INCREMENT } from \"./constants\";\nimport { DefaultRetryBackoffStrategy } from \"./DefaultRetryBackoffStrategy\";\nimport { DefaultRetryToken } from \"./DefaultRetryToken\";\nimport { Retry } from \"./retries-2026-config\";\nexport class StandardRetryStrategy {\n    mode = RETRY_MODES.STANDARD;\n    capacity = INITIAL_RETRY_TOKENS;\n    retryBackoffStrategy;\n    maxAttemptsProvider;\n    baseDelay;\n    constructor(arg1) {\n        if (typeof arg1 === \"number\") {\n            this.maxAttemptsProvider = async () => arg1;\n        }\n        else if (typeof arg1 === \"function\") {\n            this.maxAttemptsProvider = arg1;\n        }\n        else if (arg1 && typeof arg1 === \"object\") {\n            this.maxAttemptsProvider = async () => arg1.maxAttempts;\n            this.baseDelay = arg1.baseDelay;\n            this.retryBackoffStrategy = arg1.backoff;\n        }\n        this.maxAttemptsProvider ??= async () => DEFAULT_MAX_ATTEMPTS;\n        this.baseDelay ??= Retry.delay();\n        this.retryBackoffStrategy ??= new DefaultRetryBackoffStrategy();\n    }\n    async acquireInitialRetryToken(retryTokenScope) {\n        return new DefaultRetryToken(Retry.delay(), 0, undefined, Retry.v2026 && retryTokenScope.includes(\":longpoll\"));\n    }\n    async refreshRetryTokenForRetry(token, errorInfo) {\n        const maxAttempts = await this.getMaxAttempts();\n        const shouldRetry = this.shouldRetry(token, errorInfo, maxAttempts);\n        if (shouldRetry || token.isLongPoll?.()) {\n            const errorType = errorInfo.errorType;\n            this.retryBackoffStrategy.setDelayBase(errorType === \"THROTTLING\" ? Retry.throttlingDelay() : this.baseDelay);\n            const delayFromErrorType = this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount());\n            let retryDelay = delayFromErrorType;\n            if (errorInfo.retryAfterHint instanceof Date) {\n                retryDelay = Math.max(delayFromErrorType, Math.min(errorInfo.retryAfterHint.getTime() - Date.now(), delayFromErrorType + 5_000));\n            }\n            if (!shouldRetry) {\n                throw Object.assign(new Error(\"No retry token available\"), { $backoff: Retry.v2026 ? retryDelay : 0 });\n            }\n            else {\n                const capacityCost = this.getCapacityCost(errorType);\n                this.capacity -= capacityCost;\n                return new DefaultRetryToken(retryDelay, token.getRetryCount() + 1, capacityCost, token.isLongPoll?.() ?? false);\n            }\n        }\n        throw new Error(\"No retry token available\");\n    }\n    recordSuccess(token) {\n        this.capacity = Math.min(INITIAL_RETRY_TOKENS, this.capacity + (token.getRetryCost() ?? NO_RETRY_INCREMENT));\n    }\n    getCapacity() {\n        return this.capacity;\n    }\n    async getMaxAttempts() {\n        try {\n            return await this.maxAttemptsProvider();\n        }\n        catch (error) {\n            console.warn(`Max attempts provider could not resolve. Using default of ${DEFAULT_MAX_ATTEMPTS}`);\n            return DEFAULT_MAX_ATTEMPTS;\n        }\n    }\n    shouldRetry(tokenToRenew, errorInfo, maxAttempts) {\n        const attempts = tokenToRenew.getRetryCount() + 1;\n        return (attempts < maxAttempts &&\n            this.capacity >= this.getCapacityCost(errorInfo.errorType) &&\n            this.isRetryableError(errorInfo.errorType));\n    }\n    getCapacityCost(errorType) {\n        return errorType === Retry.modifiedCostType() ? Retry.throttlingCost() : Retry.cost();\n    }\n    isRetryableError(errorType) {\n        return errorType === \"THROTTLING\" || errorType === \"TRANSIENT\";\n    }\n}\n","import { RETRY_MODES } from \"./config\";\nimport { DefaultRateLimiter } from \"./DefaultRateLimiter\";\nimport { StandardRetryStrategy } from \"./StandardRetryStrategy\";\nexport class AdaptiveRetryStrategy {\n    mode = RETRY_MODES.ADAPTIVE;\n    rateLimiter;\n    standardRetryStrategy;\n    constructor(maxAttemptsProvider, options) {\n        const { rateLimiter } = options ?? {};\n        this.rateLimiter = rateLimiter ?? new DefaultRateLimiter();\n        this.standardRetryStrategy = options\n            ? new StandardRetryStrategy({\n                maxAttempts: typeof maxAttemptsProvider === \"number\" ? maxAttemptsProvider : 3,\n                ...options,\n            })\n            : new StandardRetryStrategy(maxAttemptsProvider);\n    }\n    async acquireInitialRetryToken(retryTokenScope) {\n        await this.rateLimiter.getSendToken();\n        return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope);\n    }\n    async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {\n        this.rateLimiter.updateClientSendingRate(errorInfo);\n        return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew, errorInfo);\n    }\n    recordSuccess(token) {\n        this.rateLimiter.updateClientSendingRate({});\n        this.standardRetryStrategy.recordSuccess(token);\n    }\n}\n","export const asSdkError = (error) => {\n    if (error instanceof Error)\n        return error;\n    if (error instanceof Object)\n        return Object.assign(new Error(), error);\n    if (typeof error === \"string\")\n        return new Error(error);\n    return new Error(`AWS SDK error wrapper for ${error}`);\n};\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { AdaptiveRetryStrategy, DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE, RETRY_MODES, StandardRetryStrategy, } from \"@smithy/util-retry\";\nexport const ENV_MAX_ATTEMPTS = \"AWS_MAX_ATTEMPTS\";\nexport const CONFIG_MAX_ATTEMPTS = \"max_attempts\";\nexport const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => {\n        const value = env[ENV_MAX_ATTEMPTS];\n        if (!value)\n            return undefined;\n        const maxAttempt = parseInt(value);\n        if (Number.isNaN(maxAttempt)) {\n            throw new Error(`Environment variable ${ENV_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n        }\n        return maxAttempt;\n    },\n    configFileSelector: (profile) => {\n        const value = profile[CONFIG_MAX_ATTEMPTS];\n        if (!value)\n            return undefined;\n        const maxAttempt = parseInt(value);\n        if (Number.isNaN(maxAttempt)) {\n            throw new Error(`Shared config file entry ${CONFIG_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n        }\n        return maxAttempt;\n    },\n    default: DEFAULT_MAX_ATTEMPTS,\n};\nexport const resolveRetryConfig = (input) => {\n    const { retryStrategy, retryMode } = input;\n    const maxAttempts = normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);\n    let controller = retryStrategy\n        ? Promise.resolve(retryStrategy)\n        : undefined;\n    const getDefault = async () => (await normalizeProvider(retryMode)()) === RETRY_MODES.ADAPTIVE\n        ? new AdaptiveRetryStrategy(maxAttempts)\n        : new StandardRetryStrategy(maxAttempts);\n    return Object.assign(input, {\n        maxAttempts,\n        retryStrategy: () => (controller ??= getDefault()),\n    });\n};\nexport const ENV_RETRY_MODE = \"AWS_RETRY_MODE\";\nexport const CONFIG_RETRY_MODE = \"retry_mode\";\nexport const NODE_RETRY_MODE_CONFIG_OPTIONS = {\n    environmentVariableSelector: (env) => env[ENV_RETRY_MODE],\n    configFileSelector: (profile) => profile[CONFIG_RETRY_MODE],\n    default: DEFAULT_RETRY_MODE,\n};\n","const getAllAliases = (name, aliases) => {\n    const _aliases = [];\n    if (name) {\n        _aliases.push(name);\n    }\n    if (aliases) {\n        for (const alias of aliases) {\n            _aliases.push(alias);\n        }\n    }\n    return _aliases;\n};\nconst getMiddlewareNameWithAliases = (name, aliases) => {\n    return `${name || \"anonymous\"}${aliases && aliases.length > 0 ? ` (a.k.a. ${aliases.join(\",\")})` : \"\"}`;\n};\nexport const constructStack = () => {\n    let absoluteEntries = [];\n    let relativeEntries = [];\n    let identifyOnResolve = false;\n    const entriesNameSet = new Set();\n    const sort = (entries) => entries.sort((a, b) => stepWeights[b.step] - stepWeights[a.step] ||\n        priorityWeights[b.priority || \"normal\"] - priorityWeights[a.priority || \"normal\"]);\n    const removeByName = (toRemove) => {\n        let isRemoved = false;\n        const filterCb = (entry) => {\n            const aliases = getAllAliases(entry.name, entry.aliases);\n            if (aliases.includes(toRemove)) {\n                isRemoved = true;\n                for (const alias of aliases) {\n                    entriesNameSet.delete(alias);\n                }\n                return false;\n            }\n            return true;\n        };\n        absoluteEntries = absoluteEntries.filter(filterCb);\n        relativeEntries = relativeEntries.filter(filterCb);\n        return isRemoved;\n    };\n    const removeByReference = (toRemove) => {\n        let isRemoved = false;\n        const filterCb = (entry) => {\n            if (entry.middleware === toRemove) {\n                isRemoved = true;\n                for (const alias of getAllAliases(entry.name, entry.aliases)) {\n                    entriesNameSet.delete(alias);\n                }\n                return false;\n            }\n            return true;\n        };\n        absoluteEntries = absoluteEntries.filter(filterCb);\n        relativeEntries = relativeEntries.filter(filterCb);\n        return isRemoved;\n    };\n    const cloneTo = (toStack) => {\n        absoluteEntries.forEach((entry) => {\n            toStack.add(entry.middleware, { ...entry });\n        });\n        relativeEntries.forEach((entry) => {\n            toStack.addRelativeTo(entry.middleware, { ...entry });\n        });\n        toStack.identifyOnResolve?.(stack.identifyOnResolve());\n        return toStack;\n    };\n    const expandRelativeMiddlewareList = (from) => {\n        const expandedMiddlewareList = [];\n        from.before.forEach((entry) => {\n            if (entry.before.length === 0 && entry.after.length === 0) {\n                expandedMiddlewareList.push(entry);\n            }\n            else {\n                expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n            }\n        });\n        expandedMiddlewareList.push(from);\n        from.after.reverse().forEach((entry) => {\n            if (entry.before.length === 0 && entry.after.length === 0) {\n                expandedMiddlewareList.push(entry);\n            }\n            else {\n                expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n            }\n        });\n        return expandedMiddlewareList;\n    };\n    const getMiddlewareList = (debug = false) => {\n        const normalizedAbsoluteEntries = [];\n        const normalizedRelativeEntries = [];\n        const normalizedEntriesNameMap = {};\n        absoluteEntries.forEach((entry) => {\n            const normalizedEntry = {\n                ...entry,\n                before: [],\n                after: [],\n            };\n            for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n                normalizedEntriesNameMap[alias] = normalizedEntry;\n            }\n            normalizedAbsoluteEntries.push(normalizedEntry);\n        });\n        relativeEntries.forEach((entry) => {\n            const normalizedEntry = {\n                ...entry,\n                before: [],\n                after: [],\n            };\n            for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n                normalizedEntriesNameMap[alias] = normalizedEntry;\n            }\n            normalizedRelativeEntries.push(normalizedEntry);\n        });\n        normalizedRelativeEntries.forEach((entry) => {\n            if (entry.toMiddleware) {\n                const toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];\n                if (toMiddleware === undefined) {\n                    if (debug) {\n                        return;\n                    }\n                    throw new Error(`${entry.toMiddleware} is not found when adding ` +\n                        `${getMiddlewareNameWithAliases(entry.name, entry.aliases)} ` +\n                        `middleware ${entry.relation} ${entry.toMiddleware}`);\n                }\n                if (entry.relation === \"after\") {\n                    toMiddleware.after.push(entry);\n                }\n                if (entry.relation === \"before\") {\n                    toMiddleware.before.push(entry);\n                }\n            }\n        });\n        const mainChain = sort(normalizedAbsoluteEntries)\n            .map(expandRelativeMiddlewareList)\n            .reduce((wholeList, expandedMiddlewareList) => {\n            wholeList.push(...expandedMiddlewareList);\n            return wholeList;\n        }, []);\n        return mainChain;\n    };\n    const stack = {\n        add: (middleware, options = {}) => {\n            const { name, override, aliases: _aliases } = options;\n            const entry = {\n                step: \"initialize\",\n                priority: \"normal\",\n                middleware,\n                ...options,\n            };\n            const aliases = getAllAliases(name, _aliases);\n            if (aliases.length > 0) {\n                if (aliases.some((alias) => entriesNameSet.has(alias))) {\n                    if (!override)\n                        throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n                    for (const alias of aliases) {\n                        const toOverrideIndex = absoluteEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n                        if (toOverrideIndex === -1) {\n                            continue;\n                        }\n                        const toOverride = absoluteEntries[toOverrideIndex];\n                        if (toOverride.step !== entry.step || entry.priority !== toOverride.priority) {\n                            throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware with ` +\n                                `${toOverride.priority} priority in ${toOverride.step} step cannot ` +\n                                `be overridden by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware with ` +\n                                `${entry.priority} priority in ${entry.step} step.`);\n                        }\n                        absoluteEntries.splice(toOverrideIndex, 1);\n                    }\n                }\n                for (const alias of aliases) {\n                    entriesNameSet.add(alias);\n                }\n            }\n            absoluteEntries.push(entry);\n        },\n        addRelativeTo: (middleware, options) => {\n            const { name, override, aliases: _aliases } = options;\n            const entry = {\n                middleware,\n                ...options,\n            };\n            const aliases = getAllAliases(name, _aliases);\n            if (aliases.length > 0) {\n                if (aliases.some((alias) => entriesNameSet.has(alias))) {\n                    if (!override)\n                        throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n                    for (const alias of aliases) {\n                        const toOverrideIndex = relativeEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n                        if (toOverrideIndex === -1) {\n                            continue;\n                        }\n                        const toOverride = relativeEntries[toOverrideIndex];\n                        if (toOverride.toMiddleware !== entry.toMiddleware || toOverride.relation !== entry.relation) {\n                            throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware ` +\n                                `${toOverride.relation} \"${toOverride.toMiddleware}\" middleware cannot be overridden ` +\n                                `by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware ${entry.relation} ` +\n                                `\"${entry.toMiddleware}\" middleware.`);\n                        }\n                        relativeEntries.splice(toOverrideIndex, 1);\n                    }\n                }\n                for (const alias of aliases) {\n                    entriesNameSet.add(alias);\n                }\n            }\n            relativeEntries.push(entry);\n        },\n        clone: () => cloneTo(constructStack()),\n        use: (plugin) => {\n            plugin.applyToStack(stack);\n        },\n        remove: (toRemove) => {\n            if (typeof toRemove === \"string\")\n                return removeByName(toRemove);\n            else\n                return removeByReference(toRemove);\n        },\n        removeByTag: (toRemove) => {\n            let isRemoved = false;\n            const filterCb = (entry) => {\n                const { tags, name, aliases: _aliases } = entry;\n                if (tags && tags.includes(toRemove)) {\n                    const aliases = getAllAliases(name, _aliases);\n                    for (const alias of aliases) {\n                        entriesNameSet.delete(alias);\n                    }\n                    isRemoved = true;\n                    return false;\n                }\n                return true;\n            };\n            absoluteEntries = absoluteEntries.filter(filterCb);\n            relativeEntries = relativeEntries.filter(filterCb);\n            return isRemoved;\n        },\n        concat: (from) => {\n            const cloned = cloneTo(constructStack());\n            cloned.use(from);\n            cloned.identifyOnResolve(identifyOnResolve || cloned.identifyOnResolve() || (from.identifyOnResolve?.() ?? false));\n            return cloned;\n        },\n        applyToStack: cloneTo,\n        identify: () => {\n            return getMiddlewareList(true).map((mw) => {\n                const step = mw.step ??\n                    mw.relation +\n                        \" \" +\n                        mw.toMiddleware;\n                return getMiddlewareNameWithAliases(mw.name, mw.aliases) + \" - \" + step;\n            });\n        },\n        identifyOnResolve(toggle) {\n            if (typeof toggle === \"boolean\")\n                identifyOnResolve = toggle;\n            return identifyOnResolve;\n        },\n        resolve: (handler, context) => {\n            for (const middleware of getMiddlewareList()\n                .map((entry) => entry.middleware)\n                .reverse()) {\n                handler = middleware(handler, context);\n            }\n            if (identifyOnResolve) {\n                console.log(stack.identify());\n            }\n            return handler;\n        },\n    };\n    return stack;\n};\nconst stepWeights = {\n    initialize: 5,\n    serialize: 4,\n    build: 3,\n    finalizeRequest: 2,\n    deserialize: 1,\n};\nconst priorityWeights = {\n    high: 3,\n    normal: 2,\n    low: 1,\n};\n","import { constructStack } from \"@smithy/middleware-stack\";\nexport class Client {\n    config;\n    middlewareStack = constructStack();\n    initConfig;\n    handlers;\n    constructor(config) {\n        this.config = config;\n        const { protocol, protocolSettings } = config;\n        if (protocolSettings) {\n            if (typeof protocol === \"function\") {\n                config.protocol = new protocol(protocolSettings);\n            }\n        }\n    }\n    send(command, optionsOrCb, cb) {\n        const options = typeof optionsOrCb !== \"function\" ? optionsOrCb : undefined;\n        const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n        const useHandlerCache = options === undefined && this.config.cacheMiddleware === true;\n        let handler;\n        if (useHandlerCache) {\n            if (!this.handlers) {\n                this.handlers = new WeakMap();\n            }\n            const handlers = this.handlers;\n            if (handlers.has(command.constructor)) {\n                handler = handlers.get(command.constructor);\n            }\n            else {\n                handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n                handlers.set(command.constructor, handler);\n            }\n        }\n        else {\n            delete this.handlers;\n            handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n        }\n        if (callback) {\n            handler(command)\n                .then((result) => callback(null, result.output), (err) => callback(err))\n                .catch(() => { });\n        }\n        else {\n            return handler(command).then((result) => result.output);\n        }\n    }\n    destroy() {\n        this.config?.requestHandler?.destroy?.();\n        delete this.handlers;\n    }\n}\n","import { NormalizedSchema } from \"@smithy/core/schema\";\nconst SENSITIVE_STRING = \"***SensitiveInformation***\";\nexport function schemaLogFilter(schema, data) {\n    if (data == null) {\n        return data;\n    }\n    const ns = NormalizedSchema.of(schema);\n    if (ns.getMergedTraits().sensitive) {\n        return SENSITIVE_STRING;\n    }\n    if (ns.isListSchema()) {\n        const isSensitive = !!ns.getValueSchema().getMergedTraits().sensitive;\n        if (isSensitive) {\n            return SENSITIVE_STRING;\n        }\n    }\n    else if (ns.isMapSchema()) {\n        const isSensitive = !!ns.getKeySchema().getMergedTraits().sensitive || !!ns.getValueSchema().getMergedTraits().sensitive;\n        if (isSensitive) {\n            return SENSITIVE_STRING;\n        }\n    }\n    else if (ns.isStructSchema() && typeof data === \"object\") {\n        const object = data;\n        const newObject = {};\n        for (const [member, memberNs] of ns.structIterator()) {\n            if (object[member] != null) {\n                newObject[member] = schemaLogFilter(memberNs, object[member]);\n            }\n        }\n        return newObject;\n    }\n    return data;\n}\n","import { constructStack } from \"@smithy/middleware-stack\";\nimport { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nimport { schemaLogFilter } from \"./schemaLogFilter\";\nexport class Command {\n    middlewareStack = constructStack();\n    schema;\n    static classBuilder() {\n        return new ClassBuilder();\n    }\n    resolveMiddlewareWithContext(clientStack, configuration, options, { middlewareFn, clientName, commandName, inputFilterSensitiveLog, outputFilterSensitiveLog, smithyContext, additionalContext, CommandCtor, }) {\n        for (const mw of middlewareFn.bind(this)(CommandCtor, clientStack, configuration, options)) {\n            this.middlewareStack.use(mw);\n        }\n        const stack = clientStack.concat(this.middlewareStack);\n        const { logger } = configuration;\n        const handlerExecutionContext = {\n            logger,\n            clientName,\n            commandName,\n            inputFilterSensitiveLog,\n            outputFilterSensitiveLog,\n            [SMITHY_CONTEXT_KEY]: {\n                commandInstance: this,\n                ...smithyContext,\n            },\n            ...additionalContext,\n        };\n        const { requestHandler } = configuration;\n        return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);\n    }\n}\nclass ClassBuilder {\n    _init = () => { };\n    _ep = {};\n    _middlewareFn = () => [];\n    _commandName = \"\";\n    _clientName = \"\";\n    _additionalContext = {};\n    _smithyContext = {};\n    _inputFilterSensitiveLog = undefined;\n    _outputFilterSensitiveLog = undefined;\n    _serializer = null;\n    _deserializer = null;\n    _operationSchema;\n    init(cb) {\n        this._init = cb;\n    }\n    ep(endpointParameterInstructions) {\n        this._ep = endpointParameterInstructions;\n        return this;\n    }\n    m(middlewareSupplier) {\n        this._middlewareFn = middlewareSupplier;\n        return this;\n    }\n    s(service, operation, smithyContext = {}) {\n        this._smithyContext = {\n            service,\n            operation,\n            ...smithyContext,\n        };\n        return this;\n    }\n    c(additionalContext = {}) {\n        this._additionalContext = additionalContext;\n        return this;\n    }\n    n(clientName, commandName) {\n        this._clientName = clientName;\n        this._commandName = commandName;\n        return this;\n    }\n    f(inputFilter = (_) => _, outputFilter = (_) => _) {\n        this._inputFilterSensitiveLog = inputFilter;\n        this._outputFilterSensitiveLog = outputFilter;\n        return this;\n    }\n    ser(serializer) {\n        this._serializer = serializer;\n        return this;\n    }\n    de(deserializer) {\n        this._deserializer = deserializer;\n        return this;\n    }\n    sc(operation) {\n        this._operationSchema = operation;\n        this._smithyContext.operationSchema = operation;\n        return this;\n    }\n    build() {\n        const closure = this;\n        let CommandRef;\n        return (CommandRef = class extends Command {\n            input;\n            static getEndpointParameterInstructions() {\n                return closure._ep;\n            }\n            constructor(...[input]) {\n                super();\n                this.input = input ?? {};\n                closure._init(this);\n                this.schema = closure._operationSchema;\n            }\n            resolveMiddleware(stack, configuration, options) {\n                const op = closure._operationSchema;\n                const input = op?.[4] ?? op?.input;\n                const output = op?.[5] ?? op?.output;\n                return this.resolveMiddlewareWithContext(stack, configuration, options, {\n                    CommandCtor: CommandRef,\n                    middlewareFn: closure._middlewareFn,\n                    clientName: closure._clientName,\n                    commandName: closure._commandName,\n                    inputFilterSensitiveLog: closure._inputFilterSensitiveLog ?? (op ? schemaLogFilter.bind(null, input) : (_) => _),\n                    outputFilterSensitiveLog: closure._outputFilterSensitiveLog ?? (op ? schemaLogFilter.bind(null, output) : (_) => _),\n                    smithyContext: closure._smithyContext,\n                    additionalContext: closure._additionalContext,\n                });\n            }\n            serialize = closure._serializer;\n            deserialize = closure._deserializer;\n        });\n    }\n}\n","export class ServiceException extends Error {\n    $fault;\n    $response;\n    $retryable;\n    $metadata;\n    constructor(options) {\n        super(options.message);\n        Object.setPrototypeOf(this, Object.getPrototypeOf(this).constructor.prototype);\n        this.name = options.name;\n        this.$fault = options.$fault;\n        this.$metadata = options.$metadata;\n    }\n    static isInstance(value) {\n        if (!value)\n            return false;\n        const candidate = value;\n        return (ServiceException.prototype.isPrototypeOf(candidate) ||\n            (Boolean(candidate.$fault) &&\n                Boolean(candidate.$metadata) &&\n                (candidate.$fault === \"client\" || candidate.$fault === \"server\")));\n    }\n    static [Symbol.hasInstance](instance) {\n        if (!instance)\n            return false;\n        const candidate = instance;\n        if (this === ServiceException) {\n            return ServiceException.isInstance(instance);\n        }\n        if (ServiceException.isInstance(instance)) {\n            if (candidate.name && this.name) {\n                return this.prototype.isPrototypeOf(instance) || candidate.name === this.name;\n            }\n            return this.prototype.isPrototypeOf(instance);\n        }\n        return false;\n    }\n}\nexport const decorateServiceException = (exception, additions = {}) => {\n    Object.entries(additions)\n        .filter(([, v]) => v !== undefined)\n        .forEach(([k, v]) => {\n        if (exception[k] == undefined || exception[k] === \"\") {\n            exception[k] = v;\n        }\n    });\n    const message = exception.message || exception.Message || \"UnknownError\";\n    exception.message = message;\n    delete exception.Message;\n    return exception;\n};\n","export const loadConfigsForDefaultMode = (mode) => {\n    switch (mode) {\n        case \"standard\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 3100,\n            };\n        case \"in-region\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 1100,\n            };\n        case \"cross-region\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 3100,\n            };\n        case \"mobile\":\n            return {\n                retryMode: \"standard\",\n                connectionTimeout: 30000,\n            };\n        default:\n            return {};\n    }\n};\n","import { AlgorithmId } from \"@smithy/types\";\nexport { AlgorithmId };\nconst knownAlgorithms = Object.values(AlgorithmId);\nexport const getChecksumConfiguration = (runtimeConfig) => {\n    const checksumAlgorithms = [];\n    for (const id in AlgorithmId) {\n        const algorithmId = AlgorithmId[id];\n        if (runtimeConfig[algorithmId] === undefined) {\n            continue;\n        }\n        checksumAlgorithms.push({\n            algorithmId: () => algorithmId,\n            checksumConstructor: () => runtimeConfig[algorithmId],\n        });\n    }\n    for (const [id, ChecksumCtor] of Object.entries(runtimeConfig.checksumAlgorithms ?? {})) {\n        checksumAlgorithms.push({\n            algorithmId: () => id,\n            checksumConstructor: () => ChecksumCtor,\n        });\n    }\n    return {\n        addChecksumAlgorithm(algo) {\n            runtimeConfig.checksumAlgorithms = runtimeConfig.checksumAlgorithms ?? {};\n            const id = algo.algorithmId();\n            const ctor = algo.checksumConstructor();\n            if (knownAlgorithms.includes(id)) {\n                runtimeConfig.checksumAlgorithms[id.toUpperCase()] = ctor;\n            }\n            else {\n                runtimeConfig.checksumAlgorithms[id] = ctor;\n            }\n            checksumAlgorithms.push(algo);\n        },\n        checksumAlgorithms() {\n            return checksumAlgorithms;\n        },\n    };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n    const runtimeConfig = {};\n    clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n        const id = checksumAlgorithm.algorithmId();\n        if (knownAlgorithms.includes(id)) {\n            runtimeConfig[id] = checksumAlgorithm.checksumConstructor();\n        }\n    });\n    return runtimeConfig;\n};\n","export const getRetryConfiguration = (runtimeConfig) => {\n    return {\n        setRetryStrategy(retryStrategy) {\n            runtimeConfig.retryStrategy = retryStrategy;\n        },\n        retryStrategy() {\n            return runtimeConfig.retryStrategy;\n        },\n    };\n};\nexport const resolveRetryRuntimeConfig = (retryStrategyConfiguration) => {\n    const runtimeConfig = {};\n    runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();\n    return runtimeConfig;\n};\n","import { getChecksumConfiguration, resolveChecksumRuntimeConfig } from \"./checksum\";\nimport { getRetryConfiguration, resolveRetryRuntimeConfig } from \"./retry\";\nexport const getDefaultExtensionConfiguration = (runtimeConfig) => {\n    return Object.assign(getChecksumConfiguration(runtimeConfig), getRetryConfiguration(runtimeConfig));\n};\nexport const getDefaultClientConfiguration = getDefaultExtensionConfiguration;\nexport const resolveDefaultRuntimeConfig = (config) => {\n    return Object.assign(resolveChecksumRuntimeConfig(config), resolveRetryRuntimeConfig(config));\n};\n","export class NoOpLogger {\n    trace() { }\n    debug() { }\n    info() { }\n    warn() { }\n    error() { }\n}\n","export const isStreamingPayload = (request) => request?.body instanceof ReadableStream;\n","import { parseRfc7231DateTime } from \"@smithy/core/serde\";\nimport { HttpResponse } from \"@smithy/protocol-http\";\nexport function parseRetryAfterHeader(response, logger) {\n    if (!HttpResponse.isInstance(response)) {\n        return;\n    }\n    for (const header of Object.keys(response.headers)) {\n        const h = header.toLowerCase();\n        if (h === \"retry-after\") {\n            const retryAfter = response.headers[header];\n            let retryAfterSeconds = NaN;\n            if (retryAfter.endsWith(\"GMT\")) {\n                try {\n                    const date = parseRfc7231DateTime(retryAfter);\n                    retryAfterSeconds = (date.getTime() - Date.now()) / 1000;\n                }\n                catch (e) {\n                    logger?.trace?.(\"Failed to parse retry-after header\");\n                    logger?.trace?.(e);\n                }\n            }\n            else if (retryAfter.match(/ GMT, ((\\d+)|(\\d+\\.\\d+))$/)) {\n                retryAfterSeconds = Number(retryAfter.match(/ GMT, ([\\d.]+)$/)?.[1]);\n            }\n            else if (retryAfter.match(/^((\\d+)|(\\d+\\.\\d+))$/)) {\n                retryAfterSeconds = Number(retryAfter);\n            }\n            else if (Date.parse(retryAfter) >= Date.now()) {\n                retryAfterSeconds = (Date.parse(retryAfter) - Date.now()) / 1000;\n            }\n            if (isNaN(retryAfterSeconds)) {\n                return;\n            }\n            return new Date(Date.now() + retryAfterSeconds * 1000);\n        }\n        else if (h === \"x-amz-retry-after\") {\n            const v = response.headers[header];\n            const backoffMilliseconds = Number(v);\n            if (isNaN(backoffMilliseconds)) {\n                logger?.trace?.(`Failed to parse x-amz-retry-after=${v}`);\n                return;\n            }\n            return new Date(Date.now() + backoffMilliseconds);\n        }\n    }\n}\nexport function getRetryAfterHint(response, logger) {\n    return parseRetryAfterHeader(response, logger);\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { isServerError, isThrottlingError, isTransientError } from \"@smithy/service-error-classification\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { INVOCATION_ID_HEADER, REQUEST_HEADER } from \"@smithy/util-retry\";\nimport { v4 } from \"@smithy/uuid\";\nimport { isStreamingPayload } from \"./isStreamingPayload/isStreamingPayload\";\nimport { parseRetryAfterHeader } from \"./parseRetryAfterHeader\";\nimport { asSdkError } from \"./util\";\nexport const retryMiddleware = (options) => (next, context) => async (args) => {\n    let retryStrategy = await options.retryStrategy();\n    const maxAttempts = await options.maxAttempts();\n    if (isRetryStrategyV2(retryStrategy)) {\n        retryStrategy = retryStrategy;\n        let retryToken = await retryStrategy.acquireInitialRetryToken((context[\"partition_id\"] ?? \"\") + (context.__retryLongPoll ? \":longpoll\" : \"\"));\n        let lastError = new Error();\n        let attempts = 0;\n        let totalRetryDelay = 0;\n        const { request } = args;\n        const isRequest = HttpRequest.isInstance(request);\n        if (isRequest) {\n            request.headers[INVOCATION_ID_HEADER] = v4();\n        }\n        while (true) {\n            try {\n                if (isRequest) {\n                    request.headers[REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;\n                }\n                const { response, output } = await next(args);\n                retryStrategy.recordSuccess(retryToken);\n                output.$metadata.attempts = attempts + 1;\n                output.$metadata.totalRetryDelay = totalRetryDelay;\n                return { response, output };\n            }\n            catch (e) {\n                const retryErrorInfo = getRetryErrorInfo(e, options.logger);\n                lastError = asSdkError(e);\n                if (isRequest && isStreamingPayload(request)) {\n                    (context.logger instanceof NoOpLogger ? console : context.logger)?.warn(\"An error was encountered in a non-retryable streaming request.\");\n                    throw lastError;\n                }\n                try {\n                    retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);\n                }\n                catch (refreshError) {\n                    if (typeof refreshError.$backoff === \"number\") {\n                        await cooldown(refreshError.$backoff);\n                    }\n                    if (!lastError.$metadata) {\n                        lastError.$metadata = {};\n                    }\n                    lastError.$metadata.attempts = attempts + 1;\n                    lastError.$metadata.totalRetryDelay = totalRetryDelay;\n                    throw lastError;\n                }\n                attempts = retryToken.getRetryCount();\n                const delay = retryToken.getRetryDelay();\n                totalRetryDelay += delay;\n                await cooldown(delay);\n            }\n        }\n    }\n    else {\n        retryStrategy = retryStrategy;\n        if (retryStrategy?.mode) {\n            context.userAgent = [...(context.userAgent || []), [\"cfg/retry-mode\", retryStrategy.mode]];\n        }\n        return retryStrategy.retry(next, args);\n    }\n};\nconst cooldown = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\nconst isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== \"undefined\" &&\n    typeof retryStrategy.refreshRetryTokenForRetry !== \"undefined\" &&\n    typeof retryStrategy.recordSuccess !== \"undefined\";\nconst getRetryErrorInfo = (error, logger) => {\n    const errorInfo = {\n        error,\n        errorType: getRetryErrorType(error),\n    };\n    const retryAfterHint = parseRetryAfterHeader(error.$response, logger);\n    if (retryAfterHint) {\n        errorInfo.retryAfterHint = retryAfterHint;\n    }\n    return errorInfo;\n};\nconst getRetryErrorType = (error) => {\n    if (isThrottlingError(error))\n        return \"THROTTLING\";\n    if (isTransientError(error))\n        return \"TRANSIENT\";\n    if (isServerError(error))\n        return \"SERVER_ERROR\";\n    return \"CLIENT_ERROR\";\n};\nexport const retryMiddlewareOptions = {\n    name: \"retryMiddleware\",\n    tags: [\"RETRY\"],\n    step: \"finalizeRequest\",\n    priority: \"high\",\n    override: true,\n};\nexport const getRetryPlugin = (options) => ({\n    applyToStack: (clientStack) => {\n        clientStack.add(retryMiddleware(options), retryMiddlewareOptions);\n    },\n});\n","import { HttpResponse } from \"@smithy/protocol-http\";\nexport const getDateHeader = (response) => HttpResponse.isInstance(response) ? response.headers?.date ?? response.headers?.Date : undefined;\n","export const getSkewCorrectedDate = (systemClockOffset) => new Date(Date.now() + systemClockOffset);\n","import { getSkewCorrectedDate } from \"./getSkewCorrectedDate\";\nexport const isClockSkewed = (clockTime, systemClockOffset) => Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - clockTime) >= 300000;\n","import { isClockSkewed } from \"./isClockSkewed\";\nexport const getUpdatedSystemClockOffset = (clockTime, currentSystemClockOffset) => {\n    const clockTimeInMs = Date.parse(clockTime);\n    if (isClockSkewed(clockTimeInMs, currentSystemClockOffset)) {\n        return clockTimeInMs - Date.now();\n    }\n    return currentSystemClockOffset;\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { getDateHeader, getSkewCorrectedDate, getUpdatedSystemClockOffset } from \"../utils\";\nconst throwSigningPropertyError = (name, property) => {\n    if (!property) {\n        throw new Error(`Property \\`${name}\\` is not resolved for AWS SDK SigV4Auth`);\n    }\n    return property;\n};\nexport const validateSigningProperties = async (signingProperties) => {\n    const context = throwSigningPropertyError(\"context\", signingProperties.context);\n    const config = throwSigningPropertyError(\"config\", signingProperties.config);\n    const authScheme = context.endpointV2?.properties?.authSchemes?.[0];\n    const signerFunction = throwSigningPropertyError(\"signer\", config.signer);\n    const signer = await signerFunction(authScheme);\n    const signingRegion = signingProperties?.signingRegion;\n    const signingRegionSet = signingProperties?.signingRegionSet;\n    const signingName = signingProperties?.signingName;\n    return {\n        config,\n        signer,\n        signingRegion,\n        signingRegionSet,\n        signingName,\n    };\n};\nexport class AwsSdkSigV4Signer {\n    async sign(httpRequest, identity, signingProperties) {\n        if (!HttpRequest.isInstance(httpRequest)) {\n            throw new Error(\"The request is not an instance of `HttpRequest` and cannot be signed\");\n        }\n        const validatedProps = await validateSigningProperties(signingProperties);\n        const { config, signer } = validatedProps;\n        let { signingRegion, signingName } = validatedProps;\n        const handlerExecutionContext = signingProperties.context;\n        if (handlerExecutionContext?.authSchemes?.length ?? 0 > 1) {\n            const [first, second] = handlerExecutionContext.authSchemes;\n            if (first?.name === \"sigv4a\" && second?.name === \"sigv4\") {\n                signingRegion = second?.signingRegion ?? signingRegion;\n                signingName = second?.signingName ?? signingName;\n            }\n        }\n        const signedRequest = await signer.sign(httpRequest, {\n            signingDate: getSkewCorrectedDate(config.systemClockOffset),\n            signingRegion: signingRegion,\n            signingService: signingName,\n        });\n        return signedRequest;\n    }\n    errorHandler(signingProperties) {\n        return (error) => {\n            const serverTime = error.ServerTime ?? getDateHeader(error.$response);\n            if (serverTime) {\n                const config = throwSigningPropertyError(\"config\", signingProperties.config);\n                const initialSystemClockOffset = config.systemClockOffset;\n                config.systemClockOffset = getUpdatedSystemClockOffset(serverTime, config.systemClockOffset);\n                const clockSkewCorrected = config.systemClockOffset !== initialSystemClockOffset;\n                if (clockSkewCorrected && error.$metadata) {\n                    error.$metadata.clockSkewCorrected = true;\n                }\n            }\n            throw error;\n        };\n    }\n    successHandler(httpResponse, signingProperties) {\n        const dateHeader = getDateHeader(httpResponse);\n        if (dateHeader) {\n            const config = throwSigningPropertyError(\"config\", signingProperties.config);\n            config.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, config.systemClockOffset);\n        }\n    }\n}\nexport const AWSSDKSigV4Signer = AwsSdkSigV4Signer;\n","export const memoize = (provider, isExpired, requiresRefresh) => {\n    let resolved;\n    let pending;\n    let hasResult;\n    let isConstant = false;\n    const coalesceProvider = async () => {\n        if (!pending) {\n            pending = provider();\n        }\n        try {\n            resolved = await pending;\n            hasResult = true;\n            isConstant = false;\n        }\n        finally {\n            pending = undefined;\n        }\n        return resolved;\n    };\n    if (isExpired === undefined) {\n        return async (options) => {\n            if (!hasResult || options?.forceRefresh) {\n                resolved = await coalesceProvider();\n            }\n            return resolved;\n        };\n    }\n    return async (options) => {\n        if (!hasResult || options?.forceRefresh) {\n            resolved = await coalesceProvider();\n        }\n        if (isConstant) {\n            return resolved;\n        }\n        if (requiresRefresh && !requiresRefresh(resolved)) {\n            isConstant = true;\n            return resolved;\n        }\n        if (isExpired(resolved)) {\n            await coalesceProvider();\n            return resolved;\n        }\n        return resolved;\n    };\n};\n","export const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport const TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport const REGION_SET_PARAM = \"X-Amz-Region-Set\";\nexport const AUTH_HEADER = \"authorization\";\nexport const AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport const DATE_HEADER = \"date\";\nexport const GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport const SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport const SHA256_HEADER = \"x-amz-content-sha256\";\nexport const TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport const HOST_HEADER = \"host\";\nexport const ALWAYS_UNSIGNABLE_HEADERS = {\n    authorization: true,\n    \"cache-control\": true,\n    connection: true,\n    expect: true,\n    from: true,\n    \"keep-alive\": true,\n    \"max-forwards\": true,\n    pragma: true,\n    referer: true,\n    te: true,\n    trailer: true,\n    \"transfer-encoding\": true,\n    upgrade: true,\n    \"user-agent\": true,\n    \"x-amzn-trace-id\": true,\n};\nexport const PROXY_HEADER_PATTERN = /^proxy-/;\nexport const SEC_HEADER_PATTERN = /^sec-/;\nexport const UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport const ALGORITHM_IDENTIFIER_V4A = \"AWS4-ECDSA-P256-SHA256\";\nexport const EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const MAX_CACHE_SIZE = 50;\nexport const KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport const MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nconst signingKeyCache = {};\nconst cacheQueue = [];\nexport const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${KEY_TYPE_IDENTIFIER}`;\nexport const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {\n    const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);\n    const cacheKey = `${shortDate}:${region}:${service}:${toHex(credsHash)}:${credentials.sessionToken}`;\n    if (cacheKey in signingKeyCache) {\n        return signingKeyCache[cacheKey];\n    }\n    cacheQueue.push(cacheKey);\n    while (cacheQueue.length > MAX_CACHE_SIZE) {\n        delete signingKeyCache[cacheQueue.shift()];\n    }\n    let key = `AWS4${credentials.secretAccessKey}`;\n    for (const signable of [shortDate, region, service, KEY_TYPE_IDENTIFIER]) {\n        key = await hmac(sha256Constructor, key, signable);\n    }\n    return (signingKeyCache[cacheKey] = key);\n};\nexport const clearCredentialCache = () => {\n    cacheQueue.length = 0;\n    Object.keys(signingKeyCache).forEach((cacheKey) => {\n        delete signingKeyCache[cacheKey];\n    });\n};\nconst hmac = (ctor, secret, data) => {\n    const hash = new ctor(secret);\n    hash.update(toUint8Array(data));\n    return hash.digest();\n};\n","import { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\nexport const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {\n    const canonical = {};\n    for (const headerName of Object.keys(headers).sort()) {\n        if (headers[headerName] == undefined) {\n            continue;\n        }\n        const canonicalHeaderName = headerName.toLowerCase();\n        if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS ||\n            unsignableHeaders?.has(canonicalHeaderName) ||\n            PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n            SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n            if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n                continue;\n            }\n        }\n        canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n    }\n    return canonical;\n};\n","export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n    Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport const getPayloadHash = async ({ headers, body }, hashConstructor) => {\n    for (const headerName of Object.keys(headers)) {\n        if (headerName.toLowerCase() === SHA256_HEADER) {\n            return headers[headerName];\n        }\n    }\n    if (body == undefined) {\n        return \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n    }\n    else if (typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {\n        const hashCtor = new hashConstructor();\n        hashCtor.update(toUint8Array(body));\n        return toHex(await hashCtor.digest());\n    }\n    return UNSIGNED_PAYLOAD;\n};\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { fromUtf8 } from \"@smithy/util-utf8\";\nexport class HeaderFormatter {\n    format(headers) {\n        const chunks = [];\n        for (const headerName of Object.keys(headers)) {\n            const bytes = fromUtf8(headerName);\n            chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n        }\n        const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n        let position = 0;\n        for (const chunk of chunks) {\n            out.set(chunk, position);\n            position += chunk.byteLength;\n        }\n        return out;\n    }\n    formatHeaderValue(header) {\n        switch (header.type) {\n            case \"boolean\":\n                return Uint8Array.from([header.value ? 0 : 1]);\n            case \"byte\":\n                return Uint8Array.from([2, header.value]);\n            case \"short\":\n                const shortView = new DataView(new ArrayBuffer(3));\n                shortView.setUint8(0, 3);\n                shortView.setInt16(1, header.value, false);\n                return new Uint8Array(shortView.buffer);\n            case \"integer\":\n                const intView = new DataView(new ArrayBuffer(5));\n                intView.setUint8(0, 4);\n                intView.setInt32(1, header.value, false);\n                return new Uint8Array(intView.buffer);\n            case \"long\":\n                const longBytes = new Uint8Array(9);\n                longBytes[0] = 5;\n                longBytes.set(header.value.bytes, 1);\n                return longBytes;\n            case \"binary\":\n                const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n                binView.setUint8(0, 6);\n                binView.setUint16(1, header.value.byteLength, false);\n                const binBytes = new Uint8Array(binView.buffer);\n                binBytes.set(header.value, 3);\n                return binBytes;\n            case \"string\":\n                const utf8Bytes = fromUtf8(header.value);\n                const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n                strView.setUint8(0, 7);\n                strView.setUint16(1, utf8Bytes.byteLength, false);\n                const strBytes = new Uint8Array(strView.buffer);\n                strBytes.set(utf8Bytes, 3);\n                return strBytes;\n            case \"timestamp\":\n                const tsBytes = new Uint8Array(9);\n                tsBytes[0] = 8;\n                tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n                return tsBytes;\n            case \"uuid\":\n                if (!UUID_PATTERN.test(header.value)) {\n                    throw new Error(`Invalid UUID received: ${header.value}`);\n                }\n                const uuidBytes = new Uint8Array(17);\n                uuidBytes[0] = 9;\n                uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n                return uuidBytes;\n        }\n    }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n    HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\nexport class Int64 {\n    bytes;\n    constructor(bytes) {\n        this.bytes = bytes;\n        if (bytes.byteLength !== 8) {\n            throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n        }\n    }\n    static fromNumber(number) {\n        if (number > 9_223_372_036_854_775_807 || number < -9_223_372_036_854_775_808) {\n            throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n        }\n        const bytes = new Uint8Array(8);\n        for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n            bytes[i] = remaining;\n        }\n        if (number < 0) {\n            negate(bytes);\n        }\n        return new Int64(bytes);\n    }\n    valueOf() {\n        const bytes = this.bytes.slice(0);\n        const negative = bytes[0] & 0b10000000;\n        if (negative) {\n            negate(bytes);\n        }\n        return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n    }\n    toString() {\n        return String(this.valueOf());\n    }\n}\nfunction negate(bytes) {\n    for (let i = 0; i < 8; i++) {\n        bytes[i] ^= 0xff;\n    }\n    for (let i = 7; i > -1; i--) {\n        bytes[i]++;\n        if (bytes[i] !== 0)\n            break;\n    }\n}\n","export const hasHeader = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            return true;\n        }\n    }\n    return false;\n};\nexport const getHeaderValue = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            return headers[headerName];\n        }\n    }\n    return undefined;\n};\nexport const deleteHeader = (soughtHeader, headers) => {\n    soughtHeader = soughtHeader.toLowerCase();\n    for (const headerName of Object.keys(headers)) {\n        if (soughtHeader === headerName.toLowerCase()) {\n            delete headers[headerName];\n        }\n    }\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const moveHeadersToQuery = (request, options = {}) => {\n    const { headers, query = {} } = HttpRequest.clone(request);\n    for (const name of Object.keys(headers)) {\n        const lname = name.toLowerCase();\n        if ((lname.slice(0, 6) === \"x-amz-\" && !options.unhoistableHeaders?.has(lname)) ||\n            options.hoistableHeaders?.has(lname)) {\n            query[name] = headers[name];\n            delete headers[name];\n        }\n    }\n    return {\n        ...request,\n        headers,\n        query,\n    };\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { GENERATED_HEADERS } from \"./constants\";\nexport const prepareRequest = (request) => {\n    request = HttpRequest.clone(request);\n    for (const headerName of Object.keys(request.headers)) {\n        if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n            delete request.headers[headerName];\n        }\n    }\n    return request;\n};\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\nexport const getCanonicalQuery = ({ query = {} }) => {\n    const keys = [];\n    const serialized = {};\n    for (const key of Object.keys(query)) {\n        if (key.toLowerCase() === SIGNATURE_HEADER) {\n            continue;\n        }\n        const encodedKey = escapeUri(key);\n        keys.push(encodedKey);\n        const value = query[key];\n        if (typeof value === \"string\") {\n            serialized[encodedKey] = `${encodedKey}=${escapeUri(value)}`;\n        }\n        else if (Array.isArray(value)) {\n            serialized[encodedKey] = value\n                .slice(0)\n                .reduce((encoded, value) => encoded.concat([`${encodedKey}=${escapeUri(value)}`]), [])\n                .sort()\n                .join(\"&\");\n        }\n    }\n    return keys\n        .sort()\n        .map((key) => serialized[key])\n        .filter((serialized) => serialized)\n        .join(\"&\");\n};\n","export const iso8601 = (time) => toDate(time)\n    .toISOString()\n    .replace(/\\.\\d{3}Z$/, \"Z\");\nexport const toDate = (time) => {\n    if (typeof time === \"number\") {\n        return new Date(time * 1000);\n    }\n    if (typeof time === \"string\") {\n        if (Number(time)) {\n            return new Date(Number(time) * 1000);\n        }\n        return new Date(time);\n    }\n    return time;\n};\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nimport { escapeUri } from \"@smithy/util-uri-escape\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { iso8601 } from \"./utilDate\";\nexport class SignatureV4Base {\n    service;\n    regionProvider;\n    credentialProvider;\n    sha256;\n    uriEscapePath;\n    applyChecksum;\n    constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n        this.service = service;\n        this.sha256 = sha256;\n        this.uriEscapePath = uriEscapePath;\n        this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n        this.regionProvider = normalizeProvider(region);\n        this.credentialProvider = normalizeProvider(credentials);\n    }\n    createCanonicalRequest(request, canonicalHeaders, payloadHash) {\n        const sortedHeaders = Object.keys(canonicalHeaders).sort();\n        return `${request.method}\n${this.getCanonicalPath(request)}\n${getCanonicalQuery(request)}\n${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join(\"\\n\")}\n\n${sortedHeaders.join(\";\")}\n${payloadHash}`;\n    }\n    async createStringToSign(longDate, credentialScope, canonicalRequest, algorithmIdentifier) {\n        const hash = new this.sha256();\n        hash.update(toUint8Array(canonicalRequest));\n        const hashedRequest = await hash.digest();\n        return `${algorithmIdentifier}\n${longDate}\n${credentialScope}\n${toHex(hashedRequest)}`;\n    }\n    getCanonicalPath({ path }) {\n        if (this.uriEscapePath) {\n            const normalizedPathSegments = [];\n            for (const pathSegment of path.split(\"/\")) {\n                if (pathSegment?.length === 0)\n                    continue;\n                if (pathSegment === \".\")\n                    continue;\n                if (pathSegment === \"..\") {\n                    normalizedPathSegments.pop();\n                }\n                else {\n                    normalizedPathSegments.push(pathSegment);\n                }\n            }\n            const normalizedPath = `${path?.startsWith(\"/\") ? \"/\" : \"\"}${normalizedPathSegments.join(\"/\")}${normalizedPathSegments.length > 0 && path?.endsWith(\"/\") ? \"/\" : \"\"}`;\n            const doubleEncoded = escapeUri(normalizedPath);\n            return doubleEncoded.replace(/%2F/g, \"/\");\n        }\n        return path;\n    }\n    validateResolvedCredentials(credentials) {\n        if (typeof credentials !== \"object\" ||\n            typeof credentials.accessKeyId !== \"string\" ||\n            typeof credentials.secretAccessKey !== \"string\") {\n            throw new Error(\"Resolved credential object is not valid\");\n        }\n    }\n    formatDate(now) {\n        const longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n        return {\n            longDate,\n            shortDate: longDate.slice(0, 8),\n        };\n    }\n    getCanonicalHeaderList(headers) {\n        return Object.keys(headers).sort().join(\";\");\n    }\n}\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { HeaderFormatter } from \"./HeaderFormatter\";\nimport { hasHeader } from \"./headerUtil\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { SignatureV4Base } from \"./SignatureV4Base\";\nexport class SignatureV4 extends SignatureV4Base {\n    headerFormatter = new HeaderFormatter();\n    constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n        super({\n            applyChecksum,\n            credentials,\n            region,\n            service,\n            sha256,\n            uriEscapePath,\n        });\n    }\n    async presign(originalRequest, options = {}) {\n        const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, hoistableHeaders, signingRegion, signingService, } = options;\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const { longDate, shortDate } = this.formatDate(signingDate);\n        if (expiresIn > MAX_PRESIGNED_TTL) {\n            return Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\");\n        }\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        const request = moveHeadersToQuery(prepareRequest(originalRequest), { unhoistableHeaders, hoistableHeaders });\n        if (credentials.sessionToken) {\n            request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n        }\n        request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n        request.query[CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;\n        request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n        request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n        const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n        request.query[SIGNED_HEADERS_QUERY_PARAM] = this.getCanonicalHeaderList(canonicalHeaders);\n        request.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await getPayloadHash(originalRequest, this.sha256)));\n        return request;\n    }\n    async sign(toSign, options) {\n        if (typeof toSign === \"string\") {\n            return this.signString(toSign, options);\n        }\n        else if (toSign.headers && toSign.payload) {\n            return this.signEvent(toSign, options);\n        }\n        else if (toSign.message) {\n            return this.signMessage(toSign, options);\n        }\n        else {\n            return this.signRequest(toSign, options);\n        }\n    }\n    async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {\n        const region = signingRegion ?? (await this.regionProvider());\n        const { shortDate, longDate } = this.formatDate(signingDate);\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        const hashedPayload = await getPayloadHash({ headers: {}, body: payload }, this.sha256);\n        const hash = new this.sha256();\n        hash.update(headers);\n        const hashedHeaders = toHex(await hash.digest());\n        const stringToSign = [\n            EVENT_ALGORITHM_IDENTIFIER,\n            longDate,\n            scope,\n            priorSignature,\n            hashedHeaders,\n            hashedPayload,\n        ].join(\"\\n\");\n        return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });\n    }\n    async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {\n        const promise = this.signEvent({\n            headers: this.headerFormatter.format(signableMessage.message.headers),\n            payload: signableMessage.message.body,\n        }, {\n            signingDate,\n            signingRegion,\n            signingService,\n            priorSignature: signableMessage.priorSignature,\n        });\n        return promise.then((signature) => {\n            return { message: signableMessage.message, signature };\n        });\n    }\n    async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const { shortDate } = this.formatDate(signingDate);\n        const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));\n        hash.update(toUint8Array(stringToSign));\n        return toHex(await hash.digest());\n    }\n    async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {\n        const credentials = await this.credentialProvider();\n        this.validateResolvedCredentials(credentials);\n        const region = signingRegion ?? (await this.regionProvider());\n        const request = prepareRequest(requestToSign);\n        const { longDate, shortDate } = this.formatDate(signingDate);\n        const scope = createScope(shortDate, region, signingService ?? this.service);\n        request.headers[AMZ_DATE_HEADER] = longDate;\n        if (credentials.sessionToken) {\n            request.headers[TOKEN_HEADER] = credentials.sessionToken;\n        }\n        const payloadHash = await getPayloadHash(request, this.sha256);\n        if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n            request.headers[SHA256_HEADER] = payloadHash;\n        }\n        const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n        const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));\n        request.headers[AUTH_HEADER] =\n            `${ALGORITHM_IDENTIFIER} ` +\n                `Credential=${credentials.accessKeyId}/${scope}, ` +\n                `SignedHeaders=${this.getCanonicalHeaderList(canonicalHeaders)}, ` +\n                `Signature=${signature}`;\n        return request;\n    }\n    async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {\n        const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest, ALGORITHM_IDENTIFIER);\n        const hash = new this.sha256(await keyPromise);\n        hash.update(toUint8Array(stringToSign));\n        return toHex(await hash.digest());\n    }\n    getSigningKey(credentials, region, shortDate, service) {\n        return getSigningKey(this.sha256, credentials, shortDate, region, service || this.service);\n    }\n}\n","import { setCredentialFeature } from \"@aws-sdk/core/client\";\nimport { doesIdentityRequireRefresh, isIdentityExpired, memoizeIdentityProvider, normalizeProvider, } from \"@smithy/core\";\nimport { SignatureV4 } from \"@smithy/signature-v4\";\nexport const resolveAwsSdkSigV4Config = (config) => {\n    let inputCredentials = config.credentials;\n    let isUserSupplied = !!config.credentials;\n    let resolvedCredentials = undefined;\n    Object.defineProperty(config, \"credentials\", {\n        set(credentials) {\n            if (credentials && credentials !== inputCredentials && credentials !== resolvedCredentials) {\n                isUserSupplied = true;\n            }\n            inputCredentials = credentials;\n            const memoizedProvider = normalizeCredentialProvider(config, {\n                credentials: inputCredentials,\n                credentialDefaultProvider: config.credentialDefaultProvider,\n            });\n            const boundProvider = bindCallerConfig(config, memoizedProvider);\n            if (isUserSupplied && !boundProvider.attributed) {\n                const isCredentialObject = typeof inputCredentials === \"object\" && inputCredentials !== null;\n                resolvedCredentials = async (options) => {\n                    const creds = await boundProvider(options);\n                    const attributedCreds = creds;\n                    if (isCredentialObject && (!attributedCreds.$source || Object.keys(attributedCreds.$source).length === 0)) {\n                        return setCredentialFeature(attributedCreds, \"CREDENTIALS_CODE\", \"e\");\n                    }\n                    return attributedCreds;\n                };\n                resolvedCredentials.memoized = boundProvider.memoized;\n                resolvedCredentials.configBound = boundProvider.configBound;\n                resolvedCredentials.attributed = true;\n            }\n            else {\n                resolvedCredentials = boundProvider;\n            }\n        },\n        get() {\n            return resolvedCredentials;\n        },\n        enumerable: true,\n        configurable: true,\n    });\n    config.credentials = inputCredentials;\n    const { signingEscapePath = true, systemClockOffset = config.systemClockOffset || 0, sha256, } = config;\n    let signer;\n    if (config.signer) {\n        signer = normalizeProvider(config.signer);\n    }\n    else if (config.regionInfoProvider) {\n        signer = () => normalizeProvider(config.region)()\n            .then(async (region) => [\n            (await config.regionInfoProvider(region, {\n                useFipsEndpoint: await config.useFipsEndpoint(),\n                useDualstackEndpoint: await config.useDualstackEndpoint(),\n            })) || {},\n            region,\n        ])\n            .then(([regionInfo, region]) => {\n            const { signingRegion, signingService } = regionInfo;\n            config.signingRegion = config.signingRegion || signingRegion || region;\n            config.signingName = config.signingName || signingService || config.serviceId;\n            const params = {\n                ...config,\n                credentials: config.credentials,\n                region: config.signingRegion,\n                service: config.signingName,\n                sha256,\n                uriEscapePath: signingEscapePath,\n            };\n            const SignerCtor = config.signerConstructor || SignatureV4;\n            return new SignerCtor(params);\n        });\n    }\n    else {\n        signer = async (authScheme) => {\n            authScheme = Object.assign({}, {\n                name: \"sigv4\",\n                signingName: config.signingName || config.defaultSigningName,\n                signingRegion: await normalizeProvider(config.region)(),\n                properties: {},\n            }, authScheme);\n            const signingRegion = authScheme.signingRegion;\n            const signingService = authScheme.signingName;\n            config.signingRegion = config.signingRegion || signingRegion;\n            config.signingName = config.signingName || signingService || config.serviceId;\n            const params = {\n                ...config,\n                credentials: config.credentials,\n                region: config.signingRegion,\n                service: config.signingName,\n                sha256,\n                uriEscapePath: signingEscapePath,\n            };\n            const SignerCtor = config.signerConstructor || SignatureV4;\n            return new SignerCtor(params);\n        };\n    }\n    const resolvedConfig = Object.assign(config, {\n        systemClockOffset,\n        signingEscapePath,\n        signer,\n    });\n    return resolvedConfig;\n};\nexport const resolveAWSSDKSigV4Config = resolveAwsSdkSigV4Config;\nfunction normalizeCredentialProvider(config, { credentials, credentialDefaultProvider, }) {\n    let credentialsProvider;\n    if (credentials) {\n        if (!credentials?.memoized) {\n            credentialsProvider = memoizeIdentityProvider(credentials, isIdentityExpired, doesIdentityRequireRefresh);\n        }\n        else {\n            credentialsProvider = credentials;\n        }\n    }\n    else {\n        if (credentialDefaultProvider) {\n            credentialsProvider = normalizeProvider(credentialDefaultProvider(Object.assign({}, config, {\n                parentClientConfig: config,\n            })));\n        }\n        else {\n            credentialsProvider = async () => {\n                throw new Error(\"@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.\");\n            };\n        }\n    }\n    credentialsProvider.memoized = true;\n    return credentialsProvider;\n}\nfunction bindCallerConfig(config, credentialsProvider) {\n    if (credentialsProvider.configBound) {\n        return credentialsProvider;\n    }\n    const fn = async (options) => credentialsProvider({ ...options, callerClientConfig: config });\n    fn.memoized = credentialsProvider.memoized;\n    fn.configBound = true;\n    return fn;\n}\n","import { resolveAwsSdkSigV4Config, } from \"@aws-sdk/core/httpAuthSchemes\";\nimport { getSmithyContext, normalizeProvider } from \"@smithy/util-middleware\";\nexport const defaultCognitoIdentityProviderHttpAuthSchemeParametersProvider = async (config, context, input) => {\n    return {\n        operation: getSmithyContext(context).operation,\n        region: await normalizeProvider(config.region)() || (() => {\n            throw new Error(\"expected `region` to be configured for `aws.auth#sigv4`\");\n        })(),\n    };\n};\nfunction createAwsAuthSigv4HttpAuthOption(authParameters) {\n    return {\n        schemeId: \"aws.auth#sigv4\",\n        signingProperties: {\n            name: \"cognito-idp\",\n            region: authParameters.region,\n        },\n        propertiesExtractor: (config, context) => ({\n            signingProperties: {\n                config,\n                context,\n            },\n        }),\n    };\n}\nfunction createSmithyApiNoAuthHttpAuthOption(authParameters) {\n    return {\n        schemeId: \"smithy.api#noAuth\",\n    };\n}\nexport const defaultCognitoIdentityProviderHttpAuthSchemeProvider = (authParameters) => {\n    const options = [];\n    switch (authParameters.operation) {\n        case \"AssociateSoftwareToken\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ChangePassword\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"CompleteWebAuthnRegistration\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ConfirmDevice\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ConfirmForgotPassword\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ConfirmSignUp\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"DeleteUser\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"DeleteUserAttributes\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"DeleteWebAuthnCredential\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ForgetDevice\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ForgotPassword\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GetDevice\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GetTokensFromRefreshToken\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GetUser\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GetUserAttributeVerificationCode\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GetUserAuthFactors\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"GlobalSignOut\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"InitiateAuth\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ListDevices\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ListWebAuthnCredentials\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"ResendConfirmationCode\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"RespondToAuthChallenge\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"RevokeToken\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"SetUserMFAPreference\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"SetUserSettings\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"SignUp\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"StartWebAuthnRegistration\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"UpdateAuthEventFeedback\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"UpdateDeviceStatus\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"UpdateUserAttributes\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"VerifySoftwareToken\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        case \"VerifyUserAttribute\":\n            {\n                options.push(createSmithyApiNoAuthHttpAuthOption(authParameters));\n                break;\n            }\n            ;\n        default: {\n            options.push(createAwsAuthSigv4HttpAuthOption(authParameters));\n        }\n    }\n    return options;\n};\nexport const resolveHttpAuthSchemeConfig = (config) => {\n    const config_0 = resolveAwsSdkSigV4Config(config);\n    return Object.assign(config_0, {\n        authSchemePreference: normalizeProvider(config.authSchemePreference ?? []),\n    });\n};\n","export const resolveClientEndpointParameters = (options) => {\n    return Object.assign(options, {\n        useDualstackEndpoint: options.useDualstackEndpoint ?? false,\n        useFipsEndpoint: options.useFipsEndpoint ?? false,\n        defaultSigningName: \"cognito-idp\",\n    });\n};\nexport const commonParams = {\n    UseFIPS: { type: \"builtInParams\", name: \"useFipsEndpoint\" },\n    Endpoint: { type: \"builtInParams\", name: \"endpoint\" },\n    Region: { type: \"builtInParams\", name: \"region\" },\n    UseDualStack: { type: \"builtInParams\", name: \"useDualstackEndpoint\" },\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { fromUtf8 as fromUtf8Browser } from \"@smithy/util-utf8\";\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n    ? function (input) { return Buffer.from(input, \"utf8\"); }\n    : fromUtf8Browser;\nexport function convertToBuffer(data) {\n    // Already a Uint8, do nothing\n    if (data instanceof Uint8Array)\n        return data;\n    if (typeof data === \"string\") {\n        return fromUtf8(data);\n    }\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n    return new Uint8Array(data);\n}\n//# sourceMappingURL=convertToBuffer.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport function isEmptyData(data) {\n    if (typeof data === \"string\") {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\n//# sourceMappingURL=isEmptyData.js.map","export var SHA_256_HASH = { name: \"SHA-256\" };\nexport var SHA_256_HMAC_ALGO = {\n    name: \"HMAC\",\n    hash: SHA_256_HASH\n};\nexport var EMPTY_DATA_SHA_256 = new Uint8Array([\n    227,\n    176,\n    196,\n    66,\n    152,\n    252,\n    28,\n    20,\n    154,\n    251,\n    244,\n    200,\n    153,\n    111,\n    185,\n    36,\n    39,\n    174,\n    65,\n    228,\n    100,\n    155,\n    147,\n    76,\n    164,\n    149,\n    153,\n    27,\n    120,\n    82,\n    184,\n    85\n]);\n//# sourceMappingURL=constants.js.map","const fallbackWindow = {};\nexport function locateWindow() {\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    else if (typeof self !== \"undefined\") {\n        return self;\n    }\n    return fallbackWindow;\n}\n","import { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nimport { EMPTY_DATA_SHA_256, SHA_256_HASH, SHA_256_HMAC_ALGO, } from \"./constants\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.toHash = new Uint8Array(0);\n        this.secret = secret;\n        this.reset();\n    }\n    Sha256.prototype.update = function (data) {\n        if (isEmptyData(data)) {\n            return;\n        }\n        var update = convertToBuffer(data);\n        var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n        typedArray.set(this.toHash, 0);\n        typedArray.set(update, this.toHash.byteLength);\n        this.toHash = typedArray;\n    };\n    Sha256.prototype.digest = function () {\n        var _this = this;\n        if (this.key) {\n            return this.key.then(function (key) {\n                return locateWindow()\n                    .crypto.subtle.sign(SHA_256_HMAC_ALGO, key, _this.toHash)\n                    .then(function (data) { return new Uint8Array(data); });\n            });\n        }\n        if (isEmptyData(this.toHash)) {\n            return Promise.resolve(EMPTY_DATA_SHA_256);\n        }\n        return Promise.resolve()\n            .then(function () {\n            return locateWindow().crypto.subtle.digest(SHA_256_HASH, _this.toHash);\n        })\n            .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n    };\n    Sha256.prototype.reset = function () {\n        var _this = this;\n        this.toHash = new Uint8Array(0);\n        if (this.secret && this.secret !== void 0) {\n            this.key = new Promise(function (resolve, reject) {\n                locateWindow()\n                    .crypto.subtle.importKey(\"raw\", convertToBuffer(_this.secret), SHA_256_HMAC_ALGO, false, [\"sign\"])\n                    .then(resolve, reject);\n            });\n            this.key.catch(function () { });\n        }\n    };\n    return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=webCryptoSha256.js.map","/**\n * @internal\n */\nexport var BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexport var DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexport var KEY = new Uint32Array([\n    0x428a2f98,\n    0x71374491,\n    0xb5c0fbcf,\n    0xe9b5dba5,\n    0x3956c25b,\n    0x59f111f1,\n    0x923f82a4,\n    0xab1c5ed5,\n    0xd807aa98,\n    0x12835b01,\n    0x243185be,\n    0x550c7dc3,\n    0x72be5d74,\n    0x80deb1fe,\n    0x9bdc06a7,\n    0xc19bf174,\n    0xe49b69c1,\n    0xefbe4786,\n    0x0fc19dc6,\n    0x240ca1cc,\n    0x2de92c6f,\n    0x4a7484aa,\n    0x5cb0a9dc,\n    0x76f988da,\n    0x983e5152,\n    0xa831c66d,\n    0xb00327c8,\n    0xbf597fc7,\n    0xc6e00bf3,\n    0xd5a79147,\n    0x06ca6351,\n    0x14292967,\n    0x27b70a85,\n    0x2e1b2138,\n    0x4d2c6dfc,\n    0x53380d13,\n    0x650a7354,\n    0x766a0abb,\n    0x81c2c92e,\n    0x92722c85,\n    0xa2bfe8a1,\n    0xa81a664b,\n    0xc24b8b70,\n    0xc76c51a3,\n    0xd192e819,\n    0xd6990624,\n    0xf40e3585,\n    0x106aa070,\n    0x19a4c116,\n    0x1e376c08,\n    0x2748774c,\n    0x34b0bcb5,\n    0x391c0cb3,\n    0x4ed8aa4a,\n    0x5b9cca4f,\n    0x682e6ff3,\n    0x748f82ee,\n    0x78a5636f,\n    0x84c87814,\n    0x8cc70208,\n    0x90befffa,\n    0xa4506ceb,\n    0xbef9a3f7,\n    0xc67178f2\n]);\n/**\n * @internal\n */\nexport var INIT = [\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19\n];\n/**\n * @internal\n */\nexport var MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","import { BLOCK_SIZE, DIGEST_LENGTH, INIT, KEY, MAX_HASHABLE_LENGTH } from \"./constants\";\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n    function RawSha256() {\n        this.state = Int32Array.from(INIT);\n        this.temp = new Int32Array(64);\n        this.buffer = new Uint8Array(64);\n        this.bufferLength = 0;\n        this.bytesHashed = 0;\n        /**\n         * @internal\n         */\n        this.finished = false;\n    }\n    RawSha256.prototype.update = function (data) {\n        if (this.finished) {\n            throw new Error(\"Attempted to update an already finished hash.\");\n        }\n        var position = 0;\n        var byteLength = data.byteLength;\n        this.bytesHashed += byteLength;\n        if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n            throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n        }\n        while (byteLength > 0) {\n            this.buffer[this.bufferLength++] = data[position++];\n            byteLength--;\n            if (this.bufferLength === BLOCK_SIZE) {\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n        }\n    };\n    RawSha256.prototype.digest = function () {\n        if (!this.finished) {\n            var bitsHashed = this.bytesHashed * 8;\n            var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n            var undecoratedLength = this.bufferLength;\n            bufferView.setUint8(this.bufferLength++, 0x80);\n            // Ensure the final block has enough room for the hashed length\n            if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n                for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n                    bufferView.setUint8(i, 0);\n                }\n                this.hashBuffer();\n                this.bufferLength = 0;\n            }\n            for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n                bufferView.setUint8(i, 0);\n            }\n            bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n            bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n            this.hashBuffer();\n            this.finished = true;\n        }\n        // The value in state is little-endian rather than big-endian, so flip\n        // each word into a new Uint8Array\n        var out = new Uint8Array(DIGEST_LENGTH);\n        for (var i = 0; i < 8; i++) {\n            out[i * 4] = (this.state[i] >>> 24) & 0xff;\n            out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n            out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n            out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n        }\n        return out;\n    };\n    RawSha256.prototype.hashBuffer = function () {\n        var _a = this, buffer = _a.buffer, state = _a.state;\n        var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n        for (var i = 0; i < BLOCK_SIZE; i++) {\n            if (i < 16) {\n                this.temp[i] =\n                    ((buffer[i * 4] & 0xff) << 24) |\n                        ((buffer[i * 4 + 1] & 0xff) << 16) |\n                        ((buffer[i * 4 + 2] & 0xff) << 8) |\n                        (buffer[i * 4 + 3] & 0xff);\n            }\n            else {\n                var u = this.temp[i - 2];\n                var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n                u = this.temp[i - 15];\n                var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n                this.temp[i] =\n                    ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n            }\n            var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n                ((state4 >>> 11) | (state4 << 21)) ^\n                ((state4 >>> 25) | (state4 << 7))) +\n                ((state4 & state5) ^ (~state4 & state6))) |\n                0) +\n                ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) |\n                0;\n            var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n                ((state0 >>> 13) | (state0 << 19)) ^\n                ((state0 >>> 22) | (state0 << 10))) +\n                ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n                0;\n            state7 = state6;\n            state6 = state5;\n            state5 = state4;\n            state4 = (state3 + t1) | 0;\n            state3 = state2;\n            state2 = state1;\n            state1 = state0;\n            state0 = (t1 + t2) | 0;\n        }\n        state[0] += state0;\n        state[1] += state1;\n        state[2] += state2;\n        state[3] += state3;\n        state[4] += state4;\n        state[5] += state5;\n        state[6] += state6;\n        state[7] += state7;\n    };\n    return RawSha256;\n}());\nexport { RawSha256 };\n//# sourceMappingURL=RawSha256.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { BLOCK_SIZE } from \"./constants\";\nimport { RawSha256 } from \"./RawSha256\";\nimport { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        this.secret = secret;\n        this.hash = new RawSha256();\n        this.reset();\n    }\n    Sha256.prototype.update = function (toHash) {\n        if (isEmptyData(toHash) || this.error) {\n            return;\n        }\n        try {\n            this.hash.update(convertToBuffer(toHash));\n        }\n        catch (e) {\n            this.error = e;\n        }\n    };\n    /* This synchronous method keeps compatibility\n     * with the v2 aws-sdk.\n     */\n    Sha256.prototype.digestSync = function () {\n        if (this.error) {\n            throw this.error;\n        }\n        if (this.outer) {\n            if (!this.outer.finished) {\n                this.outer.update(this.hash.digest());\n            }\n            return this.outer.digest();\n        }\n        return this.hash.digest();\n    };\n    /* The underlying digest method here is synchronous.\n     * To keep the same interface with the other hash functions\n     * the default is to expose this as an async method.\n     * However, it can sometimes be useful to have a sync method.\n     */\n    Sha256.prototype.digest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, this.digestSync()];\n            });\n        });\n    };\n    Sha256.prototype.reset = function () {\n        this.hash = new RawSha256();\n        if (this.secret) {\n            this.outer = new RawSha256();\n            var inner = bufferFromSecret(this.secret);\n            var outer = new Uint8Array(BLOCK_SIZE);\n            outer.set(inner);\n            for (var i = 0; i < BLOCK_SIZE; i++) {\n                inner[i] ^= 0x36;\n                outer[i] ^= 0x5c;\n            }\n            this.hash.update(inner);\n            this.outer.update(outer);\n            // overwrite the copied key in memory\n            for (var i = 0; i < inner.byteLength; i++) {\n                inner[i] = 0;\n            }\n        }\n    };\n    return Sha256;\n}());\nexport { Sha256 };\nfunction bufferFromSecret(secret) {\n    var input = convertToBuffer(secret);\n    if (input.byteLength > BLOCK_SIZE) {\n        var bufferHash = new RawSha256();\n        bufferHash.update(input);\n        input = bufferHash.digest();\n    }\n    var buffer = new Uint8Array(BLOCK_SIZE);\n    buffer.set(input);\n    return buffer;\n}\n//# sourceMappingURL=jsSha256.js.map","import { __awaiter, __generator } from \"tslib\";\nvar subtleCryptoMethods = [\n    \"decrypt\",\n    \"digest\",\n    \"encrypt\",\n    \"exportKey\",\n    \"generateKey\",\n    \"importKey\",\n    \"sign\",\n    \"verify\"\n];\nexport function supportsWebCrypto(window) {\n    if (supportsSecureRandom(window) &&\n        typeof window.crypto.subtle === \"object\") {\n        var subtle = window.crypto.subtle;\n        return supportsSubtleCrypto(subtle);\n    }\n    return false;\n}\nexport function supportsSecureRandom(window) {\n    if (typeof window === \"object\" && typeof window.crypto === \"object\") {\n        var getRandomValues = window.crypto.getRandomValues;\n        return typeof getRandomValues === \"function\";\n    }\n    return false;\n}\nexport function supportsSubtleCrypto(subtle) {\n    return (subtle &&\n        subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === \"function\"; }));\n}\nexport function supportsZeroByteGCM(subtle) {\n    return __awaiter(this, void 0, void 0, function () {\n        var key, zeroByteAuthTag, _a;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    if (!supportsSubtleCrypto(subtle))\n                        return [2 /*return*/, false];\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, 4, , 5]);\n                    return [4 /*yield*/, subtle.generateKey({ name: \"AES-GCM\", length: 128 }, false, [\"encrypt\"])];\n                case 2:\n                    key = _b.sent();\n                    return [4 /*yield*/, subtle.encrypt({\n                            name: \"AES-GCM\",\n                            iv: new Uint8Array(Array(12)),\n                            additionalData: new Uint8Array(Array(16)),\n                            tagLength: 128\n                        }, key, new Uint8Array(0))];\n                case 3:\n                    zeroByteAuthTag = _b.sent();\n                    return [2 /*return*/, zeroByteAuthTag.byteLength === 16];\n                case 4:\n                    _a = _b.sent();\n                    return [2 /*return*/, false];\n                case 5: return [2 /*return*/];\n            }\n        });\n    });\n}\n//# sourceMappingURL=supportsWebCrypto.js.map","import { Sha256 as WebCryptoSha256 } from \"./webCryptoSha256\";\nimport { Sha256 as JsSha256 } from \"@aws-crypto/sha256-js\";\nimport { supportsWebCrypto } from \"@aws-crypto/supports-web-crypto\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nimport { convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n    function Sha256(secret) {\n        if (supportsWebCrypto(locateWindow())) {\n            this.hash = new WebCryptoSha256(secret);\n        }\n        else {\n            this.hash = new JsSha256(secret);\n        }\n    }\n    Sha256.prototype.update = function (data, encoding) {\n        this.hash.update(convertToBuffer(data));\n    };\n    Sha256.prototype.digest = function () {\n        return this.hash.digest();\n    };\n    Sha256.prototype.reset = function () {\n        this.hash.reset();\n    };\n    return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=crossPlatformSha256.js.map","export { createUserAgentStringParsingProvider } from \"./createUserAgentStringParsingProvider\";\nexport const createDefaultUserAgentProvider = ({ serviceId, clientVersion }) => async (config) => {\n    const navigator = typeof window !== \"undefined\" ? window.navigator : undefined;\n    const uaString = navigator?.userAgent ?? \"\";\n    const osName = navigator?.userAgentData?.platform ?? fallback.os(uaString) ?? \"other\";\n    const osVersion = undefined;\n    const brands = navigator?.userAgentData?.brands ?? [];\n    const brand = brands[brands.length - 1];\n    const browserName = brand?.brand ?? fallback.browser(uaString) ?? \"unknown\";\n    const browserVersion = brand?.version ?? \"unknown\";\n    const sections = [\n        [\"aws-sdk-js\", clientVersion],\n        [\"ua\", \"2.1\"],\n        [`os/${osName}`, osVersion],\n        [\"lang/js\"],\n        [\"md/browser\", `${browserName}_${browserVersion}`],\n    ];\n    if (serviceId) {\n        sections.push([`api/${serviceId}`, clientVersion]);\n    }\n    const appId = await config?.userAgentAppId?.();\n    if (appId) {\n        sections.push([`app/${appId}`]);\n    }\n    return sections;\n};\nexport const fallback = {\n    os(ua) {\n        if (/iPhone|iPad|iPod/.test(ua))\n            return \"iOS\";\n        if (/Macintosh|Mac OS X/.test(ua))\n            return \"macOS\";\n        if (/Windows NT/.test(ua))\n            return \"Windows\";\n        if (/Android/.test(ua))\n            return \"Android\";\n        if (/Linux/.test(ua))\n            return \"Linux\";\n        return undefined;\n    },\n    browser(ua) {\n        if (/EdgiOS|EdgA|Edg\\//.test(ua))\n            return \"Microsoft Edge\";\n        if (/Firefox\\//.test(ua))\n            return \"Firefox\";\n        if (/Chrome\\//.test(ua))\n            return \"Chrome\";\n        if (/Safari\\//.test(ua))\n            return \"Safari\";\n        return undefined;\n    },\n};\nexport const defaultUserAgent = createDefaultUserAgentProvider;\n","export const invalidProvider = (message) => () => Promise.reject(message);\n","const TEXT_ENCODER = typeof TextEncoder == \"function\" ? new TextEncoder() : null;\nexport const calculateBodyLength = (body) => {\n    if (typeof body === \"string\") {\n        if (TEXT_ENCODER) {\n            return TEXT_ENCODER.encode(body).byteLength;\n        }\n        let len = body.length;\n        for (let i = len - 1; i >= 0; i--) {\n            const code = body.charCodeAt(i);\n            if (code > 0x7f && code <= 0x7ff)\n                len++;\n            else if (code > 0x7ff && code <= 0xffff)\n                len += 2;\n            if (code >= 0xdc00 && code <= 0xdfff)\n                i--;\n        }\n        return len;\n    }\n    else if (typeof body.byteLength === \"number\") {\n        return body.byteLength;\n    }\n    else if (typeof body.size === \"number\") {\n        return body.size;\n    }\n    throw new Error(`Body Length computation failed for ${body}`);\n};\n","export const DEFAULTS_MODE_OPTIONS = [\"in-region\", \"cross-region\", \"mobile\", \"standard\", \"legacy\"];\n","import { memoize } from \"@smithy/property-provider\";\nimport { DEFAULTS_MODE_OPTIONS } from \"./constants\";\nexport const resolveDefaultsModeConfig = ({ defaultsMode, } = {}) => memoize(async () => {\n    const mode = typeof defaultsMode === \"function\" ? await defaultsMode() : defaultsMode;\n    switch (mode?.toLowerCase()) {\n        case \"auto\":\n            return Promise.resolve(useMobileConfiguration() ? \"mobile\" : \"standard\");\n        case \"mobile\":\n        case \"in-region\":\n        case \"cross-region\":\n        case \"standard\":\n        case \"legacy\":\n            return Promise.resolve(mode?.toLocaleLowerCase());\n        case undefined:\n            return Promise.resolve(\"legacy\");\n        default:\n            throw new Error(`Invalid parameter for \"defaultsMode\", expect ${DEFAULTS_MODE_OPTIONS.join(\", \")}, got ${mode}`);\n    }\n});\nconst useMobileConfiguration = () => {\n    const navigator = window?.navigator;\n    if (navigator?.connection) {\n        const { effectiveType, rtt, downlink } = navigator?.connection;\n        const slow = (typeof effectiveType === \"string\" && effectiveType !== \"4g\") || Number(rtt) > 100 || Number(downlink) < 10;\n        if (slow) {\n            return true;\n        }\n    }\n    return (navigator?.userAgentData?.mobile || (typeof navigator?.maxTouchPoints === \"number\" && navigator?.maxTouchPoints > 1));\n};\n","import { NormalizedSchema, TypeRegistry } from \"@smithy/core/schema\";\nimport { decorateServiceException } from \"@smithy/smithy-client\";\nexport class ProtocolLib {\n    queryCompat;\n    errorRegistry;\n    constructor(queryCompat = false) {\n        this.queryCompat = queryCompat;\n    }\n    resolveRestContentType(defaultContentType, inputSchema) {\n        const members = inputSchema.getMemberSchemas();\n        const httpPayloadMember = Object.values(members).find((m) => {\n            return !!m.getMergedTraits().httpPayload;\n        });\n        if (httpPayloadMember) {\n            const mediaType = httpPayloadMember.getMergedTraits().mediaType;\n            if (mediaType) {\n                return mediaType;\n            }\n            else if (httpPayloadMember.isStringSchema()) {\n                return \"text/plain\";\n            }\n            else if (httpPayloadMember.isBlobSchema()) {\n                return \"application/octet-stream\";\n            }\n            else {\n                return defaultContentType;\n            }\n        }\n        else if (!inputSchema.isUnitSchema()) {\n            const hasBody = Object.values(members).find((m) => {\n                const { httpQuery, httpQueryParams, httpHeader, httpLabel, httpPrefixHeaders } = m.getMergedTraits();\n                const noPrefixHeaders = httpPrefixHeaders === void 0;\n                return !httpQuery && !httpQueryParams && !httpHeader && !httpLabel && noPrefixHeaders;\n            });\n            if (hasBody) {\n                return defaultContentType;\n            }\n        }\n    }\n    async getErrorSchemaOrThrowBaseException(errorIdentifier, defaultNamespace, response, dataObject, metadata, getErrorSchema) {\n        let errorName = errorIdentifier;\n        if (errorIdentifier.includes(\"#\")) {\n            [, errorName] = errorIdentifier.split(\"#\");\n        }\n        const errorMetadata = {\n            $metadata: metadata,\n            $fault: response.statusCode < 500 ? \"client\" : \"server\",\n        };\n        if (!this.errorRegistry) {\n            throw new Error(\"@aws-sdk/core/protocols - error handler not initialized.\");\n        }\n        try {\n            const errorSchema = getErrorSchema?.(this.errorRegistry, errorName) ??\n                this.errorRegistry.getSchema(errorIdentifier);\n            return { errorSchema, errorMetadata };\n        }\n        catch (e) {\n            dataObject.message = dataObject.message ?? dataObject.Message ?? \"UnknownError\";\n            const synthetic = this.errorRegistry;\n            const baseExceptionSchema = synthetic.getBaseException();\n            if (baseExceptionSchema) {\n                const ErrorCtor = synthetic.getErrorCtor(baseExceptionSchema) ?? Error;\n                throw this.decorateServiceException(Object.assign(new ErrorCtor({ name: errorName }), errorMetadata), dataObject);\n            }\n            const d = dataObject;\n            const message = d?.message ?? d?.Message ?? d?.Error?.Message ?? d?.Error?.message;\n            throw this.decorateServiceException(Object.assign(new Error(message), {\n                name: errorName,\n            }, errorMetadata), dataObject);\n        }\n    }\n    compose(composite, errorIdentifier, defaultNamespace) {\n        let namespace = defaultNamespace;\n        if (errorIdentifier.includes(\"#\")) {\n            [namespace] = errorIdentifier.split(\"#\");\n        }\n        const staticRegistry = TypeRegistry.for(namespace);\n        const defaultSyntheticRegistry = TypeRegistry.for(\"smithy.ts.sdk.synthetic.\" + defaultNamespace);\n        composite.copyFrom(staticRegistry);\n        composite.copyFrom(defaultSyntheticRegistry);\n        this.errorRegistry = composite;\n    }\n    decorateServiceException(exception, additions = {}) {\n        if (this.queryCompat) {\n            const msg = exception.Message ?? additions.Message;\n            const error = decorateServiceException(exception, additions);\n            if (msg) {\n                error.message = msg;\n            }\n            error.Error = {\n                ...error.Error,\n                Type: error.Error?.Type,\n                Code: error.Error?.Code,\n                Message: error.Error?.message ?? error.Error?.Message ?? msg,\n            };\n            const reqId = error.$metadata.requestId;\n            if (reqId) {\n                error.RequestId = reqId;\n            }\n            return error;\n        }\n        return decorateServiceException(exception, additions);\n    }\n    setQueryCompatError(output, response) {\n        const queryErrorHeader = response.headers?.[\"x-amzn-query-error\"];\n        if (output !== undefined && queryErrorHeader != null) {\n            const [Code, Type] = queryErrorHeader.split(\";\");\n            const entries = Object.entries(output);\n            const Error = {\n                Code,\n                Type,\n            };\n            Object.assign(output, Error);\n            for (const [k, v] of entries) {\n                Error[k === \"message\" ? \"Message\" : k] = v;\n            }\n            delete Error.__type;\n            output.Error = Error;\n        }\n    }\n    queryCompatOutput(queryCompatErrorData, errorData) {\n        if (queryCompatErrorData.Error) {\n            errorData.Error = queryCompatErrorData.Error;\n        }\n        if (queryCompatErrorData.Type) {\n            errorData.Type = queryCompatErrorData.Type;\n        }\n        if (queryCompatErrorData.Code) {\n            errorData.Code = queryCompatErrorData.Code;\n        }\n    }\n    findQueryCompatibleError(registry, errorName) {\n        try {\n            return registry.getSchema(errorName);\n        }\n        catch (e) {\n            return registry.find((schema) => NormalizedSchema.of(schema).getMergedTraits().awsQueryError?.[0] === errorName);\n        }\n    }\n}\n","export class SerdeContextConfig {\n    serdeContext;\n    setSerdeContext(serdeContext) {\n        this.serdeContext = serdeContext;\n    }\n}\n","export class UnionSerde {\n    from;\n    to;\n    keys;\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n        this.keys = new Set(Object.keys(this.from).filter((k) => k !== \"__type\"));\n    }\n    mark(key) {\n        this.keys.delete(key);\n    }\n    hasUnknown() {\n        return this.keys.size === 1 && Object.keys(this.to).length === 0;\n    }\n    writeUnknown() {\n        if (this.hasUnknown()) {\n            const k = this.keys.values().next().value;\n            const v = this.from[k];\n            this.to.$unknown = [k, v];\n        }\n    }\n}\n","import { NumericValue } from \"@smithy/core/serde\";\nexport function jsonReviver(key, value, context) {\n    if (context?.source) {\n        const numericString = context.source;\n        if (typeof value === \"number\") {\n            if (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER || numericString !== String(value)) {\n                const isFractional = numericString.includes(\".\");\n                if (isFractional) {\n                    return new NumericValue(numericString, \"bigDecimal\");\n                }\n                else {\n                    return BigInt(numericString);\n                }\n            }\n        }\n    }\n    return value;\n}\n","import { collectBody } from \"@smithy/smithy-client\";\nimport { toUtf8 } from \"@smithy/util-utf8\";\nexport const collectBodyString = (streamBody, context) => collectBody(streamBody, context).then((body) => (context?.utf8Encoder ?? toUtf8)(body));\n","import { collectBodyString } from \"../common\";\nexport const parseJsonBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {\n    if (encoded.length) {\n        try {\n            return JSON.parse(encoded);\n        }\n        catch (e) {\n            if (e?.name === \"SyntaxError\") {\n                Object.defineProperty(e, \"$responseBodyText\", {\n                    value: encoded,\n                });\n            }\n            throw e;\n        }\n    }\n    return {};\n});\nexport const parseJsonErrorBody = async (errorBody, context) => {\n    const value = await parseJsonBody(errorBody, context);\n    value.message = value.message ?? value.Message;\n    return value;\n};\nexport const loadRestJsonErrorCode = (output, data) => {\n    const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());\n    const sanitizeErrorCode = (rawValue) => {\n        let cleanValue = rawValue;\n        if (typeof cleanValue === \"number\") {\n            cleanValue = cleanValue.toString();\n        }\n        if (cleanValue.indexOf(\",\") >= 0) {\n            cleanValue = cleanValue.split(\",\")[0];\n        }\n        if (cleanValue.indexOf(\":\") >= 0) {\n            cleanValue = cleanValue.split(\":\")[0];\n        }\n        if (cleanValue.indexOf(\"#\") >= 0) {\n            cleanValue = cleanValue.split(\"#\")[1];\n        }\n        return cleanValue;\n    };\n    const headerKey = findKey(output.headers, \"x-amzn-errortype\");\n    if (headerKey !== undefined) {\n        return sanitizeErrorCode(output.headers[headerKey]);\n    }\n    if (data && typeof data === \"object\") {\n        const codeKey = findKey(data, \"code\");\n        if (codeKey && data[codeKey] !== undefined) {\n            return sanitizeErrorCode(data[codeKey]);\n        }\n        if (data[\"__type\"] !== undefined) {\n            return sanitizeErrorCode(data[\"__type\"]);\n        }\n    }\n};\n","import { determineTimestampFormat } from \"@smithy/core/protocols\";\nimport { NormalizedSchema } from \"@smithy/core/schema\";\nimport { LazyJsonString, NumericValue, parseEpochTimestamp, parseRfc3339DateTimeWithOffset, parseRfc7231DateTime, } from \"@smithy/core/serde\";\nimport { fromBase64 } from \"@smithy/util-base64\";\nimport { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nimport { UnionSerde } from \"../UnionSerde\";\nimport { jsonReviver } from \"./jsonReviver\";\nimport { parseJsonBody } from \"./parseJsonBody\";\nexport class JsonShapeDeserializer extends SerdeContextConfig {\n    settings;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    async read(schema, data) {\n        return this._read(schema, typeof data === \"string\" ? JSON.parse(data, jsonReviver) : await parseJsonBody(data, this.serdeContext));\n    }\n    readObject(schema, data) {\n        return this._read(schema, data);\n    }\n    _read(schema, value) {\n        const isObject = value !== null && typeof value === \"object\";\n        const ns = NormalizedSchema.of(schema);\n        if (isObject) {\n            if (ns.isStructSchema()) {\n                const record = value;\n                const union = ns.isUnionSchema();\n                const out = {};\n                let nameMap = void 0;\n                const { jsonName } = this.settings;\n                if (jsonName) {\n                    nameMap = {};\n                }\n                let unionSerde;\n                if (union) {\n                    unionSerde = new UnionSerde(record, out);\n                }\n                for (const [memberName, memberSchema] of ns.structIterator()) {\n                    let fromKey = memberName;\n                    if (jsonName) {\n                        fromKey = memberSchema.getMergedTraits().jsonName ?? fromKey;\n                        nameMap[fromKey] = memberName;\n                    }\n                    if (union) {\n                        unionSerde.mark(fromKey);\n                    }\n                    if (record[fromKey] != null) {\n                        out[memberName] = this._read(memberSchema, record[fromKey]);\n                    }\n                }\n                if (union) {\n                    unionSerde.writeUnknown();\n                }\n                else if (typeof record.__type === \"string\") {\n                    for (const [k, v] of Object.entries(record)) {\n                        const t = jsonName ? nameMap[k] ?? k : k;\n                        if (!(t in out)) {\n                            out[t] = v;\n                        }\n                    }\n                }\n                return out;\n            }\n            if (Array.isArray(value) && ns.isListSchema()) {\n                const listMember = ns.getValueSchema();\n                const out = [];\n                for (const item of value) {\n                    out.push(this._read(listMember, item));\n                }\n                return out;\n            }\n            if (ns.isMapSchema()) {\n                const mapMember = ns.getValueSchema();\n                const out = {};\n                for (const [_k, _v] of Object.entries(value)) {\n                    out[_k] = this._read(mapMember, _v);\n                }\n                return out;\n            }\n        }\n        if (ns.isBlobSchema() && typeof value === \"string\") {\n            return fromBase64(value);\n        }\n        const mediaType = ns.getMergedTraits().mediaType;\n        if (ns.isStringSchema() && typeof value === \"string\" && mediaType) {\n            const isJson = mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n            if (isJson) {\n                return LazyJsonString.from(value);\n            }\n            return value;\n        }\n        if (ns.isTimestampSchema() && value != null) {\n            const format = determineTimestampFormat(ns, this.settings);\n            switch (format) {\n                case 5:\n                    return parseRfc3339DateTimeWithOffset(value);\n                case 6:\n                    return parseRfc7231DateTime(value);\n                case 7:\n                    return parseEpochTimestamp(value);\n                default:\n                    console.warn(\"Missing timestamp format, parsing value with Date constructor:\", value);\n                    return new Date(value);\n            }\n        }\n        if (ns.isBigIntegerSchema() && (typeof value === \"number\" || typeof value === \"string\")) {\n            return BigInt(value);\n        }\n        if (ns.isBigDecimalSchema() && value != undefined) {\n            if (value instanceof NumericValue) {\n                return value;\n            }\n            const untyped = value;\n            if (untyped.type === \"bigDecimal\" && \"string\" in untyped) {\n                return new NumericValue(untyped.string, untyped.type);\n            }\n            return new NumericValue(String(value), \"bigDecimal\");\n        }\n        if (ns.isNumericSchema() && typeof value === \"string\") {\n            switch (value) {\n                case \"Infinity\":\n                    return Infinity;\n                case \"-Infinity\":\n                    return -Infinity;\n                case \"NaN\":\n                    return NaN;\n            }\n            return value;\n        }\n        if (ns.isDocumentSchema()) {\n            if (isObject) {\n                const out = Array.isArray(value) ? [] : {};\n                for (const [k, v] of Object.entries(value)) {\n                    if (v instanceof NumericValue) {\n                        out[k] = v;\n                    }\n                    else {\n                        out[k] = this._read(ns, v);\n                    }\n                }\n                return out;\n            }\n            else {\n                return structuredClone(value);\n            }\n        }\n        return value;\n    }\n}\n","import { NumericValue } from \"@smithy/core/serde\";\nconst NUMERIC_CONTROL_CHAR = String.fromCharCode(925);\nexport class JsonReplacer {\n    values = new Map();\n    counter = 0;\n    stage = 0;\n    createReplacer() {\n        if (this.stage === 1) {\n            throw new Error(\"@aws-sdk/core/protocols - JsonReplacer already created.\");\n        }\n        if (this.stage === 2) {\n            throw new Error(\"@aws-sdk/core/protocols - JsonReplacer exhausted.\");\n        }\n        this.stage = 1;\n        return (key, value) => {\n            if (value instanceof NumericValue) {\n                const v = `${NUMERIC_CONTROL_CHAR + \"nv\" + this.counter++}_` + value.string;\n                this.values.set(`\"${v}\"`, value.string);\n                return v;\n            }\n            if (typeof value === \"bigint\") {\n                const s = value.toString();\n                const v = `${NUMERIC_CONTROL_CHAR + \"b\" + this.counter++}_` + s;\n                this.values.set(`\"${v}\"`, s);\n                return v;\n            }\n            return value;\n        };\n    }\n    replaceInJson(json) {\n        if (this.stage === 0) {\n            throw new Error(\"@aws-sdk/core/protocols - JsonReplacer not created yet.\");\n        }\n        if (this.stage === 2) {\n            throw new Error(\"@aws-sdk/core/protocols - JsonReplacer exhausted.\");\n        }\n        this.stage = 2;\n        if (this.counter === 0) {\n            return json;\n        }\n        for (const [key, value] of this.values) {\n            json = json.replace(key, value);\n        }\n        return json;\n    }\n}\n","import { determineTimestampFormat } from \"@smithy/core/protocols\";\nimport { NormalizedSchema } from \"@smithy/core/schema\";\nimport { dateToUtcString, generateIdempotencyToken, LazyJsonString, NumericValue } from \"@smithy/core/serde\";\nimport { toBase64 } from \"@smithy/util-base64\";\nimport { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nimport { JsonReplacer } from \"./jsonReplacer\";\nexport class JsonShapeSerializer extends SerdeContextConfig {\n    settings;\n    buffer;\n    useReplacer = false;\n    rootSchema;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    write(schema, value) {\n        this.rootSchema = NormalizedSchema.of(schema);\n        this.buffer = this._write(this.rootSchema, value);\n    }\n    writeDiscriminatedDocument(schema, value) {\n        this.write(schema, value);\n        if (typeof this.buffer === \"object\") {\n            this.buffer.__type = NormalizedSchema.of(schema).getName(true);\n        }\n    }\n    flush() {\n        const { rootSchema, useReplacer } = this;\n        this.rootSchema = undefined;\n        this.useReplacer = false;\n        if (rootSchema?.isStructSchema() || rootSchema?.isDocumentSchema()) {\n            if (!useReplacer) {\n                return JSON.stringify(this.buffer);\n            }\n            const replacer = new JsonReplacer();\n            return replacer.replaceInJson(JSON.stringify(this.buffer, replacer.createReplacer(), 0));\n        }\n        return this.buffer;\n    }\n    _write(schema, value, container) {\n        const isObject = value !== null && typeof value === \"object\";\n        const ns = NormalizedSchema.of(schema);\n        if (isObject) {\n            if (ns.isStructSchema()) {\n                const record = value;\n                const out = {};\n                const { jsonName } = this.settings;\n                let nameMap = void 0;\n                if (jsonName) {\n                    nameMap = {};\n                }\n                for (const [memberName, memberSchema] of ns.structIterator()) {\n                    const serializableValue = this._write(memberSchema, record[memberName], ns);\n                    if (serializableValue !== undefined) {\n                        let targetKey = memberName;\n                        if (jsonName) {\n                            targetKey = memberSchema.getMergedTraits().jsonName ?? memberName;\n                            nameMap[memberName] = targetKey;\n                        }\n                        out[targetKey] = serializableValue;\n                    }\n                }\n                if (ns.isUnionSchema() && Object.keys(out).length === 0) {\n                    const { $unknown } = record;\n                    if (Array.isArray($unknown)) {\n                        const [k, v] = $unknown;\n                        out[k] = this._write(15, v);\n                    }\n                }\n                else if (typeof record.__type === \"string\") {\n                    for (const [k, v] of Object.entries(record)) {\n                        const targetKey = jsonName ? nameMap[k] ?? k : k;\n                        if (!(targetKey in out)) {\n                            out[targetKey] = this._write(15, v);\n                        }\n                    }\n                }\n                return out;\n            }\n            if (Array.isArray(value) && ns.isListSchema()) {\n                const listMember = ns.getValueSchema();\n                const out = [];\n                const sparse = !!ns.getMergedTraits().sparse;\n                for (const item of value) {\n                    if (sparse || item != null) {\n                        out.push(this._write(listMember, item));\n                    }\n                }\n                return out;\n            }\n            if (ns.isMapSchema()) {\n                const mapMember = ns.getValueSchema();\n                const out = {};\n                const sparse = !!ns.getMergedTraits().sparse;\n                for (const [_k, _v] of Object.entries(value)) {\n                    if (sparse || _v != null) {\n                        out[_k] = this._write(mapMember, _v);\n                    }\n                }\n                return out;\n            }\n            if (value instanceof Uint8Array && (ns.isBlobSchema() || ns.isDocumentSchema())) {\n                if (ns === this.rootSchema) {\n                    return value;\n                }\n                return (this.serdeContext?.base64Encoder ?? toBase64)(value);\n            }\n            if (value instanceof Date && (ns.isTimestampSchema() || ns.isDocumentSchema())) {\n                const format = determineTimestampFormat(ns, this.settings);\n                switch (format) {\n                    case 5:\n                        return value.toISOString().replace(\".000Z\", \"Z\");\n                    case 6:\n                        return dateToUtcString(value);\n                    case 7:\n                        return value.getTime() / 1000;\n                    default:\n                        console.warn(\"Missing timestamp format, using epoch seconds\", value);\n                        return value.getTime() / 1000;\n                }\n            }\n            if (value instanceof NumericValue) {\n                this.useReplacer = true;\n            }\n        }\n        if (value === null && container?.isStructSchema()) {\n            return void 0;\n        }\n        if (ns.isStringSchema()) {\n            if (typeof value === \"undefined\" && ns.isIdempotencyToken()) {\n                return generateIdempotencyToken();\n            }\n            const mediaType = ns.getMergedTraits().mediaType;\n            if (value != null && mediaType) {\n                const isJson = mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n                if (isJson) {\n                    return LazyJsonString.from(value);\n                }\n            }\n            return value;\n        }\n        if (typeof value === \"number\" && ns.isNumericSchema()) {\n            if (Math.abs(value) === Infinity || isNaN(value)) {\n                return String(value);\n            }\n            return value;\n        }\n        if (typeof value === \"string\" && ns.isBlobSchema()) {\n            if (ns === this.rootSchema) {\n                return value;\n            }\n            return (this.serdeContext?.base64Encoder ?? toBase64)(value);\n        }\n        if (typeof value === \"bigint\") {\n            this.useReplacer = true;\n        }\n        if (ns.isDocumentSchema()) {\n            if (isObject) {\n                const out = Array.isArray(value) ? [] : {};\n                for (const [k, v] of Object.entries(value)) {\n                    if (v instanceof NumericValue) {\n                        this.useReplacer = true;\n                        out[k] = v;\n                    }\n                    else {\n                        out[k] = this._write(ns, v);\n                    }\n                }\n                return out;\n            }\n            else {\n                return structuredClone(value);\n            }\n        }\n        return value;\n    }\n}\n","import { SerdeContextConfig } from \"../ConfigurableSerdeContext\";\nimport { JsonShapeDeserializer } from \"./JsonShapeDeserializer\";\nimport { JsonShapeSerializer } from \"./JsonShapeSerializer\";\nexport class JsonCodec extends SerdeContextConfig {\n    settings;\n    constructor(settings) {\n        super();\n        this.settings = settings;\n    }\n    createSerializer() {\n        const serializer = new JsonShapeSerializer(this.settings);\n        serializer.setSerdeContext(this.serdeContext);\n        return serializer;\n    }\n    createDeserializer() {\n        const deserializer = new JsonShapeDeserializer(this.settings);\n        deserializer.setSerdeContext(this.serdeContext);\n        return deserializer;\n    }\n}\n","import { RpcProtocol } from \"@smithy/core/protocols\";\nimport { deref, NormalizedSchema } from \"@smithy/core/schema\";\nimport { ProtocolLib } from \"../ProtocolLib\";\nimport { JsonCodec } from \"./JsonCodec\";\nimport { loadRestJsonErrorCode } from \"./parseJsonBody\";\nexport class AwsJsonRpcProtocol extends RpcProtocol {\n    serializer;\n    deserializer;\n    serviceTarget;\n    codec;\n    mixin;\n    awsQueryCompatible;\n    constructor({ defaultNamespace, errorTypeRegistries, serviceTarget, awsQueryCompatible, jsonCodec, }) {\n        super({\n            defaultNamespace,\n            errorTypeRegistries,\n        });\n        this.serviceTarget = serviceTarget;\n        this.codec =\n            jsonCodec ??\n                new JsonCodec({\n                    timestampFormat: {\n                        useTrait: true,\n                        default: 7,\n                    },\n                    jsonName: false,\n                });\n        this.serializer = this.codec.createSerializer();\n        this.deserializer = this.codec.createDeserializer();\n        this.awsQueryCompatible = !!awsQueryCompatible;\n        this.mixin = new ProtocolLib(this.awsQueryCompatible);\n    }\n    async serializeRequest(operationSchema, input, context) {\n        const request = await super.serializeRequest(operationSchema, input, context);\n        if (!request.path.endsWith(\"/\")) {\n            request.path += \"/\";\n        }\n        Object.assign(request.headers, {\n            \"content-type\": `application/x-amz-json-${this.getJsonRpcVersion()}`,\n            \"x-amz-target\": `${this.serviceTarget}.${operationSchema.name}`,\n        });\n        if (this.awsQueryCompatible) {\n            request.headers[\"x-amzn-query-mode\"] = \"true\";\n        }\n        if (deref(operationSchema.input) === \"unit\" || !request.body) {\n            request.body = \"{}\";\n        }\n        return request;\n    }\n    getPayloadCodec() {\n        return this.codec;\n    }\n    async handleError(operationSchema, context, response, dataObject, metadata) {\n        if (this.awsQueryCompatible) {\n            this.mixin.setQueryCompatError(dataObject, response);\n        }\n        const errorIdentifier = loadRestJsonErrorCode(response, dataObject) ?? \"Unknown\";\n        this.mixin.compose(this.compositeErrorRegistry, errorIdentifier, this.options.defaultNamespace);\n        const { errorSchema, errorMetadata } = await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier, this.options.defaultNamespace, response, dataObject, metadata, this.awsQueryCompatible ? this.mixin.findQueryCompatibleError : undefined);\n        const ns = NormalizedSchema.of(errorSchema);\n        const message = dataObject.message ?? dataObject.Message ?? \"UnknownError\";\n        const ErrorCtor = this.compositeErrorRegistry.getErrorCtor(errorSchema) ?? Error;\n        const exception = new ErrorCtor(message);\n        const output = {};\n        for (const [name, member] of ns.structIterator()) {\n            if (dataObject[name] != null) {\n                output[name] = this.codec.createDeserializer().readObject(member, dataObject[name]);\n            }\n        }\n        if (this.awsQueryCompatible) {\n            this.mixin.queryCompatOutput(dataObject, output);\n        }\n        throw this.mixin.decorateServiceException(Object.assign(exception, errorMetadata, {\n            $fault: ns.getMergedTraits().error,\n            message,\n        }, output), dataObject);\n    }\n}\n","import { AwsJsonRpcProtocol } from \"./AwsJsonRpcProtocol\";\nexport class AwsJson1_1Protocol extends AwsJsonRpcProtocol {\n    constructor({ defaultNamespace, errorTypeRegistries, serviceTarget, awsQueryCompatible, jsonCodec, }) {\n        super({\n            defaultNamespace,\n            errorTypeRegistries,\n            serviceTarget,\n            awsQueryCompatible,\n            jsonCodec,\n        });\n    }\n    getShapeId() {\n        return \"aws.protocols#awsJson1_1\";\n    }\n    getJsonRpcVersion() {\n        return \"1.1\";\n    }\n    getDefaultContentType() {\n        return \"application/x-amz-json-1.1\";\n    }\n}\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n    if (allowSubDomains) {\n        for (const label of value.split(\".\")) {\n            if (!isVirtualHostableS3Bucket(label)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    if (!isValidHostLabel(value)) {\n        return false;\n    }\n    if (value.length < 3 || value.length > 63) {\n        return false;\n    }\n    if (value !== value.toLowerCase()) {\n        return false;\n    }\n    if (isIpAddress(value)) {\n        return false;\n    }\n    return true;\n};\n","const ARN_DELIMITER = \":\";\nconst RESOURCE_DELIMITER = \"/\";\nexport const parseArn = (value) => {\n    const segments = value.split(ARN_DELIMITER);\n    if (segments.length < 6)\n        return null;\n    const [arn, partition, service, region, accountId, ...resourcePath] = segments;\n    if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourcePath.join(ARN_DELIMITER) === \"\")\n        return null;\n    const resourceId = resourcePath.map((resource) => resource.split(RESOURCE_DELIMITER)).flat();\n    return {\n        partition,\n        service,\n        region,\n        accountId,\n        resourceId,\n    };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n    const { partitions } = selectedPartitionsInfo;\n    for (const partition of partitions) {\n        const { regions, outputs } = partition;\n        for (const [region, regionData] of Object.entries(regions)) {\n            if (region === value) {\n                return {\n                    ...outputs,\n                    ...regionData,\n                };\n            }\n        }\n    }\n    for (const partition of partitions) {\n        const { regionRegex, outputs } = partition;\n        if (new RegExp(regionRegex).test(value)) {\n            return {\n                ...outputs,\n            };\n        }\n    }\n    const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n    if (!DEFAULT_PARTITION) {\n        throw new Error(\"Provided region was not found in the partition array or regex,\" +\n            \" and default partition with id 'aws' doesn't exist.\");\n    }\n    return {\n        ...DEFAULT_PARTITION.outputs,\n    };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n    selectedPartitionsInfo = partitionsInfo;\n    selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n    setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nexport const awsEndpointFunctions = {\n    isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n    parseArn: parseArn,\n    partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","const w = \"required\", x = \"fn\", y = \"argv\", z = \"ref\";\nconst a = true, b = \"isSet\", c = \"booleanEquals\", d = \"error\", e = \"endpoint\", f = \"tree\", g = \"PartitionResult\", h = \"getAttr\", i = \"stringEquals\", j = { [w]: false, \"type\": \"string\" }, k = { [w]: true, \"default\": false, \"type\": \"boolean\" }, l = { [z]: \"Endpoint\" }, m = { [x]: c, [y]: [{ [z]: \"UseFIPS\" }, true] }, n = { [x]: c, [y]: [{ [z]: \"UseDualStack\" }, true] }, o = {}, p = { [z]: \"Region\" }, q = { [x]: h, [y]: [{ [z]: g }, \"supportsFIPS\"] }, r = { [z]: g }, s = { [x]: c, [y]: [true, { [x]: h, [y]: [r, \"supportsDualStack\"] }] }, t = [m], u = [n], v = [p];\nconst _data = { version: \"1.0\", parameters: { Region: j, UseDualStack: k, UseFIPS: k, Endpoint: j }, rules: [{ conditions: [{ [x]: b, [y]: [l] }], rules: [{ conditions: t, error: \"Invalid Configuration: FIPS and custom endpoint are not supported\", type: d }, { conditions: u, error: \"Invalid Configuration: Dualstack and custom endpoint are not supported\", type: d }, { endpoint: { url: l, properties: o, headers: o }, type: e }], type: f }, { conditions: [{ [x]: b, [y]: v }], rules: [{ conditions: [{ [x]: \"aws.partition\", [y]: v, assign: g }], rules: [{ conditions: [m, n], rules: [{ conditions: [{ [x]: c, [y]: [a, q] }, s], rules: [{ conditions: [{ [x]: i, [y]: [p, \"us-east-1\"] }], endpoint: { url: \"https://cognito-idp-fips.us-east-1.amazonaws.com\", properties: o, headers: o }, type: e }, { conditions: [{ [x]: i, [y]: [p, \"us-east-2\"] }], endpoint: { url: \"https://cognito-idp-fips.us-east-2.amazonaws.com\", properties: o, headers: o }, type: e }, { conditions: [{ [x]: i, [y]: [p, \"us-west-1\"] }], endpoint: { url: \"https://cognito-idp-fips.us-west-1.amazonaws.com\", properties: o, headers: o }, type: e }, { conditions: [{ [x]: i, [y]: [p, \"us-west-2\"] }], endpoint: { url: \"https://cognito-idp-fips.us-west-2.amazonaws.com\", properties: o, headers: o }, type: e }, { endpoint: { url: \"https://cognito-idp-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: o, headers: o }, type: e }], type: f }, { error: \"FIPS and DualStack are enabled, but this partition does not support one or both\", type: d }], type: f }, { conditions: t, rules: [{ conditions: [{ [x]: c, [y]: [q, a] }], rules: [{ endpoint: { url: \"https://cognito-idp-fips.{Region}.{PartitionResult#dnsSuffix}\", properties: o, headers: o }, type: e }], type: f }, { error: \"FIPS is enabled but this partition does not support FIPS\", type: d }], type: f }, { conditions: u, rules: [{ conditions: [s], rules: [{ conditions: [{ [x]: i, [y]: [\"aws\", { [x]: h, [y]: [r, \"name\"] }] }], endpoint: { url: \"https://cognito-idp.{Region}.amazonaws.com\", properties: o, headers: o }, type: e }, { endpoint: { url: \"https://cognito-idp.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: o, headers: o }, type: e }], type: f }, { error: \"DualStack is enabled but this partition does not support DualStack\", type: d }], type: f }, { endpoint: { url: \"https://cognito-idp.{Region}.{PartitionResult#dnsSuffix}\", properties: o, headers: o }, type: e }], type: f }], type: f }, { error: \"Invalid Configuration: Missing Region\", type: d }] };\nexport const ruleSet = _data;\n","import { awsEndpointFunctions } from \"@aws-sdk/util-endpoints\";\nimport { customEndpointFunctions, EndpointCache, resolveEndpoint } from \"@smithy/util-endpoints\";\nimport { ruleSet } from \"./ruleset\";\nconst cache = new EndpointCache({\n    size: 50,\n    params: [\"Endpoint\", \"Region\", \"UseDualStack\", \"UseFIPS\"],\n});\nexport const defaultEndpointResolver = (endpointParams, context = {}) => {\n    return cache.get(endpointParams, () => resolveEndpoint(ruleSet, {\n        endpointParams: endpointParams,\n        logger: context.logger,\n    }));\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","import { ServiceException as __ServiceException, } from \"@smithy/smithy-client\";\nexport { __ServiceException };\nexport class CognitoIdentityProviderServiceException extends __ServiceException {\n    constructor(options) {\n        super(options);\n        Object.setPrototypeOf(this, CognitoIdentityProviderServiceException.prototype);\n    }\n}\n","import { CognitoIdentityProviderServiceException as __BaseException } from \"./CognitoIdentityProviderServiceException\";\nexport class AccessDeniedException extends __BaseException {\n    name = \"AccessDeniedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"AccessDeniedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, AccessDeniedException.prototype);\n    }\n}\nexport class InternalErrorException extends __BaseException {\n    name = \"InternalErrorException\";\n    $fault = \"server\";\n    constructor(opts) {\n        super({\n            name: \"InternalErrorException\",\n            $fault: \"server\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InternalErrorException.prototype);\n    }\n}\nexport class InvalidParameterException extends __BaseException {\n    name = \"InvalidParameterException\";\n    $fault = \"client\";\n    reasonCode;\n    constructor(opts) {\n        super({\n            name: \"InvalidParameterException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidParameterException.prototype);\n        this.reasonCode = opts.reasonCode;\n    }\n}\nexport class NotAuthorizedException extends __BaseException {\n    name = \"NotAuthorizedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"NotAuthorizedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, NotAuthorizedException.prototype);\n    }\n}\nexport class ResourceNotFoundException extends __BaseException {\n    name = \"ResourceNotFoundException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ResourceNotFoundException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ResourceNotFoundException.prototype);\n    }\n}\nexport class TooManyRequestsException extends __BaseException {\n    name = \"TooManyRequestsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"TooManyRequestsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, TooManyRequestsException.prototype);\n    }\n}\nexport class UserImportInProgressException extends __BaseException {\n    name = \"UserImportInProgressException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserImportInProgressException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserImportInProgressException.prototype);\n    }\n}\nexport class InternalServerException extends __BaseException {\n    name = \"InternalServerException\";\n    $fault = \"server\";\n    constructor(opts) {\n        super({\n            name: \"InternalServerException\",\n            $fault: \"server\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InternalServerException.prototype);\n    }\n}\nexport class LimitExceededException extends __BaseException {\n    name = \"LimitExceededException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"LimitExceededException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, LimitExceededException.prototype);\n    }\n}\nexport class UserNotFoundException extends __BaseException {\n    name = \"UserNotFoundException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserNotFoundException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserNotFoundException.prototype);\n    }\n}\nexport class InvalidLambdaResponseException extends __BaseException {\n    name = \"InvalidLambdaResponseException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidLambdaResponseException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidLambdaResponseException.prototype);\n    }\n}\nexport class TooManyFailedAttemptsException extends __BaseException {\n    name = \"TooManyFailedAttemptsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"TooManyFailedAttemptsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, TooManyFailedAttemptsException.prototype);\n    }\n}\nexport class UnexpectedLambdaException extends __BaseException {\n    name = \"UnexpectedLambdaException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnexpectedLambdaException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnexpectedLambdaException.prototype);\n    }\n}\nexport class UserLambdaValidationException extends __BaseException {\n    name = \"UserLambdaValidationException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserLambdaValidationException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserLambdaValidationException.prototype);\n    }\n}\nexport class CodeDeliveryFailureException extends __BaseException {\n    name = \"CodeDeliveryFailureException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"CodeDeliveryFailureException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, CodeDeliveryFailureException.prototype);\n    }\n}\nexport class InvalidPasswordException extends __BaseException {\n    name = \"InvalidPasswordException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidPasswordException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidPasswordException.prototype);\n    }\n}\nexport class InvalidSmsRoleAccessPolicyException extends __BaseException {\n    name = \"InvalidSmsRoleAccessPolicyException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidSmsRoleAccessPolicyException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidSmsRoleAccessPolicyException.prototype);\n    }\n}\nexport class InvalidSmsRoleTrustRelationshipException extends __BaseException {\n    name = \"InvalidSmsRoleTrustRelationshipException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidSmsRoleTrustRelationshipException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidSmsRoleTrustRelationshipException.prototype);\n    }\n}\nexport class PreconditionNotMetException extends __BaseException {\n    name = \"PreconditionNotMetException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"PreconditionNotMetException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, PreconditionNotMetException.prototype);\n    }\n}\nexport class UnsupportedUserStateException extends __BaseException {\n    name = \"UnsupportedUserStateException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnsupportedUserStateException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnsupportedUserStateException.prototype);\n    }\n}\nexport class UsernameExistsException extends __BaseException {\n    name = \"UsernameExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UsernameExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UsernameExistsException.prototype);\n    }\n}\nexport class AliasExistsException extends __BaseException {\n    name = \"AliasExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"AliasExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, AliasExistsException.prototype);\n    }\n}\nexport class InvalidUserPoolConfigurationException extends __BaseException {\n    name = \"InvalidUserPoolConfigurationException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidUserPoolConfigurationException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidUserPoolConfigurationException.prototype);\n    }\n}\nexport class InvalidEmailRoleAccessPolicyException extends __BaseException {\n    name = \"InvalidEmailRoleAccessPolicyException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidEmailRoleAccessPolicyException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidEmailRoleAccessPolicyException.prototype);\n    }\n}\nexport class MFAMethodNotFoundException extends __BaseException {\n    name = \"MFAMethodNotFoundException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"MFAMethodNotFoundException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, MFAMethodNotFoundException.prototype);\n    }\n}\nexport class PasswordResetRequiredException extends __BaseException {\n    name = \"PasswordResetRequiredException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"PasswordResetRequiredException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, PasswordResetRequiredException.prototype);\n    }\n}\nexport class UnsupportedOperationException extends __BaseException {\n    name = \"UnsupportedOperationException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnsupportedOperationException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnsupportedOperationException.prototype);\n    }\n}\nexport class UserNotConfirmedException extends __BaseException {\n    name = \"UserNotConfirmedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserNotConfirmedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserNotConfirmedException.prototype);\n    }\n}\nexport class UserPoolAddOnNotEnabledException extends __BaseException {\n    name = \"UserPoolAddOnNotEnabledException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserPoolAddOnNotEnabledException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserPoolAddOnNotEnabledException.prototype);\n    }\n}\nexport class CodeMismatchException extends __BaseException {\n    name = \"CodeMismatchException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"CodeMismatchException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, CodeMismatchException.prototype);\n    }\n}\nexport class ExpiredCodeException extends __BaseException {\n    name = \"ExpiredCodeException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ExpiredCodeException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ExpiredCodeException.prototype);\n    }\n}\nexport class PasswordHistoryPolicyViolationException extends __BaseException {\n    name = \"PasswordHistoryPolicyViolationException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"PasswordHistoryPolicyViolationException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, PasswordHistoryPolicyViolationException.prototype);\n    }\n}\nexport class SoftwareTokenMFANotFoundException extends __BaseException {\n    name = \"SoftwareTokenMFANotFoundException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"SoftwareTokenMFANotFoundException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, SoftwareTokenMFANotFoundException.prototype);\n    }\n}\nexport class ConcurrentModificationException extends __BaseException {\n    name = \"ConcurrentModificationException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ConcurrentModificationException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ConcurrentModificationException.prototype);\n    }\n}\nexport class ForbiddenException extends __BaseException {\n    name = \"ForbiddenException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ForbiddenException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ForbiddenException.prototype);\n    }\n}\nexport class WebAuthnChallengeNotFoundException extends __BaseException {\n    name = \"WebAuthnChallengeNotFoundException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnChallengeNotFoundException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnChallengeNotFoundException.prototype);\n    }\n}\nexport class WebAuthnClientMismatchException extends __BaseException {\n    name = \"WebAuthnClientMismatchException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnClientMismatchException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnClientMismatchException.prototype);\n    }\n}\nexport class WebAuthnCredentialNotSupportedException extends __BaseException {\n    name = \"WebAuthnCredentialNotSupportedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnCredentialNotSupportedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnCredentialNotSupportedException.prototype);\n    }\n}\nexport class WebAuthnNotEnabledException extends __BaseException {\n    name = \"WebAuthnNotEnabledException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnNotEnabledException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnNotEnabledException.prototype);\n    }\n}\nexport class WebAuthnOriginNotAllowedException extends __BaseException {\n    name = \"WebAuthnOriginNotAllowedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnOriginNotAllowedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnOriginNotAllowedException.prototype);\n    }\n}\nexport class WebAuthnRelyingPartyMismatchException extends __BaseException {\n    name = \"WebAuthnRelyingPartyMismatchException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnRelyingPartyMismatchException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnRelyingPartyMismatchException.prototype);\n    }\n}\nexport class DeviceKeyExistsException extends __BaseException {\n    name = \"DeviceKeyExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"DeviceKeyExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, DeviceKeyExistsException.prototype);\n    }\n}\nexport class GroupExistsException extends __BaseException {\n    name = \"GroupExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"GroupExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, GroupExistsException.prototype);\n    }\n}\nexport class DuplicateProviderException extends __BaseException {\n    name = \"DuplicateProviderException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"DuplicateProviderException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, DuplicateProviderException.prototype);\n    }\n}\nexport class ManagedLoginBrandingExistsException extends __BaseException {\n    name = \"ManagedLoginBrandingExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ManagedLoginBrandingExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ManagedLoginBrandingExistsException.prototype);\n    }\n}\nexport class TermsExistsException extends __BaseException {\n    name = \"TermsExistsException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"TermsExistsException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, TermsExistsException.prototype);\n    }\n}\nexport class FeatureUnavailableInTierException extends __BaseException {\n    name = \"FeatureUnavailableInTierException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"FeatureUnavailableInTierException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, FeatureUnavailableInTierException.prototype);\n    }\n}\nexport class TierChangeNotAllowedException extends __BaseException {\n    name = \"TierChangeNotAllowedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"TierChangeNotAllowedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, TierChangeNotAllowedException.prototype);\n    }\n}\nexport class UserPoolTaggingException extends __BaseException {\n    name = \"UserPoolTaggingException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UserPoolTaggingException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UserPoolTaggingException.prototype);\n    }\n}\nexport class InvalidOAuthFlowException extends __BaseException {\n    name = \"InvalidOAuthFlowException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"InvalidOAuthFlowException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, InvalidOAuthFlowException.prototype);\n    }\n}\nexport class ScopeDoesNotExistException extends __BaseException {\n    name = \"ScopeDoesNotExistException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"ScopeDoesNotExistException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, ScopeDoesNotExistException.prototype);\n    }\n}\nexport class UnsupportedIdentityProviderException extends __BaseException {\n    name = \"UnsupportedIdentityProviderException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnsupportedIdentityProviderException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnsupportedIdentityProviderException.prototype);\n    }\n}\nexport class RefreshTokenReuseException extends __BaseException {\n    name = \"RefreshTokenReuseException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"RefreshTokenReuseException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, RefreshTokenReuseException.prototype);\n    }\n}\nexport class UnauthorizedException extends __BaseException {\n    name = \"UnauthorizedException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnauthorizedException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnauthorizedException.prototype);\n    }\n}\nexport class UnsupportedTokenTypeException extends __BaseException {\n    name = \"UnsupportedTokenTypeException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"UnsupportedTokenTypeException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, UnsupportedTokenTypeException.prototype);\n    }\n}\nexport class WebAuthnConfigurationMissingException extends __BaseException {\n    name = \"WebAuthnConfigurationMissingException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"WebAuthnConfigurationMissingException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, WebAuthnConfigurationMissingException.prototype);\n    }\n}\nexport class EnableSoftwareTokenMFAException extends __BaseException {\n    name = \"EnableSoftwareTokenMFAException\";\n    $fault = \"client\";\n    constructor(opts) {\n        super({\n            name: \"EnableSoftwareTokenMFAException\",\n            $fault: \"client\",\n            ...opts,\n        });\n        Object.setPrototypeOf(this, EnableSoftwareTokenMFAException.prototype);\n    }\n}\n","const _A = \"Actions\";\nconst _AA = \"ApplicationArn\";\nconst _AACUO = \"AllowAdminCreateUserOnly\";\nconst _AAUTG = \"AdminAddUserToGroup\";\nconst _AAUTGR = \"AdminAddUserToGroupRequest\";\nconst _AAl = \"AliasAttributes\";\nconst _AAu = \"AuthenticatorAttachment\";\nconst _AC = \"AvailableChallenges\";\nconst _ACA = \"AddCustomAttributes\";\nconst _ACAR = \"AddCustomAttributesRequest\";\nconst _ACARd = \"AddCustomAttributesResponse\";\nconst _ACSU = \"AdminConfirmSignUp\";\nconst _ACSUR = \"AdminConfirmSignUpRequest\";\nconst _ACSURd = \"AdminConfirmSignUpResponse\";\nconst _ACT = \"AnalyticsConfigurationType\";\nconst _ACU = \"AdminCreateUser\";\nconst _ACUC = \"AdminCreateUserConfig\";\nconst _ACUCT = \"AdminCreateUserConfigType\";\nconst _ACUR = \"AdminCreateUserRequest\";\nconst _ACURd = \"AdminCreateUserResponse\";\nconst _ACn = \"AnalyticsConfiguration\";\nconst _ADE = \"AccessDeniedException\";\nconst _ADPFU = \"AdminDisableProviderForUser\";\nconst _ADPFUR = \"AdminDisableProviderForUserRequest\";\nconst _ADPFURd = \"AdminDisableProviderForUserResponse\";\nconst _ADT = \"AttributeDataType\";\nconst _ADU = \"AdminDeleteUser\";\nconst _ADUA = \"AdminDeleteUserAttributes\";\nconst _ADUAR = \"AdminDeleteUserAttributesRequest\";\nconst _ADUARd = \"AdminDeleteUserAttributesResponse\";\nconst _ADUR = \"AdminDeleteUserRequest\";\nconst _ADURd = \"AdminDisableUserRequest\";\nconst _ADURdm = \"AdminDisableUserResponse\";\nconst _ADUd = \"AdminDisableUser\";\nconst _AE = \"AuthEvents\";\nconst _AEE = \"AliasExistsException\";\nconst _AEI = \"AnalyticsEndpointId\";\nconst _AET = \"AuthEventType\";\nconst _AETu = \"AuthEventsType\";\nconst _AEU = \"AdminEnableUser\";\nconst _AEUR = \"AdminEnableUserRequest\";\nconst _AEURd = \"AdminEnableUserResponse\";\nconst _AF = \"AuthFlow\";\nconst _AFAF = \"AllowedFirstAuthFactors\";\nconst _AFD = \"AdminForgetDevice\";\nconst _AFDR = \"AdminForgetDeviceRequest\";\nconst _AGD = \"AdminGetDevice\";\nconst _AGDR = \"AdminGetDeviceRequest\";\nconst _AGDRd = \"AdminGetDeviceResponse\";\nconst _AGU = \"AdminGetUser\";\nconst _AGUR = \"AdminGetUserRequest\";\nconst _AGURd = \"AdminGetUserResponse\";\nconst _AI = \"ApplicationId\";\nconst _AIA = \"AdminInitiateAuth\";\nconst _AIAR = \"AdminInitiateAuthRequest\";\nconst _AIARd = \"AdminInitiateAuthResponse\";\nconst _ALD = \"AdminListDevices\";\nconst _ALDR = \"AdminListDevicesRequest\";\nconst _ALDRd = \"AdminListDevicesResponse\";\nconst _ALGFU = \"AdminListGroupsForUser\";\nconst _ALGFUR = \"AdminListGroupsForUserRequest\";\nconst _ALGFURd = \"AdminListGroupsForUserResponse\";\nconst _ALPFU = \"AdminLinkProviderForUser\";\nconst _ALPFUR = \"AdminLinkProviderForUserRequest\";\nconst _ALPFURd = \"AdminLinkProviderForUserResponse\";\nconst _ALT = \"AssetListType\";\nconst _ALTt = \"AttributeListType\";\nconst _ALUAE = \"AdminListUserAuthEvents\";\nconst _ALUAER = \"AdminListUserAuthEventsRequest\";\nconst _ALUAERd = \"AdminListUserAuthEventsResponse\";\nconst _AM = \"AnalyticsMetadata\";\nconst _AMT = \"AnalyticsMetadataType\";\nconst _AMt = \"AttributeMapping\";\nconst _AN = \"AttributeName\";\nconst _AOAF = \"AllowedOAuthFlows\";\nconst _AOAFUPC = \"AllowedOAuthFlowsUserPoolClient\";\nconst _AOAS = \"AllowedOAuthScopes\";\nconst _AP = \"AuthParameters\";\nconst _APT = \"AuthParametersType\";\nconst _AR = \"AuthenticationResult\";\nconst _ARS = \"AccountRecoverySetting\";\nconst _ARST = \"AccountRecoverySettingType\";\nconst _ART = \"AuthenticationResultType\";\nconst _ARTAC = \"AdminRespondToAuthChallenge\";\nconst _ARTACR = \"AdminRespondToAuthChallengeRequest\";\nconst _ARTACRd = \"AdminRespondToAuthChallengeResponse\";\nconst _ARUFG = \"AdminRemoveUserFromGroup\";\nconst _ARUFGR = \"AdminRemoveUserFromGroupRequest\";\nconst _ARUP = \"AdminResetUserPassword\";\nconst _ARUPR = \"AdminResetUserPasswordRequest\";\nconst _ARUPRd = \"AdminResetUserPasswordResponse\";\nconst _ARVBU = \"AttributesRequireVerificationBeforeUpdate\";\nconst _ASAF = \"AdvancedSecurityAdditionalFlows\";\nconst _ASAFT = \"AdvancedSecurityAdditionalFlowsType\";\nconst _ASM = \"AdvancedSecurityMode\";\nconst _AST = \"AssociateSoftwareToken\";\nconst _ASTR = \"AssociateSoftwareTokenRequest\";\nconst _ASTRs = \"AssociateSoftwareTokenResponse\";\nconst _ASUMFAP = \"AdminSetUserMFAPreference\";\nconst _ASUMFAPR = \"AdminSetUserMFAPreferenceRequest\";\nconst _ASUMFAPRd = \"AdminSetUserMFAPreferenceResponse\";\nconst _ASUP = \"AdminSetUserPassword\";\nconst _ASUPR = \"AdminSetUserPasswordRequest\";\nconst _ASUPRd = \"AdminSetUserPasswordResponse\";\nconst _ASUS = \"AdminSetUserSettings\";\nconst _ASUSR = \"AdminSetUserSettingsRequest\";\nconst _ASUSRd = \"AdminSetUserSettingsResponse\";\nconst _ASV = \"AuthSessionValidity\";\nconst _AT = \"AssetType\";\nconst _ATAT = \"AccountTakeoverActionsType\";\nconst _ATATc = \"AccountTakeoverActionType\";\nconst _ATG = \"AttributesToGet\";\nconst _ATRC = \"AccountTakeoverRiskConfiguration\";\nconst _ATRCT = \"AccountTakeoverRiskConfigurationType\";\nconst _ATV = \"AccessTokenValidity\";\nconst _ATc = \"AccessToken\";\nconst _ATt = \"AttributeType\";\nconst _ATu = \"AuthenticatorTransports\";\nconst _AUAEF = \"AdminUpdateAuthEventFeedback\";\nconst _AUAEFR = \"AdminUpdateAuthEventFeedbackRequest\";\nconst _AUAEFRd = \"AdminUpdateAuthEventFeedbackResponse\";\nconst _AUDS = \"AdminUpdateDeviceStatus\";\nconst _AUDSR = \"AdminUpdateDeviceStatusRequest\";\nconst _AUDSRd = \"AdminUpdateDeviceStatusResponse\";\nconst _AUGSO = \"AdminUserGlobalSignOut\";\nconst _AUGSOR = \"AdminUserGlobalSignOutRequest\";\nconst _AUGSORd = \"AdminUserGlobalSignOutResponse\";\nconst _AUPCS = \"AddUserPoolClientSecret\";\nconst _AUPCSR = \"AddUserPoolClientSecretRequest\";\nconst _AUPCSRd = \"AddUserPoolClientSecretResponse\";\nconst _AUUA = \"AdminUpdateUserAttributes\";\nconst _AUUAR = \"AdminUpdateUserAttributesRequest\";\nconst _AUUARd = \"AdminUpdateUserAttributesResponse\";\nconst _AVA = \"AutoVerifiedAttributes\";\nconst _AVT = \"AttributeValueType\";\nconst _AWSAI = \"AWSAccountId\";\nconst _Ar = \"Arn\";\nconst _As = \"Assets\";\nconst _At = \"Attributes\";\nconst _B = \"Bytes\";\nconst _BA = \"BucketArn\";\nconst _BE = \"BlockEmail\";\nconst _BIPRL = \"BlockedIPRangeList\";\nconst _C = \"Category\";\nconst _CA = \"CustomAttributes\";\nconst _CAC = \"CreateAuthChallenge\";\nconst _CALT = \"CustomAttributesListType\";\nconst _CAM = \"CustomAuthMode\";\nconst _CAe = \"CertificateArn\";\nconst _CAr = \"CreatedAt\";\nconst _CC = \"ConfirmationCode\";\nconst _CCAT = \"CompromisedCredentialsActionsType\";\nconst _CCD = \"CompromisedCredentialsDetected\";\nconst _CCO = \"CredentialCreationOptions\";\nconst _CCRC = \"CompromisedCredentialsRiskConfiguration\";\nconst _CCRCT = \"CompromisedCredentialsRiskConfigurationType\";\nconst _CD = \"ContextData\";\nconst _CDC = \"CustomDomainConfig\";\nconst _CDCT = \"CustomDomainConfigType\";\nconst _CDD = \"CodeDeliveryDetails\";\nconst _CDDL = \"CodeDeliveryDetailsList\";\nconst _CDDLT = \"CodeDeliveryDetailsListType\";\nconst _CDDT = \"CodeDeliveryDetailsType\";\nconst _CDFE = \"CodeDeliveryFailureException\";\nconst _CDR = \"ConfirmDeviceRequest\";\nconst _CDRo = \"ConfirmDeviceResponse\";\nconst _CDT = \"ContextDataType\";\nconst _CDo = \"CompletionDate\";\nconst _CDon = \"ConfirmDevice\";\nconst _CDr = \"CreationDate\";\nconst _CDu = \"CustomDomain\";\nconst _CELVCT = \"CustomEmailLambdaVersionConfigType\";\nconst _CES = \"CustomEmailSender\";\nconst _CFD = \"CloudFrontDomain\";\nconst _CFDl = \"CloudFrontDistribution\";\nconst _CFP = \"ConfirmForgotPassword\";\nconst _CFPR = \"ConfirmForgotPasswordRequest\";\nconst _CFPRo = \"ConfirmForgotPasswordResponse\";\nconst _CG = \"CreateGroup\";\nconst _CGR = \"CreateGroupRequest\";\nconst _CGRr = \"CreateGroupResponse\";\nconst _CI = \"ClientId\";\nconst _CIP = \"CreateIdentityProvider\";\nconst _CIPR = \"CreateIdentityProviderRequest\";\nconst _CIPRr = \"CreateIdentityProviderResponse\";\nconst _CIT = \"ClientIdType\";\nconst _CIr = \"CredentialId\";\nconst _CM = \"ClientMetadata\";\nconst _CME = \"CodeMismatchException\";\nconst _CMEo = \"ConcurrentModificationException\";\nconst _CMLB = \"CreateManagedLoginBranding\";\nconst _CMLBR = \"CreateManagedLoginBrandingRequest\";\nconst _CMLBRr = \"CreateManagedLoginBrandingResponse\";\nconst _CMo = \"ColorMode\";\nconst _CMom = \"CompletionMessage\";\nconst _CMu = \"CustomMessage\";\nconst _CN = \"ChallengeName\";\nconst _CNl = \"ClientName\";\nconst _CP = \"ChallengeParameters\";\nconst _CPR = \"ChangePasswordRequest\";\nconst _CPRh = \"ChangePasswordResponse\";\nconst _CPh = \"ChangePassword\";\nconst _CR = \"ChallengeResponses\";\nconst _CRLT = \"ChallengeResponseListType\";\nconst _CROND = \"ChallengeRequiredOnNewDevice\";\nconst _CRS = \"CreateResourceServer\";\nconst _CRSR = \"CreateResourceServerRequest\";\nconst _CRSRr = \"CreateResourceServerResponse\";\nconst _CRT = \"ChallengeResponseType\";\nconst _CRTh = \"ChallengeResponsesType\";\nconst _CRh = \"ChallengeResponse\";\nconst _CS = \"ClientSecret\";\nconst _CSCD = \"ClientSecretCreateDate\";\nconst _CSD = \"ClientSecretDescriptor\";\nconst _CSDLT = \"ClientSecretDescriptorListType\";\nconst _CSDT = \"ClientSecretDescriptorType\";\nconst _CSI = \"ClientSecretId\";\nconst _CSMSLVCT = \"CustomSMSLambdaVersionConfigType\";\nconst _CSMSS = \"CustomSMSSender\";\nconst _CSS = \"CSS\";\nconst _CSSV = \"CSSVersion\";\nconst _CST = \"ClientSecretType\";\nconst _CSU = \"ConfirmSignUp\";\nconst _CSUR = \"ConfirmSignUpRequest\";\nconst _CSURo = \"ConfirmSignUpResponse\";\nconst _CSV = \"ClientSecretValue\";\nconst _CSVH = \"CSVHeader\";\nconst _CSa = \"CaseSensitive\";\nconst _CSl = \"ClientSecrets\";\nconst _CSo = \"ConfigurationSet\";\nconst _CT = \"CreateTerms\";\nconst _CTR = \"CreateTermsRequest\";\nconst _CTRr = \"CreateTermsResponse\";\nconst _CUAF = \"ConfiguredUserAuthFactors\";\nconst _CUIJ = \"CreateUserImportJob\";\nconst _CUIJR = \"CreateUserImportJobRequest\";\nconst _CUIJRr = \"CreateUserImportJobResponse\";\nconst _CUP = \"CreateUserPool\";\nconst _CUPC = \"CreateUserPoolClient\";\nconst _CUPCR = \"CreateUserPoolClientRequest\";\nconst _CUPCRr = \"CreateUserPoolClientResponse\";\nconst _CUPD = \"CreateUserPoolDomain\";\nconst _CUPDR = \"CreateUserPoolDomainRequest\";\nconst _CUPDRr = \"CreateUserPoolDomainResponse\";\nconst _CUPR = \"CreateUserPoolRequest\";\nconst _CUPRr = \"CreateUserPoolResponse\";\nconst _CURL = \"CallbackURLs\";\nconst _CWAR = \"CompleteWebAuthnRegistration\";\nconst _CWARR = \"CompleteWebAuthnRegistrationRequest\";\nconst _CWARRo = \"CompleteWebAuthnRegistrationResponse\";\nconst _CWLC = \"CloudWatchLogsConfiguration\";\nconst _CWLCT = \"CloudWatchLogsConfigurationType\";\nconst _CWLRA = \"CloudWatchLogsRoleArn\";\nconst _Ce = \"Certificate\";\nconst _Ci = \"City\";\nconst _Co = \"Country\";\nconst _Cod = \"Code\";\nconst _Cr = \"Credential\";\nconst _Cre = \"Credentials\";\nconst _D = \"Device\";\nconst _DA = \"DeviceAttributes\";\nconst _DAC = \"DefineAuthChallenge\";\nconst _DC = \"DeviceConfiguration\";\nconst _DCD = \"DeviceCreateDate\";\nconst _DCT = \"DeviceConfigurationType\";\nconst _DD = \"DomainDescription\";\nconst _DDM = \"DesiredDeliveryMediums\";\nconst _DDT = \"DomainDescriptionType\";\nconst _DEO = \"DefaultEmailOption\";\nconst _DG = \"DeleteGroup\";\nconst _DGK = \"DeviceGroupKey\";\nconst _DGR = \"DeleteGroupRequest\";\nconst _DIP = \"DeleteIdentityProvider\";\nconst _DIPR = \"DeleteIdentityProviderRequest\";\nconst _DIPRe = \"DescribeIdentityProviderRequest\";\nconst _DIPRes = \"DescribeIdentityProviderResponse\";\nconst _DIPe = \"DescribeIdentityProvider\";\nconst _DK = \"DeviceKey\";\nconst _DKEE = \"DeviceKeyExistsException\";\nconst _DLAD = \"DeviceLastAuthenticatedDate\";\nconst _DLMD = \"DeviceLastModifiedDate\";\nconst _DLT = \"DeviceListType\";\nconst _DM = \"DeliveryMedium\";\nconst _DMLB = \"DeleteManagedLoginBranding\";\nconst _DMLBBC = \"DescribeManagedLoginBrandingByClient\";\nconst _DMLBBCR = \"DescribeManagedLoginBrandingByClientRequest\";\nconst _DMLBBCRe = \"DescribeManagedLoginBrandingByClientResponse\";\nconst _DMLBR = \"DeleteManagedLoginBrandingRequest\";\nconst _DMLBRe = \"DescribeManagedLoginBrandingRequest\";\nconst _DMLBRes = \"DescribeManagedLoginBrandingResponse\";\nconst _DMLBe = \"DescribeManagedLoginBranding\";\nconst _DN = \"DeviceName\";\nconst _DOA = \"DeveloperOnlyAttribute\";\nconst _DOROUP = \"DeviceOnlyRememberedOnUserPrompt\";\nconst _DP = \"DeletionProtection\";\nconst _DPE = \"DuplicateProviderException\";\nconst _DRC = \"DescribeRiskConfiguration\";\nconst _DRCR = \"DescribeRiskConfigurationRequest\";\nconst _DRCRe = \"DescribeRiskConfigurationResponse\";\nconst _DRS = \"DeviceRememberedStatus\";\nconst _DRSR = \"DeleteResourceServerRequest\";\nconst _DRSRe = \"DescribeResourceServerRequest\";\nconst _DRSRes = \"DescribeResourceServerResponse\";\nconst _DRSe = \"DeleteResourceServer\";\nconst _DRSes = \"DescribeResourceServer\";\nconst _DRURI = \"DefaultRedirectURI\";\nconst _DSVC = \"DeviceSecretVerifierConfig\";\nconst _DSVCT = \"DeviceSecretVerifierConfigType\";\nconst _DT = \"DeviceType\";\nconst _DTR = \"DeleteTermsRequest\";\nconst _DTRe = \"DescribeTermsRequest\";\nconst _DTRes = \"DescribeTermsResponse\";\nconst _DTe = \"DeleteTerms\";\nconst _DTes = \"DescribeTerms\";\nconst _DU = \"DestinationUser\";\nconst _DUA = \"DeleteUserAttributes\";\nconst _DUAR = \"DeleteUserAttributesRequest\";\nconst _DUARe = \"DeleteUserAttributesResponse\";\nconst _DUIJ = \"DescribeUserImportJob\";\nconst _DUIJR = \"DescribeUserImportJobRequest\";\nconst _DUIJRe = \"DescribeUserImportJobResponse\";\nconst _DUP = \"DeleteUserPool\";\nconst _DUPC = \"DeleteUserPoolClient\";\nconst _DUPCR = \"DeleteUserPoolClientRequest\";\nconst _DUPCRe = \"DescribeUserPoolClientRequest\";\nconst _DUPCRes = \"DescribeUserPoolClientResponse\";\nconst _DUPCS = \"DeleteUserPoolClientSecret\";\nconst _DUPCSR = \"DeleteUserPoolClientSecretRequest\";\nconst _DUPCSRe = \"DeleteUserPoolClientSecretResponse\";\nconst _DUPCe = \"DescribeUserPoolClient\";\nconst _DUPD = \"DeleteUserPoolDomain\";\nconst _DUPDR = \"DeleteUserPoolDomainRequest\";\nconst _DUPDRe = \"DeleteUserPoolDomainResponse\";\nconst _DUPDRes = \"DescribeUserPoolDomainRequest\";\nconst _DUPDResc = \"DescribeUserPoolDomainResponse\";\nconst _DUPDe = \"DescribeUserPoolDomain\";\nconst _DUPR = \"DeleteUserPoolRequest\";\nconst _DUPRe = \"DescribeUserPoolRequest\";\nconst _DUPRes = \"DescribeUserPoolResponse\";\nconst _DUPe = \"DescribeUserPool\";\nconst _DUR = \"DeleteUserRequest\";\nconst _DUe = \"DeleteUser\";\nconst _DWAC = \"DeleteWebAuthnCredential\";\nconst _DWACR = \"DeleteWebAuthnCredentialRequest\";\nconst _DWACRe = \"DeleteWebAuthnCredentialResponse\";\nconst _De = \"Devices\";\nconst _Des = \"Destination\";\nconst _Desc = \"Description\";\nconst _Do = \"Domain\";\nconst _E = \"Enabled\";\nconst _EA = \"EventAction\";\nconst _EAF = \"ExplicitAuthFlows\";\nconst _EC = \"EmailConfiguration\";\nconst _ECD = \"EventContextData\";\nconst _ECDT = \"EventContextDataType\";\nconst _ECE = \"ExpiredCodeException\";\nconst _ECF = \"EmailConfigurationFailure\";\nconst _ECT = \"EmailConfigurationType\";\nconst _ED = \"EncodedData\";\nconst _EF = \"EventFeedback\";\nconst _EFT = \"EventFeedbackType\";\nconst _EFv = \"EventFilter\";\nconst _EI = \"EventId\";\nconst _EIx = \"ExternalId\";\nconst _EIxp = \"ExpiresIn\";\nconst _EM = \"EmailMessage\";\nconst _EMBL = \"EmailMessageByLink\";\nconst _EMC = \"EmailMfaConfiguration\";\nconst _EMCT = \"EmailMfaConfigType\";\nconst _EMS = \"EmailMfaSettings\";\nconst _EMST = \"EmailMfaSettingsType\";\nconst _ENOU = \"EstimatedNumberOfUsers\";\nconst _EPAUCD = \"EnablePropagateAdditionalUserContextData\";\nconst _ER = \"EventResponse\";\nconst _ERT = \"EventRiskType\";\nconst _ERv = \"EventRisk\";\nconst _ES = \"EventSource\";\nconst _ESA = \"EmailSendingAccount\";\nconst _ESBL = \"EmailSubjectByLink\";\nconst _ESTMFAE = \"EnableSoftwareTokenMFAException\";\nconst _ESm = \"EmailSubject\";\nconst _ET = \"EventType\";\nconst _ETR = \"EnableTokenRevocation\";\nconst _EVM = \"EmailVerificationMessage\";\nconst _EVS = \"EmailVerificationSubject\";\nconst _En = \"Enforcement\";\nconst _Ex = \"Extension\";\nconst _F = \"From\";\nconst _FAC = \"ForceAliasCreation\";\nconst _FC = \"FirehoseConfiguration\";\nconst _FCN = \"FriendlyCredentialName\";\nconst _FCT = \"FirehoseConfigurationType\";\nconst _FD = \"FeedbackDate\";\nconst _FDN = \"FriendlyDeviceName\";\nconst _FDR = \"ForgetDeviceRequest\";\nconst _FDo = \"ForgetDevice\";\nconst _FE = \"ForbiddenException\";\nconst _FP = \"ForgotPassword\";\nconst _FPR = \"ForgotPasswordRequest\";\nconst _FPRo = \"ForgotPasswordResponse\";\nconst _FT = \"FeedbackToken\";\nconst _FU = \"FailedUsers\";\nconst _FUITE = \"FeatureUnavailableInTierException\";\nconst _FV = \"FeedbackValue\";\nconst _Fe = \"Feature\";\nconst _Fi = \"Filter\";\nconst _G = \"Groups\";\nconst _GCSVH = \"GetCSVHeader\";\nconst _GCSVHR = \"GetCSVHeaderRequest\";\nconst _GCSVHRe = \"GetCSVHeaderResponse\";\nconst _GD = \"GetDevice\";\nconst _GDR = \"GetDeviceRequest\";\nconst _GDRe = \"GetDeviceResponse\";\nconst _GEE = \"GroupExistsException\";\nconst _GG = \"GetGroup\";\nconst _GGR = \"GetGroupRequest\";\nconst _GGRe = \"GetGroupResponse\";\nconst _GIPBI = \"GetIdentityProviderByIdentifier\";\nconst _GIPBIR = \"GetIdentityProviderByIdentifierRequest\";\nconst _GIPBIRe = \"GetIdentityProviderByIdentifierResponse\";\nconst _GLDC = \"GetLogDeliveryConfiguration\";\nconst _GLDCR = \"GetLogDeliveryConfigurationRequest\";\nconst _GLDCRe = \"GetLogDeliveryConfigurationResponse\";\nconst _GLT = \"GroupListType\";\nconst _GN = \"GroupName\";\nconst _GS = \"GenerateSecret\";\nconst _GSC = \"GetSigningCertificate\";\nconst _GSCR = \"GetSigningCertificateRequest\";\nconst _GSCRe = \"GetSigningCertificateResponse\";\nconst _GSO = \"GlobalSignOut\";\nconst _GSOR = \"GlobalSignOutRequest\";\nconst _GSORl = \"GlobalSignOutResponse\";\nconst _GT = \"GroupType\";\nconst _GTFRT = \"GetTokensFromRefreshToken\";\nconst _GTFRTR = \"GetTokensFromRefreshTokenRequest\";\nconst _GTFRTRe = \"GetTokensFromRefreshTokenResponse\";\nconst _GU = \"GetUser\";\nconst _GUAF = \"GetUserAuthFactors\";\nconst _GUAFR = \"GetUserAuthFactorsRequest\";\nconst _GUAFRe = \"GetUserAuthFactorsResponse\";\nconst _GUAVC = \"GetUserAttributeVerificationCode\";\nconst _GUAVCR = \"GetUserAttributeVerificationCodeRequest\";\nconst _GUAVCRe = \"GetUserAttributeVerificationCodeResponse\";\nconst _GUIC = \"GetUICustomization\";\nconst _GUICR = \"GetUICustomizationRequest\";\nconst _GUICRe = \"GetUICustomizationResponse\";\nconst _GUPMC = \"GetUserPoolMfaConfig\";\nconst _GUPMCR = \"GetUserPoolMfaConfigRequest\";\nconst _GUPMCRe = \"GetUserPoolMfaConfigResponse\";\nconst _GUR = \"GetUserRequest\";\nconst _GURe = \"GetUserResponse\";\nconst _Gr = \"Group\";\nconst _HA = \"HighAction\";\nconst _HB = \"HtmlBody\";\nconst _HH = \"HttpHeaders\";\nconst _HHL = \"HttpHeaderList\";\nconst _HHt = \"HttpHeader\";\nconst _I = \"Identifier\";\nconst _IA = \"IpAddress\";\nconst _IAR = \"InitiateAuthRequest\";\nconst _IARn = \"InitiateAuthResponse\";\nconst _IAn = \"InitiateAuth\";\nconst _IEE = \"InternalErrorException\";\nconst _IERAPE = \"InvalidEmailRoleAccessPolicyException\";\nconst _IF = \"InboundFederation\";\nconst _IFLT = \"InboundFederationLambdaType\";\nconst _IFm = \"ImageFile\";\nconst _II = \"IdpIdentifiers\";\nconst _IId = \"IdpIdentifier\";\nconst _ILRE = \"InvalidLambdaResponseException\";\nconst _IMT = \"InviteMessageTemplate\";\nconst _IOAFE = \"InvalidOAuthFlowException\";\nconst _IP = \"IdentityProvider\";\nconst _IPE = \"InvalidParameterException\";\nconst _IPEn = \"InvalidPasswordException\";\nconst _IPT = \"IdentityProviderType\";\nconst _ISE = \"InternalServerException\";\nconst _ISRAPE = \"InvalidSmsRoleAccessPolicyException\";\nconst _ISRTRE = \"InvalidSmsRoleTrustRelationshipException\";\nconst _IT = \"IdToken\";\nconst _ITV = \"IdTokenValidity\";\nconst _IU = \"ImageUrl\";\nconst _IUPCE = \"InvalidUserPoolConfigurationException\";\nconst _IUm = \"ImportedUsers\";\nconst _Id = \"Id\";\nconst _JI = \"JobId\";\nconst _JN = \"JobName\";\nconst _KMSKID = \"KMSKeyID\";\nconst _L = \"Limit\";\nconst _LA = \"LowAction\";\nconst _LAa = \"LambdaArn\";\nconst _LC = \"LambdaConfig\";\nconst _LCLT = \"LogConfigurationListType\";\nconst _LCT = \"LambdaConfigType\";\nconst _LCTo = \"LogConfigurationType\";\nconst _LCo = \"LogConfigurations\";\nconst _LD = \"ListDevices\";\nconst _LDC = \"LogDeliveryConfiguration\";\nconst _LDCT = \"LogDeliveryConfigurationType\";\nconst _LDR = \"ListDevicesRequest\";\nconst _LDRi = \"ListDevicesResponse\";\nconst _LEE = \"LimitExceededException\";\nconst _LG = \"ListGroups\";\nconst _LGA = \"LogGroupArn\";\nconst _LGR = \"ListGroupsRequest\";\nconst _LGRi = \"ListGroupsResponse\";\nconst _LIP = \"ListIdentityProviders\";\nconst _LIPR = \"ListIdentityProvidersRequest\";\nconst _LIPRi = \"ListIdentityProvidersResponse\";\nconst _LL = \"LogLevel\";\nconst _LMD = \"LastModifiedDate\";\nconst _LRS = \"ListResourceServers\";\nconst _LRSR = \"ListResourceServersRequest\";\nconst _LRSRi = \"ListResourceServersResponse\";\nconst _LT = \"ListTerms\";\nconst _LTFR = \"ListTagsForResource\";\nconst _LTFRR = \"ListTagsForResourceRequest\";\nconst _LTFRRi = \"ListTagsForResourceResponse\";\nconst _LTR = \"ListTermsRequest\";\nconst _LTRi = \"ListTermsResponse\";\nconst _LU = \"ListUsers\";\nconst _LUIG = \"ListUsersInGroup\";\nconst _LUIGR = \"ListUsersInGroupRequest\";\nconst _LUIGRi = \"ListUsersInGroupResponse\";\nconst _LUIJ = \"ListUserImportJobs\";\nconst _LUIJR = \"ListUserImportJobsRequest\";\nconst _LUIJRi = \"ListUserImportJobsResponse\";\nconst _LUP = \"ListUserPools\";\nconst _LUPC = \"ListUserPoolClients\";\nconst _LUPCR = \"ListUserPoolClientsRequest\";\nconst _LUPCRi = \"ListUserPoolClientsResponse\";\nconst _LUPCS = \"ListUserPoolClientSecrets\";\nconst _LUPCSR = \"ListUserPoolClientSecretsRequest\";\nconst _LUPCSRi = \"ListUserPoolClientSecretsResponse\";\nconst _LUPR = \"ListUserPoolsRequest\";\nconst _LUPRi = \"ListUserPoolsResponse\";\nconst _LUR = \"ListUsersRequest\";\nconst _LURL = \"LogoutURLs\";\nconst _LURi = \"ListUsersResponse\";\nconst _LV = \"LambdaVersion\";\nconst _LWAC = \"ListWebAuthnCredentials\";\nconst _LWACR = \"ListWebAuthnCredentialsRequest\";\nconst _LWACRi = \"ListWebAuthnCredentialsResponse\";\nconst _Li = \"Links\";\nconst _M = \"Message\";\nconst _MA = \"MediumAction\";\nconst _MAe = \"MessageAction\";\nconst _MC = \"MfaConfiguration\";\nconst _ME = \"MfaEmail\";\nconst _MFAMNFE = \"MFAMethodNotFoundException\";\nconst _MFAO = \"MFAOptions\";\nconst _MFAOLT = \"MFAOptionListType\";\nconst _MFAOT = \"MFAOptionType\";\nconst _ML = \"MinimumLength\";\nconst _MLB = \"ManagedLoginBranding\";\nconst _MLBEE = \"ManagedLoginBrandingExistsException\";\nconst _MLBI = \"ManagedLoginBrandingId\";\nconst _MLBT = \"ManagedLoginBrandingType\";\nconst _MLV = \"ManagedLoginVersion\";\nconst _MLa = \"MaxLength\";\nconst _MLi = \"MinLength\";\nconst _MR = \"MaxResults\";\nconst _MTT = \"MessageTemplateType\";\nconst _MV = \"MinValue\";\nconst _MVa = \"MaxValue\";\nconst _Mu = \"Mutable\";\nconst _N = \"Notify\";\nconst _NAC = \"NumberAttributeConstraints\";\nconst _NACT = \"NumberAttributeConstraintsType\";\nconst _NAE = \"NotAuthorizedException\";\nconst _NAEo = \"NoActionEmail\";\nconst _NC = \"NotifyConfiguration\";\nconst _NCT = \"NotifyConfigurationType\";\nconst _NDM = \"NewDeviceMetadata\";\nconst _NDMT = \"NewDeviceMetadataType\";\nconst _NET = \"NotifyEmailType\";\nconst _NT = \"NextToken\";\nconst _Na = \"Name\";\nconst _P = \"Password\";\nconst _PA = \"PreAuthentication\";\nconst _PAN = \"ProviderAttributeName\";\nconst _PAV = \"ProviderAttributeValue\";\nconst _PAo = \"PostAuthentication\";\nconst _PC = \"PostConfirmation\";\nconst _PD = \"ProviderDetails\";\nconst _PDr = \"ProviderDescription\";\nconst _PHPVE = \"PasswordHistoryPolicyViolationException\";\nconst _PHS = \"PasswordHistorySize\";\nconst _PLT = \"ProvidersListType\";\nconst _PM = \"PreferredMfa\";\nconst _PMS = \"PreferredMfaSetting\";\nconst _PN = \"ProviderName\";\nconst _PNME = \"PreconditionNotMetException\";\nconst _PNo = \"PoolName\";\nconst _PP = \"ProposedPassword\";\nconst _PPT = \"PasswordPolicyType\";\nconst _PPa = \"PasswordPolicy\";\nconst _PPr = \"PreviousPassword\";\nconst _PRRE = \"PasswordResetRequiredException\";\nconst _PSU = \"PreSignUp\";\nconst _PSUr = \"PreSignedUrl\";\nconst _PT = \"PasswordType\";\nconst _PTG = \"PreTokenGeneration\";\nconst _PTGC = \"PreTokenGenerationConfig\";\nconst _PTGVCT = \"PreTokenGenerationVersionConfigType\";\nconst _PTa = \"PaginationToken\";\nconst _PTr = \"ProviderType\";\nconst _PUEE = \"PreventUserExistenceErrors\";\nconst _PUIT = \"ProviderUserIdentifierType\";\nconst _PV = \"PasswordVerifier\";\nconst _Pe = \"Permanent\";\nconst _Po = \"Policies\";\nconst _Pr = \"Precedence\";\nconst _Pri = \"Priority\";\nconst _Pro = \"Provider\";\nconst _Prov = \"Providers\";\nconst _R = \"Required\";\nconst _RA = \"RoleArn\";\nconst _RAe = \"ReadAttributes\";\nconst _RAes = \"ResourceArn\";\nconst _RC = \"RiskConfiguration\";\nconst _RCC = \"ResendConfirmationCode\";\nconst _RCCR = \"ResendConfirmationCodeRequest\";\nconst _RCCRe = \"ResendConfirmationCodeResponse\";\nconst _RCT = \"RiskConfigurationType\";\nconst _RD = \"RiskDecision\";\nconst _REC = \"RiskExceptionConfiguration\";\nconst _RECT = \"RiskExceptionConfigurationType\";\nconst _RGPS = \"RetryGracePeriodSeconds\";\nconst _RI = \"ResourceId\";\nconst _RL = \"RiskLevel\";\nconst _RLe = \"RequireLowercase\";\nconst _RM = \"RecoveryMechanisms\";\nconst _RMR = \"ReturnMergedResources\";\nconst _RMT = \"RecoveryMechanismsType\";\nconst _RN = \"RequireNumbers\";\nconst _RNFE = \"ResourceNotFoundException\";\nconst _ROT = \"RecoveryOptionType\";\nconst _RPI = \"RelyingPartyId\";\nconst _RS = \"ResourceServer\";\nconst _RSLT = \"ResourceServersListType\";\nconst _RSSLT = \"ResourceServerScopeListType\";\nconst _RSST = \"ResourceServerScopeType\";\nconst _RST = \"ResourceServerType\";\nconst _RSe = \"ResourceServers\";\nconst _RSeq = \"RequireSymbols\";\nconst _RT = \"RefreshToken\";\nconst _RTAC = \"RespondToAuthChallenge\";\nconst _RTACR = \"RespondToAuthChallengeRequest\";\nconst _RTACRe = \"RespondToAuthChallengeResponse\";\nconst _RTEA = \"ReplyToEmailAddress\";\nconst _RTR = \"RefreshTokenRotation\";\nconst _RTRE = \"RefreshTokenReuseException\";\nconst _RTRT = \"RefreshTokenRotationType\";\nconst _RTRe = \"RevokeTokenRequest\";\nconst _RTRev = \"RevokeTokenResponse\";\nconst _RTV = \"RefreshTokenValidity\";\nconst _RTe = \"ReplyTo\";\nconst _RTev = \"RevokeToken\";\nconst _RU = \"RequireUppercase\";\nconst _S = \"Session\";\nconst _SA = \"SourceArn\";\nconst _SAC = \"StringAttributeConstraints\";\nconst _SACT = \"StringAttributeConstraintsType\";\nconst _SALT = \"SchemaAttributesListType\";\nconst _SAM = \"SmsAuthenticationMessage\";\nconst _SAT = \"SchemaAttributeType\";\nconst _SAc = \"SchemaAttributes\";\nconst _SAt = \"StreamArn\";\nconst _SB = \"S3Bucket\";\nconst _SC = \"SecretCode\";\nconst _SCA = \"SnsCallerArn\";\nconst _SCF = \"SmsConfigurationFailure\";\nconst _SCT = \"SecretCodeType\";\nconst _SCTm = \"SmsConfigurationType\";\nconst _SCTo = \"S3ConfigurationType\";\nconst _SCm = \"SmsConfiguration\";\nconst _SCo = \"S3Configuration\";\nconst _SD = \"ScopeDescription\";\nconst _SDNEE = \"ScopeDoesNotExistException\";\nconst _SDt = \"StartDate\";\nconst _SH = \"SecretHash\";\nconst _SHT = \"SecretHashType\";\nconst _SIP = \"SupportedIdentityProviders\";\nconst _SIPRL = \"SkippedIPRangeList\";\nconst _SIPT = \"SignInPolicyType\";\nconst _SIPi = \"SignInPolicy\";\nconst _SLDC = \"SetLogDeliveryConfiguration\";\nconst _SLDCR = \"SetLogDeliveryConfigurationRequest\";\nconst _SLDCRe = \"SetLogDeliveryConfigurationResponse\";\nconst _SM = \"SmsMessage\";\nconst _SMC = \"SmsMfaConfiguration\";\nconst _SMCT = \"SmsMfaConfigType\";\nconst _SMSM = \"SMSMessage\";\nconst _SMSMS = \"SMSMfaSettings\";\nconst _SMSMST = \"SMSMfaSettingsType\";\nconst _SN = \"ServerName\";\nconst _SNc = \"ScopeName\";\nconst _SP = \"ServerPath\";\nconst _SR = \"SnsRegion\";\nconst _SRC = \"SetRiskConfiguration\";\nconst _SRCR = \"SetRiskConfigurationRequest\";\nconst _SRCRe = \"SetRiskConfigurationResponse\";\nconst _ST = \"SessionType\";\nconst _STMC = \"SoftwareTokenMfaConfiguration\";\nconst _STMCT = \"SoftwareTokenMfaConfigType\";\nconst _STMFANFE = \"SoftwareTokenMFANotFoundException\";\nconst _STMFAUCT = \"SoftwareTokenMFAUserCodeType\";\nconst _STMS = \"SoftwareTokenMfaSettings\";\nconst _STMST = \"SoftwareTokenMfaSettingsType\";\nconst _SU = \"SourceUser\";\nconst _SUIC = \"SetUICustomization\";\nconst _SUICR = \"SetUICustomizationRequest\";\nconst _SUICRe = \"SetUICustomizationResponse\";\nconst _SUIJ = \"StartUserImportJob\";\nconst _SUIJR = \"StartUserImportJobRequest\";\nconst _SUIJRt = \"StartUserImportJobResponse\";\nconst _SUIJRto = \"StopUserImportJobRequest\";\nconst _SUIJRtop = \"StopUserImportJobResponse\";\nconst _SUIJt = \"StopUserImportJob\";\nconst _SUMFAP = \"SetUserMFAPreference\";\nconst _SUMFAPR = \"SetUserMFAPreferenceRequest\";\nconst _SUMFAPRe = \"SetUserMFAPreferenceResponse\";\nconst _SUPMC = \"SetUserPoolMfaConfig\";\nconst _SUPMCR = \"SetUserPoolMfaConfigRequest\";\nconst _SUPMCRe = \"SetUserPoolMfaConfigResponse\";\nconst _SUR = \"SignUpRequest\";\nconst _SURi = \"SignUpResponse\";\nconst _SUS = \"SetUserSettings\";\nconst _SUSR = \"SetUserSettingsRequest\";\nconst _SUSRe = \"SetUserSettingsResponse\";\nconst _SUi = \"SignUp\";\nconst _SUk = \"SkippedUsers\";\nconst _SVM = \"SmsVerificationMessage\";\nconst _SWAR = \"StartWebAuthnRegistration\";\nconst _SWARR = \"StartWebAuthnRegistrationRequest\";\nconst _SWARRt = \"StartWebAuthnRegistrationResponse\";\nconst _Sa = \"Salt\";\nconst _Sc = \"Scopes\";\nconst _Sch = \"Schema\";\nconst _Se = \"Settings\";\nconst _St = \"Status\";\nconst _Su = \"Subject\";\nconst _T = \"Terms\";\nconst _TB = \"TextBody\";\nconst _TCNAE = \"TierChangeNotAllowedException\";\nconst _TDLT = \"TermsDescriptionListType\";\nconst _TDT = \"TermsDescriptionType\";\nconst _TEE = \"TermsExistsException\";\nconst _TI = \"TermsId\";\nconst _TK = \"TagKeys\";\nconst _TMFAE = \"TooManyFailedAttemptsException\";\nconst _TMRE = \"TooManyRequestsException\";\nconst _TMT = \"TokenModelType\";\nconst _TN = \"TermsName\";\nconst _TP = \"TemporaryPassword\";\nconst _TPVD = \"TemporaryPasswordValidityDays\";\nconst _TR = \"TagResource\";\nconst _TRR = \"TagResourceRequest\";\nconst _TRRa = \"TagResourceResponse\";\nconst _TS = \"TermsSource\";\nconst _TT = \"TokenType\";\nconst _TTe = \"TermsType\";\nconst _TVU = \"TokenValidityUnits\";\nconst _TVUT = \"TokenValidityUnitsType\";\nconst _Ta = \"Tags\";\nconst _Ti = \"Timezone\";\nconst _To = \"Token\";\nconst _U = \"Username\";\nconst _UA = \"UserAttributes\";\nconst _UAEF = \"UpdateAuthEventFeedback\";\nconst _UAEFR = \"UpdateAuthEventFeedbackRequest\";\nconst _UAEFRp = \"UpdateAuthEventFeedbackResponse\";\nconst _UAN = \"UserAttributeNames\";\nconst _UAUS = \"UserAttributeUpdateSettings\";\nconst _UAUST = \"UserAttributeUpdateSettingsType\";\nconst _UAVD = \"UnusedAccountValidityDays\";\nconst _UAs = \"UsernameAttributes\";\nconst _UC = \"UsernameConfiguration\";\nconst _UCD = \"UserCreateDate\";\nconst _UCDT = \"UserContextDataType\";\nconst _UCDs = \"UserContextData\";\nconst _UCN = \"UserConfirmationNecessary\";\nconst _UCPV = \"UseCognitoProvidedValues\";\nconst _UCT = \"UsernameConfigurationType\";\nconst _UCs = \"UserConfirmed\";\nconst _UCse = \"UserCode\";\nconst _UDS = \"UserDataShared\";\nconst _UDSR = \"UpdateDeviceStatusRequest\";\nconst _UDSRp = \"UpdateDeviceStatusResponse\";\nconst _UDSp = \"UpdateDeviceStatus\";\nconst _UE = \"UnauthorizedException\";\nconst _UEE = \"UsernameExistsException\";\nconst _UG = \"UpdateGroup\";\nconst _UGR = \"UpdateGroupRequest\";\nconst _UGRp = \"UpdateGroupResponse\";\nconst _UIC = \"UICustomization\";\nconst _UICT = \"UICustomizationType\";\nconst _UIIPE = \"UserImportInProgressException\";\nconst _UIJ = \"UserImportJob\";\nconst _UIJLT = \"UserImportJobsListType\";\nconst _UIJT = \"UserImportJobType\";\nconst _UIJs = \"UserImportJobs\";\nconst _UIP = \"UpdateIdentityProvider\";\nconst _UIPE = \"UnsupportedIdentityProviderException\";\nconst _UIPR = \"UpdateIdentityProviderRequest\";\nconst _UIPRp = \"UpdateIdentityProviderResponse\";\nconst _ULE = \"UnexpectedLambdaException\";\nconst _ULMD = \"UserLastModifiedDate\";\nconst _ULT = \"UsersListType\";\nconst _ULVE = \"UserLambdaValidationException\";\nconst _UM = \"UserMigration\";\nconst _UMFASL = \"UserMFASettingList\";\nconst _UMLB = \"UpdateManagedLoginBranding\";\nconst _UMLBR = \"UpdateManagedLoginBrandingRequest\";\nconst _UMLBRp = \"UpdateManagedLoginBrandingResponse\";\nconst _UNCE = \"UserNotConfirmedException\";\nconst _UNFE = \"UserNotFoundException\";\nconst _UOE = \"UnsupportedOperationException\";\nconst _UP = \"UserPool\";\nconst _UPAO = \"UserPoolAddOns\";\nconst _UPAONEE = \"UserPoolAddOnNotEnabledException\";\nconst _UPAOT = \"UserPoolAddOnsType\";\nconst _UPC = \"UserPoolClient\";\nconst _UPCD = \"UserPoolClientDescription\";\nconst _UPCLT = \"UserPoolClientListType\";\nconst _UPCT = \"UserPoolClientType\";\nconst _UPCs = \"UserPoolClients\";\nconst _UPDT = \"UserPoolDescriptionType\";\nconst _UPI = \"UserPoolId\";\nconst _UPLT = \"UserPoolListType\";\nconst _UPPT = \"UserPoolPolicyType\";\nconst _UPT = \"UserPoolTags\";\nconst _UPTE = \"UserPoolTaggingException\";\nconst _UPTs = \"UserPoolTier\";\nconst _UPTse = \"UserPoolType\";\nconst _UPs = \"UserPools\";\nconst _UR = \"UntagResource\";\nconst _URR = \"UntagResourceRequest\";\nconst _URRn = \"UntagResourceResponse\";\nconst _URS = \"UpdateResourceServer\";\nconst _URSR = \"UpdateResourceServerRequest\";\nconst _URSRp = \"UpdateResourceServerResponse\";\nconst _US = \"UserStatus\";\nconst _USs = \"UserSub\";\nconst _UT = \"UsernameType\";\nconst _UTR = \"UpdateTermsRequest\";\nconst _UTRp = \"UpdateTermsResponse\";\nconst _UTTE = \"UnsupportedTokenTypeException\";\nconst _UTp = \"UpdateTerms\";\nconst _UTs = \"UserType\";\nconst _UUA = \"UpdateUserAttributes\";\nconst _UUAR = \"UpdateUserAttributesRequest\";\nconst _UUARp = \"UpdateUserAttributesResponse\";\nconst _UUP = \"UpdateUserPool\";\nconst _UUPC = \"UpdateUserPoolClient\";\nconst _UUPCR = \"UpdateUserPoolClientRequest\";\nconst _UUPCRp = \"UpdateUserPoolClientResponse\";\nconst _UUPD = \"UpdateUserPoolDomain\";\nconst _UUPDR = \"UpdateUserPoolDomainRequest\";\nconst _UUPDRp = \"UpdateUserPoolDomainResponse\";\nconst _UUPR = \"UpdateUserPoolRequest\";\nconst _UUPRp = \"UpdateUserPoolResponse\";\nconst _UUSE = \"UnsupportedUserStateException\";\nconst _UV = \"UserVerification\";\nconst _Us = \"User\";\nconst _Use = \"Users\";\nconst _V = \"Value\";\nconst _VACR = \"VerifyAuthChallengeResponse\";\nconst _VD = \"ValidationData\";\nconst _VMT = \"VerificationMessageTemplate\";\nconst _VMTT = \"VerificationMessageTemplateType\";\nconst _VST = \"VerifySoftwareToken\";\nconst _VSTR = \"VerifySoftwareTokenRequest\";\nconst _VSTRe = \"VerifySoftwareTokenResponse\";\nconst _VUA = \"VerifyUserAttribute\";\nconst _VUAR = \"VerifyUserAttributeRequest\";\nconst _VUARe = \"VerifyUserAttributeResponse\";\nconst _Ve = \"Version\";\nconst _WA = \"WriteAttributes\";\nconst _WAC = \"WebAuthnConfiguration\";\nconst _WACD = \"WebAuthnCredentialDescription\";\nconst _WACDLT = \"WebAuthnCredentialDescriptionListType\";\nconst _WACME = \"WebAuthnClientMismatchException\";\nconst _WACMEe = \"WebAuthnConfigurationMissingException\";\nconst _WACNFE = \"WebAuthnChallengeNotFoundException\";\nconst _WACNSE = \"WebAuthnCredentialNotSupportedException\";\nconst _WACT = \"WebAuthnConfigurationType\";\nconst _WANEE = \"WebAuthnNotEnabledException\";\nconst _WAONAE = \"WebAuthnOriginNotAllowedException\";\nconst _WARPME = \"WebAuthnRelyingPartyMismatchException\";\nconst _c = \"client\";\nconst _e = \"error\";\nconst _hE = \"httpError\";\nconst _hN = \"headerName\";\nconst _hV = \"headerValue\";\nconst _m = \"message\";\nconst _rC = \"reasonCode\";\nconst _s = \"smithy.ts.sdk.synthetic.com.amazonaws.cognitoidentityprovider\";\nconst _se = \"server\";\nconst n0 = \"com.amazonaws.cognitoidentityprovider\";\nimport { TypeRegistry } from \"@smithy/core/schema\";\nimport { CognitoIdentityProviderServiceException } from \"../models/CognitoIdentityProviderServiceException\";\nimport { AccessDeniedException, AliasExistsException, CodeDeliveryFailureException, CodeMismatchException, ConcurrentModificationException, DeviceKeyExistsException, DuplicateProviderException, EnableSoftwareTokenMFAException, ExpiredCodeException, FeatureUnavailableInTierException, ForbiddenException, GroupExistsException, InternalErrorException, InternalServerException, InvalidEmailRoleAccessPolicyException, InvalidLambdaResponseException, InvalidOAuthFlowException, InvalidParameterException, InvalidPasswordException, InvalidSmsRoleAccessPolicyException, InvalidSmsRoleTrustRelationshipException, InvalidUserPoolConfigurationException, LimitExceededException, ManagedLoginBrandingExistsException, MFAMethodNotFoundException, NotAuthorizedException, PasswordHistoryPolicyViolationException, PasswordResetRequiredException, PreconditionNotMetException, RefreshTokenReuseException, ResourceNotFoundException, ScopeDoesNotExistException, SoftwareTokenMFANotFoundException, TermsExistsException, TierChangeNotAllowedException, TooManyFailedAttemptsException, TooManyRequestsException, UnauthorizedException, UnexpectedLambdaException, UnsupportedIdentityProviderException, UnsupportedOperationException, UnsupportedTokenTypeException, UnsupportedUserStateException, UserImportInProgressException, UserLambdaValidationException, UsernameExistsException, UserNotConfirmedException, UserNotFoundException, UserPoolAddOnNotEnabledException, UserPoolTaggingException, WebAuthnChallengeNotFoundException, WebAuthnClientMismatchException, WebAuthnConfigurationMissingException, WebAuthnCredentialNotSupportedException, WebAuthnNotEnabledException, WebAuthnOriginNotAllowedException, WebAuthnRelyingPartyMismatchException, } from \"../models/errors\";\nconst _s_registry = TypeRegistry.for(_s);\nexport var CognitoIdentityProviderServiceException$ = [-3, _s, \"CognitoIdentityProviderServiceException\", 0, [], []];\n_s_registry.registerError(CognitoIdentityProviderServiceException$, CognitoIdentityProviderServiceException);\nconst n0_registry = TypeRegistry.for(n0);\nexport var AccessDeniedException$ = [-3, n0, _ADE,\n    { [_e]: _c, [_hE]: 403 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(AccessDeniedException$, AccessDeniedException);\nexport var AliasExistsException$ = [-3, n0, _AEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(AliasExistsException$, AliasExistsException);\nexport var CodeDeliveryFailureException$ = [-3, n0, _CDFE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(CodeDeliveryFailureException$, CodeDeliveryFailureException);\nexport var CodeMismatchException$ = [-3, n0, _CME,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(CodeMismatchException$, CodeMismatchException);\nexport var ConcurrentModificationException$ = [-3, n0, _CMEo,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ConcurrentModificationException$, ConcurrentModificationException);\nexport var DeviceKeyExistsException$ = [-3, n0, _DKEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(DeviceKeyExistsException$, DeviceKeyExistsException);\nexport var DuplicateProviderException$ = [-3, n0, _DPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(DuplicateProviderException$, DuplicateProviderException);\nexport var EnableSoftwareTokenMFAException$ = [-3, n0, _ESTMFAE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(EnableSoftwareTokenMFAException$, EnableSoftwareTokenMFAException);\nexport var ExpiredCodeException$ = [-3, n0, _ECE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ExpiredCodeException$, ExpiredCodeException);\nexport var FeatureUnavailableInTierException$ = [-3, n0, _FUITE,\n    { [_e]: _c, [_hE]: 403 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(FeatureUnavailableInTierException$, FeatureUnavailableInTierException);\nexport var ForbiddenException$ = [-3, n0, _FE,\n    { [_e]: _c, [_hE]: 403 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ForbiddenException$, ForbiddenException);\nexport var GroupExistsException$ = [-3, n0, _GEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(GroupExistsException$, GroupExistsException);\nexport var InternalErrorException$ = [-3, n0, _IEE,\n    { [_e]: _se },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InternalErrorException$, InternalErrorException);\nexport var InternalServerException$ = [-3, n0, _ISE,\n    { [_e]: _se },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InternalServerException$, InternalServerException);\nexport var InvalidEmailRoleAccessPolicyException$ = [-3, n0, _IERAPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidEmailRoleAccessPolicyException$, InvalidEmailRoleAccessPolicyException);\nexport var InvalidLambdaResponseException$ = [-3, n0, _ILRE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidLambdaResponseException$, InvalidLambdaResponseException);\nexport var InvalidOAuthFlowException$ = [-3, n0, _IOAFE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidOAuthFlowException$, InvalidOAuthFlowException);\nexport var InvalidParameterException$ = [-3, n0, _IPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m, _rC],\n    [0, 0]\n];\nn0_registry.registerError(InvalidParameterException$, InvalidParameterException);\nexport var InvalidPasswordException$ = [-3, n0, _IPEn,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidPasswordException$, InvalidPasswordException);\nexport var InvalidSmsRoleAccessPolicyException$ = [-3, n0, _ISRAPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidSmsRoleAccessPolicyException$, InvalidSmsRoleAccessPolicyException);\nexport var InvalidSmsRoleTrustRelationshipException$ = [-3, n0, _ISRTRE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidSmsRoleTrustRelationshipException$, InvalidSmsRoleTrustRelationshipException);\nexport var InvalidUserPoolConfigurationException$ = [-3, n0, _IUPCE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(InvalidUserPoolConfigurationException$, InvalidUserPoolConfigurationException);\nexport var LimitExceededException$ = [-3, n0, _LEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(LimitExceededException$, LimitExceededException);\nexport var ManagedLoginBrandingExistsException$ = [-3, n0, _MLBEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ManagedLoginBrandingExistsException$, ManagedLoginBrandingExistsException);\nexport var MFAMethodNotFoundException$ = [-3, n0, _MFAMNFE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(MFAMethodNotFoundException$, MFAMethodNotFoundException);\nexport var NotAuthorizedException$ = [-3, n0, _NAE,\n    { [_e]: _c, [_hE]: 403 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(NotAuthorizedException$, NotAuthorizedException);\nexport var PasswordHistoryPolicyViolationException$ = [-3, n0, _PHPVE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(PasswordHistoryPolicyViolationException$, PasswordHistoryPolicyViolationException);\nexport var PasswordResetRequiredException$ = [-3, n0, _PRRE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(PasswordResetRequiredException$, PasswordResetRequiredException);\nexport var PreconditionNotMetException$ = [-3, n0, _PNME,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(PreconditionNotMetException$, PreconditionNotMetException);\nexport var RefreshTokenReuseException$ = [-3, n0, _RTRE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(RefreshTokenReuseException$, RefreshTokenReuseException);\nexport var ResourceNotFoundException$ = [-3, n0, _RNFE,\n    { [_e]: _c, [_hE]: 404 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ResourceNotFoundException$, ResourceNotFoundException);\nexport var ScopeDoesNotExistException$ = [-3, n0, _SDNEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(ScopeDoesNotExistException$, ScopeDoesNotExistException);\nexport var SoftwareTokenMFANotFoundException$ = [-3, n0, _STMFANFE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(SoftwareTokenMFANotFoundException$, SoftwareTokenMFANotFoundException);\nexport var TermsExistsException$ = [-3, n0, _TEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(TermsExistsException$, TermsExistsException);\nexport var TierChangeNotAllowedException$ = [-3, n0, _TCNAE,\n    { [_e]: _c, [_hE]: 403 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(TierChangeNotAllowedException$, TierChangeNotAllowedException);\nexport var TooManyFailedAttemptsException$ = [-3, n0, _TMFAE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(TooManyFailedAttemptsException$, TooManyFailedAttemptsException);\nexport var TooManyRequestsException$ = [-3, n0, _TMRE,\n    { [_e]: _c, [_hE]: 429 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(TooManyRequestsException$, TooManyRequestsException);\nexport var UnauthorizedException$ = [-3, n0, _UE,\n    { [_e]: _c, [_hE]: 401 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnauthorizedException$, UnauthorizedException);\nexport var UnexpectedLambdaException$ = [-3, n0, _ULE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnexpectedLambdaException$, UnexpectedLambdaException);\nexport var UnsupportedIdentityProviderException$ = [-3, n0, _UIPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnsupportedIdentityProviderException$, UnsupportedIdentityProviderException);\nexport var UnsupportedOperationException$ = [-3, n0, _UOE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnsupportedOperationException$, UnsupportedOperationException);\nexport var UnsupportedTokenTypeException$ = [-3, n0, _UTTE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnsupportedTokenTypeException$, UnsupportedTokenTypeException);\nexport var UnsupportedUserStateException$ = [-3, n0, _UUSE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UnsupportedUserStateException$, UnsupportedUserStateException);\nexport var UserImportInProgressException$ = [-3, n0, _UIIPE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserImportInProgressException$, UserImportInProgressException);\nexport var UserLambdaValidationException$ = [-3, n0, _ULVE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserLambdaValidationException$, UserLambdaValidationException);\nexport var UsernameExistsException$ = [-3, n0, _UEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UsernameExistsException$, UsernameExistsException);\nexport var UserNotConfirmedException$ = [-3, n0, _UNCE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserNotConfirmedException$, UserNotConfirmedException);\nexport var UserNotFoundException$ = [-3, n0, _UNFE,\n    { [_e]: _c, [_hE]: 404 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserNotFoundException$, UserNotFoundException);\nexport var UserPoolAddOnNotEnabledException$ = [-3, n0, _UPAONEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserPoolAddOnNotEnabledException$, UserPoolAddOnNotEnabledException);\nexport var UserPoolTaggingException$ = [-3, n0, _UPTE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(UserPoolTaggingException$, UserPoolTaggingException);\nexport var WebAuthnChallengeNotFoundException$ = [-3, n0, _WACNFE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnChallengeNotFoundException$, WebAuthnChallengeNotFoundException);\nexport var WebAuthnClientMismatchException$ = [-3, n0, _WACME,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnClientMismatchException$, WebAuthnClientMismatchException);\nexport var WebAuthnConfigurationMissingException$ = [-3, n0, _WACMEe,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnConfigurationMissingException$, WebAuthnConfigurationMissingException);\nexport var WebAuthnCredentialNotSupportedException$ = [-3, n0, _WACNSE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnCredentialNotSupportedException$, WebAuthnCredentialNotSupportedException);\nexport var WebAuthnNotEnabledException$ = [-3, n0, _WANEE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnNotEnabledException$, WebAuthnNotEnabledException);\nexport var WebAuthnOriginNotAllowedException$ = [-3, n0, _WAONAE,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnOriginNotAllowedException$, WebAuthnOriginNotAllowedException);\nexport var WebAuthnRelyingPartyMismatchException$ = [-3, n0, _WARPME,\n    { [_e]: _c, [_hE]: 400 },\n    [_m],\n    [0]\n];\nn0_registry.registerError(WebAuthnRelyingPartyMismatchException$, WebAuthnRelyingPartyMismatchException);\nexport const errorTypeRegistries = [\n    _s_registry,\n    n0_registry,\n];\nvar AttributeValueType = [0, n0, _AVT, 8, 0];\nvar ClientIdType = [0, n0, _CIT, 8, 0];\nvar ClientSecretType = [0, n0, _CST, 8, 0];\nvar PasswordType = [0, n0, _PT, 8, 0];\nvar SecretCodeType = [0, n0, _SCT, 8, 0];\nvar SecretHashType = [0, n0, _SHT, 8, 0];\nvar SessionType = [0, n0, _ST, 8, 0];\nvar SoftwareTokenMFAUserCodeType = [0, n0, _STMFAUCT, 8, 0];\nvar TokenModelType = [0, n0, _TMT, 8, 0];\nvar UsernameType = [0, n0, _UT, 8, 0];\nexport var AccountRecoverySettingType$ = [3, n0, _ARST,\n    0,\n    [_RM],\n    [() => RecoveryMechanismsType]\n];\nexport var AccountTakeoverActionsType$ = [3, n0, _ATAT,\n    0,\n    [_LA, _MA, _HA],\n    [() => AccountTakeoverActionType$, () => AccountTakeoverActionType$, () => AccountTakeoverActionType$]\n];\nexport var AccountTakeoverActionType$ = [3, n0, _ATATc,\n    0,\n    [_N, _EA],\n    [2, 0], 2\n];\nexport var AccountTakeoverRiskConfigurationType$ = [3, n0, _ATRCT,\n    0,\n    [_A, _NC],\n    [() => AccountTakeoverActionsType$, () => NotifyConfigurationType$], 1\n];\nexport var AddCustomAttributesRequest$ = [3, n0, _ACAR,\n    0,\n    [_UPI, _CA],\n    [0, () => CustomAttributesListType], 2\n];\nexport var AddCustomAttributesResponse$ = [3, n0, _ACARd,\n    0,\n    [],\n    []\n];\nexport var AddUserPoolClientSecretRequest$ = [3, n0, _AUPCSR,\n    0,\n    [_UPI, _CI, _CS],\n    [0, [() => ClientIdType, 0], [() => ClientSecretType, 0]], 2\n];\nexport var AddUserPoolClientSecretResponse$ = [3, n0, _AUPCSRd,\n    0,\n    [_CSD],\n    [[() => ClientSecretDescriptorType$, 0]]\n];\nexport var AdminAddUserToGroupRequest$ = [3, n0, _AAUTGR,\n    0,\n    [_UPI, _U, _GN],\n    [0, [() => UsernameType, 0], 0], 3\n];\nexport var AdminConfirmSignUpRequest$ = [3, n0, _ACSUR,\n    0,\n    [_UPI, _U, _CM],\n    [0, [() => UsernameType, 0], 128 | 0], 2\n];\nexport var AdminConfirmSignUpResponse$ = [3, n0, _ACSURd,\n    0,\n    [],\n    []\n];\nexport var AdminCreateUserConfigType$ = [3, n0, _ACUCT,\n    0,\n    [_AACUO, _UAVD, _IMT],\n    [2, 1, () => MessageTemplateType$]\n];\nexport var AdminCreateUserRequest$ = [3, n0, _ACUR,\n    0,\n    [_UPI, _U, _UA, _VD, _TP, _FAC, _MAe, _DDM, _CM],\n    [0, [() => UsernameType, 0], [() => AttributeListType, 0], [() => AttributeListType, 0], [() => PasswordType, 0], 2, 0, 64 | 0, 128 | 0], 2\n];\nexport var AdminCreateUserResponse$ = [3, n0, _ACURd,\n    0,\n    [_Us],\n    [[() => UserType$, 0]]\n];\nexport var AdminDeleteUserAttributesRequest$ = [3, n0, _ADUAR,\n    0,\n    [_UPI, _U, _UAN],\n    [0, [() => UsernameType, 0], 64 | 0], 3\n];\nexport var AdminDeleteUserAttributesResponse$ = [3, n0, _ADUARd,\n    0,\n    [],\n    []\n];\nexport var AdminDeleteUserRequest$ = [3, n0, _ADUR,\n    0,\n    [_UPI, _U],\n    [0, [() => UsernameType, 0]], 2\n];\nexport var AdminDisableProviderForUserRequest$ = [3, n0, _ADPFUR,\n    0,\n    [_UPI, _Us],\n    [0, () => ProviderUserIdentifierType$], 2\n];\nexport var AdminDisableProviderForUserResponse$ = [3, n0, _ADPFURd,\n    0,\n    [],\n    []\n];\nexport var AdminDisableUserRequest$ = [3, n0, _ADURd,\n    0,\n    [_UPI, _U],\n    [0, [() => UsernameType, 0]], 2\n];\nexport var AdminDisableUserResponse$ = [3, n0, _ADURdm,\n    0,\n    [],\n    []\n];\nexport var AdminEnableUserRequest$ = [3, n0, _AEUR,\n    0,\n    [_UPI, _U],\n    [0, [() => UsernameType, 0]], 2\n];\nexport var AdminEnableUserResponse$ = [3, n0, _AEURd,\n    0,\n    [],\n    []\n];\nexport var AdminForgetDeviceRequest$ = [3, n0, _AFDR,\n    0,\n    [_UPI, _U, _DK],\n    [0, [() => UsernameType, 0], 0], 3\n];\nexport var AdminGetDeviceRequest$ = [3, n0, _AGDR,\n    0,\n    [_DK, _UPI, _U],\n    [0, 0, [() => UsernameType, 0]], 3\n];\nexport var AdminGetDeviceResponse$ = [3, n0, _AGDRd,\n    0,\n    [_D],\n    [[() => DeviceType$, 0]], 1\n];\nexport var AdminGetUserRequest$ = [3, n0, _AGUR,\n    0,\n    [_UPI, _U],\n    [0, [() => UsernameType, 0]], 2\n];\nexport var AdminGetUserResponse$ = [3, n0, _AGURd,\n    0,\n    [_U, _UA, _UCD, _ULMD, _E, _US, _MFAO, _PMS, _UMFASL],\n    [[() => UsernameType, 0], [() => AttributeListType, 0], 4, 4, 2, 0, () => MFAOptionListType, 0, 64 | 0], 1\n];\nexport var AdminInitiateAuthRequest$ = [3, n0, _AIAR,\n    0,\n    [_UPI, _CI, _AF, _AP, _CM, _AM, _CD, _S],\n    [0, [() => ClientIdType, 0], 0, [() => AuthParametersType, 0], 128 | 0, () => AnalyticsMetadataType$, () => ContextDataType$, [() => SessionType, 0]], 3\n];\nexport var AdminInitiateAuthResponse$ = [3, n0, _AIARd,\n    0,\n    [_CN, _S, _CP, _AR, _AC],\n    [0, [() => SessionType, 0], 128 | 0, [() => AuthenticationResultType$, 0], 64 | 0]\n];\nexport var AdminLinkProviderForUserRequest$ = [3, n0, _ALPFUR,\n    0,\n    [_UPI, _DU, _SU],\n    [0, () => ProviderUserIdentifierType$, () => ProviderUserIdentifierType$], 3\n];\nexport var AdminLinkProviderForUserResponse$ = [3, n0, _ALPFURd,\n    0,\n    [],\n    []\n];\nexport var AdminListDevicesRequest$ = [3, n0, _ALDR,\n    0,\n    [_UPI, _U, _L, _PTa],\n    [0, [() => UsernameType, 0], 1, 0], 2\n];\nexport var AdminListDevicesResponse$ = [3, n0, _ALDRd,\n    0,\n    [_De, _PTa],\n    [[() => DeviceListType, 0], 0]\n];\nexport var AdminListGroupsForUserRequest$ = [3, n0, _ALGFUR,\n    0,\n    [_U, _UPI, _L, _NT],\n    [[() => UsernameType, 0], 0, 1, 0], 2\n];\nexport var AdminListGroupsForUserResponse$ = [3, n0, _ALGFURd,\n    0,\n    [_G, _NT],\n    [() => GroupListType, 0]\n];\nexport var AdminListUserAuthEventsRequest$ = [3, n0, _ALUAER,\n    0,\n    [_UPI, _U, _MR, _NT],\n    [0, [() => UsernameType, 0], 1, 0], 2\n];\nexport var AdminListUserAuthEventsResponse$ = [3, n0, _ALUAERd,\n    0,\n    [_AE, _NT],\n    [() => AuthEventsType, 0]\n];\nexport var AdminRemoveUserFromGroupRequest$ = [3, n0, _ARUFGR,\n    0,\n    [_UPI, _U, _GN],\n    [0, [() => UsernameType, 0], 0], 3\n];\nexport var AdminResetUserPasswordRequest$ = [3, n0, _ARUPR,\n    0,\n    [_UPI, _U, _CM],\n    [0, [() => UsernameType, 0], 128 | 0], 2\n];\nexport var AdminResetUserPasswordResponse$ = [3, n0, _ARUPRd,\n    0,\n    [],\n    []\n];\nexport var AdminRespondToAuthChallengeRequest$ = [3, n0, _ARTACR,\n    0,\n    [_UPI, _CI, _CN, _CR, _S, _AM, _CD, _CM],\n    [0, [() => ClientIdType, 0], 0, [() => ChallengeResponsesType, 0], [() => SessionType, 0], () => AnalyticsMetadataType$, () => ContextDataType$, 128 | 0], 3\n];\nexport var AdminRespondToAuthChallengeResponse$ = [3, n0, _ARTACRd,\n    0,\n    [_CN, _S, _CP, _AR],\n    [0, [() => SessionType, 0], 128 | 0, [() => AuthenticationResultType$, 0]]\n];\nexport var AdminSetUserMFAPreferenceRequest$ = [3, n0, _ASUMFAPR,\n    0,\n    [_U, _UPI, _SMSMS, _STMS, _EMS],\n    [[() => UsernameType, 0], 0, () => SMSMfaSettingsType$, () => SoftwareTokenMfaSettingsType$, () => EmailMfaSettingsType$], 2\n];\nexport var AdminSetUserMFAPreferenceResponse$ = [3, n0, _ASUMFAPRd,\n    0,\n    [],\n    []\n];\nexport var AdminSetUserPasswordRequest$ = [3, n0, _ASUPR,\n    0,\n    [_UPI, _U, _P, _Pe],\n    [0, [() => UsernameType, 0], [() => PasswordType, 0], 2], 3\n];\nexport var AdminSetUserPasswordResponse$ = [3, n0, _ASUPRd,\n    0,\n    [],\n    []\n];\nexport var AdminSetUserSettingsRequest$ = [3, n0, _ASUSR,\n    0,\n    [_UPI, _U, _MFAO],\n    [0, [() => UsernameType, 0], () => MFAOptionListType], 3\n];\nexport var AdminSetUserSettingsResponse$ = [3, n0, _ASUSRd,\n    0,\n    [],\n    []\n];\nexport var AdminUpdateAuthEventFeedbackRequest$ = [3, n0, _AUAEFR,\n    0,\n    [_UPI, _U, _EI, _FV],\n    [0, [() => UsernameType, 0], 0, 0], 4\n];\nexport var AdminUpdateAuthEventFeedbackResponse$ = [3, n0, _AUAEFRd,\n    0,\n    [],\n    []\n];\nexport var AdminUpdateDeviceStatusRequest$ = [3, n0, _AUDSR,\n    0,\n    [_UPI, _U, _DK, _DRS],\n    [0, [() => UsernameType, 0], 0, 0], 3\n];\nexport var AdminUpdateDeviceStatusResponse$ = [3, n0, _AUDSRd,\n    0,\n    [],\n    []\n];\nexport var AdminUpdateUserAttributesRequest$ = [3, n0, _AUUAR,\n    0,\n    [_UPI, _U, _UA, _CM],\n    [0, [() => UsernameType, 0], [() => AttributeListType, 0], 128 | 0], 3\n];\nexport var AdminUpdateUserAttributesResponse$ = [3, n0, _AUUARd,\n    0,\n    [],\n    []\n];\nexport var AdminUserGlobalSignOutRequest$ = [3, n0, _AUGSOR,\n    0,\n    [_UPI, _U],\n    [0, [() => UsernameType, 0]], 2\n];\nexport var AdminUserGlobalSignOutResponse$ = [3, n0, _AUGSORd,\n    0,\n    [],\n    []\n];\nexport var AdvancedSecurityAdditionalFlowsType$ = [3, n0, _ASAFT,\n    0,\n    [_CAM],\n    [0]\n];\nexport var AnalyticsConfigurationType$ = [3, n0, _ACT,\n    0,\n    [_AI, _AA, _RA, _EIx, _UDS],\n    [0, 0, 0, 0, 2]\n];\nexport var AnalyticsMetadataType$ = [3, n0, _AMT,\n    0,\n    [_AEI],\n    [0]\n];\nexport var AssetType$ = [3, n0, _AT,\n    0,\n    [_C, _CMo, _Ex, _B, _RI],\n    [0, 0, 0, 21, 0], 3\n];\nexport var AssociateSoftwareTokenRequest$ = [3, n0, _ASTR,\n    0,\n    [_ATc, _S],\n    [[() => TokenModelType, 0], [() => SessionType, 0]]\n];\nexport var AssociateSoftwareTokenResponse$ = [3, n0, _ASTRs,\n    0,\n    [_SC, _S],\n    [[() => SecretCodeType, 0], [() => SessionType, 0]]\n];\nexport var AttributeType$ = [3, n0, _ATt,\n    0,\n    [_Na, _V],\n    [0, [() => AttributeValueType, 0]], 1\n];\nexport var AuthenticationResultType$ = [3, n0, _ART,\n    0,\n    [_ATc, _EIxp, _TT, _RT, _IT, _NDM],\n    [[() => TokenModelType, 0], 1, 0, [() => TokenModelType, 0], [() => TokenModelType, 0], () => NewDeviceMetadataType$]\n];\nexport var AuthEventType$ = [3, n0, _AET,\n    0,\n    [_EI, _ET, _CDr, _ER, _ERv, _CR, _ECD, _EF],\n    [0, 0, 4, 0, () => EventRiskType$, () => ChallengeResponseListType, () => EventContextDataType$, () => EventFeedbackType$]\n];\nexport var ChallengeResponseType$ = [3, n0, _CRT,\n    0,\n    [_CN, _CRh],\n    [0, 0]\n];\nexport var ChangePasswordRequest$ = [3, n0, _CPR,\n    0,\n    [_PP, _ATc, _PPr],\n    [[() => PasswordType, 0], [() => TokenModelType, 0], [() => PasswordType, 0]], 2\n];\nexport var ChangePasswordResponse$ = [3, n0, _CPRh,\n    0,\n    [],\n    []\n];\nexport var ClientSecretDescriptorType$ = [3, n0, _CSDT,\n    0,\n    [_CSI, _CSV, _CSCD],\n    [0, [() => ClientSecretType, 0], 4]\n];\nexport var CloudWatchLogsConfigurationType$ = [3, n0, _CWLCT,\n    0,\n    [_LGA],\n    [0]\n];\nexport var CodeDeliveryDetailsType$ = [3, n0, _CDDT,\n    0,\n    [_Des, _DM, _AN],\n    [0, 0, 0]\n];\nexport var CompleteWebAuthnRegistrationRequest$ = [3, n0, _CWARR,\n    0,\n    [_ATc, _Cr],\n    [[() => TokenModelType, 0], 15], 2\n];\nexport var CompleteWebAuthnRegistrationResponse$ = [3, n0, _CWARRo,\n    0,\n    [],\n    []\n];\nexport var CompromisedCredentialsActionsType$ = [3, n0, _CCAT,\n    0,\n    [_EA],\n    [0], 1\n];\nexport var CompromisedCredentialsRiskConfigurationType$ = [3, n0, _CCRCT,\n    0,\n    [_A, _EFv],\n    [() => CompromisedCredentialsActionsType$, 64 | 0], 1\n];\nexport var ConfirmDeviceRequest$ = [3, n0, _CDR,\n    0,\n    [_ATc, _DK, _DSVC, _DN],\n    [[() => TokenModelType, 0], 0, () => DeviceSecretVerifierConfigType$, 0], 2\n];\nexport var ConfirmDeviceResponse$ = [3, n0, _CDRo,\n    0,\n    [_UCN],\n    [2]\n];\nexport var ConfirmForgotPasswordRequest$ = [3, n0, _CFPR,\n    0,\n    [_CI, _U, _CC, _P, _SH, _AM, _UCDs, _CM],\n    [[() => ClientIdType, 0], [() => UsernameType, 0], 0, [() => PasswordType, 0], [() => SecretHashType, 0], () => AnalyticsMetadataType$, [() => UserContextDataType$, 0], 128 | 0], 4\n];\nexport var ConfirmForgotPasswordResponse$ = [3, n0, _CFPRo,\n    0,\n    [],\n    []\n];\nexport var ConfirmSignUpRequest$ = [3, n0, _CSUR,\n    0,\n    [_CI, _U, _CC, _SH, _FAC, _AM, _UCDs, _CM, _S],\n    [[() => ClientIdType, 0], [() => UsernameType, 0], 0, [() => SecretHashType, 0], 2, () => AnalyticsMetadataType$, [() => UserContextDataType$, 0], 128 | 0, [() => SessionType, 0]], 3\n];\nexport var ConfirmSignUpResponse$ = [3, n0, _CSURo,\n    0,\n    [_S],\n    [[() => SessionType, 0]]\n];\nexport var ContextDataType$ = [3, n0, _CDT,\n    0,\n    [_IA, _SN, _SP, _HH, _ED],\n    [0, 0, 0, () => HttpHeaderList, 0], 4\n];\nexport var CreateGroupRequest$ = [3, n0, _CGR,\n    0,\n    [_GN, _UPI, _Desc, _RA, _Pr],\n    [0, 0, 0, 0, 1], 2\n];\nexport var CreateGroupResponse$ = [3, n0, _CGRr,\n    0,\n    [_Gr],\n    [() => GroupType$]\n];\nexport var CreateIdentityProviderRequest$ = [3, n0, _CIPR,\n    0,\n    [_UPI, _PN, _PTr, _PD, _AMt, _II],\n    [0, 0, 0, 128 | 0, 128 | 0, 64 | 0], 4\n];\nexport var CreateIdentityProviderResponse$ = [3, n0, _CIPRr,\n    0,\n    [_IP],\n    [() => IdentityProviderType$], 1\n];\nexport var CreateManagedLoginBrandingRequest$ = [3, n0, _CMLBR,\n    0,\n    [_UPI, _CI, _UCPV, _Se, _As],\n    [0, [() => ClientIdType, 0], 2, 15, () => AssetListType], 2\n];\nexport var CreateManagedLoginBrandingResponse$ = [3, n0, _CMLBRr,\n    0,\n    [_MLB],\n    [() => ManagedLoginBrandingType$]\n];\nexport var CreateResourceServerRequest$ = [3, n0, _CRSR,\n    0,\n    [_UPI, _I, _Na, _Sc],\n    [0, 0, 0, () => ResourceServerScopeListType], 3\n];\nexport var CreateResourceServerResponse$ = [3, n0, _CRSRr,\n    0,\n    [_RS],\n    [() => ResourceServerType$], 1\n];\nexport var CreateTermsRequest$ = [3, n0, _CTR,\n    0,\n    [_UPI, _CI, _TN, _TS, _En, _Li],\n    [0, [() => ClientIdType, 0], 0, 0, 0, 128 | 0], 5\n];\nexport var CreateTermsResponse$ = [3, n0, _CTRr,\n    0,\n    [_T],\n    [[() => TermsType$, 0]]\n];\nexport var CreateUserImportJobRequest$ = [3, n0, _CUIJR,\n    0,\n    [_JN, _UPI, _CWLRA],\n    [0, 0, 0], 3\n];\nexport var CreateUserImportJobResponse$ = [3, n0, _CUIJRr,\n    0,\n    [_UIJ],\n    [() => UserImportJobType$]\n];\nexport var CreateUserPoolClientRequest$ = [3, n0, _CUPCR,\n    0,\n    [_UPI, _CNl, _GS, _CS, _RTV, _ATV, _ITV, _TVU, _RAe, _WA, _EAF, _SIP, _CURL, _LURL, _DRURI, _AOAF, _AOAS, _AOAFUPC, _ACn, _PUEE, _ETR, _EPAUCD, _ASV, _RTR],\n    [0, 0, 2, [() => ClientSecretType, 0], 1, 1, 1, () => TokenValidityUnitsType$, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 0, 64 | 0, 64 | 0, 2, () => AnalyticsConfigurationType$, 0, 2, 2, 1, () => RefreshTokenRotationType$], 2\n];\nexport var CreateUserPoolClientResponse$ = [3, n0, _CUPCRr,\n    0,\n    [_UPC],\n    [[() => UserPoolClientType$, 0]]\n];\nexport var CreateUserPoolDomainRequest$ = [3, n0, _CUPDR,\n    0,\n    [_Do, _UPI, _MLV, _CDC],\n    [0, 0, 1, () => CustomDomainConfigType$], 2\n];\nexport var CreateUserPoolDomainResponse$ = [3, n0, _CUPDRr,\n    0,\n    [_MLV, _CFD],\n    [1, 0]\n];\nexport var CreateUserPoolRequest$ = [3, n0, _CUPR,\n    0,\n    [_PNo, _Po, _DP, _LC, _AVA, _AAl, _UAs, _SVM, _EVM, _EVS, _VMT, _SAM, _MC, _UAUS, _DC, _EC, _SCm, _UPT, _ACUC, _Sch, _UPAO, _UC, _ARS, _UPTs],\n    [0, () => UserPoolPolicyType$, 0, () => LambdaConfigType$, 64 | 0, 64 | 0, 64 | 0, 0, 0, 0, () => VerificationMessageTemplateType$, 0, 0, () => UserAttributeUpdateSettingsType$, () => DeviceConfigurationType$, () => EmailConfigurationType$, () => SmsConfigurationType$, 128 | 0, () => AdminCreateUserConfigType$, () => SchemaAttributesListType, () => UserPoolAddOnsType$, () => UsernameConfigurationType$, () => AccountRecoverySettingType$, 0], 1\n];\nexport var CreateUserPoolResponse$ = [3, n0, _CUPRr,\n    0,\n    [_UP],\n    [() => UserPoolType$]\n];\nexport var CustomDomainConfigType$ = [3, n0, _CDCT,\n    0,\n    [_CAe],\n    [0], 1\n];\nexport var CustomEmailLambdaVersionConfigType$ = [3, n0, _CELVCT,\n    0,\n    [_LV, _LAa],\n    [0, 0], 2\n];\nexport var CustomSMSLambdaVersionConfigType$ = [3, n0, _CSMSLVCT,\n    0,\n    [_LV, _LAa],\n    [0, 0], 2\n];\nexport var DeleteGroupRequest$ = [3, n0, _DGR,\n    0,\n    [_GN, _UPI],\n    [0, 0], 2\n];\nexport var DeleteIdentityProviderRequest$ = [3, n0, _DIPR,\n    0,\n    [_UPI, _PN],\n    [0, 0], 2\n];\nexport var DeleteManagedLoginBrandingRequest$ = [3, n0, _DMLBR,\n    0,\n    [_MLBI, _UPI],\n    [0, 0], 2\n];\nexport var DeleteResourceServerRequest$ = [3, n0, _DRSR,\n    0,\n    [_UPI, _I],\n    [0, 0], 2\n];\nexport var DeleteTermsRequest$ = [3, n0, _DTR,\n    0,\n    [_TI, _UPI],\n    [0, 0], 2\n];\nexport var DeleteUserAttributesRequest$ = [3, n0, _DUAR,\n    0,\n    [_UAN, _ATc],\n    [64 | 0, [() => TokenModelType, 0]], 2\n];\nexport var DeleteUserAttributesResponse$ = [3, n0, _DUARe,\n    0,\n    [],\n    []\n];\nexport var DeleteUserPoolClientRequest$ = [3, n0, _DUPCR,\n    0,\n    [_UPI, _CI],\n    [0, [() => ClientIdType, 0]], 2\n];\nexport var DeleteUserPoolClientSecretRequest$ = [3, n0, _DUPCSR,\n    0,\n    [_UPI, _CI, _CSI],\n    [0, [() => ClientIdType, 0], 0], 3\n];\nexport var DeleteUserPoolClientSecretResponse$ = [3, n0, _DUPCSRe,\n    0,\n    [],\n    []\n];\nexport var DeleteUserPoolDomainRequest$ = [3, n0, _DUPDR,\n    0,\n    [_Do, _UPI],\n    [0, 0], 2\n];\nexport var DeleteUserPoolDomainResponse$ = [3, n0, _DUPDRe,\n    0,\n    [],\n    []\n];\nexport var DeleteUserPoolRequest$ = [3, n0, _DUPR,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var DeleteUserRequest$ = [3, n0, _DUR,\n    0,\n    [_ATc],\n    [[() => TokenModelType, 0]], 1\n];\nexport var DeleteWebAuthnCredentialRequest$ = [3, n0, _DWACR,\n    0,\n    [_ATc, _CIr],\n    [[() => TokenModelType, 0], 0], 2\n];\nexport var DeleteWebAuthnCredentialResponse$ = [3, n0, _DWACRe,\n    0,\n    [],\n    []\n];\nexport var DescribeIdentityProviderRequest$ = [3, n0, _DIPRe,\n    0,\n    [_UPI, _PN],\n    [0, 0], 2\n];\nexport var DescribeIdentityProviderResponse$ = [3, n0, _DIPRes,\n    0,\n    [_IP],\n    [() => IdentityProviderType$], 1\n];\nexport var DescribeManagedLoginBrandingByClientRequest$ = [3, n0, _DMLBBCR,\n    0,\n    [_UPI, _CI, _RMR],\n    [0, [() => ClientIdType, 0], 2], 2\n];\nexport var DescribeManagedLoginBrandingByClientResponse$ = [3, n0, _DMLBBCRe,\n    0,\n    [_MLB],\n    [() => ManagedLoginBrandingType$]\n];\nexport var DescribeManagedLoginBrandingRequest$ = [3, n0, _DMLBRe,\n    0,\n    [_UPI, _MLBI, _RMR],\n    [0, 0, 2], 2\n];\nexport var DescribeManagedLoginBrandingResponse$ = [3, n0, _DMLBRes,\n    0,\n    [_MLB],\n    [() => ManagedLoginBrandingType$]\n];\nexport var DescribeResourceServerRequest$ = [3, n0, _DRSRe,\n    0,\n    [_UPI, _I],\n    [0, 0], 2\n];\nexport var DescribeResourceServerResponse$ = [3, n0, _DRSRes,\n    0,\n    [_RS],\n    [() => ResourceServerType$], 1\n];\nexport var DescribeRiskConfigurationRequest$ = [3, n0, _DRCR,\n    0,\n    [_UPI, _CI],\n    [0, [() => ClientIdType, 0]], 1\n];\nexport var DescribeRiskConfigurationResponse$ = [3, n0, _DRCRe,\n    0,\n    [_RC],\n    [[() => RiskConfigurationType$, 0]], 1\n];\nexport var DescribeTermsRequest$ = [3, n0, _DTRe,\n    0,\n    [_TI, _UPI],\n    [0, 0], 2\n];\nexport var DescribeTermsResponse$ = [3, n0, _DTRes,\n    0,\n    [_T],\n    [[() => TermsType$, 0]]\n];\nexport var DescribeUserImportJobRequest$ = [3, n0, _DUIJR,\n    0,\n    [_UPI, _JI],\n    [0, 0], 2\n];\nexport var DescribeUserImportJobResponse$ = [3, n0, _DUIJRe,\n    0,\n    [_UIJ],\n    [() => UserImportJobType$]\n];\nexport var DescribeUserPoolClientRequest$ = [3, n0, _DUPCRe,\n    0,\n    [_UPI, _CI],\n    [0, [() => ClientIdType, 0]], 2\n];\nexport var DescribeUserPoolClientResponse$ = [3, n0, _DUPCRes,\n    0,\n    [_UPC],\n    [[() => UserPoolClientType$, 0]]\n];\nexport var DescribeUserPoolDomainRequest$ = [3, n0, _DUPDRes,\n    0,\n    [_Do],\n    [0], 1\n];\nexport var DescribeUserPoolDomainResponse$ = [3, n0, _DUPDResc,\n    0,\n    [_DD],\n    [() => DomainDescriptionType$]\n];\nexport var DescribeUserPoolRequest$ = [3, n0, _DUPRe,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var DescribeUserPoolResponse$ = [3, n0, _DUPRes,\n    0,\n    [_UP],\n    [() => UserPoolType$]\n];\nexport var DeviceConfigurationType$ = [3, n0, _DCT,\n    0,\n    [_CROND, _DOROUP],\n    [2, 2]\n];\nexport var DeviceSecretVerifierConfigType$ = [3, n0, _DSVCT,\n    0,\n    [_PV, _Sa],\n    [0, 0]\n];\nexport var DeviceType$ = [3, n0, _DT,\n    0,\n    [_DK, _DA, _DCD, _DLMD, _DLAD],\n    [0, [() => AttributeListType, 0], 4, 4, 4]\n];\nexport var DomainDescriptionType$ = [3, n0, _DDT,\n    0,\n    [_UPI, _AWSAI, _Do, _SB, _CFDl, _Ve, _St, _CDC, _MLV],\n    [0, 0, 0, 0, 0, 0, 0, () => CustomDomainConfigType$, 1]\n];\nexport var EmailConfigurationType$ = [3, n0, _ECT,\n    0,\n    [_SA, _RTEA, _ESA, _F, _CSo],\n    [0, 0, 0, 0, 0]\n];\nexport var EmailMfaConfigType$ = [3, n0, _EMCT,\n    0,\n    [_M, _Su],\n    [0, 0]\n];\nexport var EmailMfaSettingsType$ = [3, n0, _EMST,\n    0,\n    [_E, _PM],\n    [2, 2]\n];\nexport var EventContextDataType$ = [3, n0, _ECDT,\n    0,\n    [_IA, _DN, _Ti, _Ci, _Co],\n    [0, 0, 0, 0, 0]\n];\nexport var EventFeedbackType$ = [3, n0, _EFT,\n    0,\n    [_FV, _Pro, _FD],\n    [0, 0, 4], 2\n];\nexport var EventRiskType$ = [3, n0, _ERT,\n    0,\n    [_RD, _RL, _CCD],\n    [0, 0, 2]\n];\nexport var FirehoseConfigurationType$ = [3, n0, _FCT,\n    0,\n    [_SAt],\n    [0]\n];\nexport var ForgetDeviceRequest$ = [3, n0, _FDR,\n    0,\n    [_DK, _ATc],\n    [0, [() => TokenModelType, 0]], 1\n];\nexport var ForgotPasswordRequest$ = [3, n0, _FPR,\n    0,\n    [_CI, _U, _SH, _UCDs, _AM, _CM],\n    [[() => ClientIdType, 0], [() => UsernameType, 0], [() => SecretHashType, 0], [() => UserContextDataType$, 0], () => AnalyticsMetadataType$, 128 | 0], 2\n];\nexport var ForgotPasswordResponse$ = [3, n0, _FPRo,\n    0,\n    [_CDD],\n    [() => CodeDeliveryDetailsType$]\n];\nexport var GetCSVHeaderRequest$ = [3, n0, _GCSVHR,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var GetCSVHeaderResponse$ = [3, n0, _GCSVHRe,\n    0,\n    [_UPI, _CSVH],\n    [0, 64 | 0]\n];\nexport var GetDeviceRequest$ = [3, n0, _GDR,\n    0,\n    [_DK, _ATc],\n    [0, [() => TokenModelType, 0]], 1\n];\nexport var GetDeviceResponse$ = [3, n0, _GDRe,\n    0,\n    [_D],\n    [[() => DeviceType$, 0]], 1\n];\nexport var GetGroupRequest$ = [3, n0, _GGR,\n    0,\n    [_GN, _UPI],\n    [0, 0], 2\n];\nexport var GetGroupResponse$ = [3, n0, _GGRe,\n    0,\n    [_Gr],\n    [() => GroupType$]\n];\nexport var GetIdentityProviderByIdentifierRequest$ = [3, n0, _GIPBIR,\n    0,\n    [_UPI, _IId],\n    [0, 0], 2\n];\nexport var GetIdentityProviderByIdentifierResponse$ = [3, n0, _GIPBIRe,\n    0,\n    [_IP],\n    [() => IdentityProviderType$], 1\n];\nexport var GetLogDeliveryConfigurationRequest$ = [3, n0, _GLDCR,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var GetLogDeliveryConfigurationResponse$ = [3, n0, _GLDCRe,\n    0,\n    [_LDC],\n    [() => LogDeliveryConfigurationType$]\n];\nexport var GetSigningCertificateRequest$ = [3, n0, _GSCR,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var GetSigningCertificateResponse$ = [3, n0, _GSCRe,\n    0,\n    [_Ce],\n    [0]\n];\nexport var GetTokensFromRefreshTokenRequest$ = [3, n0, _GTFRTR,\n    0,\n    [_RT, _CI, _CS, _DK, _CM],\n    [[() => TokenModelType, 0], [() => ClientIdType, 0], [() => ClientSecretType, 0], 0, 128 | 0], 2\n];\nexport var GetTokensFromRefreshTokenResponse$ = [3, n0, _GTFRTRe,\n    0,\n    [_AR],\n    [[() => AuthenticationResultType$, 0]]\n];\nexport var GetUICustomizationRequest$ = [3, n0, _GUICR,\n    0,\n    [_UPI, _CI],\n    [0, [() => ClientIdType, 0]], 1\n];\nexport var GetUICustomizationResponse$ = [3, n0, _GUICRe,\n    0,\n    [_UIC],\n    [[() => UICustomizationType$, 0]], 1\n];\nexport var GetUserAttributeVerificationCodeRequest$ = [3, n0, _GUAVCR,\n    0,\n    [_ATc, _AN, _CM],\n    [[() => TokenModelType, 0], 0, 128 | 0], 2\n];\nexport var GetUserAttributeVerificationCodeResponse$ = [3, n0, _GUAVCRe,\n    0,\n    [_CDD],\n    [() => CodeDeliveryDetailsType$]\n];\nexport var GetUserAuthFactorsRequest$ = [3, n0, _GUAFR,\n    0,\n    [_ATc],\n    [[() => TokenModelType, 0]], 1\n];\nexport var GetUserAuthFactorsResponse$ = [3, n0, _GUAFRe,\n    0,\n    [_U, _PMS, _UMFASL, _CUAF],\n    [[() => UsernameType, 0], 0, 64 | 0, 64 | 0], 1\n];\nexport var GetUserPoolMfaConfigRequest$ = [3, n0, _GUPMCR,\n    0,\n    [_UPI],\n    [0], 1\n];\nexport var GetUserPoolMfaConfigResponse$ = [3, n0, _GUPMCRe,\n    0,\n    [_SMC, _STMC, _EMC, _MC, _WAC],\n    [() => SmsMfaConfigType$, () => SoftwareTokenMfaConfigType$, () => EmailMfaConfigType$, 0, () => WebAuthnConfigurationType$]\n];\nexport var GetUserRequest$ = [3, n0, _GUR,\n    0,\n    [_ATc],\n    [[() => TokenModelType, 0]], 1\n];\nexport var GetUserResponse$ = [3, n0, _GURe,\n    0,\n    [_U, _UA, _MFAO, _PMS, _UMFASL],\n    [[() => UsernameType, 0], [() => AttributeListType, 0], () => MFAOptionListType, 0, 64 | 0], 2\n];\nexport var GlobalSignOutRequest$ = [3, n0, _GSOR,\n    0,\n    [_ATc],\n    [[() => TokenModelType, 0]], 1\n];\nexport var GlobalSignOutResponse$ = [3, n0, _GSORl,\n    0,\n    [],\n    []\n];\nexport var GroupType$ = [3, n0, _GT,\n    0,\n    [_GN, _UPI, _Desc, _RA, _Pr, _LMD, _CDr],\n    [0, 0, 0, 0, 1, 4, 4]\n];\nexport var HttpHeader$ = [3, n0, _HHt,\n    0,\n    [_hN, _hV],\n    [0, 0]\n];\nexport var IdentityProviderType$ = [3, n0, _IPT,\n    0,\n    [_UPI, _PN, _PTr, _PD, _AMt, _II, _LMD, _CDr],\n    [0, 0, 0, 128 | 0, 128 | 0, 64 | 0, 4, 4]\n];\nexport var InboundFederationLambdaType$ = [3, n0, _IFLT,\n    0,\n    [_LV, _LAa],\n    [0, 0], 2\n];\nexport var InitiateAuthRequest$ = [3, n0, _IAR,\n    0,\n    [_AF, _CI, _AP, _CM, _AM, _UCDs, _S],\n    [0, [() => ClientIdType, 0], [() => AuthParametersType, 0], 128 | 0, () => AnalyticsMetadataType$, [() => UserContextDataType$, 0], [() => SessionType, 0]], 2\n];\nexport var InitiateAuthResponse$ = [3, n0, _IARn,\n    0,\n    [_CN, _S, _CP, _AR, _AC],\n    [0, [() => SessionType, 0], 128 | 0, [() => AuthenticationResultType$, 0], 64 | 0]\n];\nexport var LambdaConfigType$ = [3, n0, _LCT,\n    0,\n    [_PSU, _CMu, _PC, _PA, _PAo, _DAC, _CAC, _VACR, _PTG, _UM, _PTGC, _CSMSS, _CES, _KMSKID, _IF],\n    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, () => PreTokenGenerationVersionConfigType$, () => CustomSMSLambdaVersionConfigType$, () => CustomEmailLambdaVersionConfigType$, 0, () => InboundFederationLambdaType$]\n];\nexport var ListDevicesRequest$ = [3, n0, _LDR,\n    0,\n    [_ATc, _L, _PTa],\n    [[() => TokenModelType, 0], 1, 0], 1\n];\nexport var ListDevicesResponse$ = [3, n0, _LDRi,\n    0,\n    [_De, _PTa],\n    [[() => DeviceListType, 0], 0]\n];\nexport var ListGroupsRequest$ = [3, n0, _LGR,\n    0,\n    [_UPI, _L, _NT],\n    [0, 1, 0], 1\n];\nexport var ListGroupsResponse$ = [3, n0, _LGRi,\n    0,\n    [_G, _NT],\n    [() => GroupListType, 0]\n];\nexport var ListIdentityProvidersRequest$ = [3, n0, _LIPR,\n    0,\n    [_UPI, _MR, _NT],\n    [0, 1, 0], 1\n];\nexport var ListIdentityProvidersResponse$ = [3, n0, _LIPRi,\n    0,\n    [_Prov, _NT],\n    [() => ProvidersListType, 0], 1\n];\nexport var ListResourceServersRequest$ = [3, n0, _LRSR,\n    0,\n    [_UPI, _MR, _NT],\n    [0, 1, 0], 1\n];\nexport var ListResourceServersResponse$ = [3, n0, _LRSRi,\n    0,\n    [_RSe, _NT],\n    [() => ResourceServersListType, 0], 1\n];\nexport var ListTagsForResourceRequest$ = [3, n0, _LTFRR,\n    0,\n    [_RAes],\n    [0], 1\n];\nexport var ListTagsForResourceResponse$ = [3, n0, _LTFRRi,\n    0,\n    [_Ta],\n    [128 | 0]\n];\nexport var ListTermsRequest$ = [3, n0, _LTR,\n    0,\n    [_UPI, _MR, _NT],\n    [0, 1, 0], 1\n];\nexport var ListTermsResponse$ = [3, n0, _LTRi,\n    0,\n    [_T, _NT],\n    [() => TermsDescriptionListType, 0], 1\n];\nexport var ListUserImportJobsRequest$ = [3, n0, _LUIJR,\n    0,\n    [_UPI, _MR, _PTa],\n    [0, 1, 0], 2\n];\nexport var ListUserImportJobsResponse$ = [3, n0, _LUIJRi,\n    0,\n    [_UIJs, _PTa],\n    [() => UserImportJobsListType, 0]\n];\nexport var ListUserPoolClientSecretsRequest$ = [3, n0, _LUPCSR,\n    0,\n    [_UPI, _CI, _NT],\n    [0, [() => ClientIdType, 0], 0], 2\n];\nexport var ListUserPoolClientSecretsResponse$ = [3, n0, _LUPCSRi,\n    0,\n    [_CSl, _NT],\n    [[() => ClientSecretDescriptorListType, 0], 0]\n];\nexport var ListUserPoolClientsRequest$ = [3, n0, _LUPCR,\n    0,\n    [_UPI, _MR, _NT],\n    [0, 1, 0], 1\n];\nexport var ListUserPoolClientsResponse$ = [3, n0, _LUPCRi,\n    0,\n    [_UPCs, _NT],\n    [[() => UserPoolClientListType, 0], 0]\n];\nexport var ListUserPoolsRequest$ = [3, n0, _LUPR,\n    0,\n    [_MR, _NT],\n    [1, 0], 1\n];\nexport var ListUserPoolsResponse$ = [3, n0, _LUPRi,\n    0,\n    [_UPs, _NT],\n    [() => UserPoolListType, 0]\n];\nexport var ListUsersInGroupRequest$ = [3, n0, _LUIGR,\n    0,\n    [_UPI, _GN, _L, _NT],\n    [0, 0, 1, 0], 2\n];\nexport var ListUsersInGroupResponse$ = [3, n0, _LUIGRi,\n    0,\n    [_Use, _NT],\n    [[() => UsersListType, 0], 0]\n];\nexport var ListUsersRequest$ = [3, n0, _LUR,\n    0,\n    [_UPI, _ATG, _L, _PTa, _Fi],\n    [0, 64 | 0, 1, 0, 0], 1\n];\nexport var ListUsersResponse$ = [3, n0, _LURi,\n    0,\n    [_Use, _PTa],\n    [[() => UsersListType, 0], 0]\n];\nexport var ListWebAuthnCredentialsRequest$ = [3, n0, _LWACR,\n    0,\n    [_ATc, _NT, _MR],\n    [[() => TokenModelType, 0], 0, 1], 1\n];\nexport var ListWebAuthnCredentialsResponse$ = [3, n0, _LWACRi,\n    0,\n    [_Cre, _NT],\n    [() => WebAuthnCredentialDescriptionListType, 0], 1\n];\nexport var LogConfigurationType$ = [3, n0, _LCTo,\n    0,\n    [_LL, _ES, _CWLC, _SCo, _FC],\n    [0, 0, () => CloudWatchLogsConfigurationType$, () => S3ConfigurationType$, () => FirehoseConfigurationType$], 2\n];\nexport var LogDeliveryConfigurationType$ = [3, n0, _LDCT,\n    0,\n    [_UPI, _LCo],\n    [0, () => LogConfigurationListType], 2\n];\nexport var ManagedLoginBrandingType$ = [3, n0, _MLBT,\n    0,\n    [_MLBI, _UPI, _UCPV, _Se, _As, _CDr, _LMD],\n    [0, 0, 2, 15, () => AssetListType, 4, 4]\n];\nexport var MessageTemplateType$ = [3, n0, _MTT,\n    0,\n    [_SMSM, _EM, _ESm],\n    [0, 0, 0]\n];\nexport var MFAOptionType$ = [3, n0, _MFAOT,\n    0,\n    [_DM, _AN],\n    [0, 0]\n];\nexport var NewDeviceMetadataType$ = [3, n0, _NDMT,\n    0,\n    [_DK, _DGK],\n    [0, 0]\n];\nexport var NotifyConfigurationType$ = [3, n0, _NCT,\n    0,\n    [_SA, _F, _RTe, _BE, _NAEo, _ME],\n    [0, 0, 0, () => NotifyEmailType$, () => NotifyEmailType$, () => NotifyEmailType$], 1\n];\nexport var NotifyEmailType$ = [3, n0, _NET,\n    0,\n    [_Su, _HB, _TB],\n    [0, 0, 0], 1\n];\nexport var NumberAttributeConstraintsType$ = [3, n0, _NACT,\n    0,\n    [_MV, _MVa],\n    [0, 0]\n];\nexport var PasswordPolicyType$ = [3, n0, _PPT,\n    0,\n    [_ML, _RU, _RLe, _RN, _RSeq, _PHS, _TPVD],\n    [1, 2, 2, 2, 2, 1, 1]\n];\nexport var PreTokenGenerationVersionConfigType$ = [3, n0, _PTGVCT,\n    0,\n    [_LV, _LAa],\n    [0, 0], 2\n];\nexport var ProviderDescription$ = [3, n0, _PDr,\n    0,\n    [_PN, _PTr, _LMD, _CDr],\n    [0, 0, 4, 4]\n];\nexport var ProviderUserIdentifierType$ = [3, n0, _PUIT,\n    0,\n    [_PN, _PAN, _PAV],\n    [0, 0, 0]\n];\nexport var RecoveryOptionType$ = [3, n0, _ROT,\n    0,\n    [_Pri, _Na],\n    [1, 0], 2\n];\nexport var RefreshTokenRotationType$ = [3, n0, _RTRT,\n    0,\n    [_Fe, _RGPS],\n    [0, 1], 1\n];\nexport var ResendConfirmationCodeRequest$ = [3, n0, _RCCR,\n    0,\n    [_CI, _U, _SH, _UCDs, _AM, _CM],\n    [[() => ClientIdType, 0], [() => UsernameType, 0], [() => SecretHashType, 0], [() => UserContextDataType$, 0], () => AnalyticsMetadataType$, 128 | 0], 2\n];\nexport var ResendConfirmationCodeResponse$ = [3, n0, _RCCRe,\n    0,\n    [_CDD],\n    [() => CodeDeliveryDetailsType$]\n];\nexport var ResourceServerScopeType$ = [3, n0, _RSST,\n    0,\n    [_SNc, _SD],\n    [0, 0], 2\n];\nexport var ResourceServerType$ = [3, n0, _RST,\n    0,\n    [_UPI, _I, _Na, _Sc],\n    [0, 0, 0, () => ResourceServerScopeListType]\n];\nexport var RespondToAuthChallengeRequest$ = [3, n0, _RTACR,\n    0,\n    [_CI, _CN, _S, _CR, _AM, _UCDs, _CM],\n    [[() => ClientIdType, 0], 0, [() => SessionType, 0], [() => ChallengeResponsesType, 0], () => AnalyticsMetadataType$, [() => UserContextDataType$, 0], 128 | 0], 2\n];\nexport var RespondToAuthChallengeResponse$ = [3, n0, _RTACRe,\n    0,\n    [_CN, _S, _CP, _AR],\n    [0, [() => SessionType, 0], 128 | 0, [() => AuthenticationResultType$, 0]]\n];\nexport var RevokeTokenRequest$ = [3, n0, _RTRe,\n    0,\n    [_To, _CI, _CS],\n    [[() => TokenModelType, 0], [() => ClientIdType, 0], [() => ClientSecretType, 0]], 2\n];\nexport var RevokeTokenResponse$ = [3, n0, _RTRev,\n    0,\n    [],\n    []\n];\nexport var RiskConfigurationType$ = [3, n0, _RCT,\n    0,\n    [_UPI, _CI, _CCRC, _ATRC, _REC, _LMD],\n    [0, [() => ClientIdType, 0], () => CompromisedCredentialsRiskConfigurationType$, () => AccountTakeoverRiskConfigurationType$, () => RiskExceptionConfigurationType$, 4]\n];\nexport var RiskExceptionConfigurationType$ = [3, n0, _RECT,\n    0,\n    [_BIPRL, _SIPRL],\n    [64 | 0, 64 | 0]\n];\nexport var S3ConfigurationType$ = [3, n0, _SCTo,\n    0,\n    [_BA],\n    [0]\n];\nexport var SchemaAttributeType$ = [3, n0, _SAT,\n    0,\n    [_Na, _ADT, _DOA, _Mu, _R, _NAC, _SAC],\n    [0, 0, 2, 2, 2, () => NumberAttributeConstraintsType$, () => StringAttributeConstraintsType$]\n];\nexport var SetLogDeliveryConfigurationRequest$ = [3, n0, _SLDCR,\n    0,\n    [_UPI, _LCo],\n    [0, () => LogConfigurationListType], 2\n];\nexport var SetLogDeliveryConfigurationResponse$ = [3, n0, _SLDCRe,\n    0,\n    [_LDC],\n    [() => LogDeliveryConfigurationType$]\n];\nexport var SetRiskConfigurationRequest$ = [3, n0, _SRCR,\n    0,\n    [_UPI, _CI, _CCRC, _ATRC, _REC],\n    [0, [() => ClientIdType, 0], () => CompromisedCredentialsRiskConfigurationType$, () => AccountTakeoverRiskConfigurationType$, () => RiskExceptionConfigurationType$], 1\n];\nexport var SetRiskConfigurationResponse$ = [3, n0, _SRCRe,\n    0,\n    [_RC],\n    [[() => RiskConfigurationType$, 0]], 1\n];\nexport var SetUICustomizationRequest$ = [3, n0, _SUICR,\n    0,\n    [_UPI, _CI, _CSS, _IFm],\n    [0, [() => ClientIdType, 0], 0, 21], 1\n];\nexport var SetUICustomizationResponse$ = [3, n0, _SUICRe,\n    0,\n    [_UIC],\n    [[() => UICustomizationType$, 0]], 1\n];\nexport var SetUserMFAPreferenceRequest$ = [3, n0, _SUMFAPR,\n    0,\n    [_ATc, _SMSMS, _STMS, _EMS],\n    [[() => TokenModelType, 0], () => SMSMfaSettingsType$, () => SoftwareTokenMfaSettingsType$, () => EmailMfaSettingsType$], 1\n];\nexport var SetUserMFAPreferenceResponse$ = [3, n0, _SUMFAPRe,\n    0,\n    [],\n    []\n];\nexport var SetUserPoolMfaConfigRequest$ = [3, n0, _SUPMCR,\n    0,\n    [_UPI, _SMC, _STMC, _EMC, _MC, _WAC],\n    [0, () => SmsMfaConfigType$, () => SoftwareTokenMfaConfigType$, () => EmailMfaConfigType$, 0, () => WebAuthnConfigurationType$], 1\n];\nexport var SetUserPoolMfaConfigResponse$ = [3, n0, _SUPMCRe,\n    0,\n    [_SMC, _STMC, _EMC, _MC, _WAC],\n    [() => SmsMfaConfigType$, () => SoftwareTokenMfaConfigType$, () => EmailMfaConfigType$, 0, () => WebAuthnConfigurationType$]\n];\nexport var SetUserSettingsRequest$ = [3, n0, _SUSR,\n    0,\n    [_ATc, _MFAO],\n    [[() => TokenModelType, 0], () => MFAOptionListType], 2\n];\nexport var SetUserSettingsResponse$ = [3, n0, _SUSRe,\n    0,\n    [],\n    []\n];\nexport var SignInPolicyType$ = [3, n0, _SIPT,\n    0,\n    [_AFAF],\n    [64 | 0]\n];\nexport var SignUpRequest$ = [3, n0, _SUR,\n    0,\n    [_CI, _U, _SH, _P, _UA, _VD, _AM, _UCDs, _CM],\n    [[() => ClientIdType, 0], [() => UsernameType, 0], [() => SecretHashType, 0], [() => PasswordType, 0], [() => AttributeListType, 0], [() => AttributeListType, 0], () => AnalyticsMetadataType$, [() => UserContextDataType$, 0], 128 | 0], 2\n];\nexport var SignUpResponse$ = [3, n0, _SURi,\n    0,\n    [_UCs, _USs, _CDD, _S],\n    [2, 0, () => CodeDeliveryDetailsType$, [() => SessionType, 0]], 2\n];\nexport var SmsConfigurationType$ = [3, n0, _SCTm,\n    0,\n    [_SCA, _EIx, _SR],\n    [0, 0, 0], 1\n];\nexport var SmsMfaConfigType$ = [3, n0, _SMCT,\n    0,\n    [_SAM, _SCm],\n    [0, () => SmsConfigurationType$]\n];\nexport var SMSMfaSettingsType$ = [3, n0, _SMSMST,\n    0,\n    [_E, _PM],\n    [2, 2]\n];\nexport var SoftwareTokenMfaConfigType$ = [3, n0, _STMCT,\n    0,\n    [_E],\n    [2]\n];\nexport var SoftwareTokenMfaSettingsType$ = [3, n0, _STMST,\n    0,\n    [_E, _PM],\n    [2, 2]\n];\nexport var StartUserImportJobRequest$ = [3, n0, _SUIJR,\n    0,\n    [_UPI, _JI],\n    [0, 0], 2\n];\nexport var StartUserImportJobResponse$ = [3, n0, _SUIJRt,\n    0,\n    [_UIJ],\n    [() => UserImportJobType$]\n];\nexport var StartWebAuthnRegistrationRequest$ = [3, n0, _SWARR,\n    0,\n    [_ATc],\n    [[() => TokenModelType, 0]], 1\n];\nexport var StartWebAuthnRegistrationResponse$ = [3, n0, _SWARRt,\n    0,\n    [_CCO],\n    [15], 1\n];\nexport var StopUserImportJobRequest$ = [3, n0, _SUIJRto,\n    0,\n    [_UPI, _JI],\n    [0, 0], 2\n];\nexport var StopUserImportJobResponse$ = [3, n0, _SUIJRtop,\n    0,\n    [_UIJ],\n    [() => UserImportJobType$]\n];\nexport var StringAttributeConstraintsType$ = [3, n0, _SACT,\n    0,\n    [_MLi, _MLa],\n    [0, 0]\n];\nexport var TagResourceRequest$ = [3, n0, _TRR,\n    0,\n    [_RAes, _Ta],\n    [0, 128 | 0], 2\n];\nexport var TagResourceResponse$ = [3, n0, _TRRa,\n    0,\n    [],\n    []\n];\nexport var TermsDescriptionType$ = [3, n0, _TDT,\n    0,\n    [_TI, _TN, _En, _CDr, _LMD],\n    [0, 0, 0, 4, 4], 5\n];\nexport var TermsType$ = [3, n0, _TTe,\n    0,\n    [_TI, _UPI, _CI, _TN, _TS, _En, _Li, _CDr, _LMD],\n    [0, 0, [() => ClientIdType, 0], 0, 0, 0, 128 | 0, 4, 4], 9\n];\nexport var TokenValidityUnitsType$ = [3, n0, _TVUT,\n    0,\n    [_ATc, _IT, _RT],\n    [0, 0, 0]\n];\nexport var UICustomizationType$ = [3, n0, _UICT,\n    0,\n    [_UPI, _CI, _IU, _CSS, _CSSV, _LMD, _CDr],\n    [0, [() => ClientIdType, 0], 0, 0, 0, 4, 4]\n];\nexport var UntagResourceRequest$ = [3, n0, _URR,\n    0,\n    [_RAes, _TK],\n    [0, 64 | 0], 2\n];\nexport var UntagResourceResponse$ = [3, n0, _URRn,\n    0,\n    [],\n    []\n];\nexport var UpdateAuthEventFeedbackRequest$ = [3, n0, _UAEFR,\n    0,\n    [_UPI, _U, _EI, _FT, _FV],\n    [0, [() => UsernameType, 0], 0, [() => TokenModelType, 0], 0], 5\n];\nexport var UpdateAuthEventFeedbackResponse$ = [3, n0, _UAEFRp,\n    0,\n    [],\n    []\n];\nexport var UpdateDeviceStatusRequest$ = [3, n0, _UDSR,\n    0,\n    [_ATc, _DK, _DRS],\n    [[() => TokenModelType, 0], 0, 0], 2\n];\nexport var UpdateDeviceStatusResponse$ = [3, n0, _UDSRp,\n    0,\n    [],\n    []\n];\nexport var UpdateGroupRequest$ = [3, n0, _UGR,\n    0,\n    [_GN, _UPI, _Desc, _RA, _Pr],\n    [0, 0, 0, 0, 1], 2\n];\nexport var UpdateGroupResponse$ = [3, n0, _UGRp,\n    0,\n    [_Gr],\n    [() => GroupType$]\n];\nexport var UpdateIdentityProviderRequest$ = [3, n0, _UIPR,\n    0,\n    [_UPI, _PN, _PD, _AMt, _II],\n    [0, 0, 128 | 0, 128 | 0, 64 | 0], 2\n];\nexport var UpdateIdentityProviderResponse$ = [3, n0, _UIPRp,\n    0,\n    [_IP],\n    [() => IdentityProviderType$], 1\n];\nexport var UpdateManagedLoginBrandingRequest$ = [3, n0, _UMLBR,\n    0,\n    [_UPI, _MLBI, _UCPV, _Se, _As],\n    [0, 0, 2, 15, () => AssetListType]\n];\nexport var UpdateManagedLoginBrandingResponse$ = [3, n0, _UMLBRp,\n    0,\n    [_MLB],\n    [() => ManagedLoginBrandingType$]\n];\nexport var UpdateResourceServerRequest$ = [3, n0, _URSR,\n    0,\n    [_UPI, _I, _Na, _Sc],\n    [0, 0, 0, () => ResourceServerScopeListType], 3\n];\nexport var UpdateResourceServerResponse$ = [3, n0, _URSRp,\n    0,\n    [_RS],\n    [() => ResourceServerType$], 1\n];\nexport var UpdateTermsRequest$ = [3, n0, _UTR,\n    0,\n    [_TI, _UPI, _TN, _TS, _En, _Li],\n    [0, 0, 0, 0, 0, 128 | 0], 2\n];\nexport var UpdateTermsResponse$ = [3, n0, _UTRp,\n    0,\n    [_T],\n    [[() => TermsType$, 0]]\n];\nexport var UpdateUserAttributesRequest$ = [3, n0, _UUAR,\n    0,\n    [_UA, _ATc, _CM],\n    [[() => AttributeListType, 0], [() => TokenModelType, 0], 128 | 0], 2\n];\nexport var UpdateUserAttributesResponse$ = [3, n0, _UUARp,\n    0,\n    [_CDDL],\n    [() => CodeDeliveryDetailsListType]\n];\nexport var UpdateUserPoolClientRequest$ = [3, n0, _UUPCR,\n    0,\n    [_UPI, _CI, _CNl, _RTV, _ATV, _ITV, _TVU, _RAe, _WA, _EAF, _SIP, _CURL, _LURL, _DRURI, _AOAF, _AOAS, _AOAFUPC, _ACn, _PUEE, _ETR, _EPAUCD, _ASV, _RTR],\n    [0, [() => ClientIdType, 0], 0, 1, 1, 1, () => TokenValidityUnitsType$, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 0, 64 | 0, 64 | 0, 2, () => AnalyticsConfigurationType$, 0, 2, 2, 1, () => RefreshTokenRotationType$], 2\n];\nexport var UpdateUserPoolClientResponse$ = [3, n0, _UUPCRp,\n    0,\n    [_UPC],\n    [[() => UserPoolClientType$, 0]]\n];\nexport var UpdateUserPoolDomainRequest$ = [3, n0, _UUPDR,\n    0,\n    [_Do, _UPI, _MLV, _CDC],\n    [0, 0, 1, () => CustomDomainConfigType$], 2\n];\nexport var UpdateUserPoolDomainResponse$ = [3, n0, _UUPDRp,\n    0,\n    [_MLV, _CFD],\n    [1, 0]\n];\nexport var UpdateUserPoolRequest$ = [3, n0, _UUPR,\n    0,\n    [_UPI, _Po, _DP, _LC, _AVA, _SVM, _EVM, _EVS, _VMT, _SAM, _UAUS, _MC, _DC, _EC, _SCm, _UPT, _ACUC, _UPAO, _ARS, _PNo, _UPTs],\n    [0, () => UserPoolPolicyType$, 0, () => LambdaConfigType$, 64 | 0, 0, 0, 0, () => VerificationMessageTemplateType$, 0, () => UserAttributeUpdateSettingsType$, 0, () => DeviceConfigurationType$, () => EmailConfigurationType$, () => SmsConfigurationType$, 128 | 0, () => AdminCreateUserConfigType$, () => UserPoolAddOnsType$, () => AccountRecoverySettingType$, 0, 0], 1\n];\nexport var UpdateUserPoolResponse$ = [3, n0, _UUPRp,\n    0,\n    [],\n    []\n];\nexport var UserAttributeUpdateSettingsType$ = [3, n0, _UAUST,\n    0,\n    [_ARVBU],\n    [64 | 0]\n];\nexport var UserContextDataType$ = [3, n0, _UCDT,\n    8,\n    [_IA, _ED],\n    [0, 0]\n];\nexport var UserImportJobType$ = [3, n0, _UIJT,\n    0,\n    [_JN, _JI, _UPI, _PSUr, _CDr, _SDt, _CDo, _St, _CWLRA, _IUm, _SUk, _FU, _CMom],\n    [0, 0, 0, 0, 4, 4, 4, 0, 0, 1, 1, 1, 0]\n];\nexport var UsernameConfigurationType$ = [3, n0, _UCT,\n    0,\n    [_CSa],\n    [2], 1\n];\nexport var UserPoolAddOnsType$ = [3, n0, _UPAOT,\n    0,\n    [_ASM, _ASAF],\n    [0, () => AdvancedSecurityAdditionalFlowsType$], 1\n];\nexport var UserPoolClientDescription$ = [3, n0, _UPCD,\n    0,\n    [_CI, _UPI, _CNl],\n    [[() => ClientIdType, 0], 0, 0]\n];\nexport var UserPoolClientType$ = [3, n0, _UPCT,\n    0,\n    [_UPI, _CNl, _CI, _CS, _LMD, _CDr, _RTV, _ATV, _ITV, _TVU, _RAe, _WA, _EAF, _SIP, _CURL, _LURL, _DRURI, _AOAF, _AOAS, _AOAFUPC, _ACn, _PUEE, _ETR, _EPAUCD, _ASV, _RTR],\n    [0, 0, [() => ClientIdType, 0], [() => ClientSecretType, 0], 4, 4, 1, 1, 1, () => TokenValidityUnitsType$, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 64 | 0, 0, 64 | 0, 64 | 0, 2, () => AnalyticsConfigurationType$, 0, 2, 2, 1, () => RefreshTokenRotationType$]\n];\nexport var UserPoolDescriptionType$ = [3, n0, _UPDT,\n    0,\n    [_Id, _Na, _LC, _St, _LMD, _CDr],\n    [0, 0, () => LambdaConfigType$, 0, 4, 4]\n];\nexport var UserPoolPolicyType$ = [3, n0, _UPPT,\n    0,\n    [_PPa, _SIPi],\n    [() => PasswordPolicyType$, () => SignInPolicyType$]\n];\nexport var UserPoolType$ = [3, n0, _UPTse,\n    0,\n    [_Id, _Na, _Po, _DP, _LC, _St, _LMD, _CDr, _SAc, _AVA, _AAl, _UAs, _SVM, _EVM, _EVS, _VMT, _SAM, _UAUS, _MC, _DC, _ENOU, _EC, _SCm, _UPT, _SCF, _ECF, _Do, _CDu, _ACUC, _UPAO, _UC, _Ar, _ARS, _UPTs],\n    [0, 0, () => UserPoolPolicyType$, 0, () => LambdaConfigType$, 0, 4, 4, () => SchemaAttributesListType, 64 | 0, 64 | 0, 64 | 0, 0, 0, 0, () => VerificationMessageTemplateType$, 0, () => UserAttributeUpdateSettingsType$, 0, () => DeviceConfigurationType$, 1, () => EmailConfigurationType$, () => SmsConfigurationType$, 128 | 0, 0, 0, 0, 0, () => AdminCreateUserConfigType$, () => UserPoolAddOnsType$, () => UsernameConfigurationType$, 0, () => AccountRecoverySettingType$, 0]\n];\nexport var UserType$ = [3, n0, _UTs,\n    0,\n    [_U, _At, _UCD, _ULMD, _E, _US, _MFAO],\n    [[() => UsernameType, 0], [() => AttributeListType, 0], 4, 4, 2, 0, () => MFAOptionListType]\n];\nexport var VerificationMessageTemplateType$ = [3, n0, _VMTT,\n    0,\n    [_SM, _EM, _ESm, _EMBL, _ESBL, _DEO],\n    [0, 0, 0, 0, 0, 0]\n];\nexport var VerifySoftwareTokenRequest$ = [3, n0, _VSTR,\n    0,\n    [_UCse, _ATc, _S, _FDN],\n    [[() => SoftwareTokenMFAUserCodeType, 0], [() => TokenModelType, 0], [() => SessionType, 0], 0], 1\n];\nexport var VerifySoftwareTokenResponse$ = [3, n0, _VSTRe,\n    0,\n    [_St, _S],\n    [0, [() => SessionType, 0]]\n];\nexport var VerifyUserAttributeRequest$ = [3, n0, _VUAR,\n    0,\n    [_ATc, _AN, _Cod],\n    [[() => TokenModelType, 0], 0, 0], 3\n];\nexport var VerifyUserAttributeResponse$ = [3, n0, _VUARe,\n    0,\n    [],\n    []\n];\nexport var WebAuthnConfigurationType$ = [3, n0, _WACT,\n    0,\n    [_RPI, _UV],\n    [0, 0]\n];\nexport var WebAuthnCredentialDescription$ = [3, n0, _WACD,\n    0,\n    [_CIr, _FCN, _RPI, _ATu, _CAr, _AAu],\n    [0, 0, 0, 64 | 0, 4, 0], 5\n];\nvar __Unit = \"unit\";\nvar AliasAttributesListType = 64 | 0;\nvar AllowedFirstAuthFactorsListType = 64 | 0;\nvar AssetListType = [1, n0, _ALT,\n    0, () => AssetType$\n];\nvar AttributeListType = [1, n0, _ALTt,\n    0, [() => AttributeType$,\n        0]\n];\nvar AttributeNameListType = 64 | 0;\nvar AttributesRequireVerificationBeforeUpdateType = 64 | 0;\nvar AuthEventsType = [1, n0, _AETu,\n    0, () => AuthEventType$\n];\nvar AvailableChallengeListType = 64 | 0;\nvar BlockedIPRangeListType = 64 | 0;\nvar CallbackURLsListType = 64 | 0;\nvar ChallengeResponseListType = [1, n0, _CRLT,\n    0, () => ChallengeResponseType$\n];\nvar ClientPermissionListType = 64 | 0;\nvar ClientSecretDescriptorListType = [1, n0, _CSDLT,\n    0, [() => ClientSecretDescriptorType$,\n        0]\n];\nvar CodeDeliveryDetailsListType = [1, n0, _CDDLT,\n    0, () => CodeDeliveryDetailsType$\n];\nvar ConfiguredUserAuthFactorsListType = 64 | 0;\nvar CustomAttributesListType = [1, n0, _CALT,\n    0, () => SchemaAttributeType$\n];\nvar DeliveryMediumListType = 64 | 0;\nvar DeviceListType = [1, n0, _DLT,\n    0, [() => DeviceType$,\n        0]\n];\nvar EventFiltersType = 64 | 0;\nvar ExplicitAuthFlowsListType = 64 | 0;\nvar GroupListType = [1, n0, _GLT,\n    0, () => GroupType$\n];\nvar HttpHeaderList = [1, n0, _HHL,\n    0, () => HttpHeader$\n];\nvar IdpIdentifiersListType = 64 | 0;\nvar ListOfStringTypes = 64 | 0;\nvar LogConfigurationListType = [1, n0, _LCLT,\n    0, () => LogConfigurationType$\n];\nvar LogoutURLsListType = 64 | 0;\nvar MFAOptionListType = [1, n0, _MFAOLT,\n    0, () => MFAOptionType$\n];\nvar OAuthFlowsType = 64 | 0;\nvar ProvidersListType = [1, n0, _PLT,\n    0, () => ProviderDescription$\n];\nvar RecoveryMechanismsType = [1, n0, _RMT,\n    0, () => RecoveryOptionType$\n];\nvar ResourceServerScopeListType = [1, n0, _RSSLT,\n    0, () => ResourceServerScopeType$\n];\nvar ResourceServersListType = [1, n0, _RSLT,\n    0, () => ResourceServerType$\n];\nvar SchemaAttributesListType = [1, n0, _SALT,\n    0, () => SchemaAttributeType$\n];\nvar ScopeListType = 64 | 0;\nvar SearchedAttributeNamesListType = 64 | 0;\nvar SkippedIPRangeListType = 64 | 0;\nvar SupportedIdentityProvidersListType = 64 | 0;\nvar TermsDescriptionListType = [1, n0, _TDLT,\n    0, () => TermsDescriptionType$\n];\nvar UserImportJobsListType = [1, n0, _UIJLT,\n    0, () => UserImportJobType$\n];\nvar UserMFASettingListType = 64 | 0;\nvar UsernameAttributesListType = 64 | 0;\nvar UserPoolClientListType = [1, n0, _UPCLT,\n    0, [() => UserPoolClientDescription$,\n        0]\n];\nvar UserPoolListType = [1, n0, _UPLT,\n    0, () => UserPoolDescriptionType$\n];\nvar UserPoolTagsListType = 64 | 0;\nvar UsersListType = [1, n0, _ULT,\n    0, [() => UserType$,\n        0]\n];\nvar VerifiedAttributesListType = 64 | 0;\nvar WebAuthnAuthenticatorTransportsList = 64 | 0;\nvar WebAuthnCredentialDescriptionListType = [1, n0, _WACDLT,\n    0, () => WebAuthnCredentialDescription$\n];\nvar AttributeMappingType = 128 | 0;\nvar AuthParametersType = [2, n0, _APT,\n    8, 0, 0\n];\nvar ChallengeParametersType = 128 | 0;\nvar ChallengeResponsesType = [2, n0, _CRTh,\n    8, 0, 0\n];\nvar ClientMetadataType = 128 | 0;\nvar LinksType = 128 | 0;\nvar ProviderDetailsType = 128 | 0;\nvar UserPoolTagsType = 128 | 0;\nexport var AddCustomAttributes$ = [9, n0, _ACA,\n    0, () => AddCustomAttributesRequest$, () => AddCustomAttributesResponse$\n];\nexport var AddUserPoolClientSecret$ = [9, n0, _AUPCS,\n    0, () => AddUserPoolClientSecretRequest$, () => AddUserPoolClientSecretResponse$\n];\nexport var AdminAddUserToGroup$ = [9, n0, _AAUTG,\n    0, () => AdminAddUserToGroupRequest$, () => __Unit\n];\nexport var AdminConfirmSignUp$ = [9, n0, _ACSU,\n    0, () => AdminConfirmSignUpRequest$, () => AdminConfirmSignUpResponse$\n];\nexport var AdminCreateUser$ = [9, n0, _ACU,\n    0, () => AdminCreateUserRequest$, () => AdminCreateUserResponse$\n];\nexport var AdminDeleteUser$ = [9, n0, _ADU,\n    0, () => AdminDeleteUserRequest$, () => __Unit\n];\nexport var AdminDeleteUserAttributes$ = [9, n0, _ADUA,\n    0, () => AdminDeleteUserAttributesRequest$, () => AdminDeleteUserAttributesResponse$\n];\nexport var AdminDisableProviderForUser$ = [9, n0, _ADPFU,\n    0, () => AdminDisableProviderForUserRequest$, () => AdminDisableProviderForUserResponse$\n];\nexport var AdminDisableUser$ = [9, n0, _ADUd,\n    0, () => AdminDisableUserRequest$, () => AdminDisableUserResponse$\n];\nexport var AdminEnableUser$ = [9, n0, _AEU,\n    0, () => AdminEnableUserRequest$, () => AdminEnableUserResponse$\n];\nexport var AdminForgetDevice$ = [9, n0, _AFD,\n    0, () => AdminForgetDeviceRequest$, () => __Unit\n];\nexport var AdminGetDevice$ = [9, n0, _AGD,\n    0, () => AdminGetDeviceRequest$, () => AdminGetDeviceResponse$\n];\nexport var AdminGetUser$ = [9, n0, _AGU,\n    0, () => AdminGetUserRequest$, () => AdminGetUserResponse$\n];\nexport var AdminInitiateAuth$ = [9, n0, _AIA,\n    0, () => AdminInitiateAuthRequest$, () => AdminInitiateAuthResponse$\n];\nexport var AdminLinkProviderForUser$ = [9, n0, _ALPFU,\n    0, () => AdminLinkProviderForUserRequest$, () => AdminLinkProviderForUserResponse$\n];\nexport var AdminListDevices$ = [9, n0, _ALD,\n    0, () => AdminListDevicesRequest$, () => AdminListDevicesResponse$\n];\nexport var AdminListGroupsForUser$ = [9, n0, _ALGFU,\n    0, () => AdminListGroupsForUserRequest$, () => AdminListGroupsForUserResponse$\n];\nexport var AdminListUserAuthEvents$ = [9, n0, _ALUAE,\n    0, () => AdminListUserAuthEventsRequest$, () => AdminListUserAuthEventsResponse$\n];\nexport var AdminRemoveUserFromGroup$ = [9, n0, _ARUFG,\n    0, () => AdminRemoveUserFromGroupRequest$, () => __Unit\n];\nexport var AdminResetUserPassword$ = [9, n0, _ARUP,\n    0, () => AdminResetUserPasswordRequest$, () => AdminResetUserPasswordResponse$\n];\nexport var AdminRespondToAuthChallenge$ = [9, n0, _ARTAC,\n    0, () => AdminRespondToAuthChallengeRequest$, () => AdminRespondToAuthChallengeResponse$\n];\nexport var AdminSetUserMFAPreference$ = [9, n0, _ASUMFAP,\n    0, () => AdminSetUserMFAPreferenceRequest$, () => AdminSetUserMFAPreferenceResponse$\n];\nexport var AdminSetUserPassword$ = [9, n0, _ASUP,\n    0, () => AdminSetUserPasswordRequest$, () => AdminSetUserPasswordResponse$\n];\nexport var AdminSetUserSettings$ = [9, n0, _ASUS,\n    0, () => AdminSetUserSettingsRequest$, () => AdminSetUserSettingsResponse$\n];\nexport var AdminUpdateAuthEventFeedback$ = [9, n0, _AUAEF,\n    0, () => AdminUpdateAuthEventFeedbackRequest$, () => AdminUpdateAuthEventFeedbackResponse$\n];\nexport var AdminUpdateDeviceStatus$ = [9, n0, _AUDS,\n    0, () => AdminUpdateDeviceStatusRequest$, () => AdminUpdateDeviceStatusResponse$\n];\nexport var AdminUpdateUserAttributes$ = [9, n0, _AUUA,\n    0, () => AdminUpdateUserAttributesRequest$, () => AdminUpdateUserAttributesResponse$\n];\nexport var AdminUserGlobalSignOut$ = [9, n0, _AUGSO,\n    0, () => AdminUserGlobalSignOutRequest$, () => AdminUserGlobalSignOutResponse$\n];\nexport var AssociateSoftwareToken$ = [9, n0, _AST,\n    0, () => AssociateSoftwareTokenRequest$, () => AssociateSoftwareTokenResponse$\n];\nexport var ChangePassword$ = [9, n0, _CPh,\n    0, () => ChangePasswordRequest$, () => ChangePasswordResponse$\n];\nexport var CompleteWebAuthnRegistration$ = [9, n0, _CWAR,\n    0, () => CompleteWebAuthnRegistrationRequest$, () => CompleteWebAuthnRegistrationResponse$\n];\nexport var ConfirmDevice$ = [9, n0, _CDon,\n    0, () => ConfirmDeviceRequest$, () => ConfirmDeviceResponse$\n];\nexport var ConfirmForgotPassword$ = [9, n0, _CFP,\n    0, () => ConfirmForgotPasswordRequest$, () => ConfirmForgotPasswordResponse$\n];\nexport var ConfirmSignUp$ = [9, n0, _CSU,\n    0, () => ConfirmSignUpRequest$, () => ConfirmSignUpResponse$\n];\nexport var CreateGroup$ = [9, n0, _CG,\n    0, () => CreateGroupRequest$, () => CreateGroupResponse$\n];\nexport var CreateIdentityProvider$ = [9, n0, _CIP,\n    0, () => CreateIdentityProviderRequest$, () => CreateIdentityProviderResponse$\n];\nexport var CreateManagedLoginBranding$ = [9, n0, _CMLB,\n    0, () => CreateManagedLoginBrandingRequest$, () => CreateManagedLoginBrandingResponse$\n];\nexport var CreateResourceServer$ = [9, n0, _CRS,\n    0, () => CreateResourceServerRequest$, () => CreateResourceServerResponse$\n];\nexport var CreateTerms$ = [9, n0, _CT,\n    0, () => CreateTermsRequest$, () => CreateTermsResponse$\n];\nexport var CreateUserImportJob$ = [9, n0, _CUIJ,\n    0, () => CreateUserImportJobRequest$, () => CreateUserImportJobResponse$\n];\nexport var CreateUserPool$ = [9, n0, _CUP,\n    0, () => CreateUserPoolRequest$, () => CreateUserPoolResponse$\n];\nexport var CreateUserPoolClient$ = [9, n0, _CUPC,\n    0, () => CreateUserPoolClientRequest$, () => CreateUserPoolClientResponse$\n];\nexport var CreateUserPoolDomain$ = [9, n0, _CUPD,\n    0, () => CreateUserPoolDomainRequest$, () => CreateUserPoolDomainResponse$\n];\nexport var DeleteGroup$ = [9, n0, _DG,\n    0, () => DeleteGroupRequest$, () => __Unit\n];\nexport var DeleteIdentityProvider$ = [9, n0, _DIP,\n    0, () => DeleteIdentityProviderRequest$, () => __Unit\n];\nexport var DeleteManagedLoginBranding$ = [9, n0, _DMLB,\n    0, () => DeleteManagedLoginBrandingRequest$, () => __Unit\n];\nexport var DeleteResourceServer$ = [9, n0, _DRSe,\n    0, () => DeleteResourceServerRequest$, () => __Unit\n];\nexport var DeleteTerms$ = [9, n0, _DTe,\n    0, () => DeleteTermsRequest$, () => __Unit\n];\nexport var DeleteUser$ = [9, n0, _DUe,\n    0, () => DeleteUserRequest$, () => __Unit\n];\nexport var DeleteUserAttributes$ = [9, n0, _DUA,\n    0, () => DeleteUserAttributesRequest$, () => DeleteUserAttributesResponse$\n];\nexport var DeleteUserPool$ = [9, n0, _DUP,\n    0, () => DeleteUserPoolRequest$, () => __Unit\n];\nexport var DeleteUserPoolClient$ = [9, n0, _DUPC,\n    0, () => DeleteUserPoolClientRequest$, () => __Unit\n];\nexport var DeleteUserPoolClientSecret$ = [9, n0, _DUPCS,\n    0, () => DeleteUserPoolClientSecretRequest$, () => DeleteUserPoolClientSecretResponse$\n];\nexport var DeleteUserPoolDomain$ = [9, n0, _DUPD,\n    0, () => DeleteUserPoolDomainRequest$, () => DeleteUserPoolDomainResponse$\n];\nexport var DeleteWebAuthnCredential$ = [9, n0, _DWAC,\n    0, () => DeleteWebAuthnCredentialRequest$, () => DeleteWebAuthnCredentialResponse$\n];\nexport var DescribeIdentityProvider$ = [9, n0, _DIPe,\n    0, () => DescribeIdentityProviderRequest$, () => DescribeIdentityProviderResponse$\n];\nexport var DescribeManagedLoginBranding$ = [9, n0, _DMLBe,\n    0, () => DescribeManagedLoginBrandingRequest$, () => DescribeManagedLoginBrandingResponse$\n];\nexport var DescribeManagedLoginBrandingByClient$ = [9, n0, _DMLBBC,\n    0, () => DescribeManagedLoginBrandingByClientRequest$, () => DescribeManagedLoginBrandingByClientResponse$\n];\nexport var DescribeResourceServer$ = [9, n0, _DRSes,\n    0, () => DescribeResourceServerRequest$, () => DescribeResourceServerResponse$\n];\nexport var DescribeRiskConfiguration$ = [9, n0, _DRC,\n    0, () => DescribeRiskConfigurationRequest$, () => DescribeRiskConfigurationResponse$\n];\nexport var DescribeTerms$ = [9, n0, _DTes,\n    0, () => DescribeTermsRequest$, () => DescribeTermsResponse$\n];\nexport var DescribeUserImportJob$ = [9, n0, _DUIJ,\n    0, () => DescribeUserImportJobRequest$, () => DescribeUserImportJobResponse$\n];\nexport var DescribeUserPool$ = [9, n0, _DUPe,\n    0, () => DescribeUserPoolRequest$, () => DescribeUserPoolResponse$\n];\nexport var DescribeUserPoolClient$ = [9, n0, _DUPCe,\n    0, () => DescribeUserPoolClientRequest$, () => DescribeUserPoolClientResponse$\n];\nexport var DescribeUserPoolDomain$ = [9, n0, _DUPDe,\n    0, () => DescribeUserPoolDomainRequest$, () => DescribeUserPoolDomainResponse$\n];\nexport var ForgetDevice$ = [9, n0, _FDo,\n    0, () => ForgetDeviceRequest$, () => __Unit\n];\nexport var ForgotPassword$ = [9, n0, _FP,\n    0, () => ForgotPasswordRequest$, () => ForgotPasswordResponse$\n];\nexport var GetCSVHeader$ = [9, n0, _GCSVH,\n    0, () => GetCSVHeaderRequest$, () => GetCSVHeaderResponse$\n];\nexport var GetDevice$ = [9, n0, _GD,\n    0, () => GetDeviceRequest$, () => GetDeviceResponse$\n];\nexport var GetGroup$ = [9, n0, _GG,\n    0, () => GetGroupRequest$, () => GetGroupResponse$\n];\nexport var GetIdentityProviderByIdentifier$ = [9, n0, _GIPBI,\n    0, () => GetIdentityProviderByIdentifierRequest$, () => GetIdentityProviderByIdentifierResponse$\n];\nexport var GetLogDeliveryConfiguration$ = [9, n0, _GLDC,\n    0, () => GetLogDeliveryConfigurationRequest$, () => GetLogDeliveryConfigurationResponse$\n];\nexport var GetSigningCertificate$ = [9, n0, _GSC,\n    0, () => GetSigningCertificateRequest$, () => GetSigningCertificateResponse$\n];\nexport var GetTokensFromRefreshToken$ = [9, n0, _GTFRT,\n    0, () => GetTokensFromRefreshTokenRequest$, () => GetTokensFromRefreshTokenResponse$\n];\nexport var GetUICustomization$ = [9, n0, _GUIC,\n    0, () => GetUICustomizationRequest$, () => GetUICustomizationResponse$\n];\nexport var GetUser$ = [9, n0, _GU,\n    0, () => GetUserRequest$, () => GetUserResponse$\n];\nexport var GetUserAttributeVerificationCode$ = [9, n0, _GUAVC,\n    0, () => GetUserAttributeVerificationCodeRequest$, () => GetUserAttributeVerificationCodeResponse$\n];\nexport var GetUserAuthFactors$ = [9, n0, _GUAF,\n    0, () => GetUserAuthFactorsRequest$, () => GetUserAuthFactorsResponse$\n];\nexport var GetUserPoolMfaConfig$ = [9, n0, _GUPMC,\n    0, () => GetUserPoolMfaConfigRequest$, () => GetUserPoolMfaConfigResponse$\n];\nexport var GlobalSignOut$ = [9, n0, _GSO,\n    0, () => GlobalSignOutRequest$, () => GlobalSignOutResponse$\n];\nexport var InitiateAuth$ = [9, n0, _IAn,\n    0, () => InitiateAuthRequest$, () => InitiateAuthResponse$\n];\nexport var ListDevices$ = [9, n0, _LD,\n    0, () => ListDevicesRequest$, () => ListDevicesResponse$\n];\nexport var ListGroups$ = [9, n0, _LG,\n    0, () => ListGroupsRequest$, () => ListGroupsResponse$\n];\nexport var ListIdentityProviders$ = [9, n0, _LIP,\n    0, () => ListIdentityProvidersRequest$, () => ListIdentityProvidersResponse$\n];\nexport var ListResourceServers$ = [9, n0, _LRS,\n    0, () => ListResourceServersRequest$, () => ListResourceServersResponse$\n];\nexport var ListTagsForResource$ = [9, n0, _LTFR,\n    0, () => ListTagsForResourceRequest$, () => ListTagsForResourceResponse$\n];\nexport var ListTerms$ = [9, n0, _LT,\n    0, () => ListTermsRequest$, () => ListTermsResponse$\n];\nexport var ListUserImportJobs$ = [9, n0, _LUIJ,\n    0, () => ListUserImportJobsRequest$, () => ListUserImportJobsResponse$\n];\nexport var ListUserPoolClients$ = [9, n0, _LUPC,\n    0, () => ListUserPoolClientsRequest$, () => ListUserPoolClientsResponse$\n];\nexport var ListUserPoolClientSecrets$ = [9, n0, _LUPCS,\n    0, () => ListUserPoolClientSecretsRequest$, () => ListUserPoolClientSecretsResponse$\n];\nexport var ListUserPools$ = [9, n0, _LUP,\n    0, () => ListUserPoolsRequest$, () => ListUserPoolsResponse$\n];\nexport var ListUsers$ = [9, n0, _LU,\n    0, () => ListUsersRequest$, () => ListUsersResponse$\n];\nexport var ListUsersInGroup$ = [9, n0, _LUIG,\n    0, () => ListUsersInGroupRequest$, () => ListUsersInGroupResponse$\n];\nexport var ListWebAuthnCredentials$ = [9, n0, _LWAC,\n    0, () => ListWebAuthnCredentialsRequest$, () => ListWebAuthnCredentialsResponse$\n];\nexport var ResendConfirmationCode$ = [9, n0, _RCC,\n    0, () => ResendConfirmationCodeRequest$, () => ResendConfirmationCodeResponse$\n];\nexport var RespondToAuthChallenge$ = [9, n0, _RTAC,\n    0, () => RespondToAuthChallengeRequest$, () => RespondToAuthChallengeResponse$\n];\nexport var RevokeToken$ = [9, n0, _RTev,\n    0, () => RevokeTokenRequest$, () => RevokeTokenResponse$\n];\nexport var SetLogDeliveryConfiguration$ = [9, n0, _SLDC,\n    0, () => SetLogDeliveryConfigurationRequest$, () => SetLogDeliveryConfigurationResponse$\n];\nexport var SetRiskConfiguration$ = [9, n0, _SRC,\n    0, () => SetRiskConfigurationRequest$, () => SetRiskConfigurationResponse$\n];\nexport var SetUICustomization$ = [9, n0, _SUIC,\n    0, () => SetUICustomizationRequest$, () => SetUICustomizationResponse$\n];\nexport var SetUserMFAPreference$ = [9, n0, _SUMFAP,\n    0, () => SetUserMFAPreferenceRequest$, () => SetUserMFAPreferenceResponse$\n];\nexport var SetUserPoolMfaConfig$ = [9, n0, _SUPMC,\n    0, () => SetUserPoolMfaConfigRequest$, () => SetUserPoolMfaConfigResponse$\n];\nexport var SetUserSettings$ = [9, n0, _SUS,\n    0, () => SetUserSettingsRequest$, () => SetUserSettingsResponse$\n];\nexport var SignUp$ = [9, n0, _SUi,\n    0, () => SignUpRequest$, () => SignUpResponse$\n];\nexport var StartUserImportJob$ = [9, n0, _SUIJ,\n    0, () => StartUserImportJobRequest$, () => StartUserImportJobResponse$\n];\nexport var StartWebAuthnRegistration$ = [9, n0, _SWAR,\n    0, () => StartWebAuthnRegistrationRequest$, () => StartWebAuthnRegistrationResponse$\n];\nexport var StopUserImportJob$ = [9, n0, _SUIJt,\n    0, () => StopUserImportJobRequest$, () => StopUserImportJobResponse$\n];\nexport var TagResource$ = [9, n0, _TR,\n    0, () => TagResourceRequest$, () => TagResourceResponse$\n];\nexport var UntagResource$ = [9, n0, _UR,\n    0, () => UntagResourceRequest$, () => UntagResourceResponse$\n];\nexport var UpdateAuthEventFeedback$ = [9, n0, _UAEF,\n    0, () => UpdateAuthEventFeedbackRequest$, () => UpdateAuthEventFeedbackResponse$\n];\nexport var UpdateDeviceStatus$ = [9, n0, _UDSp,\n    0, () => UpdateDeviceStatusRequest$, () => UpdateDeviceStatusResponse$\n];\nexport var UpdateGroup$ = [9, n0, _UG,\n    0, () => UpdateGroupRequest$, () => UpdateGroupResponse$\n];\nexport var UpdateIdentityProvider$ = [9, n0, _UIP,\n    0, () => UpdateIdentityProviderRequest$, () => UpdateIdentityProviderResponse$\n];\nexport var UpdateManagedLoginBranding$ = [9, n0, _UMLB,\n    0, () => UpdateManagedLoginBrandingRequest$, () => UpdateManagedLoginBrandingResponse$\n];\nexport var UpdateResourceServer$ = [9, n0, _URS,\n    0, () => UpdateResourceServerRequest$, () => UpdateResourceServerResponse$\n];\nexport var UpdateTerms$ = [9, n0, _UTp,\n    0, () => UpdateTermsRequest$, () => UpdateTermsResponse$\n];\nexport var UpdateUserAttributes$ = [9, n0, _UUA,\n    0, () => UpdateUserAttributesRequest$, () => UpdateUserAttributesResponse$\n];\nexport var UpdateUserPool$ = [9, n0, _UUP,\n    0, () => UpdateUserPoolRequest$, () => UpdateUserPoolResponse$\n];\nexport var UpdateUserPoolClient$ = [9, n0, _UUPC,\n    0, () => UpdateUserPoolClientRequest$, () => UpdateUserPoolClientResponse$\n];\nexport var UpdateUserPoolDomain$ = [9, n0, _UUPD,\n    0, () => UpdateUserPoolDomainRequest$, () => UpdateUserPoolDomainResponse$\n];\nexport var VerifySoftwareToken$ = [9, n0, _VST,\n    0, () => VerifySoftwareTokenRequest$, () => VerifySoftwareTokenResponse$\n];\nexport var VerifyUserAttribute$ = [9, n0, _VUA,\n    0, () => VerifyUserAttributeRequest$, () => VerifyUserAttributeResponse$\n];\n","import { AwsSdkSigV4Signer } from \"@aws-sdk/core/httpAuthSchemes\";\nimport { AwsJson1_1Protocol } from \"@aws-sdk/core/protocols\";\nimport { NoAuthSigner } from \"@smithy/core\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { parseUrl } from \"@smithy/url-parser\";\nimport { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { defaultCognitoIdentityProviderHttpAuthSchemeProvider } from \"./auth/httpAuthSchemeProvider\";\nimport { defaultEndpointResolver } from \"./endpoint/endpointResolver\";\nimport { errorTypeRegistries } from \"./schemas/schemas_0\";\nexport const getRuntimeConfig = (config) => {\n    return {\n        apiVersion: \"2016-04-18\",\n        base64Decoder: config?.base64Decoder ?? fromBase64,\n        base64Encoder: config?.base64Encoder ?? toBase64,\n        disableHostPrefix: config?.disableHostPrefix ?? false,\n        endpointProvider: config?.endpointProvider ?? defaultEndpointResolver,\n        extensions: config?.extensions ?? [],\n        httpAuthSchemeProvider: config?.httpAuthSchemeProvider ?? defaultCognitoIdentityProviderHttpAuthSchemeProvider,\n        httpAuthSchemes: config?.httpAuthSchemes ?? [\n            {\n                schemeId: \"aws.auth#sigv4\",\n                identityProvider: (ipc) => ipc.getIdentityProvider(\"aws.auth#sigv4\"),\n                signer: new AwsSdkSigV4Signer(),\n            },\n            {\n                schemeId: \"smithy.api#noAuth\",\n                identityProvider: (ipc) => ipc.getIdentityProvider(\"smithy.api#noAuth\") || (async () => ({})),\n                signer: new NoAuthSigner(),\n            },\n        ],\n        logger: config?.logger ?? new NoOpLogger(),\n        protocol: config?.protocol ?? AwsJson1_1Protocol,\n        protocolSettings: config?.protocolSettings ?? {\n            defaultNamespace: \"com.amazonaws.cognitoidentityprovider\",\n            errorTypeRegistries,\n            xmlNamespace: \"http://cognito-idp.amazonaws.com/doc/2016-04-18/\",\n            version: \"2016-04-18\",\n            serviceTarget: \"AWSCognitoIdentityProviderService\",\n        },\n        serviceId: config?.serviceId ?? \"Cognito Identity Provider\",\n        urlParser: config?.urlParser ?? parseUrl,\n        utf8Decoder: config?.utf8Decoder ?? fromUtf8,\n        utf8Encoder: config?.utf8Encoder ?? toUtf8,\n    };\n};\n","import packageInfo from \"../package.json\";\nimport { Sha256 } from \"@aws-crypto/sha256-browser\";\nimport { createDefaultUserAgentProvider } from \"@aws-sdk/util-user-agent-browser\";\nimport { DEFAULT_USE_DUALSTACK_ENDPOINT, DEFAULT_USE_FIPS_ENDPOINT } from \"@smithy/config-resolver\";\nimport { FetchHttpHandler as RequestHandler, streamCollector } from \"@smithy/fetch-http-handler\";\nimport { invalidProvider } from \"@smithy/invalid-dependency\";\nimport { loadConfigsForDefaultMode } from \"@smithy/smithy-client\";\nimport { calculateBodyLength } from \"@smithy/util-body-length-browser\";\nimport { resolveDefaultsModeConfig } from \"@smithy/util-defaults-mode-browser\";\nimport { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE } from \"@smithy/util-retry\";\nimport { getRuntimeConfig as getSharedRuntimeConfig } from \"./runtimeConfig.shared\";\nexport const getRuntimeConfig = (config) => {\n    const defaultsMode = resolveDefaultsModeConfig(config);\n    const defaultConfigProvider = () => defaultsMode().then(loadConfigsForDefaultMode);\n    const clientSharedValues = getSharedRuntimeConfig(config);\n    return {\n        ...clientSharedValues,\n        ...config,\n        runtime: \"browser\",\n        defaultsMode,\n        bodyLengthChecker: config?.bodyLengthChecker ?? calculateBodyLength,\n        credentialDefaultProvider: config?.credentialDefaultProvider ?? ((_) => () => Promise.reject(new Error(\"Credential is missing\"))),\n        defaultUserAgentProvider: config?.defaultUserAgentProvider ?? createDefaultUserAgentProvider({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),\n        maxAttempts: config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n        region: config?.region ?? invalidProvider(\"Region is missing\"),\n        requestHandler: RequestHandler.create(config?.requestHandler ?? defaultConfigProvider),\n        retryMode: config?.retryMode ?? (async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE),\n        sha256: config?.sha256 ?? Sha256,\n        streamCollector: config?.streamCollector ?? streamCollector,\n        useDualstackEndpoint: config?.useDualstackEndpoint ?? (() => Promise.resolve(DEFAULT_USE_DUALSTACK_ENDPOINT)),\n        useFipsEndpoint: config?.useFipsEndpoint ?? (() => Promise.resolve(DEFAULT_USE_FIPS_ENDPOINT)),\n    };\n};\n","export const getAwsRegionExtensionConfiguration = (runtimeConfig) => {\n    return {\n        setRegion(region) {\n            runtimeConfig.region = region;\n        },\n        region() {\n            return runtimeConfig.region;\n        },\n    };\n};\nexport const resolveAwsRegionExtensionConfiguration = (awsRegionExtensionConfiguration) => {\n    return {\n        region: awsRegionExtensionConfiguration.region(),\n    };\n};\n","export const getHttpAuthExtensionConfiguration = (runtimeConfig) => {\n    const _httpAuthSchemes = runtimeConfig.httpAuthSchemes;\n    let _httpAuthSchemeProvider = runtimeConfig.httpAuthSchemeProvider;\n    let _credentials = runtimeConfig.credentials;\n    return {\n        setHttpAuthScheme(httpAuthScheme) {\n            const index = _httpAuthSchemes.findIndex((scheme) => scheme.schemeId === httpAuthScheme.schemeId);\n            if (index === -1) {\n                _httpAuthSchemes.push(httpAuthScheme);\n            }\n            else {\n                _httpAuthSchemes.splice(index, 1, httpAuthScheme);\n            }\n        },\n        httpAuthSchemes() {\n            return _httpAuthSchemes;\n        },\n        setHttpAuthSchemeProvider(httpAuthSchemeProvider) {\n            _httpAuthSchemeProvider = httpAuthSchemeProvider;\n        },\n        httpAuthSchemeProvider() {\n            return _httpAuthSchemeProvider;\n        },\n        setCredentials(credentials) {\n            _credentials = credentials;\n        },\n        credentials() {\n            return _credentials;\n        },\n    };\n};\nexport const resolveHttpAuthRuntimeConfig = (config) => {\n    return {\n        httpAuthSchemes: config.httpAuthSchemes(),\n        httpAuthSchemeProvider: config.httpAuthSchemeProvider(),\n        credentials: config.credentials(),\n    };\n};\n","import { getAwsRegionExtensionConfiguration, resolveAwsRegionExtensionConfiguration, } from \"@aws-sdk/region-config-resolver\";\nimport { getHttpHandlerExtensionConfiguration, resolveHttpHandlerRuntimeConfig } from \"@smithy/protocol-http\";\nimport { getDefaultExtensionConfiguration, resolveDefaultRuntimeConfig } from \"@smithy/smithy-client\";\nimport { getHttpAuthExtensionConfiguration, resolveHttpAuthRuntimeConfig } from \"./auth/httpAuthExtensionConfiguration\";\nexport const resolveRuntimeExtensions = (runtimeConfig, extensions) => {\n    const extensionConfiguration = Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig), getDefaultExtensionConfiguration(runtimeConfig), getHttpHandlerExtensionConfiguration(runtimeConfig), getHttpAuthExtensionConfiguration(runtimeConfig));\n    extensions.forEach((extension) => extension.configure(extensionConfiguration));\n    return Object.assign(runtimeConfig, resolveAwsRegionExtensionConfiguration(extensionConfiguration), resolveDefaultRuntimeConfig(extensionConfiguration), resolveHttpHandlerRuntimeConfig(extensionConfiguration), resolveHttpAuthRuntimeConfig(extensionConfiguration));\n};\n","import { getHostHeaderPlugin, resolveHostHeaderConfig, } from \"@aws-sdk/middleware-host-header\";\nimport { getLoggerPlugin } from \"@aws-sdk/middleware-logger\";\nimport { getRecursionDetectionPlugin } from \"@aws-sdk/middleware-recursion-detection\";\nimport { getUserAgentPlugin, resolveUserAgentConfig, } from \"@aws-sdk/middleware-user-agent\";\nimport { resolveRegionConfig } from \"@smithy/config-resolver\";\nimport { DefaultIdentityProviderConfig, getHttpAuthSchemeEndpointRuleSetPlugin, getHttpSigningPlugin, } from \"@smithy/core\";\nimport { getSchemaSerdePlugin } from \"@smithy/core/schema\";\nimport { getContentLengthPlugin } from \"@smithy/middleware-content-length\";\nimport { resolveEndpointConfig, } from \"@smithy/middleware-endpoint\";\nimport { getRetryPlugin, resolveRetryConfig, } from \"@smithy/middleware-retry\";\nimport { Client as __Client, } from \"@smithy/smithy-client\";\nimport { defaultCognitoIdentityProviderHttpAuthSchemeParametersProvider, resolveHttpAuthSchemeConfig, } from \"./auth/httpAuthSchemeProvider\";\nimport { resolveClientEndpointParameters, } from \"./endpoint/EndpointParameters\";\nimport { getRuntimeConfig as __getRuntimeConfig } from \"./runtimeConfig\";\nimport { resolveRuntimeExtensions } from \"./runtimeExtensions\";\nexport { __Client };\nexport class CognitoIdentityProviderClient extends __Client {\n    config;\n    constructor(...[configuration]) {\n        const _config_0 = __getRuntimeConfig(configuration || {});\n        super(_config_0);\n        this.initConfig = _config_0;\n        const _config_1 = resolveClientEndpointParameters(_config_0);\n        const _config_2 = resolveUserAgentConfig(_config_1);\n        const _config_3 = resolveRetryConfig(_config_2);\n        const _config_4 = resolveRegionConfig(_config_3);\n        const _config_5 = resolveHostHeaderConfig(_config_4);\n        const _config_6 = resolveEndpointConfig(_config_5);\n        const _config_7 = resolveHttpAuthSchemeConfig(_config_6);\n        const _config_8 = resolveRuntimeExtensions(_config_7, configuration?.extensions || []);\n        this.config = _config_8;\n        this.middlewareStack.use(getSchemaSerdePlugin(this.config));\n        this.middlewareStack.use(getUserAgentPlugin(this.config));\n        this.middlewareStack.use(getRetryPlugin(this.config));\n        this.middlewareStack.use(getContentLengthPlugin(this.config));\n        this.middlewareStack.use(getHostHeaderPlugin(this.config));\n        this.middlewareStack.use(getLoggerPlugin(this.config));\n        this.middlewareStack.use(getRecursionDetectionPlugin(this.config));\n        this.middlewareStack.use(getHttpAuthSchemeEndpointRuleSetPlugin(this.config, {\n            httpAuthSchemeParametersProvider: defaultCognitoIdentityProviderHttpAuthSchemeParametersProvider,\n            identityProviderConfigProvider: async (config) => new DefaultIdentityProviderConfig({\n                \"aws.auth#sigv4\": config.credentials,\n            }),\n        }));\n        this.middlewareStack.use(getHttpSigningPlugin(this.config));\n    }\n    destroy() {\n        super.destroy();\n    }\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { InitiateAuth$ } from \"../schemas/schemas_0\";\nexport { $Command };\nexport class InitiateAuthCommand extends $Command\n    .classBuilder()\n    .ep(commonParams)\n    .m(function (Command, cs, config, o) {\n    return [getEndpointPlugin(config, Command.getEndpointParameterInstructions())];\n})\n    .s(\"AWSCognitoIdentityProviderService\", \"InitiateAuth\", {})\n    .n(\"CognitoIdentityProviderClient\", \"InitiateAuthCommand\")\n    .sc(InitiateAuth$)\n    .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { RespondToAuthChallenge$ } from \"../schemas/schemas_0\";\nexport { $Command };\nexport class RespondToAuthChallengeCommand extends $Command\n    .classBuilder()\n    .ep(commonParams)\n    .m(function (Command, cs, config, o) {\n    return [getEndpointPlugin(config, Command.getEndpointParameterInstructions())];\n})\n    .s(\"AWSCognitoIdentityProviderService\", \"RespondToAuthChallenge\", {})\n    .n(\"CognitoIdentityProviderClient\", \"RespondToAuthChallengeCommand\")\n    .sc(RespondToAuthChallenge$)\n    .build() {\n}\n","import {\n    AuthenticationResultType,\n    CognitoIdentityProviderClient,\n    InitiateAuthCommand,\n    InitiateAuthCommandOutput,\n    RespondToAuthChallengeCommand,\n    RespondToAuthChallengeCommandOutput,\n} from \"@aws-sdk/client-cognito-identity-provider\";\n\nclass UserPoolManager {\n    cognitoClient?: CognitoIdentityProviderClient;\n    spiffRegion?: string;\n    userPoolClientId?: string;\n\n    private challengeSession?: string;\n\n    init(spiffRegion: string, userPoolRegion: string, userPoolClientId: string) {\n        this.cognitoClient = new CognitoIdentityProviderClient({ region: userPoolRegion });\n        this.spiffRegion = spiffRegion;\n        this.userPoolClientId = userPoolClientId;\n    }\n\n    async generateCode(emailAddress: string): Promise<void> {\n        const response = await this.cognitoClient?.send(\n            new InitiateAuthCommand({\n                AuthFlow: \"CUSTOM_AUTH\",\n                ClientId: this.userPoolClientId,\n                AuthParameters: {\n                    USERNAME: emailAddress,\n                },\n            }),\n        );\n        if (response?.ChallengeName === \"CUSTOM_CHALLENGE\") {\n            this.challengeSession = response.Session;\n        }\n    }\n\n    async verifyCode(\n        emailAddress: string,\n        code: string,\n        partnerId: string,\n    ): Promise<RespondToAuthChallengeCommandOutput | undefined> {\n        const response = await this.cognitoClient?.send(\n            new RespondToAuthChallengeCommand({\n                ClientId: this.userPoolClientId,\n                ChallengeName: \"CUSTOM_CHALLENGE\",\n                Session: this.challengeSession,\n                ChallengeResponses: {\n                    USERNAME: emailAddress,\n                    ANSWER: code,\n                },\n                ClientMetadata: {\n                    partnerId,\n                    environment: (this.spiffRegion || \"\").toLowerCase(),\n                },\n            }),\n        );\n        if (response?.ChallengeName === \"CUSTOM_CHALLENGE\") {\n            this.challengeSession = response.Session;\n        }\n        return response;\n    }\n\n    async refreshTokens(): Promise<InitiateAuthCommandOutput | undefined> {\n        const existingTokensString = localStorage.getItem(\"cognito-tokens\");\n        if (!existingTokensString) {\n            throw new Error(\"Failed to find existing tokens.\");\n        }\n        const existingTokens: AuthenticationResultType = JSON.parse(existingTokensString);\n        return await this.cognitoClient?.send(\n            new InitiateAuthCommand({\n                AuthFlow: \"REFRESH_TOKEN_AUTH\",\n                ClientId: this.userPoolClientId,\n                AuthParameters: {\n                    REFRESH_TOKEN: existingTokens.RefreshToken || \"\",\n                },\n            }),\n        );\n    }\n}\n\nconst userPoolManager = new UserPoolManager();\nexport { userPoolManager };\n","/**\n * Default values for all Dinero objects.\n *\n * You can override default values for all subsequent Dinero objects by changing them directly on the global `Dinero` object.\n * Existing instances won't be affected.\n *\n * @property {Number} defaultAmount - The default amount for new Dinero objects (see {@link module:Dinero Dinero} for format).\n * @property {String} defaultCurrency - The default currency for new Dinero objects (see {@link module:Dinero Dinero} for format).\n * @property {Number} defaultPrecision - The default precision for new Dinero objects (see {@link module:Dinero Dinero} for format).\n *\n * @example\n * // Will set currency to 'EUR' for all Dinero objects.\n * Dinero.defaultCurrency = 'EUR'\n *\n * @type {Object}\n */\nvar Defaults = {\n  defaultAmount: 0,\n  defaultCurrency: 'USD',\n  defaultPrecision: 2\n};\n/**\n * Global settings for all Dinero objects.\n *\n * You can override global values for all subsequent Dinero objects by changing them directly on the global `Dinero` object.\n * Existing instances won't be affected.\n *\n * @property {String}  globalLocale - The global locale for new Dinero objects (see {@link module:Dinero~setLocale setLocale} for format).\n * @property {String}  globalFormat - The global format for new Dinero objects (see {@link module:Dinero~toFormat toFormat} for format).\n * @property {String}  globalRoundingMode - The global rounding mode for new Dinero objects (see {@link module:Dinero~multiply multiply} or {@link module:Dinero~divide divide} for format).\n * @property {String}  globalFormatRoundingMode - The global rounding mode to format new Dinero objects (see {@link module:Dinero~toFormat toFormat} or {@link module:Dinero~toRoundedUnit toRoundedUnit} for format).\n * @property {(String|Promise)}  globalExchangeRatesApi.endpoint - The global exchange rate API endpoint for new Dinero objects, or the global promise that resolves to the exchanges rates (see {@link module:Dinero~convert convert} for format).\n * @property {String}  globalExchangeRatesApi.propertyPath - The global exchange rate API property path for new Dinero objects (see {@link module:Dinero~convert convert} for format).\n * @property {Object}  globalExchangeRatesApi.headers - The global exchange rate API headers for new Dinero objects (see {@link module:Dinero~convert convert} for format).\n *\n * @example\n * // Will set locale to 'fr-FR' for all Dinero objects.\n * Dinero.globalLocale = 'fr-FR'\n * @example\n * // Will set global exchange rate API parameters for all Dinero objects.\n * Dinero.globalExchangeRatesApi = {\n *  endpoint: 'https://yourexchangerates.api/latest?base={{from}}',\n *  propertyPath: 'data.rates.{{to}}',\n *  headers: {\n *    'user-key': 'xxxxxxxxx'\n *  }\n * }\n *\n * @type {Object}\n */\n\nvar Globals = {\n  globalLocale: 'en-US',\n  globalFormat: '$0,0.00',\n  globalRoundingMode: 'HALF_EVEN',\n  globalFormatRoundingMode: 'HALF_AWAY_FROM_ZERO',\n  globalExchangeRatesApi: {\n    endpoint: undefined,\n    headers: undefined,\n    propertyPath: undefined\n  }\n};\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _toArray(arr) {\n  return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n * Static methods for Dinero.\n * @ignore\n *\n * @type {Object}\n */\nvar Static = {\n  /**\n   * Returns an array of Dinero objects, normalized to the same precision (the highest).\n   *\n   * @memberof module:Dinero\n   * @method\n   *\n   * @param {Dinero[]} objects - An array of Dinero objects\n   *\n   * @example\n   * // returns an array of Dinero objects\n   * // both with a precision of 3\n   * // and an amount of 1000\n   * Dinero.normalizePrecision([\n   *   Dinero({ amount: 100, precision: 2 }),\n   *   Dinero({ amount: 1000, precision: 3 })\n   * ])\n   *\n   * @return {Dinero[]}\n   */\n  normalizePrecision: function normalizePrecision(objects) {\n    var highestPrecision = objects.reduce(function (a, b) {\n      return Math.max(a.getPrecision(), b.getPrecision());\n    });\n    return objects.map(function (object) {\n      return object.getPrecision() !== highestPrecision ? object.convertPrecision(highestPrecision) : object;\n    });\n  },\n\n  /**\n   * Returns the smallest Dinero object from an array of Dinero objects\n   *\n   * @memberof module:Dinero\n   * @method\n   *\n   * @param {Dinero[]} objects - An array of Dinero objects\n   *\n   * @example\n   * // returns the smallest Dinero object with amount of 500 from an array of Dinero objects with different precisions\n   * Dinero.minimum([\n   *   Dinero({ amount: 500, precision: 3 }),\n   *   Dinero({ amount: 100, precision: 2 })\n   * ])\n   * @example\n   * // returns the smallest Dinero object with amount of 50 from an array of Dinero objects\n   * Dinero.minimum([\n   *   Dinero({ amount: 50 }),\n   *   Dinero({ amount: 100 })\n   * ])\n   *\n   * @return {Dinero[]}\n   */\n  minimum: function minimum(objects) {\n    var _objects = _toArray(objects),\n        firstObject = _objects[0],\n        tailObjects = _objects.slice(1);\n\n    var currentMinimum = firstObject;\n    tailObjects.forEach(function (obj) {\n      currentMinimum = currentMinimum.lessThan(obj) ? currentMinimum : obj;\n    });\n    return currentMinimum;\n  },\n\n  /**\n   * Returns the biggest Dinero object from an array of Dinero objects\n   *\n   * @memberof module:Dinero\n   * @method\n   *\n   * @param {Dinero[]} objects - An array of Dinero objects\n   *\n   * @example\n   * // returns the biggest Dinero object with amount of 20, from an array of Dinero objects with different precisions\n   * Dinero.maximum([\n   *   Dinero({ amount: 20, precision: 2 }),\n   *   Dinero({ amount: 150, precision: 3 })\n   * ])\n   * @example\n   * // returns the biggest Dinero object with amount of 100, from an array of Dinero objects\n   * Dinero.maximum([\n   *   Dinero({ amount: 100 }),\n   *   Dinero({ amount: 50 })\n   * ])\n   *\n   * @return {Dinero[]}\n   */\n  maximum: function maximum(objects) {\n    var _objects2 = _toArray(objects),\n        firstObject = _objects2[0],\n        tailObjects = _objects2.slice(1);\n\n    var currentMaximum = firstObject;\n    tailObjects.forEach(function (obj) {\n      currentMaximum = currentMaximum.greaterThan(obj) ? currentMaximum : obj;\n    });\n    return currentMaximum;\n  }\n};\n\n/**\n * Returns whether a value is numeric.\n * @ignore\n *\n * @param  {} value - The value to test.\n *\n * @return {Boolean}\n */\nfunction isNumeric(value) {\n  return !isNaN(parseInt(value)) && isFinite(value);\n}\n/**\n * Returns whether a value is a percentage.\n * @ignore\n *\n * @param  {}  percentage - The percentage to test.\n *\n * @return {Boolean}\n */\n\nfunction isPercentage(percentage) {\n  return isNumeric(percentage) && percentage <= 100 && percentage >= 0;\n}\n/**\n * Returns whether an array of ratios is valid.\n * @ignore\n *\n * @param  {}  ratios - The ratios to test.\n *\n * @return {Boolean}\n */\n\nfunction areValidRatios(ratios) {\n  return ratios.length > 0 && ratios.every(function (ratio) {\n    return ratio >= 0;\n  }) && ratios.some(function (ratio) {\n    return ratio > 0;\n  });\n}\n/**\n * Returns whether a value is even.\n * @ignore\n *\n * @param  {Number} value - The value to test.\n *\n * @return {Boolean}\n */\n\nfunction isEven(value) {\n  return value % 2 === 0;\n}\n/**\n * Returns whether a value is a float.\n * @ignore\n *\n * @param  {}  value - The value to test.\n *\n * @return {Boolean}\n */\n\nfunction isFloat(value) {\n  return isNumeric(value) && !Number.isInteger(value);\n}\n/**\n * Returns how many fraction digits a number has.\n * @ignore\n *\n * @param  {Number} [number=0] - The number to test.\n *\n * @return {Number}\n */\n\nfunction countFractionDigits() {\n  var number = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var stringRepresentation = number.toString();\n\n  if (stringRepresentation.indexOf('e-') > 0) {\n    // It's too small for a normal string representation, e.g. 1e-7 instead of 0.00000001\n    return parseInt(stringRepresentation.split('e-')[1]);\n  } else {\n    var fractionDigits = stringRepresentation.split('.')[1];\n    return fractionDigits ? fractionDigits.length : 0;\n  }\n}\n/**\n * Returns whether a number is half.\n * @ignore\n *\n * @param {Number} number - The number to test.\n *\n * @return {Number}\n */\n\nfunction isHalf(number) {\n  return Math.abs(number) % 1 === 0.5;\n}\n/**\n * Fetches a JSON resource.\n * @ignore\n *\n * @param  {String} url - The resource to fetch.\n * @param  {Object} [options.headers] - The headers to pass.\n *\n * @throws {Error} If `request.status` is lesser than 200 or greater or equal to 400.\n * @throws {Error} If network fails.\n *\n * @return {JSON}\n */\n\nfunction getJSON(url) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return new Promise(function (resolve, reject) {\n    var request = Object.assign(new XMLHttpRequest(), {\n      onreadystatechange: function onreadystatechange() {\n        if (request.readyState === 4) {\n          if (request.status >= 200 && request.status < 400) resolve(JSON.parse(request.responseText));else reject(new Error(request.statusText));\n        }\n      },\n      onerror: function onerror() {\n        reject(new Error('Network error'));\n      }\n    });\n    request.open('GET', url, true);\n    setXHRHeaders(request, options.headers);\n    request.send();\n  });\n}\n/**\n * Returns an XHR object with attached headers.\n * @ignore\n *\n * @param {XMLHttpRequest} xhr - The XHR request to set headers to.\n * @param {Object} headers - The headers to set.\n *\n * @return {XMLHttpRequest}\n */\n\nfunction setXHRHeaders(xhr) {\n  var headers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  for (var header in headers) {\n    xhr.setRequestHeader(header, headers[header]);\n  }\n\n  return xhr;\n}\n/**\n * Returns whether a value is undefined.\n * @ignore\n *\n * @param {} value - The value to test.\n *\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n/**\n * Returns an object flattened to one level deep.\n * @ignore\n *\n * @param {Object} object - The object to flatten.\n * @param {String} separator - The separator to use between flattened nodes.\n *\n * @return {Object}\n */\n\nfunction flattenObject(object) {\n  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n  var finalObject = {};\n  Object.entries(object).forEach(function (item) {\n    if (_typeof(item[1]) === 'object') {\n      var flatObject = flattenObject(item[1]);\n      Object.entries(flatObject).forEach(function (node) {\n        finalObject[item[0] + separator + node[0]] = node[1];\n      });\n    } else {\n      finalObject[item[0]] = item[1];\n    }\n  });\n  return finalObject;\n}\n/**\n * Returns whether a value is thenable.\n * @ignore\n *\n * @param {} value - The value to test.\n *\n * @return {Boolean}\n */\n\nfunction isThenable(value) {\n  return Boolean(value) && (_typeof(value) === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\n\nfunction Calculator() {\n  var floatMultiply = function floatMultiply(a, b) {\n    var getFactor = function getFactor(number) {\n      return Math.pow(10, countFractionDigits(number));\n    };\n\n    var factor = Math.max(getFactor(a), getFactor(b));\n    return Math.round(a * factor) * Math.round(b * factor) / (factor * factor);\n  };\n\n  var roundingModes = {\n    HALF_ODD: function HALF_ODD(number) {\n      var rounded = Math.round(number);\n      return isHalf(number) ? isEven(rounded) ? rounded - 1 : rounded : rounded;\n    },\n    HALF_EVEN: function HALF_EVEN(number) {\n      var rounded = Math.round(number);\n      return isHalf(number) ? isEven(rounded) ? rounded : rounded - 1 : rounded;\n    },\n    HALF_UP: function HALF_UP(number) {\n      return Math.round(number);\n    },\n    HALF_DOWN: function HALF_DOWN(number) {\n      return isHalf(number) ? Math.floor(number) : Math.round(number);\n    },\n    HALF_TOWARDS_ZERO: function HALF_TOWARDS_ZERO(number) {\n      return isHalf(number) ? Math.sign(number) * Math.floor(Math.abs(number)) : Math.round(number);\n    },\n    HALF_AWAY_FROM_ZERO: function HALF_AWAY_FROM_ZERO(number) {\n      return isHalf(number) ? Math.sign(number) * Math.ceil(Math.abs(number)) : Math.round(number);\n    },\n    DOWN: function DOWN(number) {\n      return Math.floor(number);\n    }\n  };\n  return {\n    /**\n     * Returns the sum of two numbers.\n     * @ignore\n     *\n     * @param {Number} a - The first number to add.\n     * @param {Number} b - The second number to add.\n     *\n     * @return {Number}\n     */\n    add: function add(a, b) {\n      return a + b;\n    },\n\n    /**\n     * Returns the difference of two numbers.\n     * @ignore\n     *\n     * @param {Number} a - The first number to subtract.\n     * @param {Number} b - The second number to subtract.\n     *\n     * @return {Number}\n     */\n    subtract: function subtract(a, b) {\n      return a - b;\n    },\n\n    /**\n     * Returns the product of two numbers.\n     * @ignore\n     *\n     * @param {Number} a - The first number to multiply.\n     * @param {Number} b - The second number to multiply.\n     *\n     * @return {Number}\n     */\n    multiply: function multiply(a, b) {\n      return isFloat(a) || isFloat(b) ? floatMultiply(a, b) : a * b;\n    },\n\n    /**\n     * Returns the quotient of two numbers.\n     * @ignore\n     *\n     * @param {Number} a - The first number to divide.\n     * @param {Number} b - The second number to divide.\n     *\n     * @return {Number}\n     */\n    divide: function divide(a, b) {\n      return a / b;\n    },\n\n    /**\n     * Returns the remainder of two numbers.\n     * @ignore\n     *\n     * @param  {Number} a - The first number to divide.\n     * @param  {Number} b - The second number to divide.\n     *\n     * @return {Number}\n     */\n    modulo: function modulo(a, b) {\n      return a % b;\n    },\n\n    /**\n     * Returns a rounded number based off a specific rounding mode.\n     * @ignore\n     *\n     * @param {Number} number - The number to round.\n     * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use.\n     *\n     * @returns {Number}\n     */\n    round: function round(number) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'HALF_EVEN';\n      return roundingModes[roundingMode](number);\n    }\n  };\n}\n\nvar calculator = Calculator();\nfunction Format(format) {\n  var matches = /^(?:(\\$|USD)?0(?:(,)0)?(\\.)?(0+)?|0(?:(,)0)?(\\.)?(0+)?\\s?(dollar)?)$/gm.exec(format);\n  return {\n    /**\n     * Returns the matches.\n     * @ignore\n     *\n     * @return {Array}\n     */\n    getMatches: function getMatches() {\n      return matches !== null ? matches.slice(1).filter(function (match) {\n        return !isUndefined(match);\n      }) : [];\n    },\n\n    /**\n     * Returns the amount of fraction digits to display.\n     * @ignore\n     *\n     * @return {Number}\n     */\n    getMinimumFractionDigits: function getMinimumFractionDigits() {\n      var decimalPosition = function decimalPosition(match) {\n        return match === '.';\n      };\n\n      return !isUndefined(this.getMatches().find(decimalPosition)) ? this.getMatches()[calculator.add(this.getMatches().findIndex(decimalPosition), 1)].split('').length : 0;\n    },\n\n    /**\n     * Returns the currency display mode.\n     * @ignore\n     *\n     * @return {String}\n     */\n    getCurrencyDisplay: function getCurrencyDisplay() {\n      var modes = {\n        USD: 'code',\n        dollar: 'name',\n        $: 'symbol'\n      };\n      return modes[this.getMatches().find(function (match) {\n        return match === 'USD' || match === 'dollar' || match === '$';\n      })];\n    },\n\n    /**\n     * Returns the formatting style.\n     * @ignore\n     *\n     * @return {String}\n     */\n    getStyle: function getStyle() {\n      return !isUndefined(this.getCurrencyDisplay(this.getMatches())) ? 'currency' : 'decimal';\n    },\n\n    /**\n     * Returns whether grouping should be used or not.\n     * @ignore\n     *\n     * @return {Boolean}\n     */\n    getUseGrouping: function getUseGrouping() {\n      return !isUndefined(this.getMatches().find(function (match) {\n        return match === ',';\n      }));\n    }\n  };\n}\n\nfunction CurrencyConverter(options) {\n  /* istanbul ignore next */\n  var mergeTags = function mergeTags() {\n    var string = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var tags = arguments.length > 1 ? arguments[1] : undefined;\n\n    for (var tag in tags) {\n      string = string.replace(\"{{\".concat(tag, \"}}\"), tags[tag]);\n    }\n\n    return string;\n  };\n  /* istanbul ignore next */\n\n\n  var getRatesFromRestApi = function getRatesFromRestApi(from, to) {\n    return getJSON(mergeTags(options.endpoint, {\n      from: from,\n      to: to\n    }), {\n      headers: options.headers\n    });\n  };\n\n  return {\n    /**\n     * Returns the exchange rate.\n     * @ignore\n     *\n     * @param  {String} from - The base currency.\n     * @param  {String} to   - The destination currency.\n     *\n     * @return {Promise}\n     */\n    getExchangeRate: function getExchangeRate(from, to) {\n      return (isThenable(options.endpoint) ? options.endpoint : getRatesFromRestApi(from, to)).then(function (data) {\n        return flattenObject(data)[mergeTags(options.propertyPath, {\n          from: from,\n          to: to\n        })];\n      });\n    }\n  };\n}\n\n/**\n * Performs an assertion.\n * @ignore\n *\n * @param  {Boolean} condition - The expression to assert.\n * @param  {String}  errorMessage - The message to throw if the assertion fails\n * @param  {ErrorConstructor}   [ErrorType=Error] - The error to throw if the assertion fails.\n *\n * @throws {Error} If `condition` returns `false`.\n */\n\nfunction assert(condition, errorMessage) {\n  var ErrorType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Error;\n  if (!condition) throw new ErrorType(errorMessage);\n}\n/**\n * Asserts a value is a percentage.\n * @ignore\n *\n * @param  {}  percentage - The percentage to test.\n *\n * @throws {RangeError} If `percentage` is out of range.\n */\n\nfunction assertPercentage(percentage) {\n  assert(isPercentage(percentage), 'You must provide a numeric value between 0 and 100.', RangeError);\n}\n/**\n * Asserts an array of ratios is valid.\n * @ignore\n *\n * @param  {}  ratios - The ratios to test.\n *\n * @throws {TypeError} If `ratios` are invalid.\n */\n\nfunction assertValidRatios(ratios) {\n  assert(areValidRatios(ratios), 'You must provide a non-empty array of numeric values greater than 0.', TypeError);\n}\n/**\n * Asserts a value is an integer.\n * @ignore\n *\n * @param  {}  number - The value to test.\n *\n * @throws {TypeError}\n */\n\nfunction assertInteger(number) {\n  assert(Number.isInteger(number), 'You must provide an integer.', TypeError);\n}\n\nvar calculator$1 = Calculator();\n/**\n * A Dinero object is an immutable data structure representing a specific monetary value.\n * It comes with methods for creating, parsing, manipulating, testing, transforming and formatting them.\n *\n * A Dinero object has:\n *\n * * An `amount`, expressed in minor currency units, as an integer.\n * * A `currency`, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}.\n * * A `precision`, expressed as an integer, to represent the number of decimal places in the `amount`.\n *   This is helpful when you want to represent fractional minor currency units (e.g.: $10.4545).\n *   You can also use it to represent a currency with a different [exponent](https://en.wikipedia.org/wiki/ISO_4217#Treatment_of_minor_currency_units_.28the_.22exponent.22.29) than `2` (e.g.: Iraqi dinar with 1000 fils in 1 dinar (exponent of `3`), Japanese yen with no sub-units (exponent of `0`)).\n * * An optional `locale` property that affects how output strings are formatted.\n *\n * Here's an overview of the public API:\n *\n * * **Access:** {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~getCurrency getCurrency}, {@link module:Dinero~getLocale getLocale} and {@link module:Dinero~getPrecision getPrecision}.\n * * **Manipulation:** {@link module:Dinero~add add}, {@link module:Dinero~subtract subtract}, {@link module:Dinero~multiply multiply}, {@link module:Dinero~divide divide}, {@link module:Dinero~percentage percentage}, {@link module:Dinero~allocate allocate} and {@link module:Dinero~convert convert}.\n * * **Testing:** {@link module:Dinero~equalsTo equalsTo}, {@link module:Dinero~lessThan lessThan}, {@link module:Dinero~lessThanOrEqual lessThanOrEqual}, {@link module:Dinero~greaterThan greaterThan}, {@link module:Dinero~greaterThanOrEqual greaterThanOrEqual}, {@link module:Dinero~isZero isZero}, {@link module:Dinero~isPositive isPositive}, {@link module:Dinero~isNegative isNegative}, {@link module:Dinero~hasSubUnits hasSubUnits}, {@link module:Dinero~hasSameCurrency hasSameCurrency} and {@link module:Dinero~hasSameAmount hasSameAmount}.\n * * **Configuration:** {@link module:Dinero~setLocale setLocale}.\n * * **Conversion & formatting:** {@link module:Dinero~toFormat toFormat}, {@link module:Dinero~toUnit toUnit}, {@link module:Dinero~toRoundedUnit toRoundedUnit}, {@link module:Dinero~toObject toObject}, {@link module:Dinero~toJSON toJSON}, {@link module:Dinero~convertPrecision convertPrecision} and {@link module:Dinero.normalizePrecision normalizePrecision}.\n *\n * Dinero.js uses `number`s under the hood, so it's constrained by the [double-precision floating-point format](https://en.wikipedia.org/wiki/Double-precision_floating-point_format). Using values over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) will yield unpredictable results.\n * Same goes with performing calculations: once the internal `amount` value exceeds those limits, precision is no longer guaranteed.\n *\n * @module Dinero\n * @param  {Number} [options.amount=0] - The amount in minor currency units (as an integer).\n * @param  {String} [options.currency='USD'] - An ISO 4217 currency code.\n * @param  {String} [options.precision=2] - The number of decimal places to represent.\n *\n * @throws {TypeError} If `amount` or `precision` is invalid. Integers over [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER) or below [`Number.MIN_SAFE_INTEGER`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER) are considered valid, even though they can lead to imprecise amounts.\n *\n * @return {Object}\n */\n\nvar Dinero = function Dinero(options) {\n  var _Object$assign = Object.assign({}, {\n    amount: Dinero.defaultAmount,\n    currency: Dinero.defaultCurrency,\n    precision: Dinero.defaultPrecision\n  }, options),\n      amount = _Object$assign.amount,\n      currency = _Object$assign.currency,\n      precision = _Object$assign.precision;\n\n  assertInteger(amount);\n  assertInteger(precision);\n  var globalLocale = Dinero.globalLocale,\n      globalFormat = Dinero.globalFormat,\n      globalRoundingMode = Dinero.globalRoundingMode,\n      globalFormatRoundingMode = Dinero.globalFormatRoundingMode;\n  var globalExchangeRatesApi = Object.assign({}, Dinero.globalExchangeRatesApi);\n  /**\n   * Uses ES5 function notation so `this` can be passed through call, apply and bind\n   * @ignore\n   */\n\n  var create = function create(options) {\n    var obj = Object.assign({}, Object.assign({}, {\n      amount: amount,\n      currency: currency,\n      precision: precision\n    }, options), Object.assign({}, {\n      locale: this.locale\n    }, options));\n    return Object.assign(Dinero({\n      amount: obj.amount,\n      currency: obj.currency,\n      precision: obj.precision\n    }), {\n      locale: obj.locale\n    });\n  };\n  /**\n   * Uses ES5 function notation so `this` can be passed through call, apply and bind\n   * @ignore\n   */\n\n\n  var assertSameCurrency = function assertSameCurrency(comparator) {\n    assert(this.hasSameCurrency(comparator), 'You must provide a Dinero instance with the same currency.', TypeError);\n  };\n\n  return {\n    /**\n     * Returns the amount.\n     *\n     * @example\n     * // returns 500\n     * Dinero({ amount: 500 }).getAmount()\n     *\n     * @return {Number}\n     */\n    getAmount: function getAmount() {\n      return amount;\n    },\n\n    /**\n     * Returns the currency.\n     *\n     * @example\n     * // returns 'EUR'\n     * Dinero({ currency: 'EUR' }).getCurrency()\n     *\n     * @return {String}\n     */\n    getCurrency: function getCurrency() {\n      return currency;\n    },\n\n    /**\n     * Returns the locale.\n     *\n     * @example\n     * // returns 'fr-FR'\n     * Dinero().setLocale('fr-FR').getLocale()\n     *\n     * @return {String}\n     */\n    getLocale: function getLocale() {\n      return this.locale || globalLocale;\n    },\n\n    /**\n     * Returns a new Dinero object with an embedded locale.\n     *\n     * @param {String} newLocale - The new locale as an {@link http://tools.ietf.org/html/rfc5646 BCP 47 language tag}.\n     *\n     * @example\n     * // Returns a Dinero object with locale 'ja-JP'\n     * Dinero().setLocale('ja-JP')\n     *\n     * @return {Dinero}\n     */\n    setLocale: function setLocale(newLocale) {\n      return create.call(this, {\n        locale: newLocale\n      });\n    },\n\n    /**\n     * Returns the precision.\n     *\n     * @example\n     * // returns 3\n     * Dinero({ precision: 3 }).getPrecision()\n     *\n     * @return {Number}\n     */\n    getPrecision: function getPrecision() {\n      return precision;\n    },\n\n    /**\n     * Returns a new Dinero object with a new precision and a converted amount.\n     *\n     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).\n     * This can be necessary when you need to convert objects to a smaller precision.\n     *\n     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent conversions for safer results.\n     * You can also specify a different `roundingMode` to better fit your needs.\n     *\n     * @param {Number} newPrecision - The new precision.\n     * @param {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // Returns a Dinero object with precision 3 and amount 1000\n     * Dinero({ amount: 100, precision: 2 }).convertPrecision(3)\n     *\n     * @throws {TypeError} If `newPrecision` is invalid.\n     *\n     * @return {Dinero}\n     */\n    convertPrecision: function convertPrecision(newPrecision) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;\n      assertInteger(newPrecision);\n      var precision = this.getPrecision();\n      var isNewPrecisionLarger = newPrecision > precision;\n      var operation = isNewPrecisionLarger ? calculator$1.multiply : calculator$1.divide;\n      var terms = isNewPrecisionLarger ? [newPrecision, precision] : [precision, newPrecision];\n      var factor = Math.pow(10, calculator$1.subtract.apply(calculator$1, terms));\n      return create.call(this, {\n        amount: calculator$1.round(operation(this.getAmount(), factor), roundingMode),\n        precision: newPrecision\n      });\n    },\n\n    /**\n     * Returns a new Dinero object that represents the sum of this and an other Dinero object.\n     *\n     * If Dinero objects have a different `precision`, they will be first converted to the highest.\n     *\n     * @param {Dinero} addend - The Dinero object to add.\n     *\n     * @example\n     * // returns a Dinero object with amount 600\n     * Dinero({ amount: 400 }).add(Dinero({ amount: 200 }))\n     * @example\n     * // returns a Dinero object with amount 144545 and precision 4\n     * Dinero({ amount: 400 }).add(Dinero({ amount: 104545, precision: 4 }))\n     *\n     * @throws {TypeError} If `addend` has a different currency.\n     *\n     * @return {Dinero}\n     */\n    add: function add(addend) {\n      assertSameCurrency.call(this, addend);\n      var addends = Dinero.normalizePrecision([this, addend]);\n      return create.call(this, {\n        amount: calculator$1.add(addends[0].getAmount(), addends[1].getAmount()),\n        precision: addends[0].getPrecision()\n      });\n    },\n\n    /**\n     * Returns a new Dinero object that represents the difference of this and an other Dinero object.\n     *\n     * If Dinero objects have a different `precision`, they will be first converted to the highest.\n     *\n     * @param  {Dinero} subtrahend - The Dinero object to subtract.\n     *\n     * @example\n     * // returns a Dinero object with amount 200\n     * Dinero({ amount: 400 }).subtract(Dinero({ amount: 200 }))\n     * @example\n     * // returns a Dinero object with amount 64545 and precision 4\n     * Dinero({ amount: 104545, precision: 4 }).subtract(Dinero({ amount: 400 }))\n     *\n     * @throws {TypeError} If `subtrahend` has a different currency.\n     *\n     * @return {Dinero}\n     */\n    subtract: function subtract(subtrahend) {\n      assertSameCurrency.call(this, subtrahend);\n      var subtrahends = Dinero.normalizePrecision([this, subtrahend]);\n      return create.call(this, {\n        amount: calculator$1.subtract(subtrahends[0].getAmount(), subtrahends[1].getAmount()),\n        precision: subtrahends[0].getPrecision()\n      });\n    },\n\n    /**\n     * Returns a new Dinero object that represents the multiplied value by the given factor.\n     *\n     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).\n     *\n     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results.\n     * You can also specify a different `roundingMode` to better fit your needs.\n     *\n     * @param  {Number} multiplier - The factor to multiply by.\n     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // returns a Dinero object with amount 1600\n     * Dinero({ amount: 400 }).multiply(4)\n     * @example\n     * // returns a Dinero object with amount 800\n     * Dinero({ amount: 400 }).multiply(2.001)\n     * @example\n     * // returns a Dinero object with amount 801\n     * Dinero({ amount: 400 }).multiply(2.00125, 'HALF_UP')\n     *\n     * @return {Dinero}\n     */\n    multiply: function multiply(multiplier) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;\n      return create.call(this, {\n        amount: calculator$1.round(calculator$1.multiply(this.getAmount(), multiplier), roundingMode)\n      });\n    },\n\n    /**\n     * Returns a new Dinero object that represents the divided value by the given factor.\n     *\n     * By default, fractional minor currency units are rounded using the **half to even** rule ([banker's rounding](http://wiki.c2.com/?BankersRounding)).\n     *\n     * Rounding *can* lead to accuracy issues as you chain many times. Consider a minimal amount of subsequent calculations for safer results.\n     * You can also specify a different `roundingMode` to better fit your needs.\n     *\n     * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead.\n     *\n     * @param  {Number} divisor - The factor to divide by.\n     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // returns a Dinero object with amount 100\n     * Dinero({ amount: 400 }).divide(4)\n     * @example\n     * // returns a Dinero object with amount 52\n     * Dinero({ amount: 105 }).divide(2)\n     * @example\n     * // returns a Dinero object with amount 53\n     * Dinero({ amount: 105 }).divide(2, 'HALF_UP')\n     *\n     * @return {Dinero}\n     */\n    divide: function divide(divisor) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;\n      return create.call(this, {\n        amount: calculator$1.round(calculator$1.divide(this.getAmount(), divisor), roundingMode)\n      });\n    },\n\n    /**\n     * Returns a new Dinero object that represents a percentage of this.\n     *\n     * As rounding is applied, precision may be lost in the process. If you want to accurately split a Dinero object, use {@link module:Dinero~allocate allocate} instead.\n     *\n     * @param  {Number} percentage - The percentage to extract (between 0 and 100).\n     * @param  {String} [roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // returns a Dinero object with amount 5000\n     * Dinero({ amount: 10000 }).percentage(50)\n     * @example\n     * // returns a Dinero object with amount 29\n     * Dinero({ amount: 57 }).percentage(50, \"HALF_ODD\")\n     *\n     * @throws {RangeError} If `percentage` is out of range.\n     *\n     * @return {Dinero}\n     */\n    percentage: function percentage(_percentage) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalRoundingMode;\n      assertPercentage(_percentage);\n      return this.multiply(calculator$1.divide(_percentage, 100), roundingMode);\n    },\n\n    /**\n     * Allocates the amount of a Dinero object according to a list of ratios.\n     *\n     * Sometimes you need to split monetary values but percentages can't cut it without adding or losing pennies.\n     * A good example is invoicing: let's say you need to bill $1,000.03 and you want a 50% downpayment.\n     * If you use {@link module:Dinero~percentage percentage}, you'll get an accurate Dinero object but the amount won't be billable: you can't split a penny.\n     * If you round it, you'll bill a penny extra.\n     * With {@link module:Dinero~allocate allocate}, you can split a monetary amount then distribute the remainder as evenly as possible.\n     *\n     * You can use percentage style or ratio style for `ratios`: `[25, 75]` and `[1, 3]` will do the same thing.\n     *\n     * Since v1.8.0, you can use zero ratios (such as [0, 50, 50]). If there's a remainder to distribute, zero ratios are skipped and return a Dinero object with amount zero.\n     *\n     * @param  {Number[]} ratios - The ratios to allocate the money to.\n     *\n     * @example\n     * // returns an array of two Dinero objects\n     * // the first one with an amount of 502\n     * // the second one with an amount of 501\n     * Dinero({ amount: 1003 }).allocate([50, 50])\n     * @example\n     * // returns an array of two Dinero objects\n     * // the first one with an amount of 25\n     * // the second one with an amount of 75\n     * Dinero({ amount: 100 }).allocate([1, 3])\n     * @example\n     * // since version 1.8.0\n     * // returns an array of three Dinero objects\n     * // the first one with an amount of 0\n     * // the second one with an amount of 502\n     * // the third one with an amount of 501\n     * Dinero({ amount: 1003 }).allocate([0, 50, 50])\n     *\n     * @throws {TypeError} If ratios are invalid.\n     *\n     * @return {Dinero[]}\n     */\n    allocate: function allocate(ratios) {\n      var _this = this;\n\n      assertValidRatios(ratios);\n      var total = ratios.reduce(function (a, b) {\n        return calculator$1.add(a, b);\n      });\n      var remainder = this.getAmount();\n      var shares = ratios.map(function (ratio) {\n        var share = Math.floor(calculator$1.divide(calculator$1.multiply(_this.getAmount(), ratio), total));\n        remainder = calculator$1.subtract(remainder, share);\n        return create.call(_this, {\n          amount: share\n        });\n      });\n      var i = 0;\n\n      while (remainder > 0) {\n        if (ratios[i] > 0) {\n          shares[i] = shares[i].add(create.call(this, {\n            amount: 1\n          }));\n          remainder = calculator$1.subtract(remainder, 1);\n        }\n\n        i += 1;\n      }\n\n      return shares;\n    },\n\n    /**\n     * Returns a Promise containing a new Dinero object converted to another currency.\n     *\n     * You have two options to provide the exchange rates:\n     *\n     * 1. **Use an exchange rate REST API, and let Dinero handle the fetching and conversion.**\n     *   This is a simple option if you have access to an exchange rate REST API and want Dinero to do the rest.\n     * 2. **Fetch the exchange rates on your own and provide them directly.**\n     *   This is useful if you're fetching your rates from somewhere else (a file, a database), use a different protocol or query language than REST (SOAP, GraphQL) or want to fetch rates once and cache them instead of making new requests every time.\n     *\n     * **If you want to use a REST API**, you must provide a third-party endpoint yourself. Dinero doesn't come bundled with an exchange rates endpoint.\n     *\n     * Here are some exchange rate APIs you can use:\n     *\n     * * [Fixer](https://fixer.io)\n     * * [Open Exchange Rates](https://openexchangerates.org)\n     * * [Coinbase](https://api.coinbase.com/v2/exchange-rates)\n     * * More [foreign](https://github.com/toddmotto/public-apis#currency-exchange) and [crypto](https://github.com/toddmotto/public-apis#cryptocurrency) exchange rate APIs.\n     *\n     * **If you want to fetch your own rates and provide them directly**, you need to pass a promise that resolves to the exchanges rates.\n     *\n     * In both cases, you need to specify at least:\n     *\n     * * a **destination currency**: the currency in which you want to convert your Dinero object. You can specify it with `currency`.\n     * * an **endpoint**: the API URL to query exchange rates, with parameters, or a promise that resolves to the exchange rates. You can specify it with `options.endpoint`.\n     * * a **property path**: the path to access the wanted rate in your API's JSON response (or the custom promise's payload). For example, with a response of:\n     * ```json\n     * {\n     *     \"data\": {\n     *       \"base\": \"USD\",\n     *       \"destination\": \"EUR\",\n     *       \"rate\": \"0.827728919\"\n     *     }\n     * }\n     * ```\n     * Then the property path is `'data.rate'`. You can specify it with `options.propertyPath`.\n     *\n     * The base currency (the one of your Dinero object) and the destination currency can be used as \"merge tags\" with the mustache syntax, respectively `{{from}}` and `{{to}}`.\n     * You can use these tags to refer to these values in `options.endpoint` and `options.propertyPath`.\n     *\n     * For example, if you need to specify the base currency as a query parameter, you can do the following:\n     *\n     * ```js\n     * {\n     *   endpoint: 'https://yourexchangerates.api/latest?base={{from}}'\n     * }\n     * ```\n     *\n     * @param  {String} currency - The destination currency, expressed as an {@link https://en.wikipedia.org/wiki/ISO_4217#Active_codes ISO 4217 currency code}.\n     * @param  {(String|Promise)} options.endpoint - The API endpoint to retrieve exchange rates. You can substitute this with a promise that resolves to the exchanges rates if you already have them.\n     * @param  {String} [options.propertyPath='rates.{{to}}'] - The property path to the rate.\n     * @param  {Object} [options.headers] - The HTTP headers to provide, if needed.\n     * @param  {String} [options.roundingMode='HALF_EVEN'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // your global API parameters\n     * Dinero.globalExchangeRatesApi = { ... }\n     *\n     * // returns a Promise containing a Dinero object with the destination currency\n     * // and the initial amount converted to the new currency.\n     * Dinero({ amount: 500 }).convert('EUR')\n     * @example\n     * // returns a Promise containing a Dinero object,\n     * // with specific API parameters and rounding mode for this specific instance.\n     * Dinero({ amount: 500 })\n     *   .convert('XBT', {\n     *     endpoint: 'https://yourexchangerates.api/latest?base={{from}}',\n     *     propertyPath: 'data.rates.{{to}}',\n     *     headers: {\n     *       'user-key': 'xxxxxxxxx'\n     *     },\n     *     roundingMode: 'HALF_UP'\n     *   })\n     * @example\n     * // usage with exchange rates provided as a custom promise\n     * // using the default `propertyPath` format (so it doesn't have to be specified)\n     * const rates = {\n     *   rates: {\n     *     EUR: 0.81162\n     *   }\n     * }\n     *\n     * Dinero({ amount: 500 })\n     *   .convert('EUR', {\n     *     endpoint: new Promise(resolve => resolve(rates))\n     *   })\n     * @example\n     * // usage with Promise.prototype.then and Promise.prototype.catch\n     * Dinero({ amount: 500 })\n     *   .convert('EUR')\n     *   .then(dinero => {\n     *     dinero.getCurrency() // returns 'EUR'\n     *   })\n     *   .catch(err => {\n     *     // handle errors\n     *   })\n     * @example\n     * // usage with async/await\n     * (async () => {\n     *   const price = await Dinero({ amount: 500 }).convert('EUR')\n     *   price.getCurrency() // returns 'EUR'\n     * })()\n     *\n     * @return {Promise}\n     */\n    convert: function convert(currency) {\n      var _this2 = this;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          _ref$endpoint = _ref.endpoint,\n          endpoint = _ref$endpoint === void 0 ? globalExchangeRatesApi.endpoint : _ref$endpoint,\n          _ref$propertyPath = _ref.propertyPath,\n          propertyPath = _ref$propertyPath === void 0 ? globalExchangeRatesApi.propertyPath || 'rates.{{to}}' : _ref$propertyPath,\n          _ref$headers = _ref.headers,\n          headers = _ref$headers === void 0 ? globalExchangeRatesApi.headers : _ref$headers,\n          _ref$roundingMode = _ref.roundingMode,\n          roundingMode = _ref$roundingMode === void 0 ? globalRoundingMode : _ref$roundingMode;\n\n      var options = Object.assign({}, {\n        endpoint: endpoint,\n        propertyPath: propertyPath,\n        headers: headers,\n        roundingMode: roundingMode\n      });\n      return CurrencyConverter(options).getExchangeRate(this.getCurrency(), currency).then(function (rate) {\n        assert(!isUndefined(rate), \"No rate was found for the destination currency \\\"\".concat(currency, \"\\\".\"), TypeError);\n        return create.call(_this2, {\n          amount: calculator$1.round(calculator$1.multiply(_this2.getAmount(), parseFloat(rate)), options.roundingMode),\n          currency: currency\n        });\n      });\n    },\n\n    /**\n     * Checks whether the value represented by this object equals to the other.\n     *\n     * @param  {Dinero} comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 500, currency: 'EUR' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 500, currency: 'EUR' }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 500, currency: 'USD' }).equalsTo(Dinero({ amount: 800, currency: 'EUR' }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).equalsTo(Dinero({ amount: 10000, currency: 'EUR', precision: 3 }))\n     *\n     * @return {Boolean}\n     */\n    equalsTo: function equalsTo(comparator) {\n      return this.hasSameAmount(comparator) && this.hasSameCurrency(comparator);\n    },\n\n    /**\n     * Checks whether the value represented by this object is less than the other.\n     *\n     * @param  {Dinero} comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).lessThan(Dinero({ amount: 800 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 500 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 5000, precision: 3 }).lessThan(Dinero({ amount: 800 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 800 }).lessThan(Dinero({ amount: 5000, precision: 3 }))\n     *\n     * @throws {TypeError} If `comparator` has a different currency.\n     *\n     * @return {Boolean}\n     */\n    lessThan: function lessThan(comparator) {\n      assertSameCurrency.call(this, comparator);\n      var comparators = Dinero.normalizePrecision([this, comparator]);\n      return comparators[0].getAmount() < comparators[1].getAmount();\n    },\n\n    /**\n     * Checks whether the value represented by this object is less than or equal to the other.\n     *\n     * @param  {Dinero} comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 800 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 500 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 500 }).lessThanOrEqual(Dinero({ amount: 300 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 800 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 5000, precision: 3 }).lessThanOrEqual(Dinero({ amount: 500 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 800 }).lessThanOrEqual(Dinero({ amount: 5000, precision: 3 }))\n     *\n     * @throws {TypeError} If `comparator` has a different currency.\n     *\n     * @return {Boolean}\n     */\n    lessThanOrEqual: function lessThanOrEqual(comparator) {\n      assertSameCurrency.call(this, comparator);\n      var comparators = Dinero.normalizePrecision([this, comparator]);\n      return comparators[0].getAmount() <= comparators[1].getAmount();\n    },\n\n    /**\n     * Checks whether the value represented by this object is greater than the other.\n     *\n     * @param  {Dinero} comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns false\n     * Dinero({ amount: 500 }).greaterThan(Dinero({ amount: 800 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 500 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 800 }).greaterThan(Dinero({ amount: 5000, precision: 3 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 5000, precision: 3 }).greaterThan(Dinero({ amount: 800 }))\n     *\n     * @throws {TypeError} If `comparator` has a different currency.\n     *\n     * @return {Boolean}\n     */\n    greaterThan: function greaterThan(comparator) {\n      assertSameCurrency.call(this, comparator);\n      var comparators = Dinero.normalizePrecision([this, comparator]);\n      return comparators[0].getAmount() > comparators[1].getAmount();\n    },\n\n    /**\n     * Checks whether the value represented by this object is greater than or equal to the other.\n     *\n     * @param  {Dinero} comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 300 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 500 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 800 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 800 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 500 }).greaterThanOrEqual(Dinero({ amount: 5000, precision: 3 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 5000, precision: 3 }).greaterThanOrEqual(Dinero({ amount: 800 }))\n     *\n     * @throws {TypeError} If `comparator` has a different currency.\n     *\n     * @return {Boolean}\n     */\n    greaterThanOrEqual: function greaterThanOrEqual(comparator) {\n      assertSameCurrency.call(this, comparator);\n      var comparators = Dinero.normalizePrecision([this, comparator]);\n      return comparators[0].getAmount() >= comparators[1].getAmount();\n    },\n\n    /**\n     * Checks if the value represented by this object is zero.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 0 }).isZero()\n     * @example\n     * // returns false\n     * Dinero({ amount: 100 }).isZero()\n     *\n     * @return {Boolean}\n     */\n    isZero: function isZero() {\n      return this.getAmount() === 0;\n    },\n\n    /**\n     * Checks if the value represented by this object is positive.\n     *\n     * @example\n     * // returns false\n     * Dinero({ amount: -10 }).isPositive()\n     * @example\n     * // returns true\n     * Dinero({ amount: 10 }).isPositive()\n     * @example\n     * // returns true\n     * Dinero({ amount: 0 }).isPositive()\n     *\n     * @return {Boolean}\n     */\n    isPositive: function isPositive() {\n      return this.getAmount() >= 0;\n    },\n\n    /**\n     * Checks if the value represented by this object is negative.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: -10 }).isNegative()\n     * @example\n     * // returns false\n     * Dinero({ amount: 10 }).isNegative()\n     * @example\n     * // returns false\n     * Dinero({ amount: 0 }).isNegative()\n     *\n     * @return {Boolean}\n     */\n    isNegative: function isNegative() {\n      return this.getAmount() < 0;\n    },\n\n    /**\n     * Checks if this has minor currency units.\n     * Deprecates {@link module:Dinero~hasCents hasCents}.\n     *\n     * @example\n     * // returns false\n     * Dinero({ amount: 1100 }).hasSubUnits()\n     * @example\n     * // returns true\n     * Dinero({ amount: 1150 }).hasSubUnits()\n     *\n     * @return {Boolean}\n     */\n    hasSubUnits: function hasSubUnits() {\n      return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0;\n    },\n\n    /**\n     * Checks if this has minor currency units.\n     *\n     * @deprecated since version 1.4.0, will be removed in 2.0.0\n     * Use {@link module:Dinero~hasSubUnits hasSubUnits} instead.\n     *\n     * @example\n     * // returns false\n     * Dinero({ amount: 1100 }).hasCents()\n     * @example\n     * // returns true\n     * Dinero({ amount: 1150 }).hasCents()\n     *\n     * @return {Boolean}\n     */\n    hasCents: function hasCents() {\n      return calculator$1.modulo(this.getAmount(), Math.pow(10, precision)) !== 0;\n    },\n\n    /**\n     * Checks whether the currency represented by this object equals to the other.\n     *\n     * @param  {Dinero}  comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 2000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'EUR' }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 1000, currency: 'EUR' }).hasSameCurrency(Dinero({ amount: 1000, currency: 'USD' }))\n     *\n     * @return {Boolean}\n     */\n    hasSameCurrency: function hasSameCurrency(comparator) {\n      return this.getCurrency() === comparator.getCurrency();\n    },\n\n    /**\n     * Checks whether the amount represented by this object equals to the other.\n     *\n     * @param  {Dinero}  comparator - The Dinero object to compare to.\n     *\n     * @example\n     * // returns true\n     * Dinero({ amount: 1000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 2000, currency: 'EUR' }).hasSameAmount(Dinero({ amount: 1000, currency: 'EUR' }))\n     * @example\n     * // returns true\n     * Dinero({ amount: 1000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 }))\n     * @example\n     * // returns false\n     * Dinero({ amount: 10000, currency: 'EUR', precision: 2 }).hasSameAmount(Dinero({ amount: 10000, precision: 3 }))\n     *\n     * @return {Boolean}\n     */\n    hasSameAmount: function hasSameAmount(comparator) {\n      var comparators = Dinero.normalizePrecision([this, comparator]);\n      return comparators[0].getAmount() === comparators[1].getAmount();\n    },\n\n    /**\n     * Returns this object formatted as a string.\n     *\n     * The format is a mask which defines how the output string will be formatted.\n     * It defines whether to display a currency, in what format, how many fraction digits to display and whether to use grouping separators.\n     * The output is formatted according to the applying locale.\n     *\n     * Object                       | Format            | String\n     * :--------------------------- | :---------------- | :---\n     * `Dinero({ amount: 500050 })` | `'$0,0.00'`       | $5,000.50\n     * `Dinero({ amount: 500050 })` | `'$0,0'`          | $5,001\n     * `Dinero({ amount: 500050 })` | `'$0'`            | $5001\n     * `Dinero({ amount: 500050 })` | `'$0.0'`          | $5000.5\n     * `Dinero({ amount: 500050 })` | `'USD0,0.0'`      | USD5,000.5\n     * `Dinero({ amount: 500050 })` | `'0,0.0 dollar'`  | 5,000.5 dollars\n     *\n     * Don't try to substitute the `$` sign or the `USD` code with your target currency, nor adapt the format string to the exact format you want.\n     * The format is a mask which defines a pattern and returns a valid, localized currency string.\n     * If you want to display the object in a custom way, either use {@link module:Dinero~getAmount getAmount}, {@link module:Dinero~toUnit toUnit} or {@link module:Dinero~toRoundedUnit toRoundedUnit} and manipulate the output string as you wish.\n     *\n     * {@link module:Dinero~toFormat toFormat} wraps around `Number.prototype.toLocaleString`. For that reason, **format will vary depending on how it's implemented in the end user's environment**.\n     *\n     * You can also use `toLocaleString` directly:\n     * `Dinero().toRoundedUnit(digits, roundingMode).toLocaleString(locale, options)`.\n     *\n     * By default, amounts are rounded using the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)).\n     * You can also specify a different `roundingMode` to better fit your needs.\n     *\n     * @param  {String} [format='$0,0.00'] - The format mask to format to.\n     * @param  {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @example\n     * // returns $2,000\n     * Dinero({ amount: 200000 }).toFormat('$0,0')\n     * @example\n     * // returns €50.5\n     * Dinero({ amount: 5050, currency: 'EUR' }).toFormat('$0,0.0')\n     * @example\n     * // returns 100 euros\n     * Dinero({ amount: 10000, currency: 'EUR' }).setLocale('fr-FR').toFormat('0,0 dollar')\n     * @example\n     * // returns 2000\n     * Dinero({ amount: 200000, currency: 'EUR' }).toFormat()\n     * @example\n     * // returns $10\n     * Dinero({ amount: 1050 }).toFormat('$0', 'HALF_EVEN')\n     *\n     * @return {String}\n     */\n    toFormat: function toFormat() {\n      var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : globalFormat;\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;\n      var formatter = Format(format);\n      return this.toRoundedUnit(formatter.getMinimumFractionDigits(), roundingMode).toLocaleString(this.getLocale(), {\n        currencyDisplay: formatter.getCurrencyDisplay(),\n        useGrouping: formatter.getUseGrouping(),\n        minimumFractionDigits: formatter.getMinimumFractionDigits(),\n        style: formatter.getStyle(),\n        currency: this.getCurrency()\n      });\n    },\n\n    /**\n     * Returns the amount represented by this object in units.\n     *\n     * @example\n     * // returns 10.5\n     * Dinero({ amount: 1050 }).toUnit()\n     * @example\n     * // returns 10.545\n     * Dinero({ amount: 10545, precision: 3 }).toUnit()\n     *\n     * @return {Number}\n     */\n    toUnit: function toUnit() {\n      return calculator$1.divide(this.getAmount(), Math.pow(10, precision));\n    },\n\n    /**\n     * Returns the amount represented by this object in rounded units.\n     *\n     * By default, the method uses the **half away from zero** rule ([commercial rounding](https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)).\n     * You can also specify a different `roundingMode` to better fit your needs.\n     *\n     * @example\n     * // returns 10.6\n     * Dinero({ amount: 1055 }).toRoundedUnit(1)\n     * @example\n     * // returns 10\n     * Dinero({ amount: 1050 }).toRoundedUnit(0, 'HALF_EVEN')\n     *\n     * @param  {Number} digits - The number of fraction digits to round to.\n     * @param  {String} [roundingMode='HALF_AWAY_FROM_ZERO'] - The rounding mode to use: `'HALF_ODD'`, `'HALF_EVEN'`, `'HALF_UP'`, `'HALF_DOWN'`, `'HALF_TOWARDS_ZERO'`, `'HALF_AWAY_FROM_ZERO'` or `'DOWN'`.\n     *\n     * @return {Number}\n     */\n    toRoundedUnit: function toRoundedUnit(digits) {\n      var roundingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalFormatRoundingMode;\n      var factor = Math.pow(10, digits);\n      return calculator$1.divide(calculator$1.round(calculator$1.multiply(this.toUnit(), factor), roundingMode), factor);\n    },\n\n    /**\n     * Returns the object's data as an object literal.\n     *\n     * @example\n     * // returns { amount: 500, currency: 'EUR', precision: 2 }\n     * Dinero({ amount: 500, currency: 'EUR', precision: 2 }).toObject()\n     *\n     * @return {Object}\n     */\n    toObject: function toObject() {\n      return {\n        amount: amount,\n        currency: currency,\n        precision: precision\n      };\n    },\n\n    /**\n     * Returns the object's data as an object literal.\n     *\n     * Alias of {@link module:Dinero~toObject toObject}.\n     * It is defined so that calling `JSON.stringify` on a Dinero object will automatically extract the relevant data.\n     *\n     * @example\n     * // returns '{\"amount\":500,\"currency\":\"EUR\",\"precision\":2}'\n     * JSON.stringify(Dinero({ amount: 500, currency: 'EUR', precision: 2 }))\n     *\n     * @return {Object}\n     */\n    toJSON: function toJSON() {\n      return this.toObject();\n    }\n  };\n};\n\nvar dinero = Object.assign(Dinero, Defaults, Globals, Static);\n\nexport default dinero;\n","function truthy(d) {\n  return d\n};\n\nfunction first(array, callback, context) {\n  var callback = callback || truthy\n    , context = context || array\n    , value\n\n  for (var i = 0, l = array.length; i < l; i += 1) {\n    if (value = callback.call(context, array[i], i)) return array[i]\n  }\n};\n\nmodule.exports = first","var nub = module.exports = function (xs, cmp) {\n    if (typeof xs === 'function' || cmp) {\n        return nub.by(xs, cmp);\n    }\n    \n    var keys = {\n        'object' : [],\n        'function' : [],\n        'string' : {},\n        'number' : {},\n        'boolean' : {},\n        'undefined' : {}\n    };\n    \n    var res = [];\n    \n    for (var i = 0; i < xs.length; i++) {\n        var x = xs[i];\n        var recs = x === '__proto__'\n            ? keys.objects\n            : keys[typeof x] || keys.objects\n        ;\n        \n        if (Array.isArray(recs)) {\n            if (recs.indexOf(x) < 0) {\n                recs.push(x);\n                res.push(x);\n            }\n        }\n        else if (!Object.hasOwnProperty.call(recs, x)) {\n            recs[x] = true;\n            res.push(x);\n        }\n    }\n    \n    return res;\n};\n\nnub.by = function (xs, cmp) {\n    if (typeof xs === 'function') {\n        var cmp_ = cmp;\n        cmp = xs;\n        xs = cmp_;\n    }\n    \n    var res = [];\n    \n    for (var i = 0; i < xs.length; i++) {\n        var x = xs[i];\n        \n        var found = false;\n        for (var j = 0; j < res.length; j++) {\n            var y = res[j];\n            if (cmp.call(res, x, y)) {\n                found = true;\n                break;\n            }\n        }\n        \n        if (!found) res.push(x);\n    }\n    \n    return res;\n};\n","/*\n\tFollows ISO 4217, https://www.iso.org/iso-4217-currency-codes.html\n\tSee https://www.currency-iso.org/dam/downloads/lists/list_one.xml\n\tData last updated 2024-06-25\n*/\n\nmodule.exports = [\n  {\n    \"code\": \"AED\",\n    \"number\": \"784\",\n    \"digits\": 2,\n    \"currency\": \"UAE Dirham\",\n    \"countries\": [\n      \"United Arab Emirates (The)\"\n    ]\n  },\n  {\n    \"code\": \"AFN\",\n    \"number\": \"971\",\n    \"digits\": 2,\n    \"currency\": \"Afghani\",\n    \"countries\": [\n      \"Afghanistan\"\n    ]\n  },\n  {\n    \"code\": \"ALL\",\n    \"number\": \"008\",\n    \"digits\": 2,\n    \"currency\": \"Lek\",\n    \"countries\": [\n      \"Albania\"\n    ]\n  },\n  {\n    \"code\": \"AMD\",\n    \"number\": \"051\",\n    \"digits\": 2,\n    \"currency\": \"Armenian Dram\",\n    \"countries\": [\n      \"Armenia\"\n    ]\n  },\n  {\n    \"code\": \"ANG\",\n    \"number\": \"532\",\n    \"digits\": 2,\n    \"currency\": \"Netherlands Antillean Guilder\",\n    \"countries\": [\n      \"Curaçao\",\n      \"Sint Maarten (Dutch Part)\"\n    ]\n  },\n  {\n    \"code\": \"AOA\",\n    \"number\": \"973\",\n    \"digits\": 2,\n    \"currency\": \"Kwanza\",\n    \"countries\": [\n      \"Angola\"\n    ]\n  },\n  {\n    \"code\": \"ARS\",\n    \"number\": \"032\",\n    \"digits\": 2,\n    \"currency\": \"Argentine Peso\",\n    \"countries\": [\n      \"Argentina\"\n    ]\n  },\n  {\n    \"code\": \"AUD\",\n    \"number\": \"036\",\n    \"digits\": 2,\n    \"currency\": \"Australian Dollar\",\n    \"countries\": [\n      \"Australia\",\n      \"Christmas Island\",\n      \"Cocos (Keeling) Islands (The)\",\n      \"Heard Island and Mcdonald Islands\",\n      \"Kiribati\",\n      \"Nauru\",\n      \"Norfolk Island\",\n      \"Tuvalu\"\n    ]\n  },\n  {\n    \"code\": \"AWG\",\n    \"number\": \"533\",\n    \"digits\": 2,\n    \"currency\": \"Aruban Florin\",\n    \"countries\": [\n      \"Aruba\"\n    ]\n  },\n  {\n    \"code\": \"AZN\",\n    \"number\": \"944\",\n    \"digits\": 2,\n    \"currency\": \"Azerbaijan Manat\",\n    \"countries\": [\n      \"Azerbaijan\"\n    ]\n  },\n  {\n    \"code\": \"BAM\",\n    \"number\": \"977\",\n    \"digits\": 2,\n    \"currency\": \"Convertible Mark\",\n    \"countries\": [\n      \"Bosnia and Herzegovina\"\n    ]\n  },\n  {\n    \"code\": \"BBD\",\n    \"number\": \"052\",\n    \"digits\": 2,\n    \"currency\": \"Barbados Dollar\",\n    \"countries\": [\n      \"Barbados\"\n    ]\n  },\n  {\n    \"code\": \"BDT\",\n    \"number\": \"050\",\n    \"digits\": 2,\n    \"currency\": \"Taka\",\n    \"countries\": [\n      \"Bangladesh\"\n    ]\n  },\n  {\n    \"code\": \"BGN\",\n    \"number\": \"975\",\n    \"digits\": 2,\n    \"currency\": \"Bulgarian Lev\",\n    \"countries\": [\n      \"Bulgaria\"\n    ]\n  },\n  {\n    \"code\": \"BHD\",\n    \"number\": \"048\",\n    \"digits\": 3,\n    \"currency\": \"Bahraini Dinar\",\n    \"countries\": [\n      \"Bahrain\"\n    ]\n  },\n  {\n    \"code\": \"BIF\",\n    \"number\": \"108\",\n    \"digits\": 0,\n    \"currency\": \"Burundi Franc\",\n    \"countries\": [\n      \"Burundi\"\n    ]\n  },\n  {\n    \"code\": \"BMD\",\n    \"number\": \"060\",\n    \"digits\": 2,\n    \"currency\": \"Bermudian Dollar\",\n    \"countries\": [\n      \"Bermuda\"\n    ]\n  },\n  {\n    \"code\": \"BND\",\n    \"number\": \"096\",\n    \"digits\": 2,\n    \"currency\": \"Brunei Dollar\",\n    \"countries\": [\n      \"Brunei Darussalam\"\n    ]\n  },\n  {\n    \"code\": \"BOB\",\n    \"number\": \"068\",\n    \"digits\": 2,\n    \"currency\": \"Boliviano\",\n    \"countries\": [\n      \"Bolivia (Plurinational State Of)\"\n    ]\n  },\n  {\n    \"code\": \"BOV\",\n    \"number\": \"984\",\n    \"digits\": 2,\n    \"currency\": \"Mvdol\",\n    \"countries\": [\n      \"Bolivia (Plurinational State Of)\"\n    ]\n  },\n  {\n    \"code\": \"BRL\",\n    \"number\": \"986\",\n    \"digits\": 2,\n    \"currency\": \"Brazilian Real\",\n    \"countries\": [\n      \"Brazil\"\n    ]\n  },\n  {\n    \"code\": \"BSD\",\n    \"number\": \"044\",\n    \"digits\": 2,\n    \"currency\": \"Bahamian Dollar\",\n    \"countries\": [\n      \"Bahamas (The)\"\n    ]\n  },\n  {\n    \"code\": \"BTN\",\n    \"number\": \"064\",\n    \"digits\": 2,\n    \"currency\": \"Ngultrum\",\n    \"countries\": [\n      \"Bhutan\"\n    ]\n  },\n  {\n    \"code\": \"BWP\",\n    \"number\": \"072\",\n    \"digits\": 2,\n    \"currency\": \"Pula\",\n    \"countries\": [\n      \"Botswana\"\n    ]\n  },\n  {\n    \"code\": \"BYN\",\n    \"number\": \"933\",\n    \"digits\": 2,\n    \"currency\": \"Belarusian Ruble\",\n    \"countries\": [\n      \"Belarus\"\n    ]\n  },\n  {\n    \"code\": \"BZD\",\n    \"number\": \"084\",\n    \"digits\": 2,\n    \"currency\": \"Belize Dollar\",\n    \"countries\": [\n      \"Belize\"\n    ]\n  },\n  {\n    \"code\": \"CAD\",\n    \"number\": \"124\",\n    \"digits\": 2,\n    \"currency\": \"Canadian Dollar\",\n    \"countries\": [\n      \"Canada\"\n    ]\n  },\n  {\n    \"code\": \"CDF\",\n    \"number\": \"976\",\n    \"digits\": 2,\n    \"currency\": \"Congolese Franc\",\n    \"countries\": [\n      \"Congo (The Democratic Republic of The)\"\n    ]\n  },\n  {\n    \"code\": \"CHE\",\n    \"number\": \"947\",\n    \"digits\": 2,\n    \"currency\": \"WIR Euro\",\n    \"countries\": [\n      \"Switzerland\"\n    ]\n  },\n  {\n    \"code\": \"CHF\",\n    \"number\": \"756\",\n    \"digits\": 2,\n    \"currency\": \"Swiss Franc\",\n    \"countries\": [\n      \"Liechtenstein\",\n      \"Switzerland\"\n    ]\n  },\n  {\n    \"code\": \"CHW\",\n    \"number\": \"948\",\n    \"digits\": 2,\n    \"currency\": \"WIR Franc\",\n    \"countries\": [\n      \"Switzerland\"\n    ]\n  },\n  {\n    \"code\": \"CLF\",\n    \"number\": \"990\",\n    \"digits\": 4,\n    \"currency\": \"Unidad de Fomento\",\n    \"countries\": [\n      \"Chile\"\n    ]\n  },\n  {\n    \"code\": \"CLP\",\n    \"number\": \"152\",\n    \"digits\": 0,\n    \"currency\": \"Chilean Peso\",\n    \"countries\": [\n      \"Chile\"\n    ]\n  },\n  {\n    \"code\": \"CNY\",\n    \"number\": \"156\",\n    \"digits\": 2,\n    \"currency\": \"Yuan Renminbi\",\n    \"countries\": [\n      \"China\"\n    ]\n  },\n  {\n    \"code\": \"COP\",\n    \"number\": \"170\",\n    \"digits\": 2,\n    \"currency\": \"Colombian Peso\",\n    \"countries\": [\n      \"Colombia\"\n    ]\n  },\n  {\n    \"code\": \"COU\",\n    \"number\": \"970\",\n    \"digits\": 2,\n    \"currency\": \"Unidad de Valor Real\",\n    \"countries\": [\n      \"Colombia\"\n    ]\n  },\n  {\n    \"code\": \"CRC\",\n    \"number\": \"188\",\n    \"digits\": 2,\n    \"currency\": \"Costa Rican Colon\",\n    \"countries\": [\n      \"Costa Rica\"\n    ]\n  },\n  {\n    \"code\": \"CUC\",\n    \"number\": \"931\",\n    \"digits\": 2,\n    \"currency\": \"Peso Convertible\",\n    \"countries\": [\n      \"Cuba\"\n    ]\n  },\n  {\n    \"code\": \"CUP\",\n    \"number\": \"192\",\n    \"digits\": 2,\n    \"currency\": \"Cuban Peso\",\n    \"countries\": [\n      \"Cuba\"\n    ]\n  },\n  {\n    \"code\": \"CVE\",\n    \"number\": \"132\",\n    \"digits\": 2,\n    \"currency\": \"Cabo Verde Escudo\",\n    \"countries\": [\n      \"Cabo Verde\"\n    ]\n  },\n  {\n    \"code\": \"CZK\",\n    \"number\": \"203\",\n    \"digits\": 2,\n    \"currency\": \"Czech Koruna\",\n    \"countries\": [\n      \"Czechia\"\n    ]\n  },\n  {\n    \"code\": \"DJF\",\n    \"number\": \"262\",\n    \"digits\": 0,\n    \"currency\": \"Djibouti Franc\",\n    \"countries\": [\n      \"Djibouti\"\n    ]\n  },\n  {\n    \"code\": \"DKK\",\n    \"number\": \"208\",\n    \"digits\": 2,\n    \"currency\": \"Danish Krone\",\n    \"countries\": [\n      \"Denmark\",\n      \"Faroe Islands (The)\",\n      \"Greenland\"\n    ]\n  },\n  {\n    \"code\": \"DOP\",\n    \"number\": \"214\",\n    \"digits\": 2,\n    \"currency\": \"Dominican Peso\",\n    \"countries\": [\n      \"Dominican Republic (The)\"\n    ]\n  },\n  {\n    \"code\": \"DZD\",\n    \"number\": \"012\",\n    \"digits\": 2,\n    \"currency\": \"Algerian Dinar\",\n    \"countries\": [\n      \"Algeria\"\n    ]\n  },\n  {\n    \"code\": \"EGP\",\n    \"number\": \"818\",\n    \"digits\": 2,\n    \"currency\": \"Egyptian Pound\",\n    \"countries\": [\n      \"Egypt\"\n    ]\n  },\n  {\n    \"code\": \"ERN\",\n    \"number\": \"232\",\n    \"digits\": 2,\n    \"currency\": \"Nakfa\",\n    \"countries\": [\n      \"Eritrea\"\n    ]\n  },\n  {\n    \"code\": \"ETB\",\n    \"number\": \"230\",\n    \"digits\": 2,\n    \"currency\": \"Ethiopian Birr\",\n    \"countries\": [\n      \"Ethiopia\"\n    ]\n  },\n  {\n    \"code\": \"EUR\",\n    \"number\": \"978\",\n    \"digits\": 2,\n    \"currency\": \"Euro\",\n    \"countries\": [\n      \"Åland Islands\",\n      \"Andorra\",\n      \"Austria\",\n      \"Belgium\",\n      \"Croatia\",\n      \"Cyprus\",\n      \"Estonia\",\n      \"European Union\",\n      \"Finland\",\n      \"France\",\n      \"French Guiana\",\n      \"French Southern Territories (The)\",\n      \"Germany\",\n      \"Greece\",\n      \"Guadeloupe\",\n      \"Holy See (The)\",\n      \"Ireland\",\n      \"Italy\",\n      \"Latvia\",\n      \"Lithuania\",\n      \"Luxembourg\",\n      \"Malta\",\n      \"Martinique\",\n      \"Mayotte\",\n      \"Monaco\",\n      \"Montenegro\",\n      \"Netherlands (The)\",\n      \"Portugal\",\n      \"Réunion\",\n      \"Saint Barthélemy\",\n      \"Saint Martin (French Part)\",\n      \"Saint Pierre and Miquelon\",\n      \"San Marino\",\n      \"Slovakia\",\n      \"Slovenia\",\n      \"Spain\"\n    ]\n  },\n  {\n    \"code\": \"FJD\",\n    \"number\": \"242\",\n    \"digits\": 2,\n    \"currency\": \"Fiji Dollar\",\n    \"countries\": [\n      \"Fiji\"\n    ]\n  },\n  {\n    \"code\": \"FKP\",\n    \"number\": \"238\",\n    \"digits\": 2,\n    \"currency\": \"Falkland Islands Pound\",\n    \"countries\": [\n      \"Falkland Islands (The) [Malvinas]\"\n    ]\n  },\n  {\n    \"code\": \"GBP\",\n    \"number\": \"826\",\n    \"digits\": 2,\n    \"currency\": \"Pound Sterling\",\n    \"countries\": [\n      \"Guernsey\",\n      \"Isle of Man\",\n      \"Jersey\",\n      \"United Kingdom of Great Britain and Northern Ireland (The)\"\n    ]\n  },\n  {\n    \"code\": \"GEL\",\n    \"number\": \"981\",\n    \"digits\": 2,\n    \"currency\": \"Lari\",\n    \"countries\": [\n      \"Georgia\"\n    ]\n  },\n  {\n    \"code\": \"GHS\",\n    \"number\": \"936\",\n    \"digits\": 2,\n    \"currency\": \"Ghana Cedi\",\n    \"countries\": [\n      \"Ghana\"\n    ]\n  },\n  {\n    \"code\": \"GIP\",\n    \"number\": \"292\",\n    \"digits\": 2,\n    \"currency\": \"Gibraltar Pound\",\n    \"countries\": [\n      \"Gibraltar\"\n    ]\n  },\n  {\n    \"code\": \"GMD\",\n    \"number\": \"270\",\n    \"digits\": 2,\n    \"currency\": \"Dalasi\",\n    \"countries\": [\n      \"Gambia (The)\"\n    ]\n  },\n  {\n    \"code\": \"GNF\",\n    \"number\": \"324\",\n    \"digits\": 0,\n    \"currency\": \"Guinean Franc\",\n    \"countries\": [\n      \"Guinea\"\n    ]\n  },\n  {\n    \"code\": \"GTQ\",\n    \"number\": \"320\",\n    \"digits\": 2,\n    \"currency\": \"Quetzal\",\n    \"countries\": [\n      \"Guatemala\"\n    ]\n  },\n  {\n    \"code\": \"GYD\",\n    \"number\": \"328\",\n    \"digits\": 2,\n    \"currency\": \"Guyana Dollar\",\n    \"countries\": [\n      \"Guyana\"\n    ]\n  },\n  {\n    \"code\": \"HKD\",\n    \"number\": \"344\",\n    \"digits\": 2,\n    \"currency\": \"Hong Kong Dollar\",\n    \"countries\": [\n      \"Hong Kong\"\n    ]\n  },\n  {\n    \"code\": \"HNL\",\n    \"number\": \"340\",\n    \"digits\": 2,\n    \"currency\": \"Lempira\",\n    \"countries\": [\n      \"Honduras\"\n    ]\n  },\n  {\n    \"code\": \"HTG\",\n    \"number\": \"332\",\n    \"digits\": 2,\n    \"currency\": \"Gourde\",\n    \"countries\": [\n      \"Haiti\"\n    ]\n  },\n  {\n    \"code\": \"HUF\",\n    \"number\": \"348\",\n    \"digits\": 2,\n    \"currency\": \"Forint\",\n    \"countries\": [\n      \"Hungary\"\n    ]\n  },\n  {\n    \"code\": \"IDR\",\n    \"number\": \"360\",\n    \"digits\": 2,\n    \"currency\": \"Rupiah\",\n    \"countries\": [\n      \"Indonesia\"\n    ]\n  },\n  {\n    \"code\": \"ILS\",\n    \"number\": \"376\",\n    \"digits\": 2,\n    \"currency\": \"New Israeli Sheqel\",\n    \"countries\": [\n      \"Israel\"\n    ]\n  },\n  {\n    \"code\": \"INR\",\n    \"number\": \"356\",\n    \"digits\": 2,\n    \"currency\": \"Indian Rupee\",\n    \"countries\": [\n      \"Bhutan\",\n      \"India\"\n    ]\n  },\n  {\n    \"code\": \"IQD\",\n    \"number\": \"368\",\n    \"digits\": 3,\n    \"currency\": \"Iraqi Dinar\",\n    \"countries\": [\n      \"Iraq\"\n    ]\n  },\n  {\n    \"code\": \"IRR\",\n    \"number\": \"364\",\n    \"digits\": 2,\n    \"currency\": \"Iranian Rial\",\n    \"countries\": [\n      \"Iran (Islamic Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"ISK\",\n    \"number\": \"352\",\n    \"digits\": 0,\n    \"currency\": \"Iceland Krona\",\n    \"countries\": [\n      \"Iceland\"\n    ]\n  },\n  {\n    \"code\": \"JMD\",\n    \"number\": \"388\",\n    \"digits\": 2,\n    \"currency\": \"Jamaican Dollar\",\n    \"countries\": [\n      \"Jamaica\"\n    ]\n  },\n  {\n    \"code\": \"JOD\",\n    \"number\": \"400\",\n    \"digits\": 3,\n    \"currency\": \"Jordanian Dinar\",\n    \"countries\": [\n      \"Jordan\"\n    ]\n  },\n  {\n    \"code\": \"JPY\",\n    \"number\": \"392\",\n    \"digits\": 0,\n    \"currency\": \"Yen\",\n    \"countries\": [\n      \"Japan\"\n    ]\n  },\n  {\n    \"code\": \"KES\",\n    \"number\": \"404\",\n    \"digits\": 2,\n    \"currency\": \"Kenyan Shilling\",\n    \"countries\": [\n      \"Kenya\"\n    ]\n  },\n  {\n    \"code\": \"KGS\",\n    \"number\": \"417\",\n    \"digits\": 2,\n    \"currency\": \"Som\",\n    \"countries\": [\n      \"Kyrgyzstan\"\n    ]\n  },\n  {\n    \"code\": \"KHR\",\n    \"number\": \"116\",\n    \"digits\": 2,\n    \"currency\": \"Riel\",\n    \"countries\": [\n      \"Cambodia\"\n    ]\n  },\n  {\n    \"code\": \"KMF\",\n    \"number\": \"174\",\n    \"digits\": 0,\n    \"currency\": \"Comorian Franc \",\n    \"countries\": [\n      \"Comoros (The)\"\n    ]\n  },\n  {\n    \"code\": \"KPW\",\n    \"number\": \"408\",\n    \"digits\": 2,\n    \"currency\": \"North Korean Won\",\n    \"countries\": [\n      \"Korea (The Democratic People’s Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"KRW\",\n    \"number\": \"410\",\n    \"digits\": 0,\n    \"currency\": \"Won\",\n    \"countries\": [\n      \"Korea (The Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"KWD\",\n    \"number\": \"414\",\n    \"digits\": 3,\n    \"currency\": \"Kuwaiti Dinar\",\n    \"countries\": [\n      \"Kuwait\"\n    ]\n  },\n  {\n    \"code\": \"KYD\",\n    \"number\": \"136\",\n    \"digits\": 2,\n    \"currency\": \"Cayman Islands Dollar\",\n    \"countries\": [\n      \"Cayman Islands (The)\"\n    ]\n  },\n  {\n    \"code\": \"KZT\",\n    \"number\": \"398\",\n    \"digits\": 2,\n    \"currency\": \"Tenge\",\n    \"countries\": [\n      \"Kazakhstan\"\n    ]\n  },\n  {\n    \"code\": \"LAK\",\n    \"number\": \"418\",\n    \"digits\": 2,\n    \"currency\": \"Lao Kip\",\n    \"countries\": [\n      \"Lao People’s Democratic Republic (The)\"\n    ]\n  },\n  {\n    \"code\": \"LBP\",\n    \"number\": \"422\",\n    \"digits\": 2,\n    \"currency\": \"Lebanese Pound\",\n    \"countries\": [\n      \"Lebanon\"\n    ]\n  },\n  {\n    \"code\": \"LKR\",\n    \"number\": \"144\",\n    \"digits\": 2,\n    \"currency\": \"Sri Lanka Rupee\",\n    \"countries\": [\n      \"Sri Lanka\"\n    ]\n  },\n  {\n    \"code\": \"LRD\",\n    \"number\": \"430\",\n    \"digits\": 2,\n    \"currency\": \"Liberian Dollar\",\n    \"countries\": [\n      \"Liberia\"\n    ]\n  },\n  {\n    \"code\": \"LSL\",\n    \"number\": \"426\",\n    \"digits\": 2,\n    \"currency\": \"Loti\",\n    \"countries\": [\n      \"Lesotho\"\n    ]\n  },\n  {\n    \"code\": \"LYD\",\n    \"number\": \"434\",\n    \"digits\": 3,\n    \"currency\": \"Libyan Dinar\",\n    \"countries\": [\n      \"Libya\"\n    ]\n  },\n  {\n    \"code\": \"MAD\",\n    \"number\": \"504\",\n    \"digits\": 2,\n    \"currency\": \"Moroccan Dirham\",\n    \"countries\": [\n      \"Morocco\",\n      \"Western Sahara\"\n    ]\n  },\n  {\n    \"code\": \"MDL\",\n    \"number\": \"498\",\n    \"digits\": 2,\n    \"currency\": \"Moldovan Leu\",\n    \"countries\": [\n      \"Moldova (The Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"MGA\",\n    \"number\": \"969\",\n    \"digits\": 2,\n    \"currency\": \"Malagasy Ariary\",\n    \"countries\": [\n      \"Madagascar\"\n    ]\n  },\n  {\n    \"code\": \"MKD\",\n    \"number\": \"807\",\n    \"digits\": 2,\n    \"currency\": \"Denar\",\n    \"countries\": [\n      \"North Macedonia\"\n    ]\n  },\n  {\n    \"code\": \"MMK\",\n    \"number\": \"104\",\n    \"digits\": 2,\n    \"currency\": \"Kyat\",\n    \"countries\": [\n      \"Myanmar\"\n    ]\n  },\n  {\n    \"code\": \"MNT\",\n    \"number\": \"496\",\n    \"digits\": 2,\n    \"currency\": \"Tugrik\",\n    \"countries\": [\n      \"Mongolia\"\n    ]\n  },\n  {\n    \"code\": \"MOP\",\n    \"number\": \"446\",\n    \"digits\": 2,\n    \"currency\": \"Pataca\",\n    \"countries\": [\n      \"Macao\"\n    ]\n  },\n  {\n    \"code\": \"MRU\",\n    \"number\": \"929\",\n    \"digits\": 2,\n    \"currency\": \"Ouguiya\",\n    \"countries\": [\n      \"Mauritania\"\n    ]\n  },\n  {\n    \"code\": \"MUR\",\n    \"number\": \"480\",\n    \"digits\": 2,\n    \"currency\": \"Mauritius Rupee\",\n    \"countries\": [\n      \"Mauritius\"\n    ]\n  },\n  {\n    \"code\": \"MVR\",\n    \"number\": \"462\",\n    \"digits\": 2,\n    \"currency\": \"Rufiyaa\",\n    \"countries\": [\n      \"Maldives\"\n    ]\n  },\n  {\n    \"code\": \"MWK\",\n    \"number\": \"454\",\n    \"digits\": 2,\n    \"currency\": \"Malawi Kwacha\",\n    \"countries\": [\n      \"Malawi\"\n    ]\n  },\n  {\n    \"code\": \"MXN\",\n    \"number\": \"484\",\n    \"digits\": 2,\n    \"currency\": \"Mexican Peso\",\n    \"countries\": [\n      \"Mexico\"\n    ]\n  },\n  {\n    \"code\": \"MXV\",\n    \"number\": \"979\",\n    \"digits\": 2,\n    \"currency\": \"Mexican Unidad de Inversion (UDI)\",\n    \"countries\": [\n      \"Mexico\"\n    ]\n  },\n  {\n    \"code\": \"MYR\",\n    \"number\": \"458\",\n    \"digits\": 2,\n    \"currency\": \"Malaysian Ringgit\",\n    \"countries\": [\n      \"Malaysia\"\n    ]\n  },\n  {\n    \"code\": \"MZN\",\n    \"number\": \"943\",\n    \"digits\": 2,\n    \"currency\": \"Mozambique Metical\",\n    \"countries\": [\n      \"Mozambique\"\n    ]\n  },\n  {\n    \"code\": \"NAD\",\n    \"number\": \"516\",\n    \"digits\": 2,\n    \"currency\": \"Namibia Dollar\",\n    \"countries\": [\n      \"Namibia\"\n    ]\n  },\n  {\n    \"code\": \"NGN\",\n    \"number\": \"566\",\n    \"digits\": 2,\n    \"currency\": \"Naira\",\n    \"countries\": [\n      \"Nigeria\"\n    ]\n  },\n  {\n    \"code\": \"NIO\",\n    \"number\": \"558\",\n    \"digits\": 2,\n    \"currency\": \"Cordoba Oro\",\n    \"countries\": [\n      \"Nicaragua\"\n    ]\n  },\n  {\n    \"code\": \"NOK\",\n    \"number\": \"578\",\n    \"digits\": 2,\n    \"currency\": \"Norwegian Krone\",\n    \"countries\": [\n      \"Bouvet Island\",\n      \"Norway\",\n      \"Svalbard and Jan Mayen\"\n    ]\n  },\n  {\n    \"code\": \"NPR\",\n    \"number\": \"524\",\n    \"digits\": 2,\n    \"currency\": \"Nepalese Rupee\",\n    \"countries\": [\n      \"Nepal\"\n    ]\n  },\n  {\n    \"code\": \"NZD\",\n    \"number\": \"554\",\n    \"digits\": 2,\n    \"currency\": \"New Zealand Dollar\",\n    \"countries\": [\n      \"Cook Islands (The)\",\n      \"New Zealand\",\n      \"Niue\",\n      \"Pitcairn\",\n      \"Tokelau\"\n    ]\n  },\n  {\n    \"code\": \"OMR\",\n    \"number\": \"512\",\n    \"digits\": 3,\n    \"currency\": \"Rial Omani\",\n    \"countries\": [\n      \"Oman\"\n    ]\n  },\n  {\n    \"code\": \"PAB\",\n    \"number\": \"590\",\n    \"digits\": 2,\n    \"currency\": \"Balboa\",\n    \"countries\": [\n      \"Panama\"\n    ]\n  },\n  {\n    \"code\": \"PEN\",\n    \"number\": \"604\",\n    \"digits\": 2,\n    \"currency\": \"Sol\",\n    \"countries\": [\n      \"Peru\"\n    ]\n  },\n  {\n    \"code\": \"PGK\",\n    \"number\": \"598\",\n    \"digits\": 2,\n    \"currency\": \"Kina\",\n    \"countries\": [\n      \"Papua New Guinea\"\n    ]\n  },\n  {\n    \"code\": \"PHP\",\n    \"number\": \"608\",\n    \"digits\": 2,\n    \"currency\": \"Philippine Peso\",\n    \"countries\": [\n      \"Philippines (The)\"\n    ]\n  },\n  {\n    \"code\": \"PKR\",\n    \"number\": \"586\",\n    \"digits\": 2,\n    \"currency\": \"Pakistan Rupee\",\n    \"countries\": [\n      \"Pakistan\"\n    ]\n  },\n  {\n    \"code\": \"PLN\",\n    \"number\": \"985\",\n    \"digits\": 2,\n    \"currency\": \"Zloty\",\n    \"countries\": [\n      \"Poland\"\n    ]\n  },\n  {\n    \"code\": \"PYG\",\n    \"number\": \"600\",\n    \"digits\": 0,\n    \"currency\": \"Guarani\",\n    \"countries\": [\n      \"Paraguay\"\n    ]\n  },\n  {\n    \"code\": \"QAR\",\n    \"number\": \"634\",\n    \"digits\": 2,\n    \"currency\": \"Qatari Rial\",\n    \"countries\": [\n      \"Qatar\"\n    ]\n  },\n  {\n    \"code\": \"RON\",\n    \"number\": \"946\",\n    \"digits\": 2,\n    \"currency\": \"Romanian Leu\",\n    \"countries\": [\n      \"Romania\"\n    ]\n  },\n  {\n    \"code\": \"RSD\",\n    \"number\": \"941\",\n    \"digits\": 2,\n    \"currency\": \"Serbian Dinar\",\n    \"countries\": [\n      \"Serbia\"\n    ]\n  },\n  {\n    \"code\": \"RUB\",\n    \"number\": \"643\",\n    \"digits\": 2,\n    \"currency\": \"Russian Ruble\",\n    \"countries\": [\n      \"Russian Federation (The)\"\n    ]\n  },\n  {\n    \"code\": \"RWF\",\n    \"number\": \"646\",\n    \"digits\": 0,\n    \"currency\": \"Rwanda Franc\",\n    \"countries\": [\n      \"Rwanda\"\n    ]\n  },\n  {\n    \"code\": \"SAR\",\n    \"number\": \"682\",\n    \"digits\": 2,\n    \"currency\": \"Saudi Riyal\",\n    \"countries\": [\n      \"Saudi Arabia\"\n    ]\n  },\n  {\n    \"code\": \"SBD\",\n    \"number\": \"090\",\n    \"digits\": 2,\n    \"currency\": \"Solomon Islands Dollar\",\n    \"countries\": [\n      \"Solomon Islands\"\n    ]\n  },\n  {\n    \"code\": \"SCR\",\n    \"number\": \"690\",\n    \"digits\": 2,\n    \"currency\": \"Seychelles Rupee\",\n    \"countries\": [\n      \"Seychelles\"\n    ]\n  },\n  {\n    \"code\": \"SDG\",\n    \"number\": \"938\",\n    \"digits\": 2,\n    \"currency\": \"Sudanese Pound\",\n    \"countries\": [\n      \"Sudan (The)\"\n    ]\n  },\n  {\n    \"code\": \"SEK\",\n    \"number\": \"752\",\n    \"digits\": 2,\n    \"currency\": \"Swedish Krona\",\n    \"countries\": [\n      \"Sweden\"\n    ]\n  },\n  {\n    \"code\": \"SGD\",\n    \"number\": \"702\",\n    \"digits\": 2,\n    \"currency\": \"Singapore Dollar\",\n    \"countries\": [\n      \"Singapore\"\n    ]\n  },\n  {\n    \"code\": \"SHP\",\n    \"number\": \"654\",\n    \"digits\": 2,\n    \"currency\": \"Saint Helena Pound\",\n    \"countries\": [\n      \"Saint Helena, Ascension and Tristan Da Cunha\"\n    ]\n  },\n  {\n    \"code\": \"SLE\",\n    \"number\": \"925\",\n    \"digits\": 2,\n    \"currency\": \"Leone\",\n    \"countries\": [\n      \"Sierra Leone\"\n    ]\n  },\n  {\n    \"code\": \"SOS\",\n    \"number\": \"706\",\n    \"digits\": 2,\n    \"currency\": \"Somali Shilling\",\n    \"countries\": [\n      \"Somalia\"\n    ]\n  },\n  {\n    \"code\": \"SRD\",\n    \"number\": \"968\",\n    \"digits\": 2,\n    \"currency\": \"Surinam Dollar\",\n    \"countries\": [\n      \"Suriname\"\n    ]\n  },\n  {\n    \"code\": \"SSP\",\n    \"number\": \"728\",\n    \"digits\": 2,\n    \"currency\": \"South Sudanese Pound\",\n    \"countries\": [\n      \"South Sudan\"\n    ]\n  },\n  {\n    \"code\": \"STN\",\n    \"number\": \"930\",\n    \"digits\": 2,\n    \"currency\": \"Dobra\",\n    \"countries\": [\n      \"Sao Tome and Principe\"\n    ]\n  },\n  {\n    \"code\": \"SVC\",\n    \"number\": \"222\",\n    \"digits\": 2,\n    \"currency\": \"El Salvador Colon\",\n    \"countries\": [\n      \"El Salvador\"\n    ]\n  },\n  {\n    \"code\": \"SYP\",\n    \"number\": \"760\",\n    \"digits\": 2,\n    \"currency\": \"Syrian Pound\",\n    \"countries\": [\n      \"Syrian Arab Republic\"\n    ]\n  },\n  {\n    \"code\": \"SZL\",\n    \"number\": \"748\",\n    \"digits\": 2,\n    \"currency\": \"Lilangeni\",\n    \"countries\": [\n      \"Eswatini\"\n    ]\n  },\n  {\n    \"code\": \"THB\",\n    \"number\": \"764\",\n    \"digits\": 2,\n    \"currency\": \"Baht\",\n    \"countries\": [\n      \"Thailand\"\n    ]\n  },\n  {\n    \"code\": \"TJS\",\n    \"number\": \"972\",\n    \"digits\": 2,\n    \"currency\": \"Somoni\",\n    \"countries\": [\n      \"Tajikistan\"\n    ]\n  },\n  {\n    \"code\": \"TMT\",\n    \"number\": \"934\",\n    \"digits\": 2,\n    \"currency\": \"Turkmenistan New Manat\",\n    \"countries\": [\n      \"Turkmenistan\"\n    ]\n  },\n  {\n    \"code\": \"TND\",\n    \"number\": \"788\",\n    \"digits\": 3,\n    \"currency\": \"Tunisian Dinar\",\n    \"countries\": [\n      \"Tunisia\"\n    ]\n  },\n  {\n    \"code\": \"TOP\",\n    \"number\": \"776\",\n    \"digits\": 2,\n    \"currency\": \"Pa’anga\",\n    \"countries\": [\n      \"Tonga\"\n    ]\n  },\n  {\n    \"code\": \"TRY\",\n    \"number\": \"949\",\n    \"digits\": 2,\n    \"currency\": \"Turkish Lira\",\n    \"countries\": [\n      \"Türki̇ye\"\n    ]\n  },\n  {\n    \"code\": \"TTD\",\n    \"number\": \"780\",\n    \"digits\": 2,\n    \"currency\": \"Trinidad and Tobago Dollar\",\n    \"countries\": [\n      \"Trinidad and Tobago\"\n    ]\n  },\n  {\n    \"code\": \"TWD\",\n    \"number\": \"901\",\n    \"digits\": 2,\n    \"currency\": \"New Taiwan Dollar\",\n    \"countries\": [\n      \"Taiwan (Province of China)\"\n    ]\n  },\n  {\n    \"code\": \"TZS\",\n    \"number\": \"834\",\n    \"digits\": 2,\n    \"currency\": \"Tanzanian Shilling\",\n    \"countries\": [\n      \"Tanzania, United Republic Of\"\n    ]\n  },\n  {\n    \"code\": \"UAH\",\n    \"number\": \"980\",\n    \"digits\": 2,\n    \"currency\": \"Hryvnia\",\n    \"countries\": [\n      \"Ukraine\"\n    ]\n  },\n  {\n    \"code\": \"UGX\",\n    \"number\": \"800\",\n    \"digits\": 0,\n    \"currency\": \"Uganda Shilling\",\n    \"countries\": [\n      \"Uganda\"\n    ]\n  },\n  {\n    \"code\": \"USD\",\n    \"number\": \"840\",\n    \"digits\": 2,\n    \"currency\": \"US Dollar\",\n    \"countries\": [\n      \"American Samoa\",\n      \"Bonaire, Sint Eustatius and Saba\",\n      \"British Indian Ocean Territory (The)\",\n      \"Ecuador\",\n      \"El Salvador\",\n      \"Guam\",\n      \"Haiti\",\n      \"Marshall Islands (The)\",\n      \"Micronesia (Federated States Of)\",\n      \"Northern Mariana Islands (The)\",\n      \"Palau\",\n      \"Panama\",\n      \"Puerto Rico\",\n      \"Timor-Leste\",\n      \"Turks and Caicos Islands (The)\",\n      \"United States Minor Outlying Islands (The)\",\n      \"United States of America (The)\",\n      \"Virgin Islands (British)\",\n      \"Virgin Islands (u.s.)\"\n    ]\n  },\n  {\n    \"code\": \"USN\",\n    \"number\": \"997\",\n    \"digits\": 2,\n    \"currency\": \"US Dollar (Next day)\",\n    \"countries\": [\n      \"United States of America (The)\"\n    ]\n  },\n  {\n    \"code\": \"UYI\",\n    \"number\": \"940\",\n    \"digits\": 0,\n    \"currency\": \"Uruguay Peso en Unidades Indexadas (UI)\",\n    \"countries\": [\n      \"Uruguay\"\n    ]\n  },\n  {\n    \"code\": \"UYU\",\n    \"number\": \"858\",\n    \"digits\": 2,\n    \"currency\": \"Peso Uruguayo\",\n    \"countries\": [\n      \"Uruguay\"\n    ]\n  },\n  {\n    \"code\": \"UYW\",\n    \"number\": \"927\",\n    \"digits\": 4,\n    \"currency\": \"Unidad Previsional\",\n    \"countries\": [\n      \"Uruguay\"\n    ]\n  },\n  {\n    \"code\": \"UZS\",\n    \"number\": \"860\",\n    \"digits\": 2,\n    \"currency\": \"Uzbekistan Sum\",\n    \"countries\": [\n      \"Uzbekistan\"\n    ]\n  },\n  {\n    \"code\": \"VED\",\n    \"number\": \"926\",\n    \"digits\": 2,\n    \"currency\": \"Bolívar Soberano\",\n    \"countries\": [\n      \"Venezuela (Bolivarian Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"VES\",\n    \"number\": \"928\",\n    \"digits\": 2,\n    \"currency\": \"Bolívar Soberano\",\n    \"countries\": [\n      \"Venezuela (Bolivarian Republic Of)\"\n    ]\n  },\n  {\n    \"code\": \"VND\",\n    \"number\": \"704\",\n    \"digits\": 0,\n    \"currency\": \"Dong\",\n    \"countries\": [\n      \"Viet Nam\"\n    ]\n  },\n  {\n    \"code\": \"VUV\",\n    \"number\": \"548\",\n    \"digits\": 0,\n    \"currency\": \"Vatu\",\n    \"countries\": [\n      \"Vanuatu\"\n    ]\n  },\n  {\n    \"code\": \"WST\",\n    \"number\": \"882\",\n    \"digits\": 2,\n    \"currency\": \"Tala\",\n    \"countries\": [\n      \"Samoa\"\n    ]\n  },\n  {\n    \"code\": \"XAF\",\n    \"number\": \"950\",\n    \"digits\": 0,\n    \"currency\": \"CFA Franc BEAC\",\n    \"countries\": [\n      \"Cameroon\",\n      \"Central African Republic (The)\",\n      \"Chad\",\n      \"Congo (The)\",\n      \"Equatorial Guinea\",\n      \"Gabon\"\n    ]\n  },\n  {\n    \"code\": \"XAG\",\n    \"number\": \"961\",\n    \"digits\": 0,\n    \"currency\": \"Silver\",\n    \"countries\": [\n      \"Zz11_silver\"\n    ]\n  },\n  {\n    \"code\": \"XAU\",\n    \"number\": \"959\",\n    \"digits\": 0,\n    \"currency\": \"Gold\",\n    \"countries\": [\n      \"Zz08_gold\"\n    ]\n  },\n  {\n    \"code\": \"XBA\",\n    \"number\": \"955\",\n    \"digits\": 0,\n    \"currency\": \"Bond Markets Unit European Composite Unit (EURCO)\",\n    \"countries\": [\n      \"Zz01_bond Markets Unit European_eurco\"\n    ]\n  },\n  {\n    \"code\": \"XBB\",\n    \"number\": \"956\",\n    \"digits\": 0,\n    \"currency\": \"Bond Markets Unit European Monetary Unit (E.M.U.-6)\",\n    \"countries\": [\n      \"Zz02_bond Markets Unit European_emu-6\"\n    ]\n  },\n  {\n    \"code\": \"XBC\",\n    \"number\": \"957\",\n    \"digits\": 0,\n    \"currency\": \"Bond Markets Unit European Unit of Account 9 (E.U.A.-9)\",\n    \"countries\": [\n      \"Zz03_bond Markets Unit European_eua-9\"\n    ]\n  },\n  {\n    \"code\": \"XBD\",\n    \"number\": \"958\",\n    \"digits\": 0,\n    \"currency\": \"Bond Markets Unit European Unit of Account 17 (E.U.A.-17)\",\n    \"countries\": [\n      \"Zz04_bond Markets Unit European_eua-17\"\n    ]\n  },\n  {\n    \"code\": \"XCD\",\n    \"number\": \"951\",\n    \"digits\": 2,\n    \"currency\": \"East Caribbean Dollar\",\n    \"countries\": [\n      \"Anguilla\",\n      \"Antigua and Barbuda\",\n      \"Dominica\",\n      \"Grenada\",\n      \"Montserrat\",\n      \"Saint Kitts and Nevis\",\n      \"Saint Lucia\",\n      \"Saint Vincent and the Grenadines\"\n    ]\n  },\n  {\n    \"code\": \"XDR\",\n    \"number\": \"960\",\n    \"digits\": 0,\n    \"currency\": \"SDR (Special Drawing Right)\",\n    \"countries\": [\n      \"International Monetary Fund (Imf) \"\n    ]\n  },\n  {\n    \"code\": \"XOF\",\n    \"number\": \"952\",\n    \"digits\": 0,\n    \"currency\": \"CFA Franc BCEAO\",\n    \"countries\": [\n      \"Benin\",\n      \"Burkina Faso\",\n      \"Côte D'ivoire\",\n      \"Guinea-Bissau\",\n      \"Mali\",\n      \"Niger (The)\",\n      \"Senegal\",\n      \"Togo\"\n    ]\n  },\n  {\n    \"code\": \"XPD\",\n    \"number\": \"964\",\n    \"digits\": 0,\n    \"currency\": \"Palladium\",\n    \"countries\": [\n      \"Zz09_palladium\"\n    ]\n  },\n  {\n    \"code\": \"XPF\",\n    \"number\": \"953\",\n    \"digits\": 0,\n    \"currency\": \"CFP Franc\",\n    \"countries\": [\n      \"French Polynesia\",\n      \"New Caledonia\",\n      \"Wallis and Futuna\"\n    ]\n  },\n  {\n    \"code\": \"XPT\",\n    \"number\": \"962\",\n    \"digits\": 0,\n    \"currency\": \"Platinum\",\n    \"countries\": [\n      \"Zz10_platinum\"\n    ]\n  },\n  {\n    \"code\": \"XSU\",\n    \"number\": \"994\",\n    \"digits\": 0,\n    \"currency\": \"Sucre\",\n    \"countries\": [\n      \"Sistema Unitario De Compensacion Regional De Pagos \\\"Sucre\\\"\"\n    ]\n  },\n  {\n    \"code\": \"XTS\",\n    \"number\": \"963\",\n    \"digits\": 0,\n    \"currency\": \"Codes specifically reserved for testing purposes\",\n    \"countries\": [\n      \"Zz06_testing_code\"\n    ]\n  },\n  {\n    \"code\": \"XUA\",\n    \"number\": \"965\",\n    \"digits\": 0,\n    \"currency\": \"ADB Unit of Account\",\n    \"countries\": [\n      \"Member Countries of the African Development Bank Group\"\n    ]\n  },\n  {\n    \"code\": \"XXX\",\n    \"number\": \"999\",\n    \"digits\": 0,\n    \"currency\": \"The codes assigned for transactions where no currency is involved\",\n    \"countries\": [\n      \"Zz07_no_currency\"\n    ]\n  },\n  {\n    \"code\": \"YER\",\n    \"number\": \"886\",\n    \"digits\": 2,\n    \"currency\": \"Yemeni Rial\",\n    \"countries\": [\n      \"Yemen\"\n    ]\n  },\n  {\n    \"code\": \"ZAR\",\n    \"number\": \"710\",\n    \"digits\": 2,\n    \"currency\": \"Rand\",\n    \"countries\": [\n      \"Lesotho\",\n      \"Namibia\",\n      \"South Africa\"\n    ]\n  },\n  {\n    \"code\": \"ZMW\",\n    \"number\": \"967\",\n    \"digits\": 2,\n    \"currency\": \"Zambian Kwacha\",\n    \"countries\": [\n      \"Zambia\"\n    ]\n  },\n  {\n    \"code\": \"ZWG\",\n    \"number\": \"924\",\n    \"digits\": 2,\n    \"currency\": \"Zimbabwe Gold\",\n    \"countries\": [\n      \"Zimbabwe\"\n    ]\n  }\n];","/*\n\tFollows ISO 4217, https://www.iso.org/iso-4217-currency-codes.html\n\tSee https://www.currency-iso.org/dam/downloads/lists/list_one.xml\n\tData last updated 2024-06-25\n*/\n\nmodule.exports = \"2024-06-25\";","var first = require('first-match');\nvar nub = require('nub');\nvar data = require('./data');\nvar publishDate = require('./iso-4217-publish-date');\n\nvar code = function(code) {\n  code = code.toUpperCase();\n\n  return first(data, function(c) {\n    return c.code === code;\n  });\n};\nvar country = function(country) {\n  country = country.toLowerCase();\n\n  return data.filter(function(c) {\n    return (c.countries.map(function(c) { return c.toLowerCase(); } ) || []).indexOf(country) > -1;\n  });\n};\nvar number = function(number) {\n  return first(data, function(c) {\n    return c.number === String(number);\n  });\n};\nvar codes = function() {\n  return data.map(function(c) {\n    return c.code;\n  });\n};\nvar numbers = function() {\n  var items = data.map(function(c) {\n    return c.number;\n  });\n\n  // handle cases where number is undefined (e.g. XFU and XBT)\n  return items.filter(function(n) {\n    if (n) {\n      return n;\n    }\n  });\n};\nvar countries = function() {\n  var m = data\n    .filter(function(c) {\n      return c.countries;\n    })\n    .map(function(c) {\n      return c.countries;\n    });\n  return nub(Array.prototype.concat.apply([], m));\n};\n\nexports.code = code;\nexports.country = country;\nexports.number = number;\nexports.codes = codes;\nexports.numbers = numbers;\nexports.countries = countries;\nexports.publishDate = publishDate;\nexports.data = data;\n","import Dinero, { Currency } from \"dinero.js\";\nimport * as CurrencyCodes from \"currency-codes\";\n\nexport class CurrencyService {\n    /**\n     * Returns a formatted string representing a given amount with desired currency.\n     * @param currency The currency to represent the amount in.\n     * @param amount The amount in minor units to format.\n     */\n    formatCurrencyForDisplay(currency: Currency, amount: number) {\n        const currencyFormatSettings = {\n            amount: amount || 0,\n            currency,\n            precision: this.getPrecisionForCurrency(currency),\n        };\n        const formatter = Dinero(currencyFormatSettings);\n        return formatter.toFormat(this.getSpecialFormat(currency));\n    }\n\n    /**\n     * Get the number of decimal places expected in a currency string.\n     * @param currency The currency to determine precision for.\n     */\n    getPrecisionForCurrency(currency: Currency) {\n        const currencyCode = currency as string;\n        const currencyCodeData = CurrencyCodes.code(currencyCode);\n        if (!currencyCodeData) {\n            return 2;\n        }\n        return currencyCodeData.digits;\n    }\n\n    /**\n     * Sometimes default formatting will display format in a way that isn't natural\n     * for natives of a currency. This function is intended to capture those specific cases and return a format\n     * that makes the most sense.\n     * @param currency The currency to test for special format.\n     */\n    private getSpecialFormat(currency: Currency) {\n        const currencyCode = currency as string;\n        const currencyCodeData = CurrencyCodes.code(currencyCode);\n\n        // Special case for Chilean Peso (CLP) where the format is not standard.\n        if (currencyCodeData?.code === \"CLP\") {\n            return \"USD0,0\"; // USD will return the currency code given.\n        }\n\n        return undefined;\n    }\n}\n\nconst currencyService = new CurrencyService();\n\nexport class CurrencyContext {\n    private readonly presentmentCurrency?: Currency = undefined;\n    private readonly partnerCurrency: Currency;\n    private readonly rateFrom: number;\n    private readonly rateTo: number;\n\n    constructor(rateFrom: number, rateTo: number, partnerCurrency: Currency, presentmentCurrency?: Currency) {\n        this.presentmentCurrency = presentmentCurrency;\n        this.partnerCurrency = partnerCurrency;\n        this.rateFrom = rateFrom;\n        this.rateTo = rateTo;\n    }\n\n    /**\n     * @returns The currency code for the currency being used for monetary display.\n     */\n    code(): Currency {\n        return this.presentmentCurrency ? this.presentmentCurrency : this.partnerCurrency;\n    }\n\n    /**\n     * @returns true if the conversion is required, false otherwise.\n     */\n    conversionRequired(): boolean {\n        return this.presentmentCurrency !== undefined && this.code() !== this.partnerCurrency;\n    }\n\n    /**\n     * Converts a monetary value from a workflow in a partner specified currency\n     * to the units of the currency being used for display.\n     * @param amount The amount in minor units to convert.\n     * @returns\n     */\n    getConvertedSubunits(amount: number): number {\n        if (!this.conversionRequired()) {\n            return amount;\n        }\n        return Math.ceil(\n            this.subunits((this.units(amount, this.partnerCurrency) / this.rateFrom) * this.rateTo, this.code()),\n        );\n    }\n\n    /**\n     * Converts a monetary value from the database to the units of its currency.\n     */\n    private units(subUnits: number, currencyCode: Currency): number {\n        return subUnits / Math.pow(10, currencyService.getPrecisionForCurrency(currencyCode));\n    }\n\n    /**\n     * Converts a monetary value in units to the subunits of its currency.\n     */\n    private subunits(units: number, currencyCode: Currency): number {\n        return units * Math.pow(10, currencyService.getPrecisionForCurrency(currencyCode));\n    }\n}\n\nexport { currencyService };\n","import {\n    readTransactionsQuery,\n    updateTransactionWorkflowStateQuery,\n    createManyTransactionsMutation,\n    getIntegrationProductsQuery,\n    getIntegrationProductFromExternalIdsQuery,\n    getTransactionShareActionsQuery,\n    currentIntegrationQuery,\n    getWorkflowsQuery,\n    getMarketplaceThemeInstallConfigurationQuery,\n    getBundleForMarketplaceThemeQuery,\n    getTransactionForMarketplaceThemeQuery,\n    getTransactionQuery,\n    createOrderMutation,\n    currencyConversionQuery,\n    readIntegrationProductsQuery,\n} from \"./query\";\nimport { AssetManager, assetService } from \"./services/asset\";\nimport { persistenceService } from \"./services/persistence\";\nimport { getApplicationKey, graphQlManager, setApplicationKey, setBearerAuthenticationToken } from \"./services/server\";\nimport {\n    Bundle as BundleEntity,\n    BundleStakeholder,\n    Customer,\n    IntegrationProductResource,\n    StakeholderType,\n    Transaction,\n    Extendable,\n    Integration,\n    AddonHandle,\n    ShareAction,\n    Metafield,\n    BundlesFeed,\n    BundleTemplateStatus,\n    LayoutsState,\n    Workflow,\n    Theme,\n    GlobalPropertyState,\n    OrderItem,\n    Order,\n    Product,\n} from \"./types\";\nimport { ClientError, UnhandledBehaviorError } from \"./util/exception\";\nimport { ExperienceOptions, WorkflowExperience, WorkflowExperienceImpl } from \"./WorkflowExperience\";\nimport { StateMutationFunc } from \"./WorkflowManager\";\nimport { Bundle, BundleImpl } from \"./Bundle\";\nimport {\n    createBundleMutation,\n    customerBundlesFeedQuery,\n    deleteBundleQuery,\n    duplicateBundleMutation,\n    findBundleForTransactionsQuery,\n    getBundleQuery,\n    getBundlesAndStakeholdersForCustomerQuery,\n} from \"./Bundle/query\";\nimport { FlowService } from \"./flowService\";\nimport promiseCache from \"./services/promiseCache\";\nimport type { ThreeDPreviewService } from \"@repo/preview\";\nimport chunk from \"lodash.chunk\";\nimport { IntegrationProduct } from \"./integration\";\nimport { spiffCoreConfiguration } from \"./Configuration\";\nimport { isTokenExpired } from \"./services/design\";\nimport {\n    getCustomerQuery,\n    customerCreateMutation,\n    customerGenerateVerificationCodeMutation,\n    customerMetafieldsQuery,\n} from \"./customer\";\nimport { rehydrateSerializedLayout } from \"./LayoutsState\";\nimport type { ThemeInstallConfigurationGraphQl } from \"@repo/types\";\nimport { GraphQlClientWrapper } from \"./services/graphql\";\nimport { AuthenticationResultType } from \"@aws-sdk/client-cognito-identity-provider\";\nimport { userPoolManager } from \"./services/userPool\";\nimport { CurrencyContext } from \"./currency\";\nimport cloneDeep from \"lodash.clonedeep\";\n\nconst getWorkflowsInternal = async (ids: string[], options?: GetWorkflowGraphqlOptions): Promise<Workflow[]> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{ workflows: Workflow[] }>({\n        query: getWorkflowsQuery(options?.assets?.metadata || false),\n        errorPolicy: \"all\",\n        variables: {\n            ids,\n        },\n    });\n    if (response.error) {\n        throw response.error;\n    }\n    if (response.errors) {\n        response.errors.forEach((e) => console.error(e));\n        throw new Error(\"Unable to read workflows. Consult GraphQL errors.\");\n    }\n    if (response.data.workflows === undefined || response.data.workflows.length !== ids.length) {\n        throw new Error(`Unable to read workflows: ${response.errors ?? \"Length mismatch in response\"}`);\n    }\n    const workflows = cloneDeep(response.data.workflows);\n    workflows.forEach((workflow) => {\n        if (!workflow.finalizeStepConfig) {\n            workflow.finalizeStepConfig = {};\n        }\n        workflow.finalizeStepConfig.termsMarkdown =\n            workflow.finalizeStepConfig.termsMarkdown || (workflow as any).partner.termsMarkdown;\n    });\n    return workflows;\n};\n\nconst pickWorkflowFromPromise = async (id: string, promise: Promise<Workflow[]>): Promise<Workflow> => {\n    const workflows = await promise;\n    const workflow = workflows.find((workflow) => workflow.id === id);\n    if (!workflow) {\n        throw new Error(`Workflow not found: ${id}`);\n    }\n    return workflow;\n};\n\nexport const getWorkflows = async (ids: string[], options?: GetWorkflowGraphqlOptions): Promise<Workflow[]> => {\n    const existingPromises = ids.map((id) => promiseCache.get({ id, options }));\n    const uncachedIds = ids.filter((_id, index) => existingPromises[index] === undefined);\n    if (uncachedIds.length === 0) {\n        return Promise.all(existingPromises);\n    }\n    const getWorkflowsPromise = getWorkflowsInternal(uncachedIds, options);\n    const uncachedPromises = uncachedIds.map((id) =>\n        promiseCache.set({ id, options }, pickWorkflowFromPromise(id, getWorkflowsPromise)),\n    );\n    const filteredPromises = existingPromises.filter((promise) => promise !== undefined);\n    return await Promise.all(filteredPromises.concat(uncachedPromises));\n};\n\nexport const getWorkflow = async (id: string, options?: GetWorkflowGraphqlOptions): Promise<Workflow> => {\n    return (await getWorkflows([id], options))[0];\n};\n\nexport const getIntegrationProducts = async (ids: string[]): Promise<IntegrationProductResource[]> => {\n    const resp = await graphQlManager\n        .getShadowGraphqlClient()\n        .query<{ integrationProducts?: IntegrationProductResource[] }>({\n            query: readIntegrationProductsQuery,\n            variables: {\n                ids: ids,\n            },\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n        });\n    if (resp.errors) {\n        console.error(resp.errors);\n    }\n    return resp.data.integrationProducts || [];\n};\n\n/**\n * Options that can be used during instantiation of the SpiffCommerce Javascript Client.\n * Please refer to the documentation for more information.\n */\ninterface ClientOptions {\n    /**\n     * The client will use the provided application key to\n     * authenticate with the SpiffCommerce API. This key can be generated and replaced in Spiffcommerce Hub.\n     */\n    applicationKey?: string;\n\n    /**\n     * Force enable beta features, even if the partner does not have the flag turned on.\n     *\n     * This is generally reserved for development and testing.\n     */\n    enableBetaFeatures?: boolean;\n}\n\nexport interface GetBundleGraphqlAssetsOptions {\n    metadata?: boolean;\n}\n\nexport interface GetBundleGraphqlProductCollectionOptions {\n    eagerFetchProducts?: boolean;\n}\n\nexport interface GetBundleGraphqlOptions {\n    productCollection?: GetBundleGraphqlProductCollectionOptions;\n    assets?: GetBundleGraphqlAssetsOptions;\n    additionalHeaders?: { [key: string]: string };\n}\n\nexport interface GetBundleOptions {\n    /**\n     * Configuration for the graphQL request made for bundles. Allows for retrieval\n     * of additional data.\n     */\n    graphql?: GetBundleGraphqlOptions;\n    readonly?: boolean;\n}\n\nexport interface GetWorkflowGraphqlAssetsOptions {\n    metadata?: boolean;\n}\n\nexport interface GetWorkflowGraphqlOptions {\n    assets?: GetWorkflowGraphqlAssetsOptions;\n    bundleOwnerId?: string;\n}\n\nexport interface GetWorkflowOptionsBase {\n    /**\n     * An existing preview service to use, instead of creating a new one.\n     */\n    previewService?: ThreeDPreviewService;\n\n    /**\n     * Configuration related to the\n     * workflow and how the system interprets it.\n     */\n    workflowConfiguration?: {\n        /**\n         * False by default, when true the system will treat\n         * steps with a single variant\n         * as being renderable.\n         */\n        singleVariantsRenderable?: boolean;\n    };\n\n    /**\n     * Configuration for the graphQL request made for workflows. Allows for retrieval\n     * of additional data.\n     */\n    graphql?: GetWorkflowGraphqlOptions;\n}\n\nexport interface GetWorkflowFromTransactionOptions extends GetWorkflowOptionsBase {\n    /** The existing Transaction to use. */\n    transactionId: string;\n    /** If set to true, the workflow will display in a read-only mode. */\n    readOnly?: boolean;\n    /** An existing workflow state, if available. */\n    workflowState?: string;\n    type: \"transaction\";\n}\n\nexport interface GetNewWorkflowExperienceOptionsBase extends GetWorkflowOptionsBase {\n    /** A name for the new transaction. */\n    designName?: string;\n    /** The workflow to load. */\n    workflowId?: string;\n    /** An existing workflow state, if available. */\n    workflowState?: string;\n    /** An initial quantity to use in place of the default. */\n    quantity?: number;\n    /** Initial recipient details to use. */\n    recipient?: any;\n}\n\nexport interface GetWorkflowExperienceFromBlankOptions extends GetNewWorkflowExperienceOptionsBase {\n    type: \"blank\";\n}\n\nexport interface GetWorkflowExperienceFromIntegrationProductOptions extends GetNewWorkflowExperienceOptionsBase {\n    integrationProductId: string;\n    type: \"integration\";\n}\n\nexport interface GetWorkflowExperienceFromExternalProductOptions extends GetNewWorkflowExperienceOptionsBase {\n    /** The external ID associated with an integration. */\n    externalIntegrationId: string;\n    /** The ID of the product from the external system. */\n    externalProductId: string;\n    type: \"external\";\n}\n\nexport type GetNewWorkflowExperienceOptions =\n    | GetWorkflowExperienceFromBlankOptions\n    | GetWorkflowExperienceFromIntegrationProductOptions\n    | GetWorkflowExperienceFromExternalProductOptions;\n\nexport type GetWorkflowOptions = GetWorkflowFromTransactionOptions | GetNewWorkflowExperienceOptions;\n\ninterface ClientConfiguration {\n    hubUrl: string;\n    serverUrl: string;\n    servicesApiUrl: string;\n    marketplaceThemeInstallId?: string;\n    marketplaceThemeInstallConfigurationId?: string;\n    bearerAuthenticationToken?: string;\n    userPoolClientId?: string;\n    userPoolRegion?: string;\n    spiffRegion?: string; // dev | au | us\n}\n\n/**\n * The Spiff Commerce Javascript Client. Required for\n * creating workflow experiences.\n */\nexport class SpiffCommerceClient {\n    private options: ClientOptions;\n    private customer?: Customer;\n    private activeIntegration?: Promise<Integration> = undefined;\n    private marketplaceThemeInstallId?: string;\n    private marketplaceThemeInstallConfigurationId?: string;\n    private userPoolClientId?: string;\n    private userPoolRegion?: string;\n    private spiffRegion?: string;\n\n    constructor(options: ClientOptions) {\n        this.options = options;\n\n        this.options.applicationKey && setApplicationKey(this.options.applicationKey);\n\n        console.debug(\"------------------------\");\n        console.debug(\"Spiff Commerce Core SDK\");\n        console.debug(`Version: ${__SPIFF_CORE_VERSION__}`);\n        console.debug(`Application Key Provided: ${!!this.options.applicationKey}`);\n        console.debug(\"------------------------\");\n    }\n\n    configure(configuration: ClientConfiguration) {\n        spiffCoreConfiguration.setHubUrl(configuration.hubUrl);\n        spiffCoreConfiguration.setServerUrl(configuration.serverUrl);\n        spiffCoreConfiguration.setServicesApiUrl(configuration.servicesApiUrl);\n        this.marketplaceThemeInstallId = configuration.marketplaceThemeInstallId;\n        this.marketplaceThemeInstallConfigurationId = configuration.marketplaceThemeInstallConfigurationId;\n        this.userPoolClientId = configuration.userPoolClientId;\n        this.userPoolRegion = configuration.userPoolRegion;\n        this.spiffRegion = configuration.spiffRegion;\n        if (configuration.bearerAuthenticationToken) {\n            setBearerAuthenticationToken(configuration.bearerAuthenticationToken);\n        }\n        if (this.options.applicationKey) {\n            this.getIntegration();\n        }\n        if (this.spiffRegion && this.userPoolRegion && this.userPoolClientId) {\n            userPoolManager.init(this.spiffRegion, this.userPoolRegion, this.userPoolClientId);\n        }\n    }\n\n    /**\n     * @returns The asset manager allows for common operations related to assets\n     * and the Spiff Commerce platform.\n     */\n    getAssetManager(): AssetManager {\n        return assetService;\n    }\n\n    /**\n     * @returns A promise that resolves with a boolean indicating whether to use beta features.\n     */\n    async getBetaEnabled(): Promise<boolean> {\n        if (this.options.enableBetaFeatures) {\n            return true;\n        }\n        return (await this.getIntegration()).partner.beta === true;\n    }\n\n    getFlowService(): FlowService {\n        const appKey = getApplicationKey();\n        if (!appKey) throw new Error(\"Application key required to use Flow Service.\");\n        return new FlowService();\n    }\n\n    async getCurrencyContext(presentmentCurrency: string): Promise<CurrencyContext> {\n        const integration = await this.getIntegration();\n        const partnerCurrency = integration.partner.currencyCode;\n\n        const graphqlClient = graphQlManager.getShadowGraphqlClient();\n        // Fetch the transaction to retrieve the associated partner ID.\n        const conversionResponse = await graphqlClient.query<{\n            currencyConversion: { rateFrom: number; rateTo: number; timestamp: number };\n        }>({\n            query: currencyConversionQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"cache-first\",\n            variables: {\n                from: partnerCurrency,\n                to: presentmentCurrency,\n            },\n        });\n\n        const { rateFrom, rateTo } = conversionResponse.data.currencyConversion;\n\n        return new CurrencyContext(rateFrom, rateTo, partnerCurrency as any, presentmentCurrency as any);\n    }\n\n    async getIntegration(): Promise<Integration> {\n        if (this.activeIntegration) {\n            return this.activeIntegration;\n        }\n        if (!this.options.applicationKey) {\n            throw new Error(\"Cannot get current Integration without specifying an Application Key.\");\n        }\n        this.activeIntegration = getIntegration(this.options.applicationKey);\n        return this.activeIntegration;\n    }\n\n    async canUseAddon(addonHandle: AddonHandle): Promise<boolean> {\n        try {\n            const integration = await this.getIntegration();\n            return integration.partner.activeAddons?.includes(addonHandle) ?? false;\n        } catch (e) {\n            console.error(e);\n            return false;\n        }\n    }\n\n    clearCustomer() {\n        this.customer = undefined;\n    }\n\n    clearCustomerForTransaction(transactionId: string) {\n        const transactionCustomers = persistenceService.getMap(\"transactionCustomerIds\");\n        if (transactionCustomers?.has(transactionId)) {\n            transactionCustomers.delete(transactionId);\n            persistenceService.setMap(\"transactionCustomerIds\", transactionCustomers);\n        }\n    }\n\n    async customerHasBundleTemplates(emailAddress: string): Promise<boolean> {\n        const graphqlClient = graphQlManager.getShadowGraphqlClient();\n        const customerResponse = await graphqlClient.query<{ customer: Customer }>({\n            query: getCustomerQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                emailAddress,\n            },\n        });\n        const customer = customerResponse.data.customer;\n        if (!customer.id) {\n            return false;\n        }\n        return customer.hasBundleTemplates ?? false;\n    }\n\n    getStakeholderTypeForTransaction(transactionId: string): StakeholderType | undefined {\n        const transactionStakeholder = this.customer?.stakeholders?.find(\n            (stakeholder) => stakeholder.transaction?.id === transactionId,\n        );\n        if (!transactionStakeholder) {\n            return undefined;\n        }\n        return transactionStakeholder.type;\n    }\n\n    async getOrCreateCustomer(emailAddress: string): Promise<{\n        customer: Customer;\n        isAuthenticated: boolean;\n    }> {\n        this.customer = undefined;\n        const graphqlClient = graphQlManager.getShadowGraphqlClient();\n        // Grabs the customer from the API, using the application key to resolve the partner.\n        const customerResponse = await graphqlClient.query<{ customer: Customer }>({\n            query: getCustomerQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                emailAddress,\n            },\n        });\n        const customer = customerResponse.data.customer;\n        if (!customer.id) {\n            const customerCreateResponse = await graphqlClient.mutate<{ customerCreate: Customer }>({\n                mutation: customerCreateMutation,\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n                variables: {\n                    details: {\n                        emailAddress,\n                    },\n                },\n            });\n            const createdCustomer = customerCreateResponse.data?.customerCreate;\n            if (!createdCustomer) {\n                throw new Error(\"Unable to create customer.\");\n            }\n            this.storeCustomer(createdCustomer);\n            this.customer = createdCustomer;\n            return {\n                customer: createdCustomer,\n                isAuthenticated: false,\n            };\n        }\n        this.storeCustomer(customer);\n        const authResult = await this.reloadLoggedInCustomer();\n        return {\n            customer: this.customer || customer,\n            isAuthenticated: authResult,\n        };\n    }\n\n    getCustomer() {\n        return this.customer;\n    }\n\n    /**\n     * Check if a customer is logged in.\n     * If they are, set the customer object.\n     * This is how we resume sessions between loads.\n     */\n    async reloadLoggedInCustomer(): Promise<boolean> {\n        // If nothing in local storage, return false.\n        const lastRefreshed = localStorage.getItem(\"last-refreshed-cognito-tokens\");\n        const existingTokensString = localStorage.getItem(\"cognito-tokens\");\n        const emailAddress = localStorage.getItem(\"cognito-email\");\n        if (!lastRefreshed || !existingTokensString || !emailAddress) {\n            return false;\n        }\n\n        // If we need to refresh the token, do it.\n        const existingTokens: AuthenticationResultType = JSON.parse(existingTokensString);\n        const nowSeconds = new Date().getTime() / 1000;\n        if (!existingTokens.ExpiresIn || existingTokens.ExpiresIn < nowSeconds - parseInt(lastRefreshed)) {\n            const response = await userPoolManager.refreshTokens();\n            if (response?.AuthenticationResult) {\n                localStorage.setItem(\"last-refreshed-cognito-tokens\", `${new Date().getTime() / 1000}`);\n                existingTokens.AccessToken = response.AuthenticationResult.AccessToken;\n                localStorage.setItem(\"cognito-tokens\", JSON.stringify(existingTokens));\n            } else {\n                this.logOut();\n                console.error(\"Failed to refresh tokens.\");\n                return false;\n            }\n        }\n\n        // Check that the customer ID is the expected one.\n        const customerResponse = await graphQlManager.getShadowGraphqlClient().query<{ customer: Customer }>({\n            query: getCustomerQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                emailAddress,\n            },\n        });\n        const customer = customerResponse.data.customer;\n\n        if (!customer.id) {\n            console.error(\"Failed to get customer.\");\n            return false;\n        }\n        this.customer = customer;\n\n        return true;\n    }\n\n    /**\n     * Generate an email code to allow logging in as a Spiff user.\n     */\n    async generateVerificationCode(emailAddress: string): Promise<void> {\n        // First we invoke the generate method of the old flow, for two outcomes:\n        // 1. To create a customer for the given user and partner if it doesn't exist.\n        // 2. To generate the login code in the backend.\n        await graphQlManager.getShadowGraphqlClient().mutate({\n            mutation: customerGenerateVerificationCodeMutation,\n            variables: {\n                emailAddress,\n            },\n        });\n\n        await userPoolManager.generateCode(emailAddress);\n    }\n\n    /**\n     * Verify an email code to log in as a Spiff user.\n     * Always returns true if it doesn't throw.\n     */\n    async verifyCode(emailAddress: string, code: string): Promise<boolean> {\n        const partnerId = (await this.getIntegration()).partner.id || \"\";\n        const response = await userPoolManager.verifyCode(emailAddress, code, partnerId);\n        if (response?.AuthenticationResult) {\n            localStorage.setItem(\"last-refreshed-cognito-tokens\", `${new Date().getTime() / 1000}`);\n            localStorage.setItem(\"cognito-tokens\", JSON.stringify(response.AuthenticationResult));\n            localStorage.setItem(\"cognito-email\", emailAddress);\n\n            const customerResponse = await graphQlManager.getShadowGraphqlClient().query<{ customer: Customer }>({\n                query: getCustomerQuery,\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n                variables: {\n                    emailAddress,\n                },\n            });\n            const customer = customerResponse.data.customer;\n            if (!customer.id) {\n                throw new Error(\"Failed to get customer.\");\n            }\n            this.customer = customer;\n            return true;\n        } else {\n            throw new Error();\n        }\n    }\n\n    /**\n     * Log out the currently logged-in Spiff user.\n     */\n    async logOut(): Promise<void> {\n        localStorage.removeItem(\"last-refreshed-cognito-tokens\");\n        localStorage.removeItem(\"cognito-tokens\");\n        localStorage.removeItem(\"cognito-email\");\n        this.clearCustomer();\n    }\n\n    // Get a Cognito bearer token from local storage, attempting to refresh if it's old.\n    async loggedInBearerToken(): Promise<string> {\n        const lastRefreshed = localStorage.getItem(\"last-refreshed-cognito-tokens\");\n        const existingTokensString = localStorage.getItem(\"cognito-tokens\");\n        if (!lastRefreshed || !existingTokensString) {\n            throw new Error(\"No token data in storage.\");\n        }\n        const existingTokens: AuthenticationResultType = JSON.parse(existingTokensString);\n        const nowSeconds = new Date().getTime() / 1000;\n        const expired = !existingTokens?.AccessToken || isTokenExpired(existingTokens.AccessToken);\n        if (!existingTokens.ExpiresIn || existingTokens.ExpiresIn < nowSeconds - parseInt(lastRefreshed) || expired) {\n            const response = await userPoolManager.refreshTokens();\n            if (response?.AuthenticationResult) {\n                localStorage.setItem(\"last-refreshed-cognito-tokens\", `${new Date().getTime() / 1000}`);\n                existingTokens.AccessToken = response.AuthenticationResult.AccessToken;\n                localStorage.setItem(\"cognito-tokens\", JSON.stringify(existingTokens));\n            } else {\n                this.logOut();\n                throw new Error(\"Failed to refresh tokens.\");\n            }\n        }\n        if (!existingTokens.AccessToken) {\n            throw new Error(\"No bearer token in storage.\");\n        }\n        return existingTokens.AccessToken;\n    }\n\n    async getCustomerMetafields(): Promise<Metafield[]> {\n        if (!this.customer?.id) {\n            throw new Error(\"Customer must be logged in before calling this function.\");\n        }\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ metafields: Metafield[] }>({\n            query: customerMetafieldsQuery,\n            variables: {\n                id: this.customer.id,\n            },\n        });\n        return response.data.metafields;\n    }\n\n    /**\n     * @param collectionId Optional: The id of the product collection that the bundle can use.\n     * @returns A bundle to be used for grouping and operating on large amounts of workflow experiences.\n     */\n    async getNewBundle(\n        collectionId?: string,\n        initialMetadata?: { [key: string]: string },\n        options?: GetBundleOptions,\n    ): Promise<Bundle> {\n        const response = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleCreate: BundleEntity }>({\n            mutation: createBundleMutation(options?.graphql?.productCollection?.eagerFetchProducts || false),\n            variables: {\n                collectionId,\n                initialMetadata: initialMetadata\n                    ? Object.entries(initialMetadata).map((k, _idx) => {\n                          return { key: k[0], value: k[1] };\n                      })\n                    : undefined,\n                marketplaceThemeInstallId: this.marketplaceThemeInstallId,\n                marketplaceThemeInstallConfigurationId: this.marketplaceThemeInstallConfigurationId,\n            },\n            fetchPolicy: \"no-cache\",\n        });\n        const bundleEntity = response.data?.bundleCreate;\n        if (!bundleEntity?.id) {\n            throw new Error(`Unable to create bundle`);\n        }\n\n        const bundlePartnerMap = persistenceService.getMap(\"bundlePartnerIds\") || new Map();\n        bundlePartnerMap.set(bundleEntity.id!, bundleEntity.partner!.id);\n        persistenceService.setMap(\"bundlePartnerIds\", bundlePartnerMap);\n\n        // Store the bundle owner id in local storage.\n        const ownerMap = persistenceService.getMap(\"bundleOwnerIds\") || new Map();\n        ownerMap.set(bundleEntity.id!, bundleEntity.bundleOwnerId!);\n        persistenceService.setMap(\"bundleOwnerIds\", ownerMap);\n        // Return a new bundle instance for this bundle entity.\n        const newBundle = new BundleImpl(this, bundleEntity, undefined, undefined, bundleEntity.bundleOwnerId, {\n            eagerFetchProducts: options?.graphql?.productCollection?.eagerFetchProducts,\n        });\n        await newBundle.getInitializationPromise();\n        return newBundle;\n    }\n\n    /**\n     * Retrieves an existing bundle from the API, by id.\n     * @param bundleId The id of the bundle to retrieve.\n     * @param previewService Optional: A reference to an existing preview service to use. This can be assigned manually later.\n     * @param graphqlOptions Optional: Options to configure loading the bundle.\n     * @param options Optional: Options to configure loading the bundle.\n     * @returns A bundle to be used for grouping and operating on large amounts of workflow experiences.\n     */\n    async getExistingBundle(\n        bundleId: string,\n        previewService?: ThreeDPreviewService,\n        /**\n         * @deprecated use GetBundleOptions instead. This attribute will be removed in the future.\n         */\n        graphqlOptions?: GetBundleGraphqlOptions,\n        options?: GetBundleOptions,\n        transactionLoadProgressCallback?: (loaded: number, total: number) => void,\n    ): Promise<Bundle> {\n        const ownerMap = persistenceService.getMap(\"bundleOwnerIds\");\n        const bundleOwnerId = ownerMap?.get(bundleId);\n\n        const extraHeaders: { [key: string]: string } = {};\n        try {\n            const token = await this.loggedInBearerToken();\n            extraHeaders[\"Authorization\"] = `Bearer ${token}`;\n        } catch (e) {\n            // Hack to get the token from editor's amplify.\n            const keys = Object.entries(localStorage);\n            const jwtTokenKey =\n                keys.find(([k, _]) => {\n                    return k.startsWith(\"CognitoIdentityServiceProvider\") && k.endsWith(\"idToken\");\n                })?.[0] || \"\";\n            const jwtToken = localStorage.getItem(jwtTokenKey);\n            if (jwtToken && !isTokenExpired(jwtToken)) {\n                extraHeaders[\"Authorization\"] = `Bearer ${jwtToken}`;\n            }\n        }\n\n        // TODO: Update customer auth to store bundle stakeholders as well.\n        const contextHeaders = {\n            bundleOwnerId,\n            ...extraHeaders,\n            ...options?.graphql?.additionalHeaders,\n        };\n        const response = await graphQlManager.getShadowGraphqlClient().query<{\n            globalPropertyState: GlobalPropertyState;\n            bundles: BundleEntity[];\n        }>({\n            query: getBundleQuery(options?.graphql?.productCollection?.eagerFetchProducts || false),\n            variables: {\n                id: bundleId,\n            },\n            fetchPolicy: \"no-cache\",\n            context: {\n                headers: contextHeaders,\n            },\n        });\n        if (!response.data?.bundles || response.data?.bundles.length === 0 || !response.data?.bundles[0]) {\n            throw new Error(`Unable to find bundle: ${bundleId}`);\n        }\n        const bundleEntity = response.data?.bundles[0];\n\n        const bundlePartnerMap = persistenceService.getMap(\"bundlePartnerIds\") || new Map();\n        bundlePartnerMap.set(bundleEntity.id!, bundleEntity.partner!.id);\n        persistenceService.setMap(\"bundlePartnerIds\", bundlePartnerMap);\n\n        const bundleWrapper = new BundleImpl(\n            this,\n            bundleEntity,\n            previewService,\n            graphqlOptions,\n            bundleOwnerId,\n            {\n                additionalHeaders: options?.graphql?.additionalHeaders,\n                eagerFetchProducts: options?.graphql?.productCollection?.eagerFetchProducts,\n                existingGlobalPropertyState: response.data.globalPropertyState,\n                readonly: options?.readonly,\n            },\n            transactionLoadProgressCallback,\n        );\n        await bundleWrapper.getInitializationPromise();\n        return bundleWrapper;\n    }\n\n    /**\n     * @param bundleId The id of the bundle to copy. The current context must have write access to the this bundle in order to duplicate it.\n     * @param template Optional: Whether to mark the new bundle as a template. Default is false.\n     * @param duplicateTransactions Optional: Whether to also duplicate the original bundle's transactions. Default is true.\n     * @returns A bundle to be used for grouping and operating on large amounts of workflow experiences.\n     */\n    async duplicateBundle(\n        bundleId: string,\n        template?: boolean,\n        duplicateTransactions?: boolean,\n        options?: GetBundleOptions,\n    ): Promise<() => Promise<Bundle>> {\n        const bundleContextHeaders = await getContextHeadersForBundle(bundleId);\n        const contextHeaders = {\n            ...bundleContextHeaders,\n            ...options?.graphql?.additionalHeaders,\n        };\n\n        const response = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleDuplicate: BundleEntity }>({\n            mutation: duplicateBundleMutation(),\n            variables: {\n                id: bundleId,\n                template: template,\n                marketplaceThemeInstallId: this.marketplaceThemeInstallId,\n                marketplaceThemeInstallConfigurationId: this.marketplaceThemeInstallConfigurationId,\n                duplicateTransactions: duplicateTransactions,\n            },\n            context: {\n                headers: contextHeaders,\n            },\n            fetchPolicy: \"no-cache\",\n        });\n        const bundleEntity = response.data?.bundleDuplicate;\n        if (!bundleEntity?.id) {\n            throw new Error(`Unable to duplicate bundle`);\n        }\n\n        const bundlePartnerMap = persistenceService.getMap(\"bundlePartnerIds\") || new Map();\n        bundlePartnerMap.set(bundleEntity.id!, bundleEntity.partner!.id);\n        persistenceService.setMap(\"bundlePartnerIds\", bundlePartnerMap);\n\n        // Store the bundle owner id in local storage.\n        const bundleOwnerMap = persistenceService.getMap(\"bundleOwnerIds\") || new Map();\n        bundleOwnerMap.set(bundleEntity.id!, bundleEntity.bundleOwnerId!);\n        persistenceService.setMap(\"bundleOwnerIds\", bundleOwnerMap);\n\n        // Return a function that can create a new bundle instance for this bundle entity.\n        return async () => {\n            const newBundle = await this.getExistingBundle(bundleEntity.id!, undefined, undefined, {\n                graphql: {\n                    productCollection: {\n                        eagerFetchProducts: options?.graphql?.productCollection?.eagerFetchProducts || false,\n                    },\n                },\n            });\n            return newBundle;\n        };\n    }\n\n    /**\n     * Fetches information about the currently authenticated customer's bundles.\n     * NOTE: This does not initialize a bundle for active use.\n     * You must call either `getExistingBundle` or `duplicateBundle` to actually interact with a bundle.\n     * @param options Options to configure the request.\n     * @returns A promise that resolves with an object containing:\n     * `items` - The bundles that matched the request.\n     * `total` - The total number of bundles on the server that match this query.\n     */\n    async getBundlesForCustomer(options: {\n        /** Whether to include each bundle's metadata in the response. */\n        includeMetadata?: boolean;\n        /** The maximum amount of bundles to return in the response. */\n        limit: number;\n        /** The amount of items to skip over in the server query. */\n        offset: number;\n        /** Undefined: Any bundle, template or not. True: The bundle must be a template. False: The bundle must not be a template */\n        template?: boolean;\n        /** Undefined: Any bundle, ordered or not. True. Just the ordered ones. False: Just the unordered ones. */\n        ordered?: boolean;\n        /** The status of the bundle template; \"Active\" or \"Draft\". */\n        templateStatus?: BundleTemplateStatus;\n    }): Promise<BundlesFeed> {\n        if (!this.customer?.id) {\n            throw new Error(\"Customer not authenticated.\");\n        }\n        const { includeMetadata, ...variables } = options;\n        const result = await graphQlManager.getShadowGraphqlClient().query<{ customerBundlesFeed: BundlesFeed }>({\n            query: customerBundlesFeedQuery(includeMetadata ?? false),\n            variables: {\n                ...variables,\n                id: this.customer.id!,\n            },\n            fetchPolicy: \"no-cache\",\n        });\n        return result.data.customerBundlesFeed;\n    }\n\n    /**\n     * Retrieves all existing bundle stakeholders from the API, for the currently authenticated customer.\n     * @returns An array of bundle stakeholders.\n     */\n    async getBundleStakeholders(): Promise<BundleStakeholder[]> {\n        if (!this.customer) {\n            throw new Error(\"Customer not authenticated.\");\n        }\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ customers: Customer[] }>({\n            query: getBundlesAndStakeholdersForCustomerQuery,\n            variables: {\n                id: this.customer.id,\n            },\n            fetchPolicy: \"no-cache\",\n        });\n        if (!response.data?.customers || response.data.customers.length === 0) {\n            throw new Error(\"Unable to find customer.\");\n        }\n        const customer = response.data.customers[0];\n        const stakeholders = customer.bundleStakeholders || [];\n        const bundlePartnerMap = persistenceService.getMap(\"bundlePartnerIds\") || new Map();\n        stakeholders.forEach((stakeholder) => {\n            if (stakeholder.bundle?.id && stakeholder.bundle.partner?.id) {\n                bundlePartnerMap.set(stakeholder.bundle.id, stakeholder.bundle.partner.id);\n            }\n        });\n        persistenceService.setMap(\"bundlePartnerIds\", bundlePartnerMap);\n        return stakeholders;\n    }\n\n    /**\n     * Creates a new instance of WorkflowExperience. A high level wrapper for workflows.\n     * @param options Options to configure loading the transaction and workflow.\n     * @param previewServiceConstructor A function called during initialization. Takes a class implementing ThreeDPreviewService in return.\n     * @returns A workflow experience configured as requested.\n     */\n    async getWorkflowExperience(\n        options: GetWorkflowOptions,\n        previewServiceConstructor?: (workflow: Workflow) => ThreeDPreviewService,\n    ): Promise<WorkflowExperience> {\n        if (!options)\n            throw new Error(\"getWorkflowExperience has been called without an options object! This is not supported.\");\n\n        // We request the construction of a new workflow experience.\n        const result = await this.getWorkflowExperiences([options], options.graphql);\n        const exp = result[0];\n\n        // Handle the preview service injection if requested.\n        const instantiatedWorkflow = exp.getWorkflow();\n        if (previewServiceConstructor && !instantiatedWorkflow) {\n            console.error(\"No workflow instantiated when trying to create preview service.\");\n        }\n        if (previewServiceConstructor && instantiatedWorkflow) {\n            await exp.getWorkflowManager().injectIntoPreviewService(previewServiceConstructor(instantiatedWorkflow));\n        }\n\n        return result[0];\n    }\n\n    /**\n     * Gets multiple workflow experiences at once.\n     * @param optionsArray An array of options to configure loading the transactions and workflows.\n     * NOTE: The `previewService` field on the option is currently unsupported in this function, as loading multiple models at once will likely cause performance issues.\n     * @param graphqlOptions Options to configure loading the workflows.\n     * @returns An array of workflow experiences configured as requested.\n     */\n    async getWorkflowExperiences(\n        optionsArray: GetWorkflowOptions[],\n        graphqlOptions?: GetWorkflowGraphqlOptions,\n        transactionInitializedCallback?: () => void,\n        transactionLoadProgressCallback?: (loaded: number, total: number) => void,\n    ): Promise<WorkflowExperience[]> {\n        if (optionsArray.length === 0) {\n            throw new ClientError(\"No options provided!\");\n        }\n        const indexedOptions = optionsArray.map((x, i) => ({ option: x, index: i }));\n        const transactionOptions = indexedOptions.filter((x) => x.option.type === \"transaction\") as {\n            option: GetWorkflowFromTransactionOptions;\n            index: number;\n        }[];\n        const createOptions = indexedOptions.filter(\n            (x) => x.option.type === \"integration\" || x.option.type === \"external\" || x.option.type === \"blank\",\n        ) as {\n            option: GetNewWorkflowExperienceOptions;\n            index: number;\n        }[];\n\n        // Split into batches\n        const batchSize = 50;\n        const batchedReadTransactions = chunk(transactionOptions, batchSize);\n        const batchedCreateOptions = chunk(createOptions, batchSize);\n        let amtLoaded = 0;\n\n        const graphQlClient = graphQlManager.getShadowGraphqlClient();\n        const readTransactions = async (\n            batch: {\n                option: GetWorkflowFromTransactionOptions;\n                index: number;\n            }[],\n        ) => {\n            if (batch.length === 0) {\n                return [];\n            }\n            const transactionIds = batch.map((x) => x.option.transactionId);\n            const response = await graphQlClient.query<{ transactions: Transaction[] }>({\n                query: readTransactionsQuery,\n                variables: {\n                    ids: transactionIds,\n                },\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n            });\n            const transactions = response.data.transactions;\n            amtLoaded = amtLoaded + transactions.length;\n            if (transactionLoadProgressCallback) {\n                transactionLoadProgressCallback(amtLoaded, transactionOptions.length);\n            }\n            if (transactions.length !== batch.length) {\n                const reason = response.errors?.[0]?.message || \"Unknown error\";\n                throw new ClientError(`Not all transactions were found: ${reason}`);\n            }\n            if (!this.activeIntegration && transactions[0].integrationProduct?.integration) {\n                // TODO: Move this to a separate request. We don't want or need to fetch all integration details on every single transaction.\n                this.activeIntegration = Promise.resolve(transactions[0].integrationProduct.integration);\n            }\n            return transactions.map((transaction, idx) => ({\n                transaction,\n                workflowId: transaction.workflowId!,\n                readOnly: batch.find((x) => x.option.transactionId === transaction.id)?.option.readOnly ?? false,\n                index: batch[idx].index,\n            }));\n        };\n        const createTransactions = async (\n            batch: {\n                option: GetNewWorkflowExperienceOptions;\n                index: number;\n            }[],\n        ) => {\n            if (batch.length === 0) {\n                return [];\n            }\n\n            const response = await graphQlClient.mutate<{ transactionCreateMany: Transaction[] }>({\n                mutation: createManyTransactionsMutation,\n                variables: {\n                    inputs: batch.map((x) => ({\n                        integrationProductId:\n                            x.option.type === \"integration\" ? x.option.integrationProductId : undefined,\n                        externalIntegrationId:\n                            x.option.type === \"external\" ? x.option.externalIntegrationId : undefined,\n                        externalProductId: x.option.type === \"external\" ? x.option.externalProductId : undefined,\n                        workflowId: x.option.workflowId,\n                        designName: x.option.designName,\n                        claim: true,\n                        quantity: x.option.quantity,\n                        recipient: x.option.recipient,\n                    })),\n                    marketplaceThemeInstallId: this.marketplaceThemeInstallId,\n                    marketplaceThemeInstallConfigurationId: this.marketplaceThemeInstallConfigurationId,\n                },\n                errorPolicy: \"all\",\n                fetchPolicy: \"no-cache\",\n            });\n            const transactions = response.data?.transactionCreateMany;\n            if (!transactions || transactions.length === 0) {\n                const reason = response.errors?.[0]?.message || \"Unknown error\";\n                throw new ClientError(`Failed to create transactions: ${reason}`);\n            }\n            amtLoaded = amtLoaded + transactions.length;\n            if (transactionLoadProgressCallback) {\n                transactionLoadProgressCallback(amtLoaded, transactionOptions.length);\n            }\n            return transactions.map((transaction, idx) => ({\n                transaction,\n                workflowId: transaction.workflowId,\n                readOnly: false,\n                index: batch[idx].index,\n            }));\n        };\n\n        // Fetch all transactions\n        const transactionResults = (\n            await Promise.all([\n                ...batchedReadTransactions.map(readTransactions),\n                ...batchedCreateOptions.map(createTransactions),\n            ])\n        ).flat();\n\n        const integrationProductIds = [\n            ...new Set(transactionResults.map((x) => x.transaction.integrationProductId)),\n        ].filter((x) => x !== undefined) as string[];\n\n        const workflowIds = [...new Set(transactionResults.map((x) => x.workflowId))].filter(\n            (x) => x !== undefined,\n        ) as string[];\n\n        const [integrationProducts, workflows] = await Promise.all([\n            (async () =>\n                integrationProductIds.length > 0 ? await getIntegrationProducts(integrationProductIds) : [])(),\n            (async () => (workflowIds.length > 0 ? await getWorkflows(workflowIds, graphqlOptions) : []))(),\n        ]);\n        const integrationProductMap = new Map(integrationProducts.map((x) => [x.id, x]));\n        const workflowMap = new Map(workflows.map((x) => [x.id, x]));\n\n        const experienceOptionsPromises = transactionResults.map(async (transactionResult) => {\n            const { transaction, workflowId, readOnly, index } = transactionResult;\n            const workflow = workflowId ? workflowMap.get(workflowId) : undefined;\n            const options = optionsArray[index];\n\n            if (transaction.integrationProductId) {\n                const p = integrationProductMap.get(transaction.integrationProductId);\n                transaction.integrationProduct = p;\n                transaction.product = p?.product;\n                if (!transaction.integrationProduct) {\n                    console.error(\"failed to find transaction's product\");\n                }\n            }\n\n            // Persist the owner ID for use when updating (only when creating a new transaction)\n            // Note: if anything is awaited you *must* refetch this object, since other promises may update it.\n            const ownerMap = persistenceService.getMap(\"transactionOwnerIds\") || new Map();\n            if (!ownerMap.get(transaction.id) && transaction.transactionOwnerId) {\n                ownerMap.set(transaction.id, transaction.transactionOwnerId);\n                persistenceService.setMap(\"transactionOwnerIds\", ownerMap);\n            }\n            const transactionOwnerId = ownerMap.get(transaction.id) || undefined;\n            const graphQlClientWrapper = new GraphQlClientWrapper({\n                onMutate: () => {\n                    return { context: { transactionOwnerId, bundleOwnerId: graphqlOptions?.bundleOwnerId } };\n                },\n                onQuery: () => {\n                    return { context: { transactionOwnerId, bundleOwnerId: graphqlOptions?.bundleOwnerId } };\n                },\n            });\n            const workflowExperienceOptions: ExperienceOptions = {\n                workflow,\n                transaction,\n                singleVariantsRenderable: options?.workflowConfiguration?.singleVariantsRenderable,\n                stateMutationFunc: !readOnly\n                    ? async (options) => {\n                          return this.updateTransactionState({\n                              ...options,\n                              context: { transactionOwnerId, bundleOwnerId: graphqlOptions?.bundleOwnerId },\n                          });\n                      }\n                    : async () => {\n                          throw new UnhandledBehaviorError(\"State mutation is forbidden in read only mode!\");\n                      },\n                graphQlClient: () => {\n                    return graphQlClientWrapper;\n                },\n                readOnly,\n                isReloadedTransaction: options.type === \"transaction\",\n            };\n\n            // We either reload initial state or we create a new one.\n            if (options.type === \"transaction\" && transaction.workflowState) {\n                // Reloading an existing transaction.\n                const reloadedState: LayoutsState = JSON.parse(transaction.workflowState);\n                await rehydrateSerializedLayout(reloadedState);\n                workflowExperienceOptions.reloadedState = reloadedState;\n            } else if (!readOnly && options.workflowState) {\n                // Manual workflow state passed in\n                const reloadedState: LayoutsState = JSON.parse(options.workflowState);\n                await rehydrateSerializedLayout(reloadedState);\n                workflowExperienceOptions.reloadedState = reloadedState;\n            }\n\n            workflowExperienceOptions.delayWorkflowStateSync = true;\n\n            return { experienceOptions: workflowExperienceOptions, index, options };\n        });\n\n        const experienceOptions = await Promise.all(experienceOptionsPromises);\n        const sortedExperienceOptions = experienceOptions.sort((a, b) => a.index - b.index);\n\n        // Simultaneously trigger N transaction update graphql calls, one for each workflow manager's initialization promise.\n        let experiences: WorkflowExperienceImpl[] = [];\n        for (const x of sortedExperienceOptions) {\n            const { experienceOptions, options } = x;\n            const we = new WorkflowExperienceImpl(this, experienceOptions);\n            await we.getWorkflowManager().getInitializationPromise();\n            if (transactionInitializedCallback) {\n                transactionInitializedCallback();\n            }\n            if (options.type !== \"transaction\" && this.customer) {\n                await we.attachCustomerDetails({ email: this.customer.emailAddress });\n            }\n            experiences = [...experiences, we];\n            we.getWorkflowManager().setWorkflowStateSyncEnabled(true);\n        }\n\n        return experiences;\n    }\n\n    /**\n     * A function used to synchronize transaction state with the server.\n     * @param options New state details. To be spread into the query.\n     * @returns\n     */\n    private updateTransactionState: StateMutationFunc = async (options) => {\n        try {\n            return graphQlManager.getShadowGraphqlClient().mutate({\n                ...options,\n                mutation: updateTransactionWorkflowStateQuery,\n            });\n        } catch (error) {\n            console.error(error);\n            throw new ClientError(\"Critical - Unable to synchronize workflow state with server.\");\n        }\n    };\n\n    storeCustomer(customer: Customer) {\n        const partnerCustomerMap = persistenceService.getMap(\"partnerCustomerIds\") || new Map();\n        partnerCustomerMap.set(customer.partner!.id, customer.id);\n        persistenceService.setMap(\"partnerCustomerIds\", partnerCustomerMap);\n    }\n\n    async getIntegrationProductById(\n        integrationProductId: string,\n        fetchIntegrationsOnProduct?: boolean,\n    ): Promise<IntegrationProduct> {\n        const graphQlClient = graphQlManager.getShadowGraphqlClient();\n        const response = await graphQlClient.query<{ integrationProducts: IntegrationProductResource[] }>({\n            query: getIntegrationProductsQuery(fetchIntegrationsOnProduct),\n            variables: {\n                ids: [integrationProductId!],\n            },\n            fetchPolicy: \"no-cache\",\n            errorPolicy: \"all\",\n        });\n        const integrationProducts = response.data?.integrationProducts;\n        if (!integrationProducts || integrationProducts.length === 0 || !integrationProducts[0]?.id) {\n            throw new Error(\"Integration product not found.\");\n        }\n        return new IntegrationProduct(integrationProducts[0]);\n    }\n\n    async getIntegrationProductFromExternalIds(\n        externalIntegrationId: string,\n        externalProductId: string,\n        fetchIntegrationsOnProduct?: boolean,\n    ): Promise<IntegrationProduct> {\n        const graphQlClient = graphQlManager.getShadowGraphqlClient();\n        const response = await graphQlClient.query<{ integrationProductFromExternalIds: IntegrationProductResource }>({\n            query: getIntegrationProductFromExternalIdsQuery(fetchIntegrationsOnProduct),\n            variables: {\n                externalProductId: externalProductId!,\n                externalIntegrationId: externalIntegrationId!,\n            },\n            fetchPolicy: \"no-cache\",\n            errorPolicy: \"all\",\n        });\n        const integrationProduct = response.data?.integrationProductFromExternalIds;\n        if (!integrationProduct?.id) {\n            throw new Error(\"Integration product not found.\");\n        }\n        return new IntegrationProduct(integrationProduct);\n    }\n\n    async getIntegrationProduct(\n        options:\n            | Extendable<{\n                  type: \"integration\";\n                  integrationProductId: string;\n              }>\n            | Extendable<{\n                  type: \"external\";\n                  externalIntegrationId: string;\n                  externalProductId: string;\n              }>,\n    ): Promise<IntegrationProduct> {\n        if (options.type === \"integration\") {\n            return this.getIntegrationProductById(options.integrationProductId);\n        }\n        return this.getIntegrationProductFromExternalIds(options.externalIntegrationId, options.externalProductId);\n    }\n\n    async getShareActionsForTransaction(transactionId: string): Promise<ShareAction[] | undefined> {\n        const ownerMap = persistenceService.getMap(\"transactionOwnerIds\") || new Map();\n        const transactionOwnerId = ownerMap.get(transactionId) || undefined;\n        const response = await graphQlManager.getShadowGraphqlClient().query<{ transactions: Transaction[] }>({\n            query: getTransactionShareActionsQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                id: transactionId,\n            },\n            context: {\n                transactionOwnerId,\n            },\n        });\n        if (!response.data.transactions || response.data.transactions.length !== 1) {\n            throw new Error(`Failed to fetch share actions for transaction: ${transactionId}`);\n        }\n        return response.data.transactions[0].transactionShareActions;\n    }\n\n    async placeOrder(orderItems: OrderItem[]): Promise<Order> {\n        const orderCreateResponse = await graphQlManager\n            .getShadowGraphqlClient()\n            .mutate<{ orderCreate: { id: string; internalId: string } }>({\n                mutation: createOrderMutation,\n                variables: {\n                    orderItems,\n                },\n            });\n        if (orderCreateResponse.errors) {\n            throw new Error(orderCreateResponse.errors[0].message);\n        }\n        if (!orderCreateResponse.data) {\n            throw new Error(\"Failed to create order: No order data in response.\");\n        }\n        return {\n            id: orderCreateResponse.data.orderCreate.id,\n            internalId: orderCreateResponse.data.orderCreate.internalId,\n        };\n    }\n}\n\nexport const getIntegration = async (applicationKey: string, themeConfigurationId?: string): Promise<Integration> => {\n    const graphqlClient = graphQlManager.getShadowGraphqlClient();\n    const integrationResponse = await graphqlClient.query<{ currentIntegration: Integration }>({\n        query: currentIntegrationQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        context: {\n            headers: {\n                \"x-application-key\": applicationKey,\n            },\n            skipIntegrationCheck: true,\n        },\n        variables: {\n            themeConfigurationId,\n        },\n    });\n    return integrationResponse.data.currentIntegration;\n};\n\nexport const getTransaction = async (transactionId: string): Promise<Transaction | undefined> => {\n    const graphqlClient = graphQlManager.getShadowGraphqlClient();\n    const result = await graphqlClient.query<{ transactions: Transaction[] }>({\n        query: getTransactionQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            id: transactionId,\n        },\n    });\n    if (result.data.transactions.length === 0) return undefined;\n    return result.data.transactions[0];\n};\n\nexport const getOverrideThemeConfiguration = async (\n    overrideThemeConfigurationId: string,\n    overrideThemeInstallId: string,\n): Promise<ThemeInstallConfigurationGraphQl | undefined> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        marketplaceThemeInstallConfiguration: ThemeInstallConfigurationGraphQl;\n    }>({\n        query: getMarketplaceThemeInstallConfigurationQuery,\n        errorPolicy: \"all\",\n        variables: {\n            themeConfigurationId: overrideThemeConfigurationId,\n            themeInstallId: overrideThemeInstallId,\n        },\n    });\n    return response.data?.marketplaceThemeInstallConfiguration;\n};\n\nexport const getBundleThemeConfiguration = async (\n    bundleId: string,\n): Promise<ThemeInstallConfigurationGraphQl | undefined> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        bundles: { marketplaceThemeInstallConfiguration?: ThemeInstallConfigurationGraphQl }[];\n    }>({\n        query: getBundleForMarketplaceThemeQuery,\n        errorPolicy: \"all\",\n        variables: {\n            id: bundleId,\n        },\n    });\n    return response.data?.bundles?.[0]?.marketplaceThemeInstallConfiguration;\n};\n\nexport const getTransactionThemeConfiguration = async (\n    transactionId: string,\n): Promise<ThemeInstallConfigurationGraphQl | undefined> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        transactions: Transaction[];\n    }>({\n        query: getTransactionForMarketplaceThemeQuery,\n        errorPolicy: \"all\",\n        variables: {\n            id: transactionId,\n        },\n    });\n    return response.data?.transactions?.[0]?.marketplaceThemeInstallConfiguration;\n};\n\nasync function getAuthHeaders(): Promise<{ [key: string]: string }> {\n    const extraHeaders: { [key: string]: string } = {};\n    try {\n        const token = await this.loggedInBearerToken();\n        extraHeaders[\"Authorization\"] = `Bearer ${token}`;\n    } catch (e) {\n        // Hack to get the token from editor's amplify.\n        const keys = Object.entries(localStorage);\n        const jwtTokenKey =\n            keys.find(([k, _]) => {\n                return k.startsWith(\"CognitoIdentityServiceProvider\") && k.endsWith(\"idToken\");\n            })?.[0] || \"\";\n        const jwtToken = localStorage.getItem(jwtTokenKey);\n        if (jwtToken && !isTokenExpired(jwtToken)) {\n            extraHeaders[\"Authorization\"] = `Bearer ${jwtToken}`;\n        }\n    }\n    return extraHeaders;\n}\n\nasync function getContextHeadersForBundle(id: string): Promise<any> {\n    const ownerMap = persistenceService.getMap(\"bundleOwnerIds\");\n    const bundleOwnerId = ownerMap?.get(id);\n    // TODO: Update customer auth to store bundle stakeholders as well.\n    const extraHeaders = await getAuthHeaders();\n    return {\n        bundleOwnerId,\n        ...extraHeaders,\n    };\n}\n\nasync function getContextHeadersForTransaction(id: string): Promise<any> {\n    const ownerMap = persistenceService.getMap(\"transactionOwnerIds\");\n    const transactionOwnerId = ownerMap?.get(id);\n    const extraHeaders = await getAuthHeaders();\n    return {\n        transactionOwnerId,\n        ...extraHeaders,\n    };\n}\n\n/**\n * Marks the Bundle with the provided id as deleted. The Bundle's data will still persist on the server and as such you can still retrieve it directly via id,\n * but it will no longer be visible in list/feed queries and it can no longer be converted into an Order.\n */\nexport const deleteBundle = async (id: string): Promise<void> => {\n    const bundleContextHeaders = await getContextHeadersForBundle(id);\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleDelete: string }>({\n        mutation: deleteBundleQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id,\n        },\n        context: {\n            headers: bundleContextHeaders,\n        },\n    });\n    if (response.data?.bundleDelete !== id) {\n        throw new Error(`Failed to delete bundle: ${response.errors}`);\n    }\n};\n\n/**\n * Finds the bundle id for the given transaction id, or undefined if the transaction is not linked to a bundle.\n */\nexport const getBundleIdForTransaction = async (id: string): Promise<string | undefined> => {\n    const transactionContextHeaders = await getContextHeadersForTransaction(id);\n    const response = await graphQlManager\n        .getShadowGraphqlClient()\n        .mutate<{ transactions?: { id: string; bundle?: { id: string } }[] }>({\n            mutation: findBundleForTransactionsQuery,\n            errorPolicy: \"all\",\n            fetchPolicy: \"no-cache\",\n            variables: {\n                ids: [id],\n            },\n            context: {\n                headers: transactionContextHeaders,\n            },\n        });\n    if (\n        !response.data?.transactions ||\n        response.data.transactions.length !== 1 ||\n        response.data.transactions[0].id !== id\n    ) {\n        throw new Error(`Failed to find transaction to read bundle id: ${JSON.stringify(response.errors)}`);\n    }\n    return response.data.transactions[0].bundle?.id;\n};\n","import { FrameStepStorage, FrameData, FrameThresholdSettings, FrameOffsets, PatternImageData } from \"../../../types\";\nimport debounce from \"lodash.debounce\";\nimport isEqual from \"lodash.isequal\";\nimport { WorkflowManager } from \"../../../WorkflowManager\";\nimport { UnhandledBehaviorError } from \"../../../util/exception\";\nimport { calculateOffsets, frameDataCache, getFrameData } from \"../../../util/frame\";\nimport { modifySVGColors } from \"../../../util/illustration\";\nimport { svgToDataUrl } from \"../../../util/crossplatform\";\nimport { GroupCommand, UpdateFramePattern, UpdateFrameThresholdSettingsCommand } from \"../../../command\";\n\n/**\n * Bounds the offsets for an image to the box, preventing\n * the user from moving the image in a way that wouldn't be intended.\n * @param newOffsets The new intended offsets for the image.\n * @param frameData The current frame information\n * @param borderWidth The width of the border added by the cropper.\n * @param mustCover When true the image sgould be bounded in such a way that it covers the entire frame at all times.\n */\nexport function getBoundedOffsets(\n    newOffsets: FrameOffsets,\n    frameData: FrameData,\n    imageData: PatternImageData,\n    mustCover?: boolean,\n) {\n    const newWidth = imageData.width * newOffsets.zoom;\n    const newHeight = imageData.height * newOffsets.zoom;\n\n    if (mustCover) {\n        // Find which is smaller: framewidth / imagewidth or frameheight / imageheight\n        // Then calculate the min zoom factor based on the smaller\n        // of the zoom to atleast fit the image and the users new zoom level.\n        const zoomMinimumBound = Math.max(frameData.width / imageData.width, frameData.height / imageData.height);\n        const zoom = Math.max(zoomMinimumBound, newOffsets.zoom);\n        const boundedWidth = imageData.width * zoom;\n        const boundedHeight = imageData.height * zoom;\n        return {\n            ...newOffsets,\n            x: boundToRange(newOffsets.x, frameData.width - boundedWidth, 0),\n            y: boundToRange(newOffsets.y, frameData.height - boundedHeight, 0),\n            zoom: zoom,\n        };\n    }\n\n    // If we don't need to cover we just make sure the users can't drag the image completely off\n    // screen which may cause trouble when trying to find the image again.\n    return {\n        ...newOffsets,\n        x: boundToRange(newOffsets.x, -newWidth, frameData.width),\n        y: boundToRange(newOffsets.y, -newHeight, frameData.height),\n    };\n}\n\n/**\n * Bounds a value to a given range\n * @param value The value to bound\n * @param min The minimum bound that value must be above.\n * @param max The maximum bound the value must be below.\n */\nfunction boundToRange(value: number, min: number, max: number): number {\n    return Math.min(Math.max(value, min), max);\n}\n\nexport type UpdateFrameOffsets = (\n    newOffsets: FrameOffsets[],\n    imageData: PatternImageData,\n    frameData: FrameData[],\n    thresholdSettings: FrameThresholdSettings,\n    onComplete?: () => void,\n) => void;\n\nexport class FrameService {\n    // Internal state\n    private offsets: FrameOffsets[];\n    private thresholdSettings: FrameThresholdSettings;\n    private forceImageCover?: boolean;\n    private initialZoom?: number;\n    private targetElements: string[]; // A list of canvas element ids that should be updated when changes occur to this frame.\n\n    // FIXME: Can we pull these from the element itself?\n    private imageData?: PatternImageData; // The current pattern if any.\n    // FIXME: Can we pull these from the element itself?\n    private frameData?: FrameData[]; // The current frame if any.\n\n    // Debounced functions\n\n    private readonly _debouncedUpdateFrameOffsets: UpdateFrameOffsets;\n\n    // constants\n\n    /**\n     * The calculated minimum zoom value, per frame.\n     */\n    public minZoomScale = [0.03];\n    /**\n     * The calculated maximum zoom value. Note: This is calculated based on the first frame.\n     */\n    public maxZoomScale = [20];\n\n    // Listeners\n\n    private onFrameDataChangeListeners: ((frameData: FrameData[] | undefined) => void)[];\n    private onZoomChangeListeners: ((zoomValue: number[]) => void)[];\n    private onRotationChangeListeners: ((rotationValue: number[]) => void)[];\n\n    // Workflow manager related logic\n    private workflowManager?: WorkflowManager;\n    private stepName?: string;\n\n    constructor(forceImageCover?: boolean, initialZoom?: number) {\n        this._debouncedUpdateFrameOffsets = debounce(this.updateFrameOffsets, 200);\n        this.targetElements = [];\n        this.onFrameDataChangeListeners = [];\n        this.onZoomChangeListeners = [];\n        this.onRotationChangeListeners = [];\n        this.forceImageCover = forceImageCover;\n        this.initialZoom = initialZoom;\n        this.thresholdSettings = {\n            useThreshold: false,\n            invertThreshold: false,\n            threshold: 128,\n            thresholdSaturation: 0.5,\n        };\n    }\n\n    /**\n     * When we want to connect a workflow manager to the state of the image cropper we\n     * can pass it to this function. Inside we'll attach any required event listeners.\n     * @param workflowManager The workflow manager to attach.\n     * @param stepName The specific step we want to attach to within the manager.\n     */\n    connectWorkflowManager(workflowManager: WorkflowManager, stepName?: string) {\n        if (stepName) {\n            workflowManager.addStepSpecificStorageCallback(async (storage) => {\n                if (storage) {\n                    const frameStorage = storage as FrameStepStorage;\n                    if (frameStorage.currentFrameSources) {\n                        let changed = false;\n                        for (let i = 0; i < frameStorage.currentFrameSources.length; i++) {\n                            const frameSource = frameStorage.currentFrameSources[i];\n                            const newFrameData = await getFrameData(frameSource);\n                            const existingFrameData = this.frameData ? this.frameData[i] : undefined;\n                            if (!isEqual(newFrameData, existingFrameData)) {\n                                if (!this.frameData) {\n                                    this.frameData = new Array(frameStorage.currentFrameSources.length);\n                                }\n                                this.frameData[i] = newFrameData;\n                                changed = true;\n                            }\n                        }\n                        if (changed) {\n                            this.onFrameDataChangeListeners.forEach((frameDataChangeListener) =>\n                                frameDataChangeListener(this.frameData),\n                            );\n                            if (this.frameData && this.imageData) {\n                                this.recalculateOffsets(this.imageData);\n                                this.updateOffsets(this.offsets);\n                                this.recalculateZoomLimits(this.imageData, this.frameData);\n                            }\n                        }\n                    }\n                }\n            }, stepName);\n        }\n\n        this.workflowManager = workflowManager;\n        this.stepName = stepName;\n    }\n\n    /**\n     * Sets the elements that should be update when changes are made to\n     * the cropper that owns this service.\n     * @param targetElements A list of element Ids to track\n     */\n    setTargetElements(targetElements: string[]) {\n        this.targetElements = targetElements;\n    }\n\n    /**\n     * Gets the current calculated frame data\n     * @returns A FrameData object or undefined if no frame has been set.\n     */\n    getFrameData(): FrameData[] | undefined {\n        return this.frameData;\n    }\n\n    /**\n     * Sets the current frame data. Note:\n     * @param paths The paths to lookup in our frame data cache.\n     */\n    setFrameData(paths: string[] | undefined) {\n        if (!paths) {\n            this.frameData = undefined;\n            return;\n        }\n        paths.forEach((path, index) => {\n            const frameData = frameDataCache.get(path);\n            if (frameData) {\n                if (!this.frameData) {\n                    this.frameData = new Array(paths.length);\n                }\n                this.frameData[index] = frameData;\n            }\n        });\n    }\n\n    /**\n     * Gets the currently set image of the frame..\n     * @returns A PatternImageData object, or undefined if no image is set.\n     */\n    getImageData(): PatternImageData | undefined {\n        return this.imageData;\n    }\n\n    /**\n     * Helper function to get the src of the image of the frame, since it can be an svg with modified colors.\n     * @returns A url (a data url if svg), or undefined if no image is set.\n     */\n    getImageSrc(): string | undefined {\n        if (!this.imageData) {\n            return undefined;\n        }\n        if (this.imageData.svg) {\n            const modifiedSvg = modifySVGColors(this.imageData.svg, this.imageData.colors || {}, false);\n            return svgToDataUrl(modifiedSvg);\n        }\n        return this.imageData.src;\n    }\n\n    /**\n     * Gets the current calculated offsets of the pattern within the frame.\n     * @returns A FrameOffsets object or undefined if no offsets are defined.\n     */\n    getOffsets(): FrameOffsets[] | undefined {\n        return this.offsets;\n    }\n\n    /**\n     * Updates the frame offsets explicitly.\n     */\n    setOffsets(offsets: FrameOffsets[]) {\n        this.offsets = offsets;\n    }\n\n    /**\n     * Sets the zoom of the cropper that owns this service.\n     * @param zoom The new zoom value, per frame.\n     * @param cX The center of zoom on x axis, per frame.\n     * @param cY The center of zoom on Y axis, per frame.\n     * @param onComplete A function to call when zoom changes have been completed\n     */\n    setZoom(zoom: number[], cX: number[], cY: number[], onComplete?: () => void) {\n        if (this.imageData && this.offsets && this.frameData) {\n            if (!this.offsets || this.offsets.length !== this.frameData.length) {\n                this.offsets = new Array(this.frameData.length);\n            }\n            const calculatedOffsets = this.frameData.map((frameData, index) => {\n                // Figure out the top/left displacement caused by the zoom.\n                const xoff = (cX[index] - this.offsets[index].x) / this.offsets[index].zoom;\n                const yoff = (cY[index] - this.offsets[index].y) / this.offsets[index].zoom;\n                const dX = cX[index] - xoff * zoom[index];\n                const dY = cY[index] - yoff * zoom[index];\n                const calculatedOffsets = {\n                    x: dX,\n                    y: dY,\n                    zoom: (this.imageData!.width * zoom[index]) / this.imageData!.width,\n                    rotation: this.offsets[index].rotation,\n                };\n                return calculatedOffsets;\n            });\n            // Applying the new offsets will cause the image to be bounded.\n            this.updateOffsets(calculatedOffsets, onComplete);\n            this.onZoomChangeListeners.forEach((zoomChangeListener) => zoomChangeListener(zoom));\n        }\n    }\n\n    /**\n     * Sets the rotation of the pattern within the frame\n     * @param rotation The new rotation value in degrees, per frame\n     * @param onComplete A function to call when rotation changes have been completed\n     */\n    setRotation(rotation: number[], onComplete?: () => void) {\n        if (this.imageData && this.offsets && this.frameData) {\n            if (!this.offsets || this.offsets.length !== this.frameData.length) {\n                this.offsets = new Array(this.frameData.length);\n            }\n\n            const calculatedOffsets = this.frameData.map((frameData, index) => {\n                return {\n                    ...this.offsets[index],\n                    rotation: rotation[index],\n                };\n            });\n\n            // Apply the new offsets (which will bound and update)\n            this.updateOffsets(calculatedOffsets, onComplete);\n            this.onRotationChangeListeners.forEach((rotationChangeListener) => rotationChangeListener(rotation));\n        }\n    }\n\n    /**\n     * Sets the image currently contained by this frame.\n     * @param value The new image as an ImageData property\n     * @param [recalculateOffsets=true] Optional: Enable/disable re-calculating of frame offsets. Default: `true`.\n     * Note: Will always calculate when offsets have not been calculated.\n     */\n    setPatternData(value: PatternImageData, recalculateOffsets = true) {\n        this.imageData = value;\n        if (value && this.frameData) {\n            if (recalculateOffsets || !this.offsets) {\n                this.recalculateOffsets(value, recalculateOffsets);\n            }\n            // Applying the new offsets will cause the image to be bounded.\n            this.updateOffsets(this.offsets, undefined, true);\n        }\n        if (this.imageData && this.frameData) {\n            this.recalculateZoomLimits(this.imageData, this.frameData);\n        }\n    }\n\n    /**\n     * Modify the offsets of the frame.\n     * @param value The new FrameOffsets objects.\n     * @param onComplete A callback, called when the modification is complete\n     * @param forceUpdate When true the offsets will be updated even if they haven't changed.\n     */\n    updateOffsets(value: FrameOffsets[], onComplete?: () => void, forceUpdate?: boolean) {\n        const patternData = this.imageData;\n        // If the frame isn't correctly initialized yet just ignore..\n        if (!patternData || !this.frameData) {\n            return;\n        }\n\n        if (this.frameData.length !== value.length) {\n            throw new UnhandledBehaviorError(\n                \"Frame data and offsets are not the same length. This is a bug. Please report it.\",\n            );\n        }\n\n        const changed = this.offsets.some((offset, index) => {\n            // If there hasn't been any change let's not set or update\n            // the offsets internally. Doing so will trigger re-rendering for no good reason.\n            if (\n                value[index].x === offset.x &&\n                value[index].y === offset.y &&\n                value[index].zoom === offset.zoom &&\n                value[index].rotation === offset.rotation\n            ) {\n                return false;\n            }\n            return true;\n        });\n        if (!changed && !forceUpdate) {\n            onComplete && onComplete();\n            return;\n        }\n\n        if (!this.offsets || this.offsets.length !== this.frameData.length) {\n            this.offsets = new Array(this.frameData.length);\n        }\n        this.frameData.forEach((frameData, index) => {\n            this.offsets[index] = getBoundedOffsets(value[index], frameData, this.imageData!, this.forceImageCover);\n        });\n\n        // Update anyone who wants to know about changes to the frame.\n        this._debouncedUpdateFrameOffsets(\n            this.offsets,\n            patternData,\n            this.frameData,\n            this.thresholdSettings,\n            onComplete,\n        );\n    }\n\n    getThresholdSettings(): FrameThresholdSettings {\n        return this.thresholdSettings;\n    }\n\n    setThresholdSettings(settings: FrameThresholdSettings) {\n        this.thresholdSettings = settings;\n        if (this.imageData && this.frameData) {\n            this._debouncedUpdateFrameOffsets(this.offsets, this.imageData, this.frameData, settings);\n        }\n    }\n\n    // Allows users of the frame service to listen to frame data changes.\n    onFrameDataChanged(newListener: (frameData: FrameData[] | undefined) => void) {\n        newListener(this.frameData);\n        this.onFrameDataChangeListeners.push(newListener);\n    }\n\n    /**\n     * Append a new listener to zoom events on this frame.\n     * @param newListener\n     */\n    onZoom(newListener: (zoomValue: number[]) => void) {\n        this.onZoomChangeListeners.push(newListener);\n    }\n\n    /**\n     * Append a new listener to rotation events on this frame.\n     * @param newListener\n     */\n    onRotation(newListener: (rotationValue: number[]) => void) {\n        this.onRotationChangeListeners.push(newListener);\n    }\n\n    /**\n     * Updates the offsets of the frame\n     * @param newOffsets New offset object\n     * @param imageData The image data\n     * @param frameData The frame data\n     * @param targetElements A list of elements that need updating, by ID\n     * @param onComplete A callback when the operation is completed.\n     */\n    private updateFrameOffsets(\n        newOffsets: FrameOffsets[],\n        imageData: PatternImageData,\n        frameData: FrameData[],\n        thresholdSettings: FrameThresholdSettings,\n        onComplete?: () => void,\n    ) {\n        if (!frameData || frameData.length === 0 || frameData.some((frame) => !frame)) {\n            throw new UnhandledBehaviorError(\"Frame data not set. This is a bug\");\n        }\n\n        if (!this.workflowManager) throw new UnhandledBehaviorError(\"No workflow manager set, cannot update offsets.\");\n\n        const regionElements = this.workflowManager.getRegionElements(this.stepName || \"\");\n        const commandDispatcher = this.workflowManager.getCommandDispatcher();\n        this.targetElements.forEach((elementID, index) => {\n            let offsetIndex = regionElements.find((r) => r.id === elementID)?.regionIndex ?? index;\n            if (offsetIndex >= newOffsets.length) {\n                offsetIndex = index;\n            }\n            try {\n                commandDispatcher(\n                    new GroupCommand([\n                        new UpdateFramePattern(elementID, imageData, newOffsets[offsetIndex]),\n                        new UpdateFrameThresholdSettingsCommand(\n                            elementID,\n                            thresholdSettings.useThreshold,\n                            thresholdSettings.invertThreshold,\n                            thresholdSettings.threshold,\n                            thresholdSettings.thresholdSaturation,\n                        ),\n                    ]),\n                );\n            } catch (e) {\n                // Presumably instantiating a cloned template.\n            }\n        });\n\n        if (this.stepName) {\n            this.workflowManager.updateStorage(this.stepName, {\n                frameOffsetsList: newOffsets,\n            });\n        }\n\n        onComplete && onComplete();\n    }\n\n    /**\n     * Determines limitations of zoom based on relative size of image and frame.\n     * @param imageData The image to include in calculations\n     * @param frameData The frame to include in calculations.\n     */\n    private recalculateZoomLimits(imageData: PatternImageData, frameData: FrameData[]) {\n        if (this.minZoomScale.length !== frameData.length || this.maxZoomScale.length !== frameData.length) {\n            this.minZoomScale = new Array(frameData.length);\n            this.maxZoomScale = new Array(frameData.length);\n        }\n        frameData.forEach((frame, index) => {\n            const minimumScale = Math.max(frame.width / imageData.width, frame.height / imageData.height);\n            if (this.forceImageCover) {\n                this.minZoomScale[index] = minimumScale;\n                this.maxZoomScale[index] = minimumScale * 2.5;\n            } else {\n                this.minZoomScale[index] = minimumScale / 10;\n                this.maxZoomScale[index] = minimumScale * 2.5;\n            }\n        });\n    }\n\n    private recalculateOffsets(imageData: PatternImageData, resetRotation = true) {\n        if (!this.frameData) return;\n        if (!this.offsets || this.offsets.length !== this.frameData.length) {\n            this.offsets = new Array(this.frameData.length);\n        }\n        this.frameData.forEach((frameData, index) => {\n            const existingRotation = resetRotation ? 0 : (this.offsets[index]?.rotation || 0);\n            this.offsets[index] = {\n                ...calculateOffsets(\n                    imageData,\n                    frameData,\n                    this.initialZoom && !this.forceImageCover ? { scale: this.initialZoom } : undefined,\n                    this.forceImageCover,\n                ),\n                rotation: existingRotation,\n            };\n        });\n        this._debouncedUpdateFrameOffsets(this.offsets, imageData, this.frameData, this.thresholdSettings);\n    }\n}\n","import {\n    ConfirmCallback,\n    EditedCallback,\n    ElementsCallback,\n    InformationResultCallback,\n    InitCallback,\n    MakingAdjustmentsCallback,\n    MandatoryCallback,\n    MetadataCallback,\n    RecipientCallback,\n    SelectionCallback,\n    StepMetadata,\n    StepSpecificStorageCallback,\n    StorageCallback,\n    ValidationCallback,\n    WorkflowMetadata,\n} from \".\";\nimport {\n    WorkflowManager,\n    InformationResult,\n    RegionElement,\n    SpiffCommerceClient,\n    WorkflowExperience,\n    WorkflowScene,\n    Workflow,\n} from \"..\";\nimport { CanvasCommand } from \"../command\";\nimport { CommandContext, CommandState } from \"../CommandContext\";\nimport { LayoutState, Product, SerializableStep, StepStorage, VariantResource } from \"../types\";\nimport { Poller } from \"../util/Poller\";\n\nexport class MockWorkflowManager implements WorkflowManager {\n    traversableScenes(): Promise<WorkflowScene[]> {\n        throw new Error(\"Method not implemented.\");\n    }\n    getMandatoryUnfulfilledSteps: () => Promise<string[]>;\n    getTemplatingContext: () => Promise<{ [key: string]: any }>;\n    removeRecipientCallback: (callback: RecipientCallback) => void;\n    addRecipientCallback: (callback: RecipientCallback) => void;\n    getStateHash: () => Promise<string>;\n    updateRecipient(\n        _firstName?: string,\n        _lastName?: string,\n        _address?: string,\n        _suburb?: string,\n        _state?: string,\n        _email?: string,\n        _postalCode?: string,\n        _country?: string,\n        _mobile?: string,\n        _company?: string,\n        _apartment?: string,\n        _customField1?: string,\n        _customField2?: string,\n        _customField3?: string,\n        _customField4?: string,\n        _customField5?: string,\n        _conversionConfigurationId?: string,\n    ): Promise<void> {\n        throw new Error(\"Method not implemented.\");\n    }\n    approveTransaction(_note?: string): Promise<void> {\n        throw new Error(\"Method not implemented.\");\n    }\n    rejectTransaction(_note?: string): Promise<void> {\n        throw new Error(\"Method not implemented.\");\n    }\n    private client: SpiffCommerceClient | undefined;\n    getClient(): SpiffCommerceClient {\n        return this.client ?? ({} as any);\n    }\n    getWorkflowExperience(): WorkflowExperience {\n        return {} as any;\n    }\n    setClient(client: SpiffCommerceClient) {\n        this.client = client;\n    }\n    getInitializationPromise() {\n        return Promise.resolve();\n    }\n    setWorkflow: (workflow: Workflow) => Promise<void>;\n    getProduct: () => Product;\n    isInitialized(): boolean {\n        return true;\n    }\n    getCommandContext: () => CommandContext;\n    getAllLayoutData: () => LayoutState[];\n    getMetadata: (stepName: string) => StepMetadata | undefined;\n    getWorkflowMetadata: () => WorkflowMetadata;\n    getStepStorage: (stepName: string) => StepStorage | undefined;\n    getInformationResults(): InformationResult[] {\n        return [];\n    }\n    async reset() {}\n    updateStateWithServer(_getReducerState: () => CommandState) {}\n    async outstandingRequestsPromise() {}\n    async updateStateWithServerImmediate(_getReducerState: () => CommandState) {}\n    addPoller(_poller: Poller) {}\n    addConfirmCallback(_callback: ConfirmCallback) {}\n    addEditedCallback(_callback: EditedCallback) {}\n    addElementsCallback(_callback: ElementsCallback) {}\n    addInformationResultCallback(_callback: InformationResultCallback) {}\n    addInitCallback(_callback: InitCallback) {}\n    addMakingAdjustmentsCallback(_callback: MakingAdjustmentsCallback) {}\n    addMandatoryCallback(_callback: MandatoryCallback) {}\n    addMetadataCallback(_callback: MetadataCallback) {}\n    addSelectionCallback(_callback: SelectionCallback) {}\n    addStepSpecificStorageCallback(_callback: StepSpecificStorageCallback, _stepName: string) {}\n    addStorageCallback(_callback: StorageCallback) {}\n    getCommandDispatcher() {\n        return (_command: CanvasCommand) => {};\n    }\n    getLayouts() {\n        return [];\n    }\n    getLayoutPreviewService() {\n        return {\n            getAll: () => {\n                return new Map();\n            },\n        } as any;\n    }\n    getPreviewService() {\n        return undefined;\n    }\n    setModelContainer: (container: any) => void;\n    getModelContainer() {\n        return undefined;\n    }\n    getRegionElements(_stepName: string) {\n        return [];\n    }\n    getSerializedStep(_stepName: string, _serializedSteps: SerializableStep[]) {\n        return undefined;\n    }\n    getStepSpecificServices(_stepName: string) {\n        return undefined;\n    }\n    getTransaction() {\n        return {\n            id: \"\",\n        };\n    }\n    getTransactionCustomer() {\n        return undefined;\n    }\n    setTransactionCustomer() {\n        return;\n    }\n    setTransactionCustomerDetails() {\n        return;\n    }\n    getInitialOptionIds(): Promise<Set<string>> {\n        return new Promise(() => new Set<string>());\n    }\n    getWorkflow() {\n        return {\n            id: \"\",\n            name: \"\",\n            panels: [],\n            steps: [],\n            showModelOnFinishStep: false,\n            allowProofDownload: false,\n            introduction: \"\",\n            stepGroups: [],\n        };\n    }\n    markStepsAsInitialised(_stepNames: string[]) {}\n    getUpdatesPending: () => boolean;\n    markUpdateCompleted(_update: string) {}\n    markUpdatePending() {\n        return \"123\";\n    }\n    getWorkflowSelections() {\n        return {};\n    }\n    getStepSelections() {\n        return {};\n    }\n    setCurrentAdjustingStepId(_stepId: string) {}\n    setEditedStatus(_stepName: string, _status: boolean) {}\n    setInformationResults(_results: InformationResult[]) {}\n    setMandatoryFulfilled(_stepName: string, _status: boolean) {}\n    async setSelectionsAndElements(_stepName: string, _variants: VariantResource[], _elements: RegionElement[]) {}\n    toggleDesignConfirmed() {}\n    updateMetadata(_stepName: string, _update: any) {}\n    async updateStorage(_stepName: string, _update: StepStorage) {}\n    injectIntoPreviewService(_previewService: any): Promise<void> {\n        return Promise.resolve();\n    }\n    ejectFromPreviewService(): void {}\n    setWorkflowStateSyncEnabled(_enabled: boolean) {}\n    async updateTransactionShareActions() {}\n    addValidationCallback(_callback: ValidationCallback) {}\n    setStepError(_stepName: string, _field: string, _error: string | undefined) {}\n    getStepErrors(_stepName: string) {\n        return undefined;\n    }\n    getValidationErrors() {\n        return { steps: new Map() };\n    }\n    async updateTransactionStakeholders() {}\n    getStepTags(_stepId: string): string[] {\n        return [];\n    }\n}\n","import { StepHandle } from \"..\";\nimport { WorkflowManager, frameStepService, FrameService, assetService, optionService } from \"../..\";\nimport { Variant } from \"../resource/variant\";\nimport {\n    AddonHandle,\n    Asset,\n    ColorDefinition,\n    ColorOption,\n    FrameData,\n    FrameStepData,\n    FrameStepStorage,\n    PatternImageData,\n    Step,\n    VariantResource,\n} from \"../../types\";\nimport { generateSVGWithUnknownColors } from \"../../util/illustration\";\n\nexport enum FrameStep {\n    SelectFrame = \"SelectFrame\",\n    SelectImage = \"SelectImage\",\n    Position = \"Position\",\n}\n\nexport enum ImageState {\n    Original = \"original\",\n    BackgroundRemoved = \"backgroundRemoved\",\n    Optimized = \"optimized\",\n}\nexport class FrameStepHandle extends StepHandle<FrameStepData> {\n    public frameService: FrameService;\n\n    constructor(manager: WorkflowManager, step: Step<FrameStepData>, tags: string[]) {\n        super(manager, step, tags);\n        const frameStepData = (step as Step<FrameStepData>).data;\n        this.frameService = new FrameService(frameStepData.forceImageCover, frameStepData.initialZoomLevel);\n        this.frameService.connectWorkflowManager(manager, step.stepName);\n    }\n\n    selectVariant(variant: Variant) {\n        const stepElements = this.manager.getRegionElements(this.step.stepName);\n        return frameStepService.selectVariant(this.step, variant.getResource(), stepElements, this.manager, (v) =>\n            this.setUpdateState(v),\n        );\n    }\n\n    onFrameDataChanged(callback: (frameData: FrameData[]) => void) {\n        if (!this.frameService) return;\n\n        this.frameService.onFrameDataChanged((frameData) => {\n            if (!frameData) return;\n            callback(frameData);\n        });\n    }\n\n    /**\n     * Updates the image selection inside the frame.\n     * @param asset The asset to use.\n     * @param storeAsOriginal Optional: Store this asset as the original, unmodified version of the image. Default: `true`.\n     * @param [recalculateOffsets=true] Optional: Recalculates the offsets of the image inside the frame. Default: `true`.\n     */\n    async selectImage(asset: Asset, storeAsOriginal = true, recalculateOffsets = true): Promise<void> {\n        await frameStepService.selectImage(this.step, asset, this.manager, recalculateOffsets);\n        if (storeAsOriginal) {\n            this.manager.updateStorage(this.step.stepName, {\n                framePatternData: {\n                    originalAssetKey: asset.key,\n                    backgroundRemovedAssetKey: undefined,\n                    vectorizedAssetKey: undefined,\n                    enhancedAssetKey: undefined,\n                    useOriginalAsset: undefined,\n                },\n            });\n        }\n    }\n\n    /**\n     * Returns `true` if the Advanced Image Manipulation addon is available for the current session.\n     */\n    async canUseAdvancedImageManipulation(): Promise<boolean> {\n        return this.manager.getClient().canUseAddon(AddonHandle.AdvancedImageManipulation);\n    }\n\n    /**\n     * Returns `true` if the Background Remover is available for the current session and if the associated frame has a user-supplied raster image.\n     */\n    async canRemoveBackground(): Promise<boolean> {\n        return (\n            (await this.canUseAdvancedImageManipulation()) &&\n            this.hasOriginalImageSelection() &&\n            !!this.frameService?.getImageData()?.src &&\n            !this.frameService?.getImageData()?.svg\n        );\n    }\n\n    /**\n     * Removes the background from an image, stores it in the state, and returns the new asset.\n     * @param applyNewAsset Optionally applies the new asset as the current image selection. Default: `true`.\n     * @returns A promise that resolves with the newly generated Asset.\n     */\n    async removeBackgroundFromImageSelection(applyNewAsset = true): Promise<Asset> {\n        if (!(await this.canUseAdvancedImageManipulation())) {\n            throw new Error(\n                \"The current Integration does not have access to the Background Remover. Please call canUseAdvancedImageManipulation to ensure you disable this feature when appropriate.\",\n            );\n        }\n        const image = await this.getOriginalImageSelection();\n        if (!image) {\n            throw new Error(\"You must supply an image selection before attempting to remove the background.\");\n        }\n        const bgRemoved = await assetService.removeBackgroundFromAsset(image);\n        if (applyNewAsset) {\n            await frameStepService.selectImage(this.step, bgRemoved, this.manager, false);\n        }\n        const existingStorage = this.getFrameStepStorage()?.framePatternData || {};\n        this.manager.updateStorage(this.step.stepName, {\n            framePatternData: {\n                ...existingStorage,\n                backgroundRemovedAssetKey: bgRemoved.key,\n                useOriginalAsset: !applyNewAsset,\n            },\n        });\n        return bgRemoved;\n    }\n\n    /**\n     * Takes an asset and vectorizes it, stores the new asset in the state, and returns the new asset.\n     * @param asset An optional asset to use for vectorization. If not supplied, the method will attempt to vectorize the current image selection. If there is no current image selection, the method will throw an error.\n     * @returns The newly vectorized asset.\n     */\n    async vectorize(asset?: Asset, maxColors: number | undefined = undefined): Promise<Asset> {\n        const image = asset ?? (await this.getOriginalImageSelection());\n        if (!image) {\n            throw new Error(\"You must supply an image selection before attempting to vectorize the image.\");\n        }\n        const vectorized = await assetService.vectorizeAsset(image, maxColors);\n        // Don't store as original - we want to preserve the original asset key\n        await this.selectImage(vectorized, false);\n        const existingStorage = this.getFrameStepStorage()?.framePatternData || {};\n        this.manager.updateStorage(this.step.stepName, {\n            framePatternData: {\n                ...existingStorage,\n                vectorizedAssetKey: vectorized.key,\n                useOriginalAsset: false,\n            },\n        });\n        return vectorized;\n    }\n\n    /**\n     * Takes an asset and enhances it using AI, stores the new asset in the state, and returns the new asset.\n     * @param asset An optional asset to use for enhancement. If not supplied, the method will attempt to enhance the current image selection. If there is no current image selection, the method will throw an error.\n     * @param options Optional enhancement options including quality, dimensions, and AI parameters.\n     * @returns The newly enhanced asset.\n     */\n    async enhanceWithAI(\n        asset?: Asset,\n        options?: {\n            additionalInstructions?: string;\n            quality?: string;\n            targetWidth?: number;\n            targetHeight?: number;\n            seed?: number;\n            cfgScale?: number;\n            negativePrompt?: string;\n        },\n    ): Promise<Asset> {\n        const image = asset ?? (await this.getOriginalImageSelection());\n        if (!image) {\n            throw new Error(\"You must supply an image selection before attempting to enhance the image with AI.\");\n        }\n        const enhanced = await assetService.enhanceWithAI(image, options);\n        // Don't store as original - we want to preserve the original asset key\n        await this.selectImage(enhanced, false);\n        const existingStorage = this.getFrameStepStorage()?.framePatternData || {};\n        this.manager.updateStorage(this.step.stepName, {\n            framePatternData: {\n                originalAssetKey: existingStorage.originalAssetKey,\n                backgroundRemovedAssetKey: existingStorage.backgroundRemovedAssetKey,\n                vectorizedAssetKey: existingStorage.vectorizedAssetKey,\n                enhancedAssetKey: enhanced.key,\n                useOriginalAsset: false,\n            },\n        });\n        return enhanced;\n    }\n\n    /**\n     * @returns The asset representing the image with its background removed. If there is no such image, returns `undefined`.\n     */\n    async getBackgroundRemovedImageSelection(): Promise<Asset | undefined> {\n        const key = this.getFrameStepStorage()?.framePatternData?.backgroundRemovedAssetKey;\n        if (!key) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(key);\n    }\n\n    /**\n     * @returns The asset representing the vectorized version of the image. If there is no such image, returns `undefined`.\n     */\n    async getVectorizedImageSelection(): Promise<Asset | undefined> {\n        const key = this.getFrameStepStorage()?.framePatternData?.vectorizedAssetKey;\n        if (!key) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(key);\n    }\n\n    /**\n     * @returns The asset representing the AI-enhanced version of the image. If there is no such image, returns `undefined`.\n     */\n    async getEnhancedImageSelection(): Promise<Asset | undefined> {\n        const key = this.getFrameStepStorage()?.framePatternData?.enhancedAssetKey;\n        if (!key) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(key);\n    }\n\n    /**\n     * @returns Returns true when an initial asset upload was received from the user.\n     */\n    hasOriginalImageSelection(): boolean {\n        return !!this.getFrameStepStorage()?.framePatternData?.originalAssetKey;\n    }\n\n    /**\n     * @returns True when a background removed version of the original image exists in the state, regardless of whether it is currently applied as the image selection or not.\n     */\n    hasBackgroundRemovedImageSelection(): boolean {\n        return !!this.getFrameStepStorage()?.framePatternData?.backgroundRemovedAssetKey;\n    }\n\n    /**\n     * @returns True when a vectorized version of the original image exists in the state, regardless of whether it is currently applied as the image selection or not.\n     */\n    hasVectorizedImageSelection(): boolean {\n        return !!this.getFrameStepStorage()?.framePatternData?.vectorizedAssetKey;\n    }\n\n    /**\n     * @returns True when an AI-enhanced version of the original image exists in the state, regardless of whether it is currently applied as the image selection or not.\n     */\n    hasEnhancedImageSelection(): boolean {\n        return !!this.getFrameStepStorage()?.framePatternData?.enhancedAssetKey;\n    }\n\n    /**\n     * Updates the colors on the currently displayed image. Only applicable to an SVG image with identifiable colors or a raster image with the color picker enabled.\n     * @returns A promise that resolves when the colors have been updated on the image.\n     */\n    async changeColors(newFills: Map<string, ColorDefinition>) {\n        await frameStepService.changeColors(this.step, this.manager, newFills);\n    }\n\n    /**\n     * @returns The PatternImageData for the current frame, which includes information about the image currently in the frame such as whether it's an SVG or raster image, its dimensions, and its colors (if applicable). Returns `undefined` if there is no image currently in the frame or if the frameService is not initialized.\n     */\n    getImageData(): PatternImageData | undefined {\n        if (!this.frameService) return undefined;\n        return this.frameService.getImageData();\n    }\n\n    /**\n     * @returns The ColorOption associated with this step, which includes information about whether the color picker is enabled and any predefined colors. Returns `undefined` if there is no ColorOption associated with this step.\n     */\n    async getColorOption() {\n        return await optionService.ensureFullOption(this.step.data.colorOption);\n    }\n\n    /**\n     * @returns A list of available colors for the current image selection, if the color picker is enabled. If the color picker is not enabled, returns an empty array.\n     */\n    getAvailableColors(): Promise<ColorOption[]> {\n        if (!this.step.data.colorPickerEnabled) {\n            return Promise.resolve([]);\n        }\n        return frameStepService.availableColors(this.step, this.manager);\n    }\n\n    /**\n     * @returns True if the color picker is enabled for this step, otherwise false.\n     */\n    isColorPickerEnabled() {\n        return this.step.data.colorPickerEnabled ?? false;\n    }\n\n    /**\n     * @returns A mapping of color identifiers to their corresponding ColorDefinition for the original image. Only applicable if the current image is an SVG with identifiable colors. Returns `undefined` if there is no image or if the image is not an SVG with identifiable colors.\n     */\n    async getOriginalImageColors(): Promise<\n        | {\n              [key: string]: ColorDefinition;\n          }\n        | undefined\n    > {\n        const imageData = this.getImageData();\n        if (!imageData?.svg) {\n            return undefined;\n        }\n        const svgData = await generateSVGWithUnknownColors(imageData.svg);\n        return svgData.colors;\n    }\n\n    /**\n     * @returns True when vectorizing should be available to the user.\n     */\n    getShouldVectorize(): boolean {\n        return this.step.data.shouldVectorize ?? false;\n    }\n\n    /**\n     * @returns The maximum number of colors allowed when vectorizing an image. Only applicable if shouldVectorize is true. If not specified, a suitable default will be applied.\n     */\n    getVectorizeMaxColors(): number | undefined {\n        return this.step.data.vectorizeMaxColors;\n    }\n\n    /**\n     * @returns The minimum number of pixels in either dimension of the image required for optimization pathway to be suggested.\n     */\n    getMinimumPixelThresholdForOptimization(): number | undefined {\n        return this.step.data.vectorizationMinimumPixelThreshold;\n    }\n\n    /**\n     * @returns The maximum number of colors allowed in the image selection.\n     */\n    getMaxAllowedColors(): number | undefined {\n        return this.step.data.maxColors;\n    }\n\n    /**\n     * @returns The number of unique colors present in the image. Only applicable to SVG files.\n     */\n    getUniqueColorCount(): number {\n        return frameStepService.getUniqueColorCount(this.step, this.manager);\n    }\n\n    getCurrentFrameStep(\n        frameData: FrameData,\n        uploading?: any,\n        imageUploadComplete?: any,\n        variants?: VariantResource[],\n    ): FrameStep {\n        if (variants && variants.length > 1 && frameData === undefined) {\n            return FrameStep.SelectFrame;\n        }\n\n        if (uploading || imageUploadComplete || this.getImageData()) {\n            return FrameStep.Position;\n        }\n        return FrameStep.SelectImage;\n    }\n\n    getFrameService(): FrameService | undefined {\n        return this.frameService;\n    }\n\n    hasOverlayImageKey() {\n        return this.step.data.overlayImageKey;\n    }\n\n    hasOverlayImageUrl() {\n        return (this.step.data as any).overlayImageUrl;\n    }\n\n    getWhitelistedExtensions() {\n        return [\n            ...this.step.data.whitelistedExtensions,\n            ...(this.step.data.whitelistedExtensions.includes(\".jpg\") ? [\".jpeg\"] : []),\n        ];\n    }\n\n    async getOriginalImageSelection(): Promise<Asset | undefined> {\n        const key = this.getFrameStepStorage()?.framePatternData?.originalAssetKey;\n        if (!key) {\n            return undefined;\n        }\n        return assetService.getLocalOrFromServer(key);\n    }\n\n    /**\n     * @returns The current image state being displayed (original, backgroundRemoved, or optimized).\n     */\n    getCurrentImageState(): ImageState {\n        const storage = this.getFrameStepStorage()?.framePatternData;\n        if (!storage) {\n            return ImageState.Original;\n        }\n\n        // If vectorized asset exists and is not using original, we're in optimized state\n        if (storage.vectorizedAssetKey && !storage.useOriginalAsset) {\n            return ImageState.Optimized;\n        }\n\n        // If using original or useOriginalAsset is undefined/true\n        if (storage.useOriginalAsset !== false) {\n            return ImageState.Original;\n        }\n\n        // Otherwise, we're using background removed\n        return ImageState.BackgroundRemoved;\n    }\n\n    /**\n     * Sets the current image state to display one of: original, backgroundRemoved, or optimized.\n     * This will switch between the available image versions without creating new ones.\n     * @param state The image state to switch to.\n     * @throws Error if the requested state is not available (e.g., trying to switch to backgroundRemoved when no background-removed version exists).\n     */\n    async setImageState(state: ImageState): Promise<void> {\n        const existingStorage = this.getFrameStepStorage()?.framePatternData || {};\n\n        let assetToApply: Asset | undefined;\n        let newUseOriginalAsset: boolean;\n\n        switch (state) {\n            case ImageState.Original:\n                assetToApply = await this.getOriginalImageSelection();\n                if (!assetToApply) {\n                    throw new Error(\"No original image available\");\n                }\n                newUseOriginalAsset = true;\n                break;\n\n            case ImageState.BackgroundRemoved:\n                assetToApply = await this.getBackgroundRemovedImageSelection();\n                if (!assetToApply) {\n                    throw new Error(\n                        \"No background-removed image available. Call removeBackgroundFromImageSelection first.\",\n                    );\n                }\n                newUseOriginalAsset = false;\n                break;\n\n            case ImageState.Optimized:\n                assetToApply = await this.getVectorizedImageSelection();\n                if (!assetToApply) {\n                    throw new Error(\"No optimized image available. Call vectorize first.\");\n                }\n                newUseOriginalAsset = false;\n                break;\n        }\n\n        // Apply the asset and recalculate offsets to reset zoom/centering\n        await this.selectImage(assetToApply, false, true);\n\n        // Update storage\n        this.manager.updateStorage(this.step.stepName, {\n            framePatternData: { ...existingStorage, useOriginalAsset: newUseOriginalAsset },\n        });\n    }\n\n    /**\n     * @deprecated Use getCurrentImageState() instead. Returns true if displaying original image, false otherwise.\n     */\n    getUseOriginalImageSelection(): boolean {\n        return this.getFrameStepStorage()?.framePatternData?.useOriginalAsset ?? false;\n    }\n\n    /**\n     * @deprecated Use setImageState() instead. Sets whether to use original (true) or background-removed (false) image.\n     */\n    async setUseOriginalImageSelection(value: boolean): Promise<void> {\n        const existingStorage = this.getFrameStepStorage()?.framePatternData || {};\n        if (existingStorage.useOriginalAsset === value) {\n            return;\n        }\n        const originalImage = await this.getOriginalImageSelection();\n        if (!originalImage) {\n            throw new Error(\"You must provide an image selection before calling setUseOriginalImageSelection\");\n        }\n        if (!value) {\n            const bgRemoved = await this.getBackgroundRemovedImageSelection();\n            if (!bgRemoved) {\n                throw new Error(\n                    \"You must call removeBackgroundFromImageSelection before attempting to apply the image.\",\n                );\n            }\n            await this.selectImage(bgRemoved, false, false);\n        } else {\n            await this.selectImage(originalImage, false, false);\n        }\n        this.manager.updateStorage(this.step.stepName, {\n            framePatternData: { ...existingStorage, useOriginalAsset: value },\n        });\n    }\n\n    private getFrameStepStorage() {\n        return this.manager.getStepStorage(this.step.stepName) as FrameStepStorage | undefined;\n    }\n\n    isVariantCategoriesEnabled(): boolean {\n        return this.step.data.enableVariantCategories ?? false;\n    }\n}\n","import { gql } from \"@apollo/client/core\";\n\nexport const getCurrentUserDetailsQuery = gql`\n    query GetLoggedInCustomer($email: String!) {\n        customer(emailAddress: $email) {\n            id\n            defaultTemplateBundleId\n        }\n    }\n`;\n\nexport const getCustomerTransactionsQuery = gql`\n    query GetCustomerTransactions(\n        $id: String!\n        $limit: Int!\n        $offset: Int!\n        $startDate: String\n        $endDate: String\n        $filters: TransactionFiltersInput\n        $quicksearch: String\n    ) {\n        customerTransactionsFeed(\n            id: $id\n            limit: $limit\n            offset: $offset\n            startDate: $startDate\n            endDate: $endDate\n            filters: $filters\n            quicksearch: $quicksearch\n        ) {\n            items {\n                id\n                createdAt\n                designName\n                integrationType\n                status\n                workflowState\n                workflowViewerLink\n                workflowViewerReadOnlyLink\n                product {\n                    minimumOrderQuantity\n                    id\n                    name\n                }\n            }\n            total\n        }\n    }\n`;\n\nexport const setTransactionDesignName = gql`\n    mutation SetTransactionDesignName($id: String!, $name: String!) {\n        transactionUpdate(id: $id, designName: $name) {\n            id\n            designName\n        }\n    }\n`;\n\nexport const duplicateTransactionMutation = gql`\n    mutation DuplicateTransaction($id: String!, $template: Boolean!) {\n        transactionDuplicate(id: $id, template: $template) {\n            id\n            workflowViewerLink\n        }\n    }\n`;\n\nexport const getCustomerBundlesQuery = gql`\n    query GetCustomerBundles($id: String!, $limit: Int!, $offset: Int!) {\n        customerBundlesFeed(id: $id, limit: $limit, offset: $offset) {\n            items {\n                id\n                workflowViewerLink\n                createdAt\n                dispatchDate\n                purchaseOrder\n                name\n                ordered\n            }\n            total\n        }\n    }\n`;\n\nexport const getTransactionsForBundleQuery = gql`\n    query GetTransactionsForBundle($id: String!) {\n        bundles(ids: [$id]) {\n            id\n            transactions {\n                id\n                createdAt\n                designName\n                integrationType\n                status\n                workflowState\n                workflowViewerLink\n                workflowViewerReadOnlyLink\n                product {\n                    minimumOrderQuantity\n                    id\n                    name\n                }\n            }\n        }\n    }\n`;\n\nexport const setBundleName = gql`\n    mutation SetBundleName($id: String!, $name: String!) {\n        bundleUpdate(id: $id, name: $name) {\n            id\n            name\n        }\n    }\n`;\n\nexport const duplicateBundleMutation = gql`\n    mutation DuplicateBundle($id: String!, $template: Boolean!) {\n        bundleDuplicate(id: $id, template: $template) {\n            id\n            workflowViewerLink\n        }\n    }\n`;\n\nexport const getTemplateBundlesQuery = gql`\n    query GetBundleTemplates($id: String!, $limit: Int!, $offset: Int!) {\n        customerBundlesFeed(id: $id, limit: $limit, offset: $offset, template: true) {\n            items {\n                id\n                workflowViewerLink\n                createdAt\n                name\n                ordered\n            }\n            total\n        }\n    }\n`;\n","import { graphQlManager } from \"../services/server\";\nimport { Bundle, BundlesFeed, Transaction } from \"../types\";\nimport {\n    duplicateBundleMutation,\n    duplicateTransactionMutation,\n    getCurrentUserDetailsQuery,\n    getCustomerBundlesQuery,\n    getCustomerTransactionsQuery,\n    getTemplateBundlesQuery,\n    getTransactionsForBundleQuery,\n    setBundleName,\n    setTransactionDesignName,\n} from \"./queries\";\n\nexport const nameBundle = async (id: string, name: string, context: any) => {\n    return await graphQlManager.getShadowGraphqlClient().mutate<object>({\n        mutation: setBundleName,\n        errorPolicy: \"all\",\n        variables: {\n            id,\n            name,\n        },\n        context,\n    });\n};\n\nexport const nameTransaction = async (id: string, name: string) => {\n    return await graphQlManager.getShadowGraphqlClient().mutate<object>({\n        mutation: setTransactionDesignName,\n        errorPolicy: \"all\",\n        variables: {\n            id,\n            name,\n        },\n    });\n};\n\nexport const duplicateBundle = async (id: string, template: boolean) => {\n    const dupe = await graphQlManager.getShadowGraphqlClient().mutate<{ bundleDuplicate: Bundle }>({\n        mutation: duplicateBundleMutation,\n        errorPolicy: \"all\",\n        variables: {\n            id,\n            template,\n        },\n    });\n    return dupe;\n};\n\nexport const duplicateTransaction = async (id: string, template: boolean) => {\n    const dupe = await graphQlManager.getShadowGraphqlClient().mutate<{ transactionDuplicate: Transaction }>({\n        mutation: duplicateTransactionMutation,\n        errorPolicy: \"all\",\n        variables: {\n            id,\n            template,\n        },\n    });\n    return dupe;\n};\n\nexport const getCustomer = async (email: string) => {\n    const queryResponse = await graphQlManager.getShadowGraphqlClient().query<{ customer: { id: string } }>({\n        query: getCurrentUserDetailsQuery,\n        errorPolicy: \"all\",\n        variables: {\n            email,\n        },\n    });\n    return queryResponse.data.customer;\n};\n\nexport const getCustomerBundles = async (customerId: string, limit: number, offset: number) => {\n    const rows = await graphQlManager.getShadowGraphqlClient().query<{\n        customerBundlesFeed: BundlesFeed;\n    }>({\n        query: getCustomerBundlesQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id: customerId,\n            offset,\n            limit,\n        },\n    });\n    return rows;\n};\n\nexport const getTransactionsForBundle = async (id: string, context: any) => {\n    return await graphQlManager.getShadowGraphqlClient().query<{\n        bundles: { id: string; transactions: Transaction[] }[];\n    }>({\n        query: getTransactionsForBundleQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id,\n        },\n        context,\n    });\n};\n\ninterface TransactionsFeed {\n    items: Transaction[];\n    total: number;\n}\n\nexport const getUnorderedTransactions = async (customerId: string, limit: number, offset: number) => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        customerTransactionsFeed: TransactionsFeed;\n    }>({\n        query: getCustomerTransactionsQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id: customerId,\n            quicksearch: \"\",\n            filters: {\n                link: \"and\",\n                status: {\n                    operator: \"isAnyOf\",\n                    values: [\"Created\", \"DesignCompleted\", \"ExternallyOrdered\"],\n                },\n                template: {\n                    value: \"false\",\n                },\n            },\n            offset,\n            limit,\n        },\n    });\n    return response?.data.customerTransactionsFeed?.items || [];\n};\n\nexport const getOrderedTransactions = async (customerId: string, limit: number, offset: number) => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        customerTransactionsFeed: TransactionsFeed;\n    }>({\n        query: getCustomerTransactionsQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id: customerId,\n            quicksearch: \"\",\n            filters: {\n                link: \"and\",\n                status: {\n                    operator: \"equals\",\n                    value: \"Ordered\",\n                },\n                template: {\n                    value: \"false\",\n                },\n            },\n            offset,\n            limit,\n        },\n    });\n    return response?.data.customerTransactionsFeed?.items || [];\n};\n\nexport const getTemplateTransactions = async (customerId: string, limit: number, offset: number) => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        customerTransactionsFeed: TransactionsFeed;\n    }>({\n        query: getCustomerTransactionsQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id: customerId,\n            quicksearch: \"\",\n            filters: {\n                link: \"and\",\n                template: {\n                    value: \"true\",\n                },\n            },\n            offset,\n            limit,\n        },\n    });\n    return response?.data.customerTransactionsFeed?.items || [];\n};\n\nexport const getTemplateBundles = async (customerId: string, limit: number, offset: number) => {\n    const rows = await graphQlManager.getShadowGraphqlClient().query<{\n        customerBundlesFeed: BundlesFeed;\n    }>({\n        query: getTemplateBundlesQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"no-cache\",\n        variables: {\n            id: customerId,\n            offset,\n            limit,\n        },\n    });\n    return rows?.data.customerBundlesFeed?.items || [];\n};\n","import { gql } from \"@apollo/client/core\";\nimport { graphQlManager } from \"./services/server\";\nimport { WorkflowExperience } from \"./WorkflowExperience\";\nimport { AddressValidationStatus } from \"./types\";\n\nconst addressValidationResultFragment = gql`\n    fragment AddressValidationResultFields on AddressValidationResult {\n        addressComplete\n        address {\n            formattedAddress\n            regionCode\n            postalCode\n            administrativeArea\n            locality\n            sublocality\n        }\n        components {\n            name\n            type\n            confirmationLevel\n            inferred\n            spellCorrected\n            replaced\n            unexpected\n        }\n        missingComponentTypes\n    }\n`;\nconst addressValidationJobFragment = gql`\n    ${addressValidationResultFragment}\n    fragment AddressValidationJobFields on AddressValidationJob {\n        id\n        entityId\n        status\n        createdAt\n        updatedAt\n        result {\n            ...AddressValidationResultFields\n        }\n    }\n`;\n\nconst addressValidationJobsQuery = gql`\n    ${addressValidationJobFragment}\n    query GetAddressValidationJobs($ids: [String!]!) {\n        addressValidationJobs(ids: $ids) {\n            ...AddressValidationJobFields\n        }\n    }\n`;\n\nconst recipientAddressValidationJobsQuery = gql`\n    ${addressValidationJobFragment}\n    query GetRecipientsWithAddressValidationJobs($ids: [String!]!) {\n        recipients(ids: $ids) {\n            id\n            addressValidationJob {\n                ...AddressValidationJobFields\n            }\n        }\n    }\n`;\n\nconst recipientValidateMutation = gql`\n    ${addressValidationResultFragment}\n    mutation ValidateRecipientAddress($id: String!) {\n        recipientValidate(id: $id) {\n            ...AddressValidationResultFields\n        }\n    }\n`;\n\nconst recipientValidateBatchMutation = gql`\n    ${addressValidationJobFragment}\n    mutation BatchValidateRecipientAddress($ids: [String!]!) {\n        recipientValidateBatch(ids: $ids) {\n            ...AddressValidationJobFields\n        }\n    }\n`;\n\nconst recipientOverrideAddressMutation = gql`\n    mutation OverrideRecipientAddress($id: String!) {\n        recipientOverrideAddress(id: $id) {\n            id\n        }\n    }\n`;\n\nexport enum AddressValidationResultConfirmationLevel {\n    Confirmed = \"Confirmed\",\n    Plausible = \"Plausible\",\n    Unlikely = \"Unlikely\",\n}\n\nexport interface AddressValidationResult {\n    /**\n     * Whether the resulting address is considered complete.\n     * An address is considered complete if no components were unexpected or missing.\n     */\n    addressComplete?: boolean;\n    address?: {\n        /**\n         * The full address, formatted in the standard format for the area.\n         */\n        formattedAddress?: string;\n        /** Country code; AU, US, UK, etc. */\n        regionCode?: string;\n        postalCode?: string;\n        /** The state/province etc. */\n        administrativeArea?: string;\n        /** Suburb/city */\n        locality?: string;\n        sublocality?: string;\n    };\n    /** The individual components of the address, and their associated validation information. */\n    components?: AddressComponent[];\n    /**\n     * Component types that were expected to be on the address, but were not present and could not be inferred by the validator.\n     * See https://developers.google.com/maps/documentation/places/web-service/legacy/supported_types#table2 for a list of possible types.\n     */\n    missingComponentTypes: string[];\n}\n\nexport interface AddressComponent {\n    /** The text value of the component. */\n    name: string;\n    /**\n     * The type of component it is.\n     * See https://developers.google.com/maps/documentation/places/web-service/legacy/supported_types#table2 for a list of possible types.\n     */\n    type: string;\n    /** How strongly the validator believes the result to be correct. */\n    confirmationLevel?: AddressValidationResultConfirmationLevel;\n    /** Whether this component was inferred by the validator, i.e. it was not present on the original input. */\n    inferred?: boolean;\n    /** Whether this component had spelling corrected by the validator. */\n    spellCorrected?: boolean;\n    /** Whether this component had its original value completely replaced by the validator. */\n    replaced?: boolean;\n    /** Whether the validator believes this component to be unexpected for the supplied address. */\n    unexpected?: boolean;\n}\n\nexport enum AddressValidationJobStatus {\n    Created = \"Created\",\n    Processing = \"Processing\",\n    Completed = \"Completed\",\n    Failed = \"Failed\",\n    Cancelled = \"Cancelled\",\n}\n\nexport interface AddressValidationJob {\n    id: string;\n    /** The entity this job was created for. */\n    entityId?: string;\n    /** The current status of this Job. */\n    status: AddressValidationJobStatus;\n    /** The datetime of when this Job was created. */\n    createdAt: string;\n    /** The datetime of when this Job was last updated. */\n    updatedAt: string;\n    /** The validation result. Only present if status is `Confirmed`. */\n    result?: AddressValidationResult;\n}\n\n/**\n * Fetches Recipients of Workflow Experiences and their associated Address Validation Jobs.\n * The resulting array will be in the same order as the input `ids`. If a Recipient does not have an associated Job, it will be `undefined`.\n * @param workflowExperiences The Workflow Experiences to fetch jobs for.\n * @returns The associated Address Validation Jobs for the requested Workflow Experiences.\n */\nexport const getValidationJobsForWorkflowExperiences = async (\n    workflowExperiences: WorkflowExperience[],\n): Promise<(AddressValidationJob | undefined)[]> => {\n    const ids = workflowExperiences.map((wfe) => wfe.getTransaction().recipient?.id).filter((it) => !!it);\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        recipients: { id: string; addressValidationJob?: AddressValidationJob }[];\n    }>({\n        query: recipientAddressValidationJobsQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            ids: ids,\n        },\n    });\n    return workflowExperiences.map((wfe) => {\n        const id = wfe.getTransaction().recipient?.id;\n        if (!id) {\n            return undefined;\n        }\n        return response.data?.recipients?.find((r) => r.id === id)?.addressValidationJob;\n    });\n};\n\n/**\n * Retrieves an up-to-date version of the requested Address Validation Jobs.\n * If a Job has been completed, the validation result will be present on the object.\n * @param ids An array of Address Validation Job id strings.\n * @returns An array of Address Validation Jobs.\n */\nexport const getAddressValidationJobs = async (ids: string[]): Promise<AddressValidationJob[] | undefined> => {\n    const response = await graphQlManager.getShadowGraphqlClient().query<{\n        addressValidationJobs: AddressValidationJob[];\n    }>({\n        query: addressValidationJobsQuery,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            ids: ids,\n        },\n    });\n    return response.data?.addressValidationJobs;\n};\n\n/**\n * Validate a single Workflow Experience's recipient address.\n * @param workflowExperience The Workflow Experience to validate. If this does not have a recipient attached, the function will immediately resolve with `undefined`.\n * @returns The validation result.\n */\nexport const validateWorkflowExperienceRecipient = async (\n    workflowExperience: WorkflowExperience,\n): Promise<AddressValidationResult | undefined> => {\n    if (!workflowExperience.getTransaction().recipient?.id) {\n        return undefined;\n    }\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{\n        recipientValidate: AddressValidationResult;\n    }>({\n        mutation: recipientValidateMutation,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            id: workflowExperience.getTransaction().recipient!.id!,\n        },\n    });\n    return response.data?.recipientValidate;\n};\n\n/**\n * Requests to validate many Workflow Experiences' recipient addresses asynchronously.\n * @param workflowExperiences The Workflow Experiences to validate.\n * @returns An array of Address Validation Jobs. This is guaranteed to be in the same order as the input array.\n * If an input Workflow Experience does not have a recipient, the associated Job will be `undefined`.\n * The Jobs will likely be incomplete; consider polling `getAddressValidationJobs` with the ids of the Jobs you get from this function.\n */\nexport const validateWorkflowExperienceRecipients = async (\n    workflowExperiences: WorkflowExperience[],\n): Promise<(AddressValidationJob | undefined)[]> => {\n    const ids = workflowExperiences.map((wfe) => wfe.getTransaction().recipient?.id).filter((it) => !!it);\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{\n        recipientValidateBatch: AddressValidationJob[];\n    }>({\n        mutation: recipientValidateBatchMutation,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            ids: ids,\n        },\n    });\n    return workflowExperiences.map((wfe) => {\n        const id = wfe.getTransaction().recipient?.id;\n        if (!id) {\n            return undefined;\n        }\n        return response.data?.recipientValidateBatch?.find((r) => r.entityId === id);\n    });\n};\n\n/**\n * Override the address of a specific workflow experience recipient\n * @param workflowExperience The Workflow Experience to override. If this does not have a recipient attached, the function will immediately resolve.\n */\nexport const overrideWorkflowExperienceRecipientAddress = async (\n    workflowExperience: WorkflowExperience,\n): Promise<void> => {\n    const id = workflowExperience.getTransaction().recipient?.id;\n    if (!id) {\n        return;\n    }\n    const response = await graphQlManager.getShadowGraphqlClient().mutate<{\n        recipientOverrideAddress: { id: string };\n    }>({\n        mutation: recipientOverrideAddressMutation,\n        errorPolicy: \"all\",\n        fetchPolicy: \"network-only\",\n        variables: {\n            id,\n        },\n    });\n    if (response.data?.recipientOverrideAddress?.id) {\n        workflowExperience.getTransaction().addressValidationStatus = AddressValidationStatus.Overridden;\n    }\n};\n","import { gql } from \"@apollo/client/core\";\nimport { IntegrationProductResource } from \"../types\";\nimport { graphQlManager, Product } from \"..\";\n\nconst getIntegrationProductsQuery = gql`\n    query GetIntegrationProductsForIds($ids: [String!]!) {\n        integrationProducts(ids: $ids) {\n            id\n            product {\n                id\n                name\n            }\n        }\n    }\n`;\n\nexport const getIntegrationProducts = async (ids: string[]): Promise<IntegrationProductResource[]> => {\n    const response = await graphQlManager\n        .getShadowGraphqlClient()\n        .query<{ integrationProducts: { id: string; product: Product }[] }>({\n            query: getIntegrationProductsQuery,\n            variables: {\n                ids,\n            },\n        });\n    return response.data.integrationProducts;\n};\n"],"names":["extendStatics","d","b","p","__extends","__","__assign","t","s","i","n","__rest","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","__generator","body","_","f","y","g","verb","v","op","__spreadArray","to","from","pack","l","ar","genericMessage","_a","setPrototypeOf","obj","proto","InvariantError","_super","message","_this","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","name","method","version","maybe","thunk","untypedGlobal","prefixCounts","makeUniqueId","prefix","count","stringifyForDisplay","space","undefId","key","wrap","fn","args","_i","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","stringify","arg","messageArgs","global","devAssert","isObjectLike","LineRegExp","getLocation","source","position","lastLineStart","line","match","printLocation","location","printSourceLocation","sourceLocation","firstLineColumnOffset","lineIndex","lineOffset","lineNum","columnOffset","columnNum","locationStr","lines","locationLine","subLineIndex","subLineColumnNum","subLines","printPrefixedLines","subLine","existingLines","padLen","toNormalizedOptions","firstArg","GraphQLError","rawArgs","_this$nodes","_nodeLocations$","_ref","nodes","positions","path","originalError","extensions","undefinedIfEmpty","nodeLocations","node","loc","pos","originalExtensions","output","formattedError","array","syntaxError","description","Location","startToken","endToken","Token$1","kind","start","end","column","QueryDocumentKeys","kindValues","isNode","maybeNode","maybeKind","OperationTypeNode","DirectiveLocation","Kind","isWhiteSpace","code","isDigit","isLetter","isNameStart","isNameContinue","dedentBlockStringLines","_firstNonEmptyLine2","commonIndent","firstNonEmptyLine","lastNonEmptyLine","_firstNonEmptyLine","indent","leadingWhitespace","str","printBlockString","options","escapedValue","isSingleLine","forceLeadingNewLine","hasTrailingTripleQuotes","hasTrailingQuote","hasTrailingSlash","forceTrailingNewline","printAsMultipleLines","skipLeadingNewLine","TokenKind","Lexer","startOfFileToken","Token","token","nextToken","readNextToken","isPunctuatorTokenKind","isUnicodeScalarValue","isSupplementaryCodePoint","isLeadingSurrogate","isTrailingSurrogate","printCodePointAt","lexer","char","createToken","col","bodyLength","readComment","readBlockString","readString","readNumber","readName","firstCode","isFloat","readDigits","chunkStart","escape","readEscapedUnicodeVariableWidth","readEscapedUnicodeFixedWidth","readEscapedCharacter","point","size","readHexDigit","read16BitHexCode","trailingCode","lineStart","currentLine","blockLines","MAX_ARRAY_LENGTH","MAX_RECURSIVE_DEPTH","inspect","formatValue","seenValues","formatObjectValue","previouslySeenValues","isJSONable","jsonValue","formatArray","formatObject","object","entries","getObjectTag","len","remaining","items","tag","isProduction","instanceOf","constructor","_value$constructor","className","valueClassName","stringifiedValue","Source","locationOffset","isSource","parse","parser","Parser","document","Parser$2","_options","sourceObj","hasDescription","keywordToken","operation","operationToken","nameOrAlias","alias","isConst","item","hasTypeCondition","varName","directives","type","innerType","operationTypes","interfaces","fields","defaultValue","types","values","getTokenDesc","repeatable","locations","ofDirective","memberName","argumentName","getTokenKindDesc","atToken","openKind","parseFn","closeKind","delimiterKind","maxTokens","printString","escapedRegExp","escapedReplacer","escapeSequences","BREAK","visit","root","visitor","visitorKeys","enterLeaveMap","getEnterLeaveForKind","stack","inArray","keys","index","edits","parent","ancestors","isLeaving","isEdited","editOffset","editKey","editValue","arrayKey","_enterLeaveMap$get","_enterLeaveMap$get2","visitFn","_node$kind","kindVisitor","print","ast","printDocASTReducer","MAX_LINE_LENGTH","join","varDefs","hasMultilineItems","variable","selections","block","selectionSet","argsLine","typeCondition","variableDefinitions","isBlockString","fieldName","maybeArray","separator","_maybeArray$filter$jo","x","maybeString","_maybeArray$some","isSelectionNode","shouldInclude","variables","getInclusionDirectives","directive","ifArgument","evaledValue","hasDirectives","names","all","nameSet","uniqueCount","hasClientExports","isInclusionDirective","directiveArguments","directiveName","ifValue","getFragmentMaskMode","fragment","_b","modeArg","defaultMakeData","forEach","slice","hasOwnProperty","Trie","weakness","makeData","map","data","head","child","create","isObjRef","isReactNative","canUseWeakMap","canUseWeakSet","canUseSymbol","canUseAsyncIteratorSymbol","isNonNullObject","isPlainObject","getFragmentQueryDocument","fragmentName","actualFragmentName","fragments","definition","query","createFragmentMap","symTable","getFragmentFromSelection","selection","fragmentMap","defaultDispose","StrongCache","max","dispose","older","newer","noop","_WeakRef","_WeakMap","_FinalizationRegistry","finalizationBatchSize","WeakCache","iterator","scheduledCleanup","schedule","cache","AutoCleanedWeakCache","ret","AutoCleanedStrongCache","cacheSizeSymbol","cacheSizes","canonicalStringify","stableObjectReplacer","sortingMap","everyKeyInOrder","unsortedKey","sortedKeys","sortedKey","sortedObject_1","makeReference","id","isReference","isDocumentNode","isStringValue","isBooleanValue","isIntValue","isFloatValue","isVariable","isObjectValue","isListValue","isEnumValue","isNullValue","valueToObjectRepresentation","argObj","nestedArgObj_1","variableValue","listValue","nestedArgArrayObj","storeKeyNameFromField","field","directivesObj","getStoreKeyName","KNOWN_DIRECTIVES","storeKeyNameStringify","filterKeys","filteredArgs_1","completeFieldName","stringifiedArgs","previous","argumentsObjectFromField","argObj_1","resultKeyNameFromField","getTypenameFromResult","isField","fragments_1","typename","isInlineFragment","checkDocument","doc","operations","getOperationDefinition","getOperationName","getFragmentDefinitions","getQueryDefinition","queryDef","getFragmentDefinition","fragmentDef","getMainDefinition","queryDoc","fragmentDefinition","getDefaultValues","defaultValues","defs","def","currentContext","MISSING_VALUE","idCounter","makeSlotClass","context","callback","slots","saved","globalKey","host","globalHost","Slot","bind","noContext","parentEntrySlot","arrayFromSet","set","maybeUnsubscribe","entryOrDep","unsubscribe","emptySetPool","POOL_TARGET_SIZE","assert","optionalMessage","valueIs","a","valueGet","valueCopy","Entry","mightBeDirty","rememberParent","reallyRecompute","reportDirty","forgetChildren","eachParent","forgetChild","dep","reportDirtyChild","reportCleanChild","entry","recomputeNewValue","maybeSubscribe","setClean","normalizeResult","oldValueCopy","reportClean","parentCount","parents","parentWasClean","childValue","removeDirtyChild","dc","_value","EntryMethods","depsByKey","depend","entryMethodName","m","defaultKeyTrie","defaultMakeCacheKey","caches","originalFunction","keyArgs","makeCacheKey","subscribe","cacheOption","optimistic","dirtyKey","peekKey","forgetKey","identity","DocumentTransform","transform","predicate","left","right","documentTransform","stableCacheKeys_1","cacheKeys","transformedDocument","otherTransform","printCache","origPrint","isArray","isNonEmptyArray","TYPENAME_FIELD","isEmpty","nullIfDocIsEmpty","getDirectiveMatcher","configs","tests","config","testConfig","test","makeInUseGetterFunction","defaultKey","inUse","removeDirectivesFromDocument","getInUseByOperationName","getInUseByFragmentName","getInUse","ancestor","operationCount","directiveMatcher","shouldRemoveField","nodeDirectives","originalFragmentDefsByPath","firstVisitMadeChanges","fieldOrInlineFragmentVisitor","docWithoutDirectiveSubtrees","_key","_parent","_path","originalNode","populateTransitiveVars","childFragmentName","allFragmentNamesUsed","fragmentWillBeRemoved","enterVisitor","usedVariableNames_1","varDef","addTypenameToDocument","skip","buildQueryFromSelectionSet","definitionOperation","modifiedDoc","removeClientSetsFromDocument","addNonReactiveToNamedFragments","mergeDeep","sources","mergeDeepArray","target","merger","DeepMerger","defaultReconciler","property","reconciler","sourceKey","targetValue","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","arr2","_defineProperties","props","descriptor","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","closeSubscription","flushSubscription","queue","notifySubscription","observer","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_proto","_proto2","_proto3","done","_this2","C","_this3","_this4","hasSeed","hasValue","seed","acc","first","_this5","_len","startNext","next","_this6","subscriptions","outer","inner","completeIfDone","observable","_iterator","_step","_len2","_key2","symbolObservablePonyfill","Symbol","ponyfill","prototype","fakeObsSymbol","preventUnhandledRejection","promise","toString","cloneDeep","cloneDeepHelper","val","seen","copy_1","copy_2","iterateObserversSafely","observers","argument","observersWithMethod","obs","asyncMap","mapFn","catchFn","promiseQueue","makeCallback","examiner","both","error","handler","sub","fixObservableSubclass","subclass","isPromiseLike","Concast","reason","iterable","nextOrError","nextResultListeners","listener","called","isExecutionPatchIncrementalResult","isExecutionPatchInitialResult","isExecutionPatchResult","isApolloPayloadResult","mergeIncrementalData","prevResult","mergedData","isNumericKey","parent_1","graphQLResultHasError","errors","getGraphQLErrorsFromResult","graphQLErrors","incrementalResult","compact","objects","mergeOptions","defaults","omitDeep","__omitDeep","known","modified","array_1","obj_1","k","stripTypename","deprecationsSlot","slot","muteDeprecations","fromError","errorValue","throwServerError","response","validateOperation","OPERATION_FIELDS","createOperation","starting","setContext","getContext","transformOperation","transformedOperation","filterOperationVariables","unusedNames","passthrough","forward","toLink","ApolloLink","isTerminating","link","request","links","leftLink","rightLink","second","firstLink","nextLink","execute","asyncIterator","nodeStreamIterator","stream","waiting","onData","chunk","shiftedArr","onError","err","pair","onEnd","getNext","promiseIterator","resolved","readerIterator","reader","isNodeResponse","isReadableStream","isAsyncIterableIterator","isStreamableBlob","isBlob","isNodeReadableStream","responseIterator","PROTOCOL_ERRORS_SYMBOL","graphQLResultHasProtocolErrors","isApolloError","generateErrorMessage","ApolloError","protocolErrors","clientErrors","networkError","errorMessage","extraInfo","readMultipartBody","nextValue","decoder","contentType","delimiter","boundaryVal","boundary","buffer","running","searchFrom","bi","headers","contentType_1","_c","_d","_e","parseHeaders","parseJsonBody","headerText","headersInit","name_1","bodyText","getResult","parseError","handleError","parseAndCheckHttpResponse","serializeFetchParameter","label","serialized","defaultHttpOptions","defaultHeaders","defaultOptions","fallbackHttpConfig","defaultPrinter","printer","selectHttpOptionsAndBodyInternal","http","removeDuplicateHeaders","operationName","preserveHeaderCase","normalizedHeaders_1","headerData","normalizedHeaders","selectURI","fallbackURI","contextURI","rewriteURIForGET","chosenURI","queryParams","addQueryParam","serializedVariables","serializedExtensions","preFragment","fragmentStart","queryParamsPrefix","newURI","backupFetch","createHttpLink","linkOptions","uri","preferredFetch","includeExtensions","useGETForQueries","includeUnusedVariables","requestOptions","linkConfig","clientAwarenessHeaders","contextHeaders","contextConfig","transformedQuery","controller","definitionIsMutation","definitionIsSubscription","isSubscription","hasDefer","acceptHeader","currentFetch","observerNext","ctype","HttpLink","fnToStr","previousComparisons","equal","check","aTag","bTag","previouslyCompared","aKeys","definedKeys","bKeys","keyCount","aIterator","isMap","info","aKey","aValue","aCode","endsWith","nativeCodeSuffix","isDefinedKey","full","suffix","fromIndex","bSet","equalByQuery","aData","aRest","bData","bRest","equalBySelectionSet","aResult","bResult","seenSelections","selectionHasNonreactiveDirective","resultKey","aResultChild","bResultChild","childSelectionSet","aChildIsArray","bChildIsArray","length_1","directiveIsNonreactive","dir","MapImpl","SetImpl","disableWarningsSlot","maskDefinition","masked","maskSelectionSet","getMutableTarget","mutableTargets","mutableTarget","migration","knownChanged","memo","keyName","mode","maskFragment","maskOperation","ApolloCache","optimisticId","updateResult","transaction","otherOptions","dataMasking","diffOptions","latestDiff","diff","update","MissingFieldError","hasOwn","isNullish","defaultDataIdFromObject","__typename","_id","defaultConfig","normalizeConfig","shouldCanonizeResults","TypeOrFieldNameRegExp","fieldNameFromStoreName","storeFieldName","selectionSetMatchesResult","storeValueIsStoreObject","makeProcessedFieldsMerger","extractFragmentContext","DELETE","delModifier","INVALIDATE","EntityStore","policies","group","objectOrReference","objOrRef","objOrIdOrRef","mergeIntoStore","ref","dataId","storeObject","Layer","dependOnExistence","existing","incoming","merged","storeObjectReconciler","fieldsToDirty_1","changedFields_1","needToMerge_1","allDeleted_1","sharedDetails_1","fieldNameOrOptions","fieldValue","modify","newValue","limit","evicted","extraRootIds","newData","__META","rest_1","rootId","ids","snapshot","idsToRemove","root_1","found_1","workSet_1","CacheGroup","caching","makeDepKey","maybeDependOnExistenceOfEntity","store","entityId","supportsResultCaching","Root","resultCaching","Stump","layerId","replay","ownStoreObject","parentStoreObject","fromParent","existingObject","incomingObject","existingValue","incomingValue","shallowCopy","isObjectOrArray","ObjectCanon","copy","original","proto_1","firstValueIndex_1","json","execSelectionSetKeyArgs","StoreReader","canonizeResults","peekArgs","other","returnPartialData","rootRef","execResult","missing","firstMissing","latest","enclosingRef","objectsToMerge","missingMerger","handleMissing","resultName","workSet","finalResult","frozen","childResult","tree","cacheSlot","cacheInfoMap","getCacheInfo","forgetCache","rv","recallCache","makeVar","listeners","broadcast","oldListeners","attach","specifierInfoCache","lookupSpecifierInfo","spec","cacheKey","keyFieldsFnFromSpecifier","specifier","extract","keyObject","collectSpecifierPaths","schemaKeyPath","extracted","extractKeyPath","extractKey","keyArgsFnFromSpecifier","collected","keyPath","firstKey","firstChar","directiveName_1","directiveArgs","variableName","varKeyPath","extractor","getSpecifierPaths","toMerge","paths_1","currentPath_1","normalize","reducer","argsFromFieldSpecifier","nullKeyFieldsFn","simpleKeyArgsFn","_args","mergeTrueFn","mergeObjects","mergeFalseFn","Policies","partialContext","normalizeReadFieldOptions","policy","keyFn","specifierOrId","typePolicies","queryType","mutationType","subscriptionType","existingFieldPolicies","keyFields","setMerge","merge","read","which","old","possibleTypes","supertype","subtype","policy_1","supertypes_1","regExp","fuzzy","fuzzySupertypes","rest","inbox","createIfMissing","supertypeSet","typenameSupertypeSet","workQueue_1","maybeEnqueue_1","needToCheckFuzzySubtypes","fuzzyString","fieldSpec","specifierOrString","nameOrField","readOptions","makeFieldFunctionOptions","parentTypename","childTypename","storage","makeMergeObjectsFunction","toReference","canRead","readFieldArgs","argc","eType","iType","typesDiffer","getContextFlavor","clientOnly","deferred","flavored","StoreWriter","overwrite","operationDefinition","mergeTree","entityRef","applied","readField","result_1","fieldNodeSet","resultFieldKey","childTree","getChildMergeTree","maybeRecycleChildMergeTree","dataRef","sets","previous_1","mergeMergeTrees","mergeTreeIsEmpty","fieldMap","limitingTrie","flatten","inheritedContext","visitedNode","getStorageArgs","e_1","i_1","getValue_1","eVal","iVal","aVal","emptyMergeTreePool","needToMergeMaps","remainingRightKeys_1","leftTree","InMemoryCache","rootStore","resetResultIdentities","previousReader","c","watch","idToRemove","newOptimisticData","removeOptimistic","onWatchUpdated","perform","layer","optimisticData","alreadyDirty","lastDiff","NetworkStatus","isNetworkRequestInFlight","networkStatus","assign","ObservableQuery","queryManager","queryInfo","startedInactive","subObserver","defaultSubscriptionObserverErrorCallback","last","skipCacheDataFor","defaultFetchPolicy","fetchPolicy","_f","initialFetchPolicy","opDef","saveAsLastResult","lastResult","newResult","documentInfo","resultIsDifferent","variablesMustMatch","reobserveOptions","fetchMoreOptions","combinedOptions","qid","originalNetworkStatus","updatedQuerySet","updateQuery","isCached","fetchMoreResult","subscriptionData","updateOptions","newOptions","mergedOptions","complete","pollInterval","newNetworkStatus","pollingInfo","maybeFetch","poll","useDisposableConcast","oldVariables","oldFetchPolicy","finishWaitingForOwnResult","concast","fromLink","lastError","isDifferent","errorResult","nextFetchPolicy","currentFetchPolicy","destructiveMethodCounts","wrapDestructiveCacheMethod","methodName","QueryInfo","queryId","oq","oldDiff","watchOptions","lastWrite","cacheWriteBehavior","shouldWriteResult","errorPolicy","ignoreErrors","writeWithErrors","IGNORE","QueryManager","defaultDocumentTransform","_info","cancel","mutationId","mutationStoreValue","isOptimistic","self","mutation","optimisticResponse","updateQueries","refetchQueries","awaitRefetchQueries","updateWithProxyFn","onQueryUpdated","_g","_h","keepRootFields","_j","storeResult","cacheWrites","skipCache","updateQueries_1","observableQuery","queryName","updater","currentQueryResult","nextQueryResult","results_1","write","isFinalResult","transformCache","cacheEntry","include","queries","queryNames","queryNamesAndQueryStrings","legacyQueryOptions","desc","queryString","includeStandby","observableQueryPromises","makeObservable","hasErrors","hasProtocolErrors","observablePromise_1","deduplication","serverQuery","clientQuery","inFlightLinkObservables_1","printedServerQuery_1","varJson_1","concast_1","cb","requestId","linkDocument","aqr","notifyOnNetworkStatusChange","normalized","fromVariables","sourcesWithInfo","cleanupCancelFn","containsDataFromLink","updateCache","includedQueriesById","results","refetchWritePolicy","oldNetworkStatus","readCache","resultsFromCache","fromData","resultsFromLink","shouldNotify","newContext","LocalState","client","resolvers","fragmentMatcher","resolverGroup","remoteResult","onlyRunForcedResolvers","localResult","document_1","forceResolvers","rootValue_1","rootValue","mainDefinition","selectionsToResolve","defaultOperationType","execContext","isClientFieldDescendant","resultsToMerge","fieldResult","fragmentResult","aliasedFieldName","aliasUsed","defaultResult","resultPromise","resolverType","resolverMap","isClientField","isSingleASTNode","selectionsToResolveCache","collectByDefinition","definitionNode","matches_1","___","spread","fragmentSelections","ApolloClient","credentials","ssrMode","ssrForceFetchDelay","connectToDevTools","queryDeduplication","defaultContext","assumeImmutableResults","typeDefs","clientAwareness","clientAwarenessName","clientAwarenessVersion","devtools","windowWithDevTools","devtoolsSymbol","payload","obsQuery","serializedState","newLink","docCache","fragmentSourceMap","printFragmentWarnings","experimentalFragmentVariables","string","cacheKeyFromLoc","processFragments","seenKeys","definitions","sourceKeySet","stripLoc","parseDocument","parsed","gql","literals","resetCaches","disableFragmentWarnings","enableExperimentalFragmentVariables","disableExperimentalFragmentVariables","extras","gql_1","AssetType","GlobalPropertyConfigurationConditionMode","AspectType","StepType","StepAspectType","LayoutRenderingPurpose","LayoutElementType","BundleDesignCreationCartAddMode","AddressValidationStatus","ShareActionType","IntegrationType","AddonHandle","ProductCameraRig","StakeholderType","TextAlgorithm","ScaleAxis","UnitOfMeasurement","ConversionDataType","CustomError","ConfigurationError","OptionNotFoundError","LayoutNotFoundError","region","AssetNotFoundError","variant","ResourceNotFoundError","asset","MisconfigurationError","ImplementationError","UnhandledBehaviorError","ParseError","ClientError","ResourceGenerationError","LocalStorageService","serialisedMap","mapSerialised","InMemoryStorageService","buildPersistentStorage","persistenceService","setter","handle","closed","req","errorHandler","retriedSub","retriedResult","ErrorLink","Configuration","serverUrl","servicesApiUrl","hubUrl","spiffCoreConfiguration","q","r","u","w","z","A","B","D","E","F","G","H","I","J","K","L","M","h","N","O","R","S","T","U","V","W","X","react_production_min","ReactVersion","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_OFFSCREEN_TYPE","MAYBE_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","maybeIterator","ReactCurrentDispatcher","ReactCurrentBatchConfig","ReactCurrentActQueue","ReactCurrentOwner","ReactDebugCurrentFrame","currentExtraStackFrame","setExtraStackFrame","impl","enableScopeAPI","enableCacheElement","enableTransitionTracing","enableLegacyHidden","enableDebugTracing","ReactSharedInternals","warn","format","printWarning","level","argsWithFormat","didWarnStateUpdateForUnmountedComponent","warnNoop","publicInstance","callerName","_constructor","componentName","warningKey","ReactNoopUpdateQueue","completeState","partialState","emptyObject","Component","deprecatedAPIs","defineDeprecationWarning","fnName","ComponentDummy","PureComponent","pureComponentPrototype","createRef","refObject","isArrayImpl","typeName","hasToStringTag","willCoercionThrow","testStringCoercion","checkKeyStringCoercion","getWrappedName","outerType","wrapperName","displayName","functionName","getContextName","getComponentNameFromType","provider","outerName","lazyComponent","init","RESERVED_PROPS","specialPropKeyWarningShown","specialPropRefWarningShown","didWarnAboutStringRefs","hasValidRef","getter","hasValidKey","defineKeyPropWarningGetter","warnAboutAccessingKey","defineRefPropWarningGetter","warnAboutAccessingRef","warnIfStringRefCannotBeAutoConverted","ReactElement","owner","element","createElement","children","propName","childrenLength","childArray","defaultProps","cloneAndReplaceKey","oldElement","newKey","newElement","cloneElement","isValidElement","SEPARATOR","SUBSEPARATOR","escapeRegex","escaperLookup","escapedString","didWarnAboutMaps","userProvidedKeyEscapeRegex","escapeUserProvidedKey","text","getElementKey","mapIntoArray","escapedPrefix","nameSoFar","invokeCallback","_child","mappedChild","childKey","escapedChildKey","nextName","subtreeCount","nextNamePrefix","iteratorFn","iterableChildren","ii","childrenString","mapChildren","func","countChildren","forEachChildren","forEachFunc","forEachContext","toArray","onlyChild","createContext","hasWarnedAboutUsingNestedContextConsumers","hasWarnedAboutUsingConsumerProvider","hasWarnedAboutDisplayNameOnConsumer","Consumer","_Provider","_currentValue","_currentValue2","_threadCount","Uninitialized","Pending","Resolved","Rejected","lazyInitializer","thenable","moduleObject","pending","lazy","lazyType","propTypes","newDefaultProps","newPropTypes","forwardRef","render","elementType","ownName","REACT_MODULE_REFERENCE","isValidElementType","compare","resolveDispatcher","dispatcher","useContext","Context","realContext","useState","initialState","useReducer","initialArg","useRef","initialValue","useEffect","deps","useInsertionEffect","useLayoutEffect","useCallback","useMemo","useImperativeHandle","useDebugValue","formatterFn","useTransition","useDeferredValue","useId","useSyncExternalStore","getSnapshot","getServerSnapshot","disabledDepth","prevLog","prevInfo","prevWarn","prevError","prevGroup","prevGroupCollapsed","prevGroupEnd","disabledLog","disableLogs","reenableLogs","ReactCurrentDispatcher$1","describeBuiltInComponentFrame","ownerFn","reentry","componentFrameCache","PossiblyWeakMap","describeNativeComponentFrame","construct","frame","control","previousPrepareStackTrace","previousDispatcher","Fake","sample","sampleLines","controlLines","_frame","syntheticFrame","describeFunctionComponentFrame","shouldConstruct","describeUnknownElementTypeFrameInDEV","loggedTypeFailures","ReactDebugCurrentFrame$1","setCurrentlyValidatingElement","checkPropTypes","typeSpecs","has","typeSpecName","error$1","ex","setCurrentlyValidatingElement$1","propTypesMisspellWarningShown","getDeclarationErrorAddendum","getSourceInfoErrorAddendum","fileName","lineNumber","getSourceInfoErrorAddendumForProps","elementProps","ownerHasKeyUseWarning","getCurrentComponentErrorInfo","parentType","parentName","validateExplicitKey","currentComponentErrorInfo","childOwner","validateChildKeys","validatePropTypes","_name","validateFragmentProps","createElementWithValidation","validType","sourceInfo","typeString","didWarnAboutDeprecatedCreateFactory","createFactoryWithValidation","validatedFactory","cloneElementWithValidation","startTransition","scope","prevTransition","currentTransition","updatedFibersCount","didWarnAboutMessageChannel","enqueueTaskImpl","enqueueTask","task","requireString","nodeRequire","module","channel","actScopeDepth","didWarnNoAwaitAct","act","prevActScopeDepth","prevIsBatchingLegacy","flushActQueue","popActScope","thenableResult","wasAwaited","returnValue","recursivelyFlushAsyncActWork","_queue","_thenable","_thenable2","isFlushing","createElement$1","cloneElement$1","createFactory","Children","exports","reactModule","require$$0","require$$1","aa","fa","ha","ia","ja","ka","la","ma","na","oa","pa","qa","ra","sa","ta","ua","va","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","$a","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","ob","Q","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Y","Ib","Jb","Kb","Lb","Mb","Z","Nb","Ob","Pb","Qb","ba","ca","mb","da","nb","ea","Rb","Sb","Tb","reactDomServerLegacy_browser_production_min","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","sc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Oc","Nc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","jd","kd","ld","reactDomServer_browser_production_min","React","scheduleWork","beginWriting","destination","writeChunk","writeChunkAndReturn","completeWriting","close","stringToChunk","content","stringToPrecomputedChunk","closeWithError","checkAttributeStringCoercion","attributeName","checkCSSPropertyStringCoercion","checkHtmlStringCoercion","RESERVED","STRING","BOOLEANISH_STRING","BOOLEAN","OVERLOADED_BOOLEAN","NUMERIC","POSITIVE_NUMERIC","ATTRIBUTE_NAME_START_CHAR","ATTRIBUTE_NAME_CHAR","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","shouldRemoveAttributeWithWarning","propertyInfo","isCustomComponentTag","getPropertyInfo","properties","PropertyInfoRecord","mustUseProperty","attributeNamespace","sanitizeURL","removeEmptyString","reservedProps","CAMELIZE","capitalize","xlinkHref","isUnitlessNumber","prefixKey","prefixes","prop","hasReadOnlyValue","checkControlledValueProps","tagName","isCustomComponent","ariaProperties","warnedProperties","rARIA","rARIACamel","validateProperty","ariaName","correctName","lowerCasedName","standardName","warnInvalidARIAProps","invalidProps","isValid","unknownPropString","validateProperties","didWarnValueNull","validateProperties$1","possibleStandardNames","validateProperty$1","warnedProperties$1","EVENT_NAME_REGEX","INVALID_EVENT_NAME_REGEX","rARIA$1","rARIACamel$1","eventRegistry","registrationNameDependencies","possibleRegistrationNames","registrationName","isReserved","warnUnknownProperties","unknownProps","validateProperties$2","warnValidStyle","badVendoredStyleNamePattern","msPattern","hyphenPattern","badStyleValueWithSemicolonPattern","warnedStyleNames","warnedStyleValues","warnedForNaNValue","warnedForInfinityValue","camelize","character","warnHyphenatedStyleName","warnBadVendoredStyleName","warnStyleValueWithSemicolon","warnStyleValueIsNaN","warnStyleValueIsInfinity","warnValidStyle$1","matchHtmlRegExp","escapeHtml","html","lastIndex","escapeTextForBrowser","uppercasePattern","msPattern$1","hyphenateStyleName","isJavaScriptProtocol","didWarn","url","startInlineScript","createResponseState","identifierPrefix","nonce","bootstrapScriptContent","bootstrapScripts","bootstrapModules","idPrefix","inlineScriptWithNonce","bootstrapChunks","ROOT_HTML_MODE","HTML_MODE","SVG_MODE","MATHML_MODE","HTML_TABLE_MODE","HTML_TABLE_BODY_MODE","HTML_TABLE_ROW_MODE","HTML_COLGROUP_MODE","createFormatContext","insertionMode","selectedValue","getChildFormatContext","parentContext","UNINITIALIZED_SUSPENSE_BOUNDARY_ID","assignSuspenseBoundaryID","responseState","generatedID","makeId","treeId","localId","encodeHTMLTextNode","textSeparator","pushTextInstance","textEmbedded","pushSegmentFinale","lastPushedText","styleNameCache","processStyleName","styleName","styleAttributeStart","styleAssign","styleSeparator","pushStyle","style","isFirst","styleValue","nameChunk","valueChunk","isCustomProperty","attributeEnd","attributeSeparator","attributeAssign","attributeEmptyString","pushAttribute","attributeNameChunk","endOfStartTag","endOfStartTagSelfClosing","pushInnerHTML","innerHTML","didWarnDefaultInputValue","didWarnDefaultChecked","didWarnDefaultSelectValue","didWarnDefaultTextareaValue","didWarnInvalidOptionChildren","didWarnInvalidOptionInnerHTML","didWarnSelectedSetOnOption","checkSelectProp","pushStartSelect","startChunkForTag","propKey","propValue","flattenOptionChildren","selectedMarkerAttribute","pushStartOption","formatContext","selected","stringValue","pushInput","checked","defaultChecked","pushStartTextArea","leadingNewline","pushSelfClosing","pushStartMenuItem","pushStartTitle","pushStartGenericElement","pushStartCustomElement","pushStartPreformattedElement","VALID_TAG_REGEX","validatedTagCache","tagStartChunk","DOCTYPE","pushStartInstance","endTag1","endTag2","pushEndInstance","writeCompletedRoot","placeholder1","placeholder2","writePlaceholder","formattedID","startCompletedSuspenseBoundary","startPendingSuspenseBoundary1","startPendingSuspenseBoundary2","startClientRenderedSuspenseBoundary","endSuspenseBoundary","clientRenderedSuspenseBoundaryError1","clientRenderedSuspenseBoundaryErrorAttrInterstitial","clientRenderedSuspenseBoundaryError1A","clientRenderedSuspenseBoundaryError1B","clientRenderedSuspenseBoundaryError1C","clientRenderedSuspenseBoundaryError2","writeStartCompletedSuspenseBoundary","writeStartPendingSuspenseBoundary","writeStartClientRenderedSuspenseBoundary","errorDigest","errorMesssage","errorComponentStack","writeEndCompletedSuspenseBoundary","writeEndPendingSuspenseBoundary","writeEndClientRenderedSuspenseBoundary","startSegmentHTML","startSegmentHTML2","endSegmentHTML","startSegmentSVG","startSegmentSVG2","endSegmentSVG","startSegmentMathML","startSegmentMathML2","endSegmentMathML","startSegmentTable","startSegmentTable2","endSegmentTable","startSegmentTableBody","startSegmentTableBody2","endSegmentTableBody","startSegmentTableRow","startSegmentTableRow2","endSegmentTableRow","startSegmentColGroup","startSegmentColGroup2","endSegmentColGroup","writeStartSegment","writeEndSegment","completeSegmentFunction","completeBoundaryFunction","clientRenderFunction","completeSegmentScript1Full","completeSegmentScript1Partial","completeSegmentScript2","completeSegmentScript3","writeCompletedSegmentInstruction","contentSegmentID","completeBoundaryScript1Full","completeBoundaryScript1Partial","completeBoundaryScript2","completeBoundaryScript3","writeCompletedBoundaryInstruction","boundaryID","formattedContentID","clientRenderScript1Full","clientRenderScript1Partial","clientRenderScript1A","clientRenderScript2","clientRenderErrorScriptArgInterstitial","writeClientRenderBoundaryInstruction","escapeJSStringsForInstructionScripts","regexForJSStringsInScripts","input","escaped","createResponseState$1","generateStaticMarkup","createRootFormatContext","pushTextInstance$1","pushSegmentFinale$1","writeStartCompletedSuspenseBoundary$1","writeStartClientRenderedSuspenseBoundary$1","writeEndCompletedSuspenseBoundary$1","writeEndClientRenderedSuspenseBoundary$1","REACT_SCOPE_TYPE","REACT_DEBUG_TRACING_MODE_TYPE","REACT_LEGACY_HIDDEN_TYPE","REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED","describeClassComponentFrame","warnedAboutMissingGetChildContext","emptyContextObject","getMaskedContext","unmaskedContext","contextTypes","processChildContext","instance","childContextTypes","childContext","contextKey","rendererSigil","rootContextSnapshot","currentActiveSnapshot","popNode","prev","pushNode","popToNearestCommonAncestor","parentPrev","parentNext","popAllPrevious","pushAllNext","popPreviousToCommonLevel","popNextToCommonLevel","switchContext","newSnapshot","pushProvider","prevValue","prevNode","newNode","popProvider","prevSnapshot","getActiveContext","readContext","get","didWarnAboutNoopUpdateForComponent","didWarnAboutDeprecatedWillMount","didWarnAboutUninitializedState","didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate","didWarnAboutLegacyLifecyclesAndDerivedState","didWarnAboutUndefinedDerivedState","warnOnUndefinedDerivedState","warnOnInvalidCallback","didWarnAboutDirectlyAssigningPropsToState","didWarnAboutContextTypeAndContextTypes","didWarnAboutInvalidateContextType","didWarnOnInvalidCallback","classComponentUpdater","inst","internals","applyDerivedStateFromProps","getDerivedStateFromProps","prevState","nextProps","newState","constructClassInstance","maskedLegacyContext","contextType","addendum","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","_componentName","newApiName","checkClassInstance","newProps","renderPresent","hasMutatedProps","_state","callComponentWillMount","oldState","processUpdateQueue","internalInstance","oldQueue","oldReplace","nextState","dontMutate","partial","mountClassInstance","emptyTreeContext","getTreeId","overflow","idWithLeadingBit","getLeadingBit","pushTreeContext","baseContext","totalChildren","baseIdWithLeadingBit","baseOverflow","baseLength","getBitLength","baseId","length","numberOfOverflowBits","newOverflowBits","newOverflow","restOfBaseId","restOfBaseLength","restOfLength","restOfNewBits","newBits","_overflow","number","clz32","clz32Fallback","log","LN2","asUint","is","objectIs","currentlyRenderingComponent","currentlyRenderingTask","firstWorkInProgressHook","workInProgressHook","isReRender","didScheduleRenderPhaseUpdate","localIdCounter","renderPhaseUpdates","numberOfReRenders","RE_RENDER_LIMIT","isInHookUserCodeInDev","currentHookNameInDev","resolveCurrentlyRenderingComponent","areHookInputsEqual","nextDeps","prevDeps","createHook","createWorkInProgressHook","prepareToUseHooks","componentIdentity","finishHooks","refOrContext","resetHooksState","checkDidRenderIdHook","didRenderIdHook","readContext$1","basicStateReducer","state","action","dispatch","firstRenderPhaseUpdate","_dispatch","dispatchAction","nextCreate","previousRef","inputs","lastRenderPhaseUpdate","useMutableSource","unsupportedStartTransition","currentResponseState","Dispatcher","setCurrentResponseState","getStackByComponentStackNode","componentStack","PENDING","COMPLETED","FLUSHED","ABORTED","ERRORED","OPEN","CLOSING","CLOSED","DEFAULT_PROGRESSIVE_CHUNK_SIZE","defaultErrorHandler","noop$1","createRequest","rootFormatContext","progressiveChunkSize","onAllReady","onShellReady","onShellError","onFatalError","pingedTasks","abortSet","rootSegment","createPendingSegment","rootTask","createTask","pingTask","performWork","createSuspenseBoundary","fallbackAbortableTasks","blockedBoundary","blockedSegment","legacyContext","treeContext","currentTaskInDEV","getCurrentStackInDEV","pushBuiltInComponentStackInDEV","pushFunctionComponentStackInDEV","pushClassComponentStackInDEV","popComponentStackInDEV","lastBoundaryErrorComponentStackDev","captureBoundaryErrorDetailsDev","logRecoverableError","fatalError","renderSuspenseBoundary","parentBoundary","parentSegment","fallback","fallbackAbortSet","newBoundary","insertionIndex","boundarySegment","contentRootSegment","renderNode","queueCompletedSegment","suspendedFallbackTask","renderHostElement","segment","prevContext","shouldConstruct$1","renderWithHooks","secondArg","finishClassComponent","nextChildren","didWarnAboutReassigningProps","previousContext","mergedContext","renderNodeDestructive","renderClassComponent","maskedContext","didWarnAboutBadClass","didWarnAboutModulePatternComponent","didWarnAboutContextTypeOnFunctionComponent","didWarnAboutGetDerivedStateOnFunctionComponent","didWarnAboutDefaultPropsOnFunctionComponent","didWarnAboutGenerators","hasWarnedAboutUsingContextAsConsumer","renderIndeterminateComponent","hasId","_componentName2","validateFunctionComponentInDev","prevTreeContext","_componentName3","_componentName4","resolveDefaultProps","baseProps","renderForwardRef","renderMemo","resolvedProps","renderElement","renderContextConsumer","newChildren","renderContextProvider","renderLazyComponent","validateIterable","renderNodeDestructiveImpl","lazyNode","resolvedNode","renderChildrenArray","childString","_segment","spawnNewSuspendedTask","newSegment","newTask","ping","previousFormatContext","previousLegacyContext","previousComponentStack","erroredTask","abortTaskSoft","finishedTask","abortTask","_error","errorPrefix","previousTaskInDev","fallbackTask","childSegment","completedSegments","retryTask","prevTaskInDEV","prevDispatcher","prevGetCurrentStackImpl","prevResponseState","flushCompletedQueues","flushSubtree","segmentID","chunks","chunkIdx","childIdx","nextChild","flushSegment","contentSegment","flushClientRenderedBoundary","flushSegmentContainer","flushCompletedBoundary","flushPartiallyCompletedSegment","flushPartialBoundary","rootSegmentID","completedRootSegment","clientRenderedBoundaries","completedBoundaries","_boundary","partialBoundaries","_boundary2","largeBoundaries","_boundary3","startWork","startFlowing","abort","abortableTasks","renderToStringImpl","abortReason","didFatal","readyToStream","renderToString","renderToStaticMarkup","renderToNodeStream","renderToStaticNodeStream","reactDomServerLegacy_browser_development","VIEW_SIZE","currentView","writtenBytes","bytesToWrite","allowableBytes","textEncoder","endInlineScript","startScriptSrc","startModuleSrc","endAsyncScript","escapeBootstrapScriptContent","scriptText","scriptRegex","scriptReplacer","namespaceURI","renderToReadableStream","allReady","res","rej","signal","reactDomServer_browser_development","require$$2","require$$3","server_browser","domImpl","fetchImpl","registerWindowImplementation","registerFetchImplementation","getWindow","fetch","arrayBufferMimeTypeCache","arrayBufferFileCache","textFileCache","getFromArrayBufferCache","cachedPromise","resp","getFromTextCache","hasCapabilities","capabilities","cap","createElementNS","namespace","elem","domParser","domParserConstructor","fetchAsArrayBuffer","externalUrl","allowCache","fetchAsString","renderPapyrusComponentAsString","component","fontFaceCache","loadFontFaceSet","font","familyName","fontFace","xmlSerializer","toBase64","getMimeTypeOfArrayBuffer","arrayBuffer","getMimeTypeFromArrayBuffer","uint8arr","signatureArr","signature","mimeTypeData","dataUrlFromExternalUrl","blob","webBlobToDataUrl","uint8ArrayToString","binary","arrayBufferToDataUrl","mimeType","uint8Array","binaryString","b64","svgToDataUrl","svgString","dataUrlToArrayBuffer","dataUrl","firstComma","meta","base64","KEEP","removeTypenameFromVariables","except","maybeStripTypenameUsingConfig","getVariableDefinitions","keyVal","typenameConfig","maybeStripTypename","modified_1","fieldConfig","unwrapType","buildDelayFunction","delayOptions","initial","jitter","baseDelay","delay","buildRetryFunction","retryOptions","retryIf","RetryableOperation","delayFor","shouldRetry","RetryLink","attempts","retryable","localCustomerToken","applicationKey","setApplicationKey","getApplicationKey","bearerAuthenticationToken","setBearerAuthenticationToken","getHubAuthentication","onAuthenticationReceived","event","getServerAuth","localAuthObj","followRedirectFetch","moonlightUrl","GraphQlManager","httpLink","authLink","_request","operationContext","newHeaders","auth","bearer","useBeta","partnerId","activeIntegration","transactionOwnerId","customerToken","bundleOwnerId","hub","traceHeaders","errorLink","removeTypenameLink","retryLink","_operation","attempt","mul","graphQlManager","createCanvasInternal","loadImageInternal","createCanvas","width","height","documentCanvasModule","setCanvasModule","loadImage","src","allowCrossOrigin","throwOnError","_type","canvas","image","getDomParser","this","j","$","te","ee","se","ie","ne","re","ae","he","fe","le","oe","ue","de","ce","pe","ge","me","ye","be","we","ke","Oe","ve","Se","Ae","supportsAutoOrientation","getExifOrientation","exifOrientation","orientation","requiresCanvasOrientation","img","canvasDims","aspectRatio","getScaledAndOrientedCanvas","canvasWidth","canvasHeight","orientedWidth","orientedHeight","ctx","getAttributesFromArrayBuffer","commentre","css","lineno","updatePosition","Position","whitespace","errorsList","msg","stylesheet","rulesList","rules","open","comments","atrule","rule","comment","selector","trim","declaration","declarations","decls","decl","keyframe","vals","atkeyframes","vendor","frames","atsupports","supports","athost","atmedia","media","atcustommedia","atpage","sel","atdocument","atfontface","atimport","_compileAtrule","atcharset","atnamespace","addParent","childParent","getTag","baseToString","isString","isNumber","isBoolean","isObject","isDefined","isBlank","INCORRECT_INDEX_TYPE","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","PATTERN_LENGTH_TOO_LARGE","MISSING_KEY_PROPERTY","INVALID_KEY_WEIGHT_VALUE","KeyStore","totalWeight","createKey","keyId","weight","getFn","createKeyPath","createKeyId","list","deepGet","arrayIndex","MatchOptions","BasicOptions","FuzzyOptions","AdvancedOptions","Config","SPACE","norm","mantissa","numTokens","FuseIndex","fieldNormWeight","docs","records","idx","docIndex","indices","record","keyIndex","subRecords","subRecord","createIndex","myIndex","parseIndex","convertMaskToIndices","matchmask","minMatchCharLength","MAX_BITS","search","pattern","patternAlphabet","distance","threshold","findAllMatches","includeMatches","ignoreLocation","patternLen","textLen","expectedLocation","currentThreshold","bestLocation","calcScore","currentLocation","accuracy","proximity","computeMatches","matchMask","score","lastBitArr","finalScore","binMax","mask","binMin","binMid","finish","bitArr","charMatch","createPatternAlphabet","mergeIndices","curr","NON_DECOMPOSABLE_MAP","NON_DECOMPOSABLE_RE","stripDiacritics","ch","BitapSearch","isCaseSensitive","ignoreDiacritics","addChunk","startIndex","remainder","allIndices","totalScore","hasMatches","alphabet","isMatch","BaseMatch","getMatch","_text","exp","matches","ExactMatch","InverseExactMatch","PrefixExactMatch","InversePrefixExactMatch","SuffixExactMatch","InverseSuffixExactMatch","FuzzyMatch","IncludeMatch","searchers","searchersLen","ESCAPED_PIPE","OR_TOKEN","tokenize","tokens","parseQuery","restored","queryItem","found","searcher","MultiMatchSet","ExtendedSearch","numMatches","hasInverse","qLen","pLen","registeredSearchers","register","createSearcher","searcherClass","LogicalOperator","KeyType","isExpression","isPath","isLeaf","convertToExplicit","auto","isQueryPath","computeScoreSingle","ignoreFieldNorm","computeScore","MaxHeap","sortFn","heap","tmp","largest","transformMatches","transformScore","includeScore","transformers","transformer","WORD","createAnalyzer","buildInvertedIndex","analyzer","terms","df","fieldCount","addField","docIdx","keyIdx","subIdx","termFreqs","term","tf","posting","postings","addToInvertedIndex","removeFromInvertedIndex","filtered","removed","Fuse","opts","indicesToRemove","shouldSort","useHeap","expression","evaluate","operator","resultMap","expResults","anyKeyFailed","keyMatches","TokenSearch","queryTerms","invertedIndex","docFreq","idf","weightedScore","maxPossibleScore","matchedCount","searchResult","plugins","plugin","pmsValues","hexValues","rgbValues","pmsToRgb","color","rgbToPms","matchHexToPms","hex","maxDistance","pmsColors","distances","r1","g1","b1","dist","pmsHexData","pms","fuse","findPmsColors","rgbaToHex","rgba","colorContext","browserColorToHex","sanitizeHexCode","sanitized","hexCode","colorDefinitionPrintValue","colorDefinition","spot","spotColorDefinitionString","spotColorDefinition","profileNameStrWithoutSpaces","amountToSlice","svgColorValueToDefinition","parts","matchedFunctionArgs","params","fillableTagNames","replaceableStyleNames","traverse","checkAncestors","candidate","matchingSelector","sanitizeSvgTree","preserveAspectRatio","nodeStyle","styles","trimmed","fieldDowncased","sanitizeSVGDimensions","nonPixelUnitsRegex","viewBox","svgStringToElement","svg","setSvgDimensions","svgRoot","setSvgColors","colors","includeSpotColors","fill","stroke","svgElementToString","modifySVGWithElementProperties","modifySVGColors","parseSvg","svgBody","svgRegex","svgMatches","generateSVGWithUnknownColors","ancestorFill","inlineFill","attribute","fillValue","alphanumericFill","strokeValue","rebuiltSvg","assetMetadataFragment","assetVersionsFragment","assetFragment","includeMetadata","includeVersions","materialFragment","getMaterialsQuery","createAssetMutation","removeBackgroundFromAssetMutation","vectorizeAssetMutation","enhanceWithAIMutation","getAssets","assetKeys","getMaterials","createAsset","anonymous","temporary","AssetService","file","attributes","dataUrlToBlob","assetKey","resolver","material","assetType","onProgress","creationResponse","responseData","AssetStorage","processedInfo","fileInfo","originalKey","AssetTransformationStorage","BGRM_ASSET_PERSISTENCE_KEY","removeResponse","maxColors","VECTORIZE_ASSET_PERSISTENCE_KEY","vectorizeResponse","ENHANCE_AI_ASSET_PERSISTENCE_KEY","enhanceResponse","assetResponse","ext","extension","ASSET_PERSISTENCE_KEY","_AssetStorage","newPersistentAssetsMap","oldPersistentAssets","uploadedAssetsMap","entryToRemove","mapKey","transformedKey","assetService","PromiseCache","keyString","promiseCache","getTransformedAssetURL","resolution","quality","optionMinimalFragment","optionFragment","getTagsQuery","getOptionsInternal","option","findOptionFromPromise","getOptions","promises","uncachedIds","batchPromise","getAssetImageUrl","findDefaultVariant","variants","overrideDefaultVariantId","OptionService","existingVariants","assetIds","materialIds","stepData","thumbnailUrl","optionService","activeIntegrationFragment","additionalProductFragment","recipientFragment","conversionConfigurationFragment","createManyTransactionsMutation","stakeholderFragment","transactionShareActionFragment","readIntegrationProductsQuery","readTransactionsQuery","updateTransactionWorkflowStateQuery","updateTransactionQuantityQuery","updateTransactionWorkflowQuery","getConversionConfigurationQuery","getTransactionQuery","getTransactionShareActionsQuery","confirmWorkflowStates","getIntegrationProductFragment","fetchIntegrationProducts","getIntegrationProductsQuery","includeIntegrations","getIntegrationProductFromExternalIdsQuery","getTransactionStakeholdersQuery","finalizeUpdateTransactionMutation","regionFragment","lookAtAnimationFragment","renderingPipelineConfigurationFragment","modelAnimationFragment","getWorkflowsQuery","includeAssetMetadata","marketplaceThemeInstallConfigurationFragment","getMarketplaceThemeInstallConfigurationQuery","currentIntegrationQuery","getTransactionForMarketplaceThemeQuery","getBundleForMarketplaceThemeQuery","createOrderMutation","currencyConversionQuery","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performanceNowModule","hr","now","vendors","raf","caf","frameDuration","_now","cp","rafModule","rgbcolor","color_string","simple_colors","color_defs","bits","processor","channels","examples","example","xml","list_item","list_color","example_div","list_item_value","_typeof","_classCallCheck","mulTable","shgTable","getImageDataFromCanvas","topX","topY","processCanvasRGBA","radius","imageData","processImageDataRGBA","pixels","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stackEnd","stackIn","stackOut","yw","yi","mulSum","shgSum","pr","pg","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","_i2","rbs","paInitial","_a2","_p","_stackOut","_r","_x","_pr","_pg","_pb","_pa","_rOutSum","_gOutSum","_bOutSum","_aOutSum","_rSum","_gSum","_bSum","_aSum","_i3","yp","_gInSum","_bInSum","_aInSum","_rInSum","_i4","_rbs","_y","_p2","imGet","_height","imSet","compressSpaces","toNumbers","toMatrixValue","numbers","allUppercase","normalizeAttributeName","parseExternalUrl","urlMatch","normalizeColor","rgbParts","num","attributeRegex","idRegex","classRegex","pseudoElementRegex","pseudoClassWithBracketsRegex","pseudoClassRegex","elementRegex","findSelectorMatch","regex","getSelectorSpecificity","specificity","currentSelector","delta","PSEUDO_ZERO","vectorMagnitude","vectorsRatio","vectorsAngle","CB1","CB2","CB3","CB4","QB1","QB2","QB3","Property","zeroIsValue","regexp","asString","axisOrIsFontSize","processPercent","axis","isFontSize","viewPort","opacity","patternTransform","commas","RGBColor","ViewPort","getDefault","viewPorts","current","Point","scale","points","pathPoints","xp","Mouse","screen","onClick","onMouseMove","events","eventElements","run","boundingBox","window","eventTarget","defaultWindow","defaultFetch$1","Screen","checker","isReadyLock","desiredWidth","desiredHeight","minX","minY","refX","refY","clip","clipX","clipY","cleanAspectRatio","aspectRatioAlign","aspectRatioMeetOrSlice","align","meetOrSlice","scaleX","scaleY","scaleMin","scaleMax","finalDesiredWidth","finalDesiredHeight","refXProp","refYProp","hasRefs","scaledClipX","scaledClipY","isMeetMinY","isSliceMaxY","isMeetMinX","isSliceMaxX","enableRedraw","ignoreMouse","ignoreAnimation","ignoreDimensions","ignoreClear","forceRedraw","scaleWidth","scaleHeight","offsetX","offsetY","mouse","then","tick","requestAnimationFrame","shouldUpdate","animation","isFirstRender","widthStyle","heightStyle","cWidth","cHeight","xRatio","yRatio","transformStyle","defaultFetch","DefaultDOMParser","Parser$1","DOMParser","resource","parserError","Translate","Rotate","rotate","transformOrigin","cx","cy","originX","originY","angle","tx","ty","rad","Scale","scaleSize","Matrix","matrix","det","Skew","skew","SkewX","SkewY","parseTransforms","parseTransform","Transform","transformOriginXProperty","transformOriginYProperty","TransformType","Element","captureTextNodes","nodeName","childNode","textNode","createIfNotExists","attr","href","skipAncestors","parentStyle","filter","clipPathStyleProp","styleClasses","styleClass","stylesSpecificity","styleProp","existingSpecificity","ignoreStyles","toRestore","FeElement","UnknownElement","wrapFontFamily","fontFamily","prepareFontFamily","prepareFontStyle","fontStyle","targetFontStyle","prepareFontWeight","fontWeight","targetFontWeight","Font$1","Font","inherit","fontVariant","fontSize","part","inheritFont","BoundingBox$1","x1","y1","x2","y2","p0","p1","p2","p3","forX","b2ac","t1","t2","p0x","p0y","p1x","p1y","p2x","p2y","p3x","p3y","cp1x","cp1y","cp2x","cp2y","RenderedElement","opacityStyle","fromMeasure","fillStyleProp","fillOpacityStyleProp","strokeStyleProp","strokeOpacityProp","fillStyle","strokeStyle","strokeWidthStyleProp","newLineWidth","strokeLinecapStyleProp","strokeLinejoinStyleProp","strokeMiterlimitProp","strokeDasharrayStyleProp","strokeDashoffsetProp","gaps","offset","fontStyleProp","fontStyleStyleProp","fontVariantStyleProp","fontWeightStyleProp","fontSizeStyleProp","fontFamilyStyleProp","TextElement","textBaseline","childBoundingBox","inheritFontSize","BoundingBox","glyph","prevChar","nextChar","arabicForm","renderText","customFont","unitsPerEm","ctxFont","dx","lw","firstElement","textAnchor","isRTL","shift","textParent","xAttr","yAttr","dxAttr","dyAttr","measureCache","measure","targetText","parentAttr","TSpanElement","TextNode","PathParser","SVGPathData","commands","command","xProp","yProp","previousCommand","ox","oy","priorTo","angles","PathElement","pathParser","_ctx","fillRuleStyleProp","markers","markersLastIndex","markerStartStyleProp","markerMidStyleProp","markerEndStyleProp","marker","controlPoint","currentPoint","rX","rY","xRot","lArcFlag","sweepFlag","xAxisRotation","currp","cpp","centp","a1","ah","halfWay","sx","sy","SVGElement","fontSizeProp","refXAttr","refYAttr","viewBoxAttr","widthAttr","heightAttr","styleAttr","originWidth","originHeight","preserveAspectRatioAttr","RectElement","rxAttr","ryAttr","rx","ry","KAPPA","CircleElement","EllipseElement","LineElement","x0","y0","PolylineElement","PolygonElement","PatternElement","parentOpacityProp","styleWidth","styleHeight","nonRepeatingWidth","nonRepeatingHeight","disableRepeat","patternSvg","patternCanvas","patternCtx","MarkerElement","orient","markerUnits","markerSvg","DefsElement","GElement","GradientElement","stops","stopsContainer","gradient","stop","MAX_VIRTUAL_PIXELS","rootView","rect","attributeToInherit","LinearGradientElement","isBoundingBoxUnits","RadialGradientElement","fx","fy","fr","StopElement","stopOpacity","stopColor","AnimateElement","valuesAttr","attributeType","initialUnits","progress","updated","typeAttr","AnimateColorElement","colorFrom","colorTo","AnimateTransformElement","transformFrom","transformTo","FontFaceElement","GlyphElement","MissingGlyphElement","FontElement","fontFamilyStyle","arabicGlyph","TRefElement","firstChild","AElement","childNodes","hasText","TextPathElement","pathElement","dataArray","theta","dTheta","psi","fs","textDecoration","glyphInfo","rotation","partialText","anchor","textFullWidth","fullPathWidth","spacesNumber","inputOffset","dy","charI","glyphWidth","splineStep","dyX","dyY","measuresCache","chars","thisSpacing","parentSpacing","letterSpacing","letterSpacingCache","dxSum","cur","textWidth","startOffset","nextOffset","pathCommands","startX","startY","nextCommandType","commandType","inc","fromX","fromY","rise","pt","ix","iy","pRise","pRun","fullLen","cumulativePathLength","currentT","pct","p4x","p4y","cosPsi","sinPsi","inputStep","inputPrecision","precision","targetDistance","dataUriRegex","ImageElement","isSvg","loaded","subDocument","documentElement","SymbolElement","SVGFontLoader","fonts","fontNode","StyleElement","cssParts","cssClasses","cssProps","cssClass","cssProp","UseElement","tempSvg","oldParent","m1","m2","m3","FeColorMatrixElement","includeOpacity","srcData","nr","ng","MaskElement","ignoredStyles","maskCanvas","maskCtx","tmpCanvas","tmpCtx","ClipPathElement","contextProto","beginPath","closePath","FeGaussianBlurElement","blurRadius","canvasRGBA","FilterElement","px","py","efd","tmpCanvasWidth","tmpCanvasHeight","FeDropShadowElement","_width","FeMorphologyElement","FeCompositeElement","TitleElement","DescElement","FeFuncElement","FeFuncR","FeFuncG","FeFuncB","FeComponentTransfer","feFunc","rFunc","gFunc","bFunc","elements","createImage","anonymousCrossOrigin","_event","_source","_lineno","_colno","DEFAULT_EM_SIZE","Document","pith","rootEmSize","emSize","forceAnonymousCrossOrigin","emSizeStack","overrideType","ElementType","Pith","svgDocument","baseOptions","silentStepTypes","getAllScenes","workflow","scenes","findGroupForStep","existingScene","scene","finishSceneTitle","stepName","stepGroups","stepConditionsAreSatisfied","stepSelections","originatingStepData","selectedVariants","metafieldManager","selVariant","reqVariant","filterSceneByConditions","renderableStepBools","renderableSteps","silentStepBools","silentSteps","filteredScene","getActiveScenes","allScenes","getRenderableRelevantScenes","singleVariantsRenderable","activeScenes","stepsWithRenderableConfiguration","variantAmount","renderableScenes","renderableScene","QueueablePromise","PromiseQueue","queueMaxSize","enabled","queueLength","LARGE_ARRAY_SIZE","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","addMapEntry","addSetEntry","arrayEach","iteratee","arrayPush","arrayReduce","accumulator","initAccum","baseTimes","getValue","isHostObject","mapToArray","overArg","setToArray","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","funcToString","objectToString","reIsNative","Buffer","Uint8Array","getPrototype","objectCreate","propertyIsEnumerable","splice","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArguments","skipIndexes","isIndex","assignValue","objValue","eq","baseAssign","copyObject","baseClone","isDeep","isFull","customizer","isArr","initCloneArray","copyArray","isFunc","isBuffer","cloneBuffer","initCloneObject","copySymbols","initCloneByTag","stacked","getAllKeys","subValue","baseCreate","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","baseIsNative","isMasked","isFunction","baseKeys","isPrototype","cloneArrayBuffer","cloneDataView","dataView","cloneMap","cloneFunc","cloneRegExp","cloneSet","cloneSymbol","symbol","cloneTypedArray","typedArray","getSymbols","isKeyable","stubArray","Ctor","ctorString","isArrayLikeObject","isArrayLike","isLength","stubFalse","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","asyncTag","nullTag","proxyTag","undefinedTag","typedArrayTags","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","resIndex","arraySome","baseUnary","cacheHas","nativeObjectToString","symToStringTag","SetCache","setCacheAdd","setCacheHas","isArg","isBuff","isType","isTypedArray","getRawTag","baseIsArguments","baseIsEqual","bitmask","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsTypedArray","isPartial","arrLength","othLength","arrValue","othValue","compared","othIndex","convert","objProps","objLength","othProps","skipCtor","objCtor","othCtor","isOwn","unmasked","isEqual","reactJsxRuntime_production_min","jsxDEV","maybeKey","ReactCurrentOwner$1","didWarnAboutKeySpread","jsxWithValidation","isStaticChildren","beforeExample","afterExample","jsxWithValidationStatic","jsxWithValidationDynamic","jsx","jsxs","reactJsxRuntime_development","jsxRuntimeModule","generate","s4","SVGLayout","backgroundColor","outlineColor","borderRadius","configuration","maxHeight","maxWidth","outlineArea","strokeScale","calculatedViewbox","viewboxString","maskId","colorProfileElements","elementsWithConfiguration","el","sortedElements","sortElementsByLayersWithIndex","elementFactory","getAxisAlignedBoundingBox","rotationRadians","degreesToRadians","halfX","halfY","midX","midY","sin","cos","c1x","c2x","c1y","c2y","transformedC1X","transformedC2X","transformC1Y","transformedC2Y","extentX","extentY","findAngle","degrees","isCloseToValue","allowableDistance","getTrueCoordinates","pointOfRotation","getPointOfRotation","nwPoint","sePoint","getNWPoint","bounds","getNEPoint","getSEPoint","turnRightClockwise","currentDirection","originalDirection","getElementVertices","canvasBounds","radians","unrotatedTopLeft","unrotatedTopRight","unrotatedBottomRight","unrotatedBottomLeft","rotateAroundPoint","angleRadians","mmPerPixel","cmPerPixel","Image","angleInRadians","rotC","rotS","Group","clipPathId","buildDefinitions","Fragment","Frame","patternLinkId","thresholdFilterId","getFrameContentSrc","modifiedSvg","thresholdTableValues","renderDefinitions","getFrameContent","patternX","patternY","patternWidth","patternHeight","patternScaleX","patternScaleY","patternRotation","defineProperty","$defineProperty","codePointAt","TINF_OK","TINF_DATA_ERROR","Tree","Data","dest","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","base","sum","tinf_build_fixed_trees","lt","dt","offs","tinf_build_tree","off","tinf_getbit","bit","tinf_read_bits","tinf_decode_symbol","tinf_decode_trees","hlit","hdist","hclen","clen","sym","tinf_inflate_block_data","tinf_inflate_uncompressed_block","invlength","tinf_uncompress","bfinal","btype","tinyInflate","derive","v0","v1","v2","v3","Path","pathOrCommands","box","prevX","prevY","cmd","decimalPlaces","floatToString","packValues","arguments$1","temporaryPath","newPath","fail","LIMIT16","LIMIT32","decode","encode","sizeOf","constant","epsilon","nibbles","out","i$1","ii$1","numBytes","codePoints","numChars","codepoint","eightBitMacEncodings","dataLength","encoding","table","macEncodingTableCache","macEncodingCacheKeys","getMacEncodingTable","cachedTable","decodingTable","encodingTable","isByteEncodable","encodeVarDeltaRunAsZeroes","deltas","runLength","numDeltas","encodeVarDeltaRunAsBytes","encodeVarDeltaRunAsWords","offsets","encodedOffsets","offSize","offsetEncoder","encodedOffset","wmm","ops","cachedValue","encodingFunction","sizeOfFunction","subtables","subtableOffsets","bytes","Table","tableName","optionKeys","ushortList","itemName","tableList","itemCallback","recordList","Coverage","coverageTable","RangeRecord","ScriptList","scriptListTable","scriptRecord","script","defaultLangSys","langSysRecord","langSys","FeatureList","featureListTable","featureRecord","feature","LookupList","lookupListTable","subtableMakers","lookupTable","subtableCallback","getByte","getUShort","getShort","getULong","getFixed","decimal","fraction","getOffset","getBytes","endOffset","bytesToString","typeOffsets","minorBase","major","minor","amount","recordDescription","rec","fieldType","struct","valueFormat","valueRecord","valueCount","structOffset","relativeOffset","subOffsets","subList","ranges","langSysTable","lookupTableParsers","lookupType","lookupFlag","useMarkFilteringSet","majorVersion","minorVersion","featureVariations","parseCmapTableFormat12","cmap","groupCount","startCharCode","endCharCode","startGlyphId","parseCmapTableFormat4","segCount","endCountParser","startCountParser","idDeltaParser","idRangeOffsetParser","glyphIndexOffset","glyphIndex","endCount","startCount","idDelta","idRangeOffset","parseCmapTable","platformId","encodingId","addSegment","addTerminatorSegment","makeCmapTable","glyphs","isPlan0Only","cmapTable","segCountToRemove","endCounts","startCounts","idDeltas","idRangeOffsets","glyphIds","cmap12Groups","cmap12Length","cffStandardStrings","cffStandardEncoding","cffExpertEncoding","standardNames","DefaultEncoding","CmapEncoding","CffEncoding","charset","charName","GlyphNames","post","gid","addGlyphNamesAll","glyphIndexMap","charCodes","addGlyphNamesToUnicodeMap","addGlyphNames","opt","draw","getPathDefinition","Glyph","unicode","hPoints","xScale","yScale","contours","currentContour","xCoords","yCoords","metrics","drawCircles","blueCircles","redCircles","xMin","yMin","xMax","yMax","advanceWidth","defineDependentProperty","externalName","internalName","GlyphSet","unicodeObj","loader","glyphLoader","ttfGlyphLoader","parseGlyph","buildPath","cffGlyphLoader","parseCFFCharstring","charstring","glyphset","equals","calcCFFSubroutineBias","subrs","bias","parseCFFIndex","conversionFn","objectOffset","offsetSize","parseCFFIndexLowMemory","getCffIndexObject","parseFloatOperand","eof","lookup","n1","n2","parseOperand","b0","b2","b3","b4","entriesToObject","parseCFFDict","operands","getCFFString","strings","interpretDict","dict","newDict","parseCFFHeader","header","TOP_DICT_META","PRIVATE_DICT_META","parseCFFTopDict","parseCFFPrivateDict","gatherCFFTopDicts","cffIndex","topDictArray","iTopDict","topDictData","topDict","privateSize","privateOffset","privateDict","subrOffset","subrIndex","parseCFFCharset","nGlyphs","sid","i$2","parseCFFEncoding","enc","nCodes","nRanges","nLeft","nStems","haveWidth","subrsBias","defaultWidthX","nominalWidthX","fdIndex","fdDict","newContour","parseStems","hasWidthArg","codeIndex","subrCode","jpx","jpy","c3x","c3y","c4x","c4y","parseCFFFDSelect","fdArrayCount","fdSelect","iGid","iRange","parseCFFTable","nameIndex","topDictIndex","stringIndex","globalSubrIndex","fdArrayOffset","fdSelectOffset","fdArrayIndex","fdArray","privateDictOffset","charStringsIndex","charString","encodeString","makeHeader","makeNameIndex","fontNames","makeDict","attrs","makeTopDict","makeTopDictIndex","makeStringIndex","makeGlobalSubrIndex","makeCharsets","glyphNames","glyphName","glyphSID","glyphToOps","_13","_23","dx1","dy1","dx2","dy2","makeCharStringsIndex","makePrivateDict","makeCFFTable","fontScale","privateAttrs","cff","parseHeadTable","makeHeadTable","timestamp","createdTimestamp","parseHheaTable","hhea","makeHheaTable","parseHmtxTableAll","numMetrics","numGlyphs","leftSideBearing","parseHmtxTableOnLowMemory","parseHmtxTable","makeHmtxTable","hmtx","makeLtagTable","tags","stringPool","stringPoolOffset","parseLtagTable","tableVersion","numTags","ltag","parseMaxpTable","maxp","makeMaxpTable","nameTableNames","macLanguages","macLanguageToScript","windowsLanguages","getLanguageCode","platformID","languageID","utf16","macScriptEncodings","macLanguageEncodings","getEncoding","encodingID","parseNameTable","stringOffset","nameID","byteLength","language","translations","reverseDict","makeNameRecord","findSubArray","needle","haystack","needleLength","loop","addStringToPool","pool","makeNameTable","nameIDs","namesWithNumericKeys","nameTableIds","macLanguageIds","windowsLanguageIds","nameRecords","lang","macPlatform","macLanguage","macScript","macEncoding","macName","macNameOffset","winLanguage","winName","winNameOffset","unicodeRanges","getUnicodeRange","range","parseOS2Table","os2","makeOS2Table","parsePostTable","nameLength","makePostTable","subtableParsers","substFormat","lookupRecordDesc","glyphCount","substCount","extensionLookupType","extensionParser","parseGsubTable","subtable","sequenceSet","alternateSet","ligatureSet","ligature","returnTable","chainRuleSet","chainRule","tableData","coverage","returnTable$1","makeGsubTable","gsub","parseMetaTable","numDataMaps","dataOffset","makeMetaTable","log2","computeCheckSum","makeTableRecord","checkSum","makeSfntTable","tables","sfnt","highestPowerOf2","recordFields","tableFields","tableLength","tableRecord","r2","metricsForChar","notFoundMetrics","average","vs","fontToSfntTable","xMins","yMins","xMaxs","yMaxs","advanceWidths","leftSideBearings","rightSideBearings","firstCharIndex","lastCharIndex","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","globals","headTable","hheaTable","maxpTable","os2Table","hmtxTable","englishFamilyName","englishStyleName","englishFullName","postScriptName","languageTags","nameTable","ltagTable","postTable","cffTable","metaTable","sfntTable","checkSumAdjusted","searchTag","imin","imax","imid","binSearch","searchRange","Layout","layout","hasLatn","scripts","scr","scriptTable","featIndexes","allFeatures","featureTable","lookupListIndexes","allLookups","classDefTable","kerningLookups","leftIndex","rightIndex","covIndex","pairSet","class1","class2","pair$1","Substitution","arraysEqual","ar1","ar2","getSubstFormat","defaultSubtable","substitutions","lookupTables","substitute","replacements","alternates","alternateSets","ligatures","ligatureSets","startGlyph","ligSet","lig","substitution","coverageGlyph","ligComponents","ligatureTable","isBrowser","arrayBufferToNodeBuffer","view","checkArgument","parseGlyphCoordinate","flag","previousValue","shortVectorBitMask","sameBitMask","flags","endPointIndices","numberOfCoordinates","repeatCount","i$3","i$4","i$5","moreComponents","i$6","transformPoints","newPoints","newPt","getContours","getPath","contourIndex","contour","next2","componentGlyph","transformedPoints","firstPt","secondPt","parseGlyfTableAll","loca","parseGlyfTableOnLowMemory","parseGlyfTable","glyf","instructionTable","exec","execGlyph","execComponent","Hinting","roundOff","roundToGrid","roundToDoubleGrid","roundToHalfGrid","roundUpToGrid","roundDownToGrid","roundSuper","period","phase","sign","xUnitVector","o1","o2","rp1","rp2","pv","do1","do2","doa1","doa2","dm1","dm2","rp","org","rpx","rpy","rpdx","rpdy","yUnitVector","UnitVector","pvns","fvs","getUnitVector","HPoint","lastPointOfContour","onCurve","HPZero","defaultState","State","env","prog","ppem","prepState","fpgmState","oCvt","cvt","components","gZone","cg","gz","pi","gLen","sp","np","ins","initTZone","tZone","handleElse","ip","nesting","SVTCA","SPVTCA","SFVTCA","SPVTL","p2i","p1i","SFVTL","SPVFS","SFVFS","GPV","GFV","fv","SFVTPV","ISECT","pa0i","pa1i","pb0i","pb1i","z0","z1","pa0","pa1","pb0","pb1","x3","y3","x4","y4","f1","f2","SRP0","SRP1","SRP2","SZP0","SZP1","SZP2","SZPS","SLOOP","RTG","RTHG","SMD","ELSE","JMPR","SCVTCI","DUP","POP","CLEAR","SWAP","DEPTH","LOOPCALL","cip","cprog","CALL","CINDEX","MINDEX","FDEF","ipBegin","MDAP","round","IUP","z2","pp","SHP","rpi","SHC","ci","SHZ","SHPIX","IP","rp1i","rp2i","MSIRP","rp0","ALIGNRP","rp0i","RTDG","MIAP","cv","NPUSHB","NPUSHW","WS","RS","WCVTP","RCVT","cvte","GC","MD","pi2","pi1","MPPEM","FLIPON","LT","e2","e1","LTEQ","GT","GTEQ","EQ","NEQ","ODD","EVEN","IF","EIF","AND","OR","NOT","DELTAP123","ds","appem","mag","SDB","SDS","ADD","SUB","DIV","MUL","ABS","NEG","FLOOR","CEILING","ROUND","WCVTF","DELTAC123","SROUND","S45ROUND","ROFF","RUTG","RDTG","SCANCTRL","SDPVTL","GETINFO","ROLL","MAX","MIN","SCANTYPE","INSTCTRL","PUSHB","PUSHW","MDRP_MIRP","indirect","setRp0","keepD","ro","md","od","ContextRange","contextName","ContextChecker","checkStart","checkEnd","ContextParams","currentIndex","Event","eventId","initializeCoreEvents","this$1","coreEvents","requiresContextUpdate","Tokenizer","stateId","RUDs","silent","RUD","hasFAILObject","isTokenType","replaced","tokenType","modifierId","modifier","contextParams","conditionParams","canApplyModifier","modifierParams","newStateValue","eventHandler","subsId","eventName","contextStartCheck","contextEndCheck","contextCheckers","endIndex","registeredContexts","contextChecker","openRange","isArabicChar","isIsolatedArabicChar","isTashkeelArabicChar","isLatinChar","FeatureQuery","SubstitutionAction","lookupCoverage","singleSubstitutionFormat1","substituteIndex","singleSubstitutionFormat2","lookupCoverageList","coverageList","lookupList","lookupIndex","chainingSubstitutionFormat3","lookupsCount","inputLookups","lookaheadOffset","lookaheadContext","lookaheadParams","lookaheadLookups","backtrackContext","backtrackParams","backtrackLookups","contextRulesMatch","lookupRecord","lookupListIndex","subtable$1","substitutionType","ligatureSubstitutionFormat1","ligSetIndex","lookaheadItem","decompositionSubstitutionFormat1","scriptTag","langSysRecords","features","featuresIndexes","lookups","substType","supportedScript","supportedFeature","scriptFeatures","arabicWordStartCheck","arabicWordEndCheck","arabicWordCheck","arabicSentenceStartCheck","arabicSentenceEndCheck","nextIsWhitespace","arabicCharAhead","arabicSentenceCheck","singleSubstitutionFormat1$1","singleSubstitutionFormat2$1","chainingSubstitutionFormat3$1","subst","ligatureSubstitutionFormat1$1","compsCount","SUBSTITUTIONS","applySubstitution","willConnectPrev","charContextParams","backtrack","isolated","tashkeel","willConnectNext","arabicPresentationForms","CONNECT","getContextParams","arabicRequiredLigatures","latinWordStartCheck","latinWordEndCheck","latinWordCheck","getContextParams$1","latinLigature","Bidi","baseDir","registerContextChecker","checkId","tokenizeText","reverseArabicSentences","rangeTokens","supportedTags","checkGlyphIndexStatus","applyArabicPresentationForms","applyArabicRequireLigatures","applyLatinLigatures","contextId","indexes","bidi","charToGlyphIndexMod","notdef","leftGlyph","rightGlyph","gposKerning","kerningValue","fullPath","gX","gY","gFontSize","glyphPath","glyphPaths","assertNamePresent","englishName","intArray","addName","nameString","nameKey","makeFvarAxis","parseFvarAxis","makeFvarInstance","axes","axisTag","parseFvarInstance","makeFvarTable","fvar","parseFvarTable","offsetToData","axisCount","axisSize","instanceCount","instanceSize","instances","instanceStart","attachList","caretValue","ligGlyph","ligCaretList","markGlyphSets","parseGDEFTable","gdef","subtableParsers$1","posformat","posFormat","valueFormat1","valueFormat2","classDef1","classDef2","class1Count","class2Count","parseGposTable","subtableMakers$1","makeGposTable","gpos","parseWindowsKernTable","subtableVersion","nPairs","parseMacKernTable","nTables","parseKernTable","kern","parseLocaTable","shortVersion","glyphOffsets","glyphOffset","parseOpenTypeTableEntries","numTables","tableEntries","checksum","parseWOFFTableEntries","compLength","origLength","compression","uncompressTable","tableEntry","inBuffer","outBuffer","parseBuffer","indexToLocFormat","flavor","cffTableEntry","fvarTableEntry","glyfTableEntry","gdefTableEntry","gposTableEntry","gsubTableEntry","hmtxTableEntry","kernTableEntry","locaTableEntry","nameTableEntry","metaTableEntry","locaTable","locaOffsets","glyfTable","kernTable","gdefTable","gposTable","gsubTable","fvarTable","pairDivider","blockDivider","generateNamedReferences","entities","characters","blocks","isOptionalBlock","entity","fullEntity","bodyRegExps","namedReferences","numericUnicodeMap","fromCodePoint","astralCodePoint","allNamedReferences","defaultDecodeOptions","strict","baseDecodeRegExps","decodeRegExps","fromCharCode","outOfBoundsChar","getDecodedEntity","references","isAttribute","isStrict","decodeResult","decodeEntityLastChar","decodeResultByReference","decodeSecondChar","decodeCode","decodeRegExp","metricCache","FontMetrics","oldGlyphs","newGlyphs","ascent","descent","valuesForFirst","valueForSecond","isDataURL","loadFontCache","loadFont","getFontMetrics","opentypeParse","cacheFontMetrics","_loadFontExternalDataURL","assetUrl","oldCache","newCache","outlineFontsInSvg","parsedSvg","fontMap","tspans","tspan","textAncestor","gAncestor","strokeWidth","pathToMeasure","pathString","clampWidth","currentWidth","charWidth","getLines","lineHeight","lh","defaultLineHeightFactor","processedLines","splitLineUntilFit","calculatedLines","li","allChars","regionWidth","initialWidth","middle","splitA","splitB","allWords","firstWordIndex","firstWord","split","tempWords","lastWordIndex","fits","nextWord","wordsWidth","calcFontSize","lineWidth","fontSizeW","fontSizeH","refitTextbox","updatedText","updatedElement","previousElement","fallbackLines","oneAxisChange","recalculateTextboxRegion","currentRegion","fontData","textLines","candidateRegion","requiredWidth","zip","lineA","lineB","fontSizeStep","transformationDefaults","applyTextTransformations","xs","ys","getTextAlignment","isVertical","getAnchor","recomputeTextOnElement","newText","oldEl","calculatedText","utils","extend","indexOf","escapeExpression","createFrame","blockParams","appendContextPath","badChars","possible","escapeChar","chr","contextPath","errorProps","Exception","endLineNumber","endColumn","_utils","inverse","_interopRequireDefault","_exception","_exception2","execIteration","priorKey","conditional","helpers","registerDefaultHelpers","moveHelperToHooks","_helpersBlockHelperMissing","_helpersBlockHelperMissing2","_helpersEach","_helpersEach2","_helpersHelperMissing","_helpersHelperMissing2","_helpersIf","_helpersIf2","_helpersLog","require$$4","_helpersLog2","_helpersLookup","require$$5","_helpersLookup2","_helpersWith","require$$6","_helpersWith2","helperName","keepHelper","container","decorators","registerDefaultDecorators","_decoratorsInline","_decoratorsInline2","logger","levelMap","protoAccess","createProtoAccessControl","resultIsAllowed","resetLoggedProperties","_logger","_logger2","loggedProperties","runtimeOptions","propertyWhiteList","methodWhiteList","protoAccessControl","propertyName","checkWhiteList","protoAccessControlForType","logUnexpecedPropertyAccessOnce","HandlebarsEnvironment","_helpers","_decorators","_internalProtoAccess","VERSION","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","objectType","partials","SafeString","wrapHelper_1","wrapHelper","helper","transformOptionsFn","wrapper","runtime","checkRevision","template","wrapProgram","resolvePartial","invokePartial","_interopRequireWildcard","newObj","Utils","_base","_internalWrapHelper","compilerInfo","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateSpec","templateWasPrecompiledWithCompilerV7","invokePartialWrapper","depths","declaredBlockParams","programWrapper","depth","param","common","initData","main","executeDecorators","mergedHelpers","addHelpers","keepHelperInHelpers","currentDepths","lookupOwnProperty","currentPartialBlock","partialBlock","passLookupPropertyOption","lookupProperty","Handlebars","$Handlebars","_handlebarsBase","_handlebarsSafeString","_handlebarsSafeString2","_handlebarsException","_handlebarsException2","_handlebarsUtils","_handlebarsRuntime","_handlebarsNoConflict","_handlebarsNoConflict2","AST","handlebars","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","program","hash","vstack","lstack","yyloc","lex","yyval","expected","errStr","oldLines","past","pre","tempMatch","yy_","$avoiding_name_collisions","YY_START","strip","Visitor","visitSubExpression","visitBlock","visitPartial","mustache","_visitor","_visitor2","WhitespaceControl","doStandalone","isRoot","_isPrevWhitespace","isPrevWhitespace","_isNextWhitespace","isNextWhitespace","openStandalone","closeStandalone","inlineStandalone","omitRight","omitLeft","firstInverse","lastInverse","inverseStrip","sibling","multiple","SourceLocation","stripFlags","stripComment","preparePath","prepareMustache","prepareRawBlock","prepareBlock","prepareProgram","preparePartialBlock","validateClose","errorNode","locInfo","dig","isLiteral","escapeFlag","decorator","openRawBlock","contents","openBlock","inverseAndProgram","inverted","statements","firstLoc","lastLoc","parseWithoutProcessing","_parser","_parser2","_whitespaceControl","_whitespaceControl2","Helpers","validateInputAst","validateAstNode","isValidDepth","compiler","Compiler","precompile","compile","_ast","_ast2","opcode","otherOpcode","argEquals","childCompiler","guid","transformLiteralToPath","partialName","isDynamic","sexpr","isBlock","scoped","blockParamId","bool","isSimple","isBlockParam","isHelper","isEligible","blockParamIndex","blockParamChild","omitEmpty","environment","compiled","compileInput","execOptions","setupOptions","literal","intToCharMap","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","toVLQSigned","fromVLQSigned","isNegative","shifted","base64Vlq","encoded","digit","vlq","aStr","aIndex","aOutParam","strLen","continuation","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","urlGenerate","aParsedUrl","aPath","isAbsolute","up","aRoot","aPathUrl","aRootUrl","joined","relative","supportsNullProto","toSetString","isProtoString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","compareByGeneratedPositionsInflated","parseSourceMapInput","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","util","hasNativeMap","ArraySet","aArray","aAllowDuplicates","sStr","isDuplicate","aIdx","arraySet","generatedPositionAfter","columnA","columnB","MappingList","aCallback","aThisArg","aMapping","mappingList","base64VLQ","SourceMapGenerator","aSourceMapConsumer","mapping","newMapping","sourceFile","sourceRelative","generated","aSourceFile","aSourceContent","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","aSource","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","nameIdx","sourceIdx","mappings","aSources","aSourceRoot","sourceMapGenerator","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","swap","ary","temp","randomIntInRange","low","high","doQuickSort","comparator","pivotIndex","pivot","quickSort","binarySearch","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","IndexedSourceMapConsumer","BasicSourceMapConsumer","aContext","aOrder","order","originalLine","originalColumn","sourceMapConsumer","sourcesContent","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","Mapping","generatedLine","cachedSegments","originalMappings","aMappings","aLineName","aColumnName","aComparator","nextMapping","nullOnMissing","fileUriAbsPath","sections","lastOffset","offsetLine","offsetColumn","sectionIndex","section","generatedPosition","sectionMappings","adjustedMapping","REGEX_NEWLINE","NEWLINE_CODE","isSourceNode","SourceNode","aLine","aColumn","aChunks","aGeneratedCode","aRelativePath","remainingLines","remainingLinesIndex","shiftNextLine","lineContents","getNextLine","newLine","lastGeneratedLine","lastGeneratedColumn","lastMapping","addMappingWithCode","nextLine","aChunk","aFn","aSep","aPattern","aReplacement","lastChild","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","sourceNode","SourceMap","srcFile","castChunk","codeGen","CodeGen","iter","_codeGen","_codeGen2","Literal","JavaScriptCompiler","revision","versions","explicit","asObject","opcodes","_context","programs","varDeclarations","locals","aliasCount","appendOnly","appendFirst","sourceSeen","bufferStart","bufferEnd","blockHelperMissing","blockName","local","falsy","startPartIndex","strictLookup","_loop","paramSize","foundDecorator","nonHelper","possibleFunctionCalls","functionLookupCode","functionCall","helperCall","programParams","expr","createdStack","usedLiteral","top","inlineStack","wrapped","inline","blockHelper","paramsInit","foundHelper","callContext","contexts","objectArgs","useRegister","reservedWords","compilerWords","requireTerminal","_handlebarsRuntime2","_handlebarsCompilerAst","_handlebarsCompilerAst2","_handlebarsCompilerBase","_handlebarsCompilerCompiler","_handlebarsCompilerJavascriptCompiler","_handlebarsCompilerJavascriptCompiler2","_handlebarsCompilerVisitor","_handlebarsCompilerVisitor2","_create","renderTextTemplateForWorkflow","workflowManager","renderTextTemplate","Textbox","curvedPathId","textFillId","xTranslation","yTranslation","getFill","TextPath","TextSpan","calcLineHeight","getX","getY","halfBoxHeight","reverseIdx","middleLineIdx","targetId","getStartOffset","Illustration","CommandContext","leaveOffUndoStack","mostRecentCommand","undoneState","mostImminentCommand","sequenceId","layoutId","transactionState","els","layoutNamesWithDupes","getSvgElement","layouts","reloadedState","CreateLayoutCommand","renderingConfiguration","filteredElements","aLayer","bLayer","aLayerIndex","bLayerIndex","makeDataUriToBuffer","typeFull","common_1","base64ToArrayBuffer","idx0","idx1","idx2","idx3","bin0","bin1","bin2","stringToBuffer","patternImageDataCache","frameDataCache","frameDataPromiseCache","generateFrameSVG","generateDefaultRectangleFrameSvg","getVariant","designInputStepData","getFrameData","frameSvg","frameDataPromise","frameDocument","viewBoxElems","viewBoxHeight","viewBoxWidth","elementById","elementByClass","calculateOffsets","frameData","nondefaults","forceImageCover","frameAspectRatio","imageAspectRatio","scaleFactor","frameCenterHorizontal","frameCenterVertical","defaultLeft","defaultTop","getPatternImageData","dataUriToBuffer","svgStringDimensions","svgData","GetSVGDimensions","svgText","lengthToPixels","svgElement","viewBoxValues","nextIndexForLayer","maxIndex","getIllustrationBody","svgPromiseCache","svgObjectURL","getCanvasObjectURLAsync","widthString","heightString","cachedIllustrationQuality","aspect","centralRegion","coords","lesserDim","oldHeight","calculatedTextWidth","LayoutElementFactory","fontSrc","designInputStep","inputText","replacedText","recomputedElement","fittedRegion","elementKey","objectURL","ElementNotFoundError","findElement","findLayoutForElement","layoutForElement","layoutState","updatedLayoutForElement","updatedElements","layeredElements","rehydrateSerializedLayout","layoutNames","layoutName","illustration","illustrationBody","layoutKey","illustrations","CanvasCommand","UpdateWorkflowStateCommand","serializableWorkflow","MoveCommand","updatedLayout","RotateCommand","ResizeCommand","textbox","GroupCommand","accumulatedState","curCommand","CreateElementCommand","currentElementsInLayout","newElements","finalElement","productOverlay","updatedLayoutsForElement","newIndex","elementArray","lastIndexOfLayer","DeleteElementCommand","elementFound","filteredLayouts","finalLayouts","FontColorCommand","textFillSpotColor","FontImageFillCommand","imageFill","FontSizeCommand","FontSourceCommand","FontAlignmentCommand","UpdateFramePattern","targetLayout","existingPattern","newLayout","UpdateFrameThresholdSettingsCommand","useThreshold","invertThreshold","thresholdSaturation","UpdateImageSourceCommand","TextChangeCommand","TextStrokeCommand","strokeColor","strokeThickness","IllustrationColorCommand","newColors","oldColor","IllustrationCacheCommand","BringToFrontCommand","BringToBackCommand","BringForwardCommand","toIndex","SendBackwardsCommand","SilentStepHandler","product","assetFromProduct","canPromise","toSJISFunction","CODEWORDS_COUNT","kanji","fromString","BitBuffer","bufIndex","bitBuffer","BitMatrix","row","reserved","bitMatrix","getSymbolSize","posCount","intervals","posLength","FINDER_PATTERN_SIZE","finderPattern","PenaltyScores","sameCountCol","sameCountRow","lastCol","lastRow","bitsCol","bitsRow","darkCount","modulesCount","getMaskAt","maskPattern","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","errorCorrectionCode","errorCorrectionLevel","EXP_TABLE","LOG_TABLE","galoisField","GF","coeff","divident","divisor","degree","poly","Polynomial","ReedSolomonEncoder","paddedData","buff","reedSolomonEncoder","versionCheck","numeric","alphanumeric","byte","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","VersionCheck","Regex","dataStr","ECCode","Mode","G18","G18_BCH","getBestVersionForDataLength","currentVersion","getReservedBitsCount","getTotalBitsFromDataArray","segments","totalBits","reservedBits","getBestVersionForMixedData","totalCodewords","ecTotalCodewords","dataTotalCodewordsBits","usableBits","seg","ecl","G15","G15_MASK","G15_BCH","formatInfo","NumericData","remainingNum","numericData","ALPHA_NUM_CHARS","AlphanumericData","alphanumericData","ByteData","byteData","KanjiData","kanjiData","dijkstra","graph","predecessors","costs","closest","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","first_visit","cost","require$$7","getStringByteLength","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","s1","s2","getSegmentBitsLength","mergeSegments","segs","prevSeg","buildNodes","buildGraph","prevNodeIds","nodeGroup","currentNodeIds","prevNodeId","buildSingleSegment","modesHint","bestMode","optimizedSegs","AlignmentPattern","FinderPattern","MaskPattern","require$$8","Version","require$$9","FormatInfo","require$$10","require$$11","Segments","require$$12","setupFinderPattern","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","mod","setupFormatInfo","setupData","bitIndex","byteIndex","dark","createData","remainingByte","createCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","createSymbol","estimatedVersion","rawSegments","bestVersion","dataBits","moduleCount","modules","qrcode","hex2rgba","hexValue","margin","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","iSrc","jSrc","clearCanvas","getCanvasElement","qrData","canvasEl","rendererOpts","getColorAttrib","attrib","alpha","svgCmd","qrToPath","moveBy","newRow","lineLength","svgTag","qrcodesize","bg","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","browser","shortenUrl","longUrl","shortenerUrl","Poller","onSuccess","onFailure","interval","maxAttempts","DigitalContentStepService","reducerState","serializedStep","regionElements","shortUrl","getMpegLink","videoLink","linkData","protocolPrefix","urlBuilder","builtUrl","createElementForRegion","regionIndex","dataUri","urlToString","regionElement","digitalContentStepService","FrameStepService","reducerStep","initialPatternOverride","bundle","stateManager","uploadAspect","defaultVariant","frameSvgs","storageColors","patternSrc","frameService","variantId","_workflowManager","recalculateOffsets","assetSrc","existingSrc","svgVersion","setFrameIsUpdating","colorSafeSvg","originalSvg","svgAndColors","newFills","colorData","unique","newFill","colorOption","loadedPattern","initZoom","createdData","newFrameData","existingImage","removeExistingCommands","newOffsets","newElementId","createCommands","cdnLink","updateId","frameStepService","IllustrationStepService","regionEls","elementsForStep","illustrationWidth","illustrationHeight","layoutElement","spotColor","pmsValue","colorsForCommand","setIsUpdating","deleteCommands","elementsWithCommands","commandList","targetElements","defaultColorVariants","modifiedColors","cn","availableColors","colorEntries","singleColor","illustrationStepService","MaterialStepService","modelContainer","variantPromises","matName","setApplying","materialStepService","ModelStepService","highlightedRef","modelRef","modelStepService","WordBreakProperty","findBoundaries_1","WordBreakProperty_1","findBoundaries","rightPos","lookaheadPos","lookbehind","lookahead","wordbreakPropertyAt","nConsecutiveRegionalIndicators","positionAfter","isExtendedPictographicAt","isAHLetter","isMidNumLetQ","isStartOfSurrogatePair","codeUnit","searchForProperty","codePoint","midpoint","nextRange","startOfNextRange","lib","findSpans","span","isNonSpace","boundaries","LazySpan","ModuleStepService","setError","profanityFilter","validationResult","createElementFromRegion","existingKey","maxLength","words","word","profanity","moduleStepService","PictureStepService","deletionCommands","pictureStepService","QuestionStepService","questionStepService","ShapeStepService","manager","stepElement","colourOption","existingColor","getColor","updateCommand","newColor","shapeStepService","Toast","errorType","toast","linesThatFit","linesToBreak","amountLines","widthsPerLine","couldStillFit","textboxWidth","idxWidestLine","iMax","widestLine","foundGoodSpacing","idxOfSpace","splitLine","splitWidths","determineCorrectFontSizeAndLines","curFontSize","sizeRange","nonUserMin","calculatedFontSize","defaultFontSize","FontLoadError","allowableGlyphs","RegionLayoutMissingError","TextStepService","filteredText","badCharacterCodes","opentypeFont","searchableGlyphs","renderedText","errorData","defaultImageFillVariant","imageFillLink","imageFillDataRaw","imageFillData","defaultStroke","strokeData","aspectText","cached","alignment","commandDispatcher","imageFillOption","imageFillUrls","fillImage","strokeOption","customiseAllText","injectedText","processedText","correctFontSizes","correctLineLists","newFontSize","newLines","setHelperText","colorProfileAsset","finalFilteredName","fontSourceCommands","groupCommand","com","textStepService","fontAsset","fontUrl","shouldReturnResult","wrappedSetError","imageFillCommands","strokeCommands","sizingCommand","newlyCreatedData","currentText","transformedText","addFontToRegion","elementId","defaultColor","startingFill","sizingCommands","newCommand","newElementData","InformationMessageType","correctFontSize","textChangeCommand","fontSizeCommand","curFontData","setFlashRedError","existingRegionEls","newHelperText","ModuleProduct","fontTtfDataUrl","svgElem","svgRect","dropShadow","blur","shadow","feOffset","feGaussianBlur","feBlend","fixCase","transformTextEnclosure","textEnclosure","textBbox","boundsHeight","boundsWidth","heightPaddingFactor","widthPaddingFactor","heightPadFactor","widthPadFactor","textRect","boundsScaleFactor","shiftLeft","shiftTop","textRectHeight","textRectWidth","heightRatio","widthRatio","segmentSchemas","Warp","pathElements","pathData","prevType","outputType","schema","outputValue","segmentExpr","numberExpr","segmentMatch","segmentData","pointGroups","oldPoints","paramCounts","SPECIAL_SPACES","isSpace","isCommand","isArc","isDigitStart","skipSpaces","scanFlag","scanParam","zeroFirst","hasCeiling","hasDecimal","hasDot","finalizeSegment","cmdLC","scanSegment","cmdCode","is_arc","comma_found","need_params","path_parse","svgPath","combine","isRelative","CMD_SPLIT_RE","PARAMS_SPLIT_RE","transform_parse","transformString","TAU","unit_vector_angle","ux","uy","vx","vy","dot","get_arc_center","sin_phi","cos_phi","x1p","y1p","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","v1x","v1y","v2x","v2y","theta1","delta_theta","approximate_unit_arc","a2c","phi","lambda","curve","torad","Ellipse","ax","JK","l1","l2","ellipse","pathParse","transformParse","SvgPath","pstate","sgm","prevCmd","cmdSkipped","contourStartDeltaX","contourStartDeltaY","deltaX","deltaY","keepLazyStack","needReplace","lastX","lastY","countourStartX","countourStartY","newSegments","nameUC","nameLC","new_segments","nextX","nextY","prevControlX","prevControlY","prevSegment","curControlX","curControlY","svgpath","CBEZIER_MINMAX_EPSILON","minmaxQ","min","minmaxC","svgPathBbox","cxMinMax","cyMinMax","qxMinMax","qyMinMax","distModule","Vegemite","parsedtext","basePath","pathSvg","pathWidth","textSvg","gdefs","thick","layer0","layer1","layer2","layer3","rootElement","boundsRect","textGroup","moduleResolver","moduleName","handleDigitalContentStep","digitalContentStep","baseUrl","videoSource","finalUrl","urlToQrString","regions","handleFrameStep","frameStep","createFrameAndPattern","handleIllustrationStep","illustrationStep","fillName","replacementColors","handleModuleStep","moduleStep","handlePictureStep","pictureStep","handleShapeStep","shapeStep","handleSilentStep","silentStep","productOverlayImageUrl","assetSource","fetchedSrc","sanitizeSvg","rawSvg","handleTextStep","textStep","textAlign","getFontUrl","getDefaultColor","newBaseElement","correctLines","generateCommands","designInputSteps","workflowStep","LayoutPreviewService","LayoutPreviewBridge","handleCompleteRender","calculateNonPOTSupport","_reject","gl","nonPotTexSupport","service","panelSize","getWorkflowManager","dirty","clonedLayouts","staticContext","RenderQueuePromise","nonPOTSupport","onRender","originalSize","maxSize","minAspectRatio","layoutWidth","layoutHeight","renderDims","targetWidth","targetHeight","targetRatio","boundedSize","templatingContext","svgStr","cvg","stepAspectValuesToDesignInputSteps","stepAspectValues","stepAspectValue","generateStateFromDesignInputSteps","globalPropertyStateAspectFragment","createGlobalPropertyStateMutation","updateGlobalPropertyStateMutation","getGlobalPropertyStateQuery","getGlobalPropertyStateForBundle","bundleId","productFields","filterWorkflows","productCollectionProductFieldsFragment","productCollectionFieldsFragment","eagerFetchProducts","bundleBaseFieldsFragment","getBundleQuery","getBundleStakeholdersQuery","getBundlesAndStakeholdersForCustomerQuery","getProductCollectionProductsQuery","getProductCollectionProductsFilteredQuery","getProductCollectionProductsFeedQuery","createBundleMutation","duplicateBundleMutation","updateBundleMutation","bundleAddTransactionMutation","bundleAddTransactionsMutation","bundleRemoveTransactionMutation","bundleRemoveTransactionsMutation","bundleAddStakeholderMutation","bundleRemoveStakeholderMutation","bundleUpdateStakeholdersMutation","bundleUpdateTransactionOrderMutation","bundleAssignProductCollectionMutation","bundleAssignGlobalPropertyConfiguration","customerBundlesFeedQuery","finalizeUpdateBundleMutation","bundleApprovalQuery","bundleRejectionQuery","transactionApprovalQuery","transactionRejectionQuery","createRecipientQuery","updateRecipientQuery","transactionAttachRecipientQuery","deleteBundleQuery","findBundleForTransactionsQuery","bundleEmailMutation","sortKeysReplacer","sorted","dehydrateState","lay","deleteFieldNameFromObjectRecursive","STATE_DEBOUNCE_TIME","WorkflowStatePromise","createLayoutsFromPanels","panels","panel","getInitialLayouts","initialReducerState","_InternalWorkflowManager","experience","updateTransaction","graphQlClient","readOnly","isReloadedTransaction","delayWorkflowStateSync","ps","previewHandles","previewBridge","recipient","firstName","lastName","address","suburb","email","postalCode","country","mobile","company","apartment","customField1","customField2","customField3","customField4","customField5","conversionConfigurationId","prevalidated","WorkflowExperienceEventType","createRecipientResult","existingPromise","fireReloadAnimation","finalConfig","lookAt","modelAnim","requiredInitialOptions","initialOptionsPromise","conversionConfigPromise","introducedSilentSteps","silentStepElements","silentCommands","existingSelections","optionIds","simulatedSelections","previousActiveStepCount","activeSteps","defaultVariantId","poller","customer","details","stepStorage","stepNames","stepInitialised","status","stepId","changed","stepErrors","previewService","refocusCamera","newStorage","workflowCommand","steps","stepStructure","workflowState","fullState","deepClone","dehydrated","alphabetizedModificationIds","hashBuffer","filterOutAllElementsFromSteps","existingStepElements","stepsWithoutOldElements","newListOfStepElements","regionElementToRemove","currentRegionElement","selectionsToRemove","invalidVariants","handlingReload","executeSilentStep","uninitializedSteps","silentStepPromises","silentStepResults","stepResult","serializedSteps","shareActions","note","oldSelections","total","oldScenes","newScenes","oldSilentSteps","newStep","oldStep","invalidCanvasRegions","regionEl","invalidModelVariants","removalPromises","im","stepsPerScene","stepPromises","stepCwfs","cwf","followups","followup","traversableScenes","InternalWorkflowManager","Variant","locales","thumbAsset","_StepHandle","variantResource","configurationId","immediate","preview","modelAnimation","lookAtAnimation","StepHandle","IllustrationStepHandle","elementColors","assetConfiguration","newFillMap","MaterialStepHandle","ModelStepHandle","PictureStepHandle","QuestionStepHandle","ShapeStepHandle","colorVariant","TextStepHandle","stepElements","shouldCustomizeAll","customiseableText","userInput","layoutElements","filteredUserInput","inputLength","maxLengthExceeded","regionless","candidateMetadata","helperData","defaultText","_color","InformationStepHandle","DigitalContentStepHandle","ModuleStepHandle","StepHandleFactory","FrameStepHandle","INFINITY","MAX_INTEGER","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","nativeCeil","nativeMax","baseSlice","isIterateeCall","guard","toInteger","isSymbol","toFinite","toNumber","isBinary","lodash_chunk","createDesignTransactionFragment","createDesignsMutation","isTokenExpired","expiry","createDesignsGqlCall","designDetails","spiffClient","extraHeaders","jwtTokenKey","jwtToken","designDetail","formatMetadata","metadata","forCart","metadataObjectForStep","formattedMetadata","stepMetadata","colorString","prepareExportedData","designWorkflowMetadata","exportedData","distinctStepTitles","stepTitle","createDesignMessage","generatedSku","lineItemImageLink","processExecutionId","baseCost","optionsCost","ownerId","msgObject","createDesignDetails","getReducerState","workflowSelections","designName","createPreviewImage","workflowMetadata","forceFlushState","cameraOrientation","shouldUploadThreeDimPreview","cartMetadata","designMetadata","getSelections","stepOption","cartSelectionsWithPrices","cartSelections","designSelectionsWithPrices","designSelections","previewImageUrl","previewImageBlob","metadataList","selectionsList","createDesigns","unsyncedStates","transactions","chunkedTransactions","failedStates","serverWorkflowStates","createDesignResults","createDesignsResponse","design","createDesignResult","upToDateTransaction","DesignService","persistedString","transactionId","newDesigns","title","designs","designService","FUNC_ERROR_TEXT","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","flush","debounced","isInvoking","lodash_debounce","addTransactionStakeholderMutation","addAddressToTransactionMutation","addOrganizationToTransactionMutation","transactionUpdateIntegrationProductMutation","WorkflowExperienceImpl","experienceOptions","callbackOptions","workflowScene","newSteps","integrationProductId","newProduct","collectionProduct","defaultWorkflow","getWorkflow","streetAddress","city","postCode","isThreeD","defaultPanelIndex","targetPanel","defaultLayout","objectUrl","cachedHandle","createdHandle","bools","sg","disablePriceBreaks","totalSelectionCost","includeAdditionalProduct","basePrice","additionalPrice","integrationProduct","additionalProductPrice","subUnits","percentage","finalPrice","priceBreaks","totalQuantity","updatedPriceBreak","wfe","transactionIdA","transactionIdB","productIdA","productIdB","bundleProperties","filterIds","targetSteps","originatingSteps","getGlobalPropertyFromConfig","targetStep","uniqueProperties","propertyConfigurations","originatingStep","actualProperty","requiredProperty","curVariant","stakeholder","transactionCustomerIds","saveData","existingTitle","savedWorkflowState","capturePreviewImage","show3D","stepSelection","curStepExportedData","stepHasExportableSelection","stepmd","quantity","evt","selectionConfiguredToExport","GlobalPropertyHandleService","handles","targetAspect","FileUploadGlobalPropertyHandle","ColorOptionGlobalPropertyHandle","OptionGlobalPropertyHandle","TextGlobalPropertyHandle","GlobalPropertyHandle","targetExperiences","experiences","applyNewAsset","bgRemoved","updatedStorage","vectorized","stateValue","originalImage","existingStorage","targetKey","updateUsingBg","bgRemovedImage","colorMap","sharedSteps","fills","useAsOriginalImage","updateFrameOffsets","experiencesUpdates","aspectValue","optionResource","customColor","currentColor","getStepsForAspect","aspectName","stepType","globalConfig","amtChannelsForAspect","channelAmts","MAX_MEMOIZE_SIZE","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","HOT_COUNT","HOT_SPAN","reIsDeepProp","reIsPlainProp","rePropName","reEscapeChar","nodeIsMap","nodeIsSet","apply","arrayMap","objectCtorString","spreadableSymbol","nativeNow","symbolToString","baseAssignValue","isSet","getAllKeysIn","baseFlatten","isFlattenable","baseGet","castPath","toKey","baseIsMap","baseIsSet","baseKeysIn","nativeKeysIn","isProto","baseSetToString","baseUnset","isKey","stringToPath","isNew","customOmitClone","flatRest","setToString","overRest","keysIn","getSymbolsIn","memoizeCapped","memoize","otherArgs","shortOut","lastCalled","stamp","quote","subString","memoized","omit","paths","blacklist","omitDeepOnOwnProps","isNil","calculateMandatoryStates","globalPropertyState","mandatoryFulfilledAspects","GlobalPropertyStateUpdate","cloneStateFromNetwork","GlobalPropertyStateManagerImpl","onGlobalPropertyStateChange","bundleOptions","existingState","aspects","previousState","hidden","configAspect","aspectHidden","aspectIndex","storageInput","createResponse","BundleStateManager","stateData","metafieldsQuery","MetafieldManager","loadedKeys","entityIds","queryResponse","entityFields","lf","ef","metafieldConfigurationId","ProductCollectionProductSortKey","ProductCollection","collection","products","pcp","CollectionProduct","productIds","currentProducts","filters","sortKey","sortDescending","filteredResults","productFilters","quickSearch","workflowFilters","filteredProducts","abortController","fetched","productCollectionProduct","externalId","hasType","typeMatches","externalIdMatches","workflows","configuredDefault","ProductWorkflow","price","pixelRatio","getCollectionsQuery","getProductCollections","EventEmitter","addAddressToBundleMutation","addOrganizationToBundleMutation","generateQuoteIdMutation","BundleImpl","graphqlOptions","transactionLoadProgressCallback","defaultGlobalPropertyConfiguration","stateString","quoteId","po","fileHandle","assets","colorHandle","optionHandle","partialSum","aspectNames","matchingAspect","channelNumbers","defaultColors","amtChannelsInitialized","uniqueChannelNumbers","channelNumber","globalProperties","transactionIds","ownerMap","existingOwnerIds","initializeExperience","updateArray","existingOwnerId","removedExp","removedExperiences","oldExperience","sortFunc","customerDetails","stakeholderType","stakeholders","emailAddress","updatedStakeholders","onProgressUpdate","shouldRender3D","orderItems","globalPropertyConfigurationId","productCollectionId","globalPropertyConfiguration","productCollection","experiencesToClear","productId","previousHandles","newHandles","oldAspects","newHandle","resultingState","nextHandles","completed","previousMandatory","stakeholderId","executeProcessFlow","FlowService","executionId","ms","repeats","flowResult","FlowExecutionResult","maxRepeats","execution","FlowExecutionNodeResult","FlowExecutionInput","ObjectInputType","TextInput","ObjectInput","uuid","ArrayInput","IntegrationProduct","additionalIP","getCustomerQuery","customerCreateMutation","customerGenerateVerificationCodeMutation","customerMetafieldsQuery","GraphQlClientWrapper","getHttpHandlerExtensionConfiguration","runtimeConfig","resolveHttpHandlerRuntimeConfig","httpHandlerExtensionConfiguration","EndpointURLScheme","AlgorithmId","SMITHY_CONTEXT_KEY","HttpRequest","cloned","cloneQuery","carry","paramName","HttpResponse","hostHeaderMiddleware","handlerProtocol","hostHeaderMiddlewareOptions","getHostHeaderPlugin","clientStack","loggerMiddleware","clientName","commandName","dynamoDbDocumentClientOptions","overrideInputFilterSensitiveLog","overrideOutputFilterSensitiveLog","inputFilterSensitiveLog","outputFilterSensitiveLog","$metadata","outputWithoutMetadata","loggerMiddlewareOptions","getLoggerPlugin","recursionDetectionMiddlewareOptions","recursionDetectionMiddleware","getRecursionDetectionPlugin","getSmithyContext","normalizeProvider","promisified","resolveAuthOptions","candidateAuthOptions","authSchemePreference","preferredAuthOptions","preferredSchemeName","candidateAuthOption","schemeId","convertHttpAuthSchemesToMap","httpAuthSchemes","scheme","httpAuthSchemeMiddleware","mwOptions","resolvedOptions","authSchemes","smithyContext","failureReasons","identityProvider","identityProperties","signingProperties","httpAuthSchemeEndpointRuleSetMiddlewareOptions","getHttpAuthSchemeEndpointRuleSetPlugin","httpAuthSchemeParametersProvider","identityProviderConfigProvider","defaultSuccessHandler","httpResponse","httpSigningMiddleware","signer","httpSigningMiddlewareOptions","getHttpSigningPlugin","alphabetByEncoding","alphabetByValue","bitsPerLetter","bitsPerByte","maxLetterValue","fromBase64","totalByteLength","bitLength","chunkOffset","fromUtf8","toUint8Array","toUtf8","_input","isUint8Array","bitClusterCount","Uint8ArrayBlobAdapter","escapeUri","hexEncode","buildQueryString","iLen","qsEntry","requestTimeout","timeoutInMs","timeoutError","keepAliveSupport","FetchHttpHandler","instanceOrOptions","abortSignal","requestTimeoutInMs","keepAlive","abortError","buildAbortError","username","password","port","removeSignalEventListener","fetchRequest","raceOfPromises","fetchHeaders","transformedHeaders","requestTimeoutFn","onAbort","streamCollector","collectBlob","collectStream","readToBase64","isDone","commaIndex","SHORT_TO_HEX","HEX_TO_SHORT","encodedByte","fromHex","toHex","collectBody","streamBody","fromContext","deref","schemaRef","traits","schemaDeserializationMiddleware","operationSchema","ns","hint","headerEntries","findHeader","parseQueryString","querystring","parseUrl","hostname","pathname","protocol","toEndpointV1","endpoint","v1Endpoint","schemaSerializationMiddleware","deserializerMiddlewareOption","serializerMiddlewareOption","getSchemaSerdePlugin","commandStack","traitsCache","translateTraits","indicator","trait","anno","simpleSchemaCacheN","simpleSchemaCacheS","NormalizedSchema","traitStack","isMemberSchema","traitSet","computedMemberTraits","isStaticSchema","lhs","keyAble","withNamespace","streaming","isDoc","memberSchema","member","isList","internalCtorAccess","TypeRegistry","schemas","exceptions","shapeId","qualifiedName","es","$error","exceptionKey","expectNumber","stackTraceWarning","MAX_FLOAT","expectFloat32","expectLong","expectShort","expectSizedInt","expectByte","castInt","strictParseDouble","parseNumber","strictParseFloat32","NUMBER_REGEX","strictParseShort","strictParseByte","DAYS","MONTHS","dateToUtcString","date","year","month","dayOfWeek","dayOfMonthInt","hoursInt","minutesInt","secondsInt","dayOfMonthString","hoursString","minutesString","secondsString","RFC3339_WITH_OFFSET","parseRfc3339DateTimeWithOffset","yearStr","monthStr","dayStr","hours","minutes","seconds","fractionalMilliseconds","offsetStr","stripLeadingZeroes","parseDateValue","day","buildDate","parseOffsetToMilliseconds","IMF_FIXDATE","RFC_850_DATE","ASC_TIME","parseRfc7231DateTime","parseMonthByShortName","adjustRfc850Year","parseTwoDigitYear","parseEpochTimestamp","valueAsDouble","adjustedMonth","validateDayOfMonth","parseMilliseconds","thisYear","valueInThisCentury","FIFTY_YEARS_IN_MILLIS","monthIdx","DAYS_IN_MONTH","maxDays","isLeapYear","lower","upper","dateVal","directionStr","direction","hour","minute","randomUUID","decimalToHex","v4","rnds","LazyJsonString","NumericValue","_nv","SerdeContext","serdeContext","HttpProtocol","etr","inputNs","opTraits","hostPrefix","hostLabelInputs","replacement","eventStream","requestSchema","initialRequest","responseSchema","initialResponseContainer","EventStreamSerde","arg4","arg5","RpcProtocol","serializer","eventStreamMember","deserializer","dataObject","determineTimestampFormat","settings","httpLabel","httpPrefixHeaders","httpHeader","httpQuery","setFeature","DefaultIdentityProviderConfig","NoAuthSigner","httpRequest","createIsIdentityExpiredFunction","expirationMs","doesIdentityRequireRefresh","EXPIRATION_MS","isIdentityExpired","memoizeIdentityProvider","isExpired","requiresRefresh","normalizedProvider","hasResult","isConstant","coalesceProvider","DEFAULT_UA_APP_ID","isValidUserAgentAppId","appId","resolveUserAgentConfig","normalizedAppIdProvider","customUserAgent","EndpointCache","endpointParams","parameters","IP_V4_REGEX","isIpAddress","VALID_HOST_LABEL_REGEX","isValidHostLabel","allowSubDomains","labels","customEndpointFunctions","debugId","toDebugString","EndpointError","booleanEquals","value1","value2","getAttrPathList","pathList","squareBracketIndex","getAttr","not","DEFAULT_PORTS","parseURL","whatwgURL","urlString","isIp","inputContainsDefaultPort","authority","stringEquals","substring","reverse","uriEncode","endpointFunctions","evaluateTemplate","evaluatedTemplateArr","templateContext","openingBraceIndex","closingBraceIndex","parameterName","refName","attrName","getReferenceValue","evaluateExpression","callFunction","argv","evaluatedArgs","fnSegments","evaluateCondition","fnArgs","evaluateConditions","conditions","conditionsReferenceRecord","toAssign","getEndpointHeaders","headerKey","headerVal","headerValEntry","processedExpr","getEndpointProperties","propertyKey","propertyVal","getEndpointProperty","propertyEntry","getEndpointUrl","endpointUrl","evaluateEndpointRule","endpointRule","referenceRecord","endpointRuleOptions","evaluateErrorRule","errorRule","evaluateRules","endpointOrUndefined","evaluateTreeRule","treeRule","resolveEndpoint","ruleSetObject","paramsWithDefault","paramKey","paramDefaultValue","requiredParams","requiredParam","isVirtualHostableS3Bucket","ARN_DELIMITER","RESOURCE_DELIMITER","parseArn","arn","partition","accountId","resourcePath","resourceId","selectedPartitionsInfo","partitionsInfo","partitions","outputs","regionData","regionRegex","DEFAULT_PARTITION","awsEndpointFunctions","setCredentialFeature","RETRY_MODES","THROTTLING_ERROR_CODES","TRANSIENT_ERROR_CODES","TRANSIENT_ERROR_STATUS_CODES","NODEJS_TIMEOUT_ERROR_CODES","NODEJS_NETWORK_ERROR_CODES","isRetryableByTrait","isClockSkewCorrectedError","isBrowserNetworkError","errorMessages","isThrottlingError","isTransientError","isServerError","statusCode","ACCOUNT_ID_ENDPOINT_REGEX","checkFeatures","retryStrategy","endpointV2","USER_AGENT","X_AMZ_USER_AGENT","UA_NAME_SEPARATOR","UA_NAME_ESCAPE_REGEX","UA_VALUE_ESCAPE_REGEX","UA_ESCAPE_CHAR","BYTE_LIMIT","encodeFeatures","userAgentMiddleware","userAgent","escapeUserAgent","defaultUserAgent","awsContext","sdkUserAgentValue","normalUAValue","userAgentPair","prefixSeparatorIndex","uaName","getUserAgentMiddlewareOptions","getUserAgentPlugin","DEFAULT_USE_DUALSTACK_ENDPOINT","DEFAULT_USE_FIPS_ENDPOINT","validRegions","checkRegion","isFipsRegion","getRealRegion","resolveRegionConfig","useFipsEndpoint","providedRegion","realRegion","CONTENT_LENGTH_HEADER","contentLengthMiddleware","bodyLengthChecker","contentLengthMiddlewareOptions","getContentLengthPlugin","resolveParamsForS3","bucket","isArnBucketName","isDnsCompatibleBucketName","DOMAIN_PATTERN","IP_ADDRESS_PATTERN","DOTS_PATTERN","bucketName","isArn","isValidArn","createConfigValueProvider","configKey","canonicalEndpointParamKey","isClientContextParam","configProvider","configValue","getEndpointFromConfig","serviceId","getEndpointFromInstructions","commandInput","instructionsSupplier","clientConfig","endpointFromConfig","resolveParams","customEndpoint","instructions","instruction","endpointMiddleware","authScheme","httpAuthOption","endpointMiddlewareOptions","getEndpointPlugin","resolveEndpointConfig","tls","useDualstackEndpoint","customEndpointProvider","resolvedConfig","configuredEndpointPromise","DEFAULT_MAX_ATTEMPTS","DEFAULT_RETRY_MODE","DefaultRateLimiter","calculatedRate","retryErrorInfo","rateToUse","newRate","fillAmount","timeBucket","currentRate","MAXIMUM_RETRY_DELAY","INITIAL_RETRY_TOKENS","NO_RETRY_INCREMENT","INVOCATION_ID_HEADER","REQUEST_HEADER","Retry","DefaultRetryBackoffStrategy","t_i","DefaultRetryToken","longPoll","StandardRetryStrategy","arg1","retryTokenScope","errorInfo","delayFromErrorType","retryDelay","capacityCost","tokenToRenew","AdaptiveRetryStrategy","maxAttemptsProvider","rateLimiter","asSdkError","resolveRetryConfig","retryMode","getAllAliases","aliases","_aliases","getMiddlewareNameWithAliases","constructStack","absoluteEntries","relativeEntries","identifyOnResolve","entriesNameSet","sort","stepWeights","priorityWeights","removeByName","toRemove","isRemoved","filterCb","removeByReference","cloneTo","toStack","expandRelativeMiddlewareList","expandedMiddlewareList","getMiddlewareList","debug","normalizedAbsoluteEntries","normalizedRelativeEntries","normalizedEntriesNameMap","normalizedEntry","toMiddleware","wholeList","middleware","override","toOverrideIndex","toOverride","mw","toggle","Client","protocolSettings","optionsOrCb","useHandlerCache","handlers","SENSITIVE_STRING","schemaLogFilter","newObject","memberNs","Command","ClassBuilder","middlewareFn","additionalContext","CommandCtor","handlerExecutionContext","requestHandler","endpointParameterInstructions","middlewareSupplier","inputFilter","outputFilter","closure","CommandRef","ServiceException","decorateServiceException","exception","additions","loadConfigsForDefaultMode","knownAlgorithms","getChecksumConfiguration","checksumAlgorithms","algorithmId","ChecksumCtor","algo","resolveChecksumRuntimeConfig","checksumAlgorithm","getRetryConfiguration","resolveRetryRuntimeConfig","retryStrategyConfiguration","getDefaultExtensionConfiguration","resolveDefaultRuntimeConfig","NoOpLogger","isStreamingPayload","parseRetryAfterHeader","retryAfter","retryAfterSeconds","backoffMilliseconds","retryMiddleware","isRetryStrategyV2","retryToken","totalRetryDelay","isRequest","getRetryErrorInfo","refreshError","cooldown","getRetryErrorType","retryAfterHint","retryMiddlewareOptions","getRetryPlugin","getDateHeader","getSkewCorrectedDate","systemClockOffset","isClockSkewed","clockTime","getUpdatedSystemClockOffset","currentSystemClockOffset","clockTimeInMs","throwSigningPropertyError","validateSigningProperties","signingRegion","signingRegionSet","signingName","AwsSdkSigV4Signer","validatedProps","serverTime","initialSystemClockOffset","dateHeader","ALGORITHM_QUERY_PARAM","CREDENTIAL_QUERY_PARAM","AMZ_DATE_QUERY_PARAM","SIGNED_HEADERS_QUERY_PARAM","EXPIRES_QUERY_PARAM","SIGNATURE_QUERY_PARAM","TOKEN_QUERY_PARAM","AUTH_HEADER","AMZ_DATE_HEADER","DATE_HEADER","GENERATED_HEADERS","SIGNATURE_HEADER","SHA256_HEADER","TOKEN_HEADER","ALWAYS_UNSIGNABLE_HEADERS","PROXY_HEADER_PATTERN","SEC_HEADER_PATTERN","ALGORITHM_IDENTIFIER","EVENT_ALGORITHM_IDENTIFIER","UNSIGNED_PAYLOAD","MAX_CACHE_SIZE","KEY_TYPE_IDENTIFIER","MAX_PRESIGNED_TTL","signingKeyCache","cacheQueue","createScope","shortDate","getSigningKey","sha256Constructor","credsHash","hmac","signable","secret","getCanonicalHeaders","unsignableHeaders","signableHeaders","canonical","headerName","canonicalHeaderName","isArrayBuffer","getPayloadHash","hashConstructor","hashCtor","HeaderFormatter","shortView","intView","longBytes","binView","binBytes","utf8Bytes","strView","strBytes","tsBytes","Int64","UUID_PATTERN","uuidBytes","HEADER_VALUE_TYPE","negate","negative","hasHeader","soughtHeader","moveHeadersToQuery","lname","prepareRequest","getCanonicalQuery","encodedKey","iso8601","toDate","SignatureV4Base","applyChecksum","sha256","uriEscapePath","canonicalHeaders","payloadHash","sortedHeaders","longDate","credentialScope","canonicalRequest","algorithmIdentifier","hashedRequest","normalizedPathSegments","pathSegment","normalizedPath","SignatureV4","originalRequest","signingDate","expiresIn","unhoistableHeaders","hoistableHeaders","signingService","toSign","priorSignature","hashedPayload","hashedHeaders","stringToSign","signableMessage","requestToSign","keyPromise","resolveAwsSdkSigV4Config","inputCredentials","isUserSupplied","resolvedCredentials","memoizedProvider","normalizeCredentialProvider","boundProvider","bindCallerConfig","isCredentialObject","attributedCreds","signingEscapePath","regionInfo","SignerCtor","credentialDefaultProvider","credentialsProvider","defaultCognitoIdentityProviderHttpAuthSchemeParametersProvider","createAwsAuthSigv4HttpAuthOption","authParameters","createSmithyApiNoAuthHttpAuthOption","defaultCognitoIdentityProviderHttpAuthSchemeProvider","resolveHttpAuthSchemeConfig","config_0","resolveClientEndpointParameters","commonParams","fromUtf8Browser","convertToBuffer","isEmptyData","SHA_256_HASH","SHA_256_HMAC_ALGO","EMPTY_DATA_SHA_256","fallbackWindow","locateWindow","Sha256","BLOCK_SIZE","DIGEST_LENGTH","KEY","INIT","MAX_HASHABLE_LENGTH","RawSha256","bitsHashed","bufferView","undecoratedLength","state0","state1","state2","state3","state4","state5","state6","state7","t1_1","t2_1","toHash","bufferFromSecret","bufferHash","subtleCryptoMethods","supportsWebCrypto","supportsSecureRandom","subtle","supportsSubtleCrypto","getRandomValues","WebCryptoSha256","JsSha256","createDefaultUserAgentProvider","clientVersion","navigator","uaString","osName","osVersion","brands","brand","browserName","browserVersion","invalidProvider","TEXT_ENCODER","calculateBodyLength","DEFAULTS_MODE_OPTIONS","resolveDefaultsModeConfig","defaultsMode","useMobileConfiguration","effectiveType","rtt","downlink","ProtocolLib","queryCompat","defaultContentType","inputSchema","members","httpPayloadMember","mediaType","httpQueryParams","errorIdentifier","defaultNamespace","getErrorSchema","errorName","errorMetadata","synthetic","baseExceptionSchema","ErrorCtor","composite","staticRegistry","defaultSyntheticRegistry","reqId","queryErrorHeader","Code","Type","Error","queryCompatErrorData","registry","SerdeContextConfig","UnionSerde","jsonReviver","numericString","collectBodyString","loadRestJsonErrorCode","findKey","sanitizeErrorCode","rawValue","cleanValue","codeKey","JsonShapeDeserializer","union","nameMap","jsonName","unionSerde","fromKey","listMember","mapMember","_k","_v","untyped","NUMERIC_CONTROL_CHAR","JsonReplacer","JsonShapeSerializer","rootSchema","useReplacer","replacer","serializableValue","$unknown","sparse","generateIdempotencyToken","JsonCodec","AwsJsonRpcProtocol","errorTypeRegistries","serviceTarget","awsQueryCompatible","jsonCodec","errorSchema","AwsJson1_1Protocol","_data","ruleSet","defaultEndpointResolver","CognitoIdentityProviderServiceException","__ServiceException","AccessDeniedException","__BaseException","InternalErrorException","InvalidParameterException","NotAuthorizedException","ResourceNotFoundException","TooManyRequestsException","UserImportInProgressException","InternalServerException","LimitExceededException","UserNotFoundException","InvalidLambdaResponseException","TooManyFailedAttemptsException","UnexpectedLambdaException","UserLambdaValidationException","CodeDeliveryFailureException","InvalidPasswordException","InvalidSmsRoleAccessPolicyException","InvalidSmsRoleTrustRelationshipException","PreconditionNotMetException","UnsupportedUserStateException","UsernameExistsException","AliasExistsException","InvalidUserPoolConfigurationException","InvalidEmailRoleAccessPolicyException","MFAMethodNotFoundException","PasswordResetRequiredException","UnsupportedOperationException","UserNotConfirmedException","UserPoolAddOnNotEnabledException","CodeMismatchException","ExpiredCodeException","PasswordHistoryPolicyViolationException","SoftwareTokenMFANotFoundException","ConcurrentModificationException","ForbiddenException","WebAuthnChallengeNotFoundException","WebAuthnClientMismatchException","WebAuthnCredentialNotSupportedException","WebAuthnNotEnabledException","WebAuthnOriginNotAllowedException","WebAuthnRelyingPartyMismatchException","DeviceKeyExistsException","GroupExistsException","DuplicateProviderException","ManagedLoginBrandingExistsException","TermsExistsException","FeatureUnavailableInTierException","TierChangeNotAllowedException","UserPoolTaggingException","InvalidOAuthFlowException","ScopeDoesNotExistException","UnsupportedIdentityProviderException","RefreshTokenReuseException","UnauthorizedException","UnsupportedTokenTypeException","WebAuthnConfigurationMissingException","EnableSoftwareTokenMFAException","_AC","_ADE","_AEE","_AEI","_AF","_AM","_AMT","_AP","_APT","_AR","_ART","_ATc","_CDFE","_CI","_CIT","_CM","_CME","_CMEo","_CN","_CP","_CR","_CRTh","_DGK","_DK","_DKEE","_DPE","_ECE","_ED","_EIxp","_ESTMFAE","_FE","_FUITE","_GEE","_IA","_IAR","_IARn","_IAn","_IEE","_IERAPE","_ILRE","_IOAFE","_IPE","_IPEn","_ISE","_ISRAPE","_ISRTRE","_IT","_IUPCE","_LEE","_MFAMNFE","_MLBEE","_NAE","_NDM","_NDMT","_PHPVE","_PNME","_PRRE","_RNFE","_RT","_RTAC","_RTACR","_RTACRe","_RTRE","_S","_SDNEE","_ST","_STMFANFE","_TCNAE","_TEE","_TMFAE","_TMRE","_TMT","_TT","_UCDT","_UCDs","_UE","_UEE","_UIIPE","_UIPE","_ULE","_ULVE","_UNCE","_UNFE","_UOE","_UPAONEE","_UPTE","_UTTE","_UUSE","_WACME","_WACMEe","_WACNFE","_WACNSE","_WANEE","_WAONAE","_WARPME","_hE","_m","_rC","_s","_se","n0","_s_registry","CognitoIdentityProviderServiceException$","n0_registry","AccessDeniedException$","AliasExistsException$","CodeDeliveryFailureException$","CodeMismatchException$","ConcurrentModificationException$","DeviceKeyExistsException$","DuplicateProviderException$","EnableSoftwareTokenMFAException$","ExpiredCodeException$","FeatureUnavailableInTierException$","ForbiddenException$","GroupExistsException$","InternalErrorException$","InternalServerException$","InvalidEmailRoleAccessPolicyException$","InvalidLambdaResponseException$","InvalidOAuthFlowException$","InvalidParameterException$","InvalidPasswordException$","InvalidSmsRoleAccessPolicyException$","InvalidSmsRoleTrustRelationshipException$","InvalidUserPoolConfigurationException$","LimitExceededException$","ManagedLoginBrandingExistsException$","MFAMethodNotFoundException$","NotAuthorizedException$","PasswordHistoryPolicyViolationException$","PasswordResetRequiredException$","PreconditionNotMetException$","RefreshTokenReuseException$","ResourceNotFoundException$","ScopeDoesNotExistException$","SoftwareTokenMFANotFoundException$","TermsExistsException$","TierChangeNotAllowedException$","TooManyFailedAttemptsException$","TooManyRequestsException$","UnauthorizedException$","UnexpectedLambdaException$","UnsupportedIdentityProviderException$","UnsupportedOperationException$","UnsupportedTokenTypeException$","UnsupportedUserStateException$","UserImportInProgressException$","UserLambdaValidationException$","UsernameExistsException$","UserNotConfirmedException$","UserNotFoundException$","UserPoolAddOnNotEnabledException$","UserPoolTaggingException$","WebAuthnChallengeNotFoundException$","WebAuthnClientMismatchException$","WebAuthnConfigurationMissingException$","WebAuthnCredentialNotSupportedException$","WebAuthnNotEnabledException$","WebAuthnOriginNotAllowedException$","WebAuthnRelyingPartyMismatchException$","ClientIdType","SessionType","TokenModelType","AnalyticsMetadataType$","AuthenticationResultType$","NewDeviceMetadataType$","InitiateAuthRequest$","AuthParametersType","UserContextDataType$","InitiateAuthResponse$","RespondToAuthChallengeRequest$","ChallengeResponsesType","RespondToAuthChallengeResponse$","InitiateAuth$","RespondToAuthChallenge$","getRuntimeConfig","ipc","defaultConfigProvider","clientSharedValues","getSharedRuntimeConfig","packageInfo","RequestHandler","getAwsRegionExtensionConfiguration","resolveAwsRegionExtensionConfiguration","awsRegionExtensionConfiguration","getHttpAuthExtensionConfiguration","_httpAuthSchemes","_httpAuthSchemeProvider","_credentials","httpAuthScheme","httpAuthSchemeProvider","resolveHttpAuthRuntimeConfig","resolveRuntimeExtensions","extensionConfiguration","CognitoIdentityProviderClient","__Client","_config_0","__getRuntimeConfig","_config_1","_config_2","_config_3","_config_4","_config_5","_config_6","_config_7","_config_8","InitiateAuthCommand","$Command","cs","RespondToAuthChallengeCommand","UserPoolManager","spiffRegion","userPoolRegion","userPoolClientId","existingTokensString","existingTokens","userPoolManager","Defaults","Globals","_toArray","_arrayWithHoles","_iterableToArray","_nonIterableRest","Static","highestPrecision","_objects","firstObject","tailObjects","currentMinimum","_objects2","currentMaximum","isNumeric","isPercentage","areValidRatios","ratios","ratio","isEven","countFractionDigits","stringRepresentation","fractionDigits","isHalf","getJSON","setXHRHeaders","xhr","isUndefined","flattenObject","finalObject","flatObject","isThenable","Calculator","floatMultiply","getFactor","factor","roundingModes","rounded","roundingMode","calculator","Format","decimalPosition","modes","CurrencyConverter","mergeTags","getRatesFromRestApi","ErrorType","assertPercentage","assertValidRatios","assertInteger","calculator$1","Dinero","_Object$assign","currency","globalLocale","globalFormat","globalRoundingMode","globalFormatRoundingMode","globalExchangeRatesApi","assertSameCurrency","newLocale","newPrecision","isNewPrecisionLarger","addend","addends","subtrahend","subtrahends","multiplier","_percentage","shares","share","_ref$endpoint","_ref$propertyPath","propertyPath","_ref$headers","_ref$roundingMode","rate","comparators","formatter","digits","dinero","truthy","firstMatch","nub","nubModule","recs","cmp_","iso4217PublishDate","publishDate","codes","countries","currencyCodes","CurrencyService","currencyFormatSettings","currencyCode","currencyCodeData","CurrencyCodes.code","currencyService","CurrencyContext","rateFrom","rateTo","partnerCurrency","presentmentCurrency","units","getWorkflowsInternal","pickWorkflowFromPromise","getWorkflows","existingPromises","getWorkflowsPromise","uncachedPromises","filteredPromises","getIntegrationProducts","SpiffCommerceClient","conversionResponse","getIntegration","addonHandle","transactionCustomers","transactionStakeholder","graphqlClient","createdCustomer","authResult","lastRefreshed","nowSeconds","expired","collectionId","initialMetadata","bundleEntity","_idx","bundlePartnerMap","newBundle","bundleWrapper","duplicateTransactions","getContextHeadersForBundle","bundleOwnerMap","previewServiceConstructor","instantiatedWorkflow","optionsArray","transactionInitializedCallback","indexedOptions","transactionOptions","createOptions","batchSize","batchedReadTransactions","batchedCreateOptions","amtLoaded","readTransactions","batch","createTransactions","transactionResults","integrationProductIds","workflowIds","integrationProducts","integrationProductMap","workflowMap","experienceOptionsPromises","transactionResult","workflowId","graphQlClientWrapper","workflowExperienceOptions","sortedExperienceOptions","partnerCustomerMap","fetchIntegrationsOnProduct","externalIntegrationId","externalProductId","orderCreateResponse","themeConfigurationId","getTransaction","getOverrideThemeConfiguration","overrideThemeConfigurationId","overrideThemeInstallId","getBundleThemeConfiguration","getTransactionThemeConfiguration","getAuthHeaders","getContextHeadersForTransaction","deleteBundle","bundleContextHeaders","getBundleIdForTransaction","transactionContextHeaders","getBoundedOffsets","mustCover","newWidth","newHeight","zoomMinimumBound","zoom","boundedWidth","boundedHeight","boundToRange","FrameService","initialZoom","frameStorage","frameSource","existingFrameData","frameDataChangeListener","cX","cY","onComplete","calculatedOffsets","xoff","yoff","dX","dY","zoomChangeListener","rotationChangeListener","forceUpdate","patternData","newListener","thresholdSettings","elementID","offsetIndex","minimumScale","resetRotation","existingRotation","MockWorkflowManager","_firstName","_lastName","_address","_suburb","_email","_postalCode","_country","_mobile","_company","_apartment","_customField1","_customField2","_customField3","_customField4","_customField5","_conversionConfigurationId","_note","_getReducerState","_poller","_callback","_stepName","_command","_serializedSteps","_stepNames","_update","_stepId","_status","_results","_variants","_elements","_previewService","_enabled","_field","FrameStep","ImageState","frameStepData","storeAsOriginal","enhanced","uploading","imageUploadComplete","assetToApply","newUseOriginalAsset","getCurrentUserDetailsQuery","getCustomerTransactionsQuery","setTransactionDesignName","duplicateTransactionMutation","getCustomerBundlesQuery","getTransactionsForBundleQuery","setBundleName","getTemplateBundlesQuery","nameBundle","nameTransaction","duplicateBundle","duplicateTransaction","getCustomer","getCustomerBundles","customerId","getTransactionsForBundle","getUnorderedTransactions","getOrderedTransactions","getTemplateTransactions","getTemplateBundles","addressValidationResultFragment","addressValidationJobFragment","addressValidationJobsQuery","recipientAddressValidationJobsQuery","recipientValidateMutation","recipientValidateBatchMutation","recipientOverrideAddressMutation","AddressValidationResultConfirmationLevel","AddressValidationJobStatus","getValidationJobsForWorkflowExperiences","workflowExperiences","getAddressValidationJobs","validateWorkflowExperienceRecipient","workflowExperience","validateWorkflowExperienceRecipients","overrideWorkflowExperienceRecipientAddress"],"mappings":"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C,OAAOlK,CACT,CAEA,cAAe,CACb,KAAM,CAAE,UAAAmK,GAAc,KAAK,SAErBrG,EAAQ,KAAK,OAAO,QAAO,EAEjC,GAAIA,EAAM,OAASJ,GAAU,MAC3B,EAAE,KAAK,cAEHyG,IAAc,QAAa,KAAK,cAAgBA,GAClD,MAAMrJ,GACJ,KAAK,OAAO,OACZgD,EAAM,MACN,+BAA+BqG,CAAS,2BAClD,CAGE,CACF,EAKA,SAASZ,GAAazF,EAAO,CAC3B,MAAMpK,EAAQoK,EAAM,MACpB,OAAO+F,GAAiB/F,EAAM,IAAI,GAAKpK,GAAS,KAAO,KAAKA,CAAK,IAAM,GACzE,CAKA,SAASmQ,GAAiBzI,EAAM,CAC9B,OAAO6C,GAAsB7C,CAAI,EAAI,IAAIA,CAAI,IAAMA,CACrD,CCxmDO,SAASgJ,GAAYtH,EAAK,CAC/B,MAAO,IAAIA,EAAI,QAAQuH,GAAeC,EAAe,CAAC,GACxD,CAEA,MAAMD,GAAgB,gCAEtB,SAASC,GAAgBxH,EAAK,CAC5B,OAAOyH,GAAgBzH,EAAI,WAAW,CAAC,CAAC,CAC1C,CAEA,MAAMyH,GAAkB,CACtB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,MACA,MACA,MACA,UACA,MACA,MACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,GACA,GACA,MACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,OACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA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,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,YACA,YACA,YACA,YACA,YACA,WACJ,EAEMC,GAAY,CACd,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACJ,EAEMC,GAAYD,GAAU,IAAKn/C,GAAM,CACnC,SAASA,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAC9B,SAASA,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAC9B,SAASA,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,CAClC,CAAC,EAED,SAASq/C,GAASC,EAAe,CAC7B,MAAMnK,EAAM+J,GAAU,QAAQI,CAAK,EACnC,OAAOnK,GAAO,EAAIgK,GAAUhK,CAAG,EAAI,EACvC,CAEA,SAASoK,GAASD,EAAe,CAC7B,MAAMnK,EAAMgK,GAAU,QAAQG,CAAK,EACnC,OAAOnK,GAAO,EAAI+J,GAAU/J,CAAG,EAAI,EACvC,CAQA,SAASqK,GAAcC,EAAaC,EAAc,GAAoC,CAClF,MAAMC,EAA8D,CAAA,EAC9DC,EAAsB,CAAA,EACtB13F,EAAQq3F,GAASE,CAAG,EACtBv3F,GACAy3F,EAAU,KAAK,CACX,IAAKz3F,EACL,IAAAu3F,EACA,SAAU,CAAA,CACb,EAEL,MAAMzgD,EAAI,SAASygD,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpCp7F,EAAI,SAASo7F,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpCj9F,EAAI,SAASi9F,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EAC1C,IAAII,EAAYC,EAAYC,EAC5B,QAAS5K,EAAM,EAAGA,EAAMgK,GAAU,OAAQhK,IAAO,CAC7C0K,EAAKT,GAAUjK,CAAG,EAAE,CAAC,EACrB2K,EAAKV,GAAUjK,CAAG,EAAE,CAAC,EACrB4K,EAAKX,GAAUjK,CAAG,EAAE,CAAC,EACrB,MAAM6K,EAAO,KAAK,KAAK,KAAK,IAAIhhD,EAAI6gD,EAAI,CAAC,EAAI,KAAK,IAAIx7F,EAAIy7F,EAAI,CAAC,EAAI,KAAK,IAAIt9F,EAAIu9F,EAAI,CAAC,CAAC,EACtFH,EAAU,KAAKI,CAAI,CACvB,CACA,QAAS7K,EAAM,EAAGA,EAAMyK,EAAU,OAAQzK,IAClCyK,EAAUzK,CAAG,GAAKuK,GAAe,CAACC,EAAU,KAAMh3E,GAAOA,EAAG,MAAQu2E,GAAU/J,CAAG,CAAC,GAClFwK,EAAU,KAAK,CAAE,IAAKT,GAAU/J,CAAG,EAAG,IAAKgK,GAAUhK,CAAG,EAAG,SAAUyK,EAAUzK,CAAG,EAAG,EAG7F,OAAOwK,EAAU,KAAK,CAACr+E,EAAG9e,IAAM8e,EAAE,SAAW9e,EAAE,QAAQ,CAC3D,CAGA,MAAMy9F,GAAaf,GAAU,IAAI,CAACgB,EAAK/K,KAAS,CAAE,IAAA+K,EAAK,IAAKf,GAAUhK,CAAG,CAAA,EAAI,EACvEgL,GAAO,IAAIxC,GAAKsC,GAAY,CAAE,KAAM,CAAC,KAAK,EAAG,EAOnD,SAASG,GAAcjxB,EAAepuC,EAAmC,CACrE,OAAOo/D,GAAK,OAAOhxB,EAAQpuC,EAAoB,CAAE,MAAAA,GAAd,MAAqB,CAC5D,CAMA,SAASs/D,GAAUC,EAAsB,CACrC,MAAMp4F,EAAQo4F,EAAK,MAAM,gCAAgC,EACzD,GAAI,CAACp4F,EACD,MAAO,GAEX,MAAM82C,EAAI,SAAS92C,EAAM,CAAC,EAAG,EAAE,EACzB7D,EAAI,SAAS6D,EAAM,CAAC,EAAG,EAAE,EACzB1F,EAAI,SAAS0F,EAAM,CAAC,EAAG,EAAE,EAC/B,MAAO,CAAC82C,EAAG36C,EAAG7B,CAAC,EACV,IAAK0U,GAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,EACP,YAAA,CACT,CAEA,IAAIqpF,GAAgD,KAMpD,SAASC,GAAkBlB,EAAuB,CAC9C,GAAIA,EAAM,WAAW,GAAG,EAEpB,OAAOmB,GAAgBnB,CAAK,EAGhC,GAAIA,EAAM,WAAW,MAAM,GAAKA,EAAM,WAAW,KAAK,EAAG,CACrD,MAAMG,EAAMY,GAAUf,CAAK,EAC3B,GAAIG,EACA,OAAOA,CAEf,CAGA,GAAI,CAAC,SACD,MAAM,IAAI,MAAM,iDAAiD,EAKrE,GAHKc,KACDA,GAAe,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI,GAE/D,CAACA,GACD,MAAM,IAAI,MAAM,4DAA4D,EAEhFA,GAAa,UAAYjB,EAEzB,MAAMoB,EAAYD,GAAgBF,GAAa,SAAS,EACxD,OAAKG,GACD,QAAQ,MAAM,yBAAyBpB,CAAK,EAAE,EAE3CoB,CACX,CAEA,SAASD,GAAgBE,EAAyB,CAC9C,MAAMlB,EAAMkB,EAAQ,UAAU,CAAC,EAAE,YAAA,EACjC,OAAIlB,EAAI,SAAW,EACRA,EAEPA,EAAI,SAAW,EAER,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAE1D,EACX,CAEO,MAAMmB,GAA6BC,GAA6C,CACnF,MAAMC,EAAOC,GAA0BF,EAAgB,SAAS,EAChE,OAAIC,EACO,GAAGD,EAAgB,YAAY,IAAIC,CAAI,GAE3CD,EAAgB,YAC3B,EAEaE,GAA6BC,GAAsD,CAC5F,GAAI,CAACA,EACD,MAAO,GAGX,GAAIA,EAAoB,YAAY,SAAS,GAAG,GAAKA,EAAoB,YAAY,SAAS,MAAM,EAAG,CACnG,MAAMC,EAA8BD,EAAoB,YAAY,QAAQ,MAAO,GAAG,EAChFE,EAAgBD,EAA4B,YAAY,GAAG,EAIjE,MAAO,mBAHqBA,EAA4B,MAAMC,EAAgB,CAAC,EACjC,MAAM,EAAG,EAAE,CAEd,KAAKF,EAAoB,UAAU,GAClF,CAEA,MAAO,mBAAmBA,EAAoB,WAAW,KAAKA,EAAoB,UAAU,GAChG,EAQaG,GAA6B39F,GAAmC,CACzE,MAAM49F,EAAQ59F,EAAM,MAAM,uBAAuB,EAGjD,GAAI49F,EAAM,SAAW,EACjB,MAAO,CAAE,aAAc,SAAA,EAG3B,GAAIA,EAAM,SAAW,EACjB,MAAO,CAAE,aAAcA,EAAM,CAAC,CAAA,EAGlC,MAAMC,EAAsBD,EAAM,CAAC,EAAE,MAAM,eAAe,EAC1D,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,uCAAuC,EAE3D,MAAMC,EAASD,EAAoB,CAAC,EAAE,QAAQ,SAAU,EAAE,EAAE,MAAM,GAAG,EACrE,MAAO,CACH,aAAcD,EAAM,CAAC,EACrB,UAAW,CAAE,YAAaE,EAAO,CAAC,EAAG,WAAYA,EAAO,CAAC,CAAA,CAAE,CAEnE,ECxzFMC,GAAmB,CACrB,WACA,SACA,UACA,OACA,UACA,WACA,OACA,OACA,WACA,OACA,OACJ,EAGMC,GAAwB,CAAC,OAAQ,QAAQ,EAKzCC,GAAW,CAACp3F,EAAelG,IAA+B,CAC5DA,EAAEkG,CAAI,EACFA,EAAK,SAAS,OAAS,GACvB,MAAM,KAAKA,EAAK,QAAQ,EAAE,QAAS+O,GAAUqoF,GAASroF,EAAOjV,CAAC,CAAC,CAEvE,EAKMu9F,GAAiB,CAAIr3F,EAAelG,IAAuD,CAC7F,MAAMw9F,EAAYx9F,EAAEkG,CAAI,EACxB,GAAIs3F,EACA,OAAOA,EAEX,MAAMzsF,EAAS7K,EAAK,cACpB,GAAK6K,EAGL,OAAOwsF,GAAexsF,EAAQ/Q,CAAC,CACnC,EAKMy9F,GAAmB,CAACv3F,EAAe8mF,IAA8B,CACnE,GAAI,CACA,OAAO9mF,EAAK,QAAQ8mF,CAAQ,CAChC,MAAY,CAGR,OAAO9mF,EAAK,UAAU,SAAS8mF,EAAS,UAAU,CAAC,CAAC,CACxD,CACJ,EAKM0Q,GAAkB,CAACrtF,EAAestF,EAAsB,KAAU,CAEpE,CAACA,GAAuBttF,EAAK,aAAa,sBAAuB,MAAM,EAIvE,MAAMq8E,EAAgB,CAAA,EACtB4Q,GAASjtF,EAAOnK,GAAS,CACrB,GAAIA,EAAK,UAAY,SAAU,CAC3BA,EAAK,OAAA,EACL,MACJ,CACA,GAAIA,EAAK,UAAY,QAAS,CAC1B,GAAI,CACasH,GAAAA,MAAMtH,EAAK,SAAS,EAC5B,YAAY,MAAM,QAAS4mF,GAAe,CAC3CJ,EAAM,KAAKI,CAAI,CACnB,CAAC,EACD5mF,EAAK,OAAA,CACT,OAASxG,EAAG,CACR,QAAQ,MAAMA,CAAC,CACnB,CACA,MACJ,CACA,MAAMk+F,EAAY13F,EAAK,WAAW,aAAa,OAAO,GAAG,OAAO,KAAA,EAChE,GAAI03F,EAAW,CACX,MAAMC,EAAmB,CAAA,EACJD,EAAU,MAAM,GAAG,EAC3B,QAASz6B,GAAU,CAC5B,MAAM26B,EAAU36B,EAAM,KAAA,EACtB,GAAI26B,EAAS,CACT,KAAM,CAACvkF,EAAOla,CAAK,EAAIy+F,EAAQ,MAAM,GAAG,EAClCC,EAAiBxkF,EAAM,YAAA,EACjB8jF,GAAsB,QAAQU,CAAc,EAC9C,GACN73F,EAAK,aAAa63F,EAAgB1+F,EAAM,KAAA,CAAM,EAE9Cw+F,EAAO,KAAKC,CAAO,CAE3B,CACJ,CAAC,EACGD,EAAO,OAAS,EAChB33F,EAAK,aAAa,QAAS23F,EAAO,KAAK,GAAG,CAAC,EAE3C33F,EAAK,gBAAgB,OAAO,CAEpC,CACJ,CAAC,EACDo3F,GAASjtF,EAAOnK,GAAS,CACrBwmF,EAAM,QAASI,GAAS,CACpBA,EAAK,WAAW,QAASE,GAAa,CAC9ByQ,GAAiBv3F,EAAM8mF,CAAQ,GAC/BF,EAAK,cAAc,QAASO,GAAsB,CAC1CA,EAAK,UAAYA,EAAK,OACtBnnF,EAAK,aAAamnF,EAAK,SAAUA,EAAK,KAAK,CAEnD,CAAC,CAET,CAAC,CACL,CAAC,CACL,CAAC,CACL,EAMM2Q,GAAyB3tF,GAAkB,CAC7C,MAAM4tF,EAAqB,mBACrBC,EAAU7tF,EAAK,aAAa,SAAS,EACrCo4E,EAAQp4E,EAAK,aAAa,OAAO,EACjCq4E,EAASr4E,EAAK,aAAa,QAAQ,EACzC,GAAI,CAAC6tF,EAAS,MAAM,IAAI,MAAM,+BAA+B,EACzDzV,KAAY,aAAa,QAASA,EAAM,QAAQwV,EAAoB,EAAE,CAAC,EACvEvV,KAAa,aAAa,SAAUA,EAAO,QAAQuV,EAAoB,EAAE,CAAC,CAClF,EAEME,GAAsBC,GACTnc,GAAA,EACU,gBAAgBmc,EAAK,eAAe,EAC5C,kBAGfC,GAAmB,CAACC,EAAkB7V,EAAeC,IAAmB,CAC1E4V,EAAQ,aAAa,SAAU,GAAG5V,CAAM,IAAI,EAC5C4V,EAAQ,aAAa,QAAS,GAAG7V,CAAK,IAAI,CAC9C,EAEM8V,GAAe,CAACD,EAAkBE,EAA4CC,IAAgC,CAChHnB,GAASgB,EAAUp4F,GAAS,CAExB,MAAMw4F,EAAOx4F,EAAK,WAAW,aAAa,MAAM,EAC5Cw4F,GAAQA,EAAK,QAAU,QACvBx4F,EAAK,UAAU,QAASgH,GAAc,CAClC,GAAIA,EAAU,WAAW,YAAY,EAAG,CACpC,MAAMiuF,EAAQqD,EAAOtxF,EAAU,QAAQ,cAAe,EAAE,CAAC,EACzD,GAAIiuF,EACAj1F,EAAK,aACD,OACAu4F,EAAoBhC,GAA0BtB,CAAK,EAAIA,EAAM,YAAA,MAE9D,CAEH,MAAMA,EAAQqD,EAAOtxF,CAAS,EAC1BiuF,GACAj1F,EAAK,aACD,OACAu4F,EAAoBhC,GAA0BtB,CAAK,EAAIA,EAAM,YAAA,CAGzE,CACJ,CACJ,CAAC,EAEL,MAAMwD,EAASz4F,EAAK,WAAW,aAAa,QAAQ,EAChDy4F,GAAUA,EAAO,QAAU,QAC3Bz4F,EAAK,UAAU,QAASgH,GAAc,CAClC,GAAIA,EAAU,WAAW,cAAc,EAAG,CACtC,MAAMiuF,EAAQqD,EAAOtxF,EAAU,QAAQ,gBAAiB,EAAE,CAAC,EAC3D,GAAIiuF,EACAj1F,EAAK,aACD,SACAu4F,EAAoBhC,GAA0BtB,CAAK,EAAIA,EAAM,YAAA,MAE9D,CAEH,MAAMA,EAAQqD,EAAOtxF,CAAS,EAC1BiuF,GACAj1F,EAAK,aACD,OACAu4F,EAAoBhC,GAA0BtB,CAAK,EAAIA,EAAM,YAAA,CAGzE,CACJ,CACJ,CAAC,CAET,CAAC,CACL,EAEMyD,GAAsBN,GACLxb,GAAA,EACD,kBAAkBwb,CAAO,EAGzCO,GAAiC,CACnCT,EACA3V,EACAC,EACA8V,EACAC,IACS,CACT,MAAMH,EAAUH,GAAmBC,CAAG,EACtC,GAAI,CAACE,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,OAAAD,GAAiBC,EAAS7V,EAAOC,CAAM,EACvC6V,GAAaD,EAASE,EAAQC,CAAiB,EACxCG,GAAmBN,CAAO,CACrC,EAEMQ,GAAkB,CACpBV,EACAI,EACAC,IACS,CACT,MAAMH,EAAUH,GAAmBC,CAAG,EACtC,GAAI,CAACE,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,OAAAC,GAAaD,EAASE,EAAQC,CAAiB,EACxCG,GAAmBN,CAAO,CACrC,EAEMS,GAAYC,GAAyB,CAEvC,MAAMC,EAAW,iBACXC,EAAaF,EAAQ,MAAMC,CAAQ,GAAK,CAAA,EACxCb,EAAMc,GAAY,OAAS,EAAIA,EAAW,CAAC,EAAI,GAIrD,OADejd,GAAA,EACD,gBAAgBmc,EAAK,eAAe,CACtD,EAEMe,GAA+B,MACjCH,GACuE,CAEvE,MAAM3uF,EADY0uF,GAASC,CAAO,EACX,kBACvB,GAAI,CAAC3uF,EACD,MAAM,IAAI,MAAM,qBAAqB,EAGzCqtF,GAAgBrtF,CAAI,EAGpB,MAAMmuF,EAA6C,CAAA,EACnDlB,GAASjtF,EAAOnK,GAAS,CAUrB,GAAIk3F,GAAiB,SAASl3F,EAAK,OAAO,GAAK,CAACA,EAAK,WAAW,aAAa,MAAM,EAAG,CAClF,IAAIw4F,EAAO,QACX,MAAM3tF,EAAS7K,EAAK,cACpB,GAAI6K,EAAQ,CACR,MAAMquF,EAAe7B,GAAexsF,EAAS7K,GAAkB,CAE3D,MAAMm5F,EADgBn5F,EAAoB,MACV,KAChC,GAAIm5F,EACA,OAAOA,EAEX,MAAMC,EAAYp5F,EAAK,aAAa,MAAM,EAC1C,GAAIo5F,EACA,OAAOA,CAGf,CAAC,EACGF,IACAV,EAAOU,EAEf,CACAl5F,EAAK,aAAa,OAAQw4F,CAAI,CAClC,CAEA,MAAMA,EAAOx4F,EAAK,WAAW,aAAa,MAAM,EAChD,GAAIw4F,GAAQA,EAAK,QAAU,QAAU,CAACA,EAAK,MAAM,WAAW,MAAM,EAAG,CACjE,MAAMa,EAAYvC,GAA0B0B,EAAK,KAAK,EAChDc,EAAmBD,EAAU,aAAa,QAAQ,MAAO,EAAE,EAC3DryF,EAAY,cAAcsyF,CAAgB,GAChDt5F,EAAK,aAAa,OAAQq5F,EAAU,YAAY,EAChDr5F,EAAK,UAAU,IAAIgH,CAAS,EAC5BsxF,EAAOgB,CAAgB,EAAID,CAC/B,CACA,MAAMZ,EAASz4F,EAAK,WAAW,aAAa,QAAQ,EACpD,GAAIy4F,GAAUA,EAAO,QAAU,QAAU,CAACA,EAAO,MAAM,WAAW,MAAM,EAAG,CACvE,MAAMc,EAAczC,GAA0B2B,EAAO,KAAK,EACpDa,EAAmBC,EAAY,aAAa,QAAQ,MAAO,EAAE,EAC7DvyF,EAAY,gBAAgBsyF,CAAgB,GAClDt5F,EAAK,UAAU,IAAIgH,CAAS,EAC5BhH,EAAK,aAAa,SAAUu5F,EAAY,YAAY,EACpDjB,EAAOgB,CAAgB,EAAIC,CAC/B,CACJ,CAAC,EAGD,MAAMC,EADa5c,GAAA,EACW,kBAAkBzyE,CAAI,EAEpD,MAAO,CACH,OAAAmuF,EACA,IAAKkB,CAAA,CAEb,EC9SMC,GAAwB3oD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxB4oD,GAAwB5oD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjB6oD,GAAgB,CAACC,EAA0BC,IAC7C/oD;AAAA,UACA8oD,GAAmBH,IAA0B,EAAE;AAAA,UAC/CI,GAAmBH,IAA0B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAoC3CG,GAAmB,0BAA6B,EAAE;AAAA,cAClDD,GAAmB,0BAA6B,EAAE;AAAA;AAAA;AAAA,MAMpDE,GAAmBhpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiD1BipD,GAAoBjpD;AAAA,MACpBgpD,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhBE,GAAsBlpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBtBmpD,GAAoCnpD;AAAA,MACpC6oD,GAAc,GAAO,EAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3BO,GAAyBppD;AAAA,MACzB6oD,GAAc,GAAO,EAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3BQ,GAAwBrpD;AAAA,MACxB6oD,GAAc,GAAO,EAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpBS,GAAY,MAAOC,EAAqBR,EAA2B,MAC3D,MAAM1X,GAAe,uBAAA,EAAyB,MAA2B,CACtF,MAAOrxC;AAAA,cACD6oD,GAAc,GAAOE,CAAe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAO3C,YAAa,MACb,YAAa,WACb,UAAW,CACP,KAAMQ,CAAA,CACV,CACH,GACe,KAAK,OAGnBC,GAAe,MAAOrjE,IACP,MAAMkrD,GAAe,uBAAA,EAAyB,MAAyC,CACpG,MAAO4X,GACP,YAAa,MACb,UAAW,CACP,IAAA9iE,CAAA,CACJ,CACH,GACe,KAAK,UAGnBsjE,GAAc,MAChB/+F,EACAgN,EACAm1E,EACA6c,EACAC,KAEiB,MAAMtY,GAAe,uBAAA,EAAyB,OAAuC,CAClG,SAAU6X,GACV,YAAa,MACb,YAAa,WACb,UAAW,CACP,KAAAx+F,EACA,KAAAgN,EACA,SAAAm1E,EACA,UAAA6c,EACA,UAAAC,CAAA,CACJ,CACH,GACe,MAAM,YAsB1B,MAAMC,EAAqC,CAA3C,aAAA,CACI,KAAQ,UAAY,IAKpB,KAAQ,qBAAuB,IAC/B,KAAQ,kBAAoB,IAsT5B,KAAA,oBAAsB,MAAOC,GAAkC,CAE3D,MAAM5d,EAAc,MAAM4d,EAAK,YAAA,EACzBC,EAAa,MAAM/U,GAA6B9I,CAAW,EAC3D8d,EAAgB,CAAC3c,EAAiB11E,IAAiB,CACrD,MAAMi1E,EAAS,KAAKS,EAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EACnC59E,EAAkB,CAAA,EACxB,QAAS5H,EAAI,EAAGA,EAAI+kF,EAAO,OAAQ/kF,IAC/B4H,EAAM,KAAKm9E,EAAO,WAAW/kF,CAAC,CAAC,EAEnC,OAAO,IAAI,KAAK,CAAC,IAAI,WAAW4H,CAAK,CAAC,EAAG,CAAE,KAAAkI,EAAM,CACrD,EACA,MAAO,CACH,KAAMmyF,EAAK,KAAK,UAAUA,EAAK,KAAK,YAAY,GAAG,EAAI,CAAC,EACxD,KAAME,EAAcD,EAAW,QAASD,EAAK,IAAI,CAAA,CAEzD,CAAA,CAjUA,MAAM,qBAAqBG,EAAkC,CACzD,GAAI,KAAK,MAAM,IAAIA,CAAQ,EAAG,CAC1B,MAAM9nD,EAAQ,KAAK,MAAM,IAAI8nD,CAAQ,EACrC,GAAI,CAAC9nD,EAAO,MAAM,IAAIG,GAAuB,iCAAiC,EAC9E,OAAOH,CACX,CAKA,MAAM+nD,GAJgB,UACH,MAAMX,GAAU,CAACU,CAAQ,CAAC,GAAG,CAAC,GAGhC,EACjB,YAAK,MAAM,IAAIA,EAAUC,CAAQ,EAC1BA,CACX,CAKA,MAAM,cAAcD,EAAkC,CAKlD,MAAMC,GAJgB,UACH,MAAMX,GAAU,CAACU,CAAQ,CAAC,GAAG,CAAC,GAGhC,EACjB,YAAK,MAAM,IAAIA,EAAUC,CAAQ,EAC1BA,CACX,CAEA,WAAW1gC,EAAiC,CACxC,IAAIh+D,EACJ,GAAI,CACAA,EAAM,IAAI,IAAIg+D,CAAG,EAAE,QACvB,MAAY,CACRh+D,EAAM,MACV,CACA,OAAIA,IAAQ,QAAaA,EAAI,WAAW,GAAG,IACvCA,EAAMA,EAAI,QAAQ,IAAK,EAAE,GAEtBA,GAAK,MAAM,GAAG,EAAE,CAAC,CAC5B,CAKA,WAAW22C,EAAc,CACrB,GAAI,CAACA,EAAM,IAAK,MAAM,IAAIG,GAAuB,mBAAmB,EAChE,KAAK,MAAM,IAAIH,EAAM,GAAG,GAG5B,KAAK,MAAM,IAAIA,EAAM,IAAK,QAAQ,QAAQA,CAAK,CAAC,CACpD,CAKA,cAAcgoD,EAA4B,CACtC,GAAI,CAACA,EAAS,GAAI,MAAM,IAAI7nD,GAAuB,qBAAqB,EACpE,KAAK,cAAc,IAAI6nD,EAAS,EAAE,GAGtC,KAAK,cAAc,IAAIA,EAAS,GAAI,QAAQ,QAAQA,CAAQ,CAAC,CACjE,CAMA,MAAM,6BAA6B9oF,EAAuC,CACtE,GAAI,KAAK,cAAc,IAAIA,CAAE,EACzB,OAAO,KAAK,cAAc,IAAIA,CAAE,EAMpC,MAAM6oF,GAJmB,UACH,MAAMT,GAAa,CAACpoF,CAAE,CAAC,GAAG,CAAC,GAGhC,EACjB,YAAK,cAAc,IAAIA,EAAI6oF,CAAQ,EAC5BA,CACX,CAMA,MAAM,wBACFJ,EACAM,EACAC,EACAV,EACAC,EACc,CAEd,MAAMU,EAAmB,MAAM,KAAK,2BAA2BR,EAAMM,EAAWT,EAAWC,CAAS,EACpG,GAAI,CAACU,EACD,MAAM,IAAI,MAAM,yBAAyB,EAK7C,aAAM,IAAI,QAAe,CAAC/hG,EAASC,IAAW,CAC1C,MAAM26C,EAAM,IAAI,eAChBA,EAAI,KAAK,MAAOmnD,EAAiB,cAAc,UAAW,EAAI,EAC9DnnD,EAAI,iBAAiB,eAAgBmnD,EAAiB,QAAQ,EAC9DnnD,EAAI,iBAAiB,gBAAiB,mCAAmC,EACzEA,EAAI,OAAO,WAAcwsC,GAAU,CAC3BA,EAAM,kBACN0a,EAAY1a,EAAM,OAAS,IAAOA,EAAM,KAAK,CAErD,EACAxsC,EAAI,OAAS,IAAM,CACf,MAAMonD,EAAeD,EAAiB,cAAc,MACpDE,GAAa,IAAIF,EAAiB,cAAc,KAAK,EACrD/hG,EAAQgiG,CAAY,CACxB,EACApnD,EAAI,QAAU36C,EACd,KAAK,sBAAsBshG,EAAMQ,EAAiB,QAAQ,EACrD,KAAMG,GAAkBtnD,EAAI,KAAKsnD,EAAc,IAAI,CAAC,EACpD,MAAMjiG,CAAM,CACrB,CAAC,EACD,KAAK,WAAW8hG,EAAiB,cAAc,KAAK,EAC7CA,EAAiB,cAAc,KAC1C,CAEA,MAAM,YAAYR,EAAgBM,EAAsBT,EAAqBC,EAAqC,CAC9G,OAAO,KAAK,wBAAwBE,EAAMM,EAAW,IAAM,CAAC,EAAGT,EAAWC,CAAS,CACvF,CAEA,MAAM,WAAWE,EAAYO,EAAmD,CAE5E,MAAMD,EADW,KAAK,SAASN,CAAI,EACoBrpD,GAAU,MAAnCA,GAAU,aAClCiqD,EAAW,MAAM,KAAK,oBAAoBZ,CAAI,EACpD,OAAO,MAAM,KAAK,wBAAwBY,EAAUN,EAAWC,EAAY,EAAI,CACnF,CAEA,MAAM,0BAA0BloD,EAA8B,CAC1D,MAAMwoD,EAAcxoD,EAAM,IAC1B,GAAI,KAAK,iBAAiB,IAAIwoD,CAAW,EACrC,OAAO,KAAK,iBAAiB,IAAIA,CAAW,EAEhD,GAAIC,GAA2B,IAAIC,GAA4BF,CAAW,EAAG,CACzE,MAAM14E,EAAU,KAAK,qBACjB24E,GAA2B,IAAIC,GAA4BF,CAAW,CAAA,EAE1E,YAAK,iBAAiB,IAAIA,EAAa14E,CAAO,EACvCA,CACX,CA6BA,MAAMA,GA5Bc,SAA4B,CAC5C,MAAM64E,EAAiB,MAAMxZ,GACxB,uBAAA,EACA,OAAyC,CACtC,SAAU8X,GACV,YAAa,WACb,YAAa,MACb,UAAW,CACP,IAAKuB,CAAA,CACT,CACH,EAGL,GAFA,KAAK,iBAAiB,OAAOA,CAAW,EACxC,QAAQ,IAAIG,CAAc,EACtB,CAACA,EAAe,MAAM,uBAAuB,IAC7C,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAN,GAAa,IAAIM,EAAe,KAAK,qBAAqB,EAC1DF,GAA2B,IACvBC,GACAF,EACAG,EAAe,KAAK,sBAAsB,GAAA,EAE9C,KAAK,MAAM,IACPA,EAAe,KAAK,sBAAsB,IAC1C,QAAQ,QAAQA,EAAe,KAAK,qBAAqB,CAAA,EAEtDA,EAAe,KAAK,qBAC/B,GACgB,EAChB,YAAK,iBAAiB,IAAIH,EAAa14E,CAAO,EACvCA,CACX,CAEA,MAAM,eAAekwB,EAAc4oD,EAAgC,OAA2B,CAC1F,MAAMJ,EAAcxoD,EAAM,IAC1B,GAAI,KAAK,iBAAiB,IAAIwoD,CAAW,EACrC,OAAO,KAAK,iBAAiB,IAAIA,CAAW,EAEhD,GAAIC,GAA2B,IAAII,GAAiCL,CAAW,EAAG,CAC9E,MAAM14E,EAAU,KAAK,qBACjB24E,GAA2B,IAAII,GAAiCL,CAAW,CAAA,EAE/E,YAAK,iBAAiB,IAAIA,EAAa14E,CAAO,EACvCA,CACX,CA6BA,MAAMA,GA5Bc,SAA4B,CAC5C,MAAMg5E,EAAoB,MAAM3Z,GAAe,uBAAA,EAAyB,OAAkC,CACtG,SAAU+X,GACV,YAAa,WACb,YAAa,MACb,UAAW,CACP,IAAKsB,EACL,QAAS,CACL,cAAeI,CAAA,CACnB,CACJ,CACH,EAED,GADA,KAAK,iBAAiB,OAAOJ,CAAW,EACpC,CAACM,EAAkB,MAAM,gBAAgB,IACzC,MAAM,IAAI,MAAM,2BAA2B,EAE/C,OAAAT,GAAa,IAAIS,EAAkB,KAAK,cAAc,EACtDL,GAA2B,IACvBI,GACAL,EACAM,EAAkB,KAAK,eAAe,GAAA,EAE1C,KAAK,MAAM,IACPA,EAAkB,KAAK,eAAe,IACtC,QAAQ,QAAQA,EAAkB,KAAK,cAAc,CAAA,EAElDA,EAAkB,KAAK,cAClC,GACgB,EAChB,YAAK,iBAAiB,IAAIN,EAAa14E,CAAO,EACvCA,CACX,CAEA,MAAM,cACFkwB,EACAvwC,EASc,CACd,MAAM+4F,EAAcxoD,EAAM,IAC1B,GAAI,KAAK,iBAAiB,IAAIwoD,CAAW,EACrC,OAAO,KAAK,iBAAiB,IAAIA,CAAW,EAEhD,GAAIC,GAA2B,IAAIM,GAAkCP,CAAW,EAAG,CAC/E,MAAM14E,EAAU,KAAK,qBACjB24E,GAA2B,IAAIM,GAAkCP,CAAW,CAAA,EAEhF,YAAK,iBAAiB,IAAIA,EAAa14E,CAAO,EACvCA,CACX,CA6BA,MAAMA,GA5Bc,SAA4B,CAC5C,MAAMk5E,EAAkB,MAAM7Z,GACzB,uBAAA,EACA,OAAsC,CACnC,SAAUgY,GACV,YAAa,WACb,YAAa,MACb,UAAW,CACP,IAAKqB,EACL,QAAS/4F,GAAW,CAAA,CAAC,CACzB,CACH,EAEL,GADA,KAAK,iBAAiB,OAAO+4F,CAAW,EACpC,CAACQ,EAAgB,MAAM,oBAAoB,IAC3C,MAAM,IAAI,MAAM,iCAAiC,EAErD,OAAAX,GAAa,IAAIW,EAAgB,KAAK,kBAAkB,EACxDP,GAA2B,IACvBM,GACAP,EACAQ,EAAgB,KAAK,mBAAmB,GAAA,EAE5C,KAAK,MAAM,IACPA,EAAgB,KAAK,mBAAmB,IACxC,QAAQ,QAAQA,EAAgB,KAAK,kBAAkB,CAAA,EAEpDA,EAAgB,KAAK,kBAChC,GACgB,EAChB,YAAK,iBAAiB,IAAIR,EAAa14E,CAAO,EACvCA,CACX,CAEA,qBAAqBg4E,EAAkB,CACnCO,GAAa,OAAOP,CAAQ,EAC5BW,GAA2B,OAAOC,GAA4BZ,CAAQ,EACtEW,GAA2B,OAAOI,GAAiCf,CAAQ,EAC3EW,GAA2B,OAAOM,GAAkCjB,CAAQ,EAC5EW,GAA2B,wBAAwBC,GAA4BZ,CAAQ,EACvFW,GAA2B,wBAAwBI,GAAiCf,CAAQ,EAC5FW,GAA2B,wBAAwBM,GAAkCjB,CAAQ,CACjG,CAEA,oBAAuC,CACnC,OAAOO,GAAa,KAAA,CACxB,CAEA,+BAA+BxlF,EAAsB,CACjDwlF,GAAa,YAAYxlF,CAAQ,CACrC,CAEA,iCAAiCA,EAAsB,CACnDwlF,GAAa,eAAexlF,CAAQ,CACxC,CAuBQ,SAAS8kF,EAAqB,CAClC,MAAO,EACHA,EAAK,OAAS,iBACdA,EAAK,OAAS,mBACdA,EAAK,OAAS,yBAEtB,CAEA,MAAc,sBAAsBA,EAAgBnyF,EAAc,CAC9D,GAAIA,IAAS,gBAAiB,CAC1B,MAAM40C,EAAO,MAAMu9C,EAAK,KAAK,KAAA,EAGvBxwF,EAFS,IAAI,OAAO,UAAA,EACJ,gBAAgBizC,EAAM,eAAe,EACvC,gBACpB,GAAI,CAACjzC,EAAM,MAAM,IAAIipC,GAAW,qBAAqB,EACrD0kD,GAAsB3tF,CAAI,EAE1B,MAAMqvF,EADa5c,GAAA,EACW,kBAAkBzyE,CAAI,EACpD,MAAO,CACH,KAAMwwF,EAAK,KACX,KAAM,IAAI,KAAK,CAACnB,CAAU,EAAG,CAAE,KAAM,eAAA,CAAiB,CAAA,CAE9D,CACA,OAAOmB,CACX,CAOA,MAAc,2BACVA,EACAM,EACAT,EACAC,EACsC,CAGtC,MAAM9c,EAAWgd,EAAK,KAAK,KAAOA,EAAK,KAAK,KAAO,KAAK,UAAUA,EAAK,IAAI,EACrEsB,EAAgB,MAAM1B,GAAYI,EAAK,KAAMM,EAAWtd,EAAU6c,EAAWC,CAAS,EAC5F,GAAKwB,EAIL,MAAO,CACH,cAAAA,EACA,SAAAte,CAAA,CAER,CAEQ,UAAUue,EAAqB,CACnC,MAAMC,EAAYD,EAAI,MAAM,GAAG,EAAE,IAAA,EACjC,OAAQC,EAAA,CACJ,IAAK,MACD,MAAO,oBACX,IAAK,MACD,MAAO,WACX,IAAK,MACD,MAAO,mBACX,QACI,MAAM,IAAIhpD,GAAuB,wBAA0BgpD,CAAS,CAAA,CAEhF,CACJ,CAOA,MAAMC,GAAwB,mBAIxBC,GAAN,MAAMA,EAAa,CAOf,OAAO,IAAIrpD,EAAc,CACrB,GAAI,CAACA,EAAM,SAAU,CACjB,QAAQ,MAAM,mDAAmD,EACjE,MACJ,CAEA,MAAMspD,MAA6B,IACnCA,EAAuB,IAAItpD,EAAM,KAAO,GAAIA,EAAM,QAAQ,EAE1D,MAAMupD,EAAsB3oD,GAAmB,OAAOwoD,EAAqB,EACvEG,GACAA,EAAoB,QAAQ,CAACpjG,EAAOkD,IAAQ,CACxCigG,EAAuB,IAAIjgG,EAAKlD,CAAK,CACzC,CAAC,EAGLy6C,GAAmB,OAAOwoD,GAAuBE,CAAsB,EACvED,GAAa,iBAAA,CACjB,CAKA,OAAO,OAAOvB,EAAkB,CAC5B,MAAM0B,EAAoB5oD,GAAmB,OAAOwoD,EAAqB,EACzE,GAAI,CAACI,EAAmB,OACxB,MAAMC,EAAgB,MAAM,KAAKD,EAAkB,QAAA,CAAS,EAAE,KAAMvjF,GAAMA,EAAE,CAAC,IAAM6hF,CAAQ,EACtF2B,IACLD,EAAkB,OAAOC,EAAc,CAAC,CAAC,EACzC7oD,GAAmB,OAAOwoD,GAAuBI,CAAiB,EAClEH,GAAa,iBAAA,EACjB,CAIA,OAAO,MAAyB,CAC5B,MAAMG,EAAoB5oD,GAAmB,OAAOwoD,EAAqB,EACzE,OAAKI,EACE,MAAM,KAAKA,EAAkB,SAAS,EAAE,IAAKvjF,IAAO,CAAE,SAAUA,EAAE,CAAC,EAAG,IAAKA,EAAE,CAAC,GAAI,EAD1D,CAAA,CAEnC,CAIA,OAAO,YAAYpD,EAAsB,CACrCwmF,GAAa,UAAU,KAAKxmF,CAAQ,CACxC,CAIA,OAAO,eAAeA,EAAsB,CACxCwmF,GAAa,UAAYA,GAAa,UAAU,OAAQ/wD,GAAOA,IAAOz1B,CAAQ,CAClF,CAEA,OAAe,kBAAmB,CAC9BwmF,GAAa,UAAU,QAAS/wD,GAAOA,GAAI,CAC/C,CACJ,EA9DI+wD,GAAe,UAA4B,CAAA,EAD/C,IAAMhB,GAANgB,GAiEA,MAAMX,GAA6B,uBAC7BG,GAAkC,4BAClCE,GAAmC,4BAOzC,MAAMN,EAA2B,CAC7B,OAAO,IAAIiB,EAA+BlB,EAA8B,CACpE,OAAOC,GAA2B,OAAOiB,CAAM,EAAE,IAAIlB,CAAW,CACpE,CACA,OAAO,IAAIkB,EAA+BlB,EAAyC,CAC/E,OAAOC,GAA2B,OAAOiB,CAAM,EAAE,IAAIlB,CAAW,CACpE,CACA,OAAO,KAAKkB,EAAyD,CACjE,OAAOjB,GAA2B,OAAOiB,CAAM,EAAE,KAAA,CACrD,CACA,OAAO,OAAOA,EAAyD,CACnE,OAAOjB,GAA2B,OAAOiB,CAAM,EAAE,OAAA,CACrD,CACA,OAAO,IAAIA,EAA+BlB,EAAqBmB,EAAwB,CACnF,MAAMxrF,EAAQsqF,GAA2B,OAAOiB,CAAM,EACtDvrF,EAAM,IAAIqqF,EAAamB,CAAc,EACrClB,GAA2B,OAAOiB,EAAQvrF,CAAK,CACnD,CACA,OAAO,OAAOurF,EAA+BlB,EAAqB,CAC9D,MAAMrqF,EAAQsqF,GAA2B,OAAOiB,CAAM,EACtDvrF,EAAM,OAAOqqF,CAAW,EACxBC,GAA2B,OAAOiB,EAAQvrF,CAAK,CACnD,CACA,OAAO,wBAAwBurF,EAA+BC,EAAwB,CAClF,MAAMxrF,EAAQsqF,GAA2B,OAAOiB,CAAM,EAChDlB,EAAc,MAAM,KAAKrqF,EAAM,MAAM,EAAE,KAAM9U,GAAQ8U,EAAM,IAAI9U,CAAG,IAAMsgG,CAAc,EACxFnB,IACArqF,EAAM,OAAOqqF,CAAW,EACxBC,GAA2B,OAAOiB,EAAQvrF,CAAK,EAEvD,CAEA,OAAe,OAAOurF,EAAoD,CACtE,OAAO9oD,GAAmB,OAAO8oD,CAAM,OAAS,GACpD,CACA,OAAe,OAAOA,EAA+B9tF,EAA0B,CAC3EglC,GAAmB,OAAO8oD,EAAQ9tF,CAAG,CACzC,CACJ,CAEO,MAAMguF,GAAe,IAAIlC,GCxwBhC,MAAMmC,EAAa,CAAnB,aAAA,CACI,KAAQ,MAAsC,CAAA,EAC9C,KAAQ,SAAW,EAAA,CAKZ,IAAIxgG,EAAuC,CAC9C,GAAI,KAAK,SAAU,OACnB,MAAMygG,EAAY,KAAK,UAAUzgG,CAAG,EACpC,OAAO,KAAK,MAAMygG,CAAS,CAC/B,CAKO,IAAIzgG,EAAaymB,EAAqC,CACzD,GAAI,KAAK,SAAU,OAAOA,EAC1B,MAAMg6E,EAAY,KAAK,UAAUzgG,CAAG,EACpC,YAAK,MAAMygG,CAAS,EAAIh6E,EACjBA,CACX,CAOO,QAAQ3pB,EAAsB,CACjC,KAAK,SAAWA,CACpB,CACJ,CAEA,MAAM4jG,GAAe,IAAIF,GCxBnBG,GAAyB,CAC3BhqD,EACAiqD,EAAqB,IACrBzkD,EACA0kD,IACqB,CACrB,MAAMrsE,EAAO,OAAOmiB,GAAU,SAAWA,EAAQA,EAAM,SACvD,GAAI,CAACniB,EACD,OAEJ,MAAMlkB,EAAYkkB,EAAK,SAAS,GAAG,EAAI,IAAM,IACvComE,EAAS,CAAC,KAAKgG,CAAU,GAAI,KAAKA,CAAU,EAAE,EACpD,OAAIC,IAAY,QACZjG,EAAO,KAAK,KAAKiG,CAAO,EAAE,EAE1B1kD,GACAy+C,EAAO,KAAK,UAAUz+C,CAAM,EAAE,EAE3B,GAAG3nB,CAAI,GAAGlkB,CAAS,GAAGsqF,EAAO,KAAK,GAAG,CAAC,EACjD,ECxBakG,GAAwBrsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxBssD,GAAiBtsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCxBusD,GAAevsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUfwsD,GAAqB,MAAOrmE,GAA6C,CAC3E,MAAMlQ,EAAW,MAAMo7D,GAAe,uBAAA,EAAyB,MAAqC,CAChG,MAAOrxC;AAAA,cACD6oD,GAAc,GAAO,EAAK,CAAC;AAAA,cAC3BG,EAAgB;AAAA,cAChBsD,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOpB,YAAa,MACb,UAAW,CACP,IAAAnmE,CAAA,CACJ,CACH,EACD,OAAAlQ,EAAS,KAAK,QAAQ,QAASw2E,GAAW,CACtCA,EAAO,cAAgBX,GAAa,WAAWW,EAAO,YAAY,EAClEA,EAAO,UAAU,QAASzqD,GAAY,CAClCA,EAAQ,OAAS8pD,GAAa,WAAW9pD,EAAQ,KAAK,EACtDA,EAAQ,WAAa8pD,GAAa,WAAW9pD,EAAQ,SAAS,EAC9DA,EAAQ,UAAY8pD,GAAa,cAAc9pD,EAAQ,QAAQ,CACnE,CAAC,CACL,CAAC,EACM/rB,EAAS,KAAK,OACzB,EAEMy2E,GAAwB,MAC1BtrF,EACA4Q,KAEgB,MAAMA,GACP,KAAMy6E,GAAWA,EAAO,KAAOrrF,CAAE,EAG9CurF,GAAa,MAAOxmE,GAA6C,CACnE,MAAMymE,EAAW,IAAI,IAAIzmE,EAAI,IAAK/kB,GAAO,CAACA,EAAI6qF,GAAa,IAAI,CAAE,GAAA7qF,CAAA,CAAI,CAAC,CAAC,CAAC,EAClEyrF,EAAc1mE,EAAI,OAAQ/kB,GAAOwrF,EAAS,IAAIxrF,CAAE,IAAM,MAAS,EACrE,GAAIyrF,EAAY,OAAS,EAAG,CACxB,MAAMC,EAAeN,GAAmBK,CAAW,EACnDA,EAAY,QAASzrF,GACjBwrF,EAAS,IAAIxrF,EAAI6qF,GAAa,IAAI,CAAE,GAAA7qF,CAAA,EAAMsrF,GAAsBtrF,EAAI0rF,CAAY,CAAC,CAAC,CAAA,CAE1F,CAEA,OADgB,MAAM,QAAQ,IAAI3mE,EAAI,IAAK/kB,GAAOwrF,EAAS,IAAIxrF,CAAE,CAAE,CAAC,GACrD,OAAQqrF,GAAqCA,IAAW,MAAS,CACpF,EAEMM,GAAoB7qD,GAAwD,CAC9E,GAAI,GAACA,GAAS,CAACA,EAAM,UACrB,OAAOgqD,GAAuBhqD,EAAO,IAAK,MAAM,CACpD,EAEM8qD,GAAqB,CACvBC,EACAR,EACAS,IAC8B,CAC9B,GAAID,EAAS,SAAW,EACpB,OAAOA,EAAS,CAAC,EAErB,GAAIC,EAA0B,CAC1B,MAAM9jG,EAAI6jG,EAAS,KAAM7jG,GAAMA,EAAE,KAAO8jG,CAAwB,EAChE,GAAI9jG,EACA,OAAOA,CAEf,CACA,GAAIqjG,EAAO,iBAAmB,OAG9B,OAAOQ,EAAS,KAAMjrD,GAAYA,EAAQ,KAAOyqD,EAAO,gBAAgB,EAAE,CAC9E,EAEA,MAAMU,EAAc,CAApB,aAAA,CAiEI,KAAA,kBAAoB,MAChBV,EACAS,IACuC,CAEvC,MAAME,EAAmBX,GAAQ,SACjC,GAAIW,EACA,OAAOJ,GAAmBI,EAAkBX,EAAQS,CAAwB,EAIhF,MAAMD,GADe,MAAM,KAAK,UAAUR,EAAO,EAAG,IACrB,SAC/B,GAAKQ,EAGL,OAAOD,GAAmBC,EAAUR,EAAQS,CAAwB,CACxE,EAEA,KAAA,iBAAmB,MACfD,GAC8D,CAC9D,MAAMI,EAAWJ,GAAU,IAAK7jG,GAAMA,EAAE,OAAO,GAAG,GAAK,CAAA,EACjDkkG,EAAcL,GAAU,IAAK7jG,GAAMA,EAAE,UAAU,EAAE,GAAK,CAAA,EACtD+8B,EAAM,CAAC,GAAGknE,EAAU,GAAGC,CAAW,EAAE,OAAQlsF,GAAO,CAAC,CAACA,CAAE,EAC7D,OAAI+kB,EAAI,SAAW,EACR,CAAA,GAEM,MAAMkrD,GAClB,uBAAA,EACA,MAAwE,CACrE,MAAOkb,GACP,YAAa,MACb,UAAW,CACP,IAAApmE,CAAA,CACJ,CACH,GACW,KAAK,QACzB,CAAA,CAjGA,MAAM,UAAU/kB,EAAiD,CAC7D,OAAKA,GAGW,MAAMurF,GAAW,CAACvrF,CAAE,CAAC,GACtB,CAAC,EAHZ,MAIR,CAEA,MAAM,WAAW+kB,EAA0C,CACvD,OAAOwmE,GAAWxmE,CAAG,CACzB,CAEA,MAAM,iBAAiBonE,EAAkE,CACrF,OAAO,KAAK,iBAAiBA,EAAS,MAAM,CAChD,CAOA,MAAM,iBAAiBd,EAAyE,CAC5F,OAAIA,GAAQ,SACDA,EAENA,GAAQ,IAGG,MAAME,GAAW,CAACF,EAAO,EAAE,CAAC,GAC7B,CAAC,EAHZ,MAIR,CAWA,MAAM,4BAA4BzqD,EAA2C,CACzE,MAAMwrD,EAAeT,GAAiB/qD,EAAQ,SAAS,GAAK+qD,GAAiB/qD,EAAQ,KAAK,EAC1F,OAAIwrD,IAIAxrD,EAAQ,SACDA,EAAQ,SAAS,GAGrB,GACX,CA8CJ,CAEA,MAAMyrD,GAAgB,IAAIN,GCjPbO,GAA4B1tD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsB5B2tD,GAA4B3tD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB5B4tD,GAAoB5tD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBpB6tD,GAAkC7tD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BlC8tD,GAAiC9tD;AAAA,MACxC4tD,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BVG,GAAsB/tD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtBguD,GAAiChuD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWjCiuD,GAA+BjuD;AAAA,MACtC2tD,EAAyB;AAAA,MACzBE,EAA+B;AAAA,MAC/BH,EAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuFlBQ,GAAwBluD;AAAA,MAC/B+tD,EAAmB;AAAA,MACnBC,EAA8B;AAAA,MAC9BJ,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmDVO,GAAsCnuD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQtCouD,GAAiCpuD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjCquD,GAAiCruD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjCsuD,GAAkCtuD;AAAA,MACzC6tD,EAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxBU,GAAsBvuD;AAAA,MAC7B6tD,EAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4DxBW,GAAkCxuD;AAAA,MACzCguD,EAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYvBS,GAAwBzuD;AAAA;AAAA;AAAA;AAAA,EAM/B0uD,GAAiCC,GAAuC3uD;AAAA,MACxE2tD,EAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cA0DfgB,EACM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAmBA,EACV;AAAA;AAAA;AAAA,EAKCC,GAA+BC,GAAkC7uD;AAAA,MACxE0uD,GAA8BG,CAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3CC,GAA6CD,GAAkC7uD;AAAA,MACtF0uD,GAA8BG,CAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW3CE,GAAkC/uD;AAAA,MACzC+tD,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaZiB,GAAoChvD;AAAA;AAAA;AAAA;AAAA,EAMpCivD,GAAiBjvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBjBkvD,GAA0BlvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa1BmvD,GAAyCnvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsFzCovD,GAAyBpvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASzBqvD,GAAqBC,GACvBtvD;AAAA,UACD6oD,GAAcyG,EAAsB,EAAK,CAAC;AAAA,UAC1CjD,EAAqB;AAAA,UACrB4C,EAAc;AAAA,UACdC,EAAuB;AAAA,UACvBC,EAAsC;AAAA,UACtCC,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACrwCC,GAAW,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI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AO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,MAAQ,IAAK,KAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,IAAM,EAC3B,CAAC,MAAO,KAAQ,IAAK,KAAM,EAC3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K,KAAK,OAAW,CAAC,EACtBA,GAAK,KAAK,OAAW,CAAC,EACtBE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,GAAG,KAAK,OAAW,CAAC,EACpBA,GAAG,KAAK,OAAW,CAAC,EACpB,OACAC,GAAG,KAAK,OAAW,CAAC,EACpBA,GAAG,KAAK,OAAW,CAAC,EACpBG,GACA,OACAC,GACA,OACA,OACAC,GACAG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAAU,KAAK,OAAW,CAAC,EAC3BI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvB,OACA,OACA,OACA,OACAC,GACAf,GAAU,KAAK,OAAW,CAAC,EAC3BA,GAAU,KAAK,OAAW,CAAC,EAC3BgB,GAAU,KAAK,OAAW,CAAC,EAC3BA,GAAU,KAAK,OAAW,CAAC,EAC3BA,GAAU,KAAK,OAAW,CAAC,EAC3BC,GACAC,GACA,OACA,OACAC,GACA,OACAC,GACAC,GACAlF,GACAA,GACA,OACA,OACA,OACA,OACA,OACAmF,GACAC,GAAO,KAAK,OAAW,CAAC,EACxBA,GAAO,KAAK,OAAW,CAAC,EACxBC,GACA,OACAC,GACAC,GACAC,GACAC,GACAC,GACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACAC,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBC,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBA,GAAM,KAAK,OAAW,CAAC,EACvBC,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,EACvCA,GAAU,KAAK,OAAW,EAAG,EAAG,EAAG,EAAG,CAAC,E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,GAAI,YAAa,GAAI,OAAQ,GAAI,OAAQ,GAAI,KAAK,EACziB,aAAc,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EA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E,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,GAAK,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,GAAK,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,EAAG,GAAI,CAAC,EAAG,CAAC,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAM,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,GAAK,CAAE,GAAI,IAAK,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,GAAK,CAAE,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,EAAE,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,EAAG,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,GAAG,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,GAAK,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,GAAG,EAAG,GAAI,CAAC,EAAG,GAAG,CAAC,EAAI,CAAE,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAAG,GAAI,CAAC,EAAG,EAAE,EAA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,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAO,EAAE,EACpB,CAAW,KAAO,CAAC,EACnB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,KAAQ,EAAE,EACrB,CAAW,KAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAQ,EAAE,EACrB,CAAW,MAAQ,CAAC,EACpB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,KAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,MAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,EAAE,EACtB,CAAW,MAAS,CAAC,EACrB,CAAW,OAAS,CAAC,EACrB,CAAW,OAAS,CA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KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,uBACZ,UAAa,CACX,UACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,oBACZ,UAAa,CACX,YACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,mBACZ,UAAa,CACX,MACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,aACZ,UAAa,CACX,MACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,oBACZ,UAAa,CACX,YACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,eACZ,UAAa,CACX,SACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,iBACZ,UAAa,CACX,UACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,eACZ,UAAa,CACX,UACA,sBACA,WACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,iBACZ,UAAa,CACX,0BACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,iBACZ,UAAa,CACX,SACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,iBACZ,UAAa,CACX,OACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,QACZ,UAAa,CACX,SACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,iBACZ,UAAa,CACX,UACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,OACZ,UAAa,CACX,gBACA,UACA,UACA,UACA,UACA,SACA,UACA,iBACA,UACA,SACA,gBACA,oCACA,UACA,SACA,aACA,iBACA,UACA,QACA,SACA,YACA,aACA,QACA,aACA,UACA,SACA,aACA,oBACA,WACA,UACA,mBACA,6BACA,4BACA,aACA,WACA,WACA,OACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,OAAU,EACV,SAAY,cACZ,UAAa,CACX,MACN,GAEE,CACE,KAAQ,MACR,OAAU,MACV,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,120,121,123,124,125,126,127,128,129,130,132,133,134,135,138,140,141,142,150,151,152,153,154,155,158,159,160,161,162,169,170,171,172,173,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,222,223,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,264,265,266,279,280,281,282,283,284,285,286,308,310,313,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,534,535,536,537,538,539]}