-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsw.js.map
1 lines (1 loc) · 174 KB
/
sw.js.map
1
{"version":3,"file":"sw.js","sources":["node_modules/workbox-core/_version.js","node_modules/workbox-core/_private/logger.js","node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-routing/_version.js","node_modules/workbox-routing/utils/constants.js","node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-routing/Route.js","node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-routing/Router.js","node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-routing/registerRoute.js","node_modules/workbox-strategies/_version.js","node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-core/_private/timeout.js","node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-strategies/Strategy.js","node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-precaching/_version.js","node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-core/copyResponse.js","node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-precaching/precacheAndRoute.js","../../../../../tmp/5ee8f557324208cc4f302f33ea408371/sw.js","node_modules/workbox-precaching/precache.js","node_modules/workbox-precaching/addRoute.js","node_modules/workbox-strategies/NetworkFirst.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.4.1'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in self)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.4.1'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array<string>}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof module:workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {module:workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {module:workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * [Route]{@link module:workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}\n *\n * @memberof module:workbox-routing\n * @extends module:workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * [handler's]{@link module:workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a FetchEvent through one or more\n * [Routes]{@link module:workbox-routing.Route} responding with a Request if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof module:workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map<string, Array<module:workbox-routing.Route>>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array<Promise<Response> | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise<Response>|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {module:workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {module:workbox-routing.Route} The generated `Route`(Useful for\n * unregistering).\n *\n * @memberof module:workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.4.1'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array<string>} ignoreParams\n * @return {Promise<Response|undefined>}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * [handle()]{@link module:workbox-strategies.Strategy~handle} or\n * [handleAll()]{@link module:workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof module:workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {module:workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * [match callback]{@link module:workbox-routing~matchCallback},\n * (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * [match callback]{@link module:workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise<Response>}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise<Response>}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise<Response|undefined>} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise<boolean>} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise<Request>}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * [`iterateCallbacks()`]{@link module:workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array<Function>}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * [`doneWaiting()`]{@link module:workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * [`waitUntil()`]{@link module:workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise<Response|undefined>}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof module:workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof module:workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array<Object>}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * [route]{@link module:workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to [`handle()`]{@link module:workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of [response, done] promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array<Promise>} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the [`handler`]{@link module:workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {module:workbox-strategies.StrategyHandler} handler\n * @return {Promise<Response>}\n *\n * @memberof module:workbox-strategies.Strategy\n */\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.4.1'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof module:workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A [Strategy]{@link module:workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * [PrecacheController]{@link module:workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise<Response>}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n response = await handler.fetch(new Request(request, {\n integrity: integrityInRequest || integrityInManifest,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n if (integrityInManifest && noIntegrityConflict) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof module:workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {module:workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array<module:workbox-precaching.PrecacheController.PrecacheEntry|string>} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise<module:workbox-precaching.InstallResult>}\n */\n install(event) {\n // waitUntil returns Promise<any>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise<module:workbox-precaching.CleanupResult>}\n */\n activate(event) {\n // waitUntil returns Promise<any>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map<string, string>} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array<string>} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of [Route]{@link module:workbox-routing.Route} that takes a\n * [PrecacheController]{@link module:workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof module:workbox-precaching\n * @extends module:workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {module:workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array<RegExp>} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * [precache()]{@link module:workbox-precaching.precache} and\n * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call.\n *\n * @param {Array<Object|string>} entries Array of entries to precache.\n * @param {Object} [options] See\n * [PrecacheRoute options]{@link module:workbox-precaching.PrecacheRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","import {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/open-scd/open-scd/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/home/runner/work/open-scd/open-scd/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/open-scd/open-scd/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\n\n\n\nself.skipWaiting();\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"public/ace/ext-searchbox.js\",\n \"revision\": \"c3ad58df7587107f71fc1d511624250d\"\n },\n {\n \"url\": \"public/ace/mode-xml.js\",\n \"revision\": \"9785371a49d2674f50bc4884eef35301\"\n },\n {\n \"url\": \"public/ace/theme-solarized_dark.js\",\n \"revision\": \"06f0522377bc0d70432b087bd37ffdf6\"\n },\n {\n \"url\": \"public/ace/theme-solarized_light.js\",\n \"revision\": \"e5f391ed15940217eea430074be6f6e5\"\n },\n {\n \"url\": \"public/ace/worker-xml.js\",\n \"revision\": \"1028c8cbfbf27b3242f66ea35531eaa4\"\n },\n {\n \"url\": \"public/apple-touch-icon.png\",\n \"revision\": \"62e7c75a8b21624dca15bd0bef539438\"\n },\n {\n \"url\": \"public/css/normalize.css\",\n \"revision\": \"112272e51c80ffe5bd01becd2ce7d656\"\n },\n {\n \"url\": \"public/favicon-16x16.png\",\n \"revision\": \"275aa2d0c672623cc28f0572348befe7\"\n },\n {\n \"url\": \"public/favicon-32x32.png\",\n \"revision\": \"2ee56f4805a985f34bd914dad9a5af78\"\n },\n {\n \"url\": \"public/google/fonts/roboto-mono-v13.css\",\n \"revision\": \"e1eb94539e43886f10f2776d68363800\"\n },\n {\n \"url\": \"public/google/fonts/roboto-v27.css\",\n \"revision\": \"e2632eed0f396ae44ab740aecf61194e\"\n },\n {\n \"url\": \"public/google/icons/material-icons-outlined.css\",\n \"revision\": \"a52bef2eb1033e6ac2171ef197b28b2c\"\n },\n {\n \"url\": \"public/icon-192x192.png\",\n \"revision\": \"31ae08296b6be35de83931d8e1cf966b\"\n },\n {\n \"url\": \"public/icon-512x512.png\",\n \"revision\": \"1e7723b8736961b09acce6ea63178a40\"\n },\n {\n \"url\": \"public/icon.svg\",\n \"revision\": \"26984e5d2724d581bc7fb39c3f7cb389\"\n },\n {\n \"url\": \"public/js/plugins.js\",\n \"revision\": \"3abaf79edcdcd830026b4451fcb9451c\"\n },\n {\n \"url\": \"public/js/worker.js\",\n \"revision\": \"a77ab898eac9d3acc3841252aefe5f36\"\n },\n {\n \"url\": \"public/js/xmlvalidate.js\",\n \"revision\": \"13a15ca3eb50636fb4971e1ea7d664e8\"\n },\n {\n \"url\": \"public/js/xmlvalidate.wasm\",\n \"revision\": \"622a405972a204ca97e7e994a0e8244b\"\n },\n {\n \"url\": \"public/maskable_icon.png\",\n \"revision\": \"dcf4d1e9a7c6d791c83345eadaa8251d\"\n },\n {\n \"url\": \"public/md/_Sidebar.md\",\n \"revision\": \"caea034073501b949839092cae363e73\"\n },\n {\n \"url\": \"public/md/Add-DAType-from-templates.md\",\n \"revision\": \"d269e99b724a119f16991e06a6307a94\"\n },\n {\n \"url\": \"public/md/Add-DOType-from-templates.md\",\n \"revision\": \"ef32a3099889efadea46ae664877d23d\"\n },\n {\n \"url\": \"public/md/Add-EnumType-from-templates.md\",\n \"revision\": \"363aee1414bd70cd0aef0e8b06ea93df\"\n },\n {\n \"url\": \"public/md/Add-LNodeType-from-templates.md\",\n \"revision\": \"7c40c5b834208a7d95466102517ee465\"\n },\n {\n \"url\": \"public/md/All-template-editor-wizards.md\",\n \"revision\": \"8080c845ea32b97b5d8ea6039fc3a916\"\n },\n {\n \"url\": \"public/md/ClientLN.md\",\n \"revision\": \"5ac0534689609a228d844d8067b23626\"\n },\n {\n \"url\": \"public/md/Communication.md\",\n \"revision\": \"42d76b0b8c94c4f4d9cc25e0fd1ce012\"\n },\n {\n \"url\": \"public/md/Data-attribute-type-child-BDA.md\",\n \"revision\": \"e3d6286a137ddc094bcad5381a3356c5\"\n },\n {\n \"url\": \"public/md/Data-attribute-type-DAType.md\",\n \"revision\": \"6960ca29cfda78156586ff270e2edfcd\"\n },\n {\n \"url\": \"public/md/Data-object-type-child-DA.md\",\n \"revision\": \"e0cfe1ac920248e123430953aae4f4eb\"\n },\n {\n \"url\": \"public/md/Data-object-type-child-SDO.md\",\n \"revision\": \"baf4858f4d6d7bcd6808142e84bd7e0c\"\n },\n {\n \"url\": \"public/md/Data-object-type-DOType.md\",\n \"revision\": \"a0b985cdacae0708072317cdc1cc2648\"\n },\n {\n \"url\": \"public/md/DataTypeTemplates.md\",\n \"revision\": \"761d02523a7fa929b1e96d05e131bd25\"\n },\n {\n \"url\": \"public/md/Enumeration-EnumType.md\",\n \"revision\": \"3e5035ba716e5f2f31dbe5cf04095452\"\n },\n {\n \"url\": \"public/md/Enumeration-EnumVal.md\",\n \"revision\": \"40b2caf67c9d1b80af63a942c6f8da16\"\n },\n {\n \"url\": \"public/md/Global-SCL-manipulation.md\",\n \"revision\": \"9d5bf643ac42fabbd28a0d064bcb78ee\"\n },\n {\n \"url\": \"public/md/Guess-substation-structure.md\",\n \"revision\": \"36e07421b0daefab658fada7f5f23141\"\n },\n {\n \"url\": \"public/md/Home.md\",\n \"revision\": \"2545ec536d197b53d4e7070d5d1251b9\"\n },\n {\n \"url\": \"public/md/IED.md\",\n \"revision\": \"12aa231a7513739cc640abac5ac1b854\"\n },\n {\n \"url\": \"public/md/Import-IEDs.md\",\n \"revision\": \"51abf1b529a2c81b718c4aadf7496a26\"\n },\n {\n \"url\": \"public/md/Install-OpenSCD.md\",\n \"revision\": \"cc52cee3558f7f2cd522b213187b5d18\"\n },\n {\n \"url\": \"public/md/Logical-node-type-child-DO.md\",\n \"revision\": \"d6848ee5ff6125180a6e859e854683c8\"\n },\n {\n \"url\": \"public/md/Logical-node-type-LNodeType.md\",\n \"revision\": \"3b3c724128fd1eb2aa6a3ae14b89c737\"\n },\n {\n \"url\": \"public/md/Merge-functionality.md\",\n \"revision\": \"d401661d4f06c332f69e2a1b78c23858\"\n },\n {\n \"url\": \"public/md/Project-workflow.md\",\n \"revision\": \"ff1a6b4d2a408051fa327a9c0416fbac\"\n },\n {\n \"url\": \"public/md/Save-project.md\",\n \"revision\": \"c64ca60b5ce8210aee6e03b6579f9a88\"\n },\n {\n \"url\": \"public/md/Start-from-scratch.md\",\n \"revision\": \"4cfd27c52c2ef6472d144a239793b8c6\"\n },\n {\n \"url\": \"public/md/Start-from-template.md\",\n \"revision\": \"cfa6e1f1cec2bcef91e0daa7ca10cc5f\"\n },\n {\n \"url\": \"public/md/Substation.md\",\n \"revision\": \"c23fb88fa5932eaccafab296231fdbb0\"\n },\n {\n \"url\": \"public/md/Update-subscriber-info.md\",\n \"revision\": \"0da76ddfe10633b73f1e475129c50e27\"\n },\n {\n \"url\": \"public/md/Validate-schema.md\",\n \"revision\": \"456183a336d59cca8c587f04a06bfc1e\"\n },\n {\n \"url\": \"public/md/Validate-template.md\",\n \"revision\": \"7e7d66eeb83d4f92ea4769e5b7a56119\"\n },\n {\n \"url\": \"public/md/Validators.md\",\n \"revision\": \"ff12a7d95e29f2db155249acd5f35861\"\n },\n {\n \"url\": \"public/md/XML-code-editor.md\",\n \"revision\": \"fd7447cc840b98e0ed9c9f06d4c8cd44\"\n },\n {\n \"url\": \"public/monochrome_icon.png\",\n \"revision\": \"329ec2d6785a691c932962b40c48f19f\"\n },\n {\n \"url\": \"public/mstile-144x144.png\",\n \"revision\": \"e65bc3ab3bcbf366bfb1a8aea688ba45\"\n },\n {\n \"url\": \"public/mstile-150x150.png\",\n \"revision\": \"a3b54491a78398fdd16d9d650bcee21a\"\n },\n {\n \"url\": \"public/mstile-310x150.png\",\n \"revision\": \"dbab2415b660994355da616a7b05f56e\"\n },\n {\n \"url\": \"public/mstile-310x310.png\",\n \"revision\": \"08f78b8fb9c4618eeb87dc76254dee39\"\n },\n {\n \"url\": \"public/mstile-70x70.png\",\n \"revision\": \"2707a4bc27e42e15c0bf88302bcab503\"\n },\n {\n \"url\": \"src/action-icon.js\",\n \"revision\": \"2c85476f6bf1664a54911cde6bc1297e\"\n },\n {\n \"url\": \"src/action-pane.js\",\n \"revision\": \"8eddb9495db5d5d10ecccfde46421260\"\n },\n {\n \"url\": \"src/Editing.js\",\n \"revision\": \"792376f0240e1636a6db3943334d9dc3\"\n },\n {\n \"url\": \"src/editors/Cleanup.js\",\n \"revision\": \"fce6b42786d0cc1bc821eddf4f0b50c9\"\n },\n {\n \"url\": \"src/editors/cleanup/control-blocks-container.js\",\n \"revision\": \"93d5848c1b5360760f15cb4345018071\"\n },\n {\n \"url\": \"src/editors/cleanup/datasets-container.js\",\n \"revision\": \"35466d034d1a6e89ef21eef5d8df1875\"\n },\n {\n \"url\": \"src/editors/cleanup/foundation.js\",\n \"revision\": \"abfd29b662055355b39daf5f540684d7\"\n },\n {\n \"url\": \"src/editors/Communication.js\",\n \"revision\": \"23404b239336b9fbacdd21c6fccc02cd\"\n },\n {\n \"url\": \"src/editors/communication/connectedap-editor.js\",\n \"revision\": \"2a82911c06626a8ce846f5bb2d8dc3f2\"\n },\n {\n \"url\": \"src/editors/communication/subnetwork-editor.js\",\n \"revision\": \"38aafa6ba92587eef1a6e79a3cab9923\"\n },\n {\n \"url\": \"src/editors/IED.js\",\n \"revision\": \"f5b49d72e3483f9c3b0ecdc16da8e34c\"\n },\n {\n \"url\": \"src/editors/ied/access-point-container.js\",\n \"revision\": \"e3ed001a011f302be0e69abac31d7945\"\n },\n {\n \"url\": \"src/editors/ied/da-container.js\",\n \"revision\": \"4e53e2f475983916f1a3ca9eb230cbc6\"\n },\n {\n \"url\": \"src/editors/ied/da-wizard.js\",\n \"revision\": \"d5e84bb89593d47e3395665b4dd2a12d\"\n },\n {\n \"url\": \"src/editors/ied/do-container.js\",\n \"revision\": \"ba665c60fc545f636cebdeb43c98c558\"\n },\n {\n \"url\": \"src/editors/ied/do-wizard.js\",\n \"revision\": \"6e6e8f742cc40c7d4bd19732021270b8\"\n },\n {\n \"url\": \"src/editors/ied/element-path.js\",\n \"revision\": \"06634b75b45180a3a9737f08362fbad3\"\n },\n {\n \"url\": \"src/editors/ied/foundation.js\",\n \"revision\": \"cc0331145610293bb2476b8347e8fdd9\"\n },\n {\n \"url\": \"src/editors/ied/foundation/foundation.js\",\n \"revision\": \"b613d578229248a70397ffbd7067924e\"\n },\n {\n \"url\": \"src/editors/ied/ied-container.js\",\n \"revision\": \"80eea66fc0a5291614faa24793b82659\"\n },\n {\n \"url\": \"src/editors/ied/ldevice-container.js\",\n \"revision\": \"7702e593354193912b507cdddc144857\"\n },\n {\n \"url\": \"src/editors/ied/ln-container.js\",\n \"revision\": \"481af09a74d4a90c81ca81d4a8d7837c\"\n },\n {\n \"url\": \"src/editors/ied/server-container.js\",\n \"revision\": \"eabccab6431f699e717ae82b0aa360a5\"\n },\n {\n \"url\": \"src/editors/SampledValues.js\",\n \"revision\": \"200578d94aabe8484491bc5f47551d37\"\n },\n {\n \"url\": \"src/editors/sampledvalues/elements/ied-element-smv.js\",\n \"revision\": \"493f043e235f95b28b7b1decf43c405a\"\n },\n {\n \"url\": \"src/editors/sampledvalues/foundation.js\",\n \"revision\": \"c0e4fed4463d7a22aab572e817a886d6\"\n },\n {\n \"url\": \"src/editors/sampledvalues/sampled-values-list.js\",\n \"revision\": \"afaa1f2c74541f9f4fa9b41455034ade\"\n },\n {\n \"url\": \"src/editors/sampledvalues/subscriber-ied-list-smv.js\",\n \"revision\": \"d493e57d84a200391f99c72b20304c7e\"\n },\n {\n \"url\": \"src/editors/SingleLineDiagram.js\",\n \"revision\": \"ce7a933abe0c02a8bc8b5555eb1e4127\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/foundation.js\",\n \"revision\": \"9bf2c00750cd0158068073db155a3fc2\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/ortho-connector.js\",\n \"revision\": \"95fb7a18c78db7a79e9d08c53bb17698\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/sld-drawing.js\",\n \"revision\": \"91b90fc6ebbfbba80bc5a4760597f864\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/wizards/bay.js\",\n \"revision\": \"9ce34ed5b476ec3b3043d1b6de4351ab\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/wizards/conductingequipment.js\",\n \"revision\": \"b410e4af9c6259ff6e3fa996290f67b4\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/wizards/foundation.js\",\n \"revision\": \"ce6cee60f6805b955c1823ec689f23f5\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/wizards/powertransformer.js\",\n \"revision\": \"ce84003433ce5ae86f573ddb38ab3adf\"\n },\n {\n \"url\": \"src/editors/singlelinediagram/wizards/wizard-library.js\",\n \"revision\": \"9d651180bf9ed5038f0881071a6c4bf9\"\n },\n {\n \"url\": \"src/editors/Subscription.js\",\n \"revision\": \"b2db8ddf4d4cdea56922b0d145b53e53\"\n },\n {\n \"url\": \"src/editors/subscription/foundation.js\",\n \"revision\": \"82683fa10cc659b0c44d31d26c514041\"\n },\n {\n \"url\": \"src/editors/subscription/goose-publisher-list.js\",\n \"revision\": \"91680857900875fa4c25aede3afb470d\"\n },\n {\n \"url\": \"src/editors/subscription/goose-subscriber-list.js\",\n \"revision\": \"adc91d7ec0adfbe328585c8720bbbbff\"\n },\n {\n \"url\": \"src/editors/subscription/subscriber-list.js\",\n \"revision\": \"30d10135bc461672711d1356a6899e7c\"\n },\n {\n \"url\": \"src/editors/Substation.js\",\n \"revision\": \"74099fa14020f6ad3de8a8212c2c1b66\"\n },\n {\n \"url\": \"src/editors/substation/bay-editor.js\",\n \"revision\": \"d48186c452a90fb5374ac87bc237dfc6\"\n },\n {\n \"url\": \"src/editors/substation/conducting-equipment-editor.js\",\n \"revision\": \"cfa0e8567b6c5ba4d849ae99738e0b0b\"\n },\n {\n \"url\": \"src/editors/substation/eq-function-editor.js\",\n \"revision\": \"7b892d847545262ab3fccc5ffa5f975b\"\n },\n {\n \"url\": \"src/editors/substation/eq-sub-function-editor.js\",\n \"revision\": \"06f5c2ed6d52934b1a5926e6d8adb5c1\"\n },\n {\n \"url\": \"src/editors/substation/foundation.js\",\n \"revision\": \"e342a516b3aa44c0f6673b1e334ad5e8\"\n },\n {\n \"url\": \"src/editors/substation/function-editor.js\",\n \"revision\": \"91680751e0573a2e61bb23fd521742f6\"\n },\n {\n \"url\": \"src/editors/substation/guess-wizard.js\",\n \"revision\": \"e28f059579e2dbe6c77526d207ef6801\"\n },\n {\n \"url\": \"src/editors/substation/ied-editor.js\",\n \"revision\": \"dac61bcdafa7a73539b0fb9e9871fab4\"\n },\n {\n \"url\": \"src/editors/substation/l-node-editor.js\",\n \"revision\": \"22d2395ee3dade210527578f8e42783c\"\n },\n {\n \"url\": \"src/editors/substation/powertransformer-editor.js\",\n \"revision\": \"3d5384e0f79b3fd9bd6e0a4abf5eb9dc\"\n },\n {\n \"url\": \"src/editors/substation/sub-function-editor.js\",\n \"revision\": \"433c9fbf1025927c17f3080eeb5103c3\"\n },\n {\n \"url\": \"src/editors/substation/substation-editor.js\",\n \"revision\": \"6028204c6f79ddfd190b55ba6047be58\"\n },\n {\n \"url\": \"src/editors/substation/voltage-level-editor.js\",\n \"revision\": \"96cb0dfaa65622672d641c053cafe237\"\n },\n {\n \"url\": \"src/editors/substation/zeroline-pane.js\",\n \"revision\": \"16a58170795daad9f050cb798fd7c738\"\n },\n {\n \"url\": \"src/editors/Templates.js\",\n \"revision\": \"168c6445d6f85eb2213a4b591ba365e4\"\n },\n {\n \"url\": \"src/editors/templates/datype-wizards.js\",\n \"revision\": \"d1b5d9aa9fa73e759bf2897d2db8777d\"\n },\n {\n \"url\": \"src/editors/templates/dotype-wizards.js\",\n \"revision\": \"33ea3c868179a5af8c1343420883ecc8\"\n },\n {\n \"url\": \"src/editors/templates/enumtype-wizard.js\",\n \"revision\": \"b04bf13ac396336ccee92b61b08e083e\"\n },\n {\n \"url\": \"src/editors/templates/foundation.js\",\n \"revision\": \"0366da749da80d91d3f4950ae530887d\"\n },\n {\n \"url\": \"src/editors/templates/lnodetype-wizard.js\",\n \"revision\": \"6feac56fba2a0a9f8bfc1ea50a98eb9f\"\n },\n {\n \"url\": \"src/editors/templates2/d-a-editor.js\",\n \"revision\": \"0de196206eaaf3252f8b96c12e85d579\"\n },\n {\n \"url\": \"src/editors/templates2/d-a-type-editor.js\",\n \"revision\": \"70df187ff26da33443a262acf7809f18\"\n },\n {\n \"url\": \"src/editors/templates2/d-o-editor.js\",\n \"revision\": \"99cb7bbd86b532f16b2be1f73823bd30\"\n },\n {\n \"url\": \"src/editors/templates2/d-o-type-editor.js\",\n \"revision\": \"7fb1560d8a47eeab478c6ec209429bcd\"\n },\n {\n \"url\": \"src/editors/templates2/foundation.js\",\n \"revision\": \"23420f602d948e1df2126eb532b3572b\"\n },\n {\n \"url\": \"src/editors/templates2/l-node-type-editor.js\",\n \"revision\": \"981aaabd1023bee45bb6c6795a9e9887\"\n },\n {\n \"url\": \"src/editors/TemplatesProt.js\",\n \"revision\": \"82d81b44c42dc869fe42ee5978ecac91\"\n },\n {\n \"url\": \"src/filtered-list.js\",\n \"revision\": \"72d906e7f75adbc820cba02dd621982c\"\n },\n {\n \"url\": \"src/finder-list.js\",\n \"revision\": \"4bdc1a209c987bab28cda8b23110241e\"\n },\n {\n \"url\": \"src/foundation.js\",\n \"revision\": \"dc55fbc7e866a1ab6c9beeb5deb2fe8d\"\n },\n {\n \"url\": \"src/foundation/ied.js\",\n \"revision\": \"db2ac60380ded81420728efe42f36fb2\"\n },\n {\n \"url\": \"src/foundation/nsdoc.js\",\n \"revision\": \"d8b53f8bcd55fd1979b17dbad9a7875c\"\n },\n {\n \"url\": \"src/foundation/scl.js\",\n \"revision\": \"92aa5f532152489d8d8f6c3d27ba808d\"\n },\n {\n \"url\": \"src/Hosting.js\",\n \"revision\": \"7c22b509e6a63ec63c4e065cd99c737c\"\n },\n {\n \"url\": \"src/icons/icons.js\",\n \"revision\": \"f5fc497dba9049e414c196e1ae0c2f37\"\n },\n {\n \"url\": \"src/icons/ied-icons.js\",\n \"revision\": \"b995e2eafb8b1b39db87a40b8c20fe27\"\n },\n {\n \"url\": \"src/icons/lnode.js\",\n \"revision\": \"5cda91e8f2268e784d70974babadaaa1\"\n },\n {\n \"url\": \"src/Logging.js\",\n \"revision\": \"093918643faa740ecfb9f36c114b12cb\"\n },\n {\n \"url\": \"src/menu/ExportSettings.js\",\n \"revision\": \"ec429e41e2e0cca7bf8638bf685f536c\"\n },\n {\n \"url\": \"src/menu/Help.js\",\n \"revision\": \"fd5c670aba0b9460051081e3d7bf4687\"\n },\n {\n \"url\": \"src/menu/ImportIEDs.js\",\n \"revision\": \"aa7e532cfc30b6be0cd8b87a24860d1f\"\n },\n {\n \"url\": \"src/menu/Merge.js\",\n \"revision\": \"69a0936038d217d63d672f6e5356d5dc\"\n },\n {\n \"url\": \"src/menu/NewProject.js\",\n \"revision\": \"d44e68fc3caacdd80daa15ef39295e6e\"\n },\n {\n \"url\": \"src/menu/OpenProject.js\",\n \"revision\": \"c604b8ee093b560dede0c57389f506d3\"\n },\n {\n \"url\": \"src/menu/SaveProject.js\",\n \"revision\": \"7bb79050d3561dba2ac299b8804332ad\"\n },\n {\n \"url\": \"src/menu/SubscriberInfo.js\",\n \"revision\": \"890c6799e0fa1885b55329feb4123985\"\n },\n {\n \"url\": \"src/menu/UpdateDescriptionABB.js\",\n \"revision\": \"9135f88caa43757e59a7fb171debc489\"\n },\n {\n \"url\": \"src/menu/UpdateDescriptionSEL.js\",\n \"revision\": \"5ef577218fb0989efd2d17203545cc93\"\n },\n {\n \"url\": \"src/menu/UpdateSubstation.js\",\n \"revision\": \"5c7b6a2f5c4df02430d9a6a8bfa1bde4\"\n },\n {\n \"url\": \"src/open-scd.js\",\n \"revision\": \"9ffc36a78b2c7ddcce31e77ace912a0e\"\n },\n {\n \"url\": \"src/Plugging.js\",\n \"revision\": \"9ce49117c8302d084f6664c590cc7e9e\"\n },\n {\n \"url\": \"src/schemas.js\",\n \"revision\": \"3017a37f278447276ed78123917640a5\"\n },\n {\n \"url\": \"src/Setting.js\",\n \"revision\": \"b8004db6d6849793ce858c65618df81f\"\n },\n {\n \"url\": \"src/themes.js\",\n \"revision\": \"8bbec3972055f9100a12262725b42940\"\n },\n {\n \"url\": \"src/translations/de.js\",\n \"revision\": \"ec7b0b2039dd91c38c4e5afc93d3ae7e\"\n },\n {\n \"url\": \"src/translations/en.js\",\n \"revision\": \"f94746146fbdb36049e1f16960464fe6\"\n },\n {\n \"url\": \"src/translations/loader.js\",\n \"revision\": \"9032cc10f0e34b8b6c3c1f5bc0a0c0a2\"\n },\n {\n \"url\": \"src/validators/templates/dabda.js\",\n \"revision\": \"7857ea35757f1c7a710d8d7920c7c331\"\n },\n {\n \"url\": \"src/validators/templates/datype.js\",\n \"revision\": \"b62a34805b0888b4040e296556ed42b0\"\n },\n {\n \"url\": \"src/validators/templates/dosdo.js\",\n \"revision\": \"6150e79c702d6720a2f89e12f7b1481e\"\n },\n {\n \"url\": \"src/validators/templates/dotype.js\",\n \"revision\": \"5063d74260edfe7892b53ae05fb9da49\"\n },\n {\n \"url\": \"src/validators/templates/foundation.js\",\n \"revision\": \"caa76bb82d61d23f3e7644a4300709ba\"\n },\n {\n \"url\": \"src/validators/templates/lnodetype.js\",\n \"revision\": \"bb47abea21144af71a3380d1122ca71d\"\n },\n {\n \"url\": \"src/validators/ValidateSchema.js\",\n \"revision\": \"3f9fb53f18cb6c86fd7f8081d49fa1a0\"\n },\n {\n \"url\": \"src/validators/ValidateTemplates.js\",\n \"revision\": \"2946ee7ab4912952926a81341b6305c0\"\n },\n {\n \"url\": \"src/Waiting.js\",\n \"revision\": \"a83e47c1b3bf4fbf2325a77dc3bb63e4\"\n },\n {\n \"url\": \"src/wizard-checkbox.js\",\n \"revision\": \"fd3b3f16f9e65e19e3ff86157a98dde4\"\n },\n {\n \"url\": \"src/wizard-dialog.js\",\n \"revision\": \"59403337537a3805444e6f168be3b4bb\"\n },\n {\n \"url\": \"src/wizard-select.js\",\n \"revision\": \"1ee1f71357a60c29a8cf999e24b9fbce\"\n },\n {\n \"url\": \"src/wizard-textfield.js\",\n \"revision\": \"0f64d2849cd649584ba0be10df7a8734\"\n },\n {\n \"url\": \"src/WizardDivider.js\",\n \"revision\": \"7ba98ab422db8eda09fe4690fa792a24\"\n },\n {\n \"url\": \"src/Wizarding.js\",\n \"revision\": \"7d55786347b7bd569d2db6e7cd44b4f1\"\n },\n {\n \"url\": \"src/wizards.js\",\n \"revision\": \"22352aa334c47b96ad30c9897f923c34\"\n },\n {\n \"url\": \"src/wizards/abstractda.js\",\n \"revision\": \"051edd0c1ec3ee9c572bbe09101fcdb9\"\n },\n {\n \"url\": \"src/wizards/address.js\",\n \"revision\": \"9e8b37c09f858acbfa8739cb5675e3a5\"\n },\n {\n \"url\": \"src/wizards/bay.js\",\n \"revision\": \"fc5efc9ec8395a6b514ae9490fbefdde\"\n },\n {\n \"url\": \"src/wizards/bda.js\",\n \"revision\": \"5d2079138bd839432a29cbc184d02124\"\n },\n {\n \"url\": \"src/wizards/clientln.js\",\n \"revision\": \"2a2378d05118ad835d9c3daf1c4a4110\"\n },\n {\n \"url\": \"src/wizards/commmap-wizards.js\",\n \"revision\": \"4eef278cc0117800e32597fe61e3e4d3\"\n },\n {\n \"url\": \"src/wizards/conductingequipment.js\",\n \"revision\": \"87d155369fe719a5ad1ac50ce438450a\"\n },\n {\n \"url\": \"src/wizards/connectedap.js\",\n \"revision\": \"7a37d3d323106c911876ec8a654abb93\"\n },\n {\n \"url\": \"src/wizards/connectivitynode.js\",\n \"revision\": \"a5a6128fbe206c152eb67ea0082789aa\"\n },\n {\n \"url\": \"src/wizards/controlwithiedname.js\",\n \"revision\": \"1379388648c977a76d74881dc4ded567\"\n },\n {\n \"url\": \"src/wizards/da.js\",\n \"revision\": \"5dfe59ceaa417a0a6f68be74a6610b29\"\n },\n {\n \"url\": \"src/wizards/dai.js\",\n \"revision\": \"17a2bfcc1283de1b092e5ba2e7c6fc85\"\n },\n {\n \"url\": \"src/wizards/dataset.js\",\n \"revision\": \"9a617033f8e86fcf499a5ee640711208\"\n },\n {\n \"url\": \"src/wizards/eqfunction.js\",\n \"revision\": \"b89af44795d039c852d04b25ab46579a\"\n },\n {\n \"url\": \"src/wizards/eqsubfunction.js\",\n \"revision\": \"31be92af114d627aeb1f8d074296148f\"\n },\n {\n \"url\": \"src/wizards/fcda.js\",\n \"revision\": \"3d90247c2e25d02609d55ede43d29664\"\n },\n {\n \"url\": \"src/wizards/foundation/actions.js\",\n \"revision\": \"17be38a1691f59d1b7578db64a1263df\"\n },\n {\n \"url\": \"src/wizards/foundation/enums.js\",\n \"revision\": \"a0f41606817cb4486ea2ecc8f32136f1\"\n },\n {\n \"url\": \"src/wizards/foundation/finder.js\",\n \"revision\": \"0f286aef09dc9778ac958f344402c3c6\"\n },\n {\n \"url\": \"src/wizards/foundation/limits.js\",\n \"revision\": \"4505ae4019aa04114d8b1319a8386d9b\"\n },\n {\n \"url\": \"src/wizards/foundation/p-types.js\",\n \"revision\": \"b48dba1e3142082b95160f2117f4a8c5\"\n },\n {\n \"url\": \"src/wizards/foundation/references.js\",\n \"revision\": \"8491dd1aa1e444904617ef4c991c69ee\"\n },\n {\n \"url\": \"src/wizards/foundation/scl.js\",\n \"revision\": \"beb97abf6844136e11895fdb9164544f\"\n },\n {\n \"url\": \"src/wizards/function.js\",\n \"revision\": \"44aa98b8af790f87f86d37a1fc9f1d5e\"\n },\n {\n \"url\": \"src/wizards/gse.js\",\n \"revision\": \"3f9d4c2599c0e3e69858f38822987fd2\"\n },\n {\n \"url\": \"src/wizards/gsecontrol.js\",\n \"revision\": \"677c45e202baed11a5c3ae74c23b48af\"\n },\n {\n \"url\": \"src/wizards/ied.js\",\n \"revision\": \"f909e71cd4be57913b74338826f6bea5\"\n },\n {\n \"url\": \"src/wizards/lnode.js\",\n \"revision\": \"9a1820bf48dca418c6043f992f7e0760\"\n },\n {\n \"url\": \"src/wizards/optfields.js\",\n \"revision\": \"60b486b58f766e7fd15bdec8c40ffcfd\"\n },\n {\n \"url\": \"src/wizards/powertransformer.js\",\n \"revision\": \"bc1b5087b2c15e3d59bd298445fceb5b\"\n },\n {\n \"url\": \"src/wizards/reportcontrol.js\",\n \"revision\": \"ad973bf66ca21a8af4434de49c64794c\"\n },\n {\n \"url\": \"src/wizards/sampledvaluecontrol.js\",\n \"revision\": \"ee2081c6053bdd0b4e5b5842de091c3d\"\n },\n {\n \"url\": \"src/wizards/smv.js\",\n \"revision\": \"f5234f6d8df66cba547379cb93e9727f\"\n },\n {\n \"url\": \"src/wizards/smvopts.js\",\n \"revision\": \"cac2c70e7cac19c4edff3fc52f76e9ad\"\n },\n {\n \"url\": \"src/wizards/subfunction.js\",\n \"revision\": \"c59d3001fca46ac3394b3d6f5db80a28\"\n },\n {\n \"url\": \"src/wizards/subnetwork.js\",\n \"revision\": \"2470f18213dc311eb8b3e74ee8177f0b\"\n },\n {\n \"url\": \"src/wizards/substation.js\",\n \"revision\": \"c1e466021b40fafd9045c673be99e50d\"\n },\n {\n \"url\": \"src/wizards/terminal.js\",\n \"revision\": \"dcb2f2513cf1bb95611de29cf69f0bac\"\n },\n {\n \"url\": \"src/wizards/trgops.js\",\n \"revision\": \"8f2a9f0b3a9693a85216f648c3000e4f\"\n },\n {\n \"url\": \"src/wizards/voltagelevel.js\",\n \"revision\": \"60daa418455d23684e7fa05e9470cba0\"\n },\n {\n \"url\": \"src/wizards/wizard-library.js\",\n \"revision\": \"b904eb7cd0ce4408ddcd0e67b0b36581\"\n },\n {\n \"url\": \"browserconfig.xml\",\n \"revision\": \"a8c181f3745541f8aa4653452592763b\"\n },\n {\n \"url\": \"CC-EULA.pdf\",\n \"revision\": \"84642855997c978c5d96187c63835413\"\n },\n {\n \"url\": \"CHANGELOG.md\",\n \"revision\": \"ba76e26841d0428138620e216d59f796\"\n },\n {\n \"url\": \"favicon.ico\",\n \"revision\": \"84e4fb128b947bc51ebf808a4f5b2512\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"1e2de83e010b160dd7c6f6a401bdb571\"\n },\n {\n \"url\": \"LICENSE.md\",\n \"revision\": \"9cc11fc6c697d3f1d8ac1d3c3ccd0567\"\n },\n {\n \"url\": \"manifest.json\",\n \"revision\": \"46feea2506bb4d42482242a1c3eeecd9\"\n },\n {\n \"url\": \"README.md\",\n \"revision\": \"5bc597b33fc00643264328babb92a551\"\n },\n {\n \"url\": \"ROADMAP.md\",\n \"revision\": \"5bd42ef3131220d5a5c28f103491bbb0\"\n },\n {\n \"url\": \"snowpack.config.js\",\n \"revision\": \"8f614a08ab660f4ee00208f05ea56fbe\"\n }\n], {});\n\n\n\n\nworkbox_routing_registerRoute(/.*/, new workbox_strategies_NetworkFirst(), 'GET');\n\n\n\n\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * [addRoute()]{@link module:workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n *\n * @memberof module:workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See\n * [PrecacheRoute options]{@link module:workbox-precaching.PrecacheRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-strategies\n */\nclass NetworkFirst extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise<Response>}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler,\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return ((await handler.waitUntil(Promise.race(promises))) ||\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n (await networkPromise));\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} options.event\n * @return {Promise<Response>}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler, }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await handler.cacheMatch(request));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} options.event\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler, }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\n }\n}\nexport { NetworkFirst };\n"],"names":["self","_","e","messageGenerator","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","name","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","this","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","Object","keys","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","RegExp","moduleName","funcName","paramName","cacheOkAndOpaquePlugin","cacheWillUpdate","response","status","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","userCacheName","stripParams","fullURL","ignoreParams","strippedURL","param","searchParams","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","mode","FetchEvent","preloadResponse","possiblePreloadResponse","originalRequest","hasCallback","clone","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetch","fetchOptions","callback","error","runCallbacks","responseClone","cachePut","key","cachedResponse","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheKey","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","state","statefulCallback","statefulParam","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","doneWaiting","waitUntilError","asyncFn","returnPromise","createCacheKey","urlObject","revision","cacheKeyURL","originalURL","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","cachedResponseWillBeUsed","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","modifier","clonedResponse","responseInit","Headers","statusText","modifiedResponseInit","body","testResponse","Response","canConstructResponseFromBodyStream","blob","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","cacheMatch","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","skipWaiting","addRoute","workbox_routing_registerRoute","p","unshift","_networkTimeoutSeconds","networkTimeoutSeconds","logs","promises","timeoutId","id","_getTimeoutPromise","networkPromise","_getNetworkPromise","race","fetchAndCachePut","fetchError","clearTimeout"],"mappings":"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,mDACK,oCAEd,KACS,kDACK,oCAEd,KACS,mDACK,oCAEd,KACS,gDACK,oCAEd,KACS,0CACK,oCAEd,KACS,6CACK,oCAEd,KACS,4CACK,oCAEd,KACS,gDACK,oCAEd,KACS,mDACK,oCAEd,KACS,6BACK,oCAEd,KACS,4BACK,oCAEd,KACS,oCACK,oCAEd,KACS,wCACK,oCAEd,KACS,mDACK,oCAEd,KACS,oDACK,oCAEd,KACS,4CACK,oCAEd,KACS,yCACK,oCAEd,KACS,qCACK,oCAEd,KACS,2CACK,oCAEd,KACS,4CACK,oCAEd,KACS,mCACK,oCAEd,KACS,+CACK,oCAEd,KACS,wCACK,oCAEd,KACS,0CACK,oCAEd,KACS,mCACK,oCAEd,KACS,wCACK,oCAEd,KACS,sCACK,oCAEd,KACS,qCACK,oCAEd,KACS,qCACK,oCAEd,KACS,qCACK,oCAEd,KACS,qCACK,oCAEd,KACS,mCACK,oCAEd,KACS,8BACK,oCAEd,KACS,8BACK,oCAEd,KACS,0BACK,oCAEd,KACS,kCACK,oCAEd,KACS,2DACK,oCAEd,KACS,qDACK,oCAEd,KACS,6CACK,oCAEd,KACS,wCACK,oCAEd,KACS,2DACK,oCAEd,KACS,0DACK,oCAEd,KACS,8BACK,oCAEd,KACS,qDACK,oCAEd,KACS,2CACK,oCAEd,KACS,wCACK,oCAEd,KACS,2CACK,oCAEd,KACS,wCACK,oCAEd,KACS,2CACK,oCAEd,KACS,yCACK,oCAEd,KACS,oDACK,oCAEd,KACS,4CACK,oCAEd,KACS,gDACK,oCAEd,KACS,2CACK,oCAEd,KACS,+CACK,oCAEd,KACS,wCACK,oCAEd,KACS,iEACK,oCAEd,KACS,mDACK,oCAEd,KACS,4DACK,oCAEd,KACS,gEACK,oCAEd,KACS,4CACK,oCAEd,KACS,uDACK,oCAEd,KACS,4DACK,oCAEd,KACS,wDACK,oCAEd,KACS,wDACK,oCAEd,KACS,wEACK,oCAEd,KACS,+DACK,oCAEd,KACS,qEACK,oCAEd,KACS,mEACK,oCAEd,KACS,uCACK,oCAEd,KACS,kDACK,oCAEd,KACS,4DACK,oCAEd,KACS,6DACK,oCAEd,KACS,uDACK,oCAEd,KACS,qCACK,oCAEd,KACS,gDACK,oCAEd,KACS,iEACK,oCAEd,KACS,wDACK,oCAEd,KACS,4DACK,oCAEd,KACS,gDACK,oCAEd,KACS,qDACK,oCAEd,KACS,kDACK,oCAEd,KACS,gDACK,oCAEd,KACS,mDACK,oCAEd,KACS,6DACK,oCAEd,KACS,yDACK,oCAEd,KACS,uDACK,oCAEd,KACS,0DACK,oCAEd,KACS,mDACK,oCAEd,KACS,oCACK,oCAEd,KACS,mDACK,oCAEd,KACS,mDACK,oCAEd,KACS,oDACK,oCAEd,KACS,+CACK,oCAEd,KACS,qDACK,oCAEd,KACS,gDACK,oCAEd,KACS,qDACK,oCAEd,KACS,gDACK,oCAEd,KACS,qDACK,oCAEd,KACS,gDACK,oCAEd,KACS,wDACK,oCAEd,KACS,wCACK,oCAEd,KACS,gCACK,oCAEd,KACS,8BACK,oCAEd,KACS,6BACK,oCAEd,KACS,iCACK,oCAEd,KACS,mCACK,oCAEd,KACS,iCACK,oCAEd,KACS,0BACK,oCAEd,KACS,8BACK,oCAEd,KACS,kCACK,oCAEd,KACS,8BACK,oCAEd,KACS,0BACK,oCAEd,KACS,sCACK,oCAEd,KACS,4BACK,oCAEd,KACS,kCACK,oCAEd,KACS,6BACK,oCAEd,KACS,kCACK,oCAEd,KACS,mCACK,oCAEd,KACS,mCACK,oCAEd,KACS,sCACK,oCAEd,KACS,4CACK,oCAEd,KACS,4CACK,oCAEd,KACS,wCACK,oCAEd,KACS,2BACK,oCAEd,KACS,2BACK,oCAEd,KACS,0BACK,oCAEd,KACS,0BACK,oCAEd,KACS,yBACK,oCAEd,KACS,kCACK,oCAEd,KACS,kCACK,oCAEd,KACS,sCACK,oCAEd,KACS,6CACK,oCAEd,KACS,8CACK,oCAEd,KACS,6CACK,oCAEd,KACS,8CACK,oCAEd,KACS,kDACK,oCAEd,KACS,iDACK,oCAEd,KACS,4CACK,oCAEd,KACS,+CACK,oCAEd,KACS,0BACK,oCAEd,KACS,kCACK,oCAEd,KACS,gCACK,oCAEd,KACS,gCACK,oCAEd,KACS,mCACK,oCAEd,KACS,gCACK,oCAEd,KACS,4BACK,oCAEd,KACS,0BACK,oCAEd,KACS,qCACK,oCAEd,KACS,kCACK,oCAEd,KACS,8BACK,oCAEd,KACS,8BACK,oCAEd,KACS,mCACK,oCAEd,KACS,0CACK,oCAEd,KACS,8CACK,oCAEd,KACS,sCACK,oCAEd,KACS,2CACK,oCAEd,KACS,6CACK,oCAEd,KACS,6BACK,oCAEd,KACS,8BACK,oCAEd,KACS,kCACK,oCAEd,KACS,qCACK,oCAEd,KACS,wCACK,oCAEd,KACS,+BACK,oCAEd,KACS,6CACK,oCAEd,KACS,2CACK,oCAEd,KACS,4CACK,oCAEd,KACS,4CACK,oCAEd,KACS,6CACK,oCAEd,KACS,gDACK,oCAEd,KACS,yCACK,oCAEd,KACS,mCACK,oCAEd,KACS,8BACK,oCAEd,KACS,qCACK,oCAEd,KACS,8BACK,oCAEd,KACS,gCACK,oCAEd,KACS,oCACK,oCAEd,KACS,2CACK,oCAEd,KACS,wCACK,oCAEd,KACS,8CACK,oCAEd,KACS,8BACK,oCAEd,KACS,kCACK,oCAEd,KACS,sCACK,oCAEd,KACS,qCACK,oCAEd,KACS,qCACK,oCAEd,KACS,mCACK,oCAEd,KACS,iCACK,oCAEd,KACS,uCACK,oCAEd,KACS,yCACK,oCAEd,KACS,6BACK,oCAEd,KACS,uBACK,oCAEd,KACS,wBACK,oCAEd,KACS,uBACK,oCAEd,KACS,sBACK,oCAEd,KACS,sBACK,oCAEd,KACS,yBACK,oCAEd,KACS,qBACK,oCAEd,KACS,sBACK,oCAEd,KACS,8BACK,sCEr5BhB,SAAkB6B,SACRmF,EAAqB6D,IAE3BjM,EADsB,IAAIkM,EAAc9D,EAAoBnF,IHD5DqK,CAASrK,GC25BbsK,EAA8B,KAAM,IGv5BpC,cAA2BxG,EAoBvBxL,YAAY0H,EAAU,UACZA,GAGD/F,KAAKsG,QAAQmJ,MAAMa,GAAM,oBAAqBA,UAC1ChK,QAAQiK,QAAQ3M,QAEpB4M,EAAyBzK,EAAQ0K,uBAAyB,UAmBrDrQ,EAAS1B,SACbgS,EAAO,GASPC,EAAW,OACbC,KACA5Q,KAAKwQ,EAAwB,OACvBK,GAAEA,EAAFtL,QAAMA,GAAYvF,KAAK8Q,EAAmB,CAAE1Q,QAAAA,EAASsQ,KAAAA,EAAMhS,QAAAA,IACjEkS,EAAYC,EACZF,EAAS5N,KAAKwC,SAEZwL,EAAiB/Q,KAAKgR,EAAmB,CAC3CJ,UAAAA,EACAxQ,QAAAA,EACAsQ,KAAAA,EACAhS,QAAAA,IAEJiS,EAAS5N,KAAKgO,SACRjN,QAAiBpF,EAAQyC,UAAU,gBAEtBzC,EAAQyC,UAAUN,QAAQoQ,KAAKN,WAMnCI,EAR0B,QAkBpCjN,QACK,IAAI3F,EAAa,cAAe,CAAEgB,IAAKiB,EAAQjB,aAElD2E,EAWXgN,GAAmB1Q,QAAEA,EAAFsQ,KAAWA,EAAXhS,QAAiBA,QAC5BkS,QAWG,CACHrL,QAXmB,IAAI1E,SAAS2E,IAQhCoL,EAAYvI,YAPajG,UAKrBoD,QAAc9G,EAAQ8N,WAAWpM,MAEkC,IAA9BJ,KAAKwQ,MAI9CK,GAAID,YAaaA,UAAEA,EAAFxQ,QAAaA,EAAbsQ,KAAsBA,EAAtBhS,QAA4BA,QAC7C+I,EACA3D,MAEAA,QAAiBpF,EAAQwS,iBAAiB9Q,GAE9C,MAAO+Q,GACCA,aAAsB/S,QACtBqJ,EAAQ0J,UAGZP,GACAQ,aAAaR,IAWbnJ,GAAU3D,IACVA,QAAiBpF,EAAQ8N,WAAWpM,IAUjC0D,IHovB4D"}