{"version":3,"file":"asset-loader.min.js","sources":["../../../../utils/asset-loader-utils.js","../../../../utils/common-utils.js","../../../../src/core/js/asset-loader.js"],"sourcesContent":["/* This script is created and maintained by The Global Chat Team at The Estee Lauder Companies. It is part of a larger ecosystem, so please raise any issues, change or feature requests with our team directly. */\n\nexport async function loadScript(url, callback) {\n const script = document.createElement(\"script\");\n script.src = url;\n script.type = \"text/javascript\";\n script.dataset.sourceMap = url + '.map';\n if (callback) script.onload = callback;\n document.head.appendChild(script);\n}\n\nexport async function loadCookieGatedScript(url) {\n const functionalCookieCategory = '3';\n\n if (window.OneTrust && window.OneTrust.InsertScript) {\n OneTrust.InsertScript(url, 'head', null, null, functionalCookieCategory);\n return;\n }\n\n const timeout = setTimeout(() => {\n if (!window.OneTrust) {\n loadCookieGatedScriptFallback(url);\n }\n clearInterval(interval);\n }, 10000);\n\n const interval = setInterval(() => {\n if (window.OneTrust) {\n OneTrust.InsertScript(url, 'head', null, null, '3');\n clearTimeout(timeout);\n clearInterval(interval);\n }\n }, 100)\n}\n\nfunction loadCookieGatedScriptFallback(url) {\n const script = document.createElement('script');\n script.src = url;\n script.className = 'optanon-category-3';\n script.type = 'text/plain';\n document.head.appendChild(script);\n}\n\nexport async function loadScriptMap(scriptUrl, mapUrl) {\n const script = document.querySelector(`script[src=\"${scriptUrl}\"]`);\n if (script) {\n script.dataset.sourceMap = mapUrl;\n }\n}\n\nexport async function loadCss(url) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n link.dataset.sourceMap = url + '.map';\n document.head.appendChild(link);\n}\n\nexport async function loadBrandAssets(resources, brandAssetsManifest, bucketPath) {\n if (brandAssetsManifest === undefined) {\n throw new Error(\"LiveChat Error: Brand Asset Manifest is missing\");\n }\n\n for (const key in resources) {\n if (resources[key].enabled || resources[key] === \"core\") {\n await loadBrandAsset(key, brandAssetsManifest, bucketPath);\n }\n }\n}\n\nexport async function loadBrandAsset(resource, brandAssetsManifest, bucketPath) {\n if (resource === undefined) {\n throw new Error(\"Assets are missing from the manifest: \",);\n }\n\n const r = brandAssetsManifest[resource];\n\n if (!r) return;\n\n for (const assetPath of r) {\n const url = `${bucketPath}${assetPath}`;\n if (assetPath.endsWith(\".js\")) {\n await loadCookieGatedScript(url);\n if (assetPath.endsWith(\".map\")) {\n const mapUrl = url + \".map\";\n await loadScriptMap(mapUrl);\n }\n } else if (assetPath.endsWith(\".css\")) {\n await loadCss(url);\n }\n }\n}\n\nexport async function loadLivePersonAssets(resource, bucketPath) {\n if (resource === undefined) {\n throw new Error(\"Assets are missing from the manifest: \",);\n }\n for (const assetPath of resource) {\n const url = `${bucketPath}${assetPath}`;\n if (assetPath.endsWith(\".js\")) {\n await loadCookieGatedScript(url);\n if (assetPath.endsWith(\".map\")) {\n const mapUrl = url + \".map\";\n await loadScriptMap(mapUrl);\n }\n } else if (assetPath.endsWith(\".css\")) {\n await loadCss(url);\n }\n }\n}\n\nexport async function loadCookieGatedCoreAssets(resource, bucketPath) {\n // Ignores Asset Loader, fires health check when done\n if (resource === undefined) {\n throw new Error(\"Core Assets are missing from the manifest: \",);\n }\n const coreAssetpath = resource.filter(assetPath => !assetPath.includes('asset-loader'));\n\n for (const assetPath of coreAssetpath) {\n const url = `${bucketPath}${assetPath}`;\n if (assetPath.endsWith(\".js\")) {\n await loadScript(url);\n if (assetPath.endsWith(\".map\")) {\n const mapUrl = url + \".map\";\n await loadScriptMap(mapUrl);\n }\n }\n }\n // Ensure everything (including other potential LP scripts) have loaded before dispatching the event\n\n // Ignoring health check for now...\n\n // window.addEventListener(\"load\", () => {\n // window.LiveChat = window.LiveChat || {};\n // window.LiveChat.health = window.LiveChat.health || {};\n // window.LiveChat.health.liveperson = window.LiveChat.health.liveperson || {};\n\n // window.LiveChat.health.liveperson.assetsLoaded = true;\n // document.dispatchEvent(new Event(\"liveperson_assets_loaded\"));\n // });\n}\n\nexport async function loadChatUiAssets(resource, bucketPath) {\n if (resource === undefined) {\n throw new Error(\"Chat UI Assets are missing from the manifest: \",);\n }\n for (const assetPath of resource) {\n const url = `${bucketPath}${assetPath}`;\n if (assetPath.endsWith(\".js\")) {\n await loadScript(url);\n if (assetPath.endsWith(\".map\")) {\n const mapUrl = url + \".map\";\n await loadScriptMap(mapUrl);\n }\n } else if (assetPath.endsWith(\".css\")) {\n await loadCss(url);\n }\n }\n}\n\n// Called last in the asset loader pipeline\nexport function performLocalSetup() {\n console.log(\"LIVECHAT >> Local system initializing...\");\n setupLocalLivePerson();\n}\n\nfunction setupLocalLivePerson() {\n console.log(\"LIVECHAT >> Setting up local LivePerson environment...\");\n // Set up the minimum mock necessary for the LiveChat UI to work with a locally-mocked LivePerson Engagement\n const beautyDrawer = document.getElementById(\"livechat_lp_drawer_beauty\");\n const beautyEngagement = beautyDrawer.appendChild(document.createElement(\"div\")).appendChild(document.createElement(\"div\"));\n beautyEngagement.setAttribute('data-lp-engagement-id', '1234567890');\n\n const customerSupportDrawer = document.getElementById(\"livechat_lp_drawer_customer_support\");\n const customerSupportEngagement = customerSupportDrawer.appendChild(document.createElement(\"div\")).appendChild(document.createElement(\"div\"));\n customerSupportEngagement.setAttribute('data-lp-engagement-id', '0987654321');\n\n window.lpTag = window.lpTag || {};\n window.lpTag.taglets = window.lpTag.taglets || {};\n window.lpTag.taglets.rendererStub = window.lpTag.taglets.rendererStub || {};\n window.lpTag.taglets.rendererStub.click = function (engagementId) {\n if (!document.querySelector(`[data-lp-engagement-id=\"${engagementId}\"]`)) return false;\n\n renderMockLpWindow();\n return true;\n };\n}\n\nfunction renderMockLpWindow() {\n const mockLpWindow = document.createElement(\"div\");\n mockLpWindow.id = \"lp-window-mock\";\n mockLpWindow.style = \"position: sticky; bottom: 0; left: 0; width: 350px; height: 500px; background-color: white; z-index: 9999; padding: 10px; border: 1px solid black;\";\n const closeButton = document.createElement(\"button\");\n closeButton.textContent = \"X\";\n closeButton.style = \"font: bold; position: absolute; top: 0; right: 0; padding: 5px; font-size: 1.5rem;\";\n closeButton.onclick = () => mockLpWindow.remove();\n mockLpWindow.appendChild(closeButton);\n mockLpWindow.appendChild(document.createElement(\"h2\")).textContent = \"Mock LivePerson Window\";\n\n document.body.appendChild(mockLpWindow);\n}\n","export class LiveChatError extends Error {\n constructor(message) {\n if (message instanceof Error || message instanceof LiveChatError) {\n super(message.message); // Extract the message if an Error is passed\n } else {\n super(message);\n }\n\n this.name = \"LiveChatError\";\n Object.setPrototypeOf(this, LiveChatError.prototype);\n }\n}\n","// This script is created and maintained by The Global Chat Team at The Estee Lauder Companies. Please raise any issues or feature requests with our team directly.\n\nimport {\n loadLivePersonAssets,\n loadCookieGatedCoreAssets,\n loadBrandAssets,\n loadChatUiAssets,\n performLocalSetup,\n} from \"../../../utils/asset-loader-utils.js\";\n\nimport {\n LiveChatError\n} from \"../../../utils/common-utils.js\";\n\n(async function () {\n try {\n const bucketPath = `/livechat`;\n const config = window.LiveChat || null;\n const manifest = window.LiveChat.manifest || null;\n\n if (!config || !manifest) {\n throw new LiveChatError(\n \"There are files missing from the window.LiveChat object. Cannot load LiveChat.\"\n );\n }\n\n const resources = window.LiveChat.resources;\n\n function isExcludedRoute(currentPath, excludedRoutes) {\n if (!excludedRoutes || !Array.isArray(excludedRoutes)) {\n return false;\n }\n\n return excludedRoutes.some(pattern => {\n const regexPattern = pattern\n // Escape special regex characters except *\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // Replace * with regex pattern for any characters\n .replace(/\\*/g, '.*')\n // Anchor to start and end\n .replace(/^/, '^')\n .replace(/$/, '$');\n\n const regex = new RegExp(regexPattern);\n return regex.test(currentPath);\n });\n }\n\n // LiveChat UI\n if (resources.ui && resources.ui.enabled) {\n let excludedRoutes = resources.ui.excluded_routes || [];\n const globalExclusions = [\"/checkout*\", \"/cart*\", \"/iframe*\"];\n excludedRoutes.push(...globalExclusions);\n\n const currentPath = window.location.pathname;\n\n if (!isExcludedRoute(currentPath, excludedRoutes)) {\n const liveChatContainer = document.createElement('div');\n liveChatContainer.id = 'live-chat-ui-container';\n document.body.appendChild(liveChatContainer);\n\n const beautyDrawer = document.createElement(\"div\");\n beautyDrawer.id = \"livechat_lp_drawer_beauty\";\n liveChatContainer.appendChild(beautyDrawer);\n\n const customerSupportDrawer = document.createElement(\"div\");\n customerSupportDrawer.id = \"livechat_lp_drawer_customer_support\";\n liveChatContainer.appendChild(customerSupportDrawer);\n\n await loadChatUiAssets(manifest.ui, bucketPath);\n }\n }\n\n // LivePerson\n if (resources.liveperson && resources.liveperson.enabled) {\n await loadLivePersonAssets(manifest.liveperson, bucketPath);\n //core Assets\n loadCookieGatedCoreAssets(manifest.asset_loader, bucketPath);\n }\n\n // Brand Assets\n if (config.brand_assets_manifest_filename) {\n const brandAssetsManifest = await fetch(\n `${bucketPath}/brands/${config.brand_assets_manifest_filename}`\n ).then((response) => response.json());\n await loadBrandAssets(resources, brandAssetsManifest, bucketPath);\n }\n\n // Local-specific configurations\n if (config.is_local_config) {\n performLocalSetup();\n }\n\n } catch (error) {\n throw new LiveChatError(error.message);\n }\n})();\n"],"names":["loadScript","url","callback","script","document","createElement","src","type","dataset","sourceMap","onload","head","appendChild","loadCookieGatedScript","window","OneTrust","InsertScript","timeout","setTimeout","loadCookieGatedScriptFallback","clearInterval","interval","setInterval","clearTimeout","className","loadScriptMap","scriptUrl","mapUrl","querySelector","loadCss","link","rel","href","loadBrandAssets","resources","brandAssetsManifest","bucketPath","Error","key","enabled","loadBrandAsset","resource","r","assetPath","endsWith","loadLivePersonAssets","loadCookieGatedCoreAssets","coreAssetpath","filter","includes","loadChatUiAssets","performLocalSetup","console","log","setupLocalLivePerson","beautyDrawer","getElementById","beautyEngagement","setAttribute","customerSupportDrawer","customerSupportEngagement","lpTag","taglets","rendererStub","click","engagementId","renderMockLpWindow","mockLpWindow","id","style","closeButton","textContent","onclick","remove","body","LiveChatError","constructor","message","name","Object","setPrototypeOf","prototype","isExcludedRoute","currentPath","excludedRoutes","Array","isArray","some","pattern","regexPattern","replace","regex","RegExp","test","config","LiveChat","manifest","ui","excluded_routes","push","location","pathname","liveChatContainer","liveperson","asset_loader","brand_assets_manifest_filename","fetch","then","response","json","is_local_config","error"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2xpdmVjaGF0LXJlc291cmNlcy9saXZlY2hhdC1yZXNvdXJjZXMvdXRpbHMvYXNzZXQtbG9hZGVyLXV0aWxzLmpzIiwiL2hvbWUvcnVubmVyL3dvcmsvbGl2ZWNoYXQtcmVzb3VyY2VzL2xpdmVjaGF0LXJlc291cmNlcy91dGlscy9jb21tb24tdXRpbHMuanMiLCIvaG9tZS9ydW5uZXIvd29yay9saXZlY2hhdC1yZXNvdXJjZXMvbGl2ZWNoYXQtcmVzb3VyY2VzL3NyYy9jb3JlL2pzL2Fzc2V0LWxvYWRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUaGlzIHNjcmlwdCBpcyBjcmVhdGVkIGFuZCBtYWludGFpbmVkIGJ5IFRoZSBHbG9iYWwgQ2hhdCBUZWFtIGF0IFRoZSBFc3RlZSBMYXVkZXIgQ29tcGFuaWVzLiBJdCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGVjb3N5c3RlbSwgc28gcGxlYXNlIHJhaXNlIGFueSBpc3N1ZXMsIGNoYW5nZSBvciBmZWF0dXJlIHJlcXVlc3RzIHdpdGggb3VyIHRlYW0gZGlyZWN0bHkuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU2NyaXB0KHVybCwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgc2NyaXB0LnNyYyA9IHVybDtcbiAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuICBzY3JpcHQuZGF0YXNldC5zb3VyY2VNYXAgPSB1cmwgKyAnLm1hcCc7XG4gIGlmIChjYWxsYmFjaykgc2NyaXB0Lm9ubG9hZCA9IGNhbGxiYWNrO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ29va2llR2F0ZWRTY3JpcHQodXJsKSB7XG4gIGNvbnN0IGZ1bmN0aW9uYWxDb29raWVDYXRlZ29yeSA9ICczJztcblxuICBpZiAod2luZG93Lk9uZVRydXN0ICYmIHdpbmRvdy5PbmVUcnVzdC5JbnNlcnRTY3JpcHQpIHtcbiAgICBPbmVUcnVzdC5JbnNlcnRTY3JpcHQodXJsLCAnaGVhZCcsIG51bGwsIG51bGwsIGZ1bmN0aW9uYWxDb29raWVDYXRlZ29yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk9uZVRydXN0KSB7XG4gICAgICBsb2FkQ29va2llR2F0ZWRTY3JpcHRGYWxsYmFjayh1cmwpO1xuICAgIH1cbiAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSwgMTAwMDApO1xuXG4gIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cuT25lVHJ1c3QpIHtcbiAgICAgIE9uZVRydXN0Lkluc2VydFNjcmlwdCh1cmwsICdoZWFkJywgbnVsbCwgbnVsbCwgJzMnKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIH1cbiAgfSwgMTAwKVxufVxuXG5mdW5jdGlvbiBsb2FkQ29va2llR2F0ZWRTY3JpcHRGYWxsYmFjayh1cmwpIHtcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIHNjcmlwdC5zcmMgPSB1cmw7XG4gIHNjcmlwdC5jbGFzc05hbWUgPSAnb3B0YW5vbi1jYXRlZ29yeS0zJztcbiAgc2NyaXB0LnR5cGUgPSAndGV4dC9wbGFpbic7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTY3JpcHRNYXAoc2NyaXB0VXJsLCBtYXBVcmwpIHtcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c2NyaXB0VXJsfVwiXWApO1xuICBpZiAoc2NyaXB0KSB7XG4gICAgc2NyaXB0LmRhdGFzZXQuc291cmNlTWFwID0gbWFwVXJsO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ3NzKHVybCkge1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gIGxpbmsucmVsID0gXCJzdHlsZXNoZWV0XCI7XG4gIGxpbmsuaHJlZiA9IHVybDtcbiAgbGluay5kYXRhc2V0LnNvdXJjZU1hcCA9IHVybCArICcubWFwJztcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRCcmFuZEFzc2V0cyhyZXNvdXJjZXMsIGJyYW5kQXNzZXRzTWFuaWZlc3QsIGJ1Y2tldFBhdGgpIHtcbiAgaWYgKGJyYW5kQXNzZXRzTWFuaWZlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkxpdmVDaGF0IEVycm9yOiBCcmFuZCBBc3NldCBNYW5pZmVzdCBpcyBtaXNzaW5nXCIpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gcmVzb3VyY2VzKSB7XG4gICAgaWYgKHJlc291cmNlc1trZXldLmVuYWJsZWQgfHwgcmVzb3VyY2VzW2tleV0gPT09IFwiY29yZVwiKSB7XG4gICAgICBhd2FpdCBsb2FkQnJhbmRBc3NldChrZXksIGJyYW5kQXNzZXRzTWFuaWZlc3QsIGJ1Y2tldFBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJyYW5kQXNzZXQocmVzb3VyY2UsIGJyYW5kQXNzZXRzTWFuaWZlc3QsIGJ1Y2tldFBhdGgpIHtcbiAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3NldHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbWFuaWZlc3Q6IFwiLCk7XG4gIH1cblxuICBjb25zdCByID0gYnJhbmRBc3NldHNNYW5pZmVzdFtyZXNvdXJjZV07XG5cbiAgaWYgKCFyKSByZXR1cm47XG5cbiAgZm9yIChjb25zdCBhc3NldFBhdGggb2Ygcikge1xuICAgIGNvbnN0IHVybCA9IGAke2J1Y2tldFBhdGh9JHthc3NldFBhdGh9YDtcbiAgICBpZiAoYXNzZXRQYXRoLmVuZHNXaXRoKFwiLmpzXCIpKSB7XG4gICAgICBhd2FpdCBsb2FkQ29va2llR2F0ZWRTY3JpcHQodXJsKTtcbiAgICAgIGlmIChhc3NldFBhdGguZW5kc1dpdGgoXCIubWFwXCIpKSB7XG4gICAgICAgIGNvbnN0IG1hcFVybCA9IHVybCArIFwiLm1hcFwiO1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0TWFwKG1hcFVybCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhc3NldFBhdGguZW5kc1dpdGgoXCIuY3NzXCIpKSB7XG4gICAgICBhd2FpdCBsb2FkQ3NzKHVybCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTGl2ZVBlcnNvbkFzc2V0cyhyZXNvdXJjZSwgYnVja2V0UGF0aCkge1xuICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFzc2V0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBtYW5pZmVzdDogXCIsKTtcbiAgfVxuICBmb3IgKGNvbnN0IGFzc2V0UGF0aCBvZiByZXNvdXJjZSkge1xuICAgIGNvbnN0IHVybCA9IGAke2J1Y2tldFBhdGh9JHthc3NldFBhdGh9YDtcbiAgICBpZiAoYXNzZXRQYXRoLmVuZHNXaXRoKFwiLmpzXCIpKSB7XG4gICAgICBhd2FpdCBsb2FkQ29va2llR2F0ZWRTY3JpcHQodXJsKTtcbiAgICAgIGlmIChhc3NldFBhdGguZW5kc1dpdGgoXCIubWFwXCIpKSB7XG4gICAgICAgIGNvbnN0IG1hcFVybCA9IHVybCArIFwiLm1hcFwiO1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0TWFwKG1hcFVybCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhc3NldFBhdGguZW5kc1dpdGgoXCIuY3NzXCIpKSB7XG4gICAgICBhd2FpdCBsb2FkQ3NzKHVybCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ29va2llR2F0ZWRDb3JlQXNzZXRzKHJlc291cmNlLCBidWNrZXRQYXRoKSB7XG4gIC8vIElnbm9yZXMgQXNzZXQgTG9hZGVyLCBmaXJlcyBoZWFsdGggY2hlY2sgd2hlbiBkb25lXG4gIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ29yZSBBc3NldHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbWFuaWZlc3Q6IFwiLCk7XG4gIH1cbiAgY29uc3QgY29yZUFzc2V0cGF0aCA9IHJlc291cmNlLmZpbHRlcihhc3NldFBhdGggPT4gIWFzc2V0UGF0aC5pbmNsdWRlcygnYXNzZXQtbG9hZGVyJykpO1xuXG4gIGZvciAoY29uc3QgYXNzZXRQYXRoIG9mIGNvcmVBc3NldHBhdGgpIHtcbiAgICBjb25zdCB1cmwgPSBgJHtidWNrZXRQYXRofSR7YXNzZXRQYXRofWA7XG4gICAgaWYgKGFzc2V0UGF0aC5lbmRzV2l0aChcIi5qc1wiKSkge1xuICAgICAgYXdhaXQgbG9hZFNjcmlwdCh1cmwpO1xuICAgICAgaWYgKGFzc2V0UGF0aC5lbmRzV2l0aChcIi5tYXBcIikpIHtcbiAgICAgICAgY29uc3QgbWFwVXJsID0gdXJsICsgXCIubWFwXCI7XG4gICAgICAgIGF3YWl0IGxvYWRTY3JpcHRNYXAobWFwVXJsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gRW5zdXJlIGV2ZXJ5dGhpbmcgKGluY2x1ZGluZyBvdGhlciBwb3RlbnRpYWwgTFAgc2NyaXB0cykgaGF2ZSBsb2FkZWQgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBldmVudFxuXG4gIC8vIElnbm9yaW5nIGhlYWx0aCBjaGVjayBmb3Igbm93Li4uXG5cbiAgLy8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcbiAgLy8gICB3aW5kb3cuTGl2ZUNoYXQgPSB3aW5kb3cuTGl2ZUNoYXQgfHwge307XG4gIC8vICAgd2luZG93LkxpdmVDaGF0LmhlYWx0aCA9IHdpbmRvdy5MaXZlQ2hhdC5oZWFsdGggfHwge307XG4gIC8vICAgd2luZG93LkxpdmVDaGF0LmhlYWx0aC5saXZlcGVyc29uID0gd2luZG93LkxpdmVDaGF0LmhlYWx0aC5saXZlcGVyc29uIHx8IHt9O1xuXG4gIC8vICAgd2luZG93LkxpdmVDaGF0LmhlYWx0aC5saXZlcGVyc29uLmFzc2V0c0xvYWRlZCA9IHRydWU7XG4gIC8vICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJsaXZlcGVyc29uX2Fzc2V0c19sb2FkZWRcIikpO1xuICAvLyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDaGF0VWlBc3NldHMocmVzb3VyY2UsIGJ1Y2tldFBhdGgpIHtcbiAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGF0IFVJIEFzc2V0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBtYW5pZmVzdDogXCIsKTtcbiAgfVxuICBmb3IgKGNvbnN0IGFzc2V0UGF0aCBvZiByZXNvdXJjZSkge1xuICAgIGNvbnN0IHVybCA9IGAke2J1Y2tldFBhdGh9JHthc3NldFBhdGh9YDtcbiAgICBpZiAoYXNzZXRQYXRoLmVuZHNXaXRoKFwiLmpzXCIpKSB7XG4gICAgICBhd2FpdCBsb2FkU2NyaXB0KHVybCk7XG4gICAgICBpZiAoYXNzZXRQYXRoLmVuZHNXaXRoKFwiLm1hcFwiKSkge1xuICAgICAgICBjb25zdCBtYXBVcmwgPSB1cmwgKyBcIi5tYXBcIjtcbiAgICAgICAgYXdhaXQgbG9hZFNjcmlwdE1hcChtYXBVcmwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXNzZXRQYXRoLmVuZHNXaXRoKFwiLmNzc1wiKSkge1xuICAgICAgYXdhaXQgbG9hZENzcyh1cmwpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDYWxsZWQgbGFzdCBpbiB0aGUgYXNzZXQgbG9hZGVyIHBpcGVsaW5lXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybUxvY2FsU2V0dXAoKSB7XG4gIGNvbnNvbGUubG9nKFwiTElWRUNIQVQgPj4gTG9jYWwgc3lzdGVtIGluaXRpYWxpemluZy4uLlwiKTtcbiAgc2V0dXBMb2NhbExpdmVQZXJzb24oKTtcbn1cblxuZnVuY3Rpb24gc2V0dXBMb2NhbExpdmVQZXJzb24oKSB7XG4gIGNvbnNvbGUubG9nKFwiTElWRUNIQVQgPj4gU2V0dGluZyB1cCBsb2NhbCBMaXZlUGVyc29uIGVudmlyb25tZW50Li4uXCIpO1xuICAvLyBTZXQgdXAgdGhlIG1pbmltdW0gbW9jayBuZWNlc3NhcnkgZm9yIHRoZSBMaXZlQ2hhdCBVSSB0byB3b3JrIHdpdGggYSBsb2NhbGx5LW1vY2tlZCBMaXZlUGVyc29uIEVuZ2FnZW1lbnRcbiAgY29uc3QgYmVhdXR5RHJhd2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsaXZlY2hhdF9scF9kcmF3ZXJfYmVhdXR5XCIpO1xuICBjb25zdCBiZWF1dHlFbmdhZ2VtZW50ID0gYmVhdXR5RHJhd2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICBiZWF1dHlFbmdhZ2VtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1scC1lbmdhZ2VtZW50LWlkJywgJzEyMzQ1Njc4OTAnKTtcblxuICBjb25zdCBjdXN0b21lclN1cHBvcnREcmF3ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxpdmVjaGF0X2xwX2RyYXdlcl9jdXN0b21lcl9zdXBwb3J0XCIpO1xuICBjb25zdCBjdXN0b21lclN1cHBvcnRFbmdhZ2VtZW50ID0gY3VzdG9tZXJTdXBwb3J0RHJhd2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICBjdXN0b21lclN1cHBvcnRFbmdhZ2VtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1scC1lbmdhZ2VtZW50LWlkJywgJzA5ODc2NTQzMjEnKTtcblxuICB3aW5kb3cubHBUYWcgPSB3aW5kb3cubHBUYWcgfHwge307XG4gIHdpbmRvdy5scFRhZy50YWdsZXRzID0gd2luZG93LmxwVGFnLnRhZ2xldHMgfHwge307XG4gIHdpbmRvdy5scFRhZy50YWdsZXRzLnJlbmRlcmVyU3R1YiA9IHdpbmRvdy5scFRhZy50YWdsZXRzLnJlbmRlcmVyU3R1YiB8fCB7fTtcbiAgd2luZG93LmxwVGFnLnRhZ2xldHMucmVuZGVyZXJTdHViLmNsaWNrID0gZnVuY3Rpb24gKGVuZ2FnZW1lbnRJZCkge1xuICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtbHAtZW5nYWdlbWVudC1pZD1cIiR7ZW5nYWdlbWVudElkfVwiXWApKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZW5kZXJNb2NrTHBXaW5kb3coKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTW9ja0xwV2luZG93KCkge1xuICBjb25zdCBtb2NrTHBXaW5kb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBtb2NrTHBXaW5kb3cuaWQgPSBcImxwLXdpbmRvdy1tb2NrXCI7XG4gIG1vY2tMcFdpbmRvdy5zdHlsZSA9IFwicG9zaXRpb246IHN0aWNreTsgYm90dG9tOiAwOyBsZWZ0OiAwOyB3aWR0aDogMzUwcHg7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiA5OTk5OyBwYWRkaW5nOiAxMHB4OyBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIjtcbiAgY29uc3QgY2xvc2VCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICBjbG9zZUJ1dHRvbi50ZXh0Q29udGVudCA9IFwiWFwiO1xuICBjbG9zZUJ1dHRvbi5zdHlsZSA9IFwiZm9udDogYm9sZDsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IHJpZ2h0OiAwOyBwYWRkaW5nOiA1cHg7IGZvbnQtc2l6ZTogMS41cmVtO1wiO1xuICBjbG9zZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gbW9ja0xwV2luZG93LnJlbW92ZSgpO1xuICBtb2NrTHBXaW5kb3cuYXBwZW5kQ2hpbGQoY2xvc2VCdXR0b24pO1xuICBtb2NrTHBXaW5kb3cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgyXCIpKS50ZXh0Q29udGVudCA9IFwiTW9jayBMaXZlUGVyc29uIFdpbmRvd1wiO1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9ja0xwV2luZG93KTtcbn1cbiIsImV4cG9ydCBjbGFzcyBMaXZlQ2hhdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciB8fCBtZXNzYWdlIGluc3RhbmNlb2YgTGl2ZUNoYXRFcnJvcikge1xuICAgICAgICAgICAgc3VwZXIobWVzc2FnZS5tZXNzYWdlKTsgLy8gRXh0cmFjdCB0aGUgbWVzc2FnZSBpZiBhbiBFcnJvciBpcyBwYXNzZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaXZlQ2hhdEVycm9yXCI7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBMaXZlQ2hhdEVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxufVxuIiwiLy8gVGhpcyBzY3JpcHQgaXMgY3JlYXRlZCBhbmQgbWFpbnRhaW5lZCBieSBUaGUgR2xvYmFsIENoYXQgVGVhbSBhdCBUaGUgRXN0ZWUgTGF1ZGVyIENvbXBhbmllcy4gUGxlYXNlIHJhaXNlIGFueSBpc3N1ZXMgb3IgZmVhdHVyZSByZXF1ZXN0cyB3aXRoIG91ciB0ZWFtIGRpcmVjdGx5LlxuXG5pbXBvcnQge1xuICBsb2FkTGl2ZVBlcnNvbkFzc2V0cyxcbiAgbG9hZENvb2tpZUdhdGVkQ29yZUFzc2V0cyxcbiAgbG9hZEJyYW5kQXNzZXRzLFxuICBsb2FkQ2hhdFVpQXNzZXRzLFxuICBwZXJmb3JtTG9jYWxTZXR1cCxcbn0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2Fzc2V0LWxvYWRlci11dGlscy5qc1wiO1xuXG5pbXBvcnQge1xuICBMaXZlQ2hhdEVycm9yXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy9jb21tb24tdXRpbHMuanNcIjtcblxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWNrZXRQYXRoID0gYC9saXZlY2hhdGA7XG4gICAgY29uc3QgY29uZmlnID0gd2luZG93LkxpdmVDaGF0IHx8IG51bGw7XG4gICAgY29uc3QgbWFuaWZlc3QgPSB3aW5kb3cuTGl2ZUNoYXQubWFuaWZlc3QgfHwgbnVsbDtcblxuICAgIGlmICghY29uZmlnIHx8ICFtYW5pZmVzdCkge1xuICAgICAgdGhyb3cgbmV3IExpdmVDaGF0RXJyb3IoXG4gICAgICAgIFwiVGhlcmUgYXJlIGZpbGVzIG1pc3NpbmcgZnJvbSB0aGUgd2luZG93LkxpdmVDaGF0IG9iamVjdC4gQ2Fubm90IGxvYWQgTGl2ZUNoYXQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gd2luZG93LkxpdmVDaGF0LnJlc291cmNlcztcblxuICAgIGZ1bmN0aW9uIGlzRXhjbHVkZWRSb3V0ZShjdXJyZW50UGF0aCwgZXhjbHVkZWRSb3V0ZXMpIHtcbiAgICAgIGlmICghZXhjbHVkZWRSb3V0ZXMgfHwgIUFycmF5LmlzQXJyYXkoZXhjbHVkZWRSb3V0ZXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4Y2x1ZGVkUm91dGVzLnNvbWUocGF0dGVybiA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2V4UGF0dGVybiA9IHBhdHRlcm5cbiAgICAgICAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGV4Y2VwdCAqXG4gICAgICAgICAgLnJlcGxhY2UoL1suKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgICAgIC8vIFJlcGxhY2UgKiB3aXRoIHJlZ2V4IHBhdHRlcm4gZm9yIGFueSBjaGFyYWN0ZXJzXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKi9nLCAnLionKVxuICAgICAgICAgIC8vIEFuY2hvciB0byBzdGFydCBhbmQgZW5kXG4gICAgICAgICAgLnJlcGxhY2UoL14vLCAnXicpXG4gICAgICAgICAgLnJlcGxhY2UoLyQvLCAnJCcpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFBhdHRlcm4pO1xuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChjdXJyZW50UGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBMaXZlQ2hhdCBVSVxuICAgIGlmIChyZXNvdXJjZXMudWkgJiYgcmVzb3VyY2VzLnVpLmVuYWJsZWQpIHtcbiAgICAgIGxldCBleGNsdWRlZFJvdXRlcyA9IHJlc291cmNlcy51aS5leGNsdWRlZF9yb3V0ZXMgfHwgW107XG4gICAgICBjb25zdCBnbG9iYWxFeGNsdXNpb25zID0gW1wiL2NoZWNrb3V0KlwiLCBcIi9jYXJ0KlwiLCBcIi9pZnJhbWUqXCJdO1xuICAgICAgZXhjbHVkZWRSb3V0ZXMucHVzaCguLi5nbG9iYWxFeGNsdXNpb25zKTtcblxuICAgICAgY29uc3QgY3VycmVudFBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgICAgIGlmICghaXNFeGNsdWRlZFJvdXRlKGN1cnJlbnRQYXRoLCBleGNsdWRlZFJvdXRlcykpIHtcbiAgICAgICAgY29uc3QgbGl2ZUNoYXRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbGl2ZUNoYXRDb250YWluZXIuaWQgPSAnbGl2ZS1jaGF0LXVpLWNvbnRhaW5lcic7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGl2ZUNoYXRDb250YWluZXIpO1xuXG4gICAgICAgIGNvbnN0IGJlYXV0eURyYXdlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGJlYXV0eURyYXdlci5pZCA9IFwibGl2ZWNoYXRfbHBfZHJhd2VyX2JlYXV0eVwiO1xuICAgICAgICBsaXZlQ2hhdENvbnRhaW5lci5hcHBlbmRDaGlsZChiZWF1dHlEcmF3ZXIpO1xuXG4gICAgICAgIGNvbnN0IGN1c3RvbWVyU3VwcG9ydERyYXdlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGN1c3RvbWVyU3VwcG9ydERyYXdlci5pZCA9IFwibGl2ZWNoYXRfbHBfZHJhd2VyX2N1c3RvbWVyX3N1cHBvcnRcIjtcbiAgICAgICAgbGl2ZUNoYXRDb250YWluZXIuYXBwZW5kQ2hpbGQoY3VzdG9tZXJTdXBwb3J0RHJhd2VyKTtcblxuICAgICAgICBhd2FpdCBsb2FkQ2hhdFVpQXNzZXRzKG1hbmlmZXN0LnVpLCBidWNrZXRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXZlUGVyc29uXG4gICAgaWYgKHJlc291cmNlcy5saXZlcGVyc29uICYmIHJlc291cmNlcy5saXZlcGVyc29uLmVuYWJsZWQpIHtcbiAgICAgIGF3YWl0IGxvYWRMaXZlUGVyc29uQXNzZXRzKG1hbmlmZXN0LmxpdmVwZXJzb24sIGJ1Y2tldFBhdGgpO1xuICAgICAgLy9jb3JlIEFzc2V0c1xuICAgICAgbG9hZENvb2tpZUdhdGVkQ29yZUFzc2V0cyhtYW5pZmVzdC5hc3NldF9sb2FkZXIsIGJ1Y2tldFBhdGgpO1xuICAgIH1cblxuICAgIC8vIEJyYW5kIEFzc2V0c1xuICAgIGlmIChjb25maWcuYnJhbmRfYXNzZXRzX21hbmlmZXN0X2ZpbGVuYW1lKSB7XG4gICAgICBjb25zdCBicmFuZEFzc2V0c01hbmlmZXN0ID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGAke2J1Y2tldFBhdGh9L2JyYW5kcy8ke2NvbmZpZy5icmFuZF9hc3NldHNfbWFuaWZlc3RfZmlsZW5hbWV9YFxuICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKTtcbiAgICAgIGF3YWl0IGxvYWRCcmFuZEFzc2V0cyhyZXNvdXJjZXMsIGJyYW5kQXNzZXRzTWFuaWZlc3QsIGJ1Y2tldFBhdGgpO1xuICAgIH1cblxuICAgIC8vIExvY2FsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zXG4gICAgaWYgKGNvbmZpZy5pc19sb2NhbF9jb25maWcpIHtcbiAgICAgIHBlcmZvcm1Mb2NhbFNldHVwKCk7XG4gICAgfVxuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IExpdmVDaGF0RXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gIH1cbn0pKCk7XG4iXSwibmFtZXMiOlsibG9hZFNjcmlwdCIsInVybCIsImNhbGxiYWNrIiwic2NyaXB0IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwidHlwZSIsImRhdGFzZXQiLCJzb3VyY2VNYXAiLCJvbmxvYWQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJsb2FkQ29va2llR2F0ZWRTY3JpcHQiLCJ3aW5kb3ciLCJPbmVUcnVzdCIsIkluc2VydFNjcmlwdCIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwibG9hZENvb2tpZUdhdGVkU2NyaXB0RmFsbGJhY2siLCJjbGVhckludGVydmFsIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImNsYXNzTmFtZSIsImxvYWRTY3JpcHRNYXAiLCJzY3JpcHRVcmwiLCJtYXBVcmwiLCJxdWVyeVNlbGVjdG9yIiwibG9hZENzcyIsImxpbmsiLCJyZWwiLCJocmVmIiwibG9hZEJyYW5kQXNzZXRzIiwicmVzb3VyY2VzIiwiYnJhbmRBc3NldHNNYW5pZmVzdCIsImJ1Y2tldFBhdGgiLCJFcnJvciIsImtleSIsImVuYWJsZWQiLCJsb2FkQnJhbmRBc3NldCIsInJlc291cmNlIiwiciIsImFzc2V0UGF0aCIsImVuZHNXaXRoIiwibG9hZExpdmVQZXJzb25Bc3NldHMiLCJsb2FkQ29va2llR2F0ZWRDb3JlQXNzZXRzIiwiY29yZUFzc2V0cGF0aCIsImZpbHRlciIsImluY2x1ZGVzIiwibG9hZENoYXRVaUFzc2V0cyIsInBlcmZvcm1Mb2NhbFNldHVwIiwiY29uc29sZSIsImxvZyIsInNldHVwTG9jYWxMaXZlUGVyc29uIiwiYmVhdXR5RHJhd2VyIiwiZ2V0RWxlbWVudEJ5SWQiLCJiZWF1dHlFbmdhZ2VtZW50Iiwic2V0QXR0cmlidXRlIiwiY3VzdG9tZXJTdXBwb3J0RHJhd2VyIiwiY3VzdG9tZXJTdXBwb3J0RW5nYWdlbWVudCIsImxwVGFnIiwidGFnbGV0cyIsInJlbmRlcmVyU3R1YiIsImNsaWNrIiwiZW5nYWdlbWVudElkIiwicmVuZGVyTW9ja0xwV2luZG93IiwibW9ja0xwV2luZG93IiwiaWQiLCJzdHlsZSIsImNsb3NlQnV0dG9uIiwidGV4dENvbnRlbnQiLCJvbmNsaWNrIiwicmVtb3ZlIiwiYm9keSIsIkxpdmVDaGF0RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1lc3NhZ2UiLCJuYW1lIiwiT2JqZWN0Iiwic2V0UHJvdG90eXBlT2YiLCJwcm90b3R5cGUiLCJpc0V4Y2x1ZGVkUm91dGUiLCJjdXJyZW50UGF0aCIsImV4Y2x1ZGVkUm91dGVzIiwiQXJyYXkiLCJpc0FycmF5Iiwic29tZSIsInBhdHRlcm4iLCJyZWdleFBhdHRlcm4iLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJ0ZXN0IiwiY29uZmlnIiwiTGl2ZUNoYXQiLCJtYW5pZmVzdCIsInVpIiwiZXhjbHVkZWRfcm91dGVzIiwicHVzaCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJsaXZlQ2hhdENvbnRhaW5lciIsImxpdmVwZXJzb24iLCJhc3NldF9sb2FkZXIiLCJicmFuZF9hc3NldHNfbWFuaWZlc3RfZmlsZW5hbWUiLCJmZXRjaCIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJpc19sb2NhbF9jb25maWciLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbU5BRUEsZUFBc0JBLFVBQVVBLENBQUNDLENBQUcsQ0FBRUMsQ0FBUSxDQUFFLENBQzlDLE1BQU1DLENBQU0sQ0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQy9DRixDQUFNLENBQUNHLEdBQUcsQ0FBR0wsQ0FBRyxDQUNoQkUsQ0FBTSxDQUFDSSxJQUFJLENBQUcsaUJBQWlCLENBQy9CSixDQUFNLENBQUNLLE9BQU8sQ0FBQ0MsU0FBUyxDQUFHUixDQUFHLENBQUcsTUFBTSxDQUNuQ0MsQ0FBUSxHQUFFQyxDQUFNLENBQUNPLE1BQU0sQ0FBR1IsQ0FBUSxFQUN0Q0UsUUFBUSxDQUFDTyxJQUFJLENBQUNDLFdBQVcsQ0FBQ1QsQ0FBTSxFQUNsQyxDQUVBLGVBQXNCVSxxQkFBcUJBLENBQUNaLENBQUcsQ0FBRSxDQUcvQyxHQUFJYSxNQUFNLENBQUNDLFFBQVEsRUFBSUQsTUFBTSxDQUFDQyxRQUFRLENBQUNDLFlBQVksQ0FFakQsWUFEQUQsUUFBUSxDQUFDQyxZQUFZLENBQUNmLENBQUcsQ0FBRSxNQUFNLENBQUUsSUFBSSxDQUFFLElBQUksSUFBMEIsQ0FBQyxDQUV6RSxNQUVLZ0IsQ0FBTyxDQUFHQyxVQUFVLENBQUMsSUFBTSxDQUMxQkosTUFBTSxDQUFDQyxRQUFRLEVBQ2xCSSw2QkFBNkIsQ0FBQ2xCLENBQUcsQ0FBQyxDQUVwQ21CLGFBQWEsQ0FBQ0MsQ0FBUSxFQUN4QixDQUFDLENBQUUsR0FBSyxDQUFDLENBRUhBLENBQVEsQ0FBR0MsV0FBVyxDQUFDLElBQU0sQ0FDN0JSLE1BQU0sQ0FBQ0MsUUFBUSxHQUNqQkEsUUFBUSxDQUFDQyxZQUFZLENBQUNmLENBQUcsQ0FBRSxNQUFNLENBQUUsSUFBSSxDQUFFLElBQUksQ0FBRSxHQUFHLENBQUMsQ0FDbkRzQixZQUFZLENBQUNOLENBQU8sQ0FBQyxDQUNyQkcsYUFBYSxDQUFDQyxDQUFRLENBQUMsRUFFM0IsQ0FBQyxDQUFFLEdBQUcsRUFDUixDQUVBLFNBQVNGLDZCQUE2QkEsQ0FBQ2xCLENBQUcsQ0FBRSxDQUMxQyxNQUFNRSxDQUFNLENBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUMvQ0YsQ0FBTSxDQUFDRyxHQUFHLENBQUdMLENBQUcsQ0FDaEJFLENBQU0sQ0FBQ3FCLFNBQVMsQ0FBRyxvQkFBb0IsQ0FDdkNyQixDQUFNLENBQUNJLElBQUksQ0FBRyxZQUFZLENBQzFCSCxRQUFRLENBQUNPLElBQUksQ0FBQ0MsV0FBVyxDQUFDVCxDQUFNLEVBQ2xDLENBRUEsZUFBc0JzQixhQUFhQSxDQUFDQyxDQUFTLENBQUVDLENBQU0sQ0FBRSxDQUNyRCxNQUFNeEIsQ0FBTSxDQUFHQyxRQUFRLENBQUN3QixhQUFhLENBQUUsZUFBY0YsQ0FBVSxJQUFHLENBQUMsQ0FDL0R2QixDQUFNLEdBQ1JBLENBQU0sQ0FBQ0ssT0FBTyxDQUFDQyxTQUFTLENBQUdrQixDQUFNLEVBRXJDLENBRUEsZUFBc0JFLE9BQU9BLENBQUM1QixDQUFHLENBQUUsQ0FDakMsTUFBTTZCLENBQUksQ0FBRzFCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUMzQ3lCLENBQUksQ0FBQ0MsR0FBRyxDQUFHLFlBQVksQ0FDdkJELENBQUksQ0FBQ0UsSUFBSSxDQUFHL0IsQ0FBRyxDQUNmNkIsQ0FBSSxDQUFDdEIsT0FBTyxDQUFDQyxTQUFTLENBQUdSLENBQUcsQ0FBRyxNQUFNLENBQ3JDRyxRQUFRLENBQUNPLElBQUksQ0FBQ0MsV0FBVyxDQUFDa0IsQ0FBSSxFQUNoQyxDQUVBLGVBQXNCRyxlQUFlQSxDQUFDQyxDQUFTLENBQUVDLENBQW1CLENBQUVDLENBQVUsQ0FBRSxDQUNoRixHQUFJRCxDQUFtQixTQUFjLENBQ25DLFVBQVVFLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUdwRSxJQUFLLE1BQU1DLENBQUcsSUFBSUosQ0FBUyxFQUNyQkEsQ0FBUyxDQUFDSSxDQUFHLENBQUMsQ0FBQ0MsT0FBTyxFQUF1QixNQUFNLEdBQXpCTCxDQUFTLENBQUNJLENBQUcsQ0FBWSxJQUNyRCxNQUFNRSxjQUFjLENBQUNGLENBQUcsQ0FBRUgsQ0FBbUIsQ0FBRUMsQ0FBVSxDQUFDLEVBR2hFLENBRUEsZUFBc0JJLGNBQWNBLENBQUNDLENBQVEsQ0FBRU4sQ0FBbUIsQ0FBRUMsQ0FBVSxDQUFFLENBQzlFLEdBQUlLLENBQVEsU0FBYyxDQUN4QixVQUFVSixLQUFLLENBQUMsd0NBQXlDLENBQUMsQ0FHNUQsTUFBTUssQ0FBQyxDQUFHUCxDQUFtQixDQUFDTSxDQUFRLENBQUMsQ0FFdkMsR0FBS0MsQ0FBQyxDQUVOLElBQUssTUFBTUMsQ0FBUyxJQUFJRCxDQUFDLENBQUUsQ0FDekIsTUFBTXpDLENBQUcsQ0FBSSxHQUFFbUMsQ0FBVyxHQUFFTyxDQUFVLEVBQUMsQ0FDdkMsSUFBSUEsQ0FBUyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBTWxCRCxDQUFTLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FDbkMsTUFBTWYsT0FBTyxDQUFDNUIsQ0FBRyxDQUFDLFVBTmxCLE1BQU1ZLHFCQUFxQixDQUFDWixDQUFHLENBQUMsQ0FDNUIwQyxDQUFTLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUU5QixNQUFNbkIsYUFBYSxDQURKeEIsQ0FBRyxDQUFHLE1BQ0ssRUFDNUIsQ0FJSixDQUNGLENBRUEsZUFBc0I0QyxvQkFBb0JBLENBQUNKLENBQVEsQ0FBRUwsQ0FBVSxDQUFFLENBQy9ELEdBQUlLLENBQVEsU0FBYyxDQUN4QixVQUFVSixLQUFLLENBQUMsd0NBQXlDLENBQUMsQ0FFNUQsSUFBSyxNQUFNTSxDQUFTLElBQUlGLENBQVEsQ0FBRSxDQUNoQyxNQUFNeEMsQ0FBRyxDQUFJLEdBQUVtQyxDQUFXLEdBQUVPLENBQVUsRUFBQyxDQUN2QyxJQUFJQSxDQUFTLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FNbEJELENBQVMsQ0FBQ0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUNuQyxNQUFNZixPQUFPLENBQUM1QixDQUFHLENBQUMsVUFObEIsTUFBTVkscUJBQXFCLENBQUNaLENBQUcsQ0FBQyxDQUM1QjBDLENBQVMsQ0FBQ0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFFLENBRTlCLE1BQU1uQixhQUFhLENBREp4QixDQUFHLENBQUcsTUFDSyxFQUM1QixDQUlKLENBQ0YsQ0FFQSxlQUFzQjZDLHlCQUF5QkEsQ0FBQ0wsQ0FBUSxDQUFFTCxDQUFVLENBQUU7QUFFcEUsR0FBSUssQ0FBUSxTQUFjLENBQ3hCLFVBQVVKLEtBQUssQ0FBQyw2Q0FBOEMsQ0FBQyxDQUVqRSxNQUFNVSxDQUFhLENBQUdOLENBQVEsQ0FBQ08sTUFBTSxDQUFDTCxDQUFTLEVBQUksQ0FBQ0EsQ0FBUyxDQUFDTSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FFdkYsSUFBSyxNQUFNTixDQUFTLElBQUlJLENBQWEsQ0FBRSxDQUNyQyxNQUFNOUMsQ0FBRyxDQUFJLEdBQUVtQyxDQUFXLEdBQUVPLENBQVUsRUFBQyxDQUN2QyxHQUFJQSxDQUFTLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FDM0IsTUFBTTVDLFVBQVUsQ0FBQ0MsQ0FBRyxDQUFDLENBQ2pCMEMsQ0FBUyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FFOUIsTUFBTW5CLGFBQWEsQ0FESnhCLENBQUcsQ0FBRyxNQUNLLEVBQzVCLENBRUosQ0FDQTs7Ozs7Ozs7O0NBY0YsZUFBc0JpRCxnQkFBZ0JBLENBQUNULENBQVEsQ0FBRUwsQ0FBVSxDQUFFLENBQzNELEdBQUlLLENBQVEsU0FBYyxDQUN4QixVQUFVSixLQUFLLENBQUMsZ0RBQWlELENBQUMsQ0FFcEUsSUFBSyxNQUFNTSxDQUFTLElBQUlGLENBQVEsQ0FBRSxDQUNoQyxNQUFNeEMsQ0FBRyxDQUFJLEdBQUVtQyxDQUFXLEdBQUVPLENBQVUsRUFBQyxDQUN2QyxJQUFJQSxDQUFTLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FNbEJELENBQVMsQ0FBQ0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUNuQyxNQUFNZixPQUFPLENBQUM1QixDQUFHLENBQUMsVUFObEIsTUFBTUQsVUFBVSxDQUFDQyxDQUFHLENBQUMsQ0FDakIwQyxDQUFTLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUU5QixNQUFNbkIsYUFBYSxDQURKeEIsQ0FBRyxDQUFHLE1BQ0ssRUFDNUIsQ0FJSixDQUNGLENBRUE7QUFDQSxTQUFnQmtELGlCQUFpQkEsRUFBRyxDQUNsQ0MsT0FBTyxDQUFDQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FDdkRDLG9CQUFvQixHQUN0QixDQUVBLFNBQVNBLG9CQUFvQkEsRUFBRyxDQUM5QkYsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0RBQXdELENBQUMsQ0FDckU7QUFBQSxNQUNNRSxDQUFZLENBQUduRCxRQUFRLENBQUNvRCxjQUFjLENBQUMsMkJBQTJCLENBQUMsQ0FDbkVDLENBQWdCLENBQUdGLENBQVksQ0FBQzNDLFdBQVcsQ0FBQ1IsUUFBUSxDQUFDQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ08sV0FBVyxDQUFDUixRQUFRLENBQUNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMzSG9ELENBQWdCLENBQUNDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBRSxZQUFZLENBQUMsT0FFOURDLENBQXFCLENBQUd2RCxRQUFRLENBQUNvRCxjQUFjLENBQUMscUNBQXFDLENBQUMsQ0FDdEZJLENBQXlCLENBQUdELENBQXFCLENBQUMvQyxXQUFXLENBQUNSLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUNPLFdBQVcsQ0FBQ1IsUUFBUSxDQUFDQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDN0l1RCxDQUF5QixDQUFDRixZQUFZLENBQUMsdUJBQXVCLENBQUUsWUFBWSxDQUFDLENBRTdFNUMsTUFBTSxDQUFDK0MsS0FBSyxDQUFHL0MsTUFBTSxDQUFDK0MsS0FBSyxFQUFJLEVBQUUsQ0FDakMvQyxNQUFNLENBQUMrQyxLQUFLLENBQUNDLE9BQU8sQ0FBR2hELE1BQU0sQ0FBQytDLEtBQUssQ0FBQ0MsT0FBTyxFQUFJLEVBQUUsQ0FDakRoRCxNQUFNLENBQUMrQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0MsWUFBWSxDQUFHakQsTUFBTSxDQUFDK0MsS0FBSyxDQUFDQyxPQUFPLENBQUNDLFlBQVksRUFBSSxFQUFFLENBQzNFakQsTUFBTSxDQUFDK0MsS0FBSyxDQUFDQyxPQUFPLENBQUNDLFlBQVksQ0FBQ0MsS0FBSyxDQUFHLFNBQVVDLENBQVksQ0FBRSxTQUMzRDdELFFBQVEsQ0FBQ3dCLGFBQWEsQ0FBRSwyQkFBMEJxQyxDQUFhLElBQUcsQ0FBQyxHQUV4RUMsa0JBQWtCLEVBQUUsSUFFdEIsRUFDRixDQUVBLFNBQVNBLGtCQUFrQkEsRUFBRyxDQUM1QixNQUFNQyxDQUFZLENBQUcvRCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDbEQ4RCxDQUFZLENBQUNDLEVBQUUsQ0FBRyxnQkFBZ0IsQ0FDbENELENBQVksQ0FBQ0UsS0FBSyxDQUFHLG9KQUFvSixDQUN6SyxNQUFNQyxDQUFXLENBQUdsRSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FDcERpRSxDQUFXLENBQUNDLFdBQVcsQ0FBRyxHQUFHLENBQzdCRCxDQUFXLENBQUNELEtBQUssQ0FBRyxvRkFBb0YsQ0FDeEdDLENBQVcsQ0FBQ0UsT0FBTyxDQUFHLElBQU1MLENBQVksQ0FBQ00sTUFBTSxFQUFFLENBQ2pETixDQUFZLENBQUN2RCxXQUFXLENBQUMwRCxDQUFXLENBQUMsQ0FDckNILENBQVksQ0FBQ3ZELFdBQVcsQ0FBQ1IsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2tFLFdBQVcsQ0FBRyx3QkFBd0IsQ0FFN0ZuRSxRQUFRLENBQUNzRSxJQUFJLENBQUM5RCxXQUFXLENBQUN1RCxDQUFZLEVBQ3hDOztNQ3hNYVEsYUFBYSxTQUFTdEMsS0FBTSxDQUNyQ3VDLFdBQVdBLENBQUNDLENBQU8sQ0FBRSxDQUNiQSxDQUFPLFlBQVl4QyxLQUFLLEVBQUl3QyxDQUFPLFlBQVlGLGFBQWEsQ0FDNUQsS0FBSyxDQUFDRSxDQUFPLENBQUNBLE9BQU8sQ0FBQyxDQUV0QixLQUFLLENBQUNBLENBQU8sQ0FBQyxDQUdsQixJQUFJLENBQUNDLElBQUksQ0FBRyxlQUFlLENBQzNCQyxNQUFNLENBQUNDLGNBQWMsQ0FBQyxJQUFJLENBQUVMLGFBQWEsQ0FBQ00sU0FBUyxFQUN2RCxDQUNKOztBQ1hBO0FBRUEsQUFZQSxDQUFDLGdCQUFrQixDQUNqQixHQUFJLENBYUYsU0FBU0MsQ0FBZUEsQ0FBQ0MsQ0FBVyxDQUFFQyxDQUFjLENBQUUsVUFDL0NBLENBQWMsRUFBS0MsS0FBSyxDQUFDQyxPQUFPLENBQUNGLENBQWMsQ0FBQyxHQUk5Q0EsQ0FBYyxDQUFDRyxJQUFJLENBQUNDLENBQU8sRUFBSSxPQUM5QkMsQ0FBWSxDQUFHRCxDQUNuQjtDQUNDRSxPQUFPLENBQUMsb0JBQW9CLENBQUUsTUFBTSxDQUNyQztDQUNDQSxPQUFPLENBQUMsS0FBSyxDQUFFLElBQUksQ0FDcEI7Q0FDQ0EsT0FBTyxDQUFDLEdBQUcsQ0FBRSxHQUFHLENBQUMsQ0FDakJBLE9BQU8sQ0FBQyxHQUFHLENBQUUsR0FBRyxDQUFDLENBRWRDLENBQUssQ0FBRyxJQUFJQyxNQUFNLENBQUNILENBQVksQ0FBQyxDQUN0QyxPQUFPRSxDQUFLLENBQUNFLElBQUksQ0FBQ1YsQ0FBVyxDQUMvQixDQUFDLENBQ0gsQ0FFQTtBQUFBLE1BaENNL0MsQ0FBVSxDQUFJLFdBQVUsQ0FDeEIwRCxDQUFNLENBQUdoRixNQUFNLENBQUNpRixRQUFRLEVBQUksSUFBSSxDQUNoQ0MsQ0FBUSxDQUFHbEYsTUFBTSxDQUFDaUYsUUFBUSxDQUFDQyxRQUFRLEVBQUksSUFBSSxDQUVqRCxHQUFJLENBQUNGLENBQU0sRUFBSSxDQUFDRSxDQUFRLENBQ3RCLFVBQVVyQixhQUFhLENBQ3JCLGdGQUNGLENBQUMsQ0FHSCxNQUFNekMsQ0FBUyxDQUFHcEIsTUFBTSxDQUFDaUYsUUFBUSxDQUFDN0QsU0FBUyxDQXVCM0MsR0FBSUEsQ0FBUyxDQUFDK0QsRUFBRSxFQUFJL0QsQ0FBUyxDQUFDK0QsRUFBRSxDQUFDMUQsT0FBTyxDQUFFLENBQ3hDLElBQUk2QyxDQUFjLENBQUdsRCxDQUFTLENBQUMrRCxFQUFFLENBQUNDLGVBQWUsRUFBSSxFQUFFLENBRXZEZCxDQUFjLENBQUNlLElBQUksQ0FBQyxHQURLLENBQUMsWUFBWSxDQUFFLFFBQVEsQ0FBRSxVQUFVLENBQ3JCLENBQUMsQ0FFeEMsTUFBTWhCLENBQVcsQ0FBR3JFLE1BQU0sQ0FBQ3NGLFFBQVEsQ0FBQ0MsUUFBUSxDQUU1QyxHQUFJLENBQUNuQixDQUFlLENBQUNDLENBQVcsQ0FBRUMsQ0FBYyxDQUFDLENBQUUsQ0FDakQsTUFBTWtCLENBQWlCLENBQUdsRyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FDdkRpRyxDQUFpQixDQUFDbEMsRUFBRSxDQUFHLHdCQUF3QixDQUMvQ2hFLFFBQVEsQ0FBQ3NFLElBQUksQ0FBQzlELFdBQVcsQ0FBQzBGLENBQWlCLENBQUMsQ0FFNUMsTUFBTS9DLENBQVksQ0FBR25ELFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUNsRGtELENBQVksQ0FBQ2EsRUFBRSxDQUFHLDJCQUEyQixDQUM3Q2tDLENBQWlCLENBQUMxRixXQUFXLENBQUMyQyxDQUFZLENBQUMsQ0FFM0MsTUFBTUksQ0FBcUIsQ0FBR3ZELFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUMzRHNELENBQXFCLENBQUNTLEVBQUUsQ0FBRyxxQ0FBcUMsQ0FDaEVrQyxDQUFpQixDQUFDMUYsV0FBVyxDQUFDK0MsQ0FBcUIsQ0FBQyxDQUVwRCxNQUFNVCxnQkFBZ0IsQ0FBQzhDLENBQVEsQ0FBQ0MsRUFBRSxDQUFFN0QsQ0FBVSxFQUNoRCxDQUNGLENBRUE7O0FBUUEsR0FQSUYsQ0FBUyxDQUFDcUUsVUFBVSxFQUFJckUsQ0FBUyxDQUFDcUUsVUFBVSxDQUFDaEUsT0FBTyxHQUN0RCxNQUFNTSxvQkFBb0IsQ0FBQ21ELENBQVEsQ0FBQ08sVUFBVSxZQUFZLENBQUMsQ0FFM0R6RCx5QkFBeUIsQ0FBQ2tELENBQVEsQ0FBQ1EsWUFBWSxZQUFZLENBQUMsRUFJMURWLENBQU0sQ0FBQ1csOEJBQThCLENBQUUsQ0FDekMsTUFBTXRFLENBQW1CLENBQUcsTUFBTXVFLEtBQUssQ0FDcEMsR0FBRXRFLENBQVcsV0FBVTBELENBQU0sQ0FBQ1csOEJBQStCLEVBQ2hFLENBQUMsQ0FBQ0UsSUFBSSxDQUFFQyxDQUFRLEVBQUtBLENBQVEsQ0FBQ0MsSUFBSSxFQUFFLENBQUMsQ0FDckMsTUFBTTVFLGVBQWUsQ0FBQ0MsQ0FBUyxDQUFFQyxDQUFtQixDQUFFQyxDQUFVLEVBQ2xFLENBRUE7QUFDSTBELENBQU0sQ0FBQ2dCLGVBQWUsRUFDeEIzRCxpQkFBaUIsR0FHckIsQ0FBRSxNQUFPNEQsQ0FBSyxDQUFFLENBQ2QsVUFBVXBDLGFBQWEsQ0FBQ29DLENBQUssQ0FBQ2xDLE9BQU8sQ0FDdkMsQ0FDRixDQUFDLEdBQUc7Ozs7In0="}