diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/accessible/generic/ARIAGridAccessible.cpp firefox-trunk-67.0~a1~hg20190207r457544/accessible/generic/ARIAGridAccessible.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/accessible/generic/ARIAGridAccessible.cpp 2019-02-06 08:02:34.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/accessible/generic/ARIAGridAccessible.cpp 2019-02-07 12:50:25.000000000 +0000
@@ -553,6 +553,11 @@
Accessible* thisRow = Row();
if (!thisRow) return attributes.forget();
+ int32_t rowIdx = RowIndexFor(thisRow);
+ if (rowIdx == -1) { // error
+ return attributes.forget();
+ }
+
int32_t colIdx = 0, colCount = 0;
uint32_t childCount = thisRow->ChildCount();
for (uint32_t childIdx = 0; childIdx < childCount; childIdx++) {
@@ -565,8 +570,6 @@
colCount++;
}
- int32_t rowIdx = RowIndexFor(thisRow);
-
nsAutoString stringIdx;
stringIdx.AppendInt(rowIdx * colCount + colIdx);
nsAccUtils::SetAccAttr(attributes, nsGkAtoms::tableCellIndex, stringIdx);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/accessible/generic/ARIAGridAccessible.h firefox-trunk-67.0~a1~hg20190207r457544/accessible/generic/ARIAGridAccessible.h
--- firefox-trunk-67.0~a1~hg20190205r457303/accessible/generic/ARIAGridAccessible.h 2019-02-06 08:02:34.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/accessible/generic/ARIAGridAccessible.h 2019-02-07 12:50:25.000000000 +0000
@@ -114,6 +114,7 @@
/**
* Return index of the given row.
+ * Returns -1 upon error.
*/
int32_t RowIndexFor(Accessible* aRow) const;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/accessible/windows/msaa/XULMenuAccessibleWrap.cpp firefox-trunk-67.0~a1~hg20190207r457544/accessible/windows/msaa/XULMenuAccessibleWrap.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/accessible/windows/msaa/XULMenuAccessibleWrap.cpp 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/accessible/windows/msaa/XULMenuAccessibleWrap.cpp 2019-02-07 12:50:25.000000000 +0000
@@ -46,6 +46,10 @@
pszKeyboardShortcut);
}
+ if (IsDefunct()) {
+ return CO_E_OBJNOTCONNECTED;
+ }
+
KeyBinding keyBinding = AccessKey();
if (keyBinding.IsEmpty()) {
return S_FALSE;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/app/permissions firefox-trunk-67.0~a1~hg20190207r457544/browser/app/permissions
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/app/permissions 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/app/permissions 2019-02-07 12:50:25.000000000 +0000
@@ -17,7 +17,6 @@
# XPInstall
origin install 1 https://addons.mozilla.org
-origin install 1 https://testpilot.firefox.com
# Remote troubleshooting
origin remote-troubleshooting 1 https://input.mozilla.org
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/app/profile/firefox.js firefox-trunk-67.0~a1~hg20190207r457544/browser/app/profile/firefox.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/app/profile/firefox.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/app/profile/firefox.js 2019-02-07 12:50:25.000000000 +0000
@@ -1554,6 +1554,9 @@
pref("browser.contentblocking.control-center.ui.showBlockedLabels", true);
pref("browser.contentblocking.control-center.ui.showAllowedLabels", false);
+pref("browser.contentblocking.cryptomining.preferences.ui.enabled", false);
+pref("browser.contentblocking.fingerprinting.preferences.ui.enabled", false);
+
// Enable the Report Breakage UI on Nightly and Beta but not on Release yet.
#ifdef EARLY_BETA_OR_EARLIER
pref("browser.contentblocking.reportBreakage.enabled", true);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/browser.js firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/browser.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/browser.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/browser.js 2019-02-07 12:50:25.000000000 +0000
@@ -6186,7 +6186,7 @@
// bar's behavior (stripsurroundingwhitespace)
clipboard = clipboard.replace(/\s*\n\s*/g, "");
- clipboard = stripUnsafeProtocolOnPaste(clipboard);
+ clipboard = UrlbarUtils.stripUnsafeProtocolOnPaste(clipboard);
// if it's not the current tab, we don't need to do anything because the
// browser doesn't exist.
@@ -6227,23 +6227,6 @@
}
}
-function stripUnsafeProtocolOnPaste(pasteData) {
- // Don't allow pasting javascript URIs since we don't support
- // LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL for those.
- while (true) {
- let scheme = "";
- try {
- scheme = Services.io.extractScheme(pasteData);
- } catch (ex) { }
- if (scheme != "javascript") {
- break;
- }
-
- pasteData = pasteData.substring(pasteData.indexOf(":") + 1);
- }
- return pasteData;
-}
-
// handleDroppedLink has the following 2 overloads:
// handleDroppedLink(event, url, name, triggeringPrincipal)
// handleDroppedLink(event, links, triggeringPrincipal)
@@ -6356,18 +6339,29 @@
return triggerNode;
},
- updateExtension(popup) {
+ _getExtensionId(popup) {
+ let node = this._getUnwrappedTriggerNode(popup);
+ return node && node.getAttribute("data-extensionid");
+ },
+
+ async updateExtension(popup) {
let removeExtension = popup.querySelector(".customize-context-removeExtension");
let manageExtension = popup.querySelector(".customize-context-manageExtension");
let separator = removeExtension.nextElementSibling;
- let node = this._getUnwrappedTriggerNode(popup);
- let isWebExt = node && node.hasAttribute("data-extensionid");
- removeExtension.hidden = manageExtension.hidden = separator.hidden = !isWebExt;
+ let id = this._getExtensionId(popup);
+ let addon = id && await AddonManager.getAddonByID(id);
+ removeExtension.hidden = manageExtension.hidden = separator.hidden = !addon;
+ if (addon) {
+ removeExtension.disabled = !(addon.permissions & AddonManager.PERM_CAN_UNINSTALL);
+ }
},
async removeExtensionForContextAction(popup) {
- let id = this._getUnwrappedTriggerNode(popup).getAttribute("data-extensionid");
- let addon = await AddonManager.getAddonByID(id);
+ let id = this._getExtensionId(popup);
+ let addon = id && await AddonManager.getAddonByID(id);
+ if (!addon || !(addon.permissions & AddonManager.PERM_CAN_UNINSTALL)) {
+ return;
+ }
let {name} = addon;
let brand = document.getElementById("bundle_brand").getString("brandShorterName");
let {getFormattedString, getString} = gNavigatorBundle;
@@ -6385,9 +6379,11 @@
},
openAboutAddonsForContextAction(popup) {
- let id = this._getUnwrappedTriggerNode(popup).getAttribute("data-extensionid");
- let viewID = "addons://detail/" + encodeURIComponent(id);
- BrowserOpenAddonsMgr(viewID);
+ let id = this._getExtensionId(popup);
+ if (id) {
+ let viewID = "addons://detail/" + encodeURIComponent(id);
+ BrowserOpenAddonsMgr(viewID);
+ }
},
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser.ini firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser.ini
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser.ini 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser.ini 2019-02-07 12:50:25.000000000 +0000
@@ -32,7 +32,7 @@
skip-if = (verify && (os == 'mac'))
[browser_tabopen_squeeze.js]
[browser_tabstrip_overflow_underflow.js]
-skip-if = (verify && !debug && (os == 'win'))
+skip-if = (verify && !debug && (os == 'win')) || (!debug && (os == 'win') && (bits == 32)) # Bug 1502255
[browser_tabswitch.js]
[browser_toolbariconcolor_restyles.js]
[browser_urlbar_keyed_search.js]
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser_urlbar_keyed_search.js firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser_urlbar_keyed_search.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser_urlbar_keyed_search.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser_urlbar_keyed_search.js 2019-02-07 12:50:25.000000000 +0000
@@ -21,7 +21,7 @@
AppConstants.platform == "win")) {
EXPECTED_REFLOWS_FIRST_OPEN.push({
stack: [
- "_rebuild@chrome://browser/content/search/search-one-offs.js",
+ "__rebuild@chrome://browser/content/search/search-one-offs.js",
/* This is limited to a one-line stack, because the next item is an async
function and as such not supported on all trees, according to bug 1501761.
"async*set popup@chrome://browser/content/search/search-one-offs.js",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser_urlbar_search.js firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser_urlbar_search.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/test/performance/browser_urlbar_search.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/test/performance/browser_urlbar_search.js 2019-02-07 12:50:25.000000000 +0000
@@ -22,7 +22,7 @@
AppConstants.isPlatformAndVersionAtLeast("win", "10"))) {
EXPECTED_REFLOWS_FIRST_OPEN.push({
stack: [
- "_rebuild@chrome://browser/content/search/search-one-offs.js",
+ "__rebuild@chrome://browser/content/search/search-one-offs.js",
/* This is limited to a one-line stack, because the next item is an async
function and as such not supported on all trees, according to bug 1501761.
"async*set popup@chrome://browser/content/search/search-one-offs.js",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/urlbarBindings.xml firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/urlbarBindings.xml
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/base/content/urlbarBindings.xml 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/base/content/urlbarBindings.xml 2019-02-07 12:50:25.000000000 +0000
@@ -1000,7 +1000,7 @@
let triggeringPrincipal = browserDragAndDrop.getTriggeringPrincipal(aEvent);
aEvent.preventDefault();
let url = links[0].url;
- let strippedURL = stripUnsafeProtocolOnPaste(url);
+ let strippedURL = UrlbarUtils.stripUnsafeProtocolOnPaste(url);
if (strippedURL != url) {
aEvent.stopImmediatePropagation();
return null;
@@ -1275,7 +1275,7 @@
}
let oldEnd = oldValue.substring(this.inputField.selectionEnd);
- let pasteData = stripUnsafeProtocolOnPaste(originalPasteData);
+ let pasteData = UrlbarUtils.stripUnsafeProtocolOnPaste(originalPasteData);
if (originalPasteData != pasteData) {
// Unfortunately we're not allowed to set the bits being pasted
// so cancel this event:
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/aboutNewTabService.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/aboutNewTabService.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/aboutNewTabService.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/aboutNewTabService.js 2019-02-07 12:50:25.000000000 +0000
@@ -47,6 +47,7 @@
// More initialization happens here
this.toggleActivityStream(true);
this.initialized = true;
+ this.alreadyRecordedTopsitesPainted = false;
if (IS_MAIN_PROCESS) {
AboutNewTab.init();
@@ -331,6 +332,20 @@
this.notifyChange();
},
+ maybeRecordTopsitesPainted(timestamp) {
+ if (this.alreadyRecordedTopsitesPainted) {
+ return;
+ }
+
+ const SCALAR_KEY = "timestamps.about_home_topsites_first_paint";
+
+ let startupInfo = Services.startup.getStartupInfo();
+ let processStartTs = startupInfo.process.getTime();
+ let delta = Math.round(timestamp - processStartTs);
+ Services.telemetry.scalarSet(SCALAR_KEY, delta);
+ this.alreadyRecordedTopsitesPainted = true;
+ },
+
uninit() {
if (!this.initialized) {
return;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/Actions.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/Actions.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/Actions.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/Actions.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -45,8 +45,10 @@
"DISCOVERY_STREAM_FEEDS_UPDATE",
"DISCOVERY_STREAM_LAYOUT_RESET",
"DISCOVERY_STREAM_LAYOUT_UPDATE",
+ "DISCOVERY_STREAM_OPT_OUT",
"DISCOVERY_STREAM_SPOCS_ENDPOINT",
"DISCOVERY_STREAM_SPOCS_UPDATE",
+ "DISCOVERY_STREAM_SPOC_IMPRESSION",
"DOWNLOAD_CHANGED",
"FAKE_FOCUS_SEARCH",
"FILL_SEARCH_TERM",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/PerfService.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/PerfService.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/PerfService.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/PerfService.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -1,17 +1,19 @@
-/* globals Services */
"use strict";
-/* istanbul ignore if */
if (typeof ChromeUtils !== "undefined") {
+ // Use a var here instead of let outside to avoid creating a locally scoped
+ // variable that hides the global, which we modify for testing.
+ // eslint-disable-next-line no-var, vars-on-top
var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
}
let usablePerfObj;
-/* istanbul ignore if */
/* istanbul ignore else */
+// eslint-disable-next-line block-scoped-var
if (typeof Services !== "undefined") {
// Borrow the high-resolution timer from the hidden window....
+ // eslint-disable-next-line block-scoped-var
usablePerfObj = Services.appShell.hiddenDOMWindow.performance;
} else if (typeof performance !== "undefined") {
// we must be running in content space
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/PrerenderData.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/PrerenderData.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/common/PrerenderData.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/common/PrerenderData.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -38,9 +38,9 @@
_isPrefEnabled(prefObj) {
try {
let data = JSON.parse(prefObj);
- return data && data.enabled;
+ return (data && data.enabled) ? true : false;
} catch (e) {
- return null;
+ return false;
}
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/asrouter/templates/CFR/templates/ExtensionDoorhanger.schema.json 2019-02-07 12:50:25.000000000 +0000
@@ -17,9 +17,10 @@
"properties": {
"bucket_id": {
"type": "string",
- "description": "Bucket identifier for the addon."
+ "description": "A bucket identifier for the addon. This is used in order to anonymize telemetry for history-sensitive targeting."
},
"notification_text": {
+ "description": "The text in the small blue chicklet that appears in the URL bar. This can be a reference to a localized string in Firefox or just a plain string.",
"oneOf": [
{
"type": "string",
@@ -35,11 +36,11 @@
},
"required": ["string_id"]
}
- ],
- "description": "Id of localized string or message override."
+ ]
},
"info_icon": {
"type": "object",
+ "description": "The small icon displayed in the top right corner of the pop-over. Should be 19x19px, svg or png. Defaults to a small question mark." ,
"properties": {
"label": {
"oneOf": [
@@ -79,6 +80,7 @@
}
},
"heading_text": {
+ "description": "The larger heading text displayed in the pop-over. This can be a reference to a localized string in Firefox or just a plain string.",
"oneOf": [
{
"type": "string",
@@ -94,10 +96,10 @@
"required": ["string_id"],
"description": "Id of localized string for extension doorhanger title"
}
- ],
- "description": "Id of localized string or message override."
+ ]
},
"addon": {
+ "description": "Addon information including AMO URL.",
"type": "object",
"properties": {
"id": {
@@ -119,6 +121,7 @@
]
},
"icon": {
+ "description": "The icon displayed in the pop-over. Should be 64x64px and png/svg.",
"allOf": [
{"$ref": "#/definitions/linkUrl"},
{"description": "Addon icon"}
@@ -145,6 +148,7 @@
"required": ["title", "author", "icon", "amo_url"]
},
"text": {
+ "description": "The body text displayed in the pop-over. This can be a reference to a localized string in Firefox or just a plain string.",
"oneOf": [
{
"type": "string",
@@ -160,10 +164,10 @@
},
"required": ["string_id"]
}
- ],
- "description": "Id of localized string or message override."
+ ]
},
"buttons": {
+ "description": "The label and functionality for the buttons in the pop-over.",
"type": "object",
"properties": {
"primary": {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/Base/Base.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/Base/Base.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/Base/Base.jsx 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/Base/Base.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -3,6 +3,7 @@
import {ASRouterAdmin} from "content-src/components/ASRouterAdmin/ASRouterAdmin";
import {ConfirmDialog} from "content-src/components/ConfirmDialog/ConfirmDialog";
import {connect} from "react-redux";
+import {DarkModeMessage} from "content-src/components/DarkModeMessage/DarkModeMessage";
import {DiscoveryStreamBase} from "content-src/components/DiscoveryStreamBase/DiscoveryStreamBase";
import {ErrorBoundary} from "content-src/components/ErrorBoundary/ErrorBoundary";
import {ManualMigration} from "content-src/components/ManualMigration/ManualMigration";
@@ -186,6 +187,7 @@
}
{isDiscoveryStream ? (
+ {prefs.darkModeMessage && }
) : }
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DarkModeMessage/DarkModeMessage.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DarkModeMessage/DarkModeMessage.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DarkModeMessage/DarkModeMessage.jsx 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DarkModeMessage/DarkModeMessage.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,40 @@
+import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
+import {connect} from "react-redux";
+import React from "react";
+
+export class _DarkModeMessage extends React.PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleSwitch = this.handleSwitch.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ handleSwitch() {
+ // Switch to default new tab version
+ this.props.dispatch(ac.AlsoToMain({type: at.DISCOVERY_STREAM_OPT_OUT}));
+ }
+
+ handleCancel() {
+ // Capture user consent and not show dark mode message in future
+ this.props.dispatch(ac.SetPref("darkModeMessage", false));
+ }
+
+ render() {
+ return (
+
+
+ This version of New Tab doesn not support dark mode yet.
+
+
+
+ Got it
+
+
+ Use older version
+
+
+
);
+ }
+}
+
+export const DarkModeMessage = connect()(_DarkModeMessage);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DarkModeMessage/_DarkModeMessage.scss firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DarkModeMessage/_DarkModeMessage.scss
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DarkModeMessage/_DarkModeMessage.scss 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DarkModeMessage/_DarkModeMessage.scss 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,48 @@
+.ds-message-container {
+ display: none;
+ color: $grey-50;
+ font-size: 13px;
+ justify-content: center;
+ margin: 0 auto 40px;
+ width: 936px;
+
+ p {
+ margin: 0;
+ align-self: center;
+ line-height: 20px;
+ display: flex;
+ }
+
+ .icon {
+ align-self: center;
+ fill: var(--newtab-icon-secondary-color);
+ margin-inline-end: 6px;
+ width: 20px;
+ height: 20px;
+ }
+
+ .ds-message-actions {
+ align-self: center;
+ border: 0;
+ padding: 0;
+
+ button {
+ height: 24px;
+ margin: 0;
+ margin-inline-start: 20px;
+ padding: 0 20px;
+
+ &.dismiss {
+ padding: 0;
+ }
+ }
+ }
+}
+
+.force-light-theme {
+ &[lwt-newtab-brighttext] {
+ .ds-message-container {
+ display: flex;
+ }
+ }
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -1,5 +1,6 @@
import {CardGrid} from "content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid";
import {connect} from "react-redux";
+import {DSMessage} from "content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage";
import {Hero} from "content-src/components/DiscoveryStreamComponents/Hero/Hero";
import {HorizontalRule} from "content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule";
import {ImpressionStats} from "content-src/components/DiscoveryStreamImpressionStats/ImpressionStats";
@@ -11,14 +12,14 @@
import {TopSites} from "content-src/components/DiscoveryStreamComponents/TopSites/TopSites";
// According to the Pocket API endpoint specs, `component.properties.items` is a required property with following values:
-// - List 1-6 items
+// - List 1-12 items
// - Hero 1-5 items
-// - CardGrid 1-8 items
+// - CardGrid 1-16 items
// To enforce that, we define various maximium items for individual components as an extra check.
// Note that these values are subject to the future changes of the specs.
const MAX_ROWS_HERO = 5;
-const MAX_ROWS_LIST = 6;
-const MAX_ROWS_CARDGRID = 8;
+const MAX_ROWS_LIST = 12;
+const MAX_ROWS_CARDGRID = 16;
const ALLOWED_CSS_URL_PREFIXES = ["chrome://", "resource://", "https://img-getpocket.cdn.mozilla.net/"];
const DUMMY_CSS_SELECTOR = "DUMMY#CSS.SELECTOR";
@@ -127,6 +128,15 @@
switch (component.type) {
case "TopSites":
return ( );
+ case "Message":
+ return (
+
+ );
case "SectionTitle":
return (
(
{
+ if (this.props.document.visibilityState === VISIBLE) {
+ this.setupIntersectionObserver();
+ this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ };
+ this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this._onVisibilityChange) {
+ this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ if (this._intersectionObserver) {
+ this._intersectionObserver.unobserve(this.cardElement);
+ }
+ }
+
+ setupIntersectionObserver() {
+ const options = {threshold: INTERSECTION_RATIO};
+ this._intersectionObserver = new IntersectionObserver(entries => {
+ for (let entry of entries) {
+ if (entry.isIntersecting && entry.intersectionRatio >= INTERSECTION_RATIO) {
+ this.dispatchSpocImpression();
+ break;
+ }
+ }
+ }, options);
+ this._intersectionObserver.observe(this.cardElement);
+ }
+
+ dispatchSpocImpression() {
+ if (this.props.campaignId) {
+ this.props.dispatch(ac.OnlyToMain({type: at.DISCOVERY_STREAM_SPOC_IMPRESSION, data: {campaignId: this.props.campaignId}}));
+ }
+ this._intersectionObserver.unobserve(this.cardElement);
+ }
+
+ cardElementRef(element) {
+ this.cardElement = element;
+ }
+
onLinkClick(event) {
if (this.props.dispatch) {
this.props.dispatch(ac.UserEvent({
@@ -25,7 +78,7 @@
render() {
return (
-
+
@@ -48,3 +101,7 @@
);
}
}
+
+DSCard.defaultProps = {
+ document: global.document,
+};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,26 @@
+import React from "react";
+
+export class DSMessage extends React.PureComponent {
+ render() {
+ let hasSubtitleAndOrLink = this.props.link_text && this.props.link_url;
+ hasSubtitleAndOrLink = hasSubtitleAndOrLink || this.props.subtitle;
+
+ return (
+
+ {this.props.title && (
+
+ {this.props.icon && ( )}
+ {this.props.title}
+
+ )}
+ { hasSubtitleAndOrLink && (
+
+ {this.props.subtitle && ({this.props.subtitle} )}
+ {this.props.link_text && this.props.link_url && ({this.props.link_text} )}
+
+ )}
+
+
+ );
+ }
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,41 @@
+.ds-message {
+ margin: 8px 0 0;
+
+ .title {
+ display: flex;
+ align-items: center;
+
+ img {
+ width: 16px;
+ height: 16px;
+ margin: 0 6px 0 0;
+ }
+
+ span {
+ line-height: 24px;
+ font-size: 17px;
+ color: $grey-90;
+ font-weight: 600;
+ }
+ }
+
+ .subtitle {
+ line-height: 20px;
+ font-size: 14px;
+ color: $grey-50;
+ margin: 0;
+
+ span::after {
+ content: ' ';
+ }
+
+ a:hover,
+ a:focus {
+ text-decoration: underline;
+ }
+ }
+
+ .ds-hr {
+ margin: 16px 0 8px;
+ }
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -2,7 +2,6 @@
import {DSCard} from "../DSCard/DSCard.jsx";
import {List} from "../List/List.jsx";
import React from "react";
-import {truncateText} from "content-src/lib/truncate-text";
export class Hero extends React.PureComponent {
constructor(props) {
@@ -42,16 +41,17 @@
// Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.
let cards = otherRecs.map((rec, index) => (
+ context={rec.context}
+ source={rec.domain} />
));
let list = (
@@ -73,12 +73,12 @@
-
{truncateText(heroRec.title, 28)}
-
{truncateText(heroRec.excerpt, 114)}
+
+
{heroRec.excerpt}
{heroRec.context ? (
-
{truncateText(heroRec.context, 22)}
+
{heroRec.context}
) : (
-
{truncateText(heroRec.domain, 22)}
+
{heroRec.domain}
)}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/List.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/List.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/List.jsx 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/components/DiscoveryStreamComponents/List/List.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -1,7 +1,6 @@
import {actionCreators as ac} from "common/Actions.jsm";
import {connect} from "react-redux";
import React from "react";
-import {truncateText} from "content-src/lib/truncate-text";
/**
* @note exported for testing only
@@ -36,7 +35,7 @@
{this.props.title}
- {this.props.excerpt &&
{truncateText(this.props.excerpt, 90)}
}
+ {this.props.excerpt &&
{this.props.excerpt}
}
{this.props.domain}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/lib/truncate-text.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/lib/truncate-text.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/lib/truncate-text.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/lib/truncate-text.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-export function truncateText(text = "", cap) {
- return text.substring(0, cap).trim() + (text.length > cap ? "…" : "");
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/styles/_activity-stream.scss firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/styles/_activity-stream.scss
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/content-src/styles/_activity-stream.scss 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/content-src/styles/_activity-stream.scss 2019-02-07 12:50:25.000000000 +0000
@@ -145,6 +145,7 @@
@import '../components/PocketLoggedInCta/PocketLoggedInCta';
@import '../components/MoreRecommendations/MoreRecommendations';
@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';
+@import '../components/DarkModeMessage/DarkModeMessage';
// Discovery Stream Components
@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';
@@ -155,6 +156,7 @@
@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';
@import '../components/DiscoveryStreamComponents/TopSites/TopSites';
@import '../components/DiscoveryStreamComponents/DSCard/DSCard';
+@import '../components/DiscoveryStreamComponents/DSMessage/DSMessage';
// AS Router
@import '../asrouter/components/Button/Button';
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-linux.css firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-linux.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-linux.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-linux.css 2019-02-07 12:50:25.000000000 +0000
@@ -1831,6 +1831,39 @@
color: #0C0C0D;
margin: 16px 0; }
+.ds-message-container {
+ display: none;
+ color: #737373;
+ font-size: 13px;
+ justify-content: center;
+ margin: 0 auto 40px;
+ width: 936px; }
+ .ds-message-container p {
+ margin: 0;
+ align-self: center;
+ line-height: 20px;
+ display: flex; }
+ .ds-message-container .icon {
+ align-self: center;
+ fill: var(--newtab-icon-secondary-color);
+ margin-inline-end: 6px;
+ width: 20px;
+ height: 20px; }
+ .ds-message-container .ds-message-actions {
+ align-self: center;
+ border: 0;
+ padding: 0; }
+ .ds-message-container .ds-message-actions button {
+ height: 24px;
+ margin: 0;
+ margin-inline-start: 20px;
+ padding: 0 20px; }
+ .ds-message-container .ds-message-actions button.dismiss {
+ padding: 0; }
+
+.force-light-theme[lwt-newtab-brighttext] .ds-message-container {
+ display: flex; }
+
.ds-card-grid {
display: grid;
grid-gap: 24px; }
@@ -2339,6 +2372,33 @@
.ds-card .context {
color: #008EA4; }
+.ds-message {
+ margin: 8px 0 0; }
+ .ds-message .title {
+ display: flex;
+ align-items: center; }
+ .ds-message .title img {
+ width: 16px;
+ height: 16px;
+ margin: 0 6px 0 0; }
+ .ds-message .title span {
+ line-height: 24px;
+ font-size: 17px;
+ color: #0C0C0D;
+ font-weight: 600; }
+ .ds-message .subtitle {
+ line-height: 20px;
+ font-size: 14px;
+ color: #737373;
+ margin: 0; }
+ .ds-message .subtitle span::after {
+ content: ' '; }
+ .ds-message .subtitle a:hover,
+ .ds-message .subtitle a:focus {
+ text-decoration: underline; }
+ .ds-message .ds-hr {
+ margin: 16px 0 8px; }
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-linux.css.map firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-linux.css.map
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-linux.css.map 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-linux.css.map 2019-02-07 12:50:25.000000000 +0000
@@ -24,6 +24,7 @@
"../content-src/components/PocketLoggedInCta/_PocketLoggedInCta.scss",
"../content-src/components/MoreRecommendations/_MoreRecommendations.scss",
"../content-src/components/DiscoveryStreamBase/_DiscoveryStreamBase.scss",
+ "../content-src/components/DarkModeMessage/_DarkModeMessage.scss",
"../content-src/components/DiscoveryStreamComponents/CardGrid/_CardGrid.scss",
"../content-src/components/DiscoveryStreamComponents/Hero/_Hero.scss",
"../content-src/components/DiscoveryStreamComponents/HorizontalRule/_HorizontalRule.scss",
@@ -32,6 +33,7 @@
"../content-src/components/DiscoveryStreamComponents/SectionTitle/_SectionTitle.scss",
"../content-src/components/DiscoveryStreamComponents/TopSites/_TopSites.scss",
"../content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss",
+ "../content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss",
"../content-src/asrouter/components/Button/_Button.scss",
"../content-src/asrouter/components/SnippetBase/_SnippetBase.scss",
"../content-src/asrouter/components/ModalOverlay/_ModalOverlay.scss",
@@ -44,7 +46,7 @@
],
"sourcesContent": [
"/* This is the linux variant */ // sass-lint:disable-line no-css-comments\n\n$os-infopanel-arrow-height: 10px;\n$os-infopanel-arrow-offset-end: 6px;\n$os-infopanel-arrow-width: 20px;\n\n@import './activity-stream';\n",
- "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
+ "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n@import '../components/DarkModeMessage/DarkModeMessage';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n@import '../components/DiscoveryStreamComponents/DSMessage/DSMessage';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
"html {\n box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n*::-moz-focus-inner {\n border: 0;\n}\n\nbody {\n margin: 0;\n}\n\nbutton,\ninput {\n background-color: inherit;\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n\n[hidden] {\n display: none !important; // sass-lint:disable-line no-important\n}\n",
"// Photon colors from http://design.firefox.com/photon/visuals/color.html\n$blue-40: #45A1FF;\n$blue-50: #0A84FF;\n$blue-60: #0060DF;\n$blue-70: #003EAA;\n$blue-80: #002275;\n$grey-10: #F9F9FA;\n$grey-20: #EDEDF0;\n$grey-30: #D7D7DB;\n$grey-40: #B1B1B3;\n$grey-50: #737373;\n$grey-60: #4A4A4F;\n$grey-70: #38383D;\n$grey-80: #2A2A2E;\n$grey-90: #0C0C0D;\n$teal-70: #008EA4;\n$red-60: #D70022;\n$yellow-50: #FFE900;\n\n// Photon opacity from http://design.firefox.com/photon/visuals/color.html#opacity\n$grey-10-10: rgba($grey-10, 0.1);\n$grey-10-20: rgba($grey-10, 0.2);\n$grey-10-30: rgba($grey-10, 0.3);\n$grey-10-40: rgba($grey-10, 0.4);\n$grey-10-50: rgba($grey-10, 0.5);\n$grey-10-60: rgba($grey-10, 0.6);\n$grey-10-80: rgba($grey-10, 0.8);\n$grey-10-95: rgba($grey-10, 0.95);\n$grey-20-60: rgba($grey-20, 0.6);\n$grey-20-80: rgba($grey-20, 0.8);\n$grey-30-60: rgba($grey-30, 0.6);\n$grey-60-60: rgba($grey-60, 0.6);\n$grey-60-70: rgba($grey-60, 0.7);\n$grey-80-95: rgba($grey-80, 0.95);\n$grey-90-10: rgba($grey-90, 0.1);\n$grey-90-20: rgba($grey-90, 0.2);\n$grey-90-30: rgba($grey-90, 0.3);\n$grey-90-40: rgba($grey-90, 0.4);\n$grey-90-50: rgba($grey-90, 0.5);\n$grey-90-60: rgba($grey-90, 0.6);\n$grey-90-70: rgba($grey-90, 0.7);\n$grey-90-80: rgba($grey-90, 0.8);\n$grey-90-90: rgba($grey-90, 0.9);\n\n$black: #000;\n$black-5: rgba($black, 0.05);\n$black-10: rgba($black, 0.1);\n$black-12: rgba($black, 0.12);\n$black-15: rgba($black, 0.15);\n$black-20: rgba($black, 0.2);\n$black-25: rgba($black, 0.25);\n$black-30: rgba($black, 0.3);\n\n// Other colors\n$white: #FFF;\n$white-10: rgba($white, 0.1);\n$pocket-teal: #50BCB6;\n$pocket-red: #EF4056;\n$bookmark-icon-fill: #0A84FF;\n$download-icon-fill: #12BC00;\n$pocket-icon-fill: #D70022;\n$email-input-focus: rgba($blue-50, 0.3);\n$email-input-invalid: rgba($red-60, 0.3);\n$aw-extra-blue-1: #004EC2;\n$aw-extra-blue-2: #0080FF;\n$aw-extra-blue-3: #00C7FF;\n$about-welcome-gradient: linear-gradient(to bottom, $blue-70 40%, $aw-extra-blue-1 60%, $blue-60 80%, $aw-extra-blue-2 90%, $aw-extra-blue-3 100%);\n$about-welcome-extra-links: #676F7E;\n$firefox-wordmark-default-color: #363959;\n$firefox-wordmark-darktheme-color: $white;\n\n// Photon transitions from http://design.firefox.com/photon/motion/duration-and-easing.html\n$photon-easing: cubic-bezier(0.07, 0.95, 0, 1);\n\n$border-radius: 3px;\n\n// Grid related styles\n$base-gutter: 32px;\n$section-horizontal-padding: 25px;\n$section-vertical-padding: 10px;\n$section-spacing: 40px - $section-vertical-padding * 2;\n$grid-unit: 96px; // 1 top site\n\n$icon-size: 16px;\n$smaller-icon-size: 12px;\n$larger-icon-size: 32px;\n\n$searchbar-width-small: $grid-unit * 2 + $base-gutter * 1;\n$searchbar-width-medium: $grid-unit * 4 + $base-gutter * 3;\n$searchbar-width-large: $grid-unit * 6 + $base-gutter * 5;\n\n$wrapper-default-width: $grid-unit * 2 + $base-gutter * 1 + $section-horizontal-padding * 2; // 2 top sites\n$wrapper-max-width-medium: $grid-unit * 4 + $base-gutter * 3 + $section-horizontal-padding * 2; // 4 top sites\n$wrapper-max-width-large: $grid-unit * 6 + $base-gutter * 5 + $section-horizontal-padding * 2; // 6 top sites\n$wrapper-max-width-widest: $grid-unit * 8 + $base-gutter * 7 + $section-horizontal-padding * 2; // 8 top sites\n// For the breakpoints, we need to add space for the scrollbar to avoid weird\n// layout issues when the scrollbar is visible. 16px is wide enough to cover all\n// OSes and keeps it simpler than a per-OS value.\n$scrollbar-width: 16px;\n\n// Breakpoints\n$break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width;\n$break-point-large: $wrapper-max-width-large + $base-gutter * 2 + $scrollbar-width;\n$break-point-widest: $wrapper-max-width-widest + $base-gutter * 2 + $scrollbar-width;\n\n$section-title-font-size: 13px;\n\n$card-width: $grid-unit * 2 + $base-gutter;\n$card-height: 266px;\n$card-preview-image-height: 122px;\n$card-title-margin: 2px;\n$card-text-line-height: 19px;\n// Larger cards for wider screens:\n$card-width-large: 309px;\n$card-height-large: 370px;\n$card-preview-image-height-large: 155px;\n// Compact cards for Highlights\n$card-height-compact: 160px;\n$card-preview-image-height-compact: 108px;\n\n$topic-margin-top: 12px;\n\n$context-menu-button-size: 27px;\n$context-menu-button-boxshadow: 0 2px $grey-90-10;\n$context-menu-shadow: 0 5px 10px $black-30, 0 0 0 1px $black-20;\n$context-menu-font-size: 14px;\n$context-menu-border-radius: 5px;\n$context-menu-outer-padding: 5px;\n$context-menu-item-padding: 3px 12px;\n\n$error-fallback-font-size: 12px;\n$error-fallback-line-height: 1.5;\n\n$image-path: '../data/content/assets/';\n\n$snippets-container-height: 120px;\n\n$textbox-shadow-size: 4px;\n\n@mixin fade-in {\n box-shadow: inset $inner-box-shadow, $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin fade-in-card {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin context-menu-button {\n .context-menu-button {\n background-clip: padding-box;\n background-color: var(--newtab-contextmenu-button-color);\n background-image: url('chrome://browser/skin/page-action.svg');\n background-position: 55%;\n border: $border-primary;\n border-radius: 100%;\n box-shadow: $context-menu-button-boxshadow;\n cursor: pointer;\n fill: var(--newtab-icon-primary-color);\n height: $context-menu-button-size;\n inset-inline-end: -($context-menu-button-size / 2);\n opacity: 0;\n position: absolute;\n top: -($context-menu-button-size / 2);\n transform: scale(0.25);\n transition-duration: 150ms;\n transition-property: transform, opacity;\n width: $context-menu-button-size;\n\n &:-moz-any(:active, :focus) {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n@mixin context-menu-button-hover {\n .context-menu-button {\n opacity: 1;\n transform: scale(1);\n transition-delay: 333ms;\n }\n}\n\n@mixin context-menu-open-middle {\n .context-menu {\n margin-inline-end: auto;\n margin-inline-start: auto;\n inset-inline-end: auto;\n inset-inline-start: -$base-gutter;\n }\n}\n\n@mixin context-menu-open-left {\n .context-menu {\n margin-inline-end: 5px;\n margin-inline-start: auto;\n inset-inline-end: 0;\n inset-inline-start: auto;\n }\n}\n\n@mixin flip-icon {\n &:dir(rtl) {\n transform: scaleX(-1);\n }\n}\n",
"@function textbox-shadow($color) {\n @return 0 0 0 1px $color, 0 0 0 $textbox-shadow-size rgba($color, 0.3);\n}\n\n@mixin textbox-focus($color) {\n --newtab-textbox-focus-color: #{$color};\n --newtab-textbox-focus-boxshadow: #{textbox-shadow($color)};\n}\n\n// scss variables related to the theme.\n$border-primary: 1px solid var(--newtab-border-primary-color);\n$border-secondary: 1px solid var(--newtab-border-secondary-color);\n$inner-box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);\n$input-border: 1px solid var(--newtab-textbox-border);\n$input-border-active: 1px solid var(--newtab-textbox-focus-color);\n$input-error-border: 1px solid $red-60;\n$input-error-boxshadow: textbox-shadow($red-60);\n$shadow-primary: 0 0 0 5px var(--newtab-card-active-outline-color);\n$shadow-secondary: 0 1px 4px 0 $grey-90-20;\n\n// Default theme\nbody {\n // General styles\n --newtab-background-color: #{$grey-10};\n --newtab-border-primary-color: #{$grey-40};\n --newtab-border-secondary-color: #{$grey-30};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: inherit;\n --newtab-element-active-color: #{$grey-30-60};\n --newtab-element-hover-color: #{$grey-20};\n --newtab-icon-primary-color: #{$grey-90-80};\n --newtab-icon-secondary-color: #{$grey-90-60};\n --newtab-icon-tertiary-color: #{$grey-30};\n --newtab-inner-box-shadow-color: #{$black-10};\n --newtab-link-primary-color: #{$blue-60};\n --newtab-link-secondary-color: #{$teal-70};\n --newtab-text-conditional-color: #{$grey-60};\n --newtab-text-primary-color: #{$grey-90};\n --newtab-text-secondary-color: #{$grey-50};\n --newtab-textbox-background-color: #{$white};\n --newtab-textbox-border: #{$grey-90-20};\n @include textbox-focus($blue-60); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-10};\n --newtab-contextmenu-button-color: #{$white};\n\n // Modal + overlay\n --newtab-modal-color: #{$white};\n --newtab-overlay-color: #{$grey-20-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-50};\n --newtab-section-navigation-text-color: #{$grey-50};\n --newtab-section-active-contextmenu-color: #{$grey-90};\n\n // Search\n --newtab-search-border-color: transparent;\n --newtab-search-dropdown-color: #{$white};\n --newtab-search-dropdown-header-color: #{$grey-10};\n --newtab-search-header-background-color: #{$grey-10-95};\n --newtab-search-icon-color: #{$grey-90-40};\n --newtab-search-wordmark-color: #{$firefox-wordmark-default-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$white};\n --newtab-topsites-icon-shadow: inset #{$inner-box-shadow};\n --newtab-topsites-label-color: inherit;\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-30};\n --newtab-card-background-color: #{$white};\n --newtab-card-hairline-color: #{$black-10};\n --newtab-card-placeholder-color: #{$grey-30};\n --newtab-card-shadow: 0 1px 4px 0 #{$grey-90-10};\n\n // Snippets\n --newtab-snippets-background-color: #{$white};\n --newtab-snippets-hairline-color: transparent;\n\n &[lwt-newtab-brighttext]:not(.force-light-theme) {\n // General styles\n --newtab-background-color: #{$grey-80};\n --newtab-border-primary-color: #{$grey-10-80};\n --newtab-border-secondary-color: #{$grey-10-10};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: #{$grey-70};\n --newtab-element-active-color: #{$grey-10-20};\n --newtab-element-hover-color: #{$grey-10-10};\n --newtab-icon-primary-color: #{$grey-10-80};\n --newtab-icon-secondary-color: #{$grey-10-40};\n --newtab-icon-tertiary-color: #{$grey-10-40};\n --newtab-inner-box-shadow-color: #{$grey-10-20};\n --newtab-link-primary-color: #{$blue-40};\n --newtab-link-secondary-color: #{$pocket-teal};\n --newtab-text-conditional-color: #{$grey-10};\n --newtab-text-primary-color: #{$grey-10};\n --newtab-text-secondary-color: #{$grey-10-80};\n --newtab-textbox-background-color: #{$grey-70};\n --newtab-textbox-border: #{$grey-10-20};\n @include textbox-focus($blue-40); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-60};\n --newtab-contextmenu-button-color: #{$grey-80};\n\n // Modal + overlay\n --newtab-modal-color: #{$grey-80};\n --newtab-overlay-color: #{$grey-90-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-10-80};\n --newtab-section-navigation-text-color: #{$grey-10-80};\n --newtab-section-active-contextmenu-color: #{$white};\n\n // Search\n --newtab-search-border-color: #{$grey-10-20};\n --newtab-search-dropdown-color: #{$grey-70};\n --newtab-search-dropdown-header-color: #{$grey-60};\n --newtab-search-header-background-color: #{$grey-80-95};\n --newtab-search-icon-color: #{$grey-10-60};\n --newtab-search-wordmark-color: #{$firefox-wordmark-darktheme-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$grey-70};\n --newtab-topsites-icon-shadow: none;\n --newtab-topsites-label-color: #{$grey-10-80};\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-60};\n --newtab-card-background-color: #{$grey-70};\n --newtab-card-hairline-color: #{$grey-10-10};\n --newtab-card-placeholder-color: #{$grey-60};\n --newtab-card-shadow: 0 1px 8px 0 #{$grey-90-20};\n\n // Snippets\n --newtab-snippets-background-color: #{$grey-70};\n --newtab-snippets-hairline-color: #{$white-10};\n }\n}\n",
@@ -65,6 +67,7 @@
".pocket-logged-in-cta {\n $max-button-width: 130px;\n $min-button-height: 18px;\n font-size: 13px;\n margin-inline-end: 20px;\n display: flex;\n align-items: flex-start;\n\n .pocket-cta-button {\n white-space: nowrap;\n background: $blue-60;\n letter-spacing: -0.34px;\n color: $white;\n border-radius: 4px;\n cursor: pointer;\n max-width: $max-button-width;\n // The button height is 2px taller than the rest of the cta text.\n // So I move it up by 1px to align with the rest of the cta text.\n margin-top: -1px;\n min-height: $min-button-height;\n padding: 0 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 11px;\n margin-inline-end: 10px;\n }\n\n .cta-text {\n font-weight: normal;\n font-size: 13px;\n line-height: 1.230769231; // (16 / 13) –> 16px computed\n }\n\n .pocket-cta-button,\n .cta-text {\n vertical-align: top;\n }\n}\n",
".more-recommendations {\n display: flex;\n align-items: center;\n white-space: nowrap;\n line-height: 1.230769231; // (16 / 13) -> 16px computed\n\n &::after {\n background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n content: '';\n -moz-context-properties: fill;\n display: inline-block;\n fill: var(--newtab-link-secondary-color);\n height: 16px;\n margin-inline-start: 5px;\n vertical-align: top;\n width: 12px;\n }\n\n &:dir(rtl)::after {\n transform: scaleX(-1);\n }\n}\n",
".discovery-stream.ds-layout {\n $columns: 12;\n --gridColumnGap: 48px;\n --gridRowGap: 24px;\n display: grid;\n grid-template-columns: repeat($columns, 1fr);\n grid-column-gap: var(--gridColumnGap);\n grid-row-gap: var(--gridRowGap);\n width: 936px;\n margin: 0 auto;\n\n @while $columns > 0 {\n .ds-column-#{$columns} {\n grid-column-start: auto;\n grid-column-end: span $columns;\n }\n\n $columns: $columns - 1;\n }\n\n .ds-column-grid {\n display: grid;\n grid-row-gap: var(--gridRowGap);\n }\n}\n\n.ds-header {\n font-size: 17px;\n font-weight: 600;\n line-height: 24px;\n color: $grey-90;\n margin: 16px 0;\n}\n",
+ ".ds-message-container {\n display: none;\n color: $grey-50;\n font-size: 13px;\n justify-content: center;\n margin: 0 auto 40px;\n width: 936px;\n\n p {\n margin: 0;\n align-self: center;\n line-height: 20px;\n display: flex;\n }\n\n .icon {\n align-self: center;\n fill: var(--newtab-icon-secondary-color);\n margin-inline-end: 6px;\n width: 20px;\n height: 20px;\n }\n\n .ds-message-actions {\n align-self: center;\n border: 0;\n padding: 0;\n\n button {\n height: 24px;\n margin: 0;\n margin-inline-start: 20px;\n padding: 0 20px;\n\n &.dismiss {\n padding: 0;\n }\n }\n }\n}\n\n.force-light-theme {\n &[lwt-newtab-brighttext] {\n .ds-message-container {\n display: flex;\n }\n }\n}\n",
"$col4-header-line-height: 20;\n$col4-header-font-size: 13;\n\n.ds-card-grid {\n display: grid;\n grid-gap: 24px;\n\n .ds-card {\n background: $white;\n border-radius: 4px;\n }\n\n &.ds-card-grid-border {\n .ds-card {\n box-shadow: var(--newtab-card-shadow);\n\n &:hover {\n box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);\n transition: box-shadow 150ms;\n outline: none;\n }\n\n .img-wrapper .img {\n border-radius: 4px 4px 0 0;\n }\n }\n }\n\n &.ds-card-grid-no-border {\n .ds-card {\n background: none;\n\n .meta {\n padding: 16px 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n grid-template-columns: repeat(2, 1fr);\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n grid-template-columns: repeat(4, 1fr);\n\n .meta .title {\n @include limit-visibile-lines(2, $col4-header-line-height, $col4-header-font-size);\n }\n\n &.ds-card-grid-divisible-by-3 {\n grid-template-columns: repeat(3, 1fr);\n\n .title {\n font-size: 17px;\n line-height: 24px;\n }\n }\n }\n}\n",
"$card-header-in-hero-font-size: 13;\n$card-header-in-hero-line-height: 20;\n\n.ds-hero {\n .img {\n @include image-as-background;\n }\n\n header {\n font-weight: 600;\n }\n\n p {\n line-height: 1.538;\n }\n\n .ds-list {\n border-top: 0;\n padding-top: 0;\n }\n\n .ds-card {\n border: 0;\n\n &:hover {\n border: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n .meta {\n padding: 0;\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $card-header-in-hero-line-height, $card-header-in-hero-font-size);\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n\n // \"1/3 width layout\" (aka \"Mobile First\")\n .wrapper {\n color: $grey-50;\n display: block;\n margin: 16px 0 24px;\n padding: 24px 0;\n border-top: $border-secondary;\n border-bottom: $border-secondary;\n\n @at-root .ds-hero-no-border .wrapper {\n border-top: 0;\n border-bottom: 0;\n padding: 0;\n }\n\n &:hover .meta header {\n color: $blue-60;\n }\n\n &:active .meta header {\n color: $blue-70;\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n header {\n font-size: 22px;\n color: $grey-90;\n }\n\n p {\n font-size: 13px;\n\n &.context {\n color: $teal-70;\n }\n }\n\n .source {\n margin-bottom: 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n .wrapper {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n\n .img-wrapper {\n margin: 0;\n grid-column: 2;\n grid-row: 1;\n }\n\n .meta {\n grid-column: 1;\n grid-row: 1;\n }\n\n .img {\n height: 0;\n padding-top: 100%; // 1:1 aspect ratio\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n }\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n .wrapper {\n display: flex;\n align-items: flex-start;\n flex-direction: row-reverse;\n\n .img-wrapper {\n width: 67%;\n margin: 0;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n width: 33%;\n padding: 0 24px 0 0;\n\n header {\n font-size: 22px;\n }\n\n p {\n font-size: 15px;\n line-height: 1.6;\n }\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-column-gap: 24px;\n }\n }\n}\n",
".ds-hr {\n border: 0;\n height: 0;\n border-top: $border-secondary;\n}\n",
@@ -73,6 +76,7 @@
".ds-section-title {\n text-align: center;\n\n .title {\n line-height: 48px;\n font-size: 36px;\n font-weight: 300;\n color: $grey-90;\n }\n\n .subtitle {\n line-height: 24px;\n font-size: 15px;\n color: $grey-50;\n margin-top: 4px;\n }\n}\n",
"// ds topsites wraps the original topsites, with a few css changes.\n.ds-top-sites {\n\n .ds-header-title {\n vertical-align: middle;\n }\n\n // This is the override layer.\n .top-sites {\n // Slightly different alignment with the other DS components than AS has.\n padding: 0;\n\n // We hide this and don't support it in ds.\n .section-top-bar {\n display: none;\n }\n\n .top-site-outer {\n padding: 0 12px;\n }\n\n .top-sites-list {\n margin: 0 -12px;\n }\n }\n\n // Only show 6 cards for 2/3 and 1/3\n // XXX hide-for-narrow is wrapping a previous functionality, can do better.\n .hide-for-narrow {\n display: none;\n }\n}\n\n// Only show 8 cards for the full row.\n// XXX hide-for-narrow is wrapping a previous functionality, can do better.\n.ds-column-9,\n.ds-column-10,\n.ds-column-11,\n.ds-column-12 {\n .ds-top-sites {\n .hide-for-narrow {\n display: inline-block;\n }\n }\n}\n\n// Size overrides for topsites in the 2/3 view.\n.ds-column-5,\n.ds-column-6,\n.ds-column-7,\n.ds-column-8 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 10px;\n }\n\n .top-sites-list {\n margin: 0 -10px;\n }\n\n .top-site-inner {\n --leftPanelIconWidth: 84.67px;\n\n .tile {\n width: var(--leftPanelIconWidth);\n height: var(--leftPanelIconWidth);\n }\n\n .title {\n width: var(--leftPanelIconWidth);\n }\n }\n }\n}\n\n// Size overrides for topsites in the 1/3 view.\n.ds-column-1,\n.ds-column-2,\n.ds-column-3,\n.ds-column-4 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 8px;\n }\n\n .top-sites-list {\n margin: 0 -8px;\n }\n\n .top-site-inner {\n --rightPanelIconWidth: 82.67px;\n\n .tile {\n width: var(--rightPanelIconWidth);\n height: var(--rightPanelIconWidth);\n }\n\n .title {\n width: var(--rightPanelIconWidth);\n }\n }\n }\n}\n",
"// Type sizes\n$header-font-size: 17;\n$header-line-height: 24;\n$excerpt-font-size: 13;\n$excerpt-line-height: 20;\n\n.ds-card {\n display: flex;\n flex-direction: column;\n\n &:hover {\n header {\n color: $blue-60;\n }\n }\n\n &:active {\n header {\n color: $blue-70;\n }\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n @include image-as-background;\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding: 16px;\n\n .info-wrap {\n flex-grow: 1;\n }\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $header-line-height, $header-font-size);\n font-weight: 600;\n }\n\n .excerpt {\n // show only 4 lines of copy\n @include limit-visibile-lines(4, $excerpt-line-height, $excerpt-font-size);\n }\n }\n\n header {\n line-height: $header-line-height * 1px;\n font-size: $header-font-size * 1px;\n color: $grey-90;\n\n }\n\n p {\n font-size: $excerpt-font-size * 1px;\n line-height: $excerpt-line-height * 1px;\n color: $grey-50;\n margin: 8px 0 0;\n }\n\n .context {\n color: $teal-70;\n }\n}\n",
+ ".ds-message {\n margin: 8px 0 0;\n\n .title {\n display: flex;\n align-items: center;\n\n img {\n width: 16px;\n height: 16px;\n margin: 0 6px 0 0;\n }\n\n span {\n line-height: 24px;\n font-size: 17px;\n color: $grey-90;\n font-weight: 600;\n }\n }\n\n .subtitle {\n line-height: 20px;\n font-size: 14px;\n color: $grey-50;\n margin: 0;\n\n span::after {\n content: ' ';\n }\n\n a:hover,\n a:focus {\n text-decoration: underline;\n }\n }\n\n .ds-hr {\n margin: 16px 0 8px;\n }\n}\n",
".ASRouterButton {\n font-weight: 600;\n font-size: 14px;\n white-space: nowrap;\n border-radius: 2px;\n border: 0;\n font-family: inherit;\n padding: 8px 15px;\n margin-inline-start: 12px;\n color: inherit;\n cursor: pointer;\n\n .tall & {\n margin-inline-start: 20px;\n }\n\n &.primary {\n border: 1px solid var(--newtab-button-primary-color);\n background-color: var(--newtab-button-primary-color);\n color: $grey-10;\n\n &:hover {\n background-color: $blue-70;\n }\n\n &:active {\n background-color: $blue-80;\n }\n }\n\n &.secondary {\n background-color: $grey-90-10;\n\n &:hover {\n background-color: $grey-90-20;\n }\n\n &:active {\n background-color: $grey-90-30;\n }\n }\n}\n\n[lwt-newtab-brighttext]:not(.force-light-theme) {\n .secondary {\n background-color: $grey-10-10;\n\n &:hover {\n background-color: $grey-10-20;\n }\n\n &:active {\n background-color: $grey-10-30;\n }\n }\n\n // Snippets scene 2 footer\n .footer {\n .secondary {\n background-color: $grey-10-30;\n\n &:hover {\n background-color: $grey-10-40;\n }\n\n &:active {\n background-color: $grey-10-50;\n }\n }\n }\n}\n",
".SnippetBaseContainer {\n position: fixed;\n // Make sure ASR snippets show on top of legacy snippets\n // This can happen when ASR preview is used with legacy snippets\n z-index: 2;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--newtab-snippets-background-color);\n color: var(--newtab-text-primary-color);\n font-size: 14px;\n line-height: 20px;\n border-top: 1px solid var(--newtab-snippets-hairline-color);\n box-shadow: $shadow-secondary;\n display: flex;\n align-items: center;\n\n a {\n cursor: pointer;\n color: var(--newtab-link-primary-color);\n\n &:hover {\n text-decoration: underline;\n }\n\n [lwt-newtab-brighttext]:not(.force-light-theme) & {\n font-weight: bold;\n }\n }\n\n input {\n &[type='checkbox'] {\n margin-inline-start: 0;\n }\n }\n\n .innerWrapper {\n margin: 0 auto;\n display: flex;\n align-items: center;\n padding: 12px $section-horizontal-padding;\n\n // This is to account for the block button on smaller screens\n padding-inline-end: 36px;\n @media (min-width: $break-point-large) {\n padding-inline-end: $section-horizontal-padding;\n }\n\n max-width: $wrapper-max-width-large + ($section-horizontal-padding * 2);\n @media (min-width: $break-point-widest) {\n max-width: $wrapper-max-width-widest + ($section-horizontal-padding * 2);\n }\n }\n\n .blockButton {\n display: none;\n background: none;\n border: 0;\n position: absolute;\n top: 50%;\n inset-inline-end: 12px;\n height: 16px;\n width: 16px;\n background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n -moz-context-properties: fill;\n fill: var(--newtab-icon-primary-color);\n opacity: 0.5;\n margin-top: -8px;\n padding: 0;\n cursor: pointer;\n\n @media (min-width: 766px) {\n inset-inline-end: 24px;\n }\n }\n\n &:hover .blockButton {\n display: block;\n }\n\n .icon {\n height: 42px;\n width: 42px;\n margin-inline-end: 12px;\n flex-shrink: 0;\n }\n}\n\n.snippets-preview-banner {\n font-size: 15px;\n line-height: 42px;\n color: $grey-60-70;\n background: $grey-30-60;\n text-align: center;\n position: absolute;\n top: 0;\n width: 100%;\n\n span {\n vertical-align: middle;\n }\n}\n",
".activity-stream {\n &.modal-open {\n overflow: hidden;\n }\n}\n\n.modalOverlayOuter {\n background: $white;\n opacity: 0.93;\n height: 100%;\n position: fixed;\n top: 0;\n width: 100%;\n display: none;\n z-index: 1100;\n\n &.active {\n display: block;\n }\n}\n\n.modalOverlayInner {\n width: 960px;\n height: 570px;\n position: fixed;\n top: calc(50% - 285px); // halfway down minus half the height of the modal\n left: calc(50% - 480px); // halfway across minus half the width of the modal\n background: $white;\n box-shadow: 0 1px 15px 0 $black-30;\n border-radius: 4px;\n display: none;\n z-index: 1101;\n\n\n // modal takes over entire screen\n @media(max-width: 960px) {\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n // if modal is short enough, add a vertical scroll bar\n @media(max-width: 850px) and (max-height: 730px) {\n overflow-y: scroll;\n }\n\n // if modal is narrow enough, add a vertical scroll bar\n @media(max-width: 650px) and (max-height: 600px) {\n overflow-y: scroll;\n }\n\n &.active {\n display: block;\n }\n\n h2 {\n color: $grey-60;\n text-align: center;\n font-weight: 200;\n margin-top: 30px;\n font-size: 28px;\n line-height: 37px;\n letter-spacing: -0.13px;\n\n @media(max-width: 960px) {\n margin-top: 100px;\n }\n\n @media(max-width: 850px) {\n margin-top: 30px;\n }\n }\n\n .footer {\n border-top: 1px solid $grey-30;\n height: 70px;\n width: 100%;\n position: absolute;\n bottom: 0;\n text-align: center;\n background-color: $white;\n\n // if modal is short enough, footer becomes sticky\n @media(max-width: 850px) and (max-height: 730px) {\n position: sticky;\n }\n\n // if modal is narrow enough, footer becomes sticky\n @media(max-width: 650px) and (max-height: 600px) {\n position: sticky;\n }\n\n .modalButton {\n margin-top: 20px;\n min-width: 150px;\n height: 30px;\n padding: 4px 30px 6px;\n font-size: 15px;\n\n &:focus,\n &.active,\n &:hover {\n box-shadow: 0 0 0 5px $grey-30;\n transition: box-shadow 150ms;\n }\n }\n }\n}\n",
@@ -84,5 +88,5 @@
".activity-stream {\n &.welcome {\n overflow: hidden;\n }\n\n &:not(.welcome) {\n .overlay-wrapper {\n display: none;\n }\n }\n}\n\n.overlay-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 21000;\n transition: opacity 0.4s;\n opacity: 0;\n overflow-x: auto;\n\n &.show {\n transition: none;\n opacity: 1;\n\n .firstrun-sign-in {\n transition: opacity 1.5s, transform 1.5s;\n transition-delay: 0.2s;\n transform: translateY(-50%) scale(1);\n opacity: 1;\n\n @media screen and (max-width: 790px) {\n float: none;\n margin: auto;\n top: 190px;\n margin-bottom: 100px;\n }\n }\n\n .firstrun-firefox-logo {\n transition: opacity 2.3s;\n opacity: 1;\n }\n\n .firstrun-title,\n .firstrun-content,\n .firstrun-link {\n transition: transform 0.5s, opacity 0.8s;\n transform: translateY(0);\n opacity: 1;\n }\n\n .firstrun-title {\n transition-delay: 0.2s;\n }\n\n .firstrun-content {\n transition-delay: 0.4s;\n }\n\n .firstrun-link {\n transition-delay: 0.6s;\n }\n\n .fxaccounts-container {\n transition: none;\n opacity: 1;\n }\n }\n}\n\n.background,\n.fxa + body.hide-main { // sass-lint:disable-line no-qualifying-elements\n width: 100%;\n height: 100%;\n display: block;\n background-image: url('#{$image-path}fox-tail.png'), $about-welcome-gradient;\n background-position-x: center;\n background-position-y: -200px, top;\n background-repeat: no-repeat;\n background-size: cover;\n position: fixed;\n}\n\n.firstrun-sign-in {\n transform: translateY(-50%) scale(0.8);\n position: relative;\n top: 50%;\n width: 358px;\n opacity: 0;\n background-color: $white;\n float: inline-end;\n color: $grey-90;\n text-align: center;\n padding: 10px;\n\n form {\n position: relative;\n }\n\n .extra-links {\n font-size: 12px;\n max-width: 340px;\n margin: 17px 50px;\n color: $about-welcome-extra-links;\n cursor: default;\n\n a {\n color: $grey-50;\n cursor: pointer;\n text-decoration: underline;\n }\n\n a:hover,\n a:active,\n a:focus {\n color: $blue-50;\n }\n }\n\n .email-input {\n box-shadow: none;\n margin: auto;\n width: 244px;\n display: block;\n height: 40px;\n padding-inline-start: 20px;\n border: 1px solid $grey-50;\n border-radius: 2px;\n font-size: 16px;\n transition: border-color 150ms, box-shadow 150ms;\n\n &:hover {\n border-color: $grey-90;\n }\n\n &:focus {\n border-color: $blue-50;\n box-shadow: 0 0 0 3px $email-input-focus;\n }\n\n &.invalid {\n border-color: $red-60;\n }\n\n &.invalid:focus {\n box-shadow: 0 0 0 3px $email-input-invalid;\n }\n }\n\n .form-header {\n font-size: 22px;\n margin: 15px auto;\n }\n\n .form-header .sub-header {\n font-size: 14px;\n margin-top: 4px;\n display: block;\n }\n\n button {\n display: block;\n cursor: pointer;\n margin: 10px auto 0;\n }\n\n .continue-button {\n font-size: 18px;\n height: 43px;\n width: 250px;\n padding: 8px 0;\n border: 0;\n border-radius: 4px;\n color: $white;\n background-color: $blue-60;\n transition: background-color 150ms;\n\n &:not([disabled]):active,\n &:not([disabled]):hover {\n background: $blue-70;\n border-color: $blue-80;\n }\n }\n\n .skip-button {\n font-size: 13px;\n margin-top: 20px;\n margin-bottom: 20px;\n background-color: $grey-10;\n color: $blue-50;\n border: 1px solid $blue-50;\n border-radius: 2px;\n min-height: 24px;\n padding: 5px 10px;\n transition: background-color 150ms, color 150ms, border-color 150ms;\n\n &[disabled] {\n background-color: $grey-20;\n border-color: $grey-40;\n color: $grey-50;\n cursor: default;\n opacity: 0.5;\n }\n\n &:not([disabled]):hover {\n background-color: $blue-50;\n border-color: $blue-60;\n color: $white;\n }\n }\n}\n\n.firstrun-left-divider {\n position: relative;\n float: inline-start;\n clear: both;\n width: 435px;\n\n @media screen and (max-width: 825px) {\n width: 400px;\n }\n\n @media screen and (max-width: 790px) {\n margin: auto;\n float: none;\n width: 352px;\n text-align: center;\n }\n}\n\n.firstrun-content {\n line-height: 1.5;\n margin-bottom: 48px;\n max-width: 352px;\n background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n padding-bottom: 210px;\n}\n\na.firstrun-link { // sass-lint:disable-line no-qualifying-elements\n color: $white;\n display: block;\n text-decoration: underline;\n\n &:hover,\n &:active,\n &:focus {\n color: $white;\n }\n}\n\n.firstrun-title {\n background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n background-size: 90px 90px;\n margin: 40px 0 10px;\n padding-top: 110px;\n\n @media screen and (max-width: 790px) {\n background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n background-size: 90px 90px;\n }\n\n &:dir(rtl) {\n background-position: top right;\n }\n}\n\n.fxaccounts-container {\n position: absolute;\n bottom: 0;\n right: 0;\n top: 0;\n left: 0;\n color: $white;\n height: 515px;\n margin: auto;\n width: 819px;\n z-index: 10;\n transition: opacity 0.3s;\n opacity: 0;\n\n @media screen and (max-width: 825px) {\n width: 784px;\n }\n\n @media screen and (max-width: 790px) {\n width: auto;\n height: 100%;\n }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n opacity: 0;\n transform: translateY(-5px);\n}\n\n.error {\n display: none;\n}\n\n.error.active {\n display: block;\n padding: 5px 12px;\n animation: fade-down 450ms;\n font-size: 12px;\n font-weight: 500;\n color: $white;\n background-color: $red-60;\n position: absolute;\n inset-inline-start: 50px;\n top: -28px;\n border-radius: 2px;\n\n &::before {\n inset-inline-start: 12px;\n background: $red-60;\n bottom: -8px;\n content: '.';\n height: 16px;\n position: absolute;\n text-indent: -999px;\n transform: rotate(45deg);\n white-space: nowrap;\n width: 16px;\n z-index: -1;\n }\n}\n\n@keyframes fade-down {\n 0% {\n opacity: 0;\n transform: translateY(-15px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n"
],
"names": [],
- "mappings": ";AAAA,+BAA+B;AEA/B,AAAA,IAAI,CAAC;EACH,UAAU,EAAE,UAAU,GACvB;;AAED,AAAA,CAAC;AACD,CAAC,AAAA,QAAQ;AACT,CAAC,AAAA,OAAO,CAAC;EACP,UAAU,EAAE,OAAO,GACpB;;AAED,AAAA,CAAC,AAAA,kBAAkB,CAAC;EAClB,MAAM,EAAE,CAAC,GACV;;AAED,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,CAAC,GACV;;AAED,AAAA,MAAM;AACN,KAAK,CAAC;EACJ,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,OAAO,GACnB;;CAED,AAAA,AAAA,MAAC,AAAA,EAAQ;EACP,OAAO,EAAE,eAAe,GACzB;;AEPD,AAAA,IAAI,CAAC;EAEH,yBAAyB,CAAA,QAAC;EAC1B,6BAA6B,CAAA,QAAC;EAC9B,+BAA+B,CAAA,QAAC;EAChC,6BAA6B,CAAA,QAAC;EAC9B,+BAA+B,CAAA,QAAC;EAChC,6BAA6B,CAAA,yBAAC;EAC9B,4BAA4B,CAAA,QAAC;EAC7B,2BAA2B,CAAA,sBAAC;EAC5B,6BAA6B,CAAA,sBAAC;EAC9B,4BAA4B,CAAA,QAAC;EAC7B,+BAA+B,CAAA,mBAAC;EAChC,2BAA2B,CAAA,QAAC;EAC5B,6BAA6B,CAAA,QAAC;EAC9B,+BAA+B,CAAA,QAAC;EAChC,2BAA2B,CAAA,QAAC;EAC5B,6BAA6B,CAAA,QAAC;EAC9B,iCAAiC,CAAA,KAAC;EAClC,uBAAuB,CAAA,sBAAC;EAnCxB,4BAA4B,CAAA,QAAC;EAC7B,gCAAgC,CAAA,mDAAC;EAsCjC,qCAAqC,CAAA,QAAC;EACtC,iCAAiC,CAAA,KAAC;EAGlC,oBAAoB,CAAA,KAAC;EACrB,sBAAsB,CAAA,yBAAC;EAGvB,kCAAkC,CAAA,QAAC;EACnC,sCAAsC,CAAA,QAAC;EACvC,yCAAyC,CAAA,QAAC;EAG1C,4BAA4B,CAAA,YAAC;EAC7B,8BAA8B,CAAA,KAAC;EAC/B,qCAAqC,CAAA,QAAC;EACtC,uCAAuC,CAAA,0BAAC;EACxC,0BAA0B,CAAA,sBAAC;EAC3B,8BAA8B,CAAA,QAAC;EAG/B,kCAAkC,CAAA,KAAC;EACnC,6BAA6B,CAAA,qDAAC;EAC9B,6BAA6B,CAAA,QAAC;EAG9B,kCAAkC,CAAA,QAAC;EACnC,8BAA8B,CAAA,KAAC;EAC/B,4BAA4B,CAAA,mBAAC;EAC7B,+BAA+B,CAAA,QAAC;EAChC,oBAAoB,CAAA,kCAAC;EAGrB,kCAAkC,CAAA,KAAC;EACnC,gCAAgC,CAAA,YAAC,GA6DlC;EAtHD,AA2DE,IA3DE,CA2DD,AAAA,qBAAC,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAAE;IAE/C,yBAAyB,CAAA,QAAC;IAC1B,6BAA6B,CAAA,yBAAC;IAC9B,+BAA+B,CAAA,yBAAC;IAChC,6BAA6B,CAAA,QAAC;IAC9B,+BAA+B,CAAA,QAAC;IAChC,6BAA6B,CAAA,yBAAC;IAC9B,4BAA4B,CAAA,yBAAC;IAC7B,2BAA2B,CAAA,yBAAC;IAC5B,6BAA6B,CAAA,yBAAC;IAC9B,4BAA4B,CAAA,yBAAC;IAC7B,+BAA+B,CAAA,yBAAC;IAChC,2BAA2B,CAAA,QAAC;IAC5B,6BAA6B,CAAA,QAAC;IAC9B,+BAA+B,CAAA,QAAC;IAChC,2BAA2B,CAAA,QAAC;IAC5B,6BAA6B,CAAA,yBAAC;IAC9B,iCAAiC,CAAA,QAAC;IAClC,uBAAuB,CAAA,yBAAC;IA9F1B,4BAA4B,CAAA,QAAC;IAC7B,gCAAgC,CAAA,qDAAC;IAiG/B,qCAAqC,CAAA,QAAC;IACtC,iCAAiC,CAAA,QAAC;IAGlC,oBAAoB,CAAA,QAAC;IACrB,sBAAsB,CAAA,sBAAC;IAGvB,kCAAkC,CAAA,yBAAC;IACnC,sCAAsC,CAAA,yBAAC;IACvC,yCAAyC,CAAA,KAAC;IAG1C,4BAA4B,CAAA,yBAAC;IAC7B,8BAA8B,CAAA,QAAC;IAC/B,qCAAqC,CAAA,QAAC;IACtC,uCAAuC,CAAA,uBAAC;IACxC,0BAA0B,CAAA,yBAAC;IAC3B,8BAA8B,CAAA,KAAC;IAG/B,kCAAkC,CAAA,QAAC;IACnC,6BAA6B,CAAA,KAAC;IAC9B,6BAA6B,CAAA,yBAAC;IAG9B,kCAAkC,CAAA,QAAC;IACnC,8BAA8B,CAAA,QAAC;IAC/B,4BAA4B,CAAA,yBAAC;IAC7B,+BAA+B,CAAA,QAAC;IAChC,oBAAoB,CAAA,kCAAC;IAGrB,kCAAkC,CAAA,QAAC;IACnC,gCAAgC,CAAA,yBAAC,GAClC;;AC1IH,AAAA,KAAK,CAAC;EACJ,mBAAmB,EAAE,aAAa;EAClC,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EFgFL,IAAI;EE/Ed,uBAAuB,EAAE,IAAI;EAC7B,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,gCAAgC;EACtC,MAAM,EF4EI,IAAI;EE3Ed,cAAc,EAAE,MAAM;EACtB,KAAK,EF0EK,IAAI,GEoGf;EAvLD,AAWE,KAXG,AAWF,YAAY,CAAC;IACZ,iBAAiB,EAAE,GAAG,GACvB;EAbH,AAeE,KAfG,AAeF,kBAAkB,CAAC;IAClB,iBAAiB,EAAE,GAAG,GACvB;EAjBH,AAmBE,KAnBG,AAmBF,oBAAoB,CAAC;IACpB,gBAAgB,EAAE,yCAAyC,GAC5D;EArBH,AAuBE,KAvBG,AAuBF,qBAAqB,CAAC;IACrB,gBAAgB,EAAE,gDAAgD,GACnE;EAzBH,AA2BE,KA3BG,AA2BF,iBAAiB,CAAC;IACjB,IAAI,EAAE,kCAAkC;IACxC,gBAAgB,EAAE,iDAAwC,GAC3D;EA9BH,AAgCE,KAhCG,AAgCF,YAAY,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EAlCH,AAoCE,KApCG,AAoCF,YAAY,CAAC;IACZ,gBAAgB,EAAE,6CAA6C,GAChE;EAtCH,AAwCE,KAxCG,AAwCF,kBAAkB,CAAC;IAClB,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,uDAA8C;IAChE,eAAe,EF0CA,IAAI;IEzCnB,MAAM,EFyCS,IAAI;IExCnB,KAAK,EFwCU,IAAI,GEvCpB;EA9CH,AAgDE,KAhDG,AAgDF,aAAa,CAAC;IACb,gBAAgB,EAAE,kDAAyC,GAC5D;EAlDH,AAoDE,KApDG,AAoDF,UAAU,CAAC;IACV,gBAAgB,EAAE,+CAAsC,GACzD;EAtDH,AAwDE,KAxDG,AAwDF,YAAY,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EA1DH,AA4DE,KA5DG,AA4DF,gBAAgB,CAAC;IAEhB,gBAAgB,EAAE,oDAA2C,GAC9D;IA/DH,AF4ME,KE5MG,AA4DF,gBAAgB,AFgJhB,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EE9MH,AAiEE,KAjEG,AAiEF,wBAAwB,CAAC;IACxB,gBAAgB,EAAE,gDAAgD,GACnE;EAnEH,AAqEE,KArEG,AAqEF,cAAc,CAAC;IACd,gBAAgB,EAAE,yCAAyC,GAC5D;EAvEH,AAyEE,KAzEG,AAyEF,SAAS,CAAC;IAET,gBAAgB,EAAE,8CAAqC,GACxD;IA5EH,AF4ME,KE5MG,AAyEF,SAAS,AFmIT,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EE9MH,AA8EE,KA9EG,AA8EF,WAAW,CAAC;IAEX,gBAAgB,EAAE,gDAAuC,GAC1D;IAjFH,AF4ME,KE5MG,AA8EF,WAAW,AF8HX,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EE9MH,AAmFE,KAnFG,AAmFF,UAAU,CAAC;IACV,gBAAgB,EAAE,+CAAsC,GACzD;EArFH,AAuFE,KAvFG,AAuFF,YAAY,CAAC;IACZ,gBAAgB,EAAE,iDAAwC,GAC3D;EAzFH,AA2FE,KA3FG,AA2FF,iBAAiB,CAAC;IACjB,gBAAgB,EAAE,sDAA6C,GAChE;EA7FH,AA+FE,KA/FG,AA+FF,kBAAkB,CAAC;IAClB,gBAAgB,EAAE,wCAAwC,GAC3D;EAjGH,AAmGE,KAnGG,AAmGF,cAAc,CAAC;IACd,gBAAgB,EAAE,mDAA0C;IAC5D,SAAS,EAAE,eAAe,GAC3B;EAtGH,AAwGE,KAxGG,AAwGF,SAAS,CAAC;IACT,gBAAgB,EAAE,wCAAwC,GAC3D;EA1GH,AA4GE,KA5GG,AA4GF,cAAc,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;EA9GH,AAgHE,KAhHG,AAgHF,eAAe,CAAC;IAEf,gBAAgB,EAAE,8CAAqC;IACvD,eAAe,EF/BC,IAAI;IEgCpB,MAAM,EFhCU,IAAI;IEiCpB,KAAK,EFjCW,IAAI,GEkCrB;IAtHH,AF4ME,KE5MG,AAgHF,eAAe,AF4Ff,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;EE9MH,AAwHE,KAxHG,AAwHF,WAAW,CAAC;IACX,gBAAgB,EAAE,2CAA2C,GAC9D;EA1HH,AA4HE,KA5HG,AA4HF,cAAc,CAAC;IACd,gBAAgB,EAAE,wEAAwE,GAC3F;EA9HH,AAgIE,KAhIG,AAgIF,UAAU,CAAC;IACV,gBAAgB,EAAE,0CAA0C,GAC7D;EAlIH,AAoIE,KApIG,AAoIF,eAAe,CAAC;IACf,gBAAgB,EAAE,oDAA2C,GAC9D;EAtIH,AAwIE,KAxIG,AAwIF,kBAAkB,CAAC;IAClB,gBAAgB,EAAE,uDAA8C,GACjE;EA1IH,AA4IE,KA5IG,AA4IF,gBAAgB,CAAC;IAChB,gBAAgB,EAAE,qDAA4C,GAC/D;EA9IH,AAgJE,KAhJG,AAgJF,oBAAoB,CAAC;IACpB,gBAAgB,EAAE,yDAAgD,GACnE;EAlJH,AAoJE,KApJG,AAoJF,0BAA0B,CAAC;IAC1B,gBAAgB,EAAE,yDAAgD;IAClE,eAAe,EFlEC,IAAI;IEmEpB,MAAM,EFnEU,IAAI;IEoEpB,KAAK,EFpEW,IAAI,GEqErB;EAzJH,AA2JE,KA3JG,AA2JF,6BAA6B,CAAC;IAC7B,gBAAgB,EAAE,yDAAgD;IAClE,eAAe,EFzEC,IAAI;IE0EpB,MAAM,EF1EU,IAAI;IE2EpB,SAAS,EAAE,cAAc;IACzB,KAAK,EF5EW,IAAI,GEiFrB;IArKH,AAkKI,KAlKC,AA2JF,6BAA6B,AAO3B,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,aAAa,GACzB;EApKL,AAuKE,KAvKG,AAuKF,kBAAkB,CAAC;IAClB,gBAAgB,EAAE,yDAAgD;IAClE,SAAS,EAAE,cAAc,GAC1B;EA1KH,AA4KE,KA5KG,AA4KF,SAAS,CAAC;IACT,gBAAgB,EAAE,8CAAqC,GACxD;EA9KH,AAgLE,KAhLG,AAgLF,cAAc,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;EAlLH,AAoLE,KApLG,AAoLF,cAAc,CAAC;IACd,gBAAgB,EAAE,mDAA0C,GAC7D;;AJhLH,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,IAAI,GACb;;AAED,AAAA,IAAI;AACJ,KAAK,CAAC;EACJ,UAAU,EAAE,KAAK,GAClB;;AAED,AAAA,IAAI,CAAC;EACH,gBAAgB,EAAE,8BAA8B;EAChD,WAAW,EAAE,qFAAqF;EAClG,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,MAAM,GACnB;;AAED,AAAA,EAAE;AACF,EAAE,CAAC;EACD,WAAW,EAAE,MAAM,GACpB;;AAED,AAAA,CAAC,CAAC;EACA,eAAe,EAAE,IAAI,GACtB;;AAGD,AAAA,QAAQ,CAAC;EACP,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,gBAAgB;EACtB,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,GAAG,GACX;;AAED,AAAA,aAAa,CAAC;EACZ,MAAM,EGjCW,GAAG,CAAC,KAAK,CAAC,oCAAoC;EHkC/D,aAAa,EE6BC,GAAG;EF5BjB,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,CAAC;EACP,cAAc,EAAE,IAAI;EACpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG,GACb;;AAED,UAAU,CAAV,MAAU;EACR,IAAI;IACF,OAAO,EAAE,CAAC;EAGZ,EAAE;IACA,OAAO,EAAE,CAAC;;AAId,AAAA,aAAa,CAAC;EACZ,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,oBAAoB,GAMjC;EARD,AAIE,aAJW,AAIV,GAAG,CAAC;IACH,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,CAAC,GACX;;AAGH,AAAA,QAAQ,CAAC;EACP,UAAU,EGjEO,GAAG,CAAC,KAAK,CAAC,oCAAoC;EHkE/D,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,GAAG;EACnB,SAAS,EAAE,IAAI;EACf,eAAe,EAAE,UAAU;EAC3B,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,WAAW,GACrB;;AAGD,AAAA,OAAO;AACP,QAAQ,CAAC,MAAM,CAAC;EACd,gBAAgB,EAAE,oCAAoC;EACtD,MAAM,EG/ES,GAAG,CAAC,KAAK,CAAC,kCAAkC;EHgF3D,aAAa,EAAE,GAAG;EAClB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO;EACf,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,SAAS;EAClB,WAAW,EAAE,MAAM,GAsBpB;EA/BD,AAWE,OAXK,AAWJ,MAAM,AAAA,IAAK,CAAA,QAAQ;EAVtB,QAAQ,CAAC,MAAM,AAUZ,MAAM,AAAA,IAAK,CAAA,QAAQ,EAAE;IACpB,UAAU,EGjFG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;IHkF9D,UAAU,EAAE,gBAAgB,GAC7B;EAdH,AAgBE,OAhBK,AAgBJ,QAAQ;EAfX,QAAQ,CAAC,MAAM,AAeZ,QAAQ,CAAC;IACR,gBAAgB,EAAE,WAAW;IAC7B,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,SAAS,GAC3B;EArBH,AAwBE,OAxBK,AAwBJ,QAAQ,EAxBX,OAAO,AAyBJ,KAAK;EAxBR,QAAQ,CAAC,MAAM,AAuBZ,QAAQ;EAvBX,QAAQ,CAAC,MAAM,AAwBZ,KAAK,CAAC;IACL,gBAAgB,EAAE,kCAAkC;IACpD,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,kCAAkC;IACpD,KAAK,EE5DD,IAAI;IF6DR,mBAAmB,EAAE,IAAI,GAC1B;;AAGH,AACE,KADG,CACF,AAAA,IAAC,CAAK,MAAM,AAAX,GADJ,KAAK,CAEF,AAAA,IAAC,CAAK,QAAQ,AAAb,EAAe;EACf,aAAa,EEhDD,GAAG,GFiDhB;;AAIH,AAAA,mBAAmB,CAAC;EAClB,OAAO,EAAE,CAAC,GACX;;AMjID,AAAA,cAAc,CAAC;EACb,KAAK,EAAE,gCAAgC;EACvC,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,CAAC;EACZ,UAAU,EAAE,KAAK;EACjB,OAAO,EAAE,IAA8C,CJwE3C,IAAI,CAAJ,IAAI,GI1DjB;EAnBD,AAOE,cAPY,AAOX,aAAa,CAAC;IACb,OAAO,EAAE,KAAK,GACf;EATH,AAWE,cAXY,AAWX,YAAY,CAAC;IACZ,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK,GACnB;EAdH,AAgBE,cAhBY,CAgBZ,CAAC,CAAC;IACA,KAAK,EAAE,gCAAgC,GACxC;;AAGH,AAAA,kBAAkB,CAAC;EACjB,yBAAyB,CAAA,mBAAC;EAC1B,2BAA2B,CAAA,mBAAC,GAC7B;;AAED,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,IAAI;EAGZ,cAAc,EAAE,IAA4D;EAC5E,KAAK,EJ4DiB,KAAmE,GIrC1F;EArBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAP1B,AAAA,IAAI,CAAC;MAQD,KAAK,EJ0DkB,KAAmE,GItC7F;EAjBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAX1B,AAAA,IAAI,CAAC;MAYD,KAAK,EJuDiB,KAAmE,GIvC5F;EAbC,MAAM,EAAE,SAAS,EAAE,MAAM;IAf3B,AAAA,IAAI,CAAC;MAgBD,KAAK,EJoDkB,MAAmE,GIxC7F;EA5BD,AAmBE,IAnBE,CAmBF,OAAO,CAAC;IACN,aAAa,EJkCC,IAAoC;IIjClD,QAAQ,EAAE,QAAQ,GACnB;EAED,AAAA,UAAU,CAxBZ,IAAI,CAwBW;IACX,UAAU,EAAE,MAAM,GACnB;;AAIH,AAAA,sBAAsB,CAAC;EAErB,MAAM,EAAE,KAAK,GACd;;;AAED,AASE,aATW,CAUT,cAAc;AAVlB,aAAa,CAWT,cAAc,CAAC,QAAQ,AAAA,aAAa;AAXxC,aAAa,CAYT,OAAO,CAHa;EACpB,OAAO,EAAE,CAAC,GACX;;;AAXH,AAcI,aAdS,AAaV,GAAG,CAEF,cAAc;AAflB,aAAa,AAaV,GAAG,CAGF,cAAc,CAAC,QAAQ,AAAA,aAAa;AAhBxC,aAAa,AAaV,GAAG,CAIF,OAAO,CAHe;EACpB,OAAO,EAAE,CAAC,GACX;;AAIL,AAAA,wBAAwB,CAAC;EACvB,OAAO,EAAE,CAAC,CJJiB,IAAI,GIKhC;;AAED,AACE,aADW,CACX,MAAM,CAAC;EACL,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,OAAO;EACf,IAAI,EAAE,gCAAgC;EACtC,gBAAgB,EAAE,IAAI;EACtB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,IAAI;EACT,OAAO,EAAE,IAAI,GAUd;EApBH,AAYI,aAZS,CACX,MAAM,AAWH,MAAM,EAZX,aAAa,CACX,MAAM,AAYH,MAAM,CAAC;IACN,gBAAgB,EAAE,iCAAiC,GACpD;EAfL,AAiBI,aAjBS,CACX,MAAM,AAgBH,OAAO,CAAC;IACP,gBAAgB,EAAE,kCAAkC,GACrD;;ACxGL,AAAA,kBAAkB,CAAC;EACjB,WAAW,EAAE,MAAM;EACnB,aAAa,ELwEC,GAAG;EKvEjB,UAAU,EAAE,KAAK,CJSA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC;EIR/D,KAAK,EAAE,oCAAoC;EAC3C,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,SAAS,EL2HgB,IAAI;EK1H7B,eAAe,EAAE,MAAM;EACvB,aAAa,EAAE,MAAM;EACrB,WAAW,ELyHgB,GAAG,GK/G/B;EApBD,AAYE,kBAZgB,AAYf,iBAAiB,CAAC;IACjB,UAAU,EAAE,IAAI,GACjB;EAdH,AAgBE,kBAhBgB,CAgBhB,CAAC,CAAC;IACA,KAAK,EAAE,oCAAoC;IAC3C,eAAe,EAAE,SAAS,GAC3B;;ACPH,AAAA,UAAU,CAAC;EAGT,aAAa,EAAE,GAA4E,GAC5F;;AAED,AAAA,eAAe,CAAC;EACd,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC,CAXQ,KAAgB;EAYjC,OAAO,EAAE,CAAC,GAoFX;EAjFC,MAAM,EAAE,SAAS,EAAE,KAAK;IAN1B,ANwKE,eMxKa,CAOX,UAAW,CAAA,IAAI,ENiKjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,IAAI;MACvB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,IAAI;MACtB,kBAAkB,EAjHR,KAAI,GAkHf;IM7KH,ANiLE,eMjLa,CAWX,UAAW,CAAA,EAAE,ENsKf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMrKD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAjBjD,ANiLE,eMjLa,CAkBX,UAAW,CAAA,EAAE,EN+Jf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMhKD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAtBjD,ANiLE,eMjLa,CAuBX,UAAW,CAAA,IAAI,EN0JjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMzJD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IA7BlD,ANiLE,eMjLa,CA8BX,UAAW,CAAA,EAAE,ENmJf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMpJD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IAlClD,ANiLE,eMjLa,CAmCX,UAAW,CAAA,IAAI,EN8IjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EM7ID,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IAzCnD,ANiLE,eMjLa,CA0CX,UAAW,CAAA,EAAE,ENuIf,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMxID,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IA9CnD,ANiLE,eMjLa,CA+CX,UAAW,CAAA,IAAI,ENkIjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EMtLH,AAoDE,eApDa,CAoDb,gBAAgB,CAAC;IACf,OAAO,EAAE,IAAI,GACd;EAED,MAAM,EAAE,SAAS,EAAE,KAAK;IAxD1B,AAyDI,eAzDW,CAyDX,gBAAgB,CAAC;MACf,OAAO,EAAE,YAAY,GACtB;EAGH,MAAM,EAAE,SAAS,EAAE,KAAK;IA9D1B,AA+DI,eA/DW,CA+DX,gBAAgB,CAAC;MACf,OAAO,EAAE,IAAI,GACd;EAGH,MAAM,EAAE,SAAS,EAAE,MAAM;IApE3B,AAqEI,eArEW,CAqEX,gBAAgB,CAAC;MACf,OAAO,EAAE,YAAY,GACtB;EAvEL,AA0EE,eA1Ea,CA0Eb,EAAE,CAAC;IACD,MAAM,EAAE,CAAC,CAAC,CAAC,CA1FY,GAAG,GA2F3B;EA5EH,AAgFM,eAhFS,AA8EZ,IAAK,CAAA,WAAW,EACf,eAAe,AAAA,SAAU,CAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAC9C,KAAK,CAAC;IN0CV,UAAU,EAAE,KAAK,CChIA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EAKhD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;ID4HhE,UAAU,EAAE,gBAAgB,GMzCvB;EAlFP,ANgKE,eMhKa,AA8EZ,IAAK,CAAA,WAAW,EACf,eAAe,AAAA,SAAU,CAAA,OAAO,EAAE,MAAM,EAAE,MAAM,ENiFlD,oBAAoB,CAAC;IACnB,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,QAAQ;IACnB,gBAAgB,EAAE,KAAK,GACxB;;AM1EH,AAAA,eAAe,CAAC;EACd,OAAO,EAAE,CAAC,CApGO,IAAgB;EAqGjC,OAAO,EAAE,YAAY,GA+LtB;EAjMD,AAKE,eALa,CAKb,eAAe,CAAC;IACd,QAAQ,EAAE,QAAQ,GAanB;IAnBH,AAQI,eARW,CAKb,eAAe,GAGX,CAAC,CAAC;MACF,KAAK,EAAE,OAAO;MACd,OAAO,EAAE,KAAK;MACd,OAAO,EAAE,IAAI,GAOd;MAlBL,AAcQ,eAdO,CAKb,eAAe,GAGX,CAAC,AAKA,SAAU,CAAA,OAAO,EAAE,MAAM,EACxB,KAAK,CAAC;QNkBZ,UAAU,EAAE,KAAK,CChIA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EAKhD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;QD4HhE,UAAU,EAAE,gBAAgB,GMjBrB;EAhBT,AN0CE,eM1Ca,CN0Cb,oBAAoB,CAAC;IACnB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,sCAAsC;IACxD,gBAAgB,EAAE,4CAA4C;IAC9D,mBAAmB,EAAE,GAAG;IACxB,MAAM,ECjJO,GAAG,CAAC,KAAK,CAAC,kCAAkC;IDkJzD,aAAa,EAAE,IAAI;IACnB,UAAU,EAlCkB,CAAC,CAAC,GAAG,CA7G3B,qBAAO;IAgJb,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,gCAAgC;IACtC,MAAM,EAtCiB,IAAI;IAuC3B,gBAAgB,EAAI,OAA6B;IACjD,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAI,OAA6B;IACpC,SAAS,EAAE,WAAW;IACtB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,kBAAkB;IACvC,KAAK,EA9CkB,IAAI,GAoD5B;IMlEH,AN8DI,eM9DW,CN0Cb,oBAAoB,AAoBjB,SAAU,CAAA,OAAO,EAAE,MAAM,EAAE;MAC1B,OAAO,EAAE,CAAC;MACV,SAAS,EAAE,QAAQ,GACpB;EMjEL,AAuBE,eAvBa,CAuBb,KAAK,CAAC;IACJ,aAAa,EAnIS,GAAG;IAoIzB,UAAU,EAAE,KAAK,CLzHF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,EKyHxB,yBAAyB;IAC9D,MAAM,EAAE,OAAO;IACf,MAAM,ENtDE,IAAI;IMuDZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,ENxDG,IAAI;IM2DZ,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,kCAAkC;IACzC,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;IAChB,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,SAAS;IACzB,UAAU,EAAE,UAAU,CAzIE,KAAK,GA8I9B;IA5CH,AAyCI,eAzCW,CAuBb,KAAK,AAkBF,QAAQ,CAAC;MACR,OAAO,EAAE,mBAAmB,GAC7B;EA3CL,AA8CE,eA9Ca,CA8Cb,WAAW,CAAC;IACV,gBAAgB,ENrGZ,IAAI;IMsGR,mBAAmB,EAAE,QAAQ;IAC7B,eAAe,EAzJD,KAAK;IA0JnB,aAAa,EA7JS,GAAG;IA8JzB,UAAU,EAAE,KAAK,CLnJF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC;IKoJ7D,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,IAAI,GAKZ;IA/DH,AA4DI,eA5DW,CA8Cb,WAAW,AAcR,OAAO,CAAC;MACP,OAAO,EAAE,CAAC,GACX;EA9DL,AAkEE,eAlEa,CAkEb,cAAc,CAAC;IACb,gBAAgB,EAAE,uCAAuC;IACzD,mBAAmB,EAAE,aAAa;IAClC,iBAAiB,EAAE,SAAS;IAC5B,aAAa,EAjLS,GAAG;IAkLzB,UAAU,EAAE,kCAAkC;IAC9C,QAAQ,EAAE,QAAQ,GACnB;EAzEH,AA2EE,eA3Ea,CA2Eb,UAAU,CAAC;IACT,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,CAAC;IACrB,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,IAAI,GACZ;EAjFH,AAmFE,eAnFa,CAmFb,aAAa;EAnFf,eAAe,CAoFb,eAAe,CAAC;IACd,eAAe,EA1LC,IAAI;IA2LpB,MAAM,EA1LY,IAAG;IA2LrB,MAAM,EA7LkB,IAAI;IA8L5B,gBAAgB,EA5LE,IAAG;IA6LrB,KAAK,EA/LmB,IAAI;IAkM5B,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,MAAM,GAKxB;IApGH,AAiGI,eAjGW,CAmFb,aAAa,CAcV,AAAA,aAAC,AAAA,CAAc,QAAQ;IAjG5B,eAAe,CAoFb,eAAe,CAaZ,AAAA,aAAC,AAAA,CAAc,QAAQ,CAAC;MACvB,OAAO,EAAE,mBAAmB,GAC7B;EAnGL,AAsGE,eAtGa,CAsGb,eAAe,CAAC;IACd,gBAAgB,EAAE,iDAAwC;IAC1D,eAAe,EAAE,IAAI;IACrB,gBAAgB,ENlNV,OAAO;IMmNb,aAAa,EAhNW,IAAI;IAiN5B,uBAAuB,EAAE,IAAI;IAC7B,IAAI,ENlKA,IAAI;IMmKR,UAAU,EAAE,yBAAyB;IACrC,mBAAmB,EAhNK,KAAK;IAiN7B,mBAAmB,EAAE,wDAAwD,GAC9E;EAhHH,AAkHE,eAlHa,AAkHZ,MAAM,CAAC,eAAe,CAAC;IAItB,eAAe,EAAE,IAAI;IACrB,aAAa,EAJa,IAA8B;IAKxD,MAAM,EAJc,IAAyB;IAK7C,MAAM,EANoB,IAA8B;IAOxD,gBAAgB,EANI,IAAyB;IAO7C,KAAK,EARqB,IAA8B,GASzD;EA5HH,AAgII,eAhIW,AA+HZ,gBAAgB,CACf,UAAU,CAAC;IACT,gBAAgB,ENvLd,IAAI,GMwLP;EAlIL,AAqIE,eArIa,CAqIb,MAAM,CAAC;IACL,KAAK,EAAE,kCAAkC;IACzC,IAAI,EAAE,WAAW;IACjB,MAAM,EAlPe,IAAI;IAmPzB,WAAW,EAnPU,IAAI;IAoPzB,UAAU,EAAE,MAAM;IAClB,KAAK,ENtKG,IAAI;IMuKZ,QAAQ,EAAE,QAAQ,GAsBnB;IAlKH,AA8II,eA9IW,CAqIb,MAAM,CASJ,KAAK,CAAC;MACJ,IAAI,EAAE,iCAAiC;MACvC,kBAAkB,EAAE,CAAC;MACrB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,IAAI,GACV;IAnJL,AAqJI,eArJW,CAqIb,MAAM,CAgBJ,IAAI,CAAC;MACH,MAAM,EAhQa,IAAI;MAiQvB,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,MAAM;MAChB,aAAa,EAAE,QAAQ;MACvB,WAAW,EAAE,MAAM,GACpB;IA3JL,AA8JM,eA9JS,CAqIb,MAAM,AAwBH,OAAO,CACN,IAAI,CAAC;MACH,OAAO,EAAE,MAAM,GAChB;EAhKP,AAoKE,eApKa,CAoKb,YAAY,CAAC;IACX,gBAAgB,EAAE,+CAAsC,GACzD;EAtKH,AAyKI,eAzKW,AAwKZ,YAAY,CACX,KAAK,CAAC;IACJ,UAAU,EAAE,KAAK,CL1QJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,GK2Q5D;EA3KL,AA6KI,eA7KW,AAwKZ,YAAY,CAKX,WAAW,CAAC;IACV,OAAO,EAAE,IAAI,GACd;EA/KL,AAmLI,eAnLW,AAkLZ,QAAQ,CACP,KAAK,CAAC;IACJ,UAAU,ENzRN,OAAO;IM0RX,UAAU,EAAE,IAAI,GAMjB;IA3LL,AAuLM,eAvLS,AAkLZ,QAAQ,CACP,KAAK,CAIH,CAAC,EAvLP,eAAe,AAkLZ,QAAQ,CACP,KAAK,AAKF,QAAQ,CAAC;MACR,OAAO,EAAE,IAAI,GACd;EA1LP,AA6LI,eA7LW,AAkLZ,QAAQ,CAWP,MAAM,CAAC;IACL,UAAU,EAAE,MAAM,GACnB;;AAIL,AACE,sBADoB,CACpB,MAAM,CAAC;EACL,UAAU,EL/RK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO;EMoSb,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,MAAM;EACd,UAAU,EAAE,iBAAiB;EAC7B,UAAU,EAAE,IAAI;EAChB,UAAU,EAAE,MAAM;EAClB,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,IAAI;EACT,KAAK,EN/Ne,KAAmE,GMwOxF;EAPC,MAAM,EAAE,SAAS,EAAE,KAAK;IAb5B,AACE,sBADoB,CACpB,MAAM,CAAC;MAaH,KAAK,ENjOgB,KAAmE,GMuO3F;EAHC,MAAM,EAAE,SAAS,EAAE,KAAK;IAjB5B,AACE,sBADoB,CACpB,MAAM,CAAC;MAiBH,KAAK,ENpOe,KAAmE,GMsO1F;;AAGH,AAIE,aAJW,CAIX,cAAc,CAAC;EACb,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,QAAQ,GACjB;;AAPH,AASE,aATW,CASX,qBAAqB,CAAC;EACpB,SAAS,EAAE,KAAiD;EAC5D,MAAM,EAAE,MAAM;EACd,OAAO,EAVM,IAAI,GAelB;EAjBH,AAcI,aAdS,CASX,qBAAqB,CAKnB,eAAe,CAAC;IACd,cAAc,EAAE,IAAI,GACrB;;AAhBL,AAmBE,aAnBW,CAmBX,2BAA2B,CAAC;EAC1B,SAAS,EAAE,KAAK;EAChB,MAAM,EAAE,MAAM;EACd,OAAO,EApBM,IAAI,GA8BlB;EAhCH,AAwBI,aAxBS,CAmBX,2BAA2B,GAKvB,GAAG,CAAC;IACJ,iBAAiB,EAAE,KAAK,GACzB;EA1BL,AA4BI,aA5BS,CAmBX,2BAA2B,CASzB,eAAe,CAAC;IACd,mBAAmB,EAAE,CAAC;IACtB,iBAAiB,EAAE,IAAI,GACxB;;AA/BL,AAkCE,aAlCW,CAkCX,eAAe,CAAC;EACd,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,QAAQ;EAChB,mBAAmB,EAnCN,IAAI,GAoClB;;AAtCH,AAwCE,aAxCW,CAwCX,mBAAmB,CAAC;EAClB,OAAO,EAAE,IAAI,GACd;;AA1CH,AA4CE,aA5CW,CA4CX,KAAK,CAAC;EACJ,SAAS,EN1Qa,IAAI,GM2Q3B;;AA9CH,AAgDE,aAhDW,CAgDX,aAAa,CAAC;EACZ,KAAK,EAAE,IAAI,GAuIZ;EAxLH,AAmDI,aAnDS,CAgDX,aAAa,CAGX,MAAM,CAAC;IACL,QAAQ,EAAE,QAAQ,GAQnB;IA5DL,AAsDM,aAtDO,CAgDX,aAAa,CAGX,MAAM,CAGJ,iBAAiB,CAAC;MAChB,QAAQ,EAAE,QAAQ;MAClB,SAAS,EAAE,gBAAgB;MAC3B,GAAG,EAAE,GAAG;MACR,gBAAgB,EAAE,GAAG,GACtB;EA3DP,AA+DM,aA/DO,CAgDX,aAAa,CAcX,IAAI,CACF,KAAK,AAAA,IAAK,CAAA,GAAG,EAAE;IACb,aAAa,EAAE,IAAI,GACpB;EAjEP,AAmEM,aAnEO,CAgDX,aAAa,CAcX,IAAI,CAKF,KAAK,AAAA,IAAK,CAAA,GAAG,EAAE;IACb,YAAY,EAAE,IAAI,GAMnB;IA1EP,AAsEQ,aAtEK,CAgDX,aAAa,CAcX,IAAI,CAKF,KAAK,AAAA,IAAK,CAAA,GAAG,CAGV,IAAK,CAAA,kBAAkB,EAAE;MACxB,SAAS,EAAE,GAAG;MACd,UAAU,EAAE,KAAK,GAClB;EAzET,AA6EI,aA7ES,CAgDX,aAAa,CA6BX,0BAA0B,CAAC;IACzB,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,GAAG;IACf,MAAM,EAAE,OAAO,GAKhB;IAtFL,AAmFM,aAnFO,CAgDX,aAAa,CA6BX,0BAA0B,AAMvB,MAAM,CAAC;MACN,eAAe,EAAE,SAAS,GAC3B;EArFP,AAwFI,aAxFS,CAgDX,aAAa,CAwCX,6BAA6B,CAAC;IAC5B,UAAU,EAAE,GAAG,GAkChB;IA3HL,AA2FM,aA3FO,CAgDX,aAAa,CAwCX,6BAA6B,CAG3B,kBAAkB,CAAC;MACjB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,MAAM;MAChB,QAAQ,EAAE,QAAQ;MAClB,SAAS,EAAE,gBAAgB;MAC3B,GAAG,EAAE,GAAG;MACR,gBAAgB,EAAE,GAAG,GACtB;IAnGP,AAuGM,aAvGO,CAgDX,aAAa,CAwCX,6BAA6B,CAe3B,kBAAkB,CAAC;MASjB,KAAK,EAAE,KAAK;MACZ,MAAM,EAAE,IAAI;MACZ,uBAAuB,EAAE,IAAI;MAC7B,IAAI,ENvbF,OAAO;MMwbT,gBAAgB,EAAE,mDAAmD;MACrE,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,GAK3D;;AAlBC,UAAU,CAAV,sBAAU;EACR,IAAI;IAAG,SAAS,EAAE,kBAAkB;;AAGtC,UAAU,CAAV,0BAAU;EACR,IAAI;IAAG,SAAS,EAAE,iBAAiB;MA7G7C,AAuHQ,aAvHK,CAgDX,aAAa,CAwCX,6BAA6B,CAe3B,kBAAkB,AAgBf,IAAK,CAAA,GAAG,EAAE;QACT,cAAc,EAAE,0BAA0B,GAC3C;EAzHT,AA8HM,aA9HO,CAgDX,aAAa,CA6EX,KAAK,CACF,AAAA,IAAC,CAAK,MAAM,AAAX,EAAa;IACb,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,ELzbC,GAAG,CAAC,KAAK,CAAC,4BAA4B;IK0b7C,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI,GAYhB;IAjJP,AAuIQ,aAvIK,CAgDX,aAAa,CA6EX,KAAK,CACF,AAAA,IAAC,CAAK,MAAM,AAAX,CASC,MAAM,CAAC;MACN,MAAM,ELhcM,GAAG,CAAC,KAAK,CAAC,iCAAiC;MKicvD,UAAU,EAAE,qCAAqC,GAClD;IA1IT,AA4IQ,aA5IK,CAgDX,aAAa,CA6EX,KAAK,CACF,AAAA,IAAC,CAAK,MAAM,AAAX,EAcC,AAAA,QAAC,AAAA,EAAU;MACV,MAAM,ELtcD,GAAG,CAAC,KAAK,CAAC,4BAA4B;MKuc3C,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,GAAG,GACb;EAhJT,AAsJQ,aAtJK,CAgDX,aAAa,CAoGX,QAAQ,CACN,KAAK,CACF,AAAA,IAAC,CAAK,MAAM,AAAX,EAAa;IACb,MAAM,EL9cK,GAAG,CAAC,KAAK,CDCrB,OAAO;IM8cN,UAAU,EL7dV,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CDeV,OAAO,ECfY,CAAC,CAAC,CAAC,CAAC,CAAC,CDwIX,GAAG,CAzHhB,qBAAO,GM+cP;EAzJT,AA6JI,aA7JS,CAgDX,aAAa,CA6GX,cAAc,CAAC;IACb,SAAS,EAAE,gBAAgB;IAC3B,UAAU,ENrdP,OAAO;IMsdV,aAAa,EAAE,GAAG;IAClB,KAAK,ENjbH,IAAI;IMkbN,kBAAkB,EAAE,GAAG;IACvB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,CAAC,GAiBX;IAvLL,AAyKM,aAzKO,CAgDX,aAAa,CA6GX,cAAc,AAYX,QAAQ,CAAC;MACR,UAAU,ENheT,OAAO;MMieR,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,IAAI;MACZ,kBAAkB,EAAE,IAAI;MACxB,QAAQ,EAAE,QAAQ;MAClB,WAAW,EAAE,MAAM;MACnB,GAAG,EAAE,IAAI;MACT,SAAS,EAAE,aAAa;MACxB,WAAW,EAAE,MAAM;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,EAAE,GACZ;;AAtLP,AA0LE,aA1LW,CA0LX,QAAQ,CAAC;EACP,eAAe,EAAE,QAAQ,GAM1B;EAjMH,AA6LI,aA7LS,CA0LX,QAAQ,CAGN,MAAM,CAAC;IACL,mBAAmB,EAAE,IAAI;IACzB,iBAAiB,EAAE,CAAC,GACrB;;AAGH,MAAM,EAAE,SAAS,EAAE,KAAK;EAnM1B,AAoMI,aApMS,CAoMT,mBAAmB,CAAC;IAClB,cAAc,EAAE,MAAM,GAKvB;IA1ML,AAuMM,aAvMO,CAoMT,mBAAmB,CAGjB,eAAe,CAAC;MACd,mBAAmB,EAAE,CAAC,GACvB;;AAzMP,AA8ME,aA9MW,CA8MX,MAAM,CAAC;EACL,gBAAgB,EAAE,IAAI,GACvB;;AAhNH,AAmNE,aAnNW,EAmNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ;AAnNhC,aAAa,EAoNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,CAAC;EACxB,kBAAkB,EAAE,OAAO;EAC3B,QAAQ,EAAE,QAAQ,GACnB;;AAvNH,AAyNE,aAzNW,EAyNX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK;AAzNzC,aAAa,EA0NX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,CAAC;EAChC,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ,GACnB;;AA9NH,AAkOE,aAlOW,EAkOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK,AAAA,QAAQ;AAlOjD,aAAa,EAmOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,QAAQ,CAAC;EACxC,UAAU,EAAE,8BAA8B;EAC1C,MAAM,EL9hBK,GAAG,CAAC,KAAK,CAAC,4BAA4B;EK+hBjD,aAAa,ENleD,GAAG;EMmef,OAAO,EAAE,EAAE;EACX,MAAM,EAAE,IAAI;EACZ,IAAI,EATa,IAAG;EAUpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAXc,IAAG;EAYpB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,CAAC,GAMX;GAJC,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EA/OL,aAAa,EAkOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK,AAAA,QAAQ,GAa7C,AAAA,GAAC,CAAI,KAAK,AAAT;EA/OL,aAAa,EAmOX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,QAAQ,CAYzB;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAjBU,IAAG,GAkBnB;;AAlPL,AAsPE,aAtPW,EAsPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK,AAAA,OAAO;AAtPhD,aAAa,EAuPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAAC;EACvC,UAAU,EAAE,2CAA2C,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;EAC/E,OAAO,EAAE,EAAE;EACX,MAAM,EAAE,IAAI;EACZ,IAAI,EA3Ba,IAAG;EA4BpB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EA7Bc,IAAG;EA8BpB,KAAK,EAAE,IAAI;EACX,uBAAuB,EAAE,IAAI;EAC7B,IAAI,EAAE,gCAAgC;EACtC,OAAO,EAAE,CAAC,GAMX;GAJC,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAnQL,aAAa,EAsPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK,AAAA,OAAO,GAa5C,AAAA,GAAC,CAAI,KAAK,AAAT;EAnQL,aAAa,EAuPX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAYxB;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EArCU,IAAG,GAsCnB;;AAtQL,AA2QI,aA3QS,EA0QX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,CAC/B,KAAK,CAAC;EACJ,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gCAAgC,GACvD;;AA7QL,AAiRE,aAjRW,EAiRX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,IAAI,KAAK,AAAA,OAAO,CAAC;EAC7C,OAAO,EAAE,CAAC,GACX;;AAnRH,AAqRE,aArRW,EAqRX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,AAAA,OAAO,CAAC;EACvC,OAAO,EAAE,CAAC,GACX;;AAvRH,AA0RE,aA1RW,EA0RX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,AAAA,MAAM,GAAG,KAAK,AAAA,QAAQ;AA1RjD,aAAa,EA2RX,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,IAAK,CAAA,QAAQ,CAAC,MAAM,GAAG,KAAK,AAAA,QAAQ,CAAC;EACpD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,gCAAgC,GACpD;;AAIH,UAAU,CAAV,UAAU;EACR,EAAE;IACA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,gBAAgB;EAG7B,IAAI;IACF,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,aAAa;;AC/mB5B,AACE,cADY,CACZ,aAAa,CAAC;EACZ,OAAO,EAAE,IAAI;EACb,QAAQ,EP0EE,IAAI;EOzEd,qBAAqB,EAAE,uBAA6B;EACpD,MAAM,EAAE,CAAC,GAyBV;EAvBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAP5B,APmME,cOnMY,CACZ,aAAa,CPkMb,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EO7LC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAXnD,APmME,cOnMY,CACZ,aAAa,CAWT,UAAW,CAAA,EAAE,EPuLjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EOvLC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,MAAM;IAjBpD,APmME,cOnMY,CACZ,aAAa,CAiBT,UAAW,CAAA,EAAE,EPiLjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;EOjLC,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,MAAM;IAvBrD,APmME,cOnMY,CACZ,aAAa,CAwBT,UAAW,CAAA,EAAE,EP0KjB,aAAa;IOnMf,cAAc,CACZ,aAAa,CAyBT,UAAW,CAAA,EAAE,EPyKjB,aAAa,CAAC;MACZ,iBAAiB,EAAE,GAAG;MACtB,mBAAmB,EAAE,IAAI;MACzB,gBAAgB,EAAE,CAAC;MACnB,kBAAkB,EAAE,IAAI,GACzB;;AOxMH,AAgCE,cAhCY,CAgCZ,oBAAoB,CAAC;EACnB,MAAM,ENtBS,GAAG,CAAC,KAAK,CAAC,oCAAoC;EMuB7D,aAAa,EPwCD,GAAG;EOvCf,OAAO,EAAE,IAAI;EACb,MAAM,EPwEI,KAAK;EOvEf,KAAK,EAAE,IAAI,GA6BZ;EAlEH,AAuCI,cAvCU,CAgCZ,oBAAoB,CAOlB,YAAY,CAAC;IACX,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,KAAK,GAoBjB;IA7DL,AA2CM,cA3CQ,CAgCZ,oBAAoB,CAOlB,YAAY,CAIV,iBAAiB,CAAC;MAChB,mBAAmB,EAAE,MAAM;MAC3B,iBAAiB,EAAE,SAAS;MAC5B,eAAe,EAAE,SAAS;MAC1B,uBAAuB,EAAE,IAAI;MAC7B,OAAO,EAAE,KAAK;MACd,IAAI,EAAE,kCAAkC;MACxC,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,MAAM;MACd,KAAK,EAAE,IAAI,GACZ;IArDP,AAuDM,cAvDQ,CAgCZ,oBAAoB,CAOlB,YAAY,CAgBV,oBAAoB,CAAC;MACnB,KAAK,EAAE,gCAAgC;MACvC,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,CAAC;MAChB,UAAU,EAAE,MAAM,GACnB;EAGH,MAAM,EAAE,SAAS,EAAE,MAAM;IA/D7B,AAgCE,cAhCY,CAgCZ,oBAAoB,CAAC;MAgCjB,MAAM,EPkDQ,KAAK,GOhDtB;;AAGH,AAAA,6BAA6B,CAAC;EAC5B,KAAK,EAAE,2CAA2C;EAClD,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,UAAU,EP+CO,IAAI;EO9CrB,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa,GAgD/B;EAtDD,AAQE,6BAR2B,CAQ3B,CAAC,CAAC;IACA,KAAK,EAAE,kCAAkC;IACzC,WAAW,EAAE,IAAI,GAMlB;IAhBH,AAYI,6BAZyB,CAQ3B,CAAC,AAIE,qBAAqB,CAAC;MACrB,WAAW,EAAE,MAAM;MACnB,SAAS,EAAE,IAAI,GAChB;EAKD,MAAM,EAAE,SAAS,EAAE,KAAK;IApB5B,AAkBE,6BAlB2B,CAkB3B,eAAe;IAlBjB,6BAA6B,CAmB3B,YAAY,GAAG,6BAA6B,CAAC;MAEzC,OAAO,EAAE,IAAI,GAEhB;EAED,MAAM,EAAE,SAAS,EAAE,KAAK;IAzB1B,AA0BI,6BA1ByB,CA0BzB,YAAY,CAAC;MACX,UAAU,EAAE,MAAM,GAanB;MAxCL,AA6BM,6BA7BuB,CA0BzB,YAAY,CAGV,qBAAqB,CAAC;QACpB,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,CAAC,GAQrB;QAvCP,AAiCQ,6BAjCqB,CA0BzB,YAAY,CAGV,qBAAqB,CAInB,kBAAkB,CAAC;UACjB,SAAS,EAAE,IAAI;UACf,OAAO,EAAE,KAAK;UACd,iBAAiB,EAAE,CAAC;UACpB,MAAM,EAAE,UAAU,GACnB;IAtCT,AA0CI,6BA1CyB,CA0CzB,6BAA6B,CAAC;MAC5B,KAAK,EAAE,IAAI,GASZ;MApDL,AA6CM,6BA7CuB,CA0CzB,6BAA6B,CAG3B,qBAAqB,CAAC;QACpB,eAAe,EAAE,MAAM,GAKxB;QAnDP,AAgDQ,6BAhDqB,CA0CzB,6BAA6B,CAG3B,qBAAqB,AAGlB,OAAO,CAAC;UACP,OAAO,EAAE,IAAI,GACd;;AAMT,MAAM,EAAE,SAAS,EAAE,MAAM;EACvB,AAGI,cAHU,CAEZ,aAAa,CACX,aAAa,CAAC;IACZ,qBAAqB,EAAE,uBAAmC,GAC3D;;ACnIP,AACE,OADK,CACL,EAAE,CAAC;EACD,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC,GAKX;EAJC,MAAM,EAAE,SAAS,EAAE,KAAK;IAJ5B,AACE,OADK,CACL,EAAE,CAAC;MAIC,OAAO,EAAE,MAAM;MACf,oBAAoB,EAAE,IAAI,GAE7B;;AARH,AAUE,OAVK,CAUL,EAAE,CAAC,EAAE,CAAC;EACJ,OAAO,EAAE,YAAY,GAUtB;EArBH,AAaI,OAbG,CAUL,EAAE,CAAC,EAAE,AAGF,OAAO,CAAC;IACP,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,GAAG,GACb;EAhBL,AAkBI,OAlBG,CAUL,EAAE,CAAC,EAAE,AAQF,WAAW,AAAA,OAAO,CAAC;IAClB,OAAO,EAAE,IAAI,GACd;;ACbL,AAAA,eAAe,CAAC;EACd,OAAO,EAAE,WAAW,GAiIrB;EA/HC,MAAM,EAAE,UAAU,EAAE,KAAK;IAH3B,AAII,eAJW,CAIT;MACA,OAAO,EAAE,QAAQ,GAClB;EAGH,AAAA,YAAY,CATd,eAAe,CASE;IACb,OAAO,EAAE,QAAQ,GAClB;EAXH,AAaE,eAba,CAab,kBAAkB,CAAC;IAIjB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,MAAM;IACvB,aAAa,EAAE,IAAI,GAqCpB;IAzDH,AAsBI,eAtBW,CAab,kBAAkB,CAShB,KAAK,CAAC;MACJ,UAAU,EAAE,4CAA4C,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;MAChF,eAAe,EAVL,IAAI;MAWd,OAAO,EAAE,YAAY;MACrB,MAAM,EAZI,IAAI;MAad,KAAK,EAbK,IAAI,GAcf;IA5BL,AA8BI,eA9BW,CAab,kBAAkB,CAiBhB,SAAS,CAAC;MACR,UAAU,EAAE,kDAAyC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;MAC7E,eAAe,EAjBD,KAAK;MAkBnB,uBAAuB,EAAE,IAAI;MAC7B,OAAO,EAAE,YAAY;MACrB,IAAI,EAAE,mCAAmC;MACzC,MAAM,EAtBI,IAAI;MAuBd,mBAAmB,EAAE,IAAI;MACzB,KAAK,EAvBS,KAAK,GAwBpB;IAED,MAAM,EAAE,SAAS,EAAE,KAAK;MAzC5B,AA6CM,eA7CS,CAab,kBAAkB,CAgCd,KAAK,CAAC;QACJ,eAAe,EAJC,IAAI;QAKpB,MAAM,EALU,IAAI;QAMpB,KAAK,EANW,IAAI,GAOrB;MAjDP,AAmDM,eAnDS,CAab,kBAAkB,CAsCd,SAAS,CAAC;QACR,eAAe,EATK,KAAK;QAUzB,MAAM,EAXU,IAAI;QAYpB,KAAK,EAXe,KAAK,GAY1B;EAvDP,AA2DE,eA3Da,CA2Db,qBAAqB,CAAC;IACpB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,IAAI;IACb,MAAM,EArEM,IAAI;IAsEhB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAClB,KAAK,ETee,KAAiC,GSNtD;IAPC,MAAM,EAAE,SAAS,EAAE,KAAK;MAnE5B,AA2DE,eA3Da,CA2Db,qBAAqB,CAAC;QASlB,KAAK,ETac,KAAiC,GSPvD;IAHC,MAAM,EAAE,SAAS,EAAE,KAAK;MAvE5B,AA2DE,eA3Da,CA2Db,qBAAqB,CAAC;QAalB,KAAK,ETUa,KAAiC,GSRtD;EA1EH,AA4EE,eA5Ea,CA4Eb,KAAK,CAAC;IACJ,UAAU,EAAE,sCAAsC,CAAC,yBAAyB,CAlF1D,IAAI,CAkF4E,MAAM,CAAC,SAAS;IAClH,eAAe,EApFA,IAAI;IAqFnB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,iCAAiC;IACnD,UAAU,ERrEK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO,ESyEkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CT3CpC,mBAAI;IS4CR,SAAS,EAAE,IAAI;IACf,uBAAuB,EAAE,IAAI;IAC7B,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,CAAC;IACV,kBAAkB,EAxFA,IAAI;IAyFtB,oBAAoB,EA1FJ,IAA+C;IA2F/D,KAAK,EAAE,IAAI,GAKZ;IA5FH,AAyFI,eAzFW,CA4Eb,KAAK,AAaF,IAAK,CAAA,GAAG,EAAE;MACT,qBAAqB,EAAE,KAAK,CA/FZ,IAAI,GAgGrB;EA3FL,AA8FE,eA9Fa,AA8FZ,MAAM,CAAC,KAAK,CAAC;IACZ,UAAU,ERpFK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO,ESwFkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CT1DpC,mBAAI,GS2DT;EAhGH,AAkGE,eAlGa,CAkGb,qBAAqB,AAAA,OAAO,CAAC,KAAK;EAlGpC,eAAe,CAmGb,KAAK,AAAA,MAAM,CAAC;IACV,MAAM,ER7FY,GAAG,CAAC,KAAK,CAAC,iCAAiC;IQ8F7D,UAAU,EAAE,qCAAqC,GAClD;EAtGH,AAwGE,eAxGa,CAwGb,cAAc,CAAC;IACb,UAAU,EA3GE,wCAAwC,CA2GzB,SAAS,CAAC,MAAM,CAAC,MAAM;IAClD,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,CAAC,CTzCJ,GAAG,CAAH,GAAG,CSyCgC,CAAC;IAChD,uBAAuB,EAAE,IAAI;IAC7B,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,CAAC;IACnB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EArHa,IAAI,GAoIvB;IAjIH,AAoHI,eApHW,CAwGb,cAAc,AAYX,MAAM,EApHX,eAAe,CAwGb,cAAc,AAaX,MAAM,CAAC;MACN,gBAAgB,ET/GZ,qBAAO;MSgHX,MAAM,EAAE,OAAO,GAChB;IAxHL,AA0HI,eA1HW,CAwGb,cAAc,AAkBX,OAAO,CAAC;MACP,gBAAgB,ETpHZ,qBAAO,GSqHZ;IA5HL,AA8HI,eA9HW,CAwGb,cAAc,AAsBX,IAAK,CAAA,GAAG,EAAE;MACT,SAAS,EAAE,UAAU,GACtB;;AAIL,AAAA,sBAAsB,CAAC;EACrB,UAAU,EAAE,sCAAsC,CAAC,yBAAyB,CA1IxD,IAAI,CA0I0E,MAAM,CAAC,SAAS;EAClH,eAAe,EA5IE,IAAI;EA6IrB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,iCAAiC;EACnD,aAAa,EAAE,GAAG;EAClB,UAAU,ER9HO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO,ESkIgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CTpGlC,mBAAI;ESqGV,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,CAAC;EACV,kBAAkB,EAAE,IAAI;EACxB,oBAAoB,EAAE,IAAI;EAC1B,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,aAAa;EACzB,KAAK,EAAE,IAAI,GA6DZ;EA1ED,AAeE,sBAfoB,AAenB,IAAK,CAAA,GAAG,EAAE;IACT,qBAAqB,EAAE,KAAK,CAzJV,IAAI,GA0JvB;EAjBH,AAmBE,sBAnBoB,AAmBnB,MAAM,CAAC;IACN,UAAU,ER7IK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO,ESiJkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CTnHpC,mBAAI,GSoHT;EAED,AAAA,WAAW,CAvBb,sBAAsB,CAuBN;IACZ,MAAM,ERrJY,GAAG,CAAC,KAAK,CAAC,iCAAiC;IQsJ7D,UAAU,EAAE,qCAAqC,GAKlD;IAPD,AAIE,WAJS,CAvBb,sBAAsB,CA2BlB,WAAW,CAAC;MACV,OAAO,EAAE,KAAK,GACf;EAGH,AAAA,cAAc,CAhChB,sBAAsB,CAgCH;IACf,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,MAAM,GACnB;EAnCH,AAqCE,sBArCoB,CAqCpB,cAAc,AAAA,MAAM,CAAC;IACnB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,WAAW,GACzB;EAxCH,AA0CE,sBA1CoB,CA0CpB,cAAc,CAAC;IACb,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC,GACV;EAnDH,AAqDE,sBArDoB,CAqDpB,aAAa,CAAC;IACZ,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,KAAK,GAClB;EAxDH,AA0DE,sBA1DoB,CA0DpB,WAAW,CAAC;IACV,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ;IACxD,UAAU,EAAE,gCAAgC;IAC5C,OAAO,EAAE,IAAI;IACb,kBAAkB,EAAE,IAAI;IACxB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,GAAG,GAOX;;AALC,UAAU,CAAV,eAAU;EACR,EAAE;IACA,UAAU,EAAE,MAAM;;AAM1B,MAAM,EAAE,UAAU,EAAE,KAAK;EACvB,AACE,aADW,CACX,IAAI,CAAC;IACH,WAAW,EAAE,KAAK,GACnB;EAHH,AAKE,aALW,CAKX,eAAe,CAAC;IAMd,gBAAgB,EAAE,4CAA4C;IAC9D,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,oCAAoC;IAC7D,MAAM,EAPqB,IAAI;IAQ/B,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,KAAK;IACf,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,CAAC,GAcX;IAjCH,AAqBI,aArBS,CAKX,eAAe,CAgBb,qBAAqB,CAAC;MACpB,MAAM,EAfQ,IAAI,GAgBnB;IAvBL,AAyBI,aAzBS,CAKX,eAAe,CAoBb,KAAK,CAAC;MACJ,qBAAqB,EAjBD,IAAI;MAkBxB,eAAe,EAnBE,IAAI,GAwBtB;MAhCL,AA6BM,aA7BO,CAKX,eAAe,CAoBb,KAAK,AAIF,IAAK,CAAA,GAAG,EAAE;QACT,qBAAqB,EAAE,KAAK,CArBV,IAAI,GAsBvB;EA/BP,AAmCE,aAnCW,CAmCX,sBAAsB,CAAC;IACrB,qBAAqB,EA1PL,IAAI;IA2PpB,eAAe,EA5PF,IAAI,GAqQlB;IA9CH,AAuCI,aAvCS,CAmCX,sBAAsB,AAInB,IAAK,CAAA,GAAG,EAAE;MACT,qBAAqB,EAAE,KAAK,CA9Pd,IAAI,GA+PnB;IAzCL,AA2CI,aA3CS,CAmCX,sBAAsB,CAQpB,WAAW,CAAC;MACV,GAAG,EAAE,IAAI,GACV;;AAOL,AAAA,6BAA6B,CAAC;EAC5B,gBAAgB,EAAE,mCAAmC;EACrD,MAAM,EAAE,CAAC;EACT,UAAU,ETnJQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAhFxB,kBAAI,EAgFgC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAhF7C,kBAAI;ESoOR,SAAS,EAAE,eAAgC,GA0E5C;EA9ED,AAME,6BAN2B,CAM3B,oBAAoB,CAAC;IACnB,gBAAgB,EAAE,0CAA0C;IAC5D,KAAK,EAAE,kCAAkC,GAC1C;EATH,AAWE,6BAX2B,CAW3B,oBAAoB;EAXtB,6BAA6B,CAY3B,4BAA4B,CAAC;IAC3B,YAAY,EAAE,oCAAoC,GACnD;EAdH,AAgBE,6BAhB2B,CAgB3B,6BAA6B,CAAC;IAC5B,MAAM,EAAE,CAAC,GACV;EAlBH,AAoBE,6BApB2B,CAoB3B,0BAA0B,CAAC;IACzB,gBAAgB,EAAE,0CAA0C;IAC5D,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,oCAAoC,GAC3D;EAvBH,AAyBE,6BAzB2B,CAyB3B,wCAAwC,CAAC;IACvC,KAAK,EAAE,gCAAgC,GACxC;EA3BH,AA6BE,6BA7B2B,CA6B3B,kCAAkC,CAAC;IACjC,gBAAgB,EAAE,mCAAmC,GACtD;EA/BH,AAkCI,6BAlCyB,CAiC3B,2BAA2B,AACxB,SAAS,CAAC;IACT,UAAU,EAAE,iCAAiC;IAC7C,KAAK,EAAE,gCAAgC,GASxC;IA7CL,AAsCM,6BAtCuB,CAiC3B,2BAA2B,AACxB,SAAS,AAIP,OAAO,CAAC;MACP,UAAU,EAAE,kCAAkC,GAC/C;IAxCP,AA0CM,6BA1CuB,CAiC3B,2BAA2B,AACxB,SAAS,CAQR,YAAY,CAAC;MACX,IAAI,EAAE,kCAAkC,GACzC;EA5CP,AAiDI,6BAjDyB,CAgD3B,0BAA0B,CACxB,kCAAkC,CAAC;IACjC,gBAAgB,EAAE,0CAA0C,GAC7D;EAnDL,AAsDE,6BAtD2B,CAsD3B,wBAAwB,CAAC;IAIvB,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,qIAA+L,CAAC,CAAC;IAC/M,iBAAiB,EAAE,SAAS;IAC5B,QAAQ,EAAE,QAAQ,GASnB;IAtEH,AA+DI,6BA/DyB,CAsD3B,wBAAwB,AASrB,SAAS,CAAC;MACT,UAAU,EAAE,iCAAiC,GAC9C;IAjEL,AAmEI,6BAnEyB,CAsD3B,wBAAwB,AAarB,OAAO,CAAC;MACP,UAAU,EAAE,kCAAkC,GAC/C;EArEL,AAyEI,6BAzEyB,CAwE3B,4BAA4B,AACzB,MAAM,CAAC;IACN,UAAU,EAAE,iCAAiC;IAC7C,KAAK,EAAE,gCAAgC,GACxC;;AAIL,AAAA,uBAAuB,GAAG,EAAE,GAAG,GAAG;AAClC,2BAA2B,GAAG,EAAE,GAAG,YAAY,CAAC;EAC9C,mBAAmB,EAAE,GAAG;EACxB,iBAAiB,EAAE,IAAI,GACxB;;AChWH,AAAA,aAAa,CAAC;EACZ,UAAU,EAAE,0CAA0C;EACtD,aAAa,EV4Hc,GAAG;EU3H9B,UAAU,EVyHU,CAAC,CAAC,GAAG,CAAC,IAAI,CAhFxB,kBAAI,EAgFgC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAhF7C,kBAAI;EUxCV,OAAO,EAAE,KAAK;EACd,SAAS,EVwHc,IAAI;EUvH3B,mBAAmB,EAAE,GAAG;EACxB,kBAAkB,EAAE,IAAI;EACxB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,MAA+B;EACpC,OAAO,EAAE,CAAC,GAyCX;EAnDD,AAYE,aAZW,GAYT,EAAE,CAAC;IACH,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,CAAC;IACT,OAAO,EVgHkB,GAAG,CUhHS,CAAC,GAmCvC;IAlDH,AAiBI,aAjBS,GAYT,EAAE,GAKA,EAAE,CAAC;MACH,MAAM,EAAE,CAAC;MACT,KAAK,EAAE,IAAI,GA8BZ;MAjDL,AAqBM,aArBO,GAYT,EAAE,GAKA,EAAE,AAID,UAAU,CAAC;QACV,aAAa,ETXF,GAAG,CAAC,KAAK,CAAC,oCAAoC;QSYzD,MAAM,EVwGe,GAAG,CUxGY,CAAC,GACtC;MAxBP,AA0BM,aA1BO,GAYT,EAAE,GAKA,EAAE,GASA,CAAC,CAAC;QACF,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,IAAI;QACb,OAAO,EV+Fa,GAAG,CAAC,IAAI;QU9F5B,WAAW,EAAE,MAAM,GAcpB;QAhDP,AAoCQ,aApCK,GAYT,EAAE,GAKA,EAAE,GASA,CAAC,AAUA,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE;UACzB,UAAU,EAAE,iCAAiC,GAC9C;QAtCT,AAwCQ,aAxCK,GAYT,EAAE,GAKA,EAAE,GASA,CAAC,AAcA,OAAO,CAAC;UACP,UAAU,EAAE,kCAAkC,GAC/C;QA1CT,AA4CQ,aA5CK,GAYT,EAAE,GAKA,EAAE,GASA,CAAC,AAkBA,SAAS,CAAC;UACT,OAAO,EAAE,GAAG;UACZ,cAAc,EAAE,IAAI,GACrB;;AC/CT,AACE,oBADkB,CAClB,MAAM,CAAC;EACL,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CX0CnB,kBAAI;EWzCR,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK,GACb;;AATH,AAWE,oBAXkB,CAWlB,OAAO,CAAC;EACN,MAAM,EAAE,CAAC,GACV;;AAbH,AAeE,oBAfkB,CAelB,cAAc,CAAC;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,CAAC,GAMlB;EAxBH,AAoBI,oBApBgB,CAelB,cAAc,CAKZ,CAAC,CAAC;IACA,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,IAAI,GACpB;;AAvBL,AA0BE,oBA1BkB,CA0BlB,QAAQ,CAAC;EACP,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,MAAM;EACjB,OAAO,EAAE,MAAM,GAchB;EA5CH,AAgCI,oBAhCgB,CA0BlB,QAAQ,CAMN,MAAM,CAAC;IACL,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,GAAG,GAMX;IA3CL,AAuCM,oBAvCc,CA0BlB,QAAQ,CAMN,MAAM,AAOH,KAAK,CAAC;MACL,iBAAiB,EAAE,CAAC;MACpB,mBAAmB,EAAE,CAAC,GACvB;;AA1CP,AA8CE,oBA9CkB,CA8ClB,KAAK,CAAC;EACJ,iBAAiB,EAAE,IAAI,GACxB;;AAGH,AAAA,cAAc,CAAC;EACb,UAAU,EAAE,2BAA2B;EACvC,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,CAAC;EACP,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK,GACf;;AAED,AAAA,MAAM,CAAC;EACL,UAAU,EAAE,yBAAyB;EACrC,MAAM,EVpDW,GAAG,CAAC,KAAK,CAAC,oCAAoC;EUqD/D,aAAa,EAAE,GAAG;EAClB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,KAAK,GACf;;ACnED,AAAA,WAAW,CAAC;EAEV,UAAU,EAAE,mCAAmC;EAC/C,aAAa,EZuEC,GAAG;EYtEjB,OAAO,EAAE,YAAY;EACrB,MAAM,EZuGM,KAAK;EYtGjB,iBAAiB,EZuEL,IAAI;EYtEhB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI,GAsKZ;EA9KD,AZsJE,WYtJS,CZsJT,oBAAoB,CAAC;IACnB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,sCAAsC;IACxD,gBAAgB,EAAE,4CAA4C;IAC9D,mBAAmB,EAAE,GAAG;IACxB,MAAM,ECjJO,GAAG,CAAC,KAAK,CAAC,kCAAkC;IDkJzD,aAAa,EAAE,IAAI;IACnB,UAAU,EAlCkB,CAAC,CAAC,GAAG,CA7G3B,qBAAO;IAgJb,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,gCAAgC;IACtC,MAAM,EAtCiB,IAAI;IAuC3B,gBAAgB,EAAI,OAA6B;IACjD,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAI,OAA6B;IACpC,SAAS,EAAE,WAAW;IACtB,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,kBAAkB;IACvC,KAAK,EA9CkB,IAAI,GAoD5B;IY9KH,AZ0KI,WY1KO,CZsJT,oBAAoB,AAoBjB,SAAU,CAAA,OAAO,EAAE,MAAM,EAAE;MAC1B,OAAO,EAAE,CAAC;MACV,SAAS,EAAE,QAAQ,GACpB;EY7KL,AAUE,WAVS,AAUR,YAAY,CAAC;IACZ,UAAU,EAAE,WAAW,GAUxB;IArBH,AAaI,WAbO,AAUR,YAAY,CAGX,KAAK,CAAC;MACJ,UAAU,EAAE,KAAK,CXFJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,GWG5D;IAfL,AAiBI,WAjBO,AAUR,YAAY,CAOX,yBAAyB;IAjB7B,WAAW,AAUR,YAAY,CAQX,aAAa,CAAC;MACZ,OAAO,EAAE,IAAI,GACd;EApBL,AAuBE,WAvBS,CAuBT,KAAK,CAAC;IACJ,aAAa,EZkDD,GAAG;IYjDf,UAAU,EAAE,yBAAyB;IACrC,MAAM,EAAE,IAAI,GACb;EA3BH,AA6BE,WA7BS,GA6BP,CAAC,CAAC;IACF,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI,GAWZ;IA9CH,AAsCM,WAtCK,GA6BP,CAAC,AAQA,SAAU,CAAA,OAAO,EAAE,MAAM,EACxB,KAAK,CAAC;MZ2GV,UAAU,EChIK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;MDiIhE,UAAU,EAAE,gBAAgB,GY1GvB;IAxCP,AA0CM,WA1CK,GA6BP,CAAC,AAQA,SAAU,CAAA,OAAO,EAAE,MAAM,EAKxB,WAAW,CAAC;MACV,KAAK,EAAE,gCAAgC,GACxC;EA5CP,AAgDE,WAhDS,AAgDR,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAK,CAAA,YAAY,EAAE;IZiGtD,UAAU,EChIK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;IDiIhE,UAAU,EAAE,gBAAgB;IY/F1B,OAAO,EAAE,IAAI,GAad;IAhEH,AZkLE,WYlLS,AAgDR,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAK,CAAA,YAAY,EZkIpD,oBAAoB,CAAC;MACnB,OAAO,EAAE,CAAC;MACV,SAAS,EAAE,QAAQ;MACnB,gBAAgB,EAAE,KAAK,GACxB;IYtLH,AAqDI,WArDO,AAgDR,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAK,CAAA,YAAY,EAKlD,WAAW,CAAC;MACV,KAAK,EAAE,gCAAgC,GACxC;IAvDL,AAyDI,WAzDO,AAgDR,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAK,CAAA,YAAY,EASlD,UAAU,GAAG,eAAe,CAAC;MAC3B,OAAO,EAAE,IAAI,GACd;IA3DL,AA6DI,WA7DO,AAgDR,SAAU,CAAA,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAK,CAAA,YAAY,EAalD,eAAe,AAAA,UAAU,CAAC;MACxB,OAAO,EAAE,KAAK,GACf;EA/DL,AAkEE,WAlES,CAkET,yBAAyB,CAAC;IACxB,gBAAgB,EZ3DV,OAAO;IY4Db,aAAa,EZMD,GAAG,CAAH,GAAG,CYN8B,CAAC,CAAC,CAAC;IAChD,MAAM,EZwCkB,KAAK;IYvC7B,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,QAAQ,GA2BnB;KAzBC,AAAA,AAAA,qBAAC,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAzElD,WAAW,CAkET,yBAAyB,CAO2B;MAChD,gBAAgB,EZ/DZ,OAAO,GYgEZ;IA3EL,AA6EI,WA7EO,CAkET,yBAAyB,AAWtB,OAAO,CAAC;MACP,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,iCAAiC;MAC1D,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,EAAE;MACX,QAAQ,EAAE,QAAQ;MAClB,KAAK,EAAE,IAAI,GACZ;IAnFL,AAqFI,WArFO,CAkET,yBAAyB,CAmBvB,mBAAmB,CAAC;MAClB,mBAAmB,EAAE,MAAM;MAC3B,iBAAiB,EAAE,SAAS;MAC5B,eAAe,EAAE,KAAK;MACtB,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,OAAO,CAAC,EAAE,CZnBZ,8BAA8B;MYoBxC,KAAK,EAAE,IAAI,GAKZ;MAjGL,AA8FM,WA9FK,CAkET,yBAAyB,CAmBvB,mBAAmB,AAShB,OAAO,CAAC;QACP,OAAO,EAAE,CAAC,GACX;EAhGP,AAoGE,WApGS,CAoGT,aAAa,CAAC;IACZ,OAAO,EAAE,cAAc,GACxB;EAtGH,AAwGE,WAxGS,CAwGT,UAAU,CAAC;IACT,UAAU,EAAE,IAA+C;IAC3D,QAAQ,EAAE,MAAM,GAejB;IAzHH,AA4GI,WA5GO,CAwGT,UAAU,AAIP,aAAa,EA5GlB,WAAW,CAwGT,UAAU,AAKP,WAAW,CAAC;MACX,UAAU,EAAE,IAA+C,GAC5D;IA/GL,AAiHI,WAjHO,CAwGT,UAAU,AASP,aAAa,AAAA,WAAW,CAAC;MACxB,UAAU,EAAE,KAA+C,GAC5D;IAnHL,AAqHI,WArHO,CAwGT,UAAU,AAaP,IAAK,CAAA,eAAe,EAAE,WAAW,CAAC;MACjC,UAAU,EAAE,IAA0B;MACtC,QAAQ,EAAE,MAAM,GACjB;EAxHL,AA2HE,WA3HS,CA2HT,eAAe,CAAC;IACd,KAAK,EAAE,kCAAkC;IACzC,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,MAAM;IAChB,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,MAAM,GACpB;EAnIH,AAqIE,WArIS,CAqIT,eAAe,AAAA,UAAU,CAAC;IAAE,OAAO,EAAE,IAAI,GAAI;EArI/C,AAuIE,WAvIS,CAuIT,WAAW,CAAC;IACV,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;IAChB,WAAW,EZ3BS,IAAI;IY4BxB,MAAM,EAAE,CAAC,CAAC,CAAC,CZ7BK,GAAG;IY8BnB,SAAS,EAAE,UAAU,GACtB;EA7IH,AA+IE,WA/IS,CA+IT,iBAAiB,CAAC;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EZlCS,IAAI;IYmCxB,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,UAAU,GACtB;EArJH,AAuJE,WAvJS,CAuJT,aAAa,CAAC;IACZ,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,kCAAkC;IACzC,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,CAAC;IACrB,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,QAAQ,GACnB;EA/JH,AAiKE,WAjKS,CAiKT,kBAAkB,CAAC;IACjB,IAAI,EAAE,kCAAkC;IACxC,MAAM,EAAE,IAAI;IACZ,iBAAiB,EAAE,GAAG,GACvB;EArKH,AAuKE,WAvKS,CAuKT,mBAAmB,CAAC;IAClB,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,MAAM;IAChB,aAAa,EAAE,QAAQ;IACvB,WAAW,EAAE,MAAM,GACpB;;AAMC,MAAM,EAAE,SAAS,EAAE,MAAM;EAH7B,AACE,aADW,CACX,WAAW,CAAC;IAIR,MAAM,EZnEQ,KAAK,GY4GtB;IA9CH,AAOM,aAPO,CACX,WAAW,CAMP,yBAAyB,CAAC;MACxB,MAAM,EZrEoB,KAAK,GYsEhC;IATP,AAWM,aAXO,CACX,WAAW,CAUP,aAAa,CAAC;MACZ,OAAO,EAAE,cAAc,GACxB;IAbP,AAeM,aAfO,CACX,WAAW,CAcP,UAAU,CAAC;MACT,UAAU,EAAE,KAAqC,GAClD;IAjBP,AAmBM,aAnBO,CACX,WAAW,CAkBP,eAAe,CAAC;MACd,SAAS,EAAE,IAAI;MACf,cAAc,EAAE,GAAG,GACpB;IAtBP,AAwBM,aAxBO,CACX,WAAW,CAuBP,WAAW,CAAC;MACV,SAAS,EAAE,IAAI;MACf,WAAW,EAtBC,IAAI;MAuBhB,aAAa,EAAE,CAAC,GACjB;IA5BP,AA+BQ,aA/BK,CACX,WAAW,CA6BP,UAAU,AAAA,IAAK,CAAA,eAAe,EAC5B,WAAW,CAAC;MACV,UAAU,EAAE,IAAgB,GAC7B;IAjCT,AAoCM,aApCO,CACX,WAAW,CAmCP,iBAAiB,CAAC;MAChB,SAAS,EAAE,IAAI;MACf,WAAW,EAlCC,IAAI,GAmCjB;IAvCP,AAyCM,aAzCO,CACX,WAAW,CAwCP,aAAa,CAAC;MACZ,MAAM,EAAE,GAAG;MACX,SAAS,EAAE,IAAI,GAChB;;AAKP,AAIE,cAJY,CAIZ,WAAW,CAAC;EACV,MAAM,EZjHY,KAAK,GY+LxB;EAnFH,AAOI,cAPU,CAIZ,WAAW,CAGT,yBAAyB,CAAC;IACxB,MAAM,EZnHwB,KAAK,GYoHpC;EATL,AAWI,cAXU,CAIZ,WAAW,CAOT,aAAa,CAAC;IACZ,OAAO,EAXoB,IAAI,CAWQ,IAAI,GAC5C;EAbL,AAeI,cAfU,CAIZ,WAAW,CAWT,eAAe,CAAC;IACd,WAAW,EAAE,IAAI,GAClB;EAjBL,AAoBM,cApBQ,CAIZ,WAAW,CAeT,UAAU,CACR,WAAW;EApBjB,cAAc,CAIZ,WAAW,CAeT,UAAU,AAEP,IAAK,CAAA,eAAe,EAAE,WAAW,CAAC;IACjC,SAAS,EApBQ,IAAI;IAqBrB,WAAW,EAAE,IAAyB;IACtC,UAAU,EAAE,IAAyB;IACrC,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,OAAO;IAChB,aAAa,EAAE,QAAQ;IACvB,WAAW,EAAE,MAAM,GACpB;EA7BP,AAgCI,cAhCU,CAIZ,WAAW,CA4BT,iBAAiB,CAAC;IAChB,OAAO,EAAE,IAAI,GACd;EAlCL,AAoCI,cApCU,CAIZ,WAAW,CAgCT,aAAa,CAAC;IAGZ,gBAAgB,EAAE,mCAAmC;IACrD,aAAa,EAAE,IAAmB;IAClC,SAAS,EAAE,oBAAkI;IAC7I,MAAM,EAJW,IAAI;IAKrB,KAAK,EALY,IAAI;IAMrB,OAAO,EAAE,GAAkC;IAC3C,GAAG,EAAE,IAA+C;IACpD,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,IAAI,GAmCzB;IAlFL,AAiDM,cAjDQ,CAIZ,WAAW,CAgCT,aAAa,AAaV,OAAO,CAAC;MACP,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,iCAAiC;MACnD,aAAa,EAAE,CAAC;MAChB,aAAa,EAAE,IAAyB,CAAC,IAAyB,CAAC,CAAC,CAAC,CAAC;MACtE,OAAO,EAAE,EAAE;MACX,QAAQ,EAAE,QAAQ;MAClB,MAAM,EAAE,IAAyB;MACjC,KAAK,EAAE,IAAmB;MAC1B,GAAG,EAAE,IAAI;MACT,IAAI,EAAE,IAAI,GACX;IA3DP,AA6DM,cA7DQ,CAIZ,WAAW,CAgCT,aAAa,CAyBX,kBAAkB,CAAC;MACjB,iBAAiB,EAAE,CAAC;MACpB,MAAM,EA1BI,IAAI;MA2Bd,KAAK,EA3BK,IAAI,GAwCf;MA7EP,AAkEQ,cAlEM,CAIZ,WAAW,CAgCT,aAAa,CAyBX,kBAAkB,AAKf,oBAAoB,CAAC;QACpB,IAAI,EZ1OO,OAAO,GY2OnB;MApET,AAsEQ,cAtEM,CAIZ,WAAW,CAgCT,aAAa,CAyBX,kBAAkB,AASf,cAAc,CAAC;QACd,IAAI,EZ7OO,OAAO,GY8OnB;MAxET,AA0EQ,cA1EM,CAIZ,WAAW,CAgCT,aAAa,CAyBX,kBAAkB,AAaf,YAAY,CAAC;QACZ,IAAI,EZhPK,OAAO,GYiPjB;IA5ET,AA+EM,cA/EQ,CAIZ,WAAW,CAgCT,aAAa,CA2CX,mBAAmB,CAAC;MAClB,OAAO,EAAE,IAAI,GACd;;AAIL,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,MAAM;EArFvC,AAsFI,cAtFU,CAsFV,gBAAgB,CAAC;IACf,OAAO,EAAE,IAAI,GACd;;ACzTL,AAAA,2BAA2B,CAAC;EAC1B,KAAK,EAAE,oCAAoC;EAC3C,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,aAAa,Eb4EG,IAAoC;Ea3EpD,UAAU,EAAE,MAAM,GA0BnB;EAxBC,MAAM,EAAE,SAAS,EAAE,KAAK;IAP1B,AAAA,2BAA2B,CAAC;MAQxB,OAAO,EAAE,IAAI;MACb,eAAe,EAAE,aAAa;MAC9B,UAAU,EAAE,IAAI,GAqBnB;EA/BD,AAaE,2BAbyB,CAazB,CAAC,CAAC;IACA,MAAM,EAAE,CAAC,GAMV;IALC,MAAM,EAAE,SAAS,EAAE,KAAK;MAf5B,AAaE,2BAbyB,CAazB,CAAC,CAAC;QAGE,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,aAAa,GAEjC;EApBH,AAsBE,2BAtByB,CAsBzB,KAAK,CAAC;IACJ,OAAO,EAAE,IAAI,GAOd;IANC,MAAM,EAAE,SAAS,EAAE,KAAK;MAxB5B,AAsBE,2BAtByB,CAsBzB,KAAK,CAAC;QAGF,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,kCAAkC;QACxC,iBAAiB,EAAE,GAAG,GAEzB;;AAGH,AAAA,yBAAyB,CAAC;EACxB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,MAAM,GAelB;EAbC,MAAM,EAAE,SAAS,EAAE,KAAK;IAL1B,AAAA,yBAAyB,CAAC;MAMtB,OAAO,EAAE,IAAI;MACb,eAAe,EAAE,aAAa;MAC9B,OAAO,EAAE,CAAC,GAUb;EAlBD,AAWE,yBAXuB,CAWvB,MAAM,CAAC;IACL,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC;IACT,mBAAmB,EAAE,IAAI;IACzB,OAAO,EAAE,MAAM,GAChB;;AClDH,AAAA,oBAAoB,CAAC;EACnB,OAAO,Ed8EkB,IAAI,CADF,IAAI;Ec5E/B,gBAAgB,EAAE,KAAK;EACvB,mBAAmB,EAAE,KAAK;EAC1B,mBAAmB,EAAE,gBAAgB,GAmJtC;EAvJD,AAME,oBANkB,CAMlB,cAAc,CAAC;IACb,SAAS,EdkGa,IAAI;IcjG1B,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,CAAC,GAoCV;IA7CH,AAWI,oBAXgB,CAMlB,cAAc,CAKZ,IAAI,CAAC;MACH,KAAK,EAAE,uCAAuC;MAC9C,OAAO,EAAE,YAAY;MACrB,IAAI,EAAE,uCAAuC;MAC7C,cAAc,EAAE,MAAM,GACvB;IAhBL,AAkBI,oBAlBgB,CAMlB,cAAc,CAYZ,uBAAuB,CAAC;MAetB,cAAc,EAAE,GAAG,GAMpB;MAnBC,MAAM,EAAE,SAAS,EAAE,KAAK;QApB9B,AAkBI,oBAlBgB,CAMlB,cAAc,CAYZ,uBAAuB,CAAC;UAGpB,OAAO,EAAE,KAAK,GAkBjB;UAvCL,AAuBQ,oBAvBY,CAMlB,cAAc,CAYZ,uBAAuB,CAKnB,wBAAwB,CAAC;YACvB,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,MAAM,GAKnB;YA9BT,AA2BU,oBA3BU,CAMlB,cAAc,CAYZ,uBAAuB,CAKnB,wBAAwB,CAItB,gBAAgB,CAAC;cACf,mBAAmB,EAAE,CAAC,GACvB;MA7BX,AAmCM,oBAnCc,CAMlB,cAAc,CAYZ,uBAAuB,CAiBrB,aAAa,CAAC;QACZ,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,GACpB;IAtCP,AAyCI,oBAzCgB,CAMlB,cAAc,CAmCZ,kBAAkB,CAAC;MACjB,mBAAmB,EAAE,GAAG;MACxB,UAAU,EAAE,IAAI,GACjB;EA5CL,AA+CE,oBA/CkB,CA+ClB,gBAAgB,CAAC;IACf,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,QAAQ,EAAE,QAAQ,GA6BnB;IA/EH,AAoDI,oBApDgB,CA+ClB,gBAAgB,CAKd,oBAAoB,CAAC;MACnB,UAAU,EAAE,4CAA4C,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;MAC/E,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,OAAO;MACf,IAAI,EAAE,uCAAuC;MAC7C,MAAM,EAAE,IAAI;MACZ,gBAAgB,EAAE,CAAC;MACnB,OAAO,EAAE,CAAC;MACV,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,mBAAmB,EAAE,KAAK;MAC1B,mBAAmB,EAAE,OAAO;MAC5B,KAAK,Ed0DgB,IAAI,GcpD1B;MAtEL,AAkEM,oBAlEc,CA+ClB,gBAAgB,CAKd,oBAAoB,AAcjB,SAAU,CAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;QAClC,IAAI,EdrDF,OAAO;QcsDT,OAAO,EAAE,CAAC,GACX;IArEP,AAwEI,oBAxEgB,CA+ClB,gBAAgB,CAyBd,aAAa,CAAC;MACZ,GAAG,EAAE,IAAI,GACV;IAED,MAAM,EAAE,SAAS,EAAE,MAAM;MA5E7B,AdmME,oBcnMkB,CA+ClB,gBAAgB,CdoJhB,aAAa,CAAC;QACZ,iBAAiB,EAAE,GAAG;QACtB,mBAAmB,EAAE,IAAI;QACzB,gBAAgB,EAAE,CAAC;QACnB,kBAAkB,EAAE,IAAI,GACzB;EcxMH,AAoFM,oBApFc,AAiFjB,MAAM,CAEL,gBAAgB,CACd,oBAAoB,EApF1B,oBAAoB,AAkFjB,OAAO,CACN,gBAAgB,CACd,oBAAoB,CAAC;IACnB,OAAO,EAAE,CAAC,GACX;EAtFP,AA0FE,oBA1FkB,AA0FjB,OAAO,CAAC;IACP,UAAU,EAAE,iCAAiC;IAC7C,aAAa,EAAE,GAAG,GAOnB;IAnGH,AA+FM,oBA/Fc,AA0FjB,OAAO,CAIN,gBAAgB,CACd,oBAAoB,CAAC;MACnB,IAAI,EAAE,8CAA8C,GACrD;EAjGP,AAqGE,oBArGkB,CAqGlB,gBAAgB,CAAC;IACf,SAAS,EAAE,IAAI;IACf,mBAAmB,EAAE,IAAI,GAK1B;IA5GH,AAyGI,oBAzGgB,CAqGlB,gBAAgB,CAId,CAAC,CAAC,IAAI,CAAC;MACL,KAAK,EAAE,kCAAkC,GAC1C;EA3GL,AA8GE,oBA9GkB,CA8GlB,sBAAsB,CAAC;IACrB,MAAM,EdHI,KAAK,GcIhB;EAhHH,AAkHE,oBAlHkB,CAkHlB,aAAa,CAAC;IAGZ,MAAM,EAAE,CAAC,CADY,IAAG;IAExB,OAAO,EAAE,CAAC,CAFW,GAAG,GAQzB;IA5HH,AAwHI,oBAxHgB,CAkHlB,aAAa,AAMV,UAAU,CAAC;MACV,QAAQ,EAAE,MAAM;MAChB,cAAc,EAAE,IAAI,GACrB;EA3HL,AAgIM,oBAhIc,AA8HjB,kBAAkB,CACjB,cAAc,CACZ,kBAAkB,CAAC;IACjB,UAAU,EAAE,SAAS,CAAC,IAAI,CdzDlB,8BAA8B,Gc0DvC;EAlIP,AAqII,oBArIgB,AA8HjB,kBAAkB,CAOjB,aAAa,CAAC;IACZ,UAAU,EAAE,UAAU,CAAC,IAAI,Cd9DjB,8BAA8B,Gc+DzC;EAvIL,AA2II,oBA3IgB,AA0IjB,UAAU,CACT,aAAa,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,MAAM,GACjB;EAKD,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK;IAnJnD,AAkJE,oBAlJkB,CAkJjB,AAAA,eAAC,CAAgB,YAAY,AAA5B,EAA8B,WAAW,AAAA,YAAY,CAAC;MAEpD,OAAO,EAAE,IAAI,GAEhB;;ACrJH,AAAA,eAAe,CAAC;EAId,MAAM,EAAE,MAAM;EACd,SAAS,EAAE,IAAI;EACf,YAAY,EAHI,KAAK;EAIrB,OAAO,EAAE,IAAI;EACb,KAAK,EAAE,gCAAgC,GAoJxC;EA5JD,AAUE,eAVa,CAUb,QAAQ,CAAC;IACP,kBAAkB,EAAE,CAAC;IACrB,QAAQ,EAAE,KAAK;IACf,KAAK,EAVS,KAAK;IAWnB,OAAO,EAAE,SAAS,GAiBnB;IA/BH,AAgBI,eAhBW,CAUb,QAAQ,CAMN,EAAE,CAAC;MACD,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,IAAI,GACjB;IApBL,AAsBI,eAtBW,CAUb,QAAQ,CAYN,EAAE,CAAC,CAAC,CAAC;MACH,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,6BAA6B,GAKrC;MA9BL,AA2BM,eA3BS,CAUb,QAAQ,CAYN,EAAE,CAAC,CAAC,AAKD,MAAM,CAAC;QACN,UAAU,EAAE,sCAAsC,GACnD;EA7BP,AAkCE,eAlCa,CAkCb,EAAE,CAAC;IACD,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI,GAChB;EArCH,AAuCE,eAvCa,CAuCb,EAAE,CAAC,OAAO,CAAC;IACT,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,QAAQ;IACjB,mBAAmB,EAAE,GAAG;IACxB,aAAa,EAAE,CAAC,GACjB;EA5CH,AA8CE,eA9Ca,CA8Cb,KAAK,CAAC;IACJ,eAAe,EAAE,QAAQ;IACzB,KAAK,EAAE,IAAI,GACZ;EAjDH,AAmDE,eAnDa,CAmDb,YAAY,CAAC;IACX,UAAU,EAAE,sCAAsC;IAClD,OAAO,EAAE,OAAO;IAChB,aAAa,EAAE,GAAG,GAMnB;IA5DH,AAwDI,eAxDW,CAmDb,YAAY,AAKT,WAAW,CAAC;MACX,UAAU,Ef1CP,qBAAO;Me2CV,KAAK,Ef3CF,OAAO,Ge4CX;EA3DL,AA+DI,eA/DW,CA8Db,aAAa,AACV,YAAY,CAAC,EAAE,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,KAAK,CA/DV,oCAAoC,GAgEhD;EAjEL,AAmEI,eAnEW,CA8Db,aAAa,CAKX,EAAE,CAAC;IACD,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,GAAG,CAAC,KAAK,CApEb,oCAAoC;IAqE/C,OAAO,EAAE,GAAG,GAgBb;IAtFL,AA0EM,eA1ES,CA8Db,aAAa,CAKX,EAAE,AAOC,IAAI,CAAC;MACJ,KAAK,EAAE,EAAE;MACT,WAAW,EAAE,MAAM,GACpB;IA7EP,AA+EM,eA/ES,CA8Db,aAAa,CAKX,EAAE,AAYC,YAAY,CAAC;MACZ,WAAW,EAAE,GAAG,CAAC,KAAK,CA/Eb,oCAAoC,GAgF9C;IAjFP,AAmFM,eAnFS,CA8Db,aAAa,CAKX,EAAE,AAgBC,WAAW,CAAC;MACX,YAAY,EAAE,GAAG,CAAC,KAAK,CAnFd,oCAAoC,GAoF9C;EArFP,AAyFM,eAzFS,CA8Db,aAAa,AA0BV,QAAQ,CACP,WAAW,CAAC,IAAI,CAAC;IACf,UAAU,Ef1EN,OAAO;Ie2EX,OAAO,EAAE,OAAO,GAKjB;KAHC,AAAA,AAAA,qBAAC,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EA7FtD,eAAe,CA8Db,aAAa,AA0BV,QAAQ,CACP,WAAW,CAAC,IAAI,CAIoC;MAChD,KAAK,EfnDP,IAAI,GeoDH;EA/FT,AAoGM,eApGS,CA8Db,aAAa,AAqCV,QAAQ,CACP,WAAW;EApGjB,eAAe,CA8Db,aAAa,AAqCV,QAAQ,CAEP,gBAAgB,CAAC;IACf,OAAO,EAAE,GAAG,GACb;EAvGP,AAyGM,eAzGS,CA8Db,aAAa,AAqCV,QAAQ,CAMP,WAAW,CAAC;IACV,OAAO,EAAE,GAAG,GACb;EA3GP,AA8GI,eA9GW,CA8Db,aAAa,CAgDX,WAAW,CAAC;IACV,WAAW,EA7GH,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS;IA8GxG,SAAS,EAAE,IAAI,GAChB;EAjHL,AAoHE,eApHa,CAoHb,YAAY,CAAC;IACX,SAAS,EAAE,IAAI,GAChB;EAtHH,AAwHE,eAxHa,CAwHb,GAAG,CAAC;IACF,UAAU,EAAE,sCAAsC;IAClD,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,IAAI;IACd,WAAW,EA7HD,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,GA8H3G;EAhIH,AAkIE,eAlIa,CAkIb,WAAW,CAAC;IACV,MAAM,EAAE,GAAG,CAAC,KAAK,CfpHZ,OAAO,GeqHb;EApIH,AAsIE,eAtIa,CAsIb,SAAS,CAAC;IACR,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,UAAU,EfzHF,OAAO;Ie0Hf,aAAa,EAAE,GAAG;IAClB,KAAK,Ef9HC,OAAO,GemId;IAhJH,AA6II,eA7IW,CAsIb,SAAS,CAOP,CAAC,CAAC;MACA,eAAe,EAAE,SAAS,GAC3B;EA/IL,AAkJE,eAlJa,CAkJb,UAAU,CAAC;IACT,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,GAAG,CAAC,KAAK,CArJJ,oCAAoC,GAsJlD;EAvJH,AAyJE,eAzJa,CAyJb,aAAa,CAAC;IACZ,aAAa,EAAE,IAAI,GACpB;;AC5JH,AAAA,qBAAqB,CAAC;EAGpB,SAAS,EAAE,IAAI;EACf,iBAAiB,EAAE,IAAI;EACvB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,UAAU,GAgCxB;EAtCD,AAQE,qBARmB,CAQnB,kBAAkB,CAAC;IACjB,WAAW,EAAE,MAAM;IACnB,UAAU,EhBPJ,OAAO;IgBQb,cAAc,EAAE,OAAO;IACvB,KAAK,EhB0CD,IAAI;IgBzCR,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,OAAO;IACf,SAAS,EAdQ,KAAK;IAiBtB,UAAU,EAAE,IAAI;IAChB,UAAU,EAjBQ,IAAI;IAkBtB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,WAAW;IACpB,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,IAAI;IACf,iBAAiB,EAAE,IAAI,GACxB;EA1BH,AA4BE,qBA5BmB,CA4BnB,SAAS,CAAC;IACR,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,WAAW,GACzB;EAhCH,AAkCE,qBAlCmB,CAkCnB,kBAAkB;EAlCpB,qBAAqB,CAmCnB,SAAS,CAAC;IACR,cAAc,EAAE,GAAG,GACpB;;ACrCH,AAAA,qBAAqB,CAAC;EACpB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,WAAW,GAiBzB;EArBD,AAME,qBANmB,AAMlB,OAAO,CAAC;IACP,UAAU,EAAE,oDAA2C,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;IAC/E,OAAO,EAAE,EAAE;IACX,uBAAuB,EAAE,IAAI;IAC7B,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,kCAAkC;IACxC,MAAM,EAAE,IAAI;IACZ,mBAAmB,EAAE,GAAG;IACxB,cAAc,EAAE,GAAG;IACnB,KAAK,EAAE,IAAI,GACZ;EAhBH,AAkBE,qBAlBmB,AAkBlB,IAAK,CAAA,GAAG,CAAC,OAAO,CAAE;IACjB,SAAS,EAAE,UAAU,GACtB;;ACpBH,AAAA,iBAAiB,AAAA,UAAU,CAAC;EAE1B,eAAe,CAAA,KAAC;EAChB,YAAY,CAAA,KAAC;EACb,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,eAAqB;EAC5C,eAAe,EAAE,oBAAoB;EACrC,YAAY,EAAE,iBAAiB;EAC/B,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,MAAM,GAef;EAxBD,AAYI,iBAZa,AAAA,UAAU,CAYvB,aAAa,CAAU;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,EAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,aAAa,CAAU;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,EAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,aAAa,CAAU;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,EAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAYI,iBAZa,AAAA,UAAU,CAYvB,YAAY,CAAW;IACrB,iBAAiB,EAAE,IAAI;IACvB,eAAe,EAAE,IAAI,CAbf,CAAE,GAcT;EAfL,AAoBE,iBApBe,AAAA,UAAU,CAoBzB,eAAe,CAAC;IACd,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,iBAAiB,GAChC;;AAGH,AAAA,UAAU,CAAC;EACT,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,IAAI;EACjB,KAAK,ElBhBG,OAAO;EkBiBf,MAAM,EAAE,MAAM,GACf;;AC7BD,AAAA,aAAa,CAAC;EACZ,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI,GA6Df;EA/DD,AAIE,aAJW,CAIX,QAAQ,CAAC;IACP,UAAU,EnB8CN,IAAI;ImB7CR,aAAa,EAAE,GAAG,GACnB;EAPH,AAUI,aAVS,AASV,oBAAoB,CACnB,QAAQ,CAAC;IACP,UAAU,EAAE,yBAAyB,GAWtC;IAtBL,AAaM,aAbO,AASV,oBAAoB,CACnB,QAAQ,AAGL,MAAM,CAAC;MACN,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAAuC;MAC7D,UAAU,EAAE,gBAAgB;MAC5B,OAAO,EAAE,IAAI,GACd;IAjBP,AAmBM,aAnBO,AASV,oBAAoB,CACnB,QAAQ,CASN,YAAY,CAAC,IAAI,CAAC;MAChB,aAAa,EAAE,WAAW,GAC3B;EArBP,AA0BI,aA1BS,AAyBV,uBAAuB,CACtB,QAAQ,CAAC;IACP,UAAU,EAAE,IAAI,GAKjB;IAhCL,AA6BM,aA7BO,AAyBV,uBAAuB,CACtB,QAAQ,CAGN,KAAK,CAAC;MACJ,OAAO,EAAE,MAAM,GAChB;EAKL,AAAA,YAAY,CApCd,aAAa;EAqCX,YAAY,CArCd,aAAa;EAsCX,YAAY,CAtCd,aAAa;EAuCX,YAAY,CAvCd,aAAa,CAuCI;IACb,qBAAqB,EAAE,cAAc,GACtC;EAGD,AAAA,YAAY,CA5Cd,aAAa;EA6CX,aAAa,CA7Cf,aAAa;EA8CX,aAAa,CA9Cf,aAAa;EA+CX,aAAa,CA/Cf,aAAa,CA+CK;IACd,qBAAqB,EAAE,cAAc,GActC;IAlBD,AAME,YANU,CA5Cd,aAAa,CAkDT,KAAK,CAAC,MAAM;IALd,aAAa,CA7Cf,aAAa,CAkDT,KAAK,CAAC,MAAM;IAJd,aAAa,CA9Cf,aAAa,CAkDT,KAAK,CAAC,MAAM;IAHd,aAAa,CA/Cf,aAAa,CAkDT,KAAK,CAAC,MAAM,CAAC;MhBzCf,SAAS,EAAE,IAAgB;MAC3B,WAAW,EAAE,IAAkB;MAC/B,UAAU,EAAE,SAA6C;MACzD,QAAQ,EAAE,MAAM,GgBwCb;IARH,AAUE,YAVU,CA5Cd,aAAa,AAsDR,4BAA4B;IAT/B,aAAa,CA7Cf,aAAa,AAsDR,4BAA4B;IAR/B,aAAa,CA9Cf,aAAa,AAsDR,4BAA4B;IAP/B,aAAa,CA/Cf,aAAa,AAsDR,4BAA4B,CAAC;MAC5B,qBAAqB,EAAE,cAAc,GAMtC;MAjBH,AAaI,YAbQ,CA5Cd,aAAa,AAsDR,4BAA4B,CAG3B,MAAM;MAZV,aAAa,CA7Cf,aAAa,AAsDR,4BAA4B,CAG3B,MAAM;MAXV,aAAa,CA9Cf,aAAa,AAsDR,4BAA4B,CAG3B,MAAM;MAVV,aAAa,CA/Cf,aAAa,AAsDR,4BAA4B,CAG3B,MAAM,CAAC;QACL,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI,GAClB;;AC5DP,AACE,QADM,CACN,IAAI,CAAC;EjBFL,gBAAgB,EAAE,oCAAoC;EACtD,mBAAmB,EAAE,MAAM;EAC3B,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,KAAK;EACtB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CHqCvB,mBAAI,GoBtCT;;AAHH,AAKE,QALM,CAKN,MAAM,CAAC;EACL,WAAW,EAAE,GAAG,GACjB;;AAPH,AASE,QATM,CASN,CAAC,CAAC;EACA,WAAW,EAAE,KAAK,GACnB;;AAXH,AAaE,QAbM,CAaN,QAAQ,CAAC;EACP,UAAU,EAAE,CAAC;EACb,WAAW,EAAE,CAAC,GACf;;AAhBH,AAkBE,QAlBM,CAkBN,QAAQ,CAAC;EACP,MAAM,EAAE,CAAC,GAoBV;EAvCH,AAqBI,QArBI,CAkBN,QAAQ,AAGL,MAAM,CAAC;IACN,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,CAAC,GACjB;EAzBL,AA2BI,QA3BI,CAkBN,QAAQ,CASN,KAAK,CAAC;IACJ,OAAO,EAAE,CAAC,GAMX;IAlCL,AA8BM,QA9BE,CAkBN,QAAQ,CASN,KAAK,CAGH,MAAM,CAAC;MjBrBX,SAAS,EAAE,IAAgB;MAC3B,WAAW,EAAE,IAAkB;MAC/B,UAAU,EAAE,SAA6C;MACzD,QAAQ,EAAE,MAAM,GiBqBX;EAjCP,AAoCI,QApCI,CAkBN,QAAQ,CAkBN,YAAY,CAAC;IACX,MAAM,EAAE,QAAQ,GACjB;;AAtCL,AAyCE,QAzCM,CAyCN,YAAY,CAAC;EACX,MAAM,EAAE,QAAQ,GACjB;;AA3CH,AA8CE,QA9CM,CA8CN,QAAQ,CAAC;EACP,KAAK,EpBxCC,OAAO;EoByCb,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,WAAW;EACnB,OAAO,EAAE,MAAM;EACf,UAAU,EnB3CK,GAAG,CAAC,KAAK,CAAC,oCAAoC;EmB4C7D,aAAa,EnB5CE,GAAG,CAAC,KAAK,CAAC,oCAAoC,GmBuF9D;EAzCU,AAAD,kBAAmB,CAAC,QAAQ,CAAC;IACnC,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,GACX;EA1DL,AA4DI,QA5DI,CA8CN,QAAQ,AAcL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACnB,KAAK,EpB7DD,OAAO,GoB8DZ;EA9DL,AAgEI,QAhEI,CA8CN,QAAQ,AAkBL,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IACpB,KAAK,EpBhED,OAAO,GoBiEZ;EAlEL,AAoEI,QApEI,CA8CN,QAAQ,CAsBN,YAAY,CAAC;IACX,KAAK,EAAE,IAAI,GACZ;EAtEL,AAwEI,QAxEI,CA8CN,QAAQ,CA0BN,IAAI,CAAC;IACH,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,GAAG,GACjB;EA3EL,AA8EM,QA9EE,CA8CN,QAAQ,CA+BN,KAAK,CACH,MAAM,CAAC;IACL,SAAS,EAAE,IAAI;IACf,KAAK,EpBrEH,OAAO,GoBsEV;EAjFP,AAmFM,QAnFE,CA8CN,QAAQ,CA+BN,KAAK,CAMH,CAAC,CAAC;IACA,SAAS,EAAE,IAAI,GAKhB;IAzFP,AAsFQ,QAtFA,CA8CN,QAAQ,CA+BN,KAAK,CAMH,CAAC,AAGE,QAAQ,CAAC;MACR,KAAK,EpB3EL,OAAO,GoB4ER;EAxFT,AA2FM,QA3FE,CA8CN,QAAQ,CA+BN,KAAK,CAcH,OAAO,CAAC;IACN,aAAa,EAAE,CAAC,GACjB;;AAKL,AAIE,YAJU,CAlGd,QAAQ,CAsGJ,QAAQ;AAHV,YAAY,CAnGd,QAAQ,CAsGJ,QAAQ;AAFV,YAAY,CApGd,QAAQ,CAsGJ,QAAQ;AADV,YAAY,CArGd,QAAQ,CAsGJ,QAAQ,CAAC;EACP,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,cAAc;EACrC,eAAe,EAAE,IAAI,GAiBtB;EAxBH,AASI,YATQ,CAlGd,QAAQ,CAsGJ,QAAQ,CAKN,YAAY;EARhB,YAAY,CAnGd,QAAQ,CAsGJ,QAAQ,CAKN,YAAY;EAPhB,YAAY,CApGd,QAAQ,CAsGJ,QAAQ,CAKN,YAAY;EANhB,YAAY,CArGd,QAAQ,CAsGJ,QAAQ,CAKN,YAAY,CAAC;IACX,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,GACZ;EAbL,AAeI,YAfQ,CAlGd,QAAQ,CAsGJ,QAAQ,CAWN,KAAK;EAdT,YAAY,CAnGd,QAAQ,CAsGJ,QAAQ,CAWN,KAAK;EAbT,YAAY,CApGd,QAAQ,CAsGJ,QAAQ,CAWN,KAAK;EAZT,YAAY,CArGd,QAAQ,CAsGJ,QAAQ,CAWN,KAAK,CAAC;IACJ,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,GACZ;EAlBL,AAoBI,YApBQ,CAlGd,QAAQ,CAsGJ,QAAQ,CAgBN,IAAI;EAnBR,YAAY,CAnGd,QAAQ,CAsGJ,QAAQ,CAgBN,IAAI;EAlBR,YAAY,CApGd,QAAQ,CAsGJ,QAAQ,CAgBN,IAAI;EAjBR,YAAY,CArGd,QAAQ,CAsGJ,QAAQ,CAgBN,IAAI,CAAC;IACH,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,IAAI,GAClB;;AAvBL,AA0BE,YA1BU,CAlGd,QAAQ,CA4HJ,MAAM;AAzBR,YAAY,CAnGd,QAAQ,CA4HJ,MAAM;AAxBR,YAAY,CApGd,QAAQ,CA4HJ,MAAM;AAvBR,YAAY,CArGd,QAAQ,CA4HJ,MAAM,CAAC;EACL,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,cAAc;EACrC,eAAe,EAAE,IAAI,GACtB;;AAIH,AAIE,YAJU,CApId,QAAQ,CAwIJ,QAAQ;AAHV,aAAa,CArIf,QAAQ,CAwIJ,QAAQ;AAFV,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ;AADV,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAAC;EACP,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,UAAU;EACvB,cAAc,EAAE,WAAW,GAyB5B;EAhCH,AASI,YATQ,CApId,QAAQ,CAwIJ,QAAQ,CAKN,YAAY;EARhB,aAAa,CArIf,QAAQ,CAwIJ,QAAQ,CAKN,YAAY;EAPhB,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ,CAKN,YAAY;EANhB,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAKN,YAAY,CAAC;IACX,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,CAAC,GACV;EAZL,AAcI,YAdQ,CApId,QAAQ,CAwIJ,QAAQ,CAUN,IAAI;EAbR,aAAa,CArIf,QAAQ,CAwIJ,QAAQ,CAUN,IAAI;EAZR,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ,CAUN,IAAI;EAXR,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAUN,IAAI,CAAC;IACH,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,GAAG,GACjB;EAjBL,AAmBI,YAnBQ,CApId,QAAQ,CAwIJ,QAAQ,CAeN,KAAK;EAlBT,aAAa,CArIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK;EAjBT,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK;EAhBT,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAAC;IACJ,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,UAAU,GAUpB;IA/BL,AAuBM,YAvBM,CApId,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAIH,MAAM;IAtBZ,aAAa,CArIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAIH,MAAM;IArBZ,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAIH,MAAM;IApBZ,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAIH,MAAM,CAAC;MACL,SAAS,EAAE,IAAI,GAChB;IAzBP,AA2BM,YA3BM,CApId,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAQH,CAAC;IA1BP,aAAa,CArIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAQH,CAAC;IAzBP,aAAa,CAtIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAQH,CAAC;IAxBP,aAAa,CAvIf,QAAQ,CAwIJ,QAAQ,CAeN,KAAK,CAQH,CAAC,CAAC;MACA,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,GAAG,GACjB;;AA9BP,AAkCE,YAlCU,CApId,QAAQ,CAsKJ,MAAM;AAjCR,aAAa,CArIf,QAAQ,CAsKJ,MAAM;AAhCR,aAAa,CAtIf,QAAQ,CAsKJ,MAAM;AA/BR,aAAa,CAvIf,QAAQ,CAsKJ,MAAM,CAAC;EACL,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,cAAc;EACrC,eAAe,EAAE,IAAI,GACtB;;AC7KL,AAAA,MAAM,CAAC;EACL,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,UAAU,EpBQO,GAAG,CAAC,KAAK,CAAC,oCAAoC,GoBPhE;;AC+BD,AAAA,QAAQ,CAAC;EACP,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,IAAI;EAClB,eAAe,EAAE,IAAI;EAIrB,oBAAoB,EAAE,CAAC,GAoCxB;EA3CD,AAhBE,QAgBM,AASL,IAAK,CAAA,mBAAmB,EAzBzB,aAAa,CAAC;IAEZ,SAAS,EAAE,IAAgB;IAC3B,WAAW,EAAE,IAAkB,GAChC;EAYH,AAVE,QAUM,AASL,IAAK,CAAA,mBAAmB,EAnBzB,mBAAmB,CAAC;InBbpB,SAAS,EAAE,IAAgB;IAC3B,WAAW,EAAE,IAAkB;IAC/B,UAAU,EAAE,SAA6C;IACzD,QAAQ,EAAE,MAAM,GmBYf;EAQH,AANE,QAMM,AASL,IAAK,CAAA,mBAAmB,EAfzB,cAAc,CAAC;IACb,SAAS,EA3BK,IAAI;IA4BlB,KAAK,EA5BS,IAAI,GA6BnB;EAgBC,AAAA,YAAY,CAbhB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAKvB,YAAY,CAdhB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAMvB,YAAY,CAfhB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAOvB,YAAY,CAhBhB,QAAQ,AASL,IAAK,CAAA,mBAAmB,EAOR;IACb,qBAAqB,EAAE,cAAc,GACtC;EAGD,AAAA,YAAY,CArBhB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAavB,aAAa,CAtBjB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAcvB,aAAa,CAvBjB,QAAQ,AASL,IAAK,CAAA,mBAAmB;EAevB,aAAa,CAxBjB,QAAQ,AASL,IAAK,CAAA,mBAAmB,EAeP;IACd,qBAAqB,EAAE,cAAc,GACtC;EA1BL,AA4BI,QA5BI,AASL,IAAK,CAAA,mBAAmB,EAmBvB,qBAAqB,CAAC;IACpB,OAAO,EAAE,IAAI,GACd;EA9BL,AAkCI,QAlCI,AAiCL,IAAK,CAAA,eAAe,EACnB,cAAc,CAAC;IACb,OAAO,EAAE,IAAI,GACd;EApCL,AAuCE,QAvCM,CAuCN,CAAC,CAAC;IAEA,KAAK,EtB9DC,OAAO,GsB+Dd;;AAGH,AAKE,gBALc,CAKd,aAAa,CAAC;EACZ,iBAAiB,EAAE,IAAI,GACxB;;AAPH,AASE,gBATc,CASd,kBAAkB,CAAC;EACjB,oBAAoB,EAPA,MAAyC,GA+B9D;EAlCH,AAYI,gBAZY,CASd,kBAAkB,AAGf,QAAQ,CAAC;IACR,gBAAgB,EAAE,kCAAkC;IACpD,aAAa,EAZF,IAAI;IAaf,KAAK,EtBzCH,IAAI;IsB0CN,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,IAAI;IACf,MAAM,EAhBK,IAAI;IAiBf,WAAW,EAjBA,IAAI;IAkBf,mBAAmB,EAjBD,OAAyC;IAkB3D,UAAU,EAAE,KAAuB;IACnC,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,MAAM;IAClB,KAAK,EAtBM,IAAI,GAuBhB;EAzBL,AA2BI,gBA3BY,CASd,kBAAkB,AAkBf,MAAM,AAAA,QAAQ,CAAC;IACd,gBAAgB,EAAE,gCAAgC,GACnD;EA7BL,AA+BI,gBA/BY,CASd,kBAAkB,AAsBf,OAAO,AAAA,QAAQ,CAAC;IACf,gBAAgB,EtB5GZ,OAAO,GsB6GZ;;AAIL,AAAA,gBAAgB,CAAC;EACf,UAAU,ErB3GO,GAAG,CAAC,KAAK,CAAC,oCAAoC;EqB4G/D,YAAY,EAtHK,IAAI;EAuHrB,WAAW,EAvHM,IAAI,GAkJtB;EA9BD,AA1GE,gBA0Gc,AAKb,mBAAmB,CA/GpB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAgHtC,YAAY,CANd,gBAAgB,CA1Gd,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAiHtC,YAAY,CAPd,gBAAgB,CA1Gd,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAkHtC,YAAY,CARd,gBAAgB,CA1Gd,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAmHtC,YAAY,CATd,gBAAgB,CA1Gd,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI,GAAa;IACjD,aAAa,ErBDE,GAAG,CAAC,KAAK,CAAC,oCAAoC;IqBE7D,aAAa,EAAE,IAAI;IACnB,cAAc,EAbC,IAAI,GAcpB;EAqHC,AAzHF,YAyHc,CAfhB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EA0HpC,YAAY,CAhBhB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EA2HpC,YAAY,CAjBhB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EA4HpC,YAAY,CAlBhB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI,GAAa;IACjD,aAAa,ErBDE,GAAG,CAAC,KAAK,CAAC,oCAAoC;IqBE7D,aAAa,EAAE,IAAI;IACnB,cAAc,EAbC,IAAI,GAcpB;EA6HC,AAjIF,YAiIc,CAvBhB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAkIpC,aAAa,CAxBjB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAmIpC,aAAa,CAzBjB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI;EAoIpC,aAAa,CA1BjB,gBAAgB,AAab,IAAK,CAAA,mBAAmB,EAvHzB,aAAa,AAAA,IAAK,CAAA,eAAgB,CAAA,IAAI,GAAa;IACjD,aAAa,ErBDE,GAAG,CAAC,KAAK,CAAC,oCAAoC;IqBE7D,aAAa,EAAE,IAAI;IACnB,cAAc,EAbC,IAAI,GAcpB;;AAsIH,AAlIE,mBAkIiB,CAlIjB,aAAa,CAAC;EAEZ,SAAS,EAAE,IAAgB;EAC3B,WAAW,EAAE,IAAkB,GAChC;;AA8HH,AA5HE,mBA4HiB,CA5HjB,mBAAmB,CAAC;EnBbpB,SAAS,EAAE,IAAgB;EAC3B,WAAW,EAAE,IAAkB;EAC/B,UAAU,EAAE,SAA6C;EACzD,QAAQ,EAAE,MAAM,GmBYf;;AA0HH,AAxHE,mBAwHiB,CAxHjB,cAAc,CAAC;EACb,SAAS,EAwHqB,KAAoB;EAvHlD,KAAK,EAuHyB,KAAoB,GAtHnD;;AAyHH,AAAA,aAAa,CAAC;EAGZ,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,KAAK,GAiDlB;EArDD,AAME,aANW,CAMX,kBAAkB,CAAC;IACjB,cAAc,EAAE,MAAM;IAEtB,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,aAAa,GAC/B;EAXH,AAaE,aAbW,CAaX,qBAAqB,CAAC;InB1JtB,SAAS,EAAE,IAAgB;IAC3B,WAAW,EAAE,IAAkB;IAC/B,UAAU,EAAE,SAA6C;IACzD,QAAQ,EAAE,MAAM;ImByJd,KAAK,EAAE,kCAAkC;IACzC,aAAa,EAAE,GAAG,GACnB;EAjBH,AAmBE,aAnBW,CAmBX,kBAAkB,CAAC;InBhKnB,SAAS,EAAE,IAAgB;IAC3B,WAAW,EAAE,IAAkB;IAC/B,UAAU,EAAE,SAA6C;IACzD,QAAQ,EAAE,MAAM;ImB+Jd,KAAK,EAAE,kCAAkC;IACzC,aAAa,EAAE,QAAQ,GACxB;EAvBH,AAyBE,aAzBW,CAyBX,mBAAmB,CAAC;IAClB,WAAW,EAAE,GAAG;IAChB,aAAa,EAAE,GAAG,GACnB;EA5BH,AA8BE,aA9BW,CA8BX,kBAAkB,CAAC;IACjB,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM,GACvB;EAjCH,AAmCE,aAnCW,CAmCX,cAAc,CAAC;InB1Lf,gBAAgB,EAAE,oCAAoC;IACtD,mBAAmB,EAAE,MAAM;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CHqCvB,mBAAI;IsBkJR,MAAM,EA3LQ,IAAI;IA4LlB,mBAAmB,EAAE,IAAqB;IAC1C,UAAU,EA7LI,IAAI,GA8LnB;EAxCH,AA2CI,aA3CS,AA0CV,MAAM,CACL,mBAAmB,CAAC;IAClB,KAAK,EAAE,gCAAgC,GACxC;EA7CL,AAiDI,aAjDS,AAgDV,OAAO,CACN,mBAAmB,CAAC;IAClB,KAAK,EtBvMD,OAAO,GsBwMZ;;AC5ML,AAAA,cAAc,CAAC;EACb,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG,GA+CjB;EAnDD,AAME,cANY,AAMX,uBAAuB,CAAC;IACvB,UAAU,EAAE,MAAM,GACnB;EARH,AAUE,cAVY,AAUX,4BAA4B,CAAC;IAC5B,UAAU,EAAE,GAAG,GAChB;EAZH,AAcE,cAdY,CAcZ,EAAE,CAAC;IACD,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC,GACX;EAjBH,AAmBE,cAnBY,CAmBZ,EAAE,CAAC,EAAE,CAAC;IACJ,OAAO,EAAE,YAAY,GA0BtB;IA9CH,AAsBI,cAtBU,CAmBZ,EAAE,CAAC,EAAE,AAGF,OAAO,CAAC;MACP,OAAO,EAAE,GAAG;MACZ,OAAO,EAAE,GAAG;MACZ,KAAK,EvBfD,OAAO,GuBgBZ;IA1BL,AA4BI,cA5BU,CAmBZ,EAAE,CAAC,EAAE,AASF,WAAW,AAAA,OAAO,CAAC;MAClB,OAAO,EAAE,IAAI,GACd;IA9BL,AAiCM,cAjCQ,CAmBZ,EAAE,CAAC,EAAE,CAaH,CAAC,AACE,MAAM,CAAC;MAEN,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,gCAAgC,GAK1D;MAxCP,AAqCQ,cArCM,CAmBZ,EAAE,CAAC,EAAE,CAaH,CAAC,AACE,MAAM,AAIJ,OAAO,CAAC;QACP,aAAa,EAAE,GAAG,CAAC,KAAK,CvBlCxB,OAAO,GuBmCR;IAvCT,AA0CM,cA1CQ,CAmBZ,EAAE,CAAC,EAAE,CAaH,CAAC,AAUE,OAAO,CAAC;MACP,KAAK,EvBvCH,OAAO,GuBwCV;EA5CP,AAgDE,cAhDY,CAgDZ,UAAU,CAAC;IACT,aAAa,EAAE,GAAG,GACnB;;AClDH,AAAA,iBAAiB,CAAC;EAChB,UAAU,EAAE,MAAM,GAenB;EAhBD,AAGE,iBAHe,CAGf,MAAM,CAAC;IACL,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;IAChB,KAAK,ExBOC,OAAO,GwBNd;EARH,AAUE,iBAVe,CAUf,SAAS,CAAC;IACR,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,KAAK,ExBHC,OAAO;IwBIb,UAAU,EAAE,GAAG,GAChB;;ACdH,AAEE,aAFW,CAEX,gBAAgB,CAAC;EACf,cAAc,EAAE,MAAM,GACvB;;AAJH,AAOE,aAPW,CAOX,UAAU,CAAC;EAET,OAAO,EAAE,CAAC,GAcX;EAvBH,AAYI,aAZS,CAOX,UAAU,CAKR,gBAAgB,CAAC;IACf,OAAO,EAAE,IAAI,GACd;EAdL,AAgBI,aAhBS,CAOX,UAAU,CASR,eAAe,CAAC;IACd,OAAO,EAAE,MAAM,GAChB;EAlBL,AAoBI,aApBS,CAOX,UAAU,CAaR,eAAe,CAAC;IACd,MAAM,EAAE,OAAO,GAChB;;AAtBL,AA2BE,aA3BW,CA2BX,gBAAgB,CAAC;EACf,OAAO,EAAE,IAAI,GACd;;AAKH,AAKI,YALQ,CAIV,aAAa,CACX,gBAAgB;AAJpB,aAAa,CAGX,aAAa,CACX,gBAAgB;AAHpB,aAAa,CAEX,aAAa,CACX,gBAAgB;AAFpB,aAAa,CACX,aAAa,CACX,gBAAgB,CAAC;EACf,OAAO,EAAE,YAAY,GACtB;;AAKL,AAMI,YANQ,CAIV,aAAa,CAEX,eAAe;AALnB,YAAY,CAGV,aAAa,CAEX,eAAe;AAJnB,YAAY,CAEV,aAAa,CAEX,eAAe;AAHnB,YAAY,CACV,aAAa,CAEX,eAAe,CAAC;EACd,OAAO,EAAE,MAAM,GAChB;;AARL,AAUI,YAVQ,CAIV,aAAa,CAMX,eAAe;AATnB,YAAY,CAGV,aAAa,CAMX,eAAe;AARnB,YAAY,CAEV,aAAa,CAMX,eAAe;AAPnB,YAAY,CACV,aAAa,CAMX,eAAe,CAAC;EACd,MAAM,EAAE,OAAO,GAChB;;AAZL,AAcI,YAdQ,CAIV,aAAa,CAUX,eAAe;AAbnB,YAAY,CAGV,aAAa,CAUX,eAAe;AAZnB,YAAY,CAEV,aAAa,CAUX,eAAe;AAXnB,YAAY,CACV,aAAa,CAUX,eAAe,CAAC;EACd,oBAAoB,CAAA,QAAC,GAUtB;EAzBL,AAiBM,YAjBM,CAIV,aAAa,CAUX,eAAe,CAGb,KAAK;EAhBX,YAAY,CAGV,aAAa,CAUX,eAAe,CAGb,KAAK;EAfX,YAAY,CAEV,aAAa,CAUX,eAAe,CAGb,KAAK;EAdX,YAAY,CACV,aAAa,CAUX,eAAe,CAGb,KAAK,CAAC;IACJ,KAAK,EAAE,yBAAyB;IAChC,MAAM,EAAE,yBAAyB,GAClC;EApBP,AAsBM,YAtBM,CAIV,aAAa,CAUX,eAAe,CAQb,MAAM;EArBZ,YAAY,CAGV,aAAa,CAUX,eAAe,CAQb,MAAM;EApBZ,YAAY,CAEV,aAAa,CAUX,eAAe,CAQb,MAAM;EAnBZ,YAAY,CACV,aAAa,CAUX,eAAe,CAQb,MAAM,CAAC;IACL,KAAK,EAAE,yBAAyB,GACjC;;AAMP,AAMI,YANQ,CAIV,aAAa,CAEX,eAAe;AALnB,YAAY,CAGV,aAAa,CAEX,eAAe;AAJnB,YAAY,CAEV,aAAa,CAEX,eAAe;AAHnB,YAAY,CACV,aAAa,CAEX,eAAe,CAAC;EACd,OAAO,EAAE,KAAK,GACf;;AARL,AAUI,YAVQ,CAIV,aAAa,CAMX,eAAe;AATnB,YAAY,CAGV,aAAa,CAMX,eAAe;AARnB,YAAY,CAEV,aAAa,CAMX,eAAe;AAPnB,YAAY,CACV,aAAa,CAMX,eAAe,CAAC;EACd,MAAM,EAAE,MAAM,GACf;;AAZL,AAcI,YAdQ,CAIV,aAAa,CAUX,eAAe;AAbnB,YAAY,CAGV,aAAa,CAUX,eAAe;AAZnB,YAAY,CAEV,aAAa,CAUX,eAAe;AAXnB,YAAY,CACV,aAAa,CAUX,eAAe,CAAC;EACd,qBAAqB,CAAA,QAAC,GAUvB;EAzBL,AAiBM,YAjBM,CAIV,aAAa,CAUX,eAAe,CAGb,KAAK;EAhBX,YAAY,CAGV,aAAa,CAUX,eAAe,CAGb,KAAK;EAfX,YAAY,CAEV,aAAa,CAUX,eAAe,CAGb,KAAK;EAdX,YAAY,CACV,aAAa,CAUX,eAAe,CAGb,KAAK,CAAC;IACJ,KAAK,EAAE,0BAA0B;IACjC,MAAM,EAAE,0BAA0B,GACnC;EApBP,AAsBM,YAtBM,CAIV,aAAa,CAUX,eAAe,CAQb,MAAM;EArBZ,YAAY,CAGV,aAAa,CAUX,eAAe,CAQb,MAAM;EApBZ,YAAY,CAEV,aAAa,CAUX,eAAe,CAQb,MAAM;EAnBZ,YAAY,CACV,aAAa,CAUX,eAAe,CAQb,MAAM,CAAC;IACL,KAAK,EAAE,0BAA0B,GAClC;;AC/FP,AAAA,QAAQ,CAAC;EACP,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM,GA+DvB;EAjED,AAKI,QALI,AAIL,MAAM,CACL,MAAM,CAAC;IACL,KAAK,E1BTD,OAAO,G0BUZ;EAPL,AAWI,QAXI,AAUL,OAAO,CACN,MAAM,CAAC;IACL,KAAK,E1BdD,OAAO,G0BeZ;EAbL,AAgBE,QAhBM,CAgBN,YAAY,CAAC;IACX,KAAK,EAAE,IAAI,GACZ;EAlBH,AAoBE,QApBM,CAoBN,IAAI,CAAC;IvBxBL,gBAAgB,EAAE,oCAAoC;IACtD,mBAAmB,EAAE,MAAM;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CHqCvB,mBAAI;I0BhBR,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,GAAG,GACjB;EAxBH,AA0BE,QA1BM,CA0BN,KAAK,CAAC;IACJ,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,IAAI,GAgBd;IA9CH,AAgCI,QAhCI,CA0BN,KAAK,CAMH,UAAU,CAAC;MACT,SAAS,EAAE,CAAC,GACb;IAlCL,AAoCI,QApCI,CA0BN,KAAK,CAUH,MAAM,CAAC;MvB9BT,SAAS,EAAE,IAAgB;MAC3B,WAAW,EAAE,IAAkB;MAC/B,UAAU,EAAE,SAA6C;MACzD,QAAQ,EAAE,MAAM;MuB8BZ,WAAW,EAAE,GAAG,GACjB;IAxCL,AA0CI,QA1CI,CA0BN,KAAK,CAgBH,QAAQ,CAAC;MvBpCX,SAAS,EAAE,IAAgB;MAC3B,WAAW,EAAE,IAAkB;MAC/B,UAAU,EAAE,SAA6C;MACzD,QAAQ,EAAE,MAAM,GuBoCb;EA7CL,AAgDE,QAhDM,CAgDN,MAAM,CAAC;IACL,WAAW,EAAE,IAAyB;IACtC,SAAS,EAAE,IAAuB;IAClC,KAAK,E1B3CC,OAAO,G0B6Cd;EArDH,AAuDE,QAvDM,CAuDN,CAAC,CAAC;IACA,SAAS,EAAE,IAAwB;IACnC,WAAW,EAAE,IAA0B;IACvC,KAAK,E1BtDC,OAAO;I0BuDb,MAAM,EAAE,OAAO,GAChB;EA5DH,AA8DE,QA9DM,CA8DN,QAAQ,CAAC;IACP,KAAK,E1BtDC,OAAO,G0BuDd;;ACtEH,AAAA,eAAe,CAAC;EACd,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,MAAM;EACnB,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,OAAO;EACpB,OAAO,EAAE,QAAQ;EACjB,mBAAmB,EAAE,IAAI;EACzB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO,GA+BhB;EA7BC,AAAA,KAAK,CAZP,eAAe,CAYL;IACN,mBAAmB,EAAE,IAAI,GAC1B;EAdH,AAgBE,eAhBa,AAgBZ,QAAQ,CAAC;IACR,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,kCAAkC;IACpD,gBAAgB,EAAE,kCAAkC;IACpD,KAAK,E3BbC,OAAO,G2BsBd;IA5BH,AAqBI,eArBW,AAgBZ,QAAQ,AAKN,MAAM,CAAC;MACN,gBAAgB,E3BlBZ,OAAO,G2BmBZ;IAvBL,AAyBI,eAzBW,AAgBZ,QAAQ,AASN,OAAO,CAAC;MACP,gBAAgB,E3BrBZ,OAAO,G2BsBZ;EA3BL,AA8BE,eA9Ba,AA8BZ,UAAU,CAAC;IACV,gBAAgB,E3BjBV,qBAAO,G2B0Bd;IAxCH,AAiCI,eAjCW,AA8BZ,UAAU,AAGR,MAAM,CAAC;MACN,gBAAgB,E3BpBZ,qBAAO,G2BqBZ;IAnCL,AAqCI,eArCW,AA8BZ,UAAU,AAOR,OAAO,CAAC;MACP,gBAAgB,E3BxBZ,qBAAO,G2ByBZ;;CAIL,AAAA,AACE,qBADD,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAC5C,UAAU,CAAC;EACT,gBAAgB,E3BvCV,wBAAO,G2BgDd;GAXH,AAAA,AAII,qBAJH,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAC5C,UAAU,AAGP,MAAM,CAAC;IACN,gBAAgB,E3B1CZ,wBAAO,G2B2CZ;GANL,AAAA,AAQI,qBARH,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAC5C,UAAU,AAOP,OAAO,CAAC;IACP,gBAAgB,E3B9CZ,wBAAO,G2B+CZ;;CAVL,AAAA,AAeI,qBAfH,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAc5C,OAAO,CACL,UAAU,CAAC;EACT,gBAAgB,E3BrDZ,wBAAO,G2B8DZ;GAzBL,AAAA,AAkBM,qBAlBL,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAc5C,OAAO,CACL,UAAU,AAGP,MAAM,CAAC;IACN,gBAAgB,E3BxDd,wBAAO,G2ByDV;GApBP,AAAA,AAsBM,qBAtBL,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAc5C,OAAO,CACL,UAAU,AAOP,OAAO,CAAC;IACP,gBAAgB,E3B5Dd,wBAAO,G2B6DV;;ACnEP,AAAA,qBAAqB,CAAC;EACpB,QAAQ,EAAE,KAAK;EAGf,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,gBAAgB,EAAE,uCAAuC;EACzD,KAAK,EAAE,gCAAgC;EACvC,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,qCAAqC;EAC3D,UAAU,E3BKO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CDJpB,qBAAO;E4BAf,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM,GAuEpB;EAtFD,AAiBE,qBAjBmB,CAiBnB,CAAC,CAAC;IACA,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,gCAAgC,GASxC;IA5BH,AAqBI,qBArBiB,CAiBnB,CAAC,AAIE,MAAM,CAAC;MACN,eAAe,EAAE,SAAS,GAC3B;KAED,AAAA,AAAA,qBAAC,AAAA,CAAsB,IAAK,CAAA,kBAAkB,EAzBlD,qBAAqB,CAiBnB,CAAC,CAQmD;MAChD,WAAW,EAAE,IAAI,GAClB;EA3BL,AA+BI,qBA/BiB,CA8BnB,KAAK,CACF,AAAA,IAAC,CAAK,UAAU,AAAf,EAAiB;IACjB,mBAAmB,EAAE,CAAC,GACvB;EAjCL,AAoCE,qBApCmB,CAoCnB,aAAa,CAAC;IACZ,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI,C5BsCY,IAAI;I4BnC7B,kBAAkB,EAAE,IAAI;IAKxB,SAAS,EAAE,KAA4D,GAIxE;IARC,MAAM,EAAE,SAAS,EAAE,KAAK;MA5C5B,AAoCE,qBApCmB,CAoCnB,aAAa,CAAC;QASV,kBAAkB,E5BiCK,IAAI,G4B1B9B;IAHC,MAAM,EAAE,SAAS,EAAE,MAAM;MAjD7B,AAoCE,qBApCmB,CAoCnB,aAAa,CAAC;QAcV,SAAS,EAAE,MAA6D,GAE3E;EApDH,AAsDE,qBAtDmB,CAsDnB,YAAY,CAAC;IACX,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,gBAAgB,EAAE,IAAI;IACtB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,gBAAgB,EAAE,0EAA0E;IAC5F,uBAAuB,EAAE,IAAI;IAC7B,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,GAAG;IACZ,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,OAAO,GAKhB;IAHC,MAAM,EAAE,SAAS,EAAE,KAAK;MAvE5B,AAsDE,qBAtDmB,CAsDnB,YAAY,CAAC;QAkBT,gBAAgB,EAAE,IAAI,GAEzB;EA1EH,AA4EE,qBA5EmB,AA4ElB,MAAM,CAAC,YAAY,CAAC;IACnB,OAAO,EAAE,KAAK,GACf;EA9EH,AAgFE,qBAhFmB,CAgFnB,KAAK,CAAC;IACJ,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,CAAC,GACf;;AAGH,AAAA,wBAAwB,CAAC;EACvB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,KAAK,E5BhFG,qBAAO;E4BiFf,UAAU,E5BpFF,wBAAO;E4BqFf,UAAU,EAAE,MAAM;EAClB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI,GAKZ;EAbD,AAUE,wBAVsB,CAUtB,IAAI,CAAC;IACH,cAAc,EAAE,MAAM,GACvB;;ACpGH,AACE,gBADc,AACb,WAAW,CAAC;EACX,QAAQ,EAAE,MAAM,GACjB;;AAGH,AAAA,kBAAkB,CAAC;EACjB,UAAU,E7B+CJ,IAAI;E6B9CV,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI,GAKd;EAbD,AAUE,kBAVgB,AAUf,OAAO,CAAC;IACP,OAAO,EAAE,KAAK,GACf;;AAGH,AAAA,kBAAkB,CAAC;EACjB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,iBAAiB;EACtB,IAAI,EAAE,iBAAiB;EACvB,UAAU,E7B2BJ,IAAI;E6B1BV,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,C7BgBlB,kBAAI;E6BfV,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI,GA+Ed;EA3EC,MAAM,EAAC,SAAS,EAAE,KAAK;IAdzB,AAAA,kBAAkB,CAAC;MAef,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,GAAG,EAAE,CAAC;MACN,IAAI,EAAE,CAAC;MACP,UAAU,EAAE,IAAI;MAChB,aAAa,EAAE,CAAC,GAqEnB;EAjEC,MAAM,EAAC,SAAS,EAAE,KAAK,OAAO,UAAU,EAAE,KAAK;IAxBjD,AAAA,kBAAkB,CAAC;MAyBf,UAAU,EAAE,MAAM,GAgErB;EA5DC,MAAM,EAAC,SAAS,EAAE,KAAK,OAAO,UAAU,EAAE,KAAK;IA7BjD,AAAA,kBAAkB,CAAC;MA8Bf,UAAU,EAAE,MAAM,GA2DrB;EAzFD,AAiCE,kBAjCgB,AAiCf,OAAO,CAAC;IACP,OAAO,EAAE,KAAK,GACf;EAnCH,AAqCE,kBArCgB,CAqChB,EAAE,CAAC;IACD,KAAK,E7BhDC,OAAO;I6BiDb,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,OAAO,GASxB;IAPC,MAAM,EAAC,SAAS,EAAE,KAAK;MA9C3B,AAqCE,kBArCgB,CAqChB,EAAE,CAAC;QAUC,UAAU,EAAE,KAAK,GAMpB;IAHC,MAAM,EAAC,SAAS,EAAE,KAAK;MAlD3B,AAqCE,kBArCgB,CAqChB,EAAE,CAAC;QAcC,UAAU,EAAE,IAAI,GAEnB;EArDH,AAuDE,kBAvDgB,CAuDhB,OAAO,CAAC;IACN,UAAU,EAAE,GAAG,CAAC,KAAK,C7BrEf,OAAO;I6BsEb,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,MAAM;IAClB,gBAAgB,E7B7BZ,IAAI,G6BuDT;IAvBC,MAAM,EAAC,SAAS,EAAE,KAAK,OAAO,UAAU,EAAE,KAAK;MAjEnD,AAuDE,kBAvDgB,CAuDhB,OAAO,CAAC;QAWJ,QAAQ,EAAE,MAAM,GAsBnB;IAlBC,MAAM,EAAC,SAAS,EAAE,KAAK,OAAO,UAAU,EAAE,KAAK;MAtEnD,AAuDE,kBAvDgB,CAuDhB,OAAO,CAAC;QAgBJ,QAAQ,EAAE,MAAM,GAiBnB;IAxFH,AA0EI,kBA1Ec,CAuDhB,OAAO,CAmBL,YAAY,CAAC;MACX,UAAU,EAAE,IAAI;MAChB,SAAS,EAAE,KAAK;MAChB,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,YAAY;MACrB,SAAS,EAAE,IAAI,GAQhB;MAvFL,AAiFM,kBAjFY,CAuDhB,OAAO,CAmBL,YAAY,AAOT,MAAM,EAjFb,kBAAkB,CAuDhB,OAAO,CAmBL,YAAY,AAQT,OAAO,EAlFd,kBAAkB,CAuDhB,OAAO,CAmBL,YAAY,AAST,MAAM,CAAC;QACN,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,C7BjGnB,OAAO;Q6BkGT,UAAU,EAAE,gBAAgB,GAC7B;;AC3GP,AAAA,mBAAmB;AACnB,IAAI,GAAG,IAAI,AAAA,UAAU,CAAC;EACpB,UAAU,E9BIF,OAAO;E8BHf,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,IAAI,GAkHd;EA5HD,AAYE,mBAZiB,CAYjB,gBAAgB;EAXlB,IAAI,GAAG,IAAI,AAAA,UAAU,CAWnB,gBAAgB,CAAC;IACf,KAAK,E9BCC,OAAO;I8BAb,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI,GAMZ;IAtBH,AAkBI,mBAlBe,CAYjB,gBAAgB,CAMd,GAAG;IAjBP,IAAI,GAAG,IAAI,AAAA,UAAU,CAWnB,gBAAgB,CAMd,GAAG,CAAC;MACF,mBAAmB,EAAE,GAAG;MACxB,iBAAiB,EAAE,GAAG,GACvB;EArBL,AAwBE,mBAxBiB,CAwBjB,EAAE;EAvBJ,IAAI,GAAG,IAAI,AAAA,UAAU,CAuBnB,EAAE,CAAC;IACD,KAAK,E9BdC,OAAO;I8Beb,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,KAAK,GACtB;EA/BH,AAiCE,mBAjCiB,CAiCjB,CAAC;EAhCH,IAAI,GAAG,IAAI,AAAA,UAAU,CAgCnB,CAAC,CAAC;IACA,KAAK,E9BvBC,OAAO;I8BwBb,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI,GACpB;EAtCH,AAwCE,mBAxCiB,CAwCjB,MAAM;EAvCR,IAAI,GAAG,IAAI,AAAA,UAAU,CAuCnB,MAAM,CAAC;IACL,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,IAAI,GAChB;EA7CH,AA+CE,mBA/CiB,CA+CjB,KAAK;EA9CP,IAAI,GAAG,IAAI,AAAA,UAAU,CA8CnB,KAAK,CAAC;IACJ,MAAM,EAAE,CAAC;IACT,KAAK,E9BKD,IAAI;I8BJR,gBAAgB,E9B/CV,OAAO,G8ByDd;IA5DH,AAoDI,mBApDe,CA+CjB,KAAK,AAKF,MAAM;IAnDX,IAAI,GAAG,IAAI,AAAA,UAAU,CA8CnB,KAAK,AAKF,MAAM,CAAC;MACN,UAAU,EAAE,IAAI;MAChB,gBAAgB,E9BlDZ,OAAO,G8BmDZ;IAvDL,AAyDI,mBAzDe,CA+CjB,KAAK,AAUF,OAAO;IAxDZ,IAAI,GAAG,IAAI,AAAA,UAAU,CA8CnB,KAAK,AAUF,OAAO,CAAC;MACP,gBAAgB,E9BrDZ,OAAO,G8BsDZ;EA3DL,AA8DE,mBA9DiB,CA8DjB,QAAQ;EA7DV,IAAI,GAAG,IAAI,AAAA,UAAU,CA6DnB,QAAQ,CAAC;IACP,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,IAAI,GAChB;EAnEH,AAqEE,mBArEiB,CAqEjB,KAAK;EApEP,IAAI,GAAG,IAAI,AAAA,UAAU,CAoEnB,KAAK,CAAC;IACJ,MAAM,EAAE,CAAC;IACT,gBAAgB,E9BzDV,qBAAO,G8BmEd;IAjFH,AAyEI,mBAzEe,CAqEjB,KAAK,AAIF,MAAM;IAxEX,IAAI,GAAG,IAAI,AAAA,UAAU,CAoEnB,KAAK,AAIF,MAAM,CAAC;MACN,UAAU,EAAE,IAAI;MAChB,gBAAgB,E9B7DZ,qBAAO,G8B8DZ;IA5EL,AA8EI,mBA9Ee,CAqEjB,KAAK,AASF,OAAO;IA7EZ,IAAI,GAAG,IAAI,AAAA,UAAU,CAoEnB,KAAK,AASF,OAAO,CAAC;MACP,gBAAgB,E9BjEZ,qBAAO,G8BkEZ;EAhFL,AAmFE,mBAnFiB,CAmFjB,sBAAsB;EAlFxB,IAAI,GAAG,IAAI,AAAA,UAAU,CAkFnB,sBAAsB,CAAC;IACrB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,KAAK,GAKb;IA1FH,AAuFI,mBAvFe,CAmFjB,sBAAsB,AAInB,IAAK,CAAA,GAAG;IAtFb,IAAI,GAAG,IAAI,AAAA,UAAU,CAkFnB,sBAAsB,AAInB,IAAK,CAAA,GAAG,EAAE;MACT,KAAK,EAAE,IAAI,GACZ;EAzFL,AA4FE,mBA5FiB,CA4FjB,wBAAwB;EA3F1B,IAAI,GAAG,IAAI,AAAA,UAAU,CA2FnB,wBAAwB,CAAC;IACvB,UAAU,EAAE,IAAI,GACjB;EA9FH,AAgGE,mBAhGiB,CAgGjB,qBAAqB;EA/FvB,IAAI,GAAG,IAAI,AAAA,UAAU,CA+FnB,qBAAqB,CAAC;IACpB,KAAK,EAAE,KAAK;IACZ,UAAU,E9B5CN,IAAI;I8B6CR,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,C9BvDpB,kBAAI;I8BwDR,aAAa,EAAE,GAAG;IAClB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,cAAc,GACxB;EAvGH,AAyGE,mBAzGiB,CAyGjB,yBAAyB;EAxG3B,IAAI,GAAG,IAAI,AAAA,UAAU,CAwGnB,yBAAyB,CAAC;IACxB,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,IAAI;IAChB,iBAAiB,EAAE,IAAI,GACxB;EA7GH,AA+GE,mBA/GiB,CA+GjB,gBAAgB;EA9GlB,IAAI,GAAG,IAAI,AAAA,UAAU,CA8GnB,gBAAgB,CAAC;IACf,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,eAAe,EAAE,WAAW;IAC5B,mBAAmB,EAAE,aAAa;IAClC,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,wEAAwE,GAC3F;EAtHH,AAwHE,mBAxHiB,CAwHjB,SAAS;EAvHX,IAAI,GAAG,IAAI,AAAA,UAAU,CAuHnB,SAAS,CAAC;IACR,IAAI,E9BnEA,IAAI;I8BoER,cAAc,EAAE,GAAG,GACpB;;ACxHH,AACE,cADY,AACX,KAAK,CAAC;EACL,OAAO,EAAE,MAAM,GAChB;;AAHH,AAKE,cALY,CAKZ,CAAC,CAAC,EAAE,CAAC;EACH,KAAK,E/BKC,OAAO;E+BJb,UAAU,EAAE,MAAM;EAClB,UAAU,E/BMF,OAAO,G+BLhB;;AATH,AAaI,cAbU,AAWX,KAAK,CAEJ,kBAAkB;AAbtB,cAAc,AAWX,KAAK,CAGJ,gBAAgB,EAdpB,cAAc,AAYX,SAAS,CACR,kBAAkB;AAbtB,cAAc,AAYX,SAAS,CAER,gBAAgB,CAAC;EACf,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,GAAG,GACpB;;AAjBL,AAoBE,cApBY,AAoBX,KAAK,CAAC;EACL,MAAM,EAAE,KAAK,GAYd;EAjCH,AAuBI,cAvBU,AAoBX,KAAK,CAGJ,KAAK,CAAC;IACJ,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI,GACpB;EA3BL,AA6BI,cA7BU,AAoBX,KAAK,CASJ,KAAK,CAAC;IACJ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI,GACb;;AAhCL,AAmCE,cAnCY,AAmCX,SAAS,CAAC;EACT,MAAM,EAAE,KAAK,GAYd;EAhDH,AAsCI,cAtCU,AAmCX,SAAS,CAGR,KAAK,CAAC;IACJ,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI,GACpB;EA1CL,AA4CI,cA5CU,AAmCX,SAAS,CASR,KAAK,CAAC;IACJ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI,GACb;;AA/CL,AAkDE,cAlDY,CAkDZ,MAAM,CAAC;EACL,SAAS,EAAE,OAAO;EAClB,MAAM,EAAE,CAAC,GACV;;AArDH,AAuDE,cAvDY,CAuDZ,aAAa,CAAC;EACZ,OAAO,EAAE,MAAM,GAChB;;AAzDH,AA2DE,cA3DY,CA2DZ,UAAU,CAAC;EACT,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,IAAI;EACrB,mBAAmB,EAAE,MAAM;EAC3B,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,GAAG;EACf,iBAAiB,EAAE,GAAG;EACtB,OAAO,EAAE,YAAY;EACrB,cAAc,EAAE,GAAG,GACpB;;AArEH,AAuEE,cAvEY,CAuEZ,KAAK,CAAC;EACJ,OAAO,EAAE,MAAM;EACf,MAAM,EAAE,CAAC,GACV;;AA1EH,AA4EE,cA5EY,AA4EX,KAAK,CAAC,KAAK,CAAC;EACX,iBAAiB,EAAE,IAAI,GACxB;;AA9EH,AAkFI,cAlFU,AAgFX,SAAS,CAER,KAAK,EAlFT,cAAc,AAiFX,KAAK,CACJ,KAAK,CAAC;EACJ,iBAAiB,EAAE,IAAI,GACxB;;AApFL,AAuFE,cAvFY,CAuFZ,KAAK,CAAC;EACJ,UAAU,EAAE,UAAU,GACvB;;AAzFH,AA2FE,cA3FY,AA2FX,mBAAmB,CAAC,aAAa,CAAC;EAEjC,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG,GACjB;;AA/FH,AAoGE,cApGY,CAoGZ,oBAAoB,CAAC;EACnB,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,IAAI,GACd;;AAvGH,AAyGE,cAzGY,CAyGZ,eAAe,CAAC;EACd,IAAI,EAAE,QAAQ;EACd,aAAa,EAAE,IAAI,GACpB;;AA5GH,AA8GE,cA9GY,CA8GZ,cAAc,CAAC;EAEb,KAAK,EAAE,uCAAuC;EAC9C,OAAO,EAAE,YAAY;EACrB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,CAAC,GAcV;EAlIH,AAsHI,cAtHU,CA8GZ,cAAc,CAQZ,CAAC,CAAC;IACA,KAAK,EAAE,uCAAuC;IAC9C,WAAW,EAAE,OAAO;IACpB,eAAe,EAAE,IAAI,GACtB;EA1HL,AA4HI,cA5HU,CA8GZ,cAAc,CAcZ,KAAK,CAAC;IACJ,MAAM,EAAE,IAAI;IACZ,iBAAiB,EAAE,GAAG;IACtB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI,GACZ;;ACpIL,AAAA,kBAAkB,CAAC;EACjB,cAAc,EAAE,MAAM;EACtB,IAAI,EAAE,QAAQ;EACd,KAAK,EAAE,IAAI,GAwHZ;EA3HD,AAKE,kBALgB,CAKhB,eAAe,CAAC;IACd,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,kCAAkC,GAC1C;EATH,AAWE,kBAXgB,CAWhB,CAAC,CAAC;IACA,MAAM,EAAE,CAAC,GACV;EAbH,AAeE,kBAfgB,AAef,uBAAuB,CAAC;IACvB,UAAU,EAAE,MAAM,GAWnB;IA3BH,AAkBI,kBAlBc,AAef,uBAAuB,CAGtB,QAAQ,CAAC;MACP,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,IAAI,GACpB;IArBL,AAuBI,kBAvBc,AAef,uBAAuB,CAQtB,YAAY,CAAC;MACX,SAAS,EAAE,IAAI;MACf,OAAO,EAAE,KAAK,GACf;EA1BL,AA8BI,kBA9Bc,CA6BhB,eAAe,AACZ,QAAQ,CAAC;IACR,IAAI,EAAE,KAAK,GACZ;EAhCL,AAmCE,kBAnCgB,CAmChB,WAAW,CAAC;IACV,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,IAAI,GAMpB;IA3CH,AAuCI,kBAvCc,CAmChB,WAAW,CAIT,GAAG,CAAC;MACF,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,YAAY,GACtB;EA1CL,AA6CE,kBA7CgB,CA6ChB,YAAY,CAAC;IACX,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,MAAM,GAChB;EAlDH,AAoDE,kBApDgB,CAoDhB,IAAI,CAAC;IACH,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,KAAK,EAAE,IAAI,GACZ;EAxDH,AA0DE,kBA1DgB,CA0DhB,QAAQ,CAAC;IACP,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,OAAO;IACnB,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,IAAI,GACpB;EA/DH,AAiEE,kBAjEgB,CAiEhB,cAAc,CAAC;IACb,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,kCAAkC;IACzC,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,QAAQ,GACf;EAvEH,AAyEE,kBAzEgB,CAyEhB,aAAa,CAAC;IACZ,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,MAAM;IACrB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI,GACrB;EA/EH,AAiFE,kBAjFgB,CAiFhB,OAAO,CAAC;IACN,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,8BAA8B;IAChD,OAAO,EAAE,MAAM,GAYhB;IAlGH,AAwFI,kBAxFc,CAiFhB,OAAO,CAOL,eAAe,CAAC;MACd,MAAM,EAAE,MAAM;MACd,SAAS,EAAE,KAAK;MAChB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,KAAK,GAKlB;OAHC,AAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EA9FP,kBAAkB,CAiFhB,OAAO,CAOL,eAAe,CAMC;QACZ,UAAU,EAAE,IAAI,GACjB;EAhGP,AAqGI,kBArGc,CAoGhB,KAAK,AACF,UAAU,CAAC;IACV,aAAa,EAAE,GAAG;IAClB,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,E/B3FG,GAAG,CAAC,KAAK,CAAC,4BAA4B;I+B4F/C,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,GAAG,GAaX;IAzHL,AA+GQ,kBA/GU,CAoGhB,KAAK,AACF,UAAU,AASR,MAAM,AACJ,QAAQ,EA/GjB,kBAAkB,CAoGhB,KAAK,AACF,UAAU,AASR,MAAM,AAEJ,SAAS,CAAC;MACT,UAAU,EAAE,IAAI,GACjB;IAlHT,AAqHM,kBArHY,CAoGhB,KAAK,AACF,UAAU,AAgBR,MAAM,CAAC;MACN,MAAM,E/BxGQ,GAAG,CAAC,KAAK,CAAC,iCAAiC;M+ByGzD,UAAU,EAAE,qCAAqC,GAClD;;AAKP,AAAA,iBAAiB,CAAC;EAChB,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,MAAM,GAKhB;EARD,AAKE,iBALe,CAKf,kBAAkB,CAAC;IACjB,SAAS,EAAE,IAAI,GAChB;;ACpIH,AAAA,2BAA2B,CAAC;EAC1B,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,IAAI;EACrB,qBAAqB,EAAE,cAAc;EACrC,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,IAAI,GASpB;EANC,MAAM,EAAC,SAAS,EAAE,KAAK;IARzB,AAAA,2BAA2B,CAAC;MASxB,qBAAqB,EAAE,IAAI;MAC3B,kBAAkB,EAAE,cAAc;MAClC,YAAY,EAAE,KAAK;MACnB,aAAa,EAAE,KAAK,GAEvB;;AAED,AAAA,kBAAkB,CAAC;EACjB,MAAM,EAAE,KAAK;EACb,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,GAAG,GAiJjB;EA9IC,MAAM,EAAC,SAAS,EAAE,KAAK;IAPzB,AAAA,kBAAkB,CAAC;MAQf,MAAM,EAAE,KAAK;MACb,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,IAAI;MACb,aAAa,EAAE,GAAG,CAAC,KAAK,CjCnBlB,OAAO;MiCoBb,OAAO,EAAE,IAAI;MACb,aAAa,EAAE,IAAI,GAwItB;MArJD,AAeI,kBAfc,AAeb,WAAW,CAAC;QACX,MAAM,EAAE,CAAC,GACV;MAjBL,AAmBI,kBAnBc,CAmBd,kBAAkB,CAAC;QACjB,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,IAAI,GAab;QAlCL,AAuBM,kBAvBY,CAmBd,kBAAkB,GAId,IAAI,GAAG,EAAE,CAAC;UACV,UAAU,EAAE,CAAC;UACb,aAAa,EAAE,GAAG;UAClB,WAAW,EAAE,GAAG,GACjB;QA3BP,AA6BM,kBA7BY,CAmBd,kBAAkB,GAUd,IAAI,GAAG,CAAC,CAAC;UACT,UAAU,EAAE,CAAC;UACb,WAAW,EAAE,IAAI;UACjB,SAAS,EAAE,IAAI,GAChB;EAIL,MAAM,EAAC,SAAS,EAAE,KAAK;IArCzB,AAAA,kBAAkB,CAAC;MAsCf,MAAM,EAAE,KAAK,GA+GhB;EArJD,AAyCE,kBAzCgB,CAyChB,uBAAuB,CAAC;IACtB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,KAAK;IACtB,mBAAmB,EAAE,aAAa;IAClC,iBAAiB,EAAE,SAAS;IAC5B,OAAO,EAAE,YAAY;IACrB,cAAc,EAAE,MAAM,GA4BvB;IAzBC,MAAM,EAAC,SAAS,EAAE,KAAK;MAnD3B,AAyCE,kBAzCgB,CAyChB,uBAAuB,CAAC;QAWpB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI,GAsBxB;IA5EH,AAyDI,kBAzDc,CAyChB,uBAAuB,AAgBpB,OAAO,CAAC;MACP,gBAAgB,EAAE,gFAAgF,GACnG;IA3DL,AA6DI,kBA7Dc,CAyChB,uBAAuB,AAoBpB,gBAAgB,CAAC;MAChB,gBAAgB,EAAE,yFAAyF,GAC5G;IA/DL,AAiEI,kBAjEc,CAyChB,uBAAuB,AAwBpB,YAAY,CAAC;MACZ,gBAAgB,EAAE,qFAAqF,GACxG;IAnEL,AAqEI,kBArEc,CAyChB,uBAAuB,AA4BpB,KAAK,CAAC;MACL,gBAAgB,EAAE,8EAA8E,GACjG;IAvEL,AAyEI,kBAzEc,CAyChB,uBAAuB,AAgCpB,KAAK,CAAC;MACL,gBAAgB,EAAE,8EAA8E,GACjG;EA3EL,AA8EE,kBA9EgB,CA8EhB,kBAAkB,CAAC;IACjB,MAAM,EAAE,KAAK,GAqBd;IApGH,AAiFI,kBAjFc,CA8EhB,kBAAkB,GAGd,IAAI,GAAG,EAAE,CAAC;MACV,KAAK,EjCpFD,OAAO;MiCqFX,aAAa,EAAE,GAAG;MAClB,WAAW,EAAE,GAAG,GACjB;IArFL,AAuFI,kBAvFc,CA8EhB,kBAAkB,GASd,IAAI,GAAG,CAAC,CAAC;MACT,KAAK,EjC7FD,OAAO;MiC8FX,UAAU,EAAE,CAAC;MACb,MAAM,EAAE,KAAK;MACb,aAAa,EAAE,IAAI;MACnB,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,IAAI,GAMlB;MAJC,MAAM,EAAC,SAAS,EAAE,KAAK;QA/F7B,AAuFI,kBAvFc,CA8EhB,kBAAkB,GASd,IAAI,GAAG,CAAC,CAAC;UASP,aAAa,EAAE,CAAC;UAChB,MAAM,EAAE,KAAK,GAEhB;EAnGL,AAsGE,kBAtGgB,CAsGhB,iBAAiB,CAAC;IAChB,gBAAgB,EjCzGV,qBAAO;IiC0Gb,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,IAAI,GAmBhB;IAhBC,MAAM,EAAC,SAAS,EAAE,KAAK;MAhH3B,AAsGE,kBAtGgB,CAsGhB,iBAAiB,CAAC;QAWd,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,MAAM;QAClB,iBAAiB,EAAE,KAAK,GAa3B;IAVC,MAAM,EAAC,SAAS,EAAE,KAAK;MAtH3B,AAsGE,kBAtGgB,CAsGhB,iBAAiB,CAAC;QAiBd,KAAK,EAAE,IAAI,GASd;IAhIH,AA0HI,kBA1Hc,CAsGhB,iBAAiB,AAoBd,MAAM,EA1HX,kBAAkB,CAsGhB,iBAAiB,AAqBd,OAAO,EA3HZ,kBAAkB,CAsGhB,iBAAiB,AAsBd,MAAM,CAAC;MACN,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CjCrIjB,OAAO;MiCsIX,UAAU,EAAE,gBAAgB,GAC7B;EA/HL,AAmIE,kBAnIgB,AAmIf,QAAQ,CAAC;IACR,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,QAAQ;IAClB,gBAAgB,EjChJV,OAAO;IiCiJb,UAAU,EAAE,IAAI;IAChB,mBAAmB,EAAE,KAAK,GAM3B;IAHC,MAAM,EAAC,SAAS,EAAE,KAAK;MA7I3B,AAmIE,kBAnIgB,AAmIf,QAAQ,CAAC;QAWN,OAAO,EAAE,IAAI,GAEhB;EAhJH,AAkJE,kBAlJgB,AAkJf,WAAW,AAAA,QAAQ,CAAC;IACnB,OAAO,EAAE,IAAI,GACd;;ACpKH,AAAA,eAAe,CAAC;EACd,MAAM,EAAE,UAAU;EAClB,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM,GAgDpB;EArDD,AAOE,eAPa,CAOb,gBAAgB;EAPlB,eAAe,CAQb,kBAAkB,CAAC;IACjB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,GAAG,GACnB;EAbH,AAeE,eAfa,CAeb,gBAAgB,CAAC;IACf,KAAK,ElCFC,OAAO;IkCGb,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE,GAAG,CAAC,KAAK,ClCTX,OAAO;IkCUb,OAAO,EAAE,QAAQ;IACjB,UAAU,ElCdJ,OAAO;IkCeb,MAAM,EAAE,OAAO,GAChB;EAtBH,AAyBI,eAzBW,CAwBb,KAAK,CACF,AAAA,IAAC,CAAK,OAAO,AAAZ,EAAc;IACd,OAAO,EAAE,CAAC;IACV,iBAAiB,EAAE,KAAK,GAazB;IAxCL,AA6BM,eA7BS,CAwBb,KAAK,CACF,AAAA,IAAC,CAAK,OAAO,AAAZ,CAIC,QAAQ,GAAG,gBAAgB,CAAC;MAC3B,UAAU,ElCpBR,OAAO;MkCqBT,KAAK,ElCuBL,IAAI;MkCtBJ,MAAM,EAAE,GAAG,CAAC,KAAK,ClCrBf,OAAO,GkCsBV;IAjCP,AAoCM,eApCS,CAwBb,KAAK,CACF,AAAA,IAAC,CAAK,OAAO,AAAZ,CAWC,QAAQ,AAAA,MAAM,GAAG,gBAAgB;IApCxC,eAAe,CAwBb,KAAK,CACF,AAAA,IAAC,CAAK,OAAO,AAAZ,CAYC,IAAK,CAAA,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC;MACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,gCAAgC,GACpD;EAvCP,AA2CE,eA3Ca,CA2Cb,2BAA2B,CAAC;IAC1B,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI,GACZ;EA9CH,AAgDE,eAhDa,CAgDb,kBAAkB,CAAC;IACjB,mBAAmB,EAAE,IAAI;IACzB,UAAU,EAAE,QAAQ;IACpB,OAAO,EAAE,IAAI,GACd;;ACpDH,AACE,gBADc,AACb,QAAQ,CAAC;EACR,QAAQ,EAAE,MAAM,GACjB;;AAHH,AAMI,gBANY,AAKb,IAAK,CAAA,QAAQ,EACZ,gBAAgB,CAAC;EACf,OAAO,EAAE,IAAI,GACd;;AAIL,AAAA,gBAAgB,CAAC;EACf,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,YAAY;EACxB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,IAAI,GAkDjB;EA3DD,AAWE,gBAXc,AAWb,KAAK,CAAC;IACL,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC,GA6CX;IA1DH,AAeI,gBAfY,AAWb,KAAK,CAIJ,iBAAiB,CAAC;MAChB,UAAU,EAAE,4BAA4B;MACxC,gBAAgB,EAAE,IAAI;MACtB,SAAS,EAAE,gBAAgB,CAAC,QAAQ;MACpC,OAAO,EAAE,CAAC,GAQX;MANC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;QArBzC,AAeI,gBAfY,AAWb,KAAK,CAIJ,iBAAiB,CAAC;UAOd,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,IAAI;UACZ,GAAG,EAAE,KAAK;UACV,aAAa,EAAE,KAAK,GAEvB;IA3BL,AA6BI,gBA7BY,AAWb,KAAK,CAkBJ,sBAAsB,CAAC;MACrB,UAAU,EAAE,YAAY;MACxB,OAAO,EAAE,CAAC,GACX;IAhCL,AAkCI,gBAlCY,AAWb,KAAK,CAuBJ,eAAe;IAlCnB,gBAAgB,AAWb,KAAK,CAwBJ,iBAAiB;IAnCrB,gBAAgB,AAWb,KAAK,CAyBJ,cAAc,CAAC;MACb,UAAU,EAAE,4BAA4B;MACxC,SAAS,EAAE,aAAa;MACxB,OAAO,EAAE,CAAC,GACX;IAxCL,AA0CI,gBA1CY,AAWb,KAAK,CA+BJ,eAAe,CAAC;MACd,gBAAgB,EAAE,IAAI,GACvB;IA5CL,AA8CI,gBA9CY,AAWb,KAAK,CAmCJ,iBAAiB,CAAC;MAChB,gBAAgB,EAAE,IAAI,GACvB;IAhDL,AAkDI,gBAlDY,AAWb,KAAK,CAuCJ,cAAc,CAAC;MACb,gBAAgB,EAAE,IAAI,GACvB;IApDL,AAsDI,gBAtDY,AAWb,KAAK,CA2CJ,qBAAqB,CAAC;MACpB,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,CAAC,GACX;;AAIL,AAAA,WAAW;AACX,IAAI,GAAG,IAAI,AAAA,UAAU,CAAC;EACpB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;EACd,gBAAgB,EAAE,0CAAiC,EnCZ5B,4FAAyH;EmCahJ,qBAAqB,EAAE,MAAM;EAC7B,qBAAqB,EAAE,WAAW;EAClC,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,KAAK;EACtB,QAAQ,EAAE,KAAK,GAChB;;AAED,AAAA,iBAAiB,CAAC;EAChB,SAAS,EAAE,gBAAgB,CAAC,UAAU;EACtC,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,CAAC;EACV,gBAAgB,EnCtCV,IAAI;EmCuCV,KAAK,EAAE,UAAU;EACjB,KAAK,EnChFG,OAAO;EmCiFf,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI,GAqHd;EA/HD,AAYE,iBAZe,CAYf,IAAI,CAAC;IACH,QAAQ,EAAE,QAAQ,GACnB;EAdH,AAgBE,iBAhBe,CAgBf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EnCvCmB,OAAO;ImCwC/B,MAAM,EAAE,OAAO,GAahB;IAlCH,AAuBI,iBAvBa,CAgBf,YAAY,CAOV,CAAC,CAAC;MACA,KAAK,EnCpGD,OAAO;MmCqGX,MAAM,EAAE,OAAO;MACf,eAAe,EAAE,SAAS,GAC3B;IA3BL,AA6BI,iBA7Ba,CAgBf,YAAY,CAaV,CAAC,AAAA,MAAM;IA7BX,iBAAiB,CAgBf,YAAY,CAcV,CAAC,AAAA,OAAO;IA9BZ,iBAAiB,CAgBf,YAAY,CAeV,CAAC,AAAA,MAAM,CAAC;MACN,KAAK,EnCpHD,OAAO,GmCqHZ;EAjCL,AAoCE,iBApCe,CAoCf,YAAY,CAAC;IACX,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,oBAAoB,EAAE,IAAI;IAC1B,MAAM,EAAE,GAAG,CAAC,KAAK,CnCvHX,OAAO;ImCwHb,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,oCAAoC,GAkBjD;IAhEH,AAgDI,iBAhDa,CAoCf,YAAY,AAYT,MAAM,CAAC;MACN,YAAY,EnCzHR,OAAO,GmC0HZ;IAlDL,AAoDI,iBApDa,CAoCf,YAAY,AAgBT,MAAM,CAAC;MACN,YAAY,EnCzIR,OAAO;MmC0IX,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CnC1IjB,uBAAO,GmC2IZ;IAvDL,AAyDI,iBAzDa,CAoCf,YAAY,AAqBT,QAAQ,CAAC;MACR,YAAY,EnChIT,OAAO,GmCiIX;IA3DL,AA6DI,iBA7Da,CAoCf,YAAY,AAyBT,QAAQ,AAAA,MAAM,CAAC;MACd,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CnCpIlB,qBAAO,GmCqIX;EA/DL,AAkEE,iBAlEe,CAkEf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,SAAS,GAClB;EArEH,AAuEE,iBAvEe,CAuEf,YAAY,CAAC,WAAW,CAAC;IACvB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,KAAK,GACf;EA3EH,AA6EE,iBA7Ee,CA6Ef,MAAM,CAAC;IACL,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,WAAW,GACpB;EAjFH,AAmFE,iBAnFe,CAmFf,gBAAgB,CAAC;IACf,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,GAAG;IAClB,KAAK,EnC1HD,IAAI;ImC2HR,gBAAgB,EnC9KV,OAAO;ImC+Kb,UAAU,EAAE,sBAAsB,GAOnC;IAnGH,AA8FI,iBA9Fa,CAmFf,gBAAgB,AAWb,IAAK,EAAA,AAAA,QAAC,AAAA,EAAU,OAAO,EA9F5B,iBAAiB,CAmFf,gBAAgB,AAYb,IAAK,EAAA,AAAA,QAAC,AAAA,EAAU,MAAM,CAAC;MACtB,UAAU,EnClLN,OAAO;MmCmLX,YAAY,EnClLR,OAAO,GmCmLZ;EAlGL,AAqGE,iBArGe,CAqGf,YAAY,CAAC;IACX,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EnCzLV,OAAO;ImC0Lb,KAAK,EnC9LC,OAAO;ImC+Lb,MAAM,EAAE,GAAG,CAAC,KAAK,CnC/LX,OAAO;ImCgMb,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,uDAAuD,GAepE;IA9HH,AAiHI,iBAjHa,CAqGf,YAAY,CAYT,AAAA,QAAC,AAAA,EAAU;MACV,gBAAgB,EnCjMZ,OAAO;MmCkMX,YAAY,EnChMR,OAAO;MmCiMX,KAAK,EnChMD,OAAO;MmCiMX,MAAM,EAAE,OAAO;MACf,OAAO,EAAE,GAAG,GACb;IAvHL,AAyHI,iBAzHa,CAqGf,YAAY,AAoBT,IAAK,EAAA,AAAA,QAAC,AAAA,EAAU,MAAM,CAAC;MACtB,gBAAgB,EnC9MZ,OAAO;MmC+MX,YAAY,EnC9MR,OAAO;MmC+MX,KAAK,EnC5JH,IAAI,GmC6JP;;AAIL,AAAA,sBAAsB,CAAC;EACrB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,YAAY;EACnB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK,GAYb;EAVC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IANrC,AAAA,sBAAsB,CAAC;MAOnB,KAAK,EAAE,KAAK,GASf;EANC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAVrC,AAAA,sBAAsB,CAAC;MAWnB,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,KAAK;MACZ,UAAU,EAAE,MAAM,GAErB;;AAED,AAAA,iBAAiB,CAAC;EAChB,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,IAAI;EACnB,SAAS,EAAE,KAAK;EAChB,UAAU,EAAE,8CAAqC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS;EACzE,cAAc,EAAE,KAAK,GACtB;;AAED,AAAA,CAAC,AAAA,cAAc,CAAC;EACd,KAAK,EnC5LC,IAAI;EmC6LV,OAAO,EAAE,KAAK;EACd,eAAe,EAAE,SAAS,GAO3B;EAVD,AAKE,CALD,AAAA,cAAc,AAKZ,MAAM,EALT,CAAC,AAAA,cAAc,AAMZ,OAAO,EANV,CAAC,AAAA,cAAc,AAOZ,MAAM,CAAC;IACN,KAAK,EnCnMD,IAAI,GmCoMT;;AAGH,AAAA,eAAe,CAAC;EACd,UAAU,EAAE,+CAA+C,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS;EAC9E,eAAe,EAAE,SAAS;EAC1B,MAAM,EAAE,WAAW;EACnB,WAAW,EAAE,KAAK,GAUnB;EARC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IANrC,AAAA,eAAe,CAAC;MAOZ,UAAU,EAAE,+CAA+C,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS;MAChF,eAAe,EAAE,SAAS,GAM7B;EAdD,AAWE,eAXa,AAWZ,IAAK,CAAA,GAAG,EAAE;IACT,mBAAmB,EAAE,SAAS,GAC/B;;AAGH,AAAA,qBAAqB,CAAC;EACpB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EnC7NC,IAAI;EmC8NV,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,EAAE;EACX,UAAU,EAAE,YAAY;EACxB,OAAO,EAAE,CAAC,GAUX;EARC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAdrC,AAAA,qBAAqB,CAAC;MAelB,KAAK,EAAE,KAAK,GAOf;EAJC,MAAM,CAAC,MAAM,MAAM,SAAS,EAAE,KAAK;IAlBrC,AAAA,qBAAqB,CAAC;MAmBlB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI,GAEf;;AAED,AAAA,eAAe;AACf,iBAAiB;AACjB,cAAc,CAAC;EACb,OAAO,EAAE,CAAC;EACV,SAAS,EAAE,gBAAgB,GAC5B;;AAED,AAAA,MAAM,CAAC;EACL,OAAO,EAAE,IAAI,GACd;;AAED,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,QAAQ;EACjB,SAAS,EAAE,eAAe;EAC1B,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EnChQC,IAAI;EmCiQV,gBAAgB,EnCvST,OAAO;EmCwSd,QAAQ,EAAE,QAAQ;EAClB,kBAAkB,EAAE,IAAI;EACxB,GAAG,EAAE,KAAK;EACV,aAAa,EAAE,GAAG,GAenB;EA1BD,AAaE,MAbI,AAAA,OAAO,AAaV,QAAQ,CAAC;IACR,kBAAkB,EAAE,IAAI;IACxB,UAAU,EnC/SL,OAAO;ImCgTZ,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,aAAa;IACxB,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,EAAE,GACZ;;AAGH,UAAU,CAAV,SAAU;EACR,EAAE;IACA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,iBAAiB;EAG9B,IAAI;IACF,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,aAAa"
+ "mappings": "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"
}
\ No newline at end of file
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-mac.css firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-mac.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-mac.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-mac.css 2019-02-07 12:50:25.000000000 +0000
@@ -1834,6 +1834,39 @@
color: #0C0C0D;
margin: 16px 0; }
+.ds-message-container {
+ display: none;
+ color: #737373;
+ font-size: 13px;
+ justify-content: center;
+ margin: 0 auto 40px;
+ width: 936px; }
+ .ds-message-container p {
+ margin: 0;
+ align-self: center;
+ line-height: 20px;
+ display: flex; }
+ .ds-message-container .icon {
+ align-self: center;
+ fill: var(--newtab-icon-secondary-color);
+ margin-inline-end: 6px;
+ width: 20px;
+ height: 20px; }
+ .ds-message-container .ds-message-actions {
+ align-self: center;
+ border: 0;
+ padding: 0; }
+ .ds-message-container .ds-message-actions button {
+ height: 24px;
+ margin: 0;
+ margin-inline-start: 20px;
+ padding: 0 20px; }
+ .ds-message-container .ds-message-actions button.dismiss {
+ padding: 0; }
+
+.force-light-theme[lwt-newtab-brighttext] .ds-message-container {
+ display: flex; }
+
.ds-card-grid {
display: grid;
grid-gap: 24px; }
@@ -2342,6 +2375,33 @@
.ds-card .context {
color: #008EA4; }
+.ds-message {
+ margin: 8px 0 0; }
+ .ds-message .title {
+ display: flex;
+ align-items: center; }
+ .ds-message .title img {
+ width: 16px;
+ height: 16px;
+ margin: 0 6px 0 0; }
+ .ds-message .title span {
+ line-height: 24px;
+ font-size: 17px;
+ color: #0C0C0D;
+ font-weight: 600; }
+ .ds-message .subtitle {
+ line-height: 20px;
+ font-size: 14px;
+ color: #737373;
+ margin: 0; }
+ .ds-message .subtitle span::after {
+ content: ' '; }
+ .ds-message .subtitle a:hover,
+ .ds-message .subtitle a:focus {
+ text-decoration: underline; }
+ .ds-message .ds-hr {
+ margin: 16px 0 8px; }
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-mac.css.map firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-mac.css.map
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-mac.css.map 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-mac.css.map 2019-02-07 12:50:25.000000000 +0000
@@ -24,6 +24,7 @@
"../content-src/components/PocketLoggedInCta/_PocketLoggedInCta.scss",
"../content-src/components/MoreRecommendations/_MoreRecommendations.scss",
"../content-src/components/DiscoveryStreamBase/_DiscoveryStreamBase.scss",
+ "../content-src/components/DarkModeMessage/_DarkModeMessage.scss",
"../content-src/components/DiscoveryStreamComponents/CardGrid/_CardGrid.scss",
"../content-src/components/DiscoveryStreamComponents/Hero/_Hero.scss",
"../content-src/components/DiscoveryStreamComponents/HorizontalRule/_HorizontalRule.scss",
@@ -32,6 +33,7 @@
"../content-src/components/DiscoveryStreamComponents/SectionTitle/_SectionTitle.scss",
"../content-src/components/DiscoveryStreamComponents/TopSites/_TopSites.scss",
"../content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss",
+ "../content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss",
"../content-src/asrouter/components/Button/_Button.scss",
"../content-src/asrouter/components/SnippetBase/_SnippetBase.scss",
"../content-src/asrouter/components/ModalOverlay/_ModalOverlay.scss",
@@ -44,7 +46,7 @@
],
"sourcesContent": [
"/* This is the mac variant */ // sass-lint:disable-line no-css-comments\n\n$os-infopanel-arrow-height: 10px;\n$os-infopanel-arrow-offset-end: 7px;\n$os-infopanel-arrow-width: 18px;\n\n[lwt-newtab-brighttext]:not(.force-light-theme) {\n -moz-osx-font-smoothing: grayscale;\n}\n\n@import './activity-stream';\n",
- "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
+ "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n@import '../components/DarkModeMessage/DarkModeMessage';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n@import '../components/DiscoveryStreamComponents/DSMessage/DSMessage';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
"html {\n box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n*::-moz-focus-inner {\n border: 0;\n}\n\nbody {\n margin: 0;\n}\n\nbutton,\ninput {\n background-color: inherit;\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n\n[hidden] {\n display: none !important; // sass-lint:disable-line no-important\n}\n",
"// Photon colors from http://design.firefox.com/photon/visuals/color.html\n$blue-40: #45A1FF;\n$blue-50: #0A84FF;\n$blue-60: #0060DF;\n$blue-70: #003EAA;\n$blue-80: #002275;\n$grey-10: #F9F9FA;\n$grey-20: #EDEDF0;\n$grey-30: #D7D7DB;\n$grey-40: #B1B1B3;\n$grey-50: #737373;\n$grey-60: #4A4A4F;\n$grey-70: #38383D;\n$grey-80: #2A2A2E;\n$grey-90: #0C0C0D;\n$teal-70: #008EA4;\n$red-60: #D70022;\n$yellow-50: #FFE900;\n\n// Photon opacity from http://design.firefox.com/photon/visuals/color.html#opacity\n$grey-10-10: rgba($grey-10, 0.1);\n$grey-10-20: rgba($grey-10, 0.2);\n$grey-10-30: rgba($grey-10, 0.3);\n$grey-10-40: rgba($grey-10, 0.4);\n$grey-10-50: rgba($grey-10, 0.5);\n$grey-10-60: rgba($grey-10, 0.6);\n$grey-10-80: rgba($grey-10, 0.8);\n$grey-10-95: rgba($grey-10, 0.95);\n$grey-20-60: rgba($grey-20, 0.6);\n$grey-20-80: rgba($grey-20, 0.8);\n$grey-30-60: rgba($grey-30, 0.6);\n$grey-60-60: rgba($grey-60, 0.6);\n$grey-60-70: rgba($grey-60, 0.7);\n$grey-80-95: rgba($grey-80, 0.95);\n$grey-90-10: rgba($grey-90, 0.1);\n$grey-90-20: rgba($grey-90, 0.2);\n$grey-90-30: rgba($grey-90, 0.3);\n$grey-90-40: rgba($grey-90, 0.4);\n$grey-90-50: rgba($grey-90, 0.5);\n$grey-90-60: rgba($grey-90, 0.6);\n$grey-90-70: rgba($grey-90, 0.7);\n$grey-90-80: rgba($grey-90, 0.8);\n$grey-90-90: rgba($grey-90, 0.9);\n\n$black: #000;\n$black-5: rgba($black, 0.05);\n$black-10: rgba($black, 0.1);\n$black-12: rgba($black, 0.12);\n$black-15: rgba($black, 0.15);\n$black-20: rgba($black, 0.2);\n$black-25: rgba($black, 0.25);\n$black-30: rgba($black, 0.3);\n\n// Other colors\n$white: #FFF;\n$white-10: rgba($white, 0.1);\n$pocket-teal: #50BCB6;\n$pocket-red: #EF4056;\n$bookmark-icon-fill: #0A84FF;\n$download-icon-fill: #12BC00;\n$pocket-icon-fill: #D70022;\n$email-input-focus: rgba($blue-50, 0.3);\n$email-input-invalid: rgba($red-60, 0.3);\n$aw-extra-blue-1: #004EC2;\n$aw-extra-blue-2: #0080FF;\n$aw-extra-blue-3: #00C7FF;\n$about-welcome-gradient: linear-gradient(to bottom, $blue-70 40%, $aw-extra-blue-1 60%, $blue-60 80%, $aw-extra-blue-2 90%, $aw-extra-blue-3 100%);\n$about-welcome-extra-links: #676F7E;\n$firefox-wordmark-default-color: #363959;\n$firefox-wordmark-darktheme-color: $white;\n\n// Photon transitions from http://design.firefox.com/photon/motion/duration-and-easing.html\n$photon-easing: cubic-bezier(0.07, 0.95, 0, 1);\n\n$border-radius: 3px;\n\n// Grid related styles\n$base-gutter: 32px;\n$section-horizontal-padding: 25px;\n$section-vertical-padding: 10px;\n$section-spacing: 40px - $section-vertical-padding * 2;\n$grid-unit: 96px; // 1 top site\n\n$icon-size: 16px;\n$smaller-icon-size: 12px;\n$larger-icon-size: 32px;\n\n$searchbar-width-small: $grid-unit * 2 + $base-gutter * 1;\n$searchbar-width-medium: $grid-unit * 4 + $base-gutter * 3;\n$searchbar-width-large: $grid-unit * 6 + $base-gutter * 5;\n\n$wrapper-default-width: $grid-unit * 2 + $base-gutter * 1 + $section-horizontal-padding * 2; // 2 top sites\n$wrapper-max-width-medium: $grid-unit * 4 + $base-gutter * 3 + $section-horizontal-padding * 2; // 4 top sites\n$wrapper-max-width-large: $grid-unit * 6 + $base-gutter * 5 + $section-horizontal-padding * 2; // 6 top sites\n$wrapper-max-width-widest: $grid-unit * 8 + $base-gutter * 7 + $section-horizontal-padding * 2; // 8 top sites\n// For the breakpoints, we need to add space for the scrollbar to avoid weird\n// layout issues when the scrollbar is visible. 16px is wide enough to cover all\n// OSes and keeps it simpler than a per-OS value.\n$scrollbar-width: 16px;\n\n// Breakpoints\n$break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width;\n$break-point-large: $wrapper-max-width-large + $base-gutter * 2 + $scrollbar-width;\n$break-point-widest: $wrapper-max-width-widest + $base-gutter * 2 + $scrollbar-width;\n\n$section-title-font-size: 13px;\n\n$card-width: $grid-unit * 2 + $base-gutter;\n$card-height: 266px;\n$card-preview-image-height: 122px;\n$card-title-margin: 2px;\n$card-text-line-height: 19px;\n// Larger cards for wider screens:\n$card-width-large: 309px;\n$card-height-large: 370px;\n$card-preview-image-height-large: 155px;\n// Compact cards for Highlights\n$card-height-compact: 160px;\n$card-preview-image-height-compact: 108px;\n\n$topic-margin-top: 12px;\n\n$context-menu-button-size: 27px;\n$context-menu-button-boxshadow: 0 2px $grey-90-10;\n$context-menu-shadow: 0 5px 10px $black-30, 0 0 0 1px $black-20;\n$context-menu-font-size: 14px;\n$context-menu-border-radius: 5px;\n$context-menu-outer-padding: 5px;\n$context-menu-item-padding: 3px 12px;\n\n$error-fallback-font-size: 12px;\n$error-fallback-line-height: 1.5;\n\n$image-path: '../data/content/assets/';\n\n$snippets-container-height: 120px;\n\n$textbox-shadow-size: 4px;\n\n@mixin fade-in {\n box-shadow: inset $inner-box-shadow, $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin fade-in-card {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin context-menu-button {\n .context-menu-button {\n background-clip: padding-box;\n background-color: var(--newtab-contextmenu-button-color);\n background-image: url('chrome://browser/skin/page-action.svg');\n background-position: 55%;\n border: $border-primary;\n border-radius: 100%;\n box-shadow: $context-menu-button-boxshadow;\n cursor: pointer;\n fill: var(--newtab-icon-primary-color);\n height: $context-menu-button-size;\n inset-inline-end: -($context-menu-button-size / 2);\n opacity: 0;\n position: absolute;\n top: -($context-menu-button-size / 2);\n transform: scale(0.25);\n transition-duration: 150ms;\n transition-property: transform, opacity;\n width: $context-menu-button-size;\n\n &:-moz-any(:active, :focus) {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n@mixin context-menu-button-hover {\n .context-menu-button {\n opacity: 1;\n transform: scale(1);\n transition-delay: 333ms;\n }\n}\n\n@mixin context-menu-open-middle {\n .context-menu {\n margin-inline-end: auto;\n margin-inline-start: auto;\n inset-inline-end: auto;\n inset-inline-start: -$base-gutter;\n }\n}\n\n@mixin context-menu-open-left {\n .context-menu {\n margin-inline-end: 5px;\n margin-inline-start: auto;\n inset-inline-end: 0;\n inset-inline-start: auto;\n }\n}\n\n@mixin flip-icon {\n &:dir(rtl) {\n transform: scaleX(-1);\n }\n}\n",
"@function textbox-shadow($color) {\n @return 0 0 0 1px $color, 0 0 0 $textbox-shadow-size rgba($color, 0.3);\n}\n\n@mixin textbox-focus($color) {\n --newtab-textbox-focus-color: #{$color};\n --newtab-textbox-focus-boxshadow: #{textbox-shadow($color)};\n}\n\n// scss variables related to the theme.\n$border-primary: 1px solid var(--newtab-border-primary-color);\n$border-secondary: 1px solid var(--newtab-border-secondary-color);\n$inner-box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);\n$input-border: 1px solid var(--newtab-textbox-border);\n$input-border-active: 1px solid var(--newtab-textbox-focus-color);\n$input-error-border: 1px solid $red-60;\n$input-error-boxshadow: textbox-shadow($red-60);\n$shadow-primary: 0 0 0 5px var(--newtab-card-active-outline-color);\n$shadow-secondary: 0 1px 4px 0 $grey-90-20;\n\n// Default theme\nbody {\n // General styles\n --newtab-background-color: #{$grey-10};\n --newtab-border-primary-color: #{$grey-40};\n --newtab-border-secondary-color: #{$grey-30};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: inherit;\n --newtab-element-active-color: #{$grey-30-60};\n --newtab-element-hover-color: #{$grey-20};\n --newtab-icon-primary-color: #{$grey-90-80};\n --newtab-icon-secondary-color: #{$grey-90-60};\n --newtab-icon-tertiary-color: #{$grey-30};\n --newtab-inner-box-shadow-color: #{$black-10};\n --newtab-link-primary-color: #{$blue-60};\n --newtab-link-secondary-color: #{$teal-70};\n --newtab-text-conditional-color: #{$grey-60};\n --newtab-text-primary-color: #{$grey-90};\n --newtab-text-secondary-color: #{$grey-50};\n --newtab-textbox-background-color: #{$white};\n --newtab-textbox-border: #{$grey-90-20};\n @include textbox-focus($blue-60); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-10};\n --newtab-contextmenu-button-color: #{$white};\n\n // Modal + overlay\n --newtab-modal-color: #{$white};\n --newtab-overlay-color: #{$grey-20-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-50};\n --newtab-section-navigation-text-color: #{$grey-50};\n --newtab-section-active-contextmenu-color: #{$grey-90};\n\n // Search\n --newtab-search-border-color: transparent;\n --newtab-search-dropdown-color: #{$white};\n --newtab-search-dropdown-header-color: #{$grey-10};\n --newtab-search-header-background-color: #{$grey-10-95};\n --newtab-search-icon-color: #{$grey-90-40};\n --newtab-search-wordmark-color: #{$firefox-wordmark-default-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$white};\n --newtab-topsites-icon-shadow: inset #{$inner-box-shadow};\n --newtab-topsites-label-color: inherit;\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-30};\n --newtab-card-background-color: #{$white};\n --newtab-card-hairline-color: #{$black-10};\n --newtab-card-placeholder-color: #{$grey-30};\n --newtab-card-shadow: 0 1px 4px 0 #{$grey-90-10};\n\n // Snippets\n --newtab-snippets-background-color: #{$white};\n --newtab-snippets-hairline-color: transparent;\n\n &[lwt-newtab-brighttext]:not(.force-light-theme) {\n // General styles\n --newtab-background-color: #{$grey-80};\n --newtab-border-primary-color: #{$grey-10-80};\n --newtab-border-secondary-color: #{$grey-10-10};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: #{$grey-70};\n --newtab-element-active-color: #{$grey-10-20};\n --newtab-element-hover-color: #{$grey-10-10};\n --newtab-icon-primary-color: #{$grey-10-80};\n --newtab-icon-secondary-color: #{$grey-10-40};\n --newtab-icon-tertiary-color: #{$grey-10-40};\n --newtab-inner-box-shadow-color: #{$grey-10-20};\n --newtab-link-primary-color: #{$blue-40};\n --newtab-link-secondary-color: #{$pocket-teal};\n --newtab-text-conditional-color: #{$grey-10};\n --newtab-text-primary-color: #{$grey-10};\n --newtab-text-secondary-color: #{$grey-10-80};\n --newtab-textbox-background-color: #{$grey-70};\n --newtab-textbox-border: #{$grey-10-20};\n @include textbox-focus($blue-40); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-60};\n --newtab-contextmenu-button-color: #{$grey-80};\n\n // Modal + overlay\n --newtab-modal-color: #{$grey-80};\n --newtab-overlay-color: #{$grey-90-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-10-80};\n --newtab-section-navigation-text-color: #{$grey-10-80};\n --newtab-section-active-contextmenu-color: #{$white};\n\n // Search\n --newtab-search-border-color: #{$grey-10-20};\n --newtab-search-dropdown-color: #{$grey-70};\n --newtab-search-dropdown-header-color: #{$grey-60};\n --newtab-search-header-background-color: #{$grey-80-95};\n --newtab-search-icon-color: #{$grey-10-60};\n --newtab-search-wordmark-color: #{$firefox-wordmark-darktheme-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$grey-70};\n --newtab-topsites-icon-shadow: none;\n --newtab-topsites-label-color: #{$grey-10-80};\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-60};\n --newtab-card-background-color: #{$grey-70};\n --newtab-card-hairline-color: #{$grey-10-10};\n --newtab-card-placeholder-color: #{$grey-60};\n --newtab-card-shadow: 0 1px 8px 0 #{$grey-90-20};\n\n // Snippets\n --newtab-snippets-background-color: #{$grey-70};\n --newtab-snippets-hairline-color: #{$white-10};\n }\n}\n",
@@ -65,6 +67,7 @@
".pocket-logged-in-cta {\n $max-button-width: 130px;\n $min-button-height: 18px;\n font-size: 13px;\n margin-inline-end: 20px;\n display: flex;\n align-items: flex-start;\n\n .pocket-cta-button {\n white-space: nowrap;\n background: $blue-60;\n letter-spacing: -0.34px;\n color: $white;\n border-radius: 4px;\n cursor: pointer;\n max-width: $max-button-width;\n // The button height is 2px taller than the rest of the cta text.\n // So I move it up by 1px to align with the rest of the cta text.\n margin-top: -1px;\n min-height: $min-button-height;\n padding: 0 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 11px;\n margin-inline-end: 10px;\n }\n\n .cta-text {\n font-weight: normal;\n font-size: 13px;\n line-height: 1.230769231; // (16 / 13) –> 16px computed\n }\n\n .pocket-cta-button,\n .cta-text {\n vertical-align: top;\n }\n}\n",
".more-recommendations {\n display: flex;\n align-items: center;\n white-space: nowrap;\n line-height: 1.230769231; // (16 / 13) -> 16px computed\n\n &::after {\n background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n content: '';\n -moz-context-properties: fill;\n display: inline-block;\n fill: var(--newtab-link-secondary-color);\n height: 16px;\n margin-inline-start: 5px;\n vertical-align: top;\n width: 12px;\n }\n\n &:dir(rtl)::after {\n transform: scaleX(-1);\n }\n}\n",
".discovery-stream.ds-layout {\n $columns: 12;\n --gridColumnGap: 48px;\n --gridRowGap: 24px;\n display: grid;\n grid-template-columns: repeat($columns, 1fr);\n grid-column-gap: var(--gridColumnGap);\n grid-row-gap: var(--gridRowGap);\n width: 936px;\n margin: 0 auto;\n\n @while $columns > 0 {\n .ds-column-#{$columns} {\n grid-column-start: auto;\n grid-column-end: span $columns;\n }\n\n $columns: $columns - 1;\n }\n\n .ds-column-grid {\n display: grid;\n grid-row-gap: var(--gridRowGap);\n }\n}\n\n.ds-header {\n font-size: 17px;\n font-weight: 600;\n line-height: 24px;\n color: $grey-90;\n margin: 16px 0;\n}\n",
+ ".ds-message-container {\n display: none;\n color: $grey-50;\n font-size: 13px;\n justify-content: center;\n margin: 0 auto 40px;\n width: 936px;\n\n p {\n margin: 0;\n align-self: center;\n line-height: 20px;\n display: flex;\n }\n\n .icon {\n align-self: center;\n fill: var(--newtab-icon-secondary-color);\n margin-inline-end: 6px;\n width: 20px;\n height: 20px;\n }\n\n .ds-message-actions {\n align-self: center;\n border: 0;\n padding: 0;\n\n button {\n height: 24px;\n margin: 0;\n margin-inline-start: 20px;\n padding: 0 20px;\n\n &.dismiss {\n padding: 0;\n }\n }\n }\n}\n\n.force-light-theme {\n &[lwt-newtab-brighttext] {\n .ds-message-container {\n display: flex;\n }\n }\n}\n",
"$col4-header-line-height: 20;\n$col4-header-font-size: 13;\n\n.ds-card-grid {\n display: grid;\n grid-gap: 24px;\n\n .ds-card {\n background: $white;\n border-radius: 4px;\n }\n\n &.ds-card-grid-border {\n .ds-card {\n box-shadow: var(--newtab-card-shadow);\n\n &:hover {\n box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);\n transition: box-shadow 150ms;\n outline: none;\n }\n\n .img-wrapper .img {\n border-radius: 4px 4px 0 0;\n }\n }\n }\n\n &.ds-card-grid-no-border {\n .ds-card {\n background: none;\n\n .meta {\n padding: 16px 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n grid-template-columns: repeat(2, 1fr);\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n grid-template-columns: repeat(4, 1fr);\n\n .meta .title {\n @include limit-visibile-lines(2, $col4-header-line-height, $col4-header-font-size);\n }\n\n &.ds-card-grid-divisible-by-3 {\n grid-template-columns: repeat(3, 1fr);\n\n .title {\n font-size: 17px;\n line-height: 24px;\n }\n }\n }\n}\n",
"$card-header-in-hero-font-size: 13;\n$card-header-in-hero-line-height: 20;\n\n.ds-hero {\n .img {\n @include image-as-background;\n }\n\n header {\n font-weight: 600;\n }\n\n p {\n line-height: 1.538;\n }\n\n .ds-list {\n border-top: 0;\n padding-top: 0;\n }\n\n .ds-card {\n border: 0;\n\n &:hover {\n border: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n .meta {\n padding: 0;\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $card-header-in-hero-line-height, $card-header-in-hero-font-size);\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n\n // \"1/3 width layout\" (aka \"Mobile First\")\n .wrapper {\n color: $grey-50;\n display: block;\n margin: 16px 0 24px;\n padding: 24px 0;\n border-top: $border-secondary;\n border-bottom: $border-secondary;\n\n @at-root .ds-hero-no-border .wrapper {\n border-top: 0;\n border-bottom: 0;\n padding: 0;\n }\n\n &:hover .meta header {\n color: $blue-60;\n }\n\n &:active .meta header {\n color: $blue-70;\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n header {\n font-size: 22px;\n color: $grey-90;\n }\n\n p {\n font-size: 13px;\n\n &.context {\n color: $teal-70;\n }\n }\n\n .source {\n margin-bottom: 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n .wrapper {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n\n .img-wrapper {\n margin: 0;\n grid-column: 2;\n grid-row: 1;\n }\n\n .meta {\n grid-column: 1;\n grid-row: 1;\n }\n\n .img {\n height: 0;\n padding-top: 100%; // 1:1 aspect ratio\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n }\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n .wrapper {\n display: flex;\n align-items: flex-start;\n flex-direction: row-reverse;\n\n .img-wrapper {\n width: 67%;\n margin: 0;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n width: 33%;\n padding: 0 24px 0 0;\n\n header {\n font-size: 22px;\n }\n\n p {\n font-size: 15px;\n line-height: 1.6;\n }\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-column-gap: 24px;\n }\n }\n}\n",
".ds-hr {\n border: 0;\n height: 0;\n border-top: $border-secondary;\n}\n",
@@ -73,6 +76,7 @@
".ds-section-title {\n text-align: center;\n\n .title {\n line-height: 48px;\n font-size: 36px;\n font-weight: 300;\n color: $grey-90;\n }\n\n .subtitle {\n line-height: 24px;\n font-size: 15px;\n color: $grey-50;\n margin-top: 4px;\n }\n}\n",
"// ds topsites wraps the original topsites, with a few css changes.\n.ds-top-sites {\n\n .ds-header-title {\n vertical-align: middle;\n }\n\n // This is the override layer.\n .top-sites {\n // Slightly different alignment with the other DS components than AS has.\n padding: 0;\n\n // We hide this and don't support it in ds.\n .section-top-bar {\n display: none;\n }\n\n .top-site-outer {\n padding: 0 12px;\n }\n\n .top-sites-list {\n margin: 0 -12px;\n }\n }\n\n // Only show 6 cards for 2/3 and 1/3\n // XXX hide-for-narrow is wrapping a previous functionality, can do better.\n .hide-for-narrow {\n display: none;\n }\n}\n\n// Only show 8 cards for the full row.\n// XXX hide-for-narrow is wrapping a previous functionality, can do better.\n.ds-column-9,\n.ds-column-10,\n.ds-column-11,\n.ds-column-12 {\n .ds-top-sites {\n .hide-for-narrow {\n display: inline-block;\n }\n }\n}\n\n// Size overrides for topsites in the 2/3 view.\n.ds-column-5,\n.ds-column-6,\n.ds-column-7,\n.ds-column-8 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 10px;\n }\n\n .top-sites-list {\n margin: 0 -10px;\n }\n\n .top-site-inner {\n --leftPanelIconWidth: 84.67px;\n\n .tile {\n width: var(--leftPanelIconWidth);\n height: var(--leftPanelIconWidth);\n }\n\n .title {\n width: var(--leftPanelIconWidth);\n }\n }\n }\n}\n\n// Size overrides for topsites in the 1/3 view.\n.ds-column-1,\n.ds-column-2,\n.ds-column-3,\n.ds-column-4 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 8px;\n }\n\n .top-sites-list {\n margin: 0 -8px;\n }\n\n .top-site-inner {\n --rightPanelIconWidth: 82.67px;\n\n .tile {\n width: var(--rightPanelIconWidth);\n height: var(--rightPanelIconWidth);\n }\n\n .title {\n width: var(--rightPanelIconWidth);\n }\n }\n }\n}\n",
"// Type sizes\n$header-font-size: 17;\n$header-line-height: 24;\n$excerpt-font-size: 13;\n$excerpt-line-height: 20;\n\n.ds-card {\n display: flex;\n flex-direction: column;\n\n &:hover {\n header {\n color: $blue-60;\n }\n }\n\n &:active {\n header {\n color: $blue-70;\n }\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n @include image-as-background;\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding: 16px;\n\n .info-wrap {\n flex-grow: 1;\n }\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $header-line-height, $header-font-size);\n font-weight: 600;\n }\n\n .excerpt {\n // show only 4 lines of copy\n @include limit-visibile-lines(4, $excerpt-line-height, $excerpt-font-size);\n }\n }\n\n header {\n line-height: $header-line-height * 1px;\n font-size: $header-font-size * 1px;\n color: $grey-90;\n\n }\n\n p {\n font-size: $excerpt-font-size * 1px;\n line-height: $excerpt-line-height * 1px;\n color: $grey-50;\n margin: 8px 0 0;\n }\n\n .context {\n color: $teal-70;\n }\n}\n",
+ ".ds-message {\n margin: 8px 0 0;\n\n .title {\n display: flex;\n align-items: center;\n\n img {\n width: 16px;\n height: 16px;\n margin: 0 6px 0 0;\n }\n\n span {\n line-height: 24px;\n font-size: 17px;\n color: $grey-90;\n font-weight: 600;\n }\n }\n\n .subtitle {\n line-height: 20px;\n font-size: 14px;\n color: $grey-50;\n margin: 0;\n\n span::after {\n content: ' ';\n }\n\n a:hover,\n a:focus {\n text-decoration: underline;\n }\n }\n\n .ds-hr {\n margin: 16px 0 8px;\n }\n}\n",
".ASRouterButton {\n font-weight: 600;\n font-size: 14px;\n white-space: nowrap;\n border-radius: 2px;\n border: 0;\n font-family: inherit;\n padding: 8px 15px;\n margin-inline-start: 12px;\n color: inherit;\n cursor: pointer;\n\n .tall & {\n margin-inline-start: 20px;\n }\n\n &.primary {\n border: 1px solid var(--newtab-button-primary-color);\n background-color: var(--newtab-button-primary-color);\n color: $grey-10;\n\n &:hover {\n background-color: $blue-70;\n }\n\n &:active {\n background-color: $blue-80;\n }\n }\n\n &.secondary {\n background-color: $grey-90-10;\n\n &:hover {\n background-color: $grey-90-20;\n }\n\n &:active {\n background-color: $grey-90-30;\n }\n }\n}\n\n[lwt-newtab-brighttext]:not(.force-light-theme) {\n .secondary {\n background-color: $grey-10-10;\n\n &:hover {\n background-color: $grey-10-20;\n }\n\n &:active {\n background-color: $grey-10-30;\n }\n }\n\n // Snippets scene 2 footer\n .footer {\n .secondary {\n background-color: $grey-10-30;\n\n &:hover {\n background-color: $grey-10-40;\n }\n\n &:active {\n background-color: $grey-10-50;\n }\n }\n }\n}\n",
".SnippetBaseContainer {\n position: fixed;\n // Make sure ASR snippets show on top of legacy snippets\n // This can happen when ASR preview is used with legacy snippets\n z-index: 2;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--newtab-snippets-background-color);\n color: var(--newtab-text-primary-color);\n font-size: 14px;\n line-height: 20px;\n border-top: 1px solid var(--newtab-snippets-hairline-color);\n box-shadow: $shadow-secondary;\n display: flex;\n align-items: center;\n\n a {\n cursor: pointer;\n color: var(--newtab-link-primary-color);\n\n &:hover {\n text-decoration: underline;\n }\n\n [lwt-newtab-brighttext]:not(.force-light-theme) & {\n font-weight: bold;\n }\n }\n\n input {\n &[type='checkbox'] {\n margin-inline-start: 0;\n }\n }\n\n .innerWrapper {\n margin: 0 auto;\n display: flex;\n align-items: center;\n padding: 12px $section-horizontal-padding;\n\n // This is to account for the block button on smaller screens\n padding-inline-end: 36px;\n @media (min-width: $break-point-large) {\n padding-inline-end: $section-horizontal-padding;\n }\n\n max-width: $wrapper-max-width-large + ($section-horizontal-padding * 2);\n @media (min-width: $break-point-widest) {\n max-width: $wrapper-max-width-widest + ($section-horizontal-padding * 2);\n }\n }\n\n .blockButton {\n display: none;\n background: none;\n border: 0;\n position: absolute;\n top: 50%;\n inset-inline-end: 12px;\n height: 16px;\n width: 16px;\n background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n -moz-context-properties: fill;\n fill: var(--newtab-icon-primary-color);\n opacity: 0.5;\n margin-top: -8px;\n padding: 0;\n cursor: pointer;\n\n @media (min-width: 766px) {\n inset-inline-end: 24px;\n }\n }\n\n &:hover .blockButton {\n display: block;\n }\n\n .icon {\n height: 42px;\n width: 42px;\n margin-inline-end: 12px;\n flex-shrink: 0;\n }\n}\n\n.snippets-preview-banner {\n font-size: 15px;\n line-height: 42px;\n color: $grey-60-70;\n background: $grey-30-60;\n text-align: center;\n position: absolute;\n top: 0;\n width: 100%;\n\n span {\n vertical-align: middle;\n }\n}\n",
".activity-stream {\n &.modal-open {\n overflow: hidden;\n }\n}\n\n.modalOverlayOuter {\n background: $white;\n opacity: 0.93;\n height: 100%;\n position: fixed;\n top: 0;\n width: 100%;\n display: none;\n z-index: 1100;\n\n &.active {\n display: block;\n }\n}\n\n.modalOverlayInner {\n width: 960px;\n height: 570px;\n position: fixed;\n top: calc(50% - 285px); // halfway down minus half the height of the modal\n left: calc(50% - 480px); // halfway across minus half the width of the modal\n background: $white;\n box-shadow: 0 1px 15px 0 $black-30;\n border-radius: 4px;\n display: none;\n z-index: 1101;\n\n\n // modal takes over entire screen\n @media(max-width: 960px) {\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n // if modal is short enough, add a vertical scroll bar\n @media(max-width: 850px) and (max-height: 730px) {\n overflow-y: scroll;\n }\n\n // if modal is narrow enough, add a vertical scroll bar\n @media(max-width: 650px) and (max-height: 600px) {\n overflow-y: scroll;\n }\n\n &.active {\n display: block;\n }\n\n h2 {\n color: $grey-60;\n text-align: center;\n font-weight: 200;\n margin-top: 30px;\n font-size: 28px;\n line-height: 37px;\n letter-spacing: -0.13px;\n\n @media(max-width: 960px) {\n margin-top: 100px;\n }\n\n @media(max-width: 850px) {\n margin-top: 30px;\n }\n }\n\n .footer {\n border-top: 1px solid $grey-30;\n height: 70px;\n width: 100%;\n position: absolute;\n bottom: 0;\n text-align: center;\n background-color: $white;\n\n // if modal is short enough, footer becomes sticky\n @media(max-width: 850px) and (max-height: 730px) {\n position: sticky;\n }\n\n // if modal is narrow enough, footer becomes sticky\n @media(max-width: 650px) and (max-height: 600px) {\n position: sticky;\n }\n\n .modalButton {\n margin-top: 20px;\n min-width: 150px;\n height: 30px;\n padding: 4px 30px 6px;\n font-size: 15px;\n\n &:focus,\n &.active,\n &:hover {\n box-shadow: 0 0 0 5px $grey-30;\n transition: box-shadow 150ms;\n }\n }\n }\n}\n",
@@ -84,5 +88,5 @@
".activity-stream {\n &.welcome {\n overflow: hidden;\n }\n\n &:not(.welcome) {\n .overlay-wrapper {\n display: none;\n }\n }\n}\n\n.overlay-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 21000;\n transition: opacity 0.4s;\n opacity: 0;\n overflow-x: auto;\n\n &.show {\n transition: none;\n opacity: 1;\n\n .firstrun-sign-in {\n transition: opacity 1.5s, transform 1.5s;\n transition-delay: 0.2s;\n transform: translateY(-50%) scale(1);\n opacity: 1;\n\n @media screen and (max-width: 790px) {\n float: none;\n margin: auto;\n top: 190px;\n margin-bottom: 100px;\n }\n }\n\n .firstrun-firefox-logo {\n transition: opacity 2.3s;\n opacity: 1;\n }\n\n .firstrun-title,\n .firstrun-content,\n .firstrun-link {\n transition: transform 0.5s, opacity 0.8s;\n transform: translateY(0);\n opacity: 1;\n }\n\n .firstrun-title {\n transition-delay: 0.2s;\n }\n\n .firstrun-content {\n transition-delay: 0.4s;\n }\n\n .firstrun-link {\n transition-delay: 0.6s;\n }\n\n .fxaccounts-container {\n transition: none;\n opacity: 1;\n }\n }\n}\n\n.background,\n.fxa + body.hide-main { // sass-lint:disable-line no-qualifying-elements\n width: 100%;\n height: 100%;\n display: block;\n background-image: url('#{$image-path}fox-tail.png'), $about-welcome-gradient;\n background-position-x: center;\n background-position-y: -200px, top;\n background-repeat: no-repeat;\n background-size: cover;\n position: fixed;\n}\n\n.firstrun-sign-in {\n transform: translateY(-50%) scale(0.8);\n position: relative;\n top: 50%;\n width: 358px;\n opacity: 0;\n background-color: $white;\n float: inline-end;\n color: $grey-90;\n text-align: center;\n padding: 10px;\n\n form {\n position: relative;\n }\n\n .extra-links {\n font-size: 12px;\n max-width: 340px;\n margin: 17px 50px;\n color: $about-welcome-extra-links;\n cursor: default;\n\n a {\n color: $grey-50;\n cursor: pointer;\n text-decoration: underline;\n }\n\n a:hover,\n a:active,\n a:focus {\n color: $blue-50;\n }\n }\n\n .email-input {\n box-shadow: none;\n margin: auto;\n width: 244px;\n display: block;\n height: 40px;\n padding-inline-start: 20px;\n border: 1px solid $grey-50;\n border-radius: 2px;\n font-size: 16px;\n transition: border-color 150ms, box-shadow 150ms;\n\n &:hover {\n border-color: $grey-90;\n }\n\n &:focus {\n border-color: $blue-50;\n box-shadow: 0 0 0 3px $email-input-focus;\n }\n\n &.invalid {\n border-color: $red-60;\n }\n\n &.invalid:focus {\n box-shadow: 0 0 0 3px $email-input-invalid;\n }\n }\n\n .form-header {\n font-size: 22px;\n margin: 15px auto;\n }\n\n .form-header .sub-header {\n font-size: 14px;\n margin-top: 4px;\n display: block;\n }\n\n button {\n display: block;\n cursor: pointer;\n margin: 10px auto 0;\n }\n\n .continue-button {\n font-size: 18px;\n height: 43px;\n width: 250px;\n padding: 8px 0;\n border: 0;\n border-radius: 4px;\n color: $white;\n background-color: $blue-60;\n transition: background-color 150ms;\n\n &:not([disabled]):active,\n &:not([disabled]):hover {\n background: $blue-70;\n border-color: $blue-80;\n }\n }\n\n .skip-button {\n font-size: 13px;\n margin-top: 20px;\n margin-bottom: 20px;\n background-color: $grey-10;\n color: $blue-50;\n border: 1px solid $blue-50;\n border-radius: 2px;\n min-height: 24px;\n padding: 5px 10px;\n transition: background-color 150ms, color 150ms, border-color 150ms;\n\n &[disabled] {\n background-color: $grey-20;\n border-color: $grey-40;\n color: $grey-50;\n cursor: default;\n opacity: 0.5;\n }\n\n &:not([disabled]):hover {\n background-color: $blue-50;\n border-color: $blue-60;\n color: $white;\n }\n }\n}\n\n.firstrun-left-divider {\n position: relative;\n float: inline-start;\n clear: both;\n width: 435px;\n\n @media screen and (max-width: 825px) {\n width: 400px;\n }\n\n @media screen and (max-width: 790px) {\n margin: auto;\n float: none;\n width: 352px;\n text-align: center;\n }\n}\n\n.firstrun-content {\n line-height: 1.5;\n margin-bottom: 48px;\n max-width: 352px;\n background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n padding-bottom: 210px;\n}\n\na.firstrun-link { // sass-lint:disable-line no-qualifying-elements\n color: $white;\n display: block;\n text-decoration: underline;\n\n &:hover,\n &:active,\n &:focus {\n color: $white;\n }\n}\n\n.firstrun-title {\n background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n background-size: 90px 90px;\n margin: 40px 0 10px;\n padding-top: 110px;\n\n @media screen and (max-width: 790px) {\n background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n background-size: 90px 90px;\n }\n\n &:dir(rtl) {\n background-position: top right;\n }\n}\n\n.fxaccounts-container {\n position: absolute;\n bottom: 0;\n right: 0;\n top: 0;\n left: 0;\n color: $white;\n height: 515px;\n margin: auto;\n width: 819px;\n z-index: 10;\n transition: opacity 0.3s;\n opacity: 0;\n\n @media screen and (max-width: 825px) {\n width: 784px;\n }\n\n @media screen and (max-width: 790px) {\n width: auto;\n height: 100%;\n }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n opacity: 0;\n transform: translateY(-5px);\n}\n\n.error {\n display: none;\n}\n\n.error.active {\n display: block;\n padding: 5px 12px;\n animation: fade-down 450ms;\n font-size: 12px;\n font-weight: 500;\n color: $white;\n background-color: $red-60;\n position: absolute;\n inset-inline-start: 50px;\n top: -28px;\n border-radius: 2px;\n\n &::before {\n inset-inline-start: 12px;\n background: $red-60;\n bottom: -8px;\n content: '.';\n height: 16px;\n position: absolute;\n text-indent: -999px;\n transform: rotate(45deg);\n white-space: nowrap;\n width: 16px;\n z-index: -1;\n }\n}\n\n@keyframes fade-down {\n 0% {\n opacity: 0;\n transform: translateY(-15px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n"
],
"names": [],
- "mappings": "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"
+ "mappings": "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"
}
\ No newline at end of file
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-windows.css firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-windows.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-windows.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-windows.css 2019-02-07 12:50:25.000000000 +0000
@@ -1831,6 +1831,39 @@
color: #0C0C0D;
margin: 16px 0; }
+.ds-message-container {
+ display: none;
+ color: #737373;
+ font-size: 13px;
+ justify-content: center;
+ margin: 0 auto 40px;
+ width: 936px; }
+ .ds-message-container p {
+ margin: 0;
+ align-self: center;
+ line-height: 20px;
+ display: flex; }
+ .ds-message-container .icon {
+ align-self: center;
+ fill: var(--newtab-icon-secondary-color);
+ margin-inline-end: 6px;
+ width: 20px;
+ height: 20px; }
+ .ds-message-container .ds-message-actions {
+ align-self: center;
+ border: 0;
+ padding: 0; }
+ .ds-message-container .ds-message-actions button {
+ height: 24px;
+ margin: 0;
+ margin-inline-start: 20px;
+ padding: 0 20px; }
+ .ds-message-container .ds-message-actions button.dismiss {
+ padding: 0; }
+
+.force-light-theme[lwt-newtab-brighttext] .ds-message-container {
+ display: flex; }
+
.ds-card-grid {
display: grid;
grid-gap: 24px; }
@@ -2339,6 +2372,33 @@
.ds-card .context {
color: #008EA4; }
+.ds-message {
+ margin: 8px 0 0; }
+ .ds-message .title {
+ display: flex;
+ align-items: center; }
+ .ds-message .title img {
+ width: 16px;
+ height: 16px;
+ margin: 0 6px 0 0; }
+ .ds-message .title span {
+ line-height: 24px;
+ font-size: 17px;
+ color: #0C0C0D;
+ font-weight: 600; }
+ .ds-message .subtitle {
+ line-height: 20px;
+ font-size: 14px;
+ color: #737373;
+ margin: 0; }
+ .ds-message .subtitle span::after {
+ content: ' '; }
+ .ds-message .subtitle a:hover,
+ .ds-message .subtitle a:focus {
+ text-decoration: underline; }
+ .ds-message .ds-hr {
+ margin: 16px 0 8px; }
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-windows.css.map firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-windows.css.map
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/css/activity-stream-windows.css.map 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/css/activity-stream-windows.css.map 2019-02-07 12:50:25.000000000 +0000
@@ -24,6 +24,7 @@
"../content-src/components/PocketLoggedInCta/_PocketLoggedInCta.scss",
"../content-src/components/MoreRecommendations/_MoreRecommendations.scss",
"../content-src/components/DiscoveryStreamBase/_DiscoveryStreamBase.scss",
+ "../content-src/components/DarkModeMessage/_DarkModeMessage.scss",
"../content-src/components/DiscoveryStreamComponents/CardGrid/_CardGrid.scss",
"../content-src/components/DiscoveryStreamComponents/Hero/_Hero.scss",
"../content-src/components/DiscoveryStreamComponents/HorizontalRule/_HorizontalRule.scss",
@@ -32,6 +33,7 @@
"../content-src/components/DiscoveryStreamComponents/SectionTitle/_SectionTitle.scss",
"../content-src/components/DiscoveryStreamComponents/TopSites/_TopSites.scss",
"../content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss",
+ "../content-src/components/DiscoveryStreamComponents/DSMessage/_DSMessage.scss",
"../content-src/asrouter/components/Button/_Button.scss",
"../content-src/asrouter/components/SnippetBase/_SnippetBase.scss",
"../content-src/asrouter/components/ModalOverlay/_ModalOverlay.scss",
@@ -44,7 +46,7 @@
],
"sourcesContent": [
"/* This is the windows variant */ // sass-lint:disable-line no-css-comments\n\n$os-infopanel-arrow-height: 10px;\n$os-infopanel-arrow-offset-end: 6px;\n$os-infopanel-arrow-width: 20px;\n\n@import './activity-stream';\n",
- "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
+ "@import './normalize';\n@import './variables';\n@import './theme';\n@import './icons';\n@import './mixins';\n\nhtml {\n height: 100%;\n}\n\nbody,\n#root { // sass-lint:disable-line no-ids\n min-height: 100vh;\n}\n\nbody {\n background-color: var(--newtab-background-color);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Ubuntu', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n overflow-y: scroll;\n}\n\nh1,\nh2 {\n font-weight: normal;\n}\n\na {\n text-decoration: none;\n}\n\n// For screen readers\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.inner-border {\n border: $border-secondary;\n border-radius: $border-radius;\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 100;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.show-on-init {\n opacity: 0;\n transition: opacity 0.2s ease-in;\n\n &.on {\n animation: fadeIn 0.2s;\n opacity: 1;\n }\n}\n\n.actions {\n border-top: $border-secondary;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin: 0;\n padding: 15px 25px 0;\n}\n\n// Default button (grey)\n.button,\n.actions button {\n background-color: var(--newtab-button-secondary-color);\n border: $border-primary;\n border-radius: 4px;\n color: inherit;\n cursor: pointer;\n margin-bottom: 15px;\n padding: 10px 30px;\n white-space: nowrap;\n\n &:hover:not(.dismiss) {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n }\n\n &.dismiss {\n background-color: transparent;\n border: 0;\n padding: 0;\n text-decoration: underline;\n }\n\n // Blue button\n &.primary,\n &.done {\n background-color: var(--newtab-button-primary-color);\n border: solid 1px var(--newtab-button-primary-color);\n color: $white;\n margin-inline-start: auto;\n }\n}\n\ninput {\n &[type='text'],\n &[type='search'] {\n border-radius: $border-radius;\n }\n}\n\n// Make sure snippets show up above other UI elements\n#snippets-container { // sass-lint:disable-line no-ids\n z-index: 1;\n}\n\n// Components\n@import '../components/Base/Base';\n@import '../components/ErrorBoundary/ErrorBoundary';\n@import '../components/TopSites/TopSites';\n@import '../components/Sections/Sections';\n@import '../components/Topics/Topics';\n@import '../components/Search/Search';\n@import '../components/ContextMenu/ContextMenu';\n@import '../components/ConfirmDialog/ConfirmDialog';\n@import '../components/Card/Card';\n@import '../components/ManualMigration/ManualMigration';\n@import '../components/CollapsibleSection/CollapsibleSection';\n@import '../components/ASRouterAdmin/ASRouterAdmin';\n@import '../components/PocketLoggedInCta/PocketLoggedInCta';\n@import '../components/MoreRecommendations/MoreRecommendations';\n@import '../components/DiscoveryStreamBase/DiscoveryStreamBase';\n@import '../components/DarkModeMessage/DarkModeMessage';\n\n// Discovery Stream Components\n@import '../components/DiscoveryStreamComponents/CardGrid/CardGrid';\n@import '../components/DiscoveryStreamComponents/Hero/Hero';\n@import '../components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule';\n@import '../components/DiscoveryStreamComponents/List/List';\n@import '../components/DiscoveryStreamComponents/Navigation/Navigation';\n@import '../components/DiscoveryStreamComponents/SectionTitle/SectionTitle';\n@import '../components/DiscoveryStreamComponents/TopSites/TopSites';\n@import '../components/DiscoveryStreamComponents/DSCard/DSCard';\n@import '../components/DiscoveryStreamComponents/DSMessage/DSMessage';\n\n// AS Router\n@import '../asrouter/components/Button/Button';\n@import '../asrouter/components/SnippetBase/SnippetBase';\n@import '../asrouter/components/ModalOverlay/ModalOverlay';\n@import '../asrouter/templates/ReturnToAMO/ReturnToAMO';\n@import '../asrouter/templates/SimpleSnippet/SimpleSnippet';\n@import '../asrouter/templates/SubmitFormSnippet/SubmitFormSnippet';\n@import '../asrouter/templates/OnboardingMessage/OnboardingMessage';\n@import '../asrouter/templates/EOYSnippet/EOYSnippet';\n@import '../asrouter/templates/StartupOverlay/StartupOverlay';\n",
"html {\n box-sizing: border-box;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n*::-moz-focus-inner {\n border: 0;\n}\n\nbody {\n margin: 0;\n}\n\nbutton,\ninput {\n background-color: inherit;\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n}\n\n[hidden] {\n display: none !important; // sass-lint:disable-line no-important\n}\n",
"// Photon colors from http://design.firefox.com/photon/visuals/color.html\n$blue-40: #45A1FF;\n$blue-50: #0A84FF;\n$blue-60: #0060DF;\n$blue-70: #003EAA;\n$blue-80: #002275;\n$grey-10: #F9F9FA;\n$grey-20: #EDEDF0;\n$grey-30: #D7D7DB;\n$grey-40: #B1B1B3;\n$grey-50: #737373;\n$grey-60: #4A4A4F;\n$grey-70: #38383D;\n$grey-80: #2A2A2E;\n$grey-90: #0C0C0D;\n$teal-70: #008EA4;\n$red-60: #D70022;\n$yellow-50: #FFE900;\n\n// Photon opacity from http://design.firefox.com/photon/visuals/color.html#opacity\n$grey-10-10: rgba($grey-10, 0.1);\n$grey-10-20: rgba($grey-10, 0.2);\n$grey-10-30: rgba($grey-10, 0.3);\n$grey-10-40: rgba($grey-10, 0.4);\n$grey-10-50: rgba($grey-10, 0.5);\n$grey-10-60: rgba($grey-10, 0.6);\n$grey-10-80: rgba($grey-10, 0.8);\n$grey-10-95: rgba($grey-10, 0.95);\n$grey-20-60: rgba($grey-20, 0.6);\n$grey-20-80: rgba($grey-20, 0.8);\n$grey-30-60: rgba($grey-30, 0.6);\n$grey-60-60: rgba($grey-60, 0.6);\n$grey-60-70: rgba($grey-60, 0.7);\n$grey-80-95: rgba($grey-80, 0.95);\n$grey-90-10: rgba($grey-90, 0.1);\n$grey-90-20: rgba($grey-90, 0.2);\n$grey-90-30: rgba($grey-90, 0.3);\n$grey-90-40: rgba($grey-90, 0.4);\n$grey-90-50: rgba($grey-90, 0.5);\n$grey-90-60: rgba($grey-90, 0.6);\n$grey-90-70: rgba($grey-90, 0.7);\n$grey-90-80: rgba($grey-90, 0.8);\n$grey-90-90: rgba($grey-90, 0.9);\n\n$black: #000;\n$black-5: rgba($black, 0.05);\n$black-10: rgba($black, 0.1);\n$black-12: rgba($black, 0.12);\n$black-15: rgba($black, 0.15);\n$black-20: rgba($black, 0.2);\n$black-25: rgba($black, 0.25);\n$black-30: rgba($black, 0.3);\n\n// Other colors\n$white: #FFF;\n$white-10: rgba($white, 0.1);\n$pocket-teal: #50BCB6;\n$pocket-red: #EF4056;\n$bookmark-icon-fill: #0A84FF;\n$download-icon-fill: #12BC00;\n$pocket-icon-fill: #D70022;\n$email-input-focus: rgba($blue-50, 0.3);\n$email-input-invalid: rgba($red-60, 0.3);\n$aw-extra-blue-1: #004EC2;\n$aw-extra-blue-2: #0080FF;\n$aw-extra-blue-3: #00C7FF;\n$about-welcome-gradient: linear-gradient(to bottom, $blue-70 40%, $aw-extra-blue-1 60%, $blue-60 80%, $aw-extra-blue-2 90%, $aw-extra-blue-3 100%);\n$about-welcome-extra-links: #676F7E;\n$firefox-wordmark-default-color: #363959;\n$firefox-wordmark-darktheme-color: $white;\n\n// Photon transitions from http://design.firefox.com/photon/motion/duration-and-easing.html\n$photon-easing: cubic-bezier(0.07, 0.95, 0, 1);\n\n$border-radius: 3px;\n\n// Grid related styles\n$base-gutter: 32px;\n$section-horizontal-padding: 25px;\n$section-vertical-padding: 10px;\n$section-spacing: 40px - $section-vertical-padding * 2;\n$grid-unit: 96px; // 1 top site\n\n$icon-size: 16px;\n$smaller-icon-size: 12px;\n$larger-icon-size: 32px;\n\n$searchbar-width-small: $grid-unit * 2 + $base-gutter * 1;\n$searchbar-width-medium: $grid-unit * 4 + $base-gutter * 3;\n$searchbar-width-large: $grid-unit * 6 + $base-gutter * 5;\n\n$wrapper-default-width: $grid-unit * 2 + $base-gutter * 1 + $section-horizontal-padding * 2; // 2 top sites\n$wrapper-max-width-medium: $grid-unit * 4 + $base-gutter * 3 + $section-horizontal-padding * 2; // 4 top sites\n$wrapper-max-width-large: $grid-unit * 6 + $base-gutter * 5 + $section-horizontal-padding * 2; // 6 top sites\n$wrapper-max-width-widest: $grid-unit * 8 + $base-gutter * 7 + $section-horizontal-padding * 2; // 8 top sites\n// For the breakpoints, we need to add space for the scrollbar to avoid weird\n// layout issues when the scrollbar is visible. 16px is wide enough to cover all\n// OSes and keeps it simpler than a per-OS value.\n$scrollbar-width: 16px;\n\n// Breakpoints\n$break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width;\n$break-point-large: $wrapper-max-width-large + $base-gutter * 2 + $scrollbar-width;\n$break-point-widest: $wrapper-max-width-widest + $base-gutter * 2 + $scrollbar-width;\n\n$section-title-font-size: 13px;\n\n$card-width: $grid-unit * 2 + $base-gutter;\n$card-height: 266px;\n$card-preview-image-height: 122px;\n$card-title-margin: 2px;\n$card-text-line-height: 19px;\n// Larger cards for wider screens:\n$card-width-large: 309px;\n$card-height-large: 370px;\n$card-preview-image-height-large: 155px;\n// Compact cards for Highlights\n$card-height-compact: 160px;\n$card-preview-image-height-compact: 108px;\n\n$topic-margin-top: 12px;\n\n$context-menu-button-size: 27px;\n$context-menu-button-boxshadow: 0 2px $grey-90-10;\n$context-menu-shadow: 0 5px 10px $black-30, 0 0 0 1px $black-20;\n$context-menu-font-size: 14px;\n$context-menu-border-radius: 5px;\n$context-menu-outer-padding: 5px;\n$context-menu-item-padding: 3px 12px;\n\n$error-fallback-font-size: 12px;\n$error-fallback-line-height: 1.5;\n\n$image-path: '../data/content/assets/';\n\n$snippets-container-height: 120px;\n\n$textbox-shadow-size: 4px;\n\n@mixin fade-in {\n box-shadow: inset $inner-box-shadow, $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin fade-in-card {\n box-shadow: $shadow-primary;\n transition: box-shadow 150ms;\n}\n\n@mixin context-menu-button {\n .context-menu-button {\n background-clip: padding-box;\n background-color: var(--newtab-contextmenu-button-color);\n background-image: url('chrome://browser/skin/page-action.svg');\n background-position: 55%;\n border: $border-primary;\n border-radius: 100%;\n box-shadow: $context-menu-button-boxshadow;\n cursor: pointer;\n fill: var(--newtab-icon-primary-color);\n height: $context-menu-button-size;\n inset-inline-end: -($context-menu-button-size / 2);\n opacity: 0;\n position: absolute;\n top: -($context-menu-button-size / 2);\n transform: scale(0.25);\n transition-duration: 150ms;\n transition-property: transform, opacity;\n width: $context-menu-button-size;\n\n &:-moz-any(:active, :focus) {\n opacity: 1;\n transform: scale(1);\n }\n }\n}\n\n@mixin context-menu-button-hover {\n .context-menu-button {\n opacity: 1;\n transform: scale(1);\n transition-delay: 333ms;\n }\n}\n\n@mixin context-menu-open-middle {\n .context-menu {\n margin-inline-end: auto;\n margin-inline-start: auto;\n inset-inline-end: auto;\n inset-inline-start: -$base-gutter;\n }\n}\n\n@mixin context-menu-open-left {\n .context-menu {\n margin-inline-end: 5px;\n margin-inline-start: auto;\n inset-inline-end: 0;\n inset-inline-start: auto;\n }\n}\n\n@mixin flip-icon {\n &:dir(rtl) {\n transform: scaleX(-1);\n }\n}\n",
"@function textbox-shadow($color) {\n @return 0 0 0 1px $color, 0 0 0 $textbox-shadow-size rgba($color, 0.3);\n}\n\n@mixin textbox-focus($color) {\n --newtab-textbox-focus-color: #{$color};\n --newtab-textbox-focus-boxshadow: #{textbox-shadow($color)};\n}\n\n// scss variables related to the theme.\n$border-primary: 1px solid var(--newtab-border-primary-color);\n$border-secondary: 1px solid var(--newtab-border-secondary-color);\n$inner-box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);\n$input-border: 1px solid var(--newtab-textbox-border);\n$input-border-active: 1px solid var(--newtab-textbox-focus-color);\n$input-error-border: 1px solid $red-60;\n$input-error-boxshadow: textbox-shadow($red-60);\n$shadow-primary: 0 0 0 5px var(--newtab-card-active-outline-color);\n$shadow-secondary: 0 1px 4px 0 $grey-90-20;\n\n// Default theme\nbody {\n // General styles\n --newtab-background-color: #{$grey-10};\n --newtab-border-primary-color: #{$grey-40};\n --newtab-border-secondary-color: #{$grey-30};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: inherit;\n --newtab-element-active-color: #{$grey-30-60};\n --newtab-element-hover-color: #{$grey-20};\n --newtab-icon-primary-color: #{$grey-90-80};\n --newtab-icon-secondary-color: #{$grey-90-60};\n --newtab-icon-tertiary-color: #{$grey-30};\n --newtab-inner-box-shadow-color: #{$black-10};\n --newtab-link-primary-color: #{$blue-60};\n --newtab-link-secondary-color: #{$teal-70};\n --newtab-text-conditional-color: #{$grey-60};\n --newtab-text-primary-color: #{$grey-90};\n --newtab-text-secondary-color: #{$grey-50};\n --newtab-textbox-background-color: #{$white};\n --newtab-textbox-border: #{$grey-90-20};\n @include textbox-focus($blue-60); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-10};\n --newtab-contextmenu-button-color: #{$white};\n\n // Modal + overlay\n --newtab-modal-color: #{$white};\n --newtab-overlay-color: #{$grey-20-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-50};\n --newtab-section-navigation-text-color: #{$grey-50};\n --newtab-section-active-contextmenu-color: #{$grey-90};\n\n // Search\n --newtab-search-border-color: transparent;\n --newtab-search-dropdown-color: #{$white};\n --newtab-search-dropdown-header-color: #{$grey-10};\n --newtab-search-header-background-color: #{$grey-10-95};\n --newtab-search-icon-color: #{$grey-90-40};\n --newtab-search-wordmark-color: #{$firefox-wordmark-default-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$white};\n --newtab-topsites-icon-shadow: inset #{$inner-box-shadow};\n --newtab-topsites-label-color: inherit;\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-30};\n --newtab-card-background-color: #{$white};\n --newtab-card-hairline-color: #{$black-10};\n --newtab-card-placeholder-color: #{$grey-30};\n --newtab-card-shadow: 0 1px 4px 0 #{$grey-90-10};\n\n // Snippets\n --newtab-snippets-background-color: #{$white};\n --newtab-snippets-hairline-color: transparent;\n\n &[lwt-newtab-brighttext]:not(.force-light-theme) {\n // General styles\n --newtab-background-color: #{$grey-80};\n --newtab-border-primary-color: #{$grey-10-80};\n --newtab-border-secondary-color: #{$grey-10-10};\n --newtab-button-primary-color: #{$blue-60};\n --newtab-button-secondary-color: #{$grey-70};\n --newtab-element-active-color: #{$grey-10-20};\n --newtab-element-hover-color: #{$grey-10-10};\n --newtab-icon-primary-color: #{$grey-10-80};\n --newtab-icon-secondary-color: #{$grey-10-40};\n --newtab-icon-tertiary-color: #{$grey-10-40};\n --newtab-inner-box-shadow-color: #{$grey-10-20};\n --newtab-link-primary-color: #{$blue-40};\n --newtab-link-secondary-color: #{$pocket-teal};\n --newtab-text-conditional-color: #{$grey-10};\n --newtab-text-primary-color: #{$grey-10};\n --newtab-text-secondary-color: #{$grey-10-80};\n --newtab-textbox-background-color: #{$grey-70};\n --newtab-textbox-border: #{$grey-10-20};\n @include textbox-focus($blue-40); // sass-lint:disable-line mixins-before-declarations\n\n // Context menu\n --newtab-contextmenu-background-color: #{$grey-60};\n --newtab-contextmenu-button-color: #{$grey-80};\n\n // Modal + overlay\n --newtab-modal-color: #{$grey-80};\n --newtab-overlay-color: #{$grey-90-80};\n\n // Sections\n --newtab-section-header-text-color: #{$grey-10-80};\n --newtab-section-navigation-text-color: #{$grey-10-80};\n --newtab-section-active-contextmenu-color: #{$white};\n\n // Search\n --newtab-search-border-color: #{$grey-10-20};\n --newtab-search-dropdown-color: #{$grey-70};\n --newtab-search-dropdown-header-color: #{$grey-60};\n --newtab-search-header-background-color: #{$grey-80-95};\n --newtab-search-icon-color: #{$grey-10-60};\n --newtab-search-wordmark-color: #{$firefox-wordmark-darktheme-color};\n\n // Top Sites\n --newtab-topsites-background-color: #{$grey-70};\n --newtab-topsites-icon-shadow: none;\n --newtab-topsites-label-color: #{$grey-10-80};\n\n // Cards\n --newtab-card-active-outline-color: #{$grey-60};\n --newtab-card-background-color: #{$grey-70};\n --newtab-card-hairline-color: #{$grey-10-10};\n --newtab-card-placeholder-color: #{$grey-60};\n --newtab-card-shadow: 0 1px 8px 0 #{$grey-90-20};\n\n // Snippets\n --newtab-snippets-background-color: #{$grey-70};\n --newtab-snippets-hairline-color: #{$white-10};\n }\n}\n",
@@ -65,6 +67,7 @@
".pocket-logged-in-cta {\n $max-button-width: 130px;\n $min-button-height: 18px;\n font-size: 13px;\n margin-inline-end: 20px;\n display: flex;\n align-items: flex-start;\n\n .pocket-cta-button {\n white-space: nowrap;\n background: $blue-60;\n letter-spacing: -0.34px;\n color: $white;\n border-radius: 4px;\n cursor: pointer;\n max-width: $max-button-width;\n // The button height is 2px taller than the rest of the cta text.\n // So I move it up by 1px to align with the rest of the cta text.\n margin-top: -1px;\n min-height: $min-button-height;\n padding: 0 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 11px;\n margin-inline-end: 10px;\n }\n\n .cta-text {\n font-weight: normal;\n font-size: 13px;\n line-height: 1.230769231; // (16 / 13) –> 16px computed\n }\n\n .pocket-cta-button,\n .cta-text {\n vertical-align: top;\n }\n}\n",
".more-recommendations {\n display: flex;\n align-items: center;\n white-space: nowrap;\n line-height: 1.230769231; // (16 / 13) -> 16px computed\n\n &::after {\n background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n content: '';\n -moz-context-properties: fill;\n display: inline-block;\n fill: var(--newtab-link-secondary-color);\n height: 16px;\n margin-inline-start: 5px;\n vertical-align: top;\n width: 12px;\n }\n\n &:dir(rtl)::after {\n transform: scaleX(-1);\n }\n}\n",
".discovery-stream.ds-layout {\n $columns: 12;\n --gridColumnGap: 48px;\n --gridRowGap: 24px;\n display: grid;\n grid-template-columns: repeat($columns, 1fr);\n grid-column-gap: var(--gridColumnGap);\n grid-row-gap: var(--gridRowGap);\n width: 936px;\n margin: 0 auto;\n\n @while $columns > 0 {\n .ds-column-#{$columns} {\n grid-column-start: auto;\n grid-column-end: span $columns;\n }\n\n $columns: $columns - 1;\n }\n\n .ds-column-grid {\n display: grid;\n grid-row-gap: var(--gridRowGap);\n }\n}\n\n.ds-header {\n font-size: 17px;\n font-weight: 600;\n line-height: 24px;\n color: $grey-90;\n margin: 16px 0;\n}\n",
+ ".ds-message-container {\n display: none;\n color: $grey-50;\n font-size: 13px;\n justify-content: center;\n margin: 0 auto 40px;\n width: 936px;\n\n p {\n margin: 0;\n align-self: center;\n line-height: 20px;\n display: flex;\n }\n\n .icon {\n align-self: center;\n fill: var(--newtab-icon-secondary-color);\n margin-inline-end: 6px;\n width: 20px;\n height: 20px;\n }\n\n .ds-message-actions {\n align-self: center;\n border: 0;\n padding: 0;\n\n button {\n height: 24px;\n margin: 0;\n margin-inline-start: 20px;\n padding: 0 20px;\n\n &.dismiss {\n padding: 0;\n }\n }\n }\n}\n\n.force-light-theme {\n &[lwt-newtab-brighttext] {\n .ds-message-container {\n display: flex;\n }\n }\n}\n",
"$col4-header-line-height: 20;\n$col4-header-font-size: 13;\n\n.ds-card-grid {\n display: grid;\n grid-gap: 24px;\n\n .ds-card {\n background: $white;\n border-radius: 4px;\n }\n\n &.ds-card-grid-border {\n .ds-card {\n box-shadow: var(--newtab-card-shadow);\n\n &:hover {\n box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);\n transition: box-shadow 150ms;\n outline: none;\n }\n\n .img-wrapper .img {\n border-radius: 4px 4px 0 0;\n }\n }\n }\n\n &.ds-card-grid-no-border {\n .ds-card {\n background: none;\n\n .meta {\n padding: 16px 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n grid-template-columns: repeat(2, 1fr);\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n grid-template-columns: repeat(4, 1fr);\n\n .meta .title {\n @include limit-visibile-lines(2, $col4-header-line-height, $col4-header-font-size);\n }\n\n &.ds-card-grid-divisible-by-3 {\n grid-template-columns: repeat(3, 1fr);\n\n .title {\n font-size: 17px;\n line-height: 24px;\n }\n }\n }\n}\n",
"$card-header-in-hero-font-size: 13;\n$card-header-in-hero-line-height: 20;\n\n.ds-hero {\n .img {\n @include image-as-background;\n }\n\n header {\n font-weight: 600;\n }\n\n p {\n line-height: 1.538;\n }\n\n .ds-list {\n border-top: 0;\n padding-top: 0;\n }\n\n .ds-card {\n border: 0;\n\n &:hover {\n border: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n .meta {\n padding: 0;\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $card-header-in-hero-line-height, $card-header-in-hero-font-size);\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n }\n\n .img-wrapper {\n margin: 0 0 12px;\n }\n\n // \"1/3 width layout\" (aka \"Mobile First\")\n .wrapper {\n color: $grey-50;\n display: block;\n margin: 16px 0 24px;\n padding: 24px 0;\n border-top: $border-secondary;\n border-bottom: $border-secondary;\n\n @at-root .ds-hero-no-border .wrapper {\n border-top: 0;\n border-bottom: 0;\n padding: 0;\n }\n\n &:hover .meta header {\n color: $blue-60;\n }\n\n &:active .meta header {\n color: $blue-70;\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n header {\n font-size: 22px;\n color: $grey-90;\n }\n\n p {\n font-size: 13px;\n\n &.context {\n color: $teal-70;\n }\n }\n\n .source {\n margin-bottom: 0;\n }\n }\n }\n\n // \"2/3 width layout\"\n .ds-column-5 &,\n .ds-column-6 &,\n .ds-column-7 &,\n .ds-column-8 & {\n .wrapper {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n\n .img-wrapper {\n margin: 0;\n grid-column: 2;\n grid-row: 1;\n }\n\n .meta {\n grid-column: 1;\n grid-row: 1;\n }\n\n .img {\n height: 0;\n padding-top: 100%; // 1:1 aspect ratio\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-column-gap: 24px;\n }\n }\n\n // \"Full width layout\"\n .ds-column-9 &,\n .ds-column-10 &,\n .ds-column-11 &,\n .ds-column-12 & {\n .wrapper {\n display: flex;\n align-items: flex-start;\n flex-direction: row-reverse;\n\n .img-wrapper {\n width: 67%;\n margin: 0;\n }\n\n .img {\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n width: 33%;\n padding: 0 24px 0 0;\n\n header {\n font-size: 22px;\n }\n\n p {\n font-size: 15px;\n line-height: 1.6;\n }\n }\n }\n\n .cards {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-column-gap: 24px;\n }\n }\n}\n",
".ds-hr {\n border: 0;\n height: 0;\n border-top: $border-secondary;\n}\n",
@@ -73,6 +76,7 @@
".ds-section-title {\n text-align: center;\n\n .title {\n line-height: 48px;\n font-size: 36px;\n font-weight: 300;\n color: $grey-90;\n }\n\n .subtitle {\n line-height: 24px;\n font-size: 15px;\n color: $grey-50;\n margin-top: 4px;\n }\n}\n",
"// ds topsites wraps the original topsites, with a few css changes.\n.ds-top-sites {\n\n .ds-header-title {\n vertical-align: middle;\n }\n\n // This is the override layer.\n .top-sites {\n // Slightly different alignment with the other DS components than AS has.\n padding: 0;\n\n // We hide this and don't support it in ds.\n .section-top-bar {\n display: none;\n }\n\n .top-site-outer {\n padding: 0 12px;\n }\n\n .top-sites-list {\n margin: 0 -12px;\n }\n }\n\n // Only show 6 cards for 2/3 and 1/3\n // XXX hide-for-narrow is wrapping a previous functionality, can do better.\n .hide-for-narrow {\n display: none;\n }\n}\n\n// Only show 8 cards for the full row.\n// XXX hide-for-narrow is wrapping a previous functionality, can do better.\n.ds-column-9,\n.ds-column-10,\n.ds-column-11,\n.ds-column-12 {\n .ds-top-sites {\n .hide-for-narrow {\n display: inline-block;\n }\n }\n}\n\n// Size overrides for topsites in the 2/3 view.\n.ds-column-5,\n.ds-column-6,\n.ds-column-7,\n.ds-column-8 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 10px;\n }\n\n .top-sites-list {\n margin: 0 -10px;\n }\n\n .top-site-inner {\n --leftPanelIconWidth: 84.67px;\n\n .tile {\n width: var(--leftPanelIconWidth);\n height: var(--leftPanelIconWidth);\n }\n\n .title {\n width: var(--leftPanelIconWidth);\n }\n }\n }\n}\n\n// Size overrides for topsites in the 1/3 view.\n.ds-column-1,\n.ds-column-2,\n.ds-column-3,\n.ds-column-4 {\n .ds-top-sites {\n\n .top-site-outer {\n padding: 0 8px;\n }\n\n .top-sites-list {\n margin: 0 -8px;\n }\n\n .top-site-inner {\n --rightPanelIconWidth: 82.67px;\n\n .tile {\n width: var(--rightPanelIconWidth);\n height: var(--rightPanelIconWidth);\n }\n\n .title {\n width: var(--rightPanelIconWidth);\n }\n }\n }\n}\n",
"// Type sizes\n$header-font-size: 17;\n$header-line-height: 24;\n$excerpt-font-size: 13;\n$excerpt-line-height: 20;\n\n.ds-card {\n display: flex;\n flex-direction: column;\n\n &:hover {\n header {\n color: $blue-60;\n }\n }\n\n &:active {\n header {\n color: $blue-70;\n }\n }\n\n .img-wrapper {\n width: 100%;\n }\n\n .img {\n @include image-as-background;\n height: 0;\n padding-top: 50%; // 2:1 aspect ratio\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n padding: 16px;\n\n .info-wrap {\n flex-grow: 1;\n }\n\n .title {\n // show only 2 lines of copy\n @include limit-visibile-lines(2, $header-line-height, $header-font-size);\n font-weight: 600;\n }\n\n .excerpt {\n // show only 4 lines of copy\n @include limit-visibile-lines(4, $excerpt-line-height, $excerpt-font-size);\n }\n }\n\n header {\n line-height: $header-line-height * 1px;\n font-size: $header-font-size * 1px;\n color: $grey-90;\n\n }\n\n p {\n font-size: $excerpt-font-size * 1px;\n line-height: $excerpt-line-height * 1px;\n color: $grey-50;\n margin: 8px 0 0;\n }\n\n .context {\n color: $teal-70;\n }\n}\n",
+ ".ds-message {\n margin: 8px 0 0;\n\n .title {\n display: flex;\n align-items: center;\n\n img {\n width: 16px;\n height: 16px;\n margin: 0 6px 0 0;\n }\n\n span {\n line-height: 24px;\n font-size: 17px;\n color: $grey-90;\n font-weight: 600;\n }\n }\n\n .subtitle {\n line-height: 20px;\n font-size: 14px;\n color: $grey-50;\n margin: 0;\n\n span::after {\n content: ' ';\n }\n\n a:hover,\n a:focus {\n text-decoration: underline;\n }\n }\n\n .ds-hr {\n margin: 16px 0 8px;\n }\n}\n",
".ASRouterButton {\n font-weight: 600;\n font-size: 14px;\n white-space: nowrap;\n border-radius: 2px;\n border: 0;\n font-family: inherit;\n padding: 8px 15px;\n margin-inline-start: 12px;\n color: inherit;\n cursor: pointer;\n\n .tall & {\n margin-inline-start: 20px;\n }\n\n &.primary {\n border: 1px solid var(--newtab-button-primary-color);\n background-color: var(--newtab-button-primary-color);\n color: $grey-10;\n\n &:hover {\n background-color: $blue-70;\n }\n\n &:active {\n background-color: $blue-80;\n }\n }\n\n &.secondary {\n background-color: $grey-90-10;\n\n &:hover {\n background-color: $grey-90-20;\n }\n\n &:active {\n background-color: $grey-90-30;\n }\n }\n}\n\n[lwt-newtab-brighttext]:not(.force-light-theme) {\n .secondary {\n background-color: $grey-10-10;\n\n &:hover {\n background-color: $grey-10-20;\n }\n\n &:active {\n background-color: $grey-10-30;\n }\n }\n\n // Snippets scene 2 footer\n .footer {\n .secondary {\n background-color: $grey-10-30;\n\n &:hover {\n background-color: $grey-10-40;\n }\n\n &:active {\n background-color: $grey-10-50;\n }\n }\n }\n}\n",
".SnippetBaseContainer {\n position: fixed;\n // Make sure ASR snippets show on top of legacy snippets\n // This can happen when ASR preview is used with legacy snippets\n z-index: 2;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--newtab-snippets-background-color);\n color: var(--newtab-text-primary-color);\n font-size: 14px;\n line-height: 20px;\n border-top: 1px solid var(--newtab-snippets-hairline-color);\n box-shadow: $shadow-secondary;\n display: flex;\n align-items: center;\n\n a {\n cursor: pointer;\n color: var(--newtab-link-primary-color);\n\n &:hover {\n text-decoration: underline;\n }\n\n [lwt-newtab-brighttext]:not(.force-light-theme) & {\n font-weight: bold;\n }\n }\n\n input {\n &[type='checkbox'] {\n margin-inline-start: 0;\n }\n }\n\n .innerWrapper {\n margin: 0 auto;\n display: flex;\n align-items: center;\n padding: 12px $section-horizontal-padding;\n\n // This is to account for the block button on smaller screens\n padding-inline-end: 36px;\n @media (min-width: $break-point-large) {\n padding-inline-end: $section-horizontal-padding;\n }\n\n max-width: $wrapper-max-width-large + ($section-horizontal-padding * 2);\n @media (min-width: $break-point-widest) {\n max-width: $wrapper-max-width-widest + ($section-horizontal-padding * 2);\n }\n }\n\n .blockButton {\n display: none;\n background: none;\n border: 0;\n position: absolute;\n top: 50%;\n inset-inline-end: 12px;\n height: 16px;\n width: 16px;\n background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n -moz-context-properties: fill;\n fill: var(--newtab-icon-primary-color);\n opacity: 0.5;\n margin-top: -8px;\n padding: 0;\n cursor: pointer;\n\n @media (min-width: 766px) {\n inset-inline-end: 24px;\n }\n }\n\n &:hover .blockButton {\n display: block;\n }\n\n .icon {\n height: 42px;\n width: 42px;\n margin-inline-end: 12px;\n flex-shrink: 0;\n }\n}\n\n.snippets-preview-banner {\n font-size: 15px;\n line-height: 42px;\n color: $grey-60-70;\n background: $grey-30-60;\n text-align: center;\n position: absolute;\n top: 0;\n width: 100%;\n\n span {\n vertical-align: middle;\n }\n}\n",
".activity-stream {\n &.modal-open {\n overflow: hidden;\n }\n}\n\n.modalOverlayOuter {\n background: $white;\n opacity: 0.93;\n height: 100%;\n position: fixed;\n top: 0;\n width: 100%;\n display: none;\n z-index: 1100;\n\n &.active {\n display: block;\n }\n}\n\n.modalOverlayInner {\n width: 960px;\n height: 570px;\n position: fixed;\n top: calc(50% - 285px); // halfway down minus half the height of the modal\n left: calc(50% - 480px); // halfway across minus half the width of the modal\n background: $white;\n box-shadow: 0 1px 15px 0 $black-30;\n border-radius: 4px;\n display: none;\n z-index: 1101;\n\n\n // modal takes over entire screen\n @media(max-width: 960px) {\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n box-shadow: none;\n border-radius: 0;\n }\n\n // if modal is short enough, add a vertical scroll bar\n @media(max-width: 850px) and (max-height: 730px) {\n overflow-y: scroll;\n }\n\n // if modal is narrow enough, add a vertical scroll bar\n @media(max-width: 650px) and (max-height: 600px) {\n overflow-y: scroll;\n }\n\n &.active {\n display: block;\n }\n\n h2 {\n color: $grey-60;\n text-align: center;\n font-weight: 200;\n margin-top: 30px;\n font-size: 28px;\n line-height: 37px;\n letter-spacing: -0.13px;\n\n @media(max-width: 960px) {\n margin-top: 100px;\n }\n\n @media(max-width: 850px) {\n margin-top: 30px;\n }\n }\n\n .footer {\n border-top: 1px solid $grey-30;\n height: 70px;\n width: 100%;\n position: absolute;\n bottom: 0;\n text-align: center;\n background-color: $white;\n\n // if modal is short enough, footer becomes sticky\n @media(max-width: 850px) and (max-height: 730px) {\n position: sticky;\n }\n\n // if modal is narrow enough, footer becomes sticky\n @media(max-width: 650px) and (max-height: 600px) {\n position: sticky;\n }\n\n .modalButton {\n margin-top: 20px;\n min-width: 150px;\n height: 30px;\n padding: 4px 30px 6px;\n font-size: 15px;\n\n &:focus,\n &.active,\n &:hover {\n box-shadow: 0 0 0 5px $grey-30;\n transition: box-shadow 150ms;\n }\n }\n }\n}\n",
@@ -84,5 +88,5 @@
".activity-stream {\n &.welcome {\n overflow: hidden;\n }\n\n &:not(.welcome) {\n .overlay-wrapper {\n display: none;\n }\n }\n}\n\n.overlay-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: 21000;\n transition: opacity 0.4s;\n opacity: 0;\n overflow-x: auto;\n\n &.show {\n transition: none;\n opacity: 1;\n\n .firstrun-sign-in {\n transition: opacity 1.5s, transform 1.5s;\n transition-delay: 0.2s;\n transform: translateY(-50%) scale(1);\n opacity: 1;\n\n @media screen and (max-width: 790px) {\n float: none;\n margin: auto;\n top: 190px;\n margin-bottom: 100px;\n }\n }\n\n .firstrun-firefox-logo {\n transition: opacity 2.3s;\n opacity: 1;\n }\n\n .firstrun-title,\n .firstrun-content,\n .firstrun-link {\n transition: transform 0.5s, opacity 0.8s;\n transform: translateY(0);\n opacity: 1;\n }\n\n .firstrun-title {\n transition-delay: 0.2s;\n }\n\n .firstrun-content {\n transition-delay: 0.4s;\n }\n\n .firstrun-link {\n transition-delay: 0.6s;\n }\n\n .fxaccounts-container {\n transition: none;\n opacity: 1;\n }\n }\n}\n\n.background,\n.fxa + body.hide-main { // sass-lint:disable-line no-qualifying-elements\n width: 100%;\n height: 100%;\n display: block;\n background-image: url('#{$image-path}fox-tail.png'), $about-welcome-gradient;\n background-position-x: center;\n background-position-y: -200px, top;\n background-repeat: no-repeat;\n background-size: cover;\n position: fixed;\n}\n\n.firstrun-sign-in {\n transform: translateY(-50%) scale(0.8);\n position: relative;\n top: 50%;\n width: 358px;\n opacity: 0;\n background-color: $white;\n float: inline-end;\n color: $grey-90;\n text-align: center;\n padding: 10px;\n\n form {\n position: relative;\n }\n\n .extra-links {\n font-size: 12px;\n max-width: 340px;\n margin: 17px 50px;\n color: $about-welcome-extra-links;\n cursor: default;\n\n a {\n color: $grey-50;\n cursor: pointer;\n text-decoration: underline;\n }\n\n a:hover,\n a:active,\n a:focus {\n color: $blue-50;\n }\n }\n\n .email-input {\n box-shadow: none;\n margin: auto;\n width: 244px;\n display: block;\n height: 40px;\n padding-inline-start: 20px;\n border: 1px solid $grey-50;\n border-radius: 2px;\n font-size: 16px;\n transition: border-color 150ms, box-shadow 150ms;\n\n &:hover {\n border-color: $grey-90;\n }\n\n &:focus {\n border-color: $blue-50;\n box-shadow: 0 0 0 3px $email-input-focus;\n }\n\n &.invalid {\n border-color: $red-60;\n }\n\n &.invalid:focus {\n box-shadow: 0 0 0 3px $email-input-invalid;\n }\n }\n\n .form-header {\n font-size: 22px;\n margin: 15px auto;\n }\n\n .form-header .sub-header {\n font-size: 14px;\n margin-top: 4px;\n display: block;\n }\n\n button {\n display: block;\n cursor: pointer;\n margin: 10px auto 0;\n }\n\n .continue-button {\n font-size: 18px;\n height: 43px;\n width: 250px;\n padding: 8px 0;\n border: 0;\n border-radius: 4px;\n color: $white;\n background-color: $blue-60;\n transition: background-color 150ms;\n\n &:not([disabled]):active,\n &:not([disabled]):hover {\n background: $blue-70;\n border-color: $blue-80;\n }\n }\n\n .skip-button {\n font-size: 13px;\n margin-top: 20px;\n margin-bottom: 20px;\n background-color: $grey-10;\n color: $blue-50;\n border: 1px solid $blue-50;\n border-radius: 2px;\n min-height: 24px;\n padding: 5px 10px;\n transition: background-color 150ms, color 150ms, border-color 150ms;\n\n &[disabled] {\n background-color: $grey-20;\n border-color: $grey-40;\n color: $grey-50;\n cursor: default;\n opacity: 0.5;\n }\n\n &:not([disabled]):hover {\n background-color: $blue-50;\n border-color: $blue-60;\n color: $white;\n }\n }\n}\n\n.firstrun-left-divider {\n position: relative;\n float: inline-start;\n clear: both;\n width: 435px;\n\n @media screen and (max-width: 825px) {\n width: 400px;\n }\n\n @media screen and (max-width: 790px) {\n margin: auto;\n float: none;\n width: 352px;\n text-align: center;\n }\n}\n\n.firstrun-content {\n line-height: 1.5;\n margin-bottom: 48px;\n max-width: 352px;\n background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n padding-bottom: 210px;\n}\n\na.firstrun-link { // sass-lint:disable-line no-qualifying-elements\n color: $white;\n display: block;\n text-decoration: underline;\n\n &:hover,\n &:active,\n &:focus {\n color: $white;\n }\n}\n\n.firstrun-title {\n background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n background-size: 90px 90px;\n margin: 40px 0 10px;\n padding-top: 110px;\n\n @media screen and (max-width: 790px) {\n background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n background-size: 90px 90px;\n }\n\n &:dir(rtl) {\n background-position: top right;\n }\n}\n\n.fxaccounts-container {\n position: absolute;\n bottom: 0;\n right: 0;\n top: 0;\n left: 0;\n color: $white;\n height: 515px;\n margin: auto;\n width: 819px;\n z-index: 10;\n transition: opacity 0.3s;\n opacity: 0;\n\n @media screen and (max-width: 825px) {\n width: 784px;\n }\n\n @media screen and (max-width: 790px) {\n width: auto;\n height: 100%;\n }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n opacity: 0;\n transform: translateY(-5px);\n}\n\n.error {\n display: none;\n}\n\n.error.active {\n display: block;\n padding: 5px 12px;\n animation: fade-down 450ms;\n font-size: 12px;\n font-weight: 500;\n color: $white;\n background-color: $red-60;\n position: absolute;\n inset-inline-start: 50px;\n top: -28px;\n border-radius: 2px;\n\n &::before {\n inset-inline-start: 12px;\n background: $red-60;\n bottom: -8px;\n content: '.';\n height: 16px;\n position: absolute;\n text-indent: -999px;\n transform: rotate(45deg);\n white-space: nowrap;\n width: 16px;\n z-index: -1;\n }\n}\n\n@keyframes fade-down {\n 0% {\n opacity: 0;\n transform: translateY(-15px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n"
],
"names": [],
- "mappings": "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"
+ "mappings": "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"
}
\ No newline at end of file
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/data/content/activity-stream.bundle.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/data/content/activity-stream.bundle.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/data/content/activity-stream.bundle.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/data/content/activity-stream.bundle.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,8 +94,8 @@
/* harmony import */ var content_src_lib_snippets__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
/* harmony import */ var content_src_asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);
/* harmony import */ var content_src_components_Base_Base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25);
-/* harmony import */ var content_src_lib_detect_user_session_start__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(52);
-/* harmony import */ var content_src_lib_asroutercontent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(53);
+/* harmony import */ var content_src_lib_detect_user_session_start__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54);
+/* harmony import */ var content_src_lib_asroutercontent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(55);
/* harmony import */ var content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_7__);
@@ -103,7 +103,7 @@
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(14);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_9__);
-/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(58);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(60);
@@ -211,7 +211,7 @@
// }
const actionTypes = {};
-for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_UPDATE", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
+for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_OPT_OUT", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_UPDATE", "DISCOVERY_STREAM_SPOC_IMPRESSION", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
actionTypes[type] = type;
}
@@ -936,14 +936,14 @@
/* harmony import */ var content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);
/* harmony import */ var _rich_text_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8);
/* harmony import */ var _components_ImpressionsWrapper_ImpressionsWrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9);
-/* harmony import */ var fluent_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(57);
+/* harmony import */ var fluent_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59);
/* harmony import */ var _templates_OnboardingMessage_OnboardingMessage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(14);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _templates_ReturnToAMO_ReturnToAMO__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(15);
-/* harmony import */ var _templates_template_manifest__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(55);
+/* harmony import */ var _templates_template_manifest__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(57);
/* harmony import */ var _templates_StartupOverlay_StartupOverlay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(23);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -1458,7 +1458,7 @@
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RICH_TEXT_KEYS", function() { return RICH_TEXT_KEYS; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateMessages", function() { return generateMessages; });
-/* harmony import */ var fluent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56);
+/* harmony import */ var fluent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(58);
/**
@@ -1854,7 +1854,7 @@
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertLinks", function() { return convertLinks; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RichText", function() { return RichText; });
-/* harmony import */ var fluent_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(57);
+/* harmony import */ var fluent_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _rich_text_strings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8);
@@ -2220,14 +2220,15 @@
/* harmony import */ var content_src_components_ConfirmDialog_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var content_src_components_DiscoveryStreamBase_DiscoveryStreamBase__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(54);
-/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(33);
-/* harmony import */ var content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(44);
-/* harmony import */ var common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(45);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(10);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
-/* harmony import */ var content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(46);
-/* harmony import */ var content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(48);
+/* harmony import */ var content_src_components_DarkModeMessage_DarkModeMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29);
+/* harmony import */ var content_src_components_DiscoveryStreamBase_DiscoveryStreamBase__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(56);
+/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(35);
+/* harmony import */ var content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(46);
+/* harmony import */ var common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(47);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(10);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_10__);
+/* harmony import */ var content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(48);
+/* harmony import */ var content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(50);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -2243,12 +2244,13 @@
+
let didLogDevtoolsHelpText = false;
-const PrefsButton = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(props => react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+const PrefsButton = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(props => react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
{ className: "prefs-button" },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement("button", { className: "icon icon-settings", onClick: props.onClick, title: props.intl.formatMessage({ id: "settings_pane_button_label" }) })
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement("button", { className: "icon icon-settings", onClick: props.onClick, title: props.intl.formatMessage({ id: "settings_pane_button_label" }) })
));
// Add the locale data for pluralization and relative-time formatting for now,
@@ -2276,7 +2278,7 @@
};
}
-class _Base extends react__WEBPACK_IMPORTED_MODULE_9___default.a.PureComponent {
+class _Base extends react__WEBPACK_IMPORTED_MODULE_10___default.a.PureComponent {
componentWillMount() {
const { locale } = this.props;
addLocaleDataForReactIntl(locale);
@@ -2319,7 +2321,7 @@
const prefs = props.Prefs.values;
if (prefs["asrouter.devtoolsEnabled"]) {
if (window.location.hash.startsWith("#asrouter") || window.location.hash.startsWith("#devtools")) {
- return react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_ASRouterAdmin_ASRouterAdmin__WEBPACK_IMPORTED_MODULE_2__["ASRouterAdmin"], null);
+ return react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_ASRouterAdmin_ASRouterAdmin__WEBPACK_IMPORTED_MODULE_2__["ASRouterAdmin"], null);
} else if (!didLogDevtoolsHelpText) {
console.log("Activity Stream devtools enabled. To access visit %cabout:newtab#devtools", "font-weight: bold"); // eslint-disable-line no-console
didLogDevtoolsHelpText = true;
@@ -2330,19 +2332,19 @@
return null;
}
- return react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ return react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
react_intl__WEBPACK_IMPORTED_MODULE_1__["IntlProvider"],
{ locale: locale, messages: strings },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
- content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__["ErrorBoundary"],
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
+ content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_7__["ErrorBoundary"],
{ className: "base-content-fallback" },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(BaseContent, this.props)
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(BaseContent, this.props)
)
);
}
}
-class BaseContent extends react__WEBPACK_IMPORTED_MODULE_9___default.a.PureComponent {
+class BaseContent extends react__WEBPACK_IMPORTED_MODULE_10___default.a.PureComponent {
constructor(props) {
super(props);
this.openPreferences = this.openPreferences.bind(this);
@@ -2387,7 +2389,7 @@
const { initialized } = App;
const prefs = props.Prefs.values;
- const shouldBeFixedToTop = common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_8__["PrerenderData"].arePrefsValid(name => prefs[name]);
+ const shouldBeFixedToTop = common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_9__["PrerenderData"].arePrefsValid(name => prefs[name]);
const noSectionsEnabled = !prefs["feeds.topsites"] && props.Sections.filter(section => section.enabled).length === 0;
const isDiscoveryStream = props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;
const searchHandoffEnabled = prefs["improvesearch.handoffToAwesomebar"];
@@ -2398,40 +2400,41 @@
const outerClassName = ["outer-wrapper", shouldBeFixedToTop && "fixed-to-top", prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && "fixed-search", prefs.showSearch && noSectionsEnabled && "only-search"].filter(v => v).join(" ");
- return react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ return react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
null,
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
{ className: outerClassName },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"main",
null,
- prefs.showSearch && react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ prefs.showSearch && react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
{ className: "non-collapsible-section" },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
- content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__["ErrorBoundary"],
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
+ content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_7__["ErrorBoundary"],
null,
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_10__["Search"], _extends({ showLogo: noSectionsEnabled, handoffEnabled: searchHandoffEnabled }, props.Search))
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_11__["Search"], _extends({ showLogo: noSectionsEnabled, handoffEnabled: searchHandoffEnabled }, props.Search))
)
),
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
{ className: `body-wrapper${initialized ? " on" : ""}` },
- !isDiscoveryStream && !prefs.migrationExpired && react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
+ !isDiscoveryStream && !prefs.migrationExpired && react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
"div",
{ className: "non-collapsible-section" },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_7__["ManualMigration"], null)
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_8__["ManualMigration"], null)
),
- isDiscoveryStream ? react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(
- content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_6__["ErrorBoundary"],
+ isDiscoveryStream ? react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(
+ content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_7__["ErrorBoundary"],
{ className: "borderless-error" },
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_DiscoveryStreamBase_DiscoveryStreamBase__WEBPACK_IMPORTED_MODULE_5__["DiscoveryStreamBase"], null)
- ) : react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_11__["Sections"], null),
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(PrefsButton, { onClick: this.openPreferences })
+ prefs.darkModeMessage && react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_DarkModeMessage_DarkModeMessage__WEBPACK_IMPORTED_MODULE_5__["DarkModeMessage"], null),
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_DiscoveryStreamBase_DiscoveryStreamBase__WEBPACK_IMPORTED_MODULE_6__["DiscoveryStreamBase"], null)
+ ) : react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_12__["Sections"], null),
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(PrefsButton, { onClick: this.openPreferences })
),
- react__WEBPACK_IMPORTED_MODULE_9___default.a.createElement(content_src_components_ConfirmDialog_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__["ConfirmDialog"], null)
+ react__WEBPACK_IMPORTED_MODULE_10___default.a.createElement(content_src_components_ConfirmDialog_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__["ConfirmDialog"], null)
)
)
);
@@ -3717,6 +3720,225 @@
"use strict";
__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_DarkModeMessage", function() { return _DarkModeMessage; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DarkModeMessage", function() { return DarkModeMessage; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
+
+
+
+
+class _DarkModeMessage extends react__WEBPACK_IMPORTED_MODULE_2___default.a.PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleSwitch = this.handleSwitch.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+
+ handleSwitch() {
+ // Switch to default new tab version
+ this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DISCOVERY_STREAM_OPT_OUT }));
+ }
+
+ handleCancel() {
+ // Capture user consent and not show dark mode message in future
+ this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].SetPref("darkModeMessage", false));
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "div",
+ { className: "ds-message-container" },
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "p",
+ null,
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("span", { className: "icon icon-info" }),
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "span",
+ null,
+ "This version of New Tab doesn not support dark mode yet."
+ )
+ ),
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "div",
+ { className: "ds-message-actions actions" },
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "button",
+ { onClick: this.handleCancel },
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "span",
+ null,
+ "Got it"
+ )
+ ),
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "button",
+ { className: "dismiss", onClick: this.handleSwitch },
+ react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(
+ "span",
+ null,
+ "Use older version"
+ )
+ )
+ )
+ );
+ }
+}
+
+const DarkModeMessage = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])()(_DarkModeMessage);
+
+/***/ }),
+/* 30 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DSCard", function() { return DSCard; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+const INTERSECTION_RATIO = 0.5;
+
+class DSCard extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+ constructor(props) {
+ super(props);
+
+ this.cardElementRef = this.cardElementRef.bind(this);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ }
+
+ componentDidMount() {
+ if (this.props.document.visibilityState === VISIBLE) {
+ this.setupIntersectionObserver();
+ } else {
+ this._onVisibilityChange = () => {
+ if (this.props.document.visibilityState === VISIBLE) {
+ this.setupIntersectionObserver();
+ this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ };
+ this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this._onVisibilityChange) {
+ this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ if (this._intersectionObserver) {
+ this._intersectionObserver.unobserve(this.cardElement);
+ }
+ }
+
+ setupIntersectionObserver() {
+ const options = { threshold: INTERSECTION_RATIO };
+ this._intersectionObserver = new IntersectionObserver(entries => {
+ for (let entry of entries) {
+ if (entry.isIntersecting && entry.intersectionRatio >= INTERSECTION_RATIO) {
+ this.dispatchSpocImpression();
+ break;
+ }
+ }
+ }, options);
+ this._intersectionObserver.observe(this.cardElement);
+ }
+
+ dispatchSpocImpression() {
+ if (this.props.campaignId) {
+ this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DISCOVERY_STREAM_SPOC_IMPRESSION, data: { campaignId: this.props.campaignId } }));
+ }
+ this._intersectionObserver.unobserve(this.cardElement);
+ }
+
+ cardElementRef(element) {
+ this.cardElement = element;
+ }
+
+ onLinkClick(event) {
+ if (this.props.dispatch) {
+ this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
+ event: "CLICK",
+ source: this.props.type.toUpperCase(),
+ action_position: this.props.index
+ }));
+
+ this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].ImpressionStats({
+ source: this.props.type.toUpperCase(),
+ click: 0,
+ tiles: [{ id: this.props.id, pos: this.props.index }]
+ }));
+ }
+ }
+
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "a",
+ { href: this.props.url, className: "ds-card", onClick: this.onLinkClick, ref: this.cardElementRef },
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "div",
+ { className: "img-wrapper" },
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "img", style: { backgroundImage: `url(${this.props.image_src}` } })
+ ),
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "div",
+ { className: "meta" },
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "div",
+ { className: "info-wrap" },
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "header",
+ { className: "title" },
+ this.props.title
+ ),
+ this.props.excerpt && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "p",
+ { className: "excerpt" },
+ this.props.excerpt
+ )
+ ),
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "p",
+ null,
+ this.props.context && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "span",
+ null,
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "span",
+ { className: "context" },
+ this.props.context
+ ),
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("br", null)
+ ),
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+ "span",
+ { className: "source" },
+ this.props.source
+ )
+ )
+ )
+ );
+ }
+}
+
+DSCard.defaultProps = {
+ document: global.document
+};
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 31 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImpressionStats", function() { return ImpressionStats; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);
@@ -3817,7 +4039,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 30 */
+/* 32 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -3825,19 +4047,19 @@
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_TopSites", function() { return _TopSites; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSites", function() { return TopSites; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31);
-/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32);
-/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(37);
+/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33);
+/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(34);
+/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(39);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
-/* harmony import */ var _SearchShortcutsForm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39);
-/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(58);
-/* harmony import */ var _TopSiteForm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(60);
-/* harmony import */ var _TopSite__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(40);
+/* harmony import */ var _SearchShortcutsForm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(41);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(60);
+/* harmony import */ var _TopSiteForm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(62);
+/* harmony import */ var _TopSite__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(42);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -4026,7 +4248,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 31 */
+/* 33 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4046,7 +4268,7 @@
const MIN_CORNER_FAVICON_SIZE = 16;
/***/ }),
-/* 32 */
+/* 34 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4056,11 +4278,11 @@
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
-/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33);
+/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var content_src_components_SectionMenu_SectionMenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(34);
-/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(36);
+/* harmony import */ var content_src_components_SectionMenu_SectionMenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36);
+/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(38);
@@ -4313,7 +4535,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 33 */
+/* 35 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4400,7 +4622,7 @@
ErrorBoundary.defaultProps = { FallbackComponent: ErrorBoundaryFallback };
/***/ }),
-/* 34 */
+/* 36 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4408,12 +4630,12 @@
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_SectionMenu", function() { return _SectionMenu; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SectionMenu", function() { return SectionMenu; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(35);
+/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(37);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36);
+/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38);
@@ -4472,7 +4694,7 @@
const SectionMenu = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(_SectionMenu);
/***/ }),
-/* 35 */
+/* 37 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4571,7 +4793,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 36 */
+/* 38 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4660,14 +4882,14 @@
};
/***/ }),
-/* 37 */
+/* 39 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentPerfTimer", function() { return ComponentPerfTimer; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38);
+/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(40);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
@@ -4834,28 +5056,29 @@
}
/***/ }),
-/* 38 */
+/* 40 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_PerfService", function() { return _PerfService; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "perfService", function() { return perfService; });
-/* globals Services */
-
-/* istanbul ignore if */
if (typeof ChromeUtils !== "undefined") {
- var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
+ // Use a var here instead of let outside to avoid creating a locally scoped
+ // variable that hides the global, which we modify for testing.
+ // eslint-disable-next-line no-var, vars-on-top
+ var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
}
let usablePerfObj;
-/* istanbul ignore if */
/* istanbul ignore else */
+// eslint-disable-next-line block-scoped-var
if (typeof Services !== "undefined") {
// Borrow the high-resolution timer from the hidden window....
+ // eslint-disable-next-line block-scoped-var
usablePerfObj = Services.appShell.hiddenDOMWindow.performance;
} else if (typeof performance !== "undefined") {
// we must be running in content space
@@ -4969,7 +5192,7 @@
var perfService = new _PerfService();
/***/ }),
-/* 39 */
+/* 41 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -4980,7 +5203,7 @@
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31);
+/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(33);
@@ -5149,7 +5372,7 @@
}
/***/ }),
-/* 40 */
+/* 42 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -5162,12 +5385,12 @@
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(31);
-/* harmony import */ var content_src_components_LinkMenu_LinkMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41);
+/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33);
+/* harmony import */ var content_src_components_LinkMenu_LinkMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43);
-/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(58);
+/* harmony import */ var content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -5692,7 +5915,7 @@
const TopSiteList = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(_TopSiteList);
/***/ }),
-/* 41 */
+/* 43 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -5702,10 +5925,10 @@
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35);
+/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(37);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var content_src_lib_link_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42);
+/* harmony import */ var content_src_lib_link_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(44);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
@@ -5766,7 +5989,7 @@
const LinkMenu = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(getState)(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(_LinkMenu));
/***/ }),
-/* 42 */
+/* 44 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -5993,7 +6216,7 @@
};
/***/ }),
-/* 43 */
+/* 45 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6050,7 +6273,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 44 */
+/* 46 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6125,7 +6348,7 @@
const ManualMigration = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])()(_ManualMigration);
/***/ }),
-/* 45 */
+/* 47 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6248,7 +6471,7 @@
});
/***/ }),
-/* 46 */
+/* 48 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6260,7 +6483,7 @@
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var content_src_lib_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(47);
+/* harmony import */ var content_src_lib_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* globals ContentSearchUIController */
@@ -6442,7 +6665,7 @@
const Search = Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])()(Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(_Search));
/***/ }),
-/* 47 */
+/* 49 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6452,7 +6675,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 48 */
+/* 50 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6462,19 +6685,19 @@
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Sections", function() { return _Sections; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sections", function() { return Sections; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var content_src_components_Card_Card__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(59);
+/* harmony import */ var content_src_components_Card_Card__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5);
/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(32);
-/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37);
+/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34);
+/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(39);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(24);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var content_src_components_MoreRecommendations_MoreRecommendations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49);
-/* harmony import */ var content_src_components_PocketLoggedInCta_PocketLoggedInCta__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(50);
+/* harmony import */ var content_src_components_MoreRecommendations_MoreRecommendations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(51);
+/* harmony import */ var content_src_components_PocketLoggedInCta_PocketLoggedInCta__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(52);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(10);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);
-/* harmony import */ var content_src_components_Topics_Topics__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(51);
-/* harmony import */ var content_src_components_TopSites_TopSites__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(30);
+/* harmony import */ var content_src_components_Topics_Topics__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(53);
+/* harmony import */ var content_src_components_TopSites_TopSites__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(32);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -6798,7 +7021,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 49 */
+/* 51 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6826,7 +7049,7 @@
}
/***/ }),
-/* 50 */
+/* 52 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6870,7 +7093,7 @@
const PocketLoggedInCta = Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(state => ({ Pocket: state.Pocket }))(_PocketLoggedInCta);
/***/ }),
-/* 51 */
+/* 53 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -6920,14 +7143,14 @@
}
/***/ }),
-/* 52 */
+/* 54 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DetectUserSessionStart", function() { return DetectUserSessionStart; });
/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38);
+/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(40);
@@ -6995,7 +7218,7 @@
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
/***/ }),
-/* 53 */
+/* 55 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -7018,93 +7241,18 @@
}
/***/ }),
-/* 54 */
+/* 56 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-// EXTERNAL MODULE: ./common/Actions.jsm
-var Actions = __webpack_require__(2);
+// EXTERNAL MODULE: ./content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
+var DSCard = __webpack_require__(30);
// EXTERNAL MODULE: external "React"
var external_React_ = __webpack_require__(10);
var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
-// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
-
-
-
-class DSCard_DSCard extends external_React_default.a.PureComponent {
- constructor(props) {
- super(props);
- this.onLinkClick = this.onLinkClick.bind(this);
- }
-
- onLinkClick(event) {
- if (this.props.dispatch) {
- this.props.dispatch(Actions["actionCreators"].UserEvent({
- event: "CLICK",
- source: this.props.type.toUpperCase(),
- action_position: this.props.index
- }));
-
- this.props.dispatch(Actions["actionCreators"].ImpressionStats({
- source: this.props.type.toUpperCase(),
- click: 0,
- tiles: [{ id: this.props.id, pos: this.props.index }]
- }));
- }
- }
-
- render() {
- return external_React_default.a.createElement(
- "a",
- { href: this.props.url, className: "ds-card", onClick: this.onLinkClick },
- external_React_default.a.createElement(
- "div",
- { className: "img-wrapper" },
- external_React_default.a.createElement("div", { className: "img", style: { backgroundImage: `url(${this.props.image_src}` } })
- ),
- external_React_default.a.createElement(
- "div",
- { className: "meta" },
- external_React_default.a.createElement(
- "div",
- { className: "info-wrap" },
- external_React_default.a.createElement(
- "header",
- { className: "title" },
- this.props.title
- ),
- this.props.excerpt && external_React_default.a.createElement(
- "p",
- { className: "excerpt" },
- this.props.excerpt
- )
- ),
- external_React_default.a.createElement(
- "p",
- null,
- this.props.context && external_React_default.a.createElement(
- "span",
- null,
- external_React_default.a.createElement(
- "span",
- { className: "context" },
- this.props.context
- ),
- external_React_default.a.createElement("br", null)
- ),
- external_React_default.a.createElement(
- "span",
- { className: "source" },
- this.props.source
- )
- )
- )
- );
- }
-}
// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx
@@ -7118,7 +7266,8 @@
return external_React_default.a.createElement("div", null);
}
- let cards = data.recommendations.slice(0, this.props.items).map((rec, index) => external_React_default.a.createElement(DSCard_DSCard, {
+ let cards = data.recommendations.slice(0, this.props.items).map((rec, index) => external_React_default.a.createElement(DSCard["DSCard"], {
+ campaignId: rec.campaign_id,
key: `dscard-${index}`,
image_src: rec.image_src,
title: rec.title,
@@ -7163,12 +7312,49 @@
// EXTERNAL MODULE: external "ReactRedux"
var external_ReactRedux_ = __webpack_require__(24);
-// CONCATENATED MODULE: ./content-src/lib/truncate-text.js
-function truncateText(text = "", cap) {
- return text.substring(0, cap).trim() + (text.length > cap ? "…" : "");
+// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx
+
+
+class DSMessage_DSMessage extends external_React_default.a.PureComponent {
+ render() {
+ let hasSubtitleAndOrLink = this.props.link_text && this.props.link_url;
+ hasSubtitleAndOrLink = hasSubtitleAndOrLink || this.props.subtitle;
+
+ return external_React_default.a.createElement(
+ "div",
+ { className: "ds-message" },
+ this.props.title && external_React_default.a.createElement(
+ "header",
+ { className: "title" },
+ this.props.icon && external_React_default.a.createElement("img", { src: this.props.icon }),
+ external_React_default.a.createElement(
+ "span",
+ null,
+ this.props.title
+ )
+ ),
+ hasSubtitleAndOrLink && external_React_default.a.createElement(
+ "p",
+ { className: "subtitle" },
+ this.props.subtitle && external_React_default.a.createElement(
+ "span",
+ null,
+ this.props.subtitle
+ ),
+ this.props.link_text && this.props.link_url && external_React_default.a.createElement(
+ "a",
+ { href: this.props.link_url },
+ this.props.link_text
+ )
+ ),
+ external_React_default.a.createElement("hr", { className: "ds-hr" })
+ );
+ }
}
-// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/List/List.jsx
+// EXTERNAL MODULE: ./common/Actions.jsm
+var Actions = __webpack_require__(2);
+// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/List/List.jsx
@@ -7218,7 +7404,7 @@
this.props.excerpt && external_React_default.a.createElement(
"div",
{ className: "ds-list-item-excerpt" },
- truncateText(this.props.excerpt, 90)
+ this.props.excerpt
),
external_React_default.a.createElement(
"div",
@@ -7288,7 +7474,6 @@
-
class Hero_Hero extends external_React_default.a.PureComponent {
constructor(props) {
super(props);
@@ -7323,17 +7508,18 @@
this.heroRec = heroRec;
// Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.
- let cards = otherRecs.map((rec, index) => external_React_default.a.createElement(DSCard_DSCard, {
+ let cards = otherRecs.map((rec, index) => external_React_default.a.createElement(DSCard["DSCard"], {
+ campaignId: rec.campaign_id,
key: `dscard-${index}`,
image_src: rec.image_src,
- title: truncateText(rec.title, 44),
+ title: rec.title,
url: rec.url,
id: rec.id,
index: index + 1,
type: this.props.type,
dispatch: this.props.dispatch,
- context: truncateText(rec.context, 22),
- source: truncateText(rec.domain, 22) }));
+ context: rec.context,
+ source: rec.domain }));
let list = external_React_default.a.createElement(List, {
recStartingPoint: 1,
@@ -7368,21 +7554,21 @@
external_React_default.a.createElement(
"header",
null,
- truncateText(heroRec.title, 28)
+ heroRec.title
),
external_React_default.a.createElement(
"p",
null,
- truncateText(heroRec.excerpt, 114)
+ heroRec.excerpt
),
heroRec.context ? external_React_default.a.createElement(
"p",
{ className: "context" },
- truncateText(heroRec.context, 22)
+ heroRec.context
) : external_React_default.a.createElement(
"p",
{ className: "source" },
- truncateText(heroRec.domain, 22)
+ heroRec.domain
)
)
),
@@ -7410,7 +7596,7 @@
}
}
// EXTERNAL MODULE: ./content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx
-var ImpressionStats = __webpack_require__(29);
+var ImpressionStats = __webpack_require__(31);
// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/Navigation/Navigation.jsx
@@ -7643,7 +7829,7 @@
}));
});
// EXTERNAL MODULE: ./content-src/components/TopSites/TopSites.jsx
-var TopSites = __webpack_require__(30);
+var TopSites = __webpack_require__(32);
// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/TopSites/TopSites.jsx
@@ -7688,15 +7874,16 @@
+
// According to the Pocket API endpoint specs, `component.properties.items` is a required property with following values:
-// - List 1-6 items
+// - List 1-12 items
// - Hero 1-5 items
-// - CardGrid 1-8 items
+// - CardGrid 1-16 items
// To enforce that, we define various maximium items for individual components as an extra check.
// Note that these values are subject to the future changes of the specs.
const MAX_ROWS_HERO = 5;
-const MAX_ROWS_LIST = 6;
-const MAX_ROWS_CARDGRID = 8;
+const MAX_ROWS_LIST = 12;
+const MAX_ROWS_CARDGRID = 16;
const ALLOWED_CSS_URL_PREFIXES = ["chrome://", "resource://", "https://img-getpocket.cdn.mozilla.net/"];
const DUMMY_CSS_SELECTOR = "DUMMY#CSS.SELECTOR";
@@ -7804,6 +7991,13 @@
switch (component.type) {
case "TopSites":
return external_React_default.a.createElement(TopSites_TopSites_TopSites, { header: component.header });
+ case "Message":
+ return external_React_default.a.createElement(DSMessage_DSMessage, {
+ title: component.header && component.header.title,
+ subtitle: component.header && component.header.subtitle,
+ link_text: component.header && component.header.link_text,
+ link_url: component.header && component.header.link_url,
+ icon: component.header && component.header.icon });
case "SectionTitle":
return external_React_default.a.createElement(SectionTitle_SectionTitle, {
header: component.header });
@@ -7912,7 +8106,7 @@
const DiscoveryStreamBase = Object(external_ReactRedux_["connect"])(transform)(DiscoveryStreamBase_DiscoveryStreamBase);
/***/ }),
-/* 55 */
+/* 57 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -8754,7 +8948,7 @@
};
/***/ }),
-/* 56 */
+/* 58 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -10855,7 +11049,7 @@
/***/ }),
-/* 57 */
+/* 59 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -10868,7 +11062,7 @@
var external_PropTypes_default = /*#__PURE__*/__webpack_require__.n(external_PropTypes_);
// EXTERNAL MODULE: ./node_modules/fluent/src/index.js + 8 modules
-var src = __webpack_require__(56);
+var src = __webpack_require__(58);
// CONCATENATED MODULE: ./node_modules/fluent-react/src/localization.js
@@ -11370,7 +11564,7 @@
/***/ }),
-/* 58 */
+/* 60 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -11935,7 +12129,7 @@
};
/***/ }),
-/* 59 */
+/* 61 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -11977,17 +12171,17 @@
var external_ReactRedux_ = __webpack_require__(24);
// EXTERNAL MODULE: ./content-src/lib/link-menu-options.js
-var link_menu_options = __webpack_require__(42);
+var link_menu_options = __webpack_require__(44);
// EXTERNAL MODULE: ./content-src/components/LinkMenu/LinkMenu.jsx
-var LinkMenu = __webpack_require__(41);
+var LinkMenu = __webpack_require__(43);
// EXTERNAL MODULE: external "React"
var external_React_ = __webpack_require__(10);
var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
// EXTERNAL MODULE: ./content-src/lib/screenshot-utils.js
-var screenshot_utils = __webpack_require__(43);
+var screenshot_utils = __webpack_require__(45);
// CONCATENATED MODULE: ./content-src/components/Card/Card.jsx
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Card", function() { return Card_Card; });
@@ -12299,7 +12493,7 @@
const PlaceholderCard = props => external_React_default.a.createElement(Card, { placeholder: true, className: props.className });
/***/ }),
-/* 60 */
+/* 62 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -12315,7 +12509,7 @@
var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
// EXTERNAL MODULE: ./content-src/components/TopSites/TopSitesConstants.js
-var TopSitesConstants = __webpack_require__(31);
+var TopSitesConstants = __webpack_require__(33);
// CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteFormInput.jsx
@@ -12393,7 +12587,7 @@
validationError: false
};
// EXTERNAL MODULE: ./content-src/components/TopSites/TopSite.jsx
-var TopSite = __webpack_require__(40);
+var TopSite = __webpack_require__(42);
// CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteForm.jsx
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSiteForm", function() { return TopSiteForm_TopSiteForm; });
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/data/content/activity-stream.bundle.js.map firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/data/content/activity-stream.bundle.js.map
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/data/content/activity-stream.bundle.js.map 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/data/content/activity-stream.bundle.js.map 2019-02-07 12:50:25.000000000 +0000
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/rich-text-strings.js","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///external \"ReactDOM\"","webpack:///./content-src/asrouter/templates/ReturnToAMO/ReturnToAMO.jsx","webpack:///./content-src/asrouter/components/RichText/RichText.jsx","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/asrouter/templates/StartupOverlay/StartupOverlay.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/Base/Base.jsx","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ASRouterAdmin/SimpleHashRouter.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///./content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/TopSites/SearchShortcutsForm.jsx","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/components/MoreRecommendations/MoreRecommendations.jsx","webpack:///./content-src/components/PocketLoggedInCta/PocketLoggedInCta.jsx","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./content-src/lib/asroutercontent.js","webpack:///./content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx","webpack:///./content-src/lib/truncate-text.js","webpack:///./content-src/components/DiscoveryStreamComponents/List/List.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/Navigation/Navigation.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/SectionTitle/SectionTitle.jsx","webpack:///./node_modules/reselect/es/index.js","webpack:///./content-src/lib/selectLayoutRender.js","webpack:///./content-src/components/DiscoveryStreamComponents/TopSites/TopSites.jsx","webpack:///./content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/components/ConditionalWrapper/ConditionalWrapper.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./content-src/asrouter/templates/EOYSnippet/EOYSnippet.jsx","webpack:///./content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.jsx","webpack:///./content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet.jsx","webpack:///./content-src/asrouter/templates/NewsletterSnippet/NewsletterSnippet.jsx","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/isEmailOrPhoneNumber.js","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/SendToDeviceSnippet.jsx","webpack:///./content-src/asrouter/templates/template-manifest.jsx","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","reducers","global","gActivityStreamPrerenderedState","asrouterContent","ASRouterContent","DetectUserSessionStart","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","enableASRouterContent","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_showRemoteSnippets","snippetsEl","elementId","innerHTML","_logIfDevtools","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","style","display","devtoolsEnabled","log","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","initializing","subscribe","state","getState","Prefs","values","ASRouter","allowLegacySnippets","disableSnippets","Snippets","hash","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASR_CONTAINER_ID","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","dismissById","dismissBundle","bundle","executeAction","button_action","unblockById","unblockBundle","overrideMessage","sendTelemetry","ping","AS_GENERAL_OUTGOING_MESSAGE_NAME","getPreviewEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","sendClick","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","metric","dataset","args","content","do_not_autoblock","onBlockById","onDismissById","triggerOnboarding","trigger","setState","body","classList","remove","componentWillMount","addLocaleData","componentWillUnmount","renderSnippets","template","SnippetComponent","SnippetsTemplates","generateMessages","renderOnboarding","renderFirstRunOverlay","add","activityStreamStore","renderPreviewBanner","render","defaultProps","containerElement","_mount","zIndex","appendChild","_activityStreamStore","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","RICH_TEXT_CONFIG","RICH_TEXT_KEYS","cx","MessageContext","attrs","attrsToTry","Array","isArray","string","length","attr","pop","addMessages","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","OnboardingCard","onClick","UISurface","onAction","primary_button","icon","title","label","OnboardingMessage","button_label","header","extraTemplateStrings","map","ModalOverlay","active","onDoneButton","ReturnToAMO","onClickAddExtension","onBlockButton","onReady","onBlock","renderText","customElement","addon_icon","secondary_button","ALLOWED_TAGS","b","i","u","strong","em","br","convertLinks","links","doNotAutoBlock","openNewWindow","reduce","acc","linkTag","safeURI","RichText","localization_id","customElements","protocol","isAllowed","warn","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","flowId","flowBeginTime","didFetch","componentWillUpdate","fxa_endpoint","fxaParams","credentials","json","setTimeout","show","previousSibling","_getFormInfo","has_flow_params","preventDefault","focus","termsLink","privacyLink","intl","formatMessage","terms","privacy","StartupOverlay","injectIntl","didLogDevtoolsHelpText","PrefsButton","addLocaleDataForReactIntl","locale","parentLocale","debounce","func","wait","timer","wakeUp","apply","_Base","isFirstrun","isPrerendered","updateTheme","bodyClassName","filter","v","join","className","App","strings","prefs","startsWith","BaseContent","openPreferences","onWindowScroll","fixedSearch","SCROLL_THRESHOLD","scrollY","SETTINGS_OPEN","disableDarkTheme","bodyClassNames","shouldBeFixedToTop","PrerenderData","arePrefsValid","noSectionsEnabled","Sections","section","enabled","isDiscoveryStream","DiscoveryStream","config","searchHandoffEnabled","outerClassName","showSearch","Search","migrationExpired","Base","Row","relativeTime","timestamp","seconds","Math","floor","minutes","toLocaleString","DiscoveryStreamAdmin","onEnableToggle","setConfigValue","DISCOVERY_STREAM_CONFIG_SET_VALUE","checked","renderComponent","width","component","feed","renderFeed","feeds","lastUpdated","layout","opacity","layout_endpoint","row","rowIndex","components","componentIndex","ASRouterAdminInner","handleEnabledToggle","handleUserPrefToggle","onChangeMessageFilter","findOtherBundledMessagesOfSameTemplate","handleExpressionEval","onChangeTargetingParameters","onChangeAttributionParameters","setAttribution","onCopyTargetingParams","onPasteTargetingParams","onNewTargetingParams","messageFilter","evaluationStatus","stringTargetingParameters","newStringTargetingParameters","copiedToClipboard","pasteFromClipboard","attributionParameters","campaign","param","targetingParameters","messages","bundled","handleBlock","blockBundle","handleUnblock","handleOverride","expireCache","resetPref","context","parse","expression","refs","expressionInput","targetingParametersError","updatedParameters","providerPrefs","find","p","userPrefInfo","userPrefs","isUserEnabled","isSystemEnabled","isEnabling","undefined","setClipboardData","clipboardData","setData","execCommand","targetingParamsEval","innerText","renderMessageItem","isCurrent","lastMessageId","isBlocked","messageBlockList","impressions","messageImpressions","itemClassName","renderMessages","messagesToShow","renderMessageFilter","providers","renderTableHead","renderProviders","providersConfig","providerInfo","isTestProvider","info","bucket","reasonsDisabled","cohort","whiteSpace","renderPasteModal","errors","renderTargetingParameters","success","errorState","inputComp","renderPocketStory","story","guid","renderPocketStories","rows","Section","renderDiscoveryStream","renderAttributionParamers","getSection","routes","_ASRouterAdmin","ASRouterAdmin","SimpleHashRouter","onHashChange","replace","split","cloneElement","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","_needsImpressionStats","cards","impressionCardGuids","_dispatchImpressionStats","toUpperCase","tiles","link","sendImpressionStatsOrAddListener","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","MIN_RICH_FAVICON_SIZE","screenshot","MIN_CORNER_FAVICON_SIZE","countTopSitesIconsTypes","topSites","countTopSitesTypes","_TopSites","onEditFormClose","onSearchShortcutsFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","site","isPinned","searchShortcuts","searchTopSite","topsites_icon_stats","topsites_pinned","topsites_search_shortcuts","sitesPerRow","TOP_SITES_MAX_SITES_PER_ROW","matchMedia","matches","TopSites","TopSitesRows","TOP_SITES_SOURCE","TOP_SITES_CANCEL_EDIT","TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL","editForm","showSearchShortcutsForm","extraMenuOptions","pref","collapsed","isFirst","isLast","index","topSitesRows","TOP_SITES_CONTEXT_MENU_OPTIONS","TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS","getFormattedMessage","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","setContextMenuButtonRef","sectionBody","scrollHeight","element","contextMenuButtonRef","node","maxHeight","_getSectionBodyHeight","userEvent","SectionMenuOptions","CheckCollapsed","div","currentTarget","renderIcon","backgroundImage","isCollapsible","learnMore","showPrefName","privacyNoticeURL","isWebExtension","bodyStyle","CollapsibleSection","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","FallbackComponent","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","getOptions","propOptions","extraOptions","splice","option","first","last","onUpdate","SectionMenu","ContextMenu","hideContext","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","disabled","Separator","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","TOP_SITES_EDIT","AddSearchShortcut","TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL","PrivacyNotice","OPEN_LINK","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","SelectableSearchShortcut","shortcut","selected","imageStyle","keyword","onChange","SearchShortcutsForm","handleChange","onCancelButtonClick","onSaveButtonClick","shortcuts","isSelected","ev","onClose","pinQueue","unpinQueue","alreadyPinned","_searchTopSite","searchVendor","shortURL","UPDATE_PINNED_SEARCH_SHORTCUTS","addedShortcuts","deletedShortcuts","search_vendor","TopSiteLink","screenshotImage","onDragEvent","onKeyPress","_allowDrop","dataTransfer","types","dragged","effectAllowed","blur","button","getNextStateFromProps","imageInState","ScreenshotUtils","isRemoteImageLocal","maybeRevokeBlobObjectURL","createLocalImageObject","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","hostname","action_position","altKey","ctrlKey","metaKey","FILL_SEARCH_TERM","onActivate","isContextMenuOpen","activeIndex","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","shift","topSitesUI","commonProps","maxNarrowVisibleIndex","l","slotProps","TopSiteList","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","isPrivateBrowsingEnabled","siteInfo","platform","isDefault","LinkMenuOptions","impression","string_id","userEventData","shouldSendImpressionStats","LinkMenu","_OpenInPrivateWindow","OPEN_PRIVATE_WINDOW","referrer","GetPlatformString","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","BLOCK_URL","open_url","pocket_id","block","pos","WebExtDismiss","WEBEXT_DISMISS","DeleteUrl","isEnabled","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","CheckBookmark","CheckPinTopSite","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","isBlob","isLocal","image","path","remoteImage","createObjectURL","localImage","revokeObjectURL","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","jsonPrefs","_isPrefEnabled","prefObj","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","isPrefModified","order","_Search","onSearchClick","onSearchHandoffClick","onSearchHandoffPaste","onSearchHandoffDrop","onInputMount","onSearchHandoffButtonMount","handleEvent","detail","gContentSearchController","search","doSearchHandoff","HANDOFF_SEARCH_TO_AWESOMEBAR","FAKE_FOCUS_SEARCH","HIDE_SEARCH","getData","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","_searchHandoffButton","wrapperClassName","hide","fakeFocus","showLogo","handoffEnabled","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","numRows","rowsPref","maxRows","cardsPerRow","compactCards","maxCards","needsImpressionStats","sendNewTabRehydrated","isCollapsed","wasCollapsed","renderNotified","NEW_TAB_REHYDRATED","Pocket","topics","emptyState","read_more_endpoint","contextMenuOptions","waitingForSpoc","maxCardsPerRow","maxCardsOnNarrow","pocketCta","isUserLoggedIn","useCta","isPocketLoggedInDefined","hasTopics","shouldShowPocketCta","shouldShowTopics","shouldShowReadMore","realRows","shouldShowEmptyState","usePlaceholder","sectionClassName","padding","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","s","MoreRecommendations","_PocketLoggedInCta","ctaUrl","ctaButton","ctaText","PocketLoggedInCta","Topic","Topics","t","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","DSCard","click","image_src","excerpt","CardGrid","recommendations","items","rec","domain","divisibility","border","truncateText","cap","substring","trim","ListItem","_List","recs","recMarkup","recStartingPoint","listStyles","fullWidth","hasBorders","hasImages","hasNumbers","List","Hero","heroRec","otherRecs","list","subComponentType","HorizontalRule","Navigation","alignment","SectionTitle","subtitle","selectLayoutRender","createSelector","spocs","layoutRender","spocIndex","maybeInjectSpocs","spocsConfig","positions","position","rickRoll","random","probability","MAX_ROWS_HERO","MAX_ROWS_LIST","MAX_ROWS_CARDGRID","ALLOWED_CSS_URL_PREFIXES","DUMMY_CSS_SELECTOR","isAllowedCSS","property","urls","match","every","prefix","_DiscoveryStreamBase","onStyleMount","extractRows","limit","min","properties","sheet","styles","selectors","declarations","insertRule","rule","cssRules","removeProperty","selectorText","selector","embedWidth","loaded","full_width","has_images","has_numbers","renderStyles","transform","DiscoveryStreamBase","ALLOWED_STYLE_TAGS","Button","tag","ConditionalWrapper","condition","wrap","SnippetBase","onBlockClicked","onDismissClicked","onDismiss","renderDismissButton","footerDismiss","scene2_dismiss_button_text","defaultTitle","schema","block_button_text","default","containerClassName","textStyle","DEFAULT_ICON_PATH","SimpleSnippet","onButtonClick","button_url","button_action_args","_shouldRenderButton","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_color","button_background_color","wrapSectionHeader","wrapSnippetContent","renderSectionHeader","section_title_icon","section_title_text","sectionTitleIcon","sectionTitleURL","section_title_url","sectionHeader","tall","extraContent","EOYSnippetBase","handleSubmit","setFrequencyValue","frequencyCheckbox","form","querySelector","submit","renderDonations","fieldNames","numberFormat","Intl","NumberFormat","navigator","language","currency","currency_code","minimumFractionDigits","selected_button","btnStyle","color","donationURLParams","paramsStartIndex","donation_form_url","entry","form_method","idx","field","button_name","amount","format","monthly_checkbox_label_text","text_color","background_color","highlight_color","test","EOYSnippet","extendedContent","SubmitFormSnippet","expandSnippet","handleSubmitAttempt","expanded","submitAttempted","signupSubmitted","signupSuccess","disableForm","preventDismiss","formData","processFormData","mainInput","FormData","fetchRequest","Request","method","renderHiddenFormInputs","hidden_inputs","renderDisclaimer","scene2_disclaimer_html","renderFormPrivacyNotice","scene2_privacy_html","renderSignupSubmitted","isSuccess","successTitle","success_title","bodyText","success_text","error_text","retryButtonText","scene1_button_label","validateInput","setCustomValidity","renderInput","placholder","scene2_email_placeholder_text","scene2_input_placeholder","inputType","renderSignupView","containerClass","scene2_icon","scene2_title","scene2_text","form_action","scene2_button_label","getFirstSceneContent","substr","FXASignupSnippet","userAgent","firefox_version","entrypoint","service","utm_source","utm_content","utm_campaign","utm_term","NewsletterSnippet","scene2_newsletter","newsletters","fmt","source_url","isEmailOrPhoneNumber","val","email_re","check_email","check_phone","isNaN","include_sms","append","message_id_sms","country","message_id_email","encodeURIComponent","addDefaultValues","SendToDeviceSnippet","propsWithDefaults","simple_snippet","newsletter_snippet","fxa_signup_snippet","send_to_device_snippet","eoy_snippet","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","_source","_index","_length","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","getPattern","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","getSelectorExpression","literal","getLiteral","getVariantKey","getCallArgs","fun","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","member","hasOwnProperty","TypeError","_functions","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","RegExp","ReactLocalization","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","LocalizationProvider","l10n","getChildContext","Children","only","childContextTypes","propTypes","PropTypes","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","isValidElement","toLowerCase","Localized","messageValue","messageAttrs","localizedProps","VOID_ELEMENTS","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","dedupe","INITIAL_STATE","spocs_endpoint","AS_ROUTER_INITIALIZED","AS_ROUTER_PREF_CHANGED","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","UPDATE_SEARCH_SHORTCUTS","SNIPPETS_PREVIEW_MODE","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","POCKET_WAITING_FOR_SPOC","POCKET_LOGGED_IN","POCKET_CTA","cta_button","cta_text","cta_url","use_cta","DISCOVERY_STREAM_CONFIG_CHANGE","DISCOVERY_STREAM_CONFIG_SETUP","DISCOVERY_STREAM_LAYOUT_UPDATE","DISCOVERY_STREAM_LAYOUT_RESET","DISCOVERY_STREAM_FEEDS_UPDATE","DISCOVERY_STREAM_SPOCS_ENDPOINT","DISCOVERY_STREAM_SPOCS_UPDATE","SHOW_SEARCH","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","_Card","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","hasImage","placeholder","description","Card","PlaceholderCard","TopSiteFormInput","validationError","onMount","shouldFocus","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteForm","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {enableASRouterContent} from \"content-src/lib/asroutercontent\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\nconst asrouterContent = new ASRouterContent();\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\nenableASRouterContent(store, asrouterContent);\n\nReactDOM.hydrate(\n \n , document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n * Use this in action creators if you need different logic\n * for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n// INIT: \"INIT\",\n// UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n \"ADDONS_INFO_REQUEST\",\n \"ADDONS_INFO_RESPONSE\",\n \"ARCHIVE_FROM_POCKET\",\n \"AS_ROUTER_INITIALIZED\",\n \"AS_ROUTER_PREF_CHANGED\",\n \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n \"BLOCK_URL\",\n \"BOOKMARK_URL\",\n \"COPY_DOWNLOAD_LINK\",\n \"DELETE_BOOKMARK_BY_ID\",\n \"DELETE_FROM_POCKET\",\n \"DELETE_HISTORY_URL\",\n \"DIALOG_CANCEL\",\n \"DIALOG_OPEN\",\n \"DISCOVERY_STREAM_CONFIG_CHANGE\",\n \"DISCOVERY_STREAM_CONFIG_SETUP\",\n \"DISCOVERY_STREAM_CONFIG_SET_VALUE\",\n \"DISCOVERY_STREAM_FEEDS_UPDATE\",\n \"DISCOVERY_STREAM_LAYOUT_RESET\",\n \"DISCOVERY_STREAM_LAYOUT_UPDATE\",\n \"DISCOVERY_STREAM_SPOCS_ENDPOINT\",\n \"DISCOVERY_STREAM_SPOCS_UPDATE\",\n \"DOWNLOAD_CHANGED\",\n \"FAKE_FOCUS_SEARCH\",\n \"FILL_SEARCH_TERM\",\n \"HANDOFF_SEARCH_TO_AWESOMEBAR\",\n \"HIDE_SEARCH\",\n \"INIT\",\n \"MIGRATION_CANCEL\",\n \"MIGRATION_COMPLETED\",\n \"MIGRATION_START\",\n \"NEW_TAB_INIT\",\n \"NEW_TAB_INITIAL_STATE\",\n \"NEW_TAB_LOAD\",\n \"NEW_TAB_REHYDRATED\",\n \"NEW_TAB_STATE_REQUEST\",\n \"NEW_TAB_UNLOAD\",\n \"OPEN_DOWNLOAD_FILE\",\n \"OPEN_LINK\",\n \"OPEN_NEW_WINDOW\",\n \"OPEN_PRIVATE_WINDOW\",\n \"OPEN_WEBEXT_SETTINGS\",\n \"PAGE_PRERENDERED\",\n \"PLACES_BOOKMARK_ADDED\",\n \"PLACES_BOOKMARK_REMOVED\",\n \"PLACES_HISTORY_CLEARED\",\n \"PLACES_LINKS_CHANGED\",\n \"PLACES_LINK_BLOCKED\",\n \"PLACES_LINK_DELETED\",\n \"PLACES_SAVED_TO_POCKET\",\n \"POCKET_CTA\",\n \"POCKET_LOGGED_IN\",\n \"POCKET_WAITING_FOR_SPOC\",\n \"PREFS_INITIAL_VALUES\",\n \"PREF_CHANGED\",\n \"PREVIEW_REQUEST\",\n \"PREVIEW_REQUEST_CANCEL\",\n \"PREVIEW_RESPONSE\",\n \"REMOVE_DOWNLOAD_FILE\",\n \"RICH_ICON_MISSING\",\n \"SAVE_SESSION_PERF_DATA\",\n \"SAVE_TO_POCKET\",\n \"SCREENSHOT_UPDATED\",\n \"SECTION_DEREGISTER\",\n \"SECTION_DISABLE\",\n \"SECTION_ENABLE\",\n \"SECTION_MOVE\",\n \"SECTION_OPTIONS_CHANGED\",\n \"SECTION_REGISTER\",\n \"SECTION_UPDATE\",\n \"SECTION_UPDATE_CARD\",\n \"SETTINGS_CLOSE\",\n \"SETTINGS_OPEN\",\n \"SET_PREF\",\n \"SHOW_DOWNLOAD_FILE\",\n \"SHOW_FIREFOX_ACCOUNTS\",\n \"SHOW_SEARCH\",\n \"SKIPPED_SIGNIN\",\n \"SNIPPETS_BLOCKLIST_CLEARED\",\n \"SNIPPETS_BLOCKLIST_UPDATED\",\n \"SNIPPETS_DATA\",\n \"SNIPPETS_PREVIEW_MODE\",\n \"SNIPPETS_RESET\",\n \"SNIPPET_BLOCKED\",\n \"SUBMIT_EMAIL\",\n \"SYSTEM_TICK\",\n \"TELEMETRY_IMPRESSION_STATS\",\n \"TELEMETRY_PERFORMANCE_EVENT\",\n \"TELEMETRY_UNDESIRED_EVENT\",\n \"TELEMETRY_USER_EVENT\",\n \"TOP_SITES_CANCEL_EDIT\",\n \"TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_EDIT\",\n \"TOP_SITES_INSERT\",\n \"TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_PIN\",\n \"TOP_SITES_PREFS_UPDATED\",\n \"TOP_SITES_UNPIN\",\n \"TOP_SITES_UPDATED\",\n \"TOTAL_BOOKMARKS_REQUEST\",\n \"TOTAL_BOOKMARKS_RESPONSE\",\n \"UNINIT\",\n \"UPDATE_PINNED_SEARCH_SHORTCUTS\",\n \"UPDATE_SEARCH_SHORTCUTS\",\n \"UPDATE_SECTION_PREFS\",\n \"WEBEXT_CLICK\",\n \"WEBEXT_DISMISS\",\n]) {\n actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n \"INSTALL_ADDON_FROM_URL\",\n \"OPEN_APPLICATIONS_MENU\",\n \"OPEN_PRIVATE_BROWSER_WINDOW\",\n \"OPEN_URL\",\n \"OPEN_ABOUT_PAGE\",\n \"OPEN_PREFERENCES_PAGE\",\n \"SHOW_FIREFOX_ACCOUNTS\",\n]) {\n ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n const meta = action.meta ? {...action.meta} : {};\n if (!options || !options.from || !options.to) {\n throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n }\n // For each of these fields, if they are passed as an option,\n // add them to the action. If they are not defined, remove them.\n [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n if (typeof options[o] !== \"undefined\") {\n meta[o] = options[o];\n } else if (meta[o]) {\n delete meta[o];\n }\n });\n return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {bool} skipLocal Used by OnlyToMain to skip the main reducer\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n return _RouteMessage(action, {\n from: CONTENT_MESSAGE_TYPE,\n to: MAIN_MESSAGE_TYPE,\n fromTarget,\n skipLocal,\n });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE,\n });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n * and also sent to a particular Content process.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @param {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n if (!target) {\n throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n }\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE,\n toTarget: target,\n skipMain,\n });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n * and skip the main reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: PRELOAD_MESSAGE_TYPE,\n });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n return AlsoToMain({\n type: actionTypes.TELEMETRY_USER_EVENT,\n data,\n });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n return AlsoToMain({\n type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n data,\n });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param {object} data Fields to include in the ping\n * @param {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n const action = {type: actionTypes.SET_PREF, data: {name, value}};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n if (!data || !data.source) {\n throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n }\n const action = {type, data};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n BroadcastToContent,\n UserEvent,\n ASRouterUserEvent,\n UndesiredEvent,\n PerfEvent,\n ImpressionStats,\n AlsoToOneContent,\n OnlyToOneContent,\n AlsoToMain,\n OnlyToMain,\n AlsoToPreloaded,\n SetPref,\n WebExtEvent,\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n isSendToMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n },\n isBroadcastToContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToOneContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToPreloaded(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n action.meta.from === MAIN_MESSAGE_TYPE;\n },\n isFromMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.from === MAIN_MESSAGE_TYPE &&\n action.meta.to === CONTENT_MESSAGE_TYPE;\n },\n getPortIdOfSender(action) {\n return (action.meta && action.meta.fromTarget) || null;\n },\n _RouteMessage,\n};\n\nconst EXPORTED_SYMBOLS = [\n \"actionTypes\",\n \"actionCreators\",\n \"actionUtils\",\n \"ASRouterActions\",\n \"globalImportContext\",\n \"UI_CODE\",\n \"BACKGROUND_PROCESS\",\n \"MAIN_MESSAGE_TYPE\",\n \"CONTENT_MESSAGE_TYPE\",\n \"PRELOAD_MESSAGE_TYPE\",\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n * the same interface as a Map, but is optionally backed by\n * indexedDB for persistent storage.\n * Call .connect() to open a database connection and restore any\n * previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n constructor(dispatch) {\n super();\n this._db = null;\n this._dispatch = dispatch;\n }\n\n set(key, value) {\n super.set(key, value);\n return this._dbTransaction(db => db.put(value, key));\n }\n\n delete(key) {\n super.delete(key);\n return this._dbTransaction(db => db.delete(key));\n }\n\n clear() {\n super.clear();\n this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n return this._dbTransaction(db => db.clear());\n }\n\n get blockList() {\n return this.get(\"blockList\") || [];\n }\n\n /**\n * blockSnippetById - Blocks a snippet given an id\n *\n * @param {str|int} id The id of the snippet\n * @return {Promise} Resolves when the id has been written to indexedDB,\n * or immediately if the snippetMap is not connected\n */\n async blockSnippetById(id) {\n if (!id) {\n return;\n }\n const {blockList} = this;\n if (!blockList.includes(id)) {\n blockList.push(id);\n this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n await this.set(\"blockList\", blockList);\n }\n }\n\n disableOnboarding() {}\n\n showFirefoxAccounts() {\n this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n }\n\n getTotalBookmarksCount() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n getAddonsInfo() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.ADDONS_INFO_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n /**\n * connect - Attaches an indexedDB back-end to the Map so that any set values\n * are also cached in a store. It also restores any existing values\n * that are already stored in the indexedDB store.\n *\n * @return {type} description\n */\n async connect() {\n // Open the connection\n const db = await this._openDB();\n\n // Restore any existing values\n await this._restoreFromDb(db);\n\n // Attach a reference to the db\n this._db = db;\n }\n\n /**\n * _dbTransaction - Returns a db transaction wrapped with the given modifier\n * function as a Promise. If the db has not been connected,\n * it resolves immediately.\n *\n * @param {func} modifier A function to call with the transaction\n * @return {obj} A Promise that resolves when the transaction has\n * completed or errored\n */\n _dbTransaction(modifier) {\n if (!this._db) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const transaction = modifier(\n this._db\n .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n );\n transaction.onsuccess = event => resolve();\n\n /* istanbul ignore next */\n transaction.onerror = event => reject(transaction.error);\n });\n }\n\n _openDB() {\n return new Promise((resolve, reject) => {\n const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n /* istanbul ignore next */\n openRequest.onerror = event => {\n // Try to delete the old database so that we can start this process over\n // next time.\n indexedDB.deleteDatabase(DATABASE_NAME);\n reject(event);\n };\n\n openRequest.onupgradeneeded = event => {\n const db = event.target.result;\n if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n }\n };\n\n openRequest.onsuccess = event => {\n let db = event.target.result;\n\n /* istanbul ignore next */\n db.onerror = err => console.error(err); // eslint-disable-line no-console\n /* istanbul ignore next */\n db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n resolve(db);\n };\n });\n }\n\n _restoreFromDb(db) {\n return new Promise((resolve, reject) => {\n let cursorRequest;\n try {\n cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n } catch (err) {\n // istanbul ignore next\n reject(err);\n // istanbul ignore next\n return;\n }\n\n /* istanbul ignore next */\n cursorRequest.onerror = event => reject(event);\n\n cursorRequest.onsuccess = event => {\n let cursor = event.target.result;\n // Populate the cache from the persistent storage.\n if (cursor) {\n if (cursor.value !== \"blockList\") {\n this.set(cursor.key, cursor.value);\n }\n cursor.continue();\n } else {\n // We are done.\n resolve();\n }\n };\n });\n }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n * remote location, or else default snippets if the remote\n * snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n constructor(dispatch) {\n // Initialize the Snippets Map and attaches it to a global so that\n // the snippet payload can interact with it.\n global.gSnippetsMap = new SnippetsMap(dispatch);\n this._onAction = this._onAction.bind(this);\n }\n\n get snippetsMap() {\n return global.gSnippetsMap;\n }\n\n async _refreshSnippets() {\n // Check if the cached version of of the snippets in snippetsMap. If it's too\n // old, blow away the entire snippetsMap.\n const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n if (cachedVersion !== this.appData.version) {\n this.snippetsMap.clear();\n }\n\n // Has enough time passed for us to require an update?\n const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n if (needsUpdate && this.appData.snippetsURL) {\n this.snippetsMap.set(\"snippets-last-update\", Date.now());\n try {\n const response = await fetch(this.appData.snippetsURL);\n if (response.status === 200) {\n const payload = await response.text();\n\n this.snippetsMap.set(\"snippets\", payload);\n this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n }\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n _showRemoteSnippets() {\n const snippetsEl = document.getElementById(this.elementId);\n const payload = this.snippetsMap.get(\"snippets\");\n\n if (!snippetsEl) {\n throw new Error(`No element was found with id '${this.elementId}'.`);\n }\n\n // This could happen if fetching failed\n if (!payload) {\n throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n }\n\n if (typeof payload !== \"string\") {\n throw new Error(\"Snippet payload was incorrectly formatted\");\n }\n\n // Note that injecting snippets can throw if they're invalid XML.\n // eslint-disable-next-line no-unsanitized/property\n snippetsEl.innerHTML = payload;\n\n this._logIfDevtools(\"Successfully added snippets.\");\n\n // Scripts injected by innerHTML are inactive, so we have to relocate them\n // through DOM manipulation to activate their contents.\n for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n const relocatedScript = document.createElement(\"script\");\n relocatedScript.text = scriptEl.text;\n scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n }\n }\n\n _onAction(msg) {\n if (msg.data.type === at.SNIPPET_BLOCKED) {\n if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n document.getElementById(\"snippets-container\").style.display = \"none\";\n }\n }\n }\n\n // istanbul ignore next\n _logIfDevtools(text) {\n if (this.devtoolsEnabled) {\n console.log(\"Legacy snippets:\", text); // eslint-disable-line no-console\n }\n }\n\n /**\n * init - Fetch the snippet payload and show snippets\n *\n * @param {obj} options\n * @param {str} options.appData.snippetsURL The URL from which we fetch snippets\n * @param {int} options.appData.version The current snippets version\n * @param {str} options.elementId The id of the element in which to inject snippets\n * @param {bool} options.connect Should gSnippetsMap connect to indexedDB?\n */\n async init(options) {\n Object.assign(this, {\n appData: {},\n elementId: \"snippets\",\n connect: true,\n devtoolsEnabled: false,\n }, options);\n\n this._logIfDevtools(\"Initializing...\");\n\n // Add listener so we know when snippets are blocked on other pages\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n\n // TODO: Requires enabling indexedDB on newtab\n // Restore the snippets map from indexedDB\n if (this.connect) {\n try {\n await this.snippetsMap.connect();\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n\n // Cache app data values so they can be accessible from gSnippetsMap\n for (const key of Object.keys(this.appData)) {\n if (key === \"blockList\") {\n this.snippetsMap.set(\"blockList\", this.appData[key]);\n } else {\n this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n }\n }\n\n // Refresh snippets, if enough time has passed.\n await this._refreshSnippets();\n\n // Try showing remote snippets, falling back to defaults if necessary.\n try {\n this._showRemoteSnippets();\n } catch (e) {\n this._logIfDevtools(\"Problem inserting remote snippets!\");\n console.error(e); // eslint-disable-line no-console\n }\n\n window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n this.initialized = true;\n this._logIfDevtools(\"Finished initializing.\");\n }\n\n uninit() {\n window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n if (global.RPMRemoveMessageListener) {\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n this.initialized = false;\n }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n * when the store has received the appropriate\n * Snippet data.\n *\n * @param {obj} store The redux store\n * @return {obj} Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n const snippets = new SnippetsProvider(store.dispatch);\n\n let initializing = false;\n\n store.subscribe(async () => {\n const state = store.getState();\n\n /**\n * Sorry this code is so complicated. It will be removed soon.\n * This is what the different values actually mean:\n *\n * ASRouter.initialized Is ASRouter.jsm initialised?\n * ASRouter.allowLegacySnippets Are ASRouter snippets turned OFF (i.e. legacy snippets are allowed)\n * state.Prefs.values[\"feeds.snippets\"] User preference for snippets\n * state.Snippets.initialized Is SnippetsFeed.jsm initialised?\n * snippets.initialized Is in-content snippets currently initialised?\n * state.Prefs.values.disableSnippets This pref is used to disable legacy snippets in an emergency\n * in a way that is not user-editable (true = disabled)\n */\n\n /** If we should initialize snippets... */\n if (\n state.Prefs.values[\"feeds.snippets\"] &&\n state.ASRouter.initialized &&\n state.ASRouter.allowLegacySnippets &&\n !state.Prefs.values.disableSnippets &&\n state.Snippets.initialized &&\n !snippets.initialized &&\n // Don't call init multiple times\n !initializing &&\n location.href !== \"about:welcome\" &&\n location.hash !== \"#asrouter\"\n ) {\n initializing = true;\n await snippets.init({appData: state.Snippets, devtoolsEnabled: state.Prefs.values[\"asrouter.devtoolsEnabled\"]});\n initializing = false;\n\n /** If we should remove snippets... */\n } else if (\n (\n state.Prefs.values[\"feeds.snippets\"] === false ||\n state.Prefs.values.disableSnippets === true ||\n (state.ASRouter.initialized && !state.ASRouter.allowLegacySnippets)\n ) &&\n snippets.initialized\n ) {\n // Remove snippets\n snippets.uninit();\n // istanbul ignore if\n if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n console.log(\"Legacy snippets removed\"); // eslint-disable-line no-console\n }\n }\n });\n\n // Returned for testing purposes\n return {snippets};\n}\n","import {addLocaleData, IntlProvider} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {generateMessages} from \"./rich-text-strings\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {LocalizationProvider} from \"fluent-react\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {ReturnToAMO} from \"./templates/ReturnToAMO/ReturnToAMO\";\nimport {SnippetsTemplates} from \"./templates/template-manifest\";\nimport {StartupOverlay} from \"./templates/StartupOverlay/StartupOverlay\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\nconst ASR_CONTAINER_ID = \"asr-newtab-container\";\n\nexport const ASRouterUtils = {\n addListener(listener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n removeListener(listener) {\n global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n sendMessage(action) {\n global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n },\n blockById(id, options) {\n ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id, ...options}});\n },\n dismissById(id) {\n ASRouterUtils.sendMessage({type: \"DISMISS_MESSAGE_BY_ID\", data: {id}});\n },\n dismissBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"DISMISS_BUNDLE\", data: {bundle}});\n },\n executeAction(button_action) {\n ASRouterUtils.sendMessage({\n type: \"USER_ACTION\",\n data: button_action,\n });\n },\n unblockById(id) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n },\n unblockBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n },\n overrideMessage(id) {\n ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n },\n sendTelemetry(ping) {\n const payload = ac.ASRouterUserEvent(ping);\n global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n },\n getPreviewEndpoint() {\n if (window.location.href.includes(\"endpoint\")) {\n const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n try {\n const endpoint = new URL(params.get(\"endpoint\"));\n return {\n url: endpoint.href,\n snippetId: params.get(\"snippetId\"),\n };\n } catch (e) {}\n }\n\n return null;\n },\n};\n\n// Note: nextProps/prevProps refer to props passed to , not \nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessageFromParent = this.onMessageFromParent.bind(this);\n this.sendClick = this.sendClick.bind(this);\n this.sendImpression = this.sendImpression.bind(this);\n this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n this.state = {message: {}, bundle: {}};\n }\n\n sendUserActionTelemetry(extraProps = {}) {\n const {message, bundle} = this.state;\n if (!message && !extraProps.message_id) {\n throw new Error(`You must provide a message_id for bundled messages`);\n }\n const eventType = `${message.provider || bundle.provider}_user_event`;\n ASRouterUtils.sendTelemetry({\n message_id: message.id || extraProps.message_id,\n source: extraProps.id,\n action: eventType,\n ...extraProps,\n });\n }\n\n sendImpression(extraProps) {\n if (this.state.message.provider === \"preview\") {\n return;\n }\n\n ASRouterUtils.sendMessage({type: \"IMPRESSION\", data: this.state.message});\n this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n }\n\n // If link has a `metric` data attribute send it as part of the `value`\n // telemetry field which can have arbitrary values.\n // Used for router messages with links as part of the content.\n sendClick(event) {\n const metric = {\n value: event.target.dataset.metric,\n // Used for the `source` of the event. Needed to differentiate\n // from other snippet or onboarding events that may occur.\n id: \"NEWTAB_FOOTER_BAR_CONTENT\",\n };\n const action = {\n type: event.target.dataset.action,\n data: {args: event.target.dataset.args},\n };\n if (action.type) {\n ASRouterUtils.executeAction(action);\n }\n if (!this.state.message.content.do_not_autoblock && !event.target.dataset.do_not_autoblock) {\n ASRouterUtils.blockById(this.state.message.id);\n }\n if (this.state.message.provider !== \"preview\") {\n this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n }\n }\n\n onBlockById(id) {\n return options => ASRouterUtils.blockById(id, options);\n }\n\n onDismissById(id) {\n return () => ASRouterUtils.dismissById(id);\n }\n\n dismissBundle(bundle) {\n return () => ASRouterUtils.dismissBundle(bundle);\n }\n\n triggerOnboarding() {\n ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"showOnboarding\"}}});\n }\n\n onMessageFromParent({data: action}) {\n switch (action.type) {\n case \"SET_MESSAGE\":\n this.setState({message: action.data});\n break;\n case \"SET_BUNDLED_MESSAGES\":\n this.setState({bundle: action.data});\n break;\n case \"CLEAR_MESSAGE\":\n if (action.data.id === this.state.message.id) {\n this.setState({message: {}});\n // Remove any styles related to the RTAMO message\n document.body.classList.remove(\"welcome\", \"hide-main\", \"amo\");\n }\n break;\n case \"CLEAR_PROVIDER\":\n if (action.data.id === this.state.message.provider) {\n this.setState({message: {}});\n }\n break;\n case \"CLEAR_BUNDLE\":\n if (this.state.bundle.bundle) {\n this.setState({bundle: {}});\n }\n break;\n case \"CLEAR_ALL\":\n this.setState({message: {}, bundle: {}});\n }\n }\n\n componentWillMount() {\n // Add locale data for StartupOverlay because it uses react-intl\n addLocaleData(global.document.documentElement.lang);\n\n const endpoint = ASRouterUtils.getPreviewEndpoint();\n ASRouterUtils.addListener(this.onMessageFromParent);\n\n // If we are loading about:welcome we want to trigger the onboarding messages\n if (this.props.document.location.href === \"about:welcome\") {\n ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"firstRun\"}}});\n } else {\n ASRouterUtils.sendMessage({type: \"SNIPPETS_REQUEST\", data: {endpoint}});\n }\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessageFromParent);\n }\n\n renderSnippets() {\n if (this.state.bundle.template === \"onboarding\" ||\n this.state.message.template === \"fxa_overlay\" ||\n this.state.message.template === \"return_to_amo_overlay\") {\n return null;\n }\n const SnippetComponent = SnippetsTemplates[this.state.message.template];\n const {content} = this.state.message;\n\n return (\n );\n }\n\n renderOnboarding() {\n if (this.state.bundle.template === \"onboarding\") {\n return (\n );\n }\n return null;\n }\n\n renderFirstRunOverlay() {\n const {message} = this.state;\n if (message.template === \"fxa_overlay\") {\n global.document.body.classList.add(\"fxa\");\n return (\n \n \n \n );\n } else if (message.template === \"return_to_amo_overlay\") {\n global.document.body.classList.add(\"amo\");\n return (\n \n \n \n );\n }\n return null;\n }\n\n renderPreviewBanner() {\n if (this.state.message.provider !== \"preview\") {\n return null;\n }\n\n return (\n \n \n Preview Purposes Only \n
\n );\n }\n\n render() {\n const {message, bundle} = this.state;\n if (!message.id && !bundle.template) { return null; }\n return (\n \n {this.renderPreviewBanner()}\n {this.renderFirstRunOverlay()}\n {this.renderOnboarding()}\n {this.renderSnippets()}\n \n );\n }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n constructor() {\n this.initialized = false;\n this.containerElement = null;\n }\n\n _mount() {\n this.containerElement = global.document.getElementById(ASR_CONTAINER_ID);\n if (!this.containerElement) {\n this.containerElement = global.document.createElement(\"div\");\n this.containerElement.id = ASR_CONTAINER_ID;\n this.containerElement.style.zIndex = 1;\n global.document.body.appendChild(this.containerElement);\n }\n\n ReactDOM.render( , this.containerElement);\n }\n\n _unmount() {\n ReactDOM.unmountComponentAtNode(this.containerElement);\n }\n\n init(store) {\n this._activityStreamStore = store;\n this._mount();\n this.initialized = true;\n }\n\n uninit() {\n if (this.initialized) {\n this._unmount();\n this.initialized = false;\n }\n }\n}\n","module.exports = ReactIntl;","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function} a reducer that, on MERGE_STORE_ACTION action,\n * will return the action.data object merged\n * into the previous state, and the result\n * of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n return (prevState, action) => {\n if (action.type === MERGE_STORE_ACTION) {\n return {...prevState, ...action.data};\n }\n\n return mainReducer(prevState, action);\n };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n const skipLocal = action.meta && action.meta.skipLocal;\n if (au.isSendToMain(action)) {\n RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n }\n if (!skipLocal) {\n next(action);\n }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n if (store._didRehydrate) {\n return next(action);\n }\n\n const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n if (isRehydrationRequest) {\n store._didRequestInitialState = true;\n return next(action);\n }\n\n if (isMergeStoreAction) {\n store._didRehydrate = true;\n return next(action);\n }\n\n // If init happened after our request was made, we need to re-request\n if (store._didRequestInitialState && action.type === at.INIT) {\n return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n }\n\n if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n // Note that actions received before didRehydrate will not be dispatched\n // because this could negatively affect preloading and the the state\n // will be replaced by rehydration anyway.\n return null;\n }\n\n return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n if (store._receivedFromMain) {\n next(action);\n } else if (au.isFromMain(action)) {\n next(action);\n store._receivedFromMain = true;\n // Sending out all the early actions as main is ready now\n if (store._earlyActionQueue) {\n store._earlyActionQueue.forEach(next);\n store._earlyActionQueue = [];\n }\n } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n store._earlyActionQueue = store._earlyActionQueue || [];\n store._earlyActionQueue.push(action);\n } else {\n // Let any other type of action go through\n next(action);\n }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param {object} reducers An object containing Redux reducers\n * @param {object} intialState (optional) The initial state of the store, if desired\n * @return {object} A redux store\n */\nexport function initStore(reducers, initialState) {\n const store = createStore(\n mergeStateReducer(combineReducers(reducers)),\n initialState,\n global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n );\n\n store._didRehydrate = false;\n store._didRequestInitialState = false;\n\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n try {\n store.dispatch(msg.data);\n } catch (ex) {\n console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n }\n });\n }\n\n return store;\n}\n","module.exports = Redux;","import {MessageContext} from \"fluent\";\n\n/**\n * Properties that allow rich text MUST be added to this list.\n * key: the localization_id that should be used\n * value: a property or array of properties on the message.content object\n */\nconst RICH_TEXT_CONFIG = {\n \"text\": [\"text\", \"scene1_text\"],\n \"success_text\": \"success_text\",\n \"error_text\": \"error_text\",\n \"scene2_text\": \"scene2_text\",\n \"amo_html\": \"amo_html\",\n \"privacy_html\": \"scene2_privacy_html\",\n \"disclaimer_html\": \"scene2_disclaimer_html\",\n};\n\nexport const RICH_TEXT_KEYS = Object.keys(RICH_TEXT_CONFIG);\n\n/**\n * Generates an array of messages suitable for fluent's localization provider\n * including all needed strings for rich text.\n * @param {object} content A .content object from an ASR message (i.e. message.content)\n * @returns {MessageContext[]} A array containing the fluent message context\n */\nexport function generateMessages(content) {\n const cx = new MessageContext(\"en-US\");\n\n RICH_TEXT_KEYS.forEach(key => {\n const attrs = RICH_TEXT_CONFIG[key];\n const attrsToTry = Array.isArray(attrs) ? [...attrs] : [attrs];\n let string = \"\";\n while (!string && attrsToTry.length) {\n const attr = attrsToTry.pop();\n string = content[attr];\n }\n cx.addMessages(`${key} = ${string}`);\n });\n return [cx];\n}\n","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionOrAddListener() {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.sendOnMount) {\n this.sendImpressionOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n this.sendImpressionOrAddListener();\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nImpressionsWrapper.defaultProps = {\n document: global.document,\n sendOnMount: true,\n};\n","module.exports = React;","module.exports = PropTypes;","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n onClick() {\n const {props} = this;\n const ping = {\n event: \"CLICK_BUTTON\",\n message_id: props.id,\n id: props.UISurface,\n };\n props.sendUserActionTelemetry(ping);\n props.onAction(props.content.primary_button.action);\n }\n\n render() {\n const {content} = this.props;\n return (\n \n
\n
\n
\n {content.title} \n {content.text}
\n \n
\n {content.primary_button.label} \n \n
\n
\n );\n }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n render() {\n const {props} = this;\n const {button_label, header} = props.extraTemplateStrings;\n return (\n \n \n {props.bundle.map(message => (\n \n ))}\n
\n \n );\n }\n}\n","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n componentWillMount() {\n this.setState({active: true});\n document.body.classList.add(\"modal-open\");\n }\n\n componentWillUnmount() {\n document.body.classList.remove(\"modal-open\");\n this.setState({active: false});\n }\n\n render() {\n const {active} = this.state;\n const {title, button_label} = this.props;\n return (\n \n
\n
\n
{title} \n {this.props.children}\n
\n {button_label} \n
\n
\n
\n );\n }\n}\n","module.exports = ReactDOM;","import React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\n\nexport class ReturnToAMO extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClickAddExtension = this.onClickAddExtension.bind(this);\n this.onBlockButton = this.onBlockButton.bind(this);\n }\n\n componentDidMount() {\n this.props.onReady();\n }\n\n onClickAddExtension() {\n this.props.onAction(this.props.content.primary_button.action);\n }\n\n onBlockButton() {\n this.props.onBlock();\n document.body.classList.remove(\"welcome\", \"hide-main\", \"amo\");\n }\n\n renderText() {\n const customElement = ;\n return ( );\n }\n\n render() {\n const {content} = this.props;\n return (\n \n
\n
{content.header} \n
\n
\n
{content.title}
\n
\n {this.renderText()} \n
\n
{content.primary_button.label} \n
\n
\n
\n
{content.secondary_button.label} \n
\n
);\n }\n}\n","import {Localized} from \"fluent-react\";\nimport React from \"react\";\nimport {RICH_TEXT_KEYS} from \"../../rich-text-strings\";\nimport {safeURI} from \"../../template-utils\";\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n b: ,\n i: ,\n u: ,\n strong: ,\n em: ,\n br: ,\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick, doNotAutoBlock, openNewWindow = false) {\n if (links) {\n return Object.keys(links).reduce((acc, linkTag) => {\n const {action} = links[linkTag];\n // Setting the value to false will not include the attribute in the anchor\n const url = action ? false : safeURI(links[linkTag].url);\n\n acc[linkTag] = ( );\n return acc;\n }, {});\n }\n\n return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nexport function RichText(props) {\n if (!RICH_TEXT_KEYS.includes(props.localization_id)) {\n throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);\n }\n return (\n \n {props.text} \n \n );\n}\n","export function safeURI(url) {\n if (!url) {\n return \"\";\n }\n const {protocol} = new URL(url);\n const isAllowed = [\n \"http:\",\n \"https:\",\n \"data:\",\n \"resource:\",\n \"chrome:\",\n ].includes(protocol);\n if (!isAllowed) {\n console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n }\n return isAllowed ? url : \"\";\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onInputChange = this.onInputChange.bind(this);\n this.onSubmit = this.onSubmit.bind(this);\n this.clickSkip = this.clickSkip.bind(this);\n this.initScene = this.initScene.bind(this);\n this.removeOverlay = this.removeOverlay.bind(this);\n this.onInputInvalid = this.onInputInvalid.bind(this);\n\n this.state = {\n emailInput: \"\",\n overlayRemoved: false,\n flowId: \"\",\n flowBeginTime: 0,\n };\n this.didFetch = false;\n }\n\n async componentWillUpdate() {\n if (this.props.fxa_endpoint && !this.didFetch) {\n try {\n this.didFetch = true;\n const fxaParams = \"entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email\";\n const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`, {credentials: \"omit\"});\n if (response.status === 200) {\n const {flowId, flowBeginTime} = await response.json();\n this.setState({flowId, flowBeginTime});\n } else {\n this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_FETCH_ERROR\", value: response.status}}));\n }\n } catch (error) {\n this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_ERROR\"}}));\n }\n }\n }\n\n componentDidMount() {\n this.initScene();\n }\n\n initScene() {\n // Timeout to allow the scene to render once before attaching the attribute\n // to trigger the animation.\n setTimeout(() => {\n this.setState({show: true});\n this.props.onReady();\n }, 10);\n }\n\n removeOverlay() {\n window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n document.body.classList.remove(\"hide-main\", \"fxa\");\n this.setState({show: false});\n this.props.onBlock();\n setTimeout(() => {\n // Allow scrolling and fully remove overlay after animation finishes.\n document.body.classList.remove(\"welcome\");\n this.setState({overlayRemoved: true});\n }, 400);\n }\n\n onInputChange(e) {\n let error = e.target.previousSibling;\n this.setState({emailInput: e.target.value});\n error.classList.remove(\"active\");\n e.target.classList.remove(\"invalid\");\n }\n\n onSubmit() {\n this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\", ...this._getFormInfo()}));\n\n window.addEventListener(\"visibilitychange\", this.removeOverlay);\n }\n\n clickSkip() {\n this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\", ...this._getFormInfo()}));\n this.removeOverlay();\n }\n\n /**\n * Report to telemetry additional information about the form submission.\n */\n _getFormInfo() {\n const value = {has_flow_params: this.state.flowId.length > 0};\n return {value};\n }\n\n onInputInvalid(e) {\n let error = e.target.previousSibling;\n error.classList.add(\"active\");\n e.target.classList.add(\"invalid\");\n e.preventDefault(); // Override built-in form validation popup\n e.target.focus();\n }\n\n render() {\n // When skipping the onboarding tour we show AS but we are still on\n // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered\n if (this.state.overlayRemoved) {\n return null;\n }\n\n let termsLink = ( );\n let privacyLink = ( );\n\n return (\n \n );\n }\n}\n\nconst getState = state => ({fxa_endpoint: state.Prefs.values.fxa_endpoint});\nexport const StartupOverlay = connect(getState)(injectIntl(_StartupOverlay));\n","module.exports = ReactRedux;","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {DiscoveryStreamBase} from \"content-src/components/DiscoveryStreamBase/DiscoveryStreamBase\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\n\nlet didLogDevtoolsHelpText = false;\n\nconst PrefsButton = injectIntl(props => (\n \n \n
\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\n// Returns a function will not be continuously triggered when called. The\n// function will be triggered if called again after `wait` milliseconds.\nfunction debounce(func, wait) {\n let timer;\n return (...args) => {\n if (timer) { return; }\n\n let wakeUp = () => { timer = null; };\n\n timer = setTimeout(wakeUp, wait);\n func.apply(this, args);\n };\n}\n\nexport class _Base extends React.PureComponent {\n componentWillMount() {\n const {locale} = this.props;\n addLocaleDataForReactIntl(locale);\n if (this.props.isFirstrun) {\n global.document.body.classList.add(\"welcome\", \"hide-main\");\n }\n }\n\n componentDidMount() {\n // Request state AFTER the first render to ensure we don't cause the\n // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n // dispatched right after the store is ready.\n if (this.props.isPrerendered) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n }\n }\n\n componentWillUnmount() {\n this.updateTheme();\n }\n\n componentWillUpdate() {\n this.updateTheme();\n }\n\n updateTheme() {\n const bodyClassName = [\n \"activity-stream\",\n // If we skipped the about:welcome overlay and removed the CSS classes\n // we don't want to add them back to the Activity Stream view\n document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\",\n document.body.classList.contains(\"hide-main\") ? \"hide-main\" : \"\",\n ].filter(v => v).join(\" \");\n global.document.body.className = bodyClassName;\n }\n\n render() {\n const {props} = this;\n const {App, locale, strings} = props;\n const {initialized} = App;\n\n const prefs = props.Prefs.values;\n if (prefs[\"asrouter.devtoolsEnabled\"]) {\n if (window.location.hash.startsWith(\"#asrouter\") ||\n window.location.hash.startsWith(\"#devtools\")) {\n return ( );\n } else if (!didLogDevtoolsHelpText) {\n console.log(\"Activity Stream devtools enabled. To access visit %cabout:newtab#devtools\", \"font-weight: bold\"); // eslint-disable-line no-console\n didLogDevtoolsHelpText = true;\n }\n }\n\n if (!props.isPrerendered && !initialized) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n}\n\nexport class BaseContent extends React.PureComponent {\n constructor(props) {\n super(props);\n this.openPreferences = this.openPreferences.bind(this);\n this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);\n this.state = {fixedSearch: false};\n }\n\n componentDidMount() {\n global.addEventListener(\"scroll\", this.onWindowScroll);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"scroll\", this.onWindowScroll);\n }\n\n onWindowScroll() {\n const SCROLL_THRESHOLD = 34;\n if (global.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {\n this.setState({fixedSearch: true});\n } else if (global.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {\n this.setState({fixedSearch: false});\n }\n }\n\n openPreferences() {\n this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n }\n\n disableDarkTheme() {\n // Dark themes are not supported in discovery stream view\n // Add force-light-theme class to body tag to disable dark mode. See Bug 1519764\n const bodyClassNames = global.document.body.classList;\n if (!bodyClassNames.contains(\"force-light-theme\")) {\n bodyClassNames.add(\"force-light-theme\");\n }\n }\n\n render() {\n const {props} = this;\n const {App} = props;\n const {initialized} = App;\n const prefs = props.Prefs.values;\n\n const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n const noSectionsEnabled = !prefs[\"feeds.topsites\"] && props.Sections.filter(section => section.enabled).length === 0;\n const isDiscoveryStream = props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;\n const searchHandoffEnabled = prefs[\"improvesearch.handoffToAwesomebar\"];\n\n if (isDiscoveryStream) {\n this.disableDarkTheme();\n }\n\n const outerClassName = [\n \"outer-wrapper\",\n shouldBeFixedToTop && \"fixed-to-top\",\n prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && \"fixed-search\",\n prefs.showSearch && noSectionsEnabled && \"only-search\",\n ].filter(v => v).join(\" \");\n\n return (\n \n
\n
\n {prefs.showSearch &&\n \n \n \n \n
\n }\n \n {!isDiscoveryStream && !prefs.migrationExpired &&\n
\n \n
\n }\n {isDiscoveryStream ? (\n
\n \n ) :
}\n
\n
\n \n \n
\n
);\n }\n}\n\nexport const Base = connect(state => ({\n App: state.App,\n Prefs: state.Prefs,\n Sections: state.Sections,\n DiscoveryStream: state.DiscoveryStream,\n Search: state.Search,\n}))(_Base);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport {connect} from \"react-redux\";\nimport {ModalOverlay} from \"../../asrouter/components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\nimport {SimpleHashRouter} from \"./SimpleHashRouter\";\n\nconst Row = props => ({props.children} );\n\nfunction relativeTime(timestamp) {\n if (!timestamp) {\n return \"\";\n }\n const seconds = Math.floor((Date.now() - timestamp) / 1000);\n const minutes = Math.floor((Date.now() - timestamp) / 60000);\n if (seconds < 2) {\n return \"just now\";\n } else if (seconds < 60) {\n return `${seconds} seconds ago`;\n } else if (minutes === 1) {\n return \"1 minute ago\";\n } else if (minutes < 600) {\n return `${minutes} minutes ago`;\n }\n return new Date(timestamp).toLocaleString();\n}\n\nclass DiscoveryStreamAdmin extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEnableToggle = this.onEnableToggle.bind(this);\n }\n\n setConfigValue(name, value) {\n this.props.dispatch(ac.OnlyToMain({type: at.DISCOVERY_STREAM_CONFIG_SET_VALUE, data: {name, value}}));\n }\n\n onEnableToggle(event) {\n this.setConfigValue(\"enabled\", event.target.checked);\n }\n\n renderComponent(width, component) {\n return (\n \n \n Type \n {component.type} \n
\n \n Width \n {width} \n
\n {component.feed && this.renderFeed(component.feed)}\n
\n );\n }\n\n renderFeed(feed) {\n const {feeds} = this.props.state;\n if (!feed.url) {\n return null;\n }\n return (\n \n \n Feed url \n {feed.url} \n
\n \n Data last fetched \n {relativeTime(feeds[feed.url] ? feeds[feed.url].lastUpdated : null) || \"(no data)\"} \n
\n \n );\n }\n\n render() {\n const {config, lastUpdated, layout} = this.props.state;\n return (\n
enabled
\n\n
\n Data last fetched {relativeTime(lastUpdated) || \"(no data)\"}
\n Endpoint {config.layout_endpoint || \"(empty)\"}
\n
\n\n
Layout \n\n {layout.map((row, rowIndex) => (\n
\n {row.components.map((component, componentIndex) => (\n
\n {this.renderComponent(row.width, component)}\n
\n ))}\n
\n ))}\n
);\n }\n}\n\nexport class ASRouterAdminInner extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessage = this.onMessage.bind(this);\n this.handleEnabledToggle = this.handleEnabledToggle.bind(this);\n this.handleUserPrefToggle = this.handleUserPrefToggle.bind(this);\n this.onChangeMessageFilter = this.onChangeMessageFilter.bind(this);\n this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n this.handleExpressionEval = this.handleExpressionEval.bind(this);\n this.onChangeTargetingParameters = this.onChangeTargetingParameters.bind(this);\n this.onChangeAttributionParameters = this.onChangeAttributionParameters.bind(this);\n this.setAttribution = this.setAttribution.bind(this);\n this.onCopyTargetingParams = this.onCopyTargetingParams.bind(this);\n this.onPasteTargetingParams = this.onPasteTargetingParams.bind(this);\n this.onNewTargetingParams = this.onNewTargetingParams.bind(this);\n this.state = {\n messageFilter: \"all\",\n evaluationStatus: {},\n stringTargetingParameters: null,\n newStringTargetingParameters: null,\n copiedToClipboard: false,\n pasteFromClipboard: false,\n attributionParameters: {\n source: \"addons.mozilla.org\",\n campaign: \"non-fx-button\",\n content: \"iridium@particlecore.github.io\",\n },\n };\n }\n\n onMessage({data: action}) {\n if (action.type === \"ADMIN_SET_STATE\") {\n this.setState(action.data);\n if (!this.state.stringTargetingParameters) {\n const stringTargetingParameters = {};\n for (const param of Object.keys(action.data.targetingParameters)) {\n stringTargetingParameters[param] = JSON.stringify(action.data.targetingParameters[param], null, 2);\n }\n this.setState({stringTargetingParameters});\n }\n }\n }\n\n componentWillMount() {\n const endpoint = ASRouterUtils.getPreviewEndpoint();\n ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n ASRouterUtils.addListener(this.onMessage);\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessage);\n }\n\n findOtherBundledMessagesOfSameTemplate(template) {\n return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n }\n\n handleBlock(msg) {\n if (msg.bundled) {\n // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.blockBundle(bundle);\n }\n return () => ASRouterUtils.blockById(msg.id);\n }\n\n handleUnblock(msg) {\n if (msg.bundled) {\n // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.unblockBundle(bundle);\n }\n return () => ASRouterUtils.unblockById(msg.id);\n }\n\n handleOverride(id) {\n return () => ASRouterUtils.overrideMessage(id);\n }\n\n expireCache() {\n ASRouterUtils.sendMessage({type: \"EXPIRE_QUERY_CACHE\"});\n }\n\n resetPref() {\n ASRouterUtils.sendMessage({type: \"RESET_PROVIDER_PREF\"});\n }\n\n handleExpressionEval() {\n const context = {};\n for (const param of Object.keys(this.state.stringTargetingParameters)) {\n const value = this.state.stringTargetingParameters[param];\n context[param] = value ? JSON.parse(value) : null;\n }\n ASRouterUtils.sendMessage({\n type: \"EVALUATE_JEXL_EXPRESSION\",\n data: {\n expression: this.refs.expressionInput.value,\n context,\n },\n });\n }\n\n onChangeTargetingParameters(event) {\n const {name} = event.target;\n const {value} = event.target;\n\n this.setState(({stringTargetingParameters}) => {\n let targetingParametersError = null;\n const updatedParameters = {...stringTargetingParameters};\n updatedParameters[name] = value;\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(`Error parsing value of parameter ${name}`); // eslint-disable-line no-console\n targetingParametersError = {id: name};\n }\n\n return {\n copiedToClipboard: false,\n evaluationStatus: {},\n stringTargetingParameters: updatedParameters,\n targetingParametersError,\n };\n });\n }\n\n handleEnabledToggle(event) {\n const provider = this.state.providerPrefs.find(p => p.id === event.target.dataset.provider);\n const userPrefInfo = this.state.userPrefs;\n\n const isUserEnabled = provider.id in userPrefInfo ? userPrefInfo[provider.id] : true;\n const isSystemEnabled = provider.enabled;\n const isEnabling = event.target.checked;\n\n if (isEnabling) {\n if (!isUserEnabled) {\n ASRouterUtils.sendMessage({type: \"SET_PROVIDER_USER_PREF\", data: {id: provider.id, value: true}});\n }\n if (!isSystemEnabled) {\n ASRouterUtils.sendMessage({type: \"ENABLE_PROVIDER\", data: provider.id});\n }\n } else {\n ASRouterUtils.sendMessage({type: \"DISABLE_PROVIDER\", data: provider.id});\n }\n\n this.setState({messageFilter: \"all\"});\n }\n\n handleUserPrefToggle(event) {\n const action = {type: \"SET_PROVIDER_USER_PREF\", data: {id: event.target.dataset.provider, value: event.target.checked}};\n ASRouterUtils.sendMessage(action);\n this.setState({messageFilter: \"all\"});\n }\n\n onChangeMessageFilter(event) {\n this.setState({messageFilter: event.target.value});\n }\n\n // Simulate a copy event that sets to clipboard all targeting paramters and values\n onCopyTargetingParams(event) {\n const stringTargetingParameters = {...this.state.stringTargetingParameters};\n for (const key of Object.keys(stringTargetingParameters)) {\n // If the value is not set the parameter will be lost when we stringify\n if (stringTargetingParameters[key] === undefined) {\n stringTargetingParameters[key] = null;\n }\n }\n const setClipboardData = e => {\n e.preventDefault();\n e.clipboardData.setData(\"text\", JSON.stringify(stringTargetingParameters, null, 2));\n document.removeEventListener(\"copy\", setClipboardData);\n this.setState({copiedToClipboard: true});\n };\n\n document.addEventListener(\"copy\", setClipboardData);\n\n document.execCommand(\"copy\");\n }\n\n // Copy all clipboard data to targeting parameters\n onPasteTargetingParams(event) {\n this.setState(({pasteFromClipboard}) => ({\n pasteFromClipboard: !pasteFromClipboard,\n newStringTargetingParameters: \"\",\n }));\n }\n\n onNewTargetingParams(event) {\n this.setState({newStringTargetingParameters: event.target.value});\n event.target.classList.remove(\"errorState\");\n this.refs.targetingParamsEval.innerText = \"\";\n\n try {\n const stringTargetingParameters = JSON.parse(event.target.value);\n this.setState({stringTargetingParameters});\n } catch (e) {\n event.target.classList.add(\"errorState\");\n this.refs.targetingParamsEval.innerText = e.message;\n }\n }\n\n renderMessageItem(msg) {\n const isCurrent = msg.id === this.state.lastMessageId;\n const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);\n const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;\n\n let itemClassName = \"message-item\";\n if (isCurrent) { itemClassName += \" current\"; }\n if (isBlocked) { itemClassName += \" blocked\"; }\n\n return (\n {msg.id} \n \n {isBlocked ? \"Unblock\" : \"Block\"} \n {isBlocked ? null : Show }\n ({impressions} impressions)\n \n \n {JSON.stringify(msg, null, 2)} \n \n );\n }\n\n renderMessages() {\n if (!this.state.messages) {\n return null;\n }\n const messagesToShow = this.state.messageFilter === \"all\" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter);\n return (\n {messagesToShow.map(msg => this.renderMessageItem(msg))}\n
);\n }\n\n renderMessageFilter() {\n if (!this.state.providers) {\n return null;\n }\n return (Show messages from \n all providers \n {this.state.providers.map(provider => ({provider.id} ))}\n
);\n }\n\n renderTableHead() {\n return (\n \n \n Provider ID \n Source \n Cohort \n Last Updated \n \n );\n }\n\n renderProviders() {\n const providersConfig = this.state.providerPrefs;\n const providerInfo = this.state.providers;\n const userPrefInfo = this.state.userPrefs;\n\n return ();\n }\n\n renderPasteModal() {\n if (!this.state.pasteFromClipboard) {\n return null;\n }\n const errors = this.refs.targetingParamsEval && this.refs.targetingParamsEval.innerText.length;\n return (\n \n \n \n );\n }\n\n renderTargetingParameters() {\n // There was no error and the result is truthy\n const success = this.state.evaluationStatus.success && !!this.state.evaluationStatus.result;\n const result = JSON.stringify(this.state.evaluationStatus.result, null, 2) || \"(Empty result)\";\n\n return ();\n }\n\n onChangeAttributionParameters(event) {\n const {name, value} = event.target;\n\n this.setState(({attributionParameters}) => {\n const updatedParameters = {...attributionParameters};\n updatedParameters[name] = value;\n\n return {attributionParameters: updatedParameters};\n });\n }\n\n setAttribution(e) {\n ASRouterUtils.sendMessage({type: \"FORCE_ATTRIBUTION\", data: this.state.attributionParameters});\n }\n\n renderPocketStory(story) {\n return (\n {story.guid} \n \n {JSON.stringify(story, null, 2)} \n \n );\n }\n\n renderPocketStories() {\n const {rows} = this.props.Sections.find(Section => Section.id === \"topstories\") || {};\n\n return (\n {rows && rows.map(story => this.renderPocketStory(story))}\n
);\n }\n\n renderDiscoveryStream() {\n const {config} = this.props.DiscoveryStream;\n\n return (\n
\n Enabled {config.enabled ? \"yes\" : \"no\"} \n Endpoint {config.endpoint || \"(empty)\"} \n
\n
);\n }\n\n renderAttributionParamers() {\n return (\n \n
Attribution Parameters \n
This forces the browser to set some attribution parameters, useful for testing the Return To AMO feature. Clicking on 'Force Attribution', with the default values in each field, will demo the Return To AMO flow with the addon called 'Iridium for Youtube'. If you wish to try different attribution parameters, enter them in the text boxes. If you wish to try a different addon with the Return To AMO flow, make sure the 'content' text box has the addon GUID, then click 'Force Attribution'.
\n
\n
);\n }\n\n getSection() {\n const [section] = this.props.location.routes;\n switch (section) {\n case \"targeting\":\n return (\n Targeting Utilities \n Expire Cache (This expires the cache in ASR Targeting for bookmarks and top sites)\n {this.renderTargetingParameters()}\n {this.renderAttributionParamers()}\n );\n case \"pocket\":\n return (\n Pocket \n {this.renderPocketStories()}\n );\n case \"ds\":\n return (\n Discovery Stream \n \n );\n default:\n return (\n Message Providers Restore default prefs \n {this.state.providers ? this.renderProviders() : null}\n Messages \n {this.renderMessageFilter()}\n {this.renderMessages()}\n {this.renderPasteModal()}\n );\n }\n }\n\n render() {\n return (\n
\n
\n AS Router Admin \n\n \n \n {\" \"}\n \n Need help using these tools? Check out our documentation \n \n
\n\n {this.getSection()}\n \n
);\n }\n}\n\nexport const _ASRouterAdmin = props => ( );\nexport const ASRouterAdmin = connect(state => ({Sections: state.Sections, DiscoveryStream: state.DiscoveryStream}))(_ASRouterAdmin);\n","import React from \"react\";\n\nexport class SimpleHashRouter extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onHashChange = this.onHashChange.bind(this);\n this.state = {hash: global.location.hash};\n }\n\n onHashChange() {\n this.setState({hash: global.location.hash});\n }\n\n componentWillMount() {\n global.addEventListener(\"hashchange\", this.onHashChange);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"hashchange\", this.onHashChange);\n }\n\n render() {\n const [, ...routes] = this.state.hash.replace(\"#asrouter\", \"\").split(\"-\");\n return React.cloneElement(this.props.children, {\n location: {\n hash: this.state.hash,\n routes,\n },\n });\n }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n * // Any sort of data needed to be passed around by actions.\n * payload: site.url,\n * // Primary button AlsoToMain action.\n * action: \"DELETE_HISTORY_URL\",\n * // Primary button USerEvent action.\n * userEvent: \"DELETE\",\n * // Array of locale ids to display.\n * message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n * // Text for primary button.\n * confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n constructor(props) {\n super(props);\n this._handleCancelBtn = this._handleCancelBtn.bind(this);\n this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n }\n\n _handleCancelBtn() {\n this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n }\n\n _handleConfirmBtn() {\n this.props.data.onConfirm.forEach(this.props.dispatch);\n }\n\n _renderModalMessage() {\n const message_body = this.props.data.body_string_id;\n\n if (!message_body) {\n return null;\n }\n\n return (\n {message_body.map(msg =>
)}\n );\n }\n\n render() {\n if (!this.props.visible) {\n return null;\n }\n\n return (\n
\n
\n \n {this.props.data.icon && }\n {this._renderModalMessage()}\n \n \n
\n
);\n }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport React from \"react\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class ImpressionStats extends React.PureComponent {\n // This checks if the given cards are the same as those in the last impression ping.\n // If so, it should not send the same impression ping again.\n _needsImpressionStats(cards) {\n if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n return true;\n }\n\n for (let i = 0; i < cards.length; i++) {\n if (cards[i].id !== this.impressionCardGuids[i]) {\n return true;\n }\n }\n\n return false;\n }\n\n _dispatchImpressionStats() {\n const {props} = this;\n const cards = props.rows;\n\n if (this._needsImpressionStats(cards)) {\n props.dispatch(ac.ImpressionStats({\n source: props.source.toUpperCase(),\n tiles: cards.map(link => ({id: link.id})),\n }));\n this.impressionCardGuids = cards.map(link => link.id);\n }\n }\n\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionStatsOrAddListener() {\n const {props} = this;\n\n if (!props.dispatch) {\n return;\n }\n\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n this._onVisibilityChange = () => {\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.rows.length) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.rows.length && this.props.rows !== prevProps.rows) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nImpressionStats.defaultProps = {\n document: global.document,\n rows: [],\n source: \"\",\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SearchShortcutsForm} from \"./SearchShortcutsForm\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n if (link.customScreenshotURL) {\n return \"custom_screenshot\";\n }\n if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n return \"tippytop\";\n }\n if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n return \"rich_icon\";\n }\n if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n return \"screenshot_with_icon\";\n }\n if (link.screenshot) {\n return \"screenshot\";\n }\n return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n const countTopSitesTypes = (acc, link) => {\n acc[topSiteIconType(link)]++;\n return acc;\n };\n\n return topSites.reduce(countTopSitesTypes, {\n \"custom_screenshot\": 0,\n \"screenshot_with_icon\": 0,\n \"screenshot\": 0,\n \"tippytop\": 0,\n \"rich_icon\": 0,\n \"no_image\": 0,\n });\n}\n\nexport class _TopSites extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEditFormClose = this.onEditFormClose.bind(this);\n this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);\n }\n\n /**\n * Dispatch session statistics about the quality of TopSites icons and pinned count.\n */\n _dispatchTopSitesStats() {\n const topSites = this._getVisibleTopSites();\n const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length;\n // Dispatch telemetry event with the count of TopSites images types.\n this.props.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {\n topsites_icon_stats: topSitesIconsStats,\n topsites_pinned: topSitesPinned,\n topsites_search_shortcuts: searchShortcuts,\n },\n }));\n }\n\n /**\n * Return the TopSites that are visible based on prefs and window width.\n */\n _getVisibleTopSites() {\n // We hide 2 sites per row when not in the wide layout.\n let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n // $break-point-widest = 1072px (from _variables.scss)\n if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n sitesPerRow -= 2;\n }\n return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n }\n\n componentDidUpdate() {\n this._dispatchTopSitesStats();\n }\n\n componentDidMount() {\n this._dispatchTopSitesStats();\n }\n\n onEditFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"TOP_SITES_EDIT_CLOSE\",\n }));\n this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n }\n\n onSearchShortcutsFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_CLOSE\",\n }));\n this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});\n }\n\n render() {\n const {props} = this;\n const {editForm, showSearchShortcutsForm} = props.TopSites;\n const extraMenuOptions = [\"AddTopSite\"];\n if (props.Prefs.values[\"improvesearch.topSiteSearchShortcuts\"]) {\n extraMenuOptions.push(\"AddSearchShortcut\");\n }\n\n return (\n \n \n \n {editForm &&\n
\n }\n {showSearchShortcutsForm &&\n
\n }\n
\n \n );\n }\n}\n\nexport const TopSites = connect(state => ({\n TopSites: state.TopSites,\n Prefs: state.Prefs,\n TopSitesRows: state.Prefs.values.topSitesRows,\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite\nexport const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"Separator\", \"BlockUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class _CollapsibleSection extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBodyMount = this.onBodyMount.bind(this);\n this.onHeaderClick = this.onHeaderClick.bind(this);\n this.onTransitionEnd = this.onTransitionEnd.bind(this);\n this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n this.setContextMenuButtonRef = this.setContextMenuButtonRef.bind(this);\n }\n\n componentWillMount() {\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n }\n\n componentWillUpdate(nextProps) {\n // Check if we're about to go from expanded to collapsed\n if (!this.props.collapsed && nextProps.collapsed) {\n // This next line forces a layout flush of the section body, which has a\n // max-height style set, so that the upcoming collapse animation can\n // animate from that height to the collapsed height. Without this, the\n // update is coalesced and there's no animation from no-max-height to 0.\n this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n }\n }\n\n setContextMenuButtonRef(element) {\n this.contextMenuButtonRef = element;\n }\n\n componentDidMount() {\n this.contextMenuButtonRef.addEventListener(\"mouseenter\", this.onMenuButtonMouseEnter);\n this.contextMenuButtonRef.addEventListener(\"mouseleave\", this.onMenuButtonMouseLeave);\n }\n\n componentWillUnmount() {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n this.contextMenuButtonRef.removeEventListener(\"mouseenter\", this.onMenuButtonMouseEnter);\n this.contextMenuButtonRef.removeEventListener(\"mouseleave\", this.onMenuButtonMouseLeave);\n }\n\n enableOrDisableAnimation() {\n // Only animate the collapse/expand for visible tabs.\n const visible = this.props.document.visibilityState === VISIBLE;\n if (this.state.enableAnimation !== visible) {\n this.setState({enableAnimation: visible});\n }\n }\n\n onBodyMount(node) {\n this.sectionBody = node;\n }\n\n onHeaderClick() {\n // If this.sectionBody is unset, it means that we're in some sort of error\n // state, probably displaying the error fallback, so we won't be able to\n // compute the height, and we don't want to persist the preference.\n // If props.collapsed is undefined handler shouldn't do anything.\n if (!this.sectionBody || this.props.collapsed === undefined) {\n return;\n }\n\n // Get the current height of the body so max-height transitions can work\n this.setState({\n isAnimating: true,\n maxHeight: `${this._getSectionBodyHeight()}px`,\n });\n const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n this.props.dispatch(action);\n this.props.dispatch(ac.UserEvent({\n event: userEvent,\n source: this.props.source,\n }));\n }\n\n _getSectionBodyHeight() {\n const div = this.sectionBody;\n if (div.style.display === \"none\") {\n // If the div isn't displayed, we can't get it's height. So we display it\n // to get the height (it doesn't show up because max-height is set to 0px\n // in CSS). We don't undo this because we are about to expand the section.\n div.style.display = \"block\";\n }\n return div.scrollHeight;\n }\n\n onTransitionEnd(event) {\n // Only update the animating state for our own transition (not a child's)\n if (event.target === event.currentTarget) {\n this.setState({isAnimating: false});\n }\n }\n\n renderIcon() {\n const {icon} = this.props;\n if (icon && icon.startsWith(\"moz-extension://\")) {\n return ;\n }\n return ;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({showContextMenu: true});\n }\n\n onMenuButtonMouseEnter() {\n this.setState({menuButtonHover: true});\n }\n\n onMenuButtonMouseLeave() {\n this.setState({menuButtonHover: false});\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n render() {\n const isCollapsible = this.props.collapsed !== undefined;\n const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n const {id, eventSource, collapsed, learnMore, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n const active = menuButtonHover || showContextMenu;\n let bodyStyle;\n if (isAnimating && !collapsed) {\n bodyStyle = {maxHeight};\n } else if (!isAnimating && collapsed) {\n bodyStyle = {display: \"none\"};\n }\n return (\n \n \n
\n \n \n {this.renderIcon()}\n {getFormattedMessage(title)}\n \n \n {isCollapsible && }\n \n \n {learnMore &&\n \n \n \n \n \n }\n \n \n \n
\n \n \n \n \n \n {showContextMenu &&\n \n }\n
\n
\n \n \n {this.props.children}\n
\n \n \n );\n }\n}\n\n_CollapsibleSection.defaultProps = {\n document: global.document || {\n addEventListener: () => {},\n removeEventListener: () => {},\n visibilityState: \"hidden\",\n },\n Prefs: {values: {}},\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n constructor(props) {\n super(props);\n this.windowObj = this.props.windowObj || window;\n this.onClick = this.onClick.bind(this);\n }\n\n /**\n * Since we only get here if part of the page has crashed, do a\n * forced reload to give us the best chance at recovering.\n */\n onClick() {\n this.windowObj.location.reload(true);\n }\n\n render() {\n const defaultClass = \"as-error-fallback\";\n let className;\n if (\"className\" in this.props) {\n className = `${this.props.className} ${defaultClass}`;\n } else {\n className = defaultClass;\n }\n\n // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n return (\n \n
\n \n
\n
\n \n \n \n \n
\n );\n }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {hasError: false};\n }\n\n componentDidCatch(error, info) {\n this.setState({hasError: true});\n }\n\n render() {\n if (!this.state.hasError) {\n return (this.props.children);\n }\n\n return ;\n }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n\n const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n // Prepend custom options and a separator\n if (props.extraOptions) {\n propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n }\n // Insert privacy notice before the last option (\"ManageSection\")\n if (props.privacyNoticeURL) {\n propOptions.splice(-1, 0, \"PrivacyNotice\");\n }\n\n const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n const {action, id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n props.dispatch(ac.UserEvent({\n event: userEvent,\n source: props.source,\n }));\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ( );\n }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n constructor(props) {\n super(props);\n this.hideContext = this.hideContext.bind(this);\n this.onClick = this.onClick.bind(this);\n }\n\n hideContext() {\n this.props.onUpdate(false);\n }\n\n componentDidMount() {\n setTimeout(() => {\n global.addEventListener(\"click\", this.hideContext);\n }, 0);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"click\", this.hideContext);\n }\n\n onClick(event) {\n // Eat all clicks on the context menu so they don't bubble up to window.\n // This prevents the context menu from closing when clicking disabled items\n // or the separators.\n event.stopPropagation();\n }\n\n render() {\n return (\n \n {this.props.options.map((option, i) => (option.type === \"separator\" ?\n ( ) :\n (option.type !== \"empty\" && )\n ))}\n \n );\n }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n }\n\n onClick() {\n this.props.hideContext();\n this.props.option.onClick();\n }\n\n onKeyDown(event) {\n const {option} = this.props;\n switch (event.key) {\n case \"Tab\":\n // tab goes down in context menu, shift + tab goes up in context menu\n // if we're on the last item, one more tab will close the context menu\n // similarly, if we're on the first item, one more shift + tab will close it\n if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n this.props.hideContext();\n }\n break;\n case \"Enter\":\n this.props.hideContext();\n option.onClick();\n break;\n }\n }\n\n render() {\n const {option} = this.props;\n return (\n \n \n {option.icon && }\n {option.label}\n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n MoveUp: section => ({\n id: \"section_menu_action_move_up\",\n icon: \"arrowhead-up\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: -1},\n }),\n userEvent: \"MENU_MOVE_UP\",\n disabled: !!section.isFirst,\n }),\n MoveDown: section => ({\n id: \"section_menu_action_move_down\",\n icon: \"arrowhead-down\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: +1},\n }),\n userEvent: \"MENU_MOVE_DOWN\",\n disabled: !!section.isLast,\n }),\n RemoveSection: section => ({\n id: \"section_menu_action_remove_section\",\n icon: \"dismiss\",\n action: ac.SetPref(section.showPrefName, false),\n userEvent: \"MENU_REMOVE\",\n }),\n CollapseSection: section => ({\n id: \"section_menu_action_collapse_section\",\n icon: \"minimize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n userEvent: \"MENU_COLLAPSE\",\n }),\n ExpandSection: section => ({\n id: \"section_menu_action_expand_section\",\n icon: \"maximize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n userEvent: \"MENU_EXPAND\",\n }),\n ManageSection: section => ({\n id: \"section_menu_action_manage_section\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n userEvent: \"MENU_MANAGE\",\n }),\n ManageWebExtension: section => ({\n id: \"section_menu_action_manage_webext\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id}),\n }),\n AddTopSite: section => ({\n id: \"section_menu_action_add_topsite\",\n icon: \"add\",\n action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n userEvent: \"MENU_ADD_TOPSITE\",\n }),\n AddSearchShortcut: section => ({\n id: \"section_menu_action_add_search_engine\",\n icon: \"search\",\n action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},\n userEvent: \"MENU_ADD_SEARCH\",\n }),\n PrivacyNotice: section => ({\n id: \"section_menu_action_privacy_notice\",\n icon: \"info\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: section.privacyNoticeURL},\n }),\n userEvent: \"MENU_PRIVACY_NOTICE\",\n }),\n CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)),\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n constructor(props) {\n super(props);\n // Just for test dependency injection:\n this.perfSvc = this.props.perfSvc || perfSvc;\n\n this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n this._reportMissingData = false;\n this._timestampHandled = false;\n this._recordedFirstRender = false;\n }\n\n componentDidMount() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n componentDidUpdate() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n /**\n * Call the given callback after the upcoming frame paints.\n *\n * @note Both setTimeout and requestAnimationFrame are throttled when the page\n * is hidden, so this callback may get called up to a second or so after the\n * requestAnimationFrame \"paint\" for hidden tabs.\n *\n * Newtabs hidden while loading will presumably be fairly rare (other than\n * preloaded tabs, which we will be filtering out on the server side), so such\n * cases should get lost in the noise.\n *\n * If we decide that it's important to find out when something that's hidden\n * has \"painted\", however, another option is to post a message to this window.\n * That should happen even faster than setTimeout, and, at least as of this\n * writing, it's not throttled in hidden windows in Firefox.\n *\n * @param {Function} callback\n *\n * @returns void\n */\n _afterFramePaint(callback) {\n requestAnimationFrame(() => setTimeout(callback, 0));\n }\n\n _maybeSendBadStateEvent() {\n // Follow up bugs:\n // https://github.com/mozilla/activity-stream/issues/3691\n if (!this.props.initialized) {\n // Remember to report back when data is available.\n this._reportMissingData = true;\n } else if (this._reportMissingData) {\n this._reportMissingData = false;\n // Report how long it took for component to become initialized.\n this._sendBadStateEvent();\n }\n }\n\n _maybeSendPaintedEvent() {\n // If we've already handled a timestamp, don't do it again.\n if (this._timestampHandled || !this.props.initialized) {\n return;\n }\n\n // And if we haven't, we're doing so now, so remember that. Even if\n // something goes wrong in the callback, we can't try again, as we'd be\n // sending back the wrong data, and we have to do it here, so that other\n // calls to this method while waiting for the next frame won't also try to\n // handle it.\n this._timestampHandled = true;\n this._afterFramePaint(this._sendPaintedEvent);\n }\n\n /**\n * Triggered by call to render. Only first call goes through due to\n * `_recordedFirstRender`.\n */\n _ensureFirstRenderTsRecorded() {\n // Used as t0 for recording how long component took to initialize.\n if (!this._recordedFirstRender) {\n this._recordedFirstRender = true;\n // topsites_first_render_ts, highlights_first_render_ts.\n const key = `${this.props.id}_first_render_ts`;\n this.perfSvc.mark(key);\n }\n }\n\n /**\n * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n * of how much longer the data took to be ready for display than it would\n * have been the ideal case.\n * https://github.com/mozilla/ping-centre/issues/98\n */\n _sendBadStateEvent() {\n // highlights_data_ready_ts, topsites_data_ready_ts.\n const dataReadyKey = `${this.props.id}_data_ready_ts`;\n this.perfSvc.mark(dataReadyKey);\n\n try {\n const firstRenderKey = `${this.props.id}_first_render_ts`;\n // value has to be Int32.\n const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n // highlights_data_late_by_ms, topsites_data_late_by_ms.\n data: {[`${this.props.id}_data_late_by_ms`]: value},\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true.\n }\n }\n\n _sendPaintedEvent() {\n // Record first_painted event but only send if topsites.\n if (this.props.id !== \"topsites\") {\n return;\n }\n\n // topsites_first_painted_ts.\n const key = `${this.props.id}_first_painted_ts`;\n this.perfSvc.mark(key);\n\n try {\n const data = {};\n data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data,\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up, and should continue\n // to set this._timestampHandled to avoid going through this again.\n }\n }\n\n render() {\n if (RECORDED_SECTIONS.includes(this.props.id)) {\n this._ensureFirstRenderTsRecorded();\n this._maybeSendBadStateEvent();\n }\n return this.props.children;\n }\n}\n","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n // Borrow the high-resolution timer from the hidden window....\n usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n // we must be running in content space\n // eslint-disable-next-line no-undef\n usablePerfObj = performance;\n} else {\n // This is a dummy object so this file doesn't crash in the node prerendering\n // task.\n usablePerfObj = {\n now() {},\n mark() {},\n };\n}\n\nfunction _PerfService(options) {\n // For testing, so that we can use a fake Window.performance object with\n // known state.\n if (options && options.performanceObj) {\n this._perf = options.performanceObj;\n } else {\n this._perf = usablePerfObj;\n }\n}\n\n_PerfService.prototype = {\n /**\n * Calls the underlying mark() method on the appropriate Window.performance\n * object to add a mark with the given name to the appropriate performance\n * timeline.\n *\n * @param {String} name the name to give the current mark\n * @return {void}\n */\n mark: function mark(str) {\n this._perf.mark(str);\n },\n\n /**\n * Calls the underlying getEntriesByName on the appropriate Window.performance\n * object.\n *\n * @param {String} name\n * @param {String} type eg \"mark\"\n * @return {Array} Performance* objects\n */\n getEntriesByName: function getEntriesByName(name, type) {\n return this._perf.getEntriesByName(name, type);\n },\n\n /**\n * The timeOrigin property from the appropriate performance object.\n * Used to ensure that timestamps from the add-on code and the content code\n * are comparable.\n *\n * @note If this is called from a context without a window\n * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n * window, which appears to be the first created window (and thus\n * timeOrigin) in the browser. Note also, however, there is also a private\n * hidden window, presumably for private browsing, which appears to be\n * created dynamically later. Exactly how/when that shows up needs to be\n * investigated.\n *\n * @return {Number} A double of milliseconds with a precision of 0.5us.\n */\n get timeOrigin() {\n return this._perf.timeOrigin;\n },\n\n /**\n * Returns the \"absolute\" version of performance.now(), i.e. one that\n * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n * be comparable across both chrome and content.\n *\n * @return {Number}\n */\n absNow: function absNow() {\n return this.timeOrigin + this._perf.now();\n },\n\n /**\n * This returns the absolute startTime from the most recent performance.mark()\n * with the given name.\n *\n * @param {String} name the name to lookup the start time for\n *\n * @return {Number} the returned start time, as a DOMHighResTimeStamp\n *\n * @throws {Error} \"No Marks with the name ...\" if none are available\n *\n * @note Always surround calls to this by try/catch. Otherwise your code\n * may fail when the `privacy.resistFingerprinting` pref is true. When\n * this pref is set, all attempts to get marks will likely fail, which will\n * cause this method to throw.\n *\n * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n * for more info.\n */\n getMostRecentAbsMarkStartByName(name) {\n let entries = this.getEntriesByName(name, \"mark\");\n\n if (!entries.length) {\n throw new Error(`No marks with the name ${name}`);\n }\n\n let mostRecentEntry = entries[entries.length - 1];\n return this._perf.timeOrigin + mostRecentEntry.startTime;\n },\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\n\nclass SelectableSearchShortcut extends React.PureComponent {\n render() {\n const {shortcut, selected} = this.props;\n const imageStyle = {backgroundImage: `url(\"${shortcut.tippyTopIcon}\")`};\n return (\n \n
\n
\n \n
\n \n \n {shortcut.keyword} \n
\n \n
\n \n
\n );\n }\n}\n\nexport class SearchShortcutsForm extends React.PureComponent {\n constructor(props) {\n super(props);\n this.handleChange = this.handleChange.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n this.onSaveButtonClick = this.onSaveButtonClick.bind(this);\n\n // clone the shortcuts and add them to the state so we can add isSelected property\n const shortcuts = [];\n const {rows, searchShortcuts} = props.TopSites;\n searchShortcuts.forEach(shortcut => {\n shortcuts.push({\n ...shortcut,\n isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword),\n });\n });\n this.state = {shortcuts};\n }\n\n handleChange(event) {\n const {target} = event;\n const {name, checked} = target;\n this.setState(prevState => {\n const shortcuts = prevState.shortcuts.slice();\n let shortcut = shortcuts.find(({keyword}) => keyword === name);\n shortcut.isSelected = checked;\n return {shortcuts};\n });\n }\n\n onCancelButtonClick(ev) {\n ev.preventDefault();\n this.props.onClose();\n }\n\n onSaveButtonClick(ev) {\n ev.preventDefault();\n\n // Check if there were any changes and act accordingly\n const {rows} = this.props.TopSites;\n const pinQueue = [];\n const unpinQueue = [];\n this.state.shortcuts.forEach(shortcut => {\n const alreadyPinned = rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword);\n if (shortcut.isSelected && !alreadyPinned) {\n pinQueue.push(this._searchTopSite(shortcut));\n } else if (!shortcut.isSelected && alreadyPinned) {\n unpinQueue.push({url: alreadyPinned.url, searchVendor: shortcut.shortURL});\n }\n });\n\n // Tell the feed to do the work.\n this.props.dispatch(ac.OnlyToMain({\n type: at.UPDATE_PINNED_SEARCH_SHORTCUTS,\n data: {\n addedShortcuts: pinQueue,\n deletedShortcuts: unpinQueue,\n },\n }));\n\n // Send the Telemetry pings.\n pinQueue.forEach(shortcut => {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_ADD\",\n value: {search_vendor: shortcut.searchVendor},\n }));\n });\n unpinQueue.forEach(shortcut => {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_DELETE\",\n value: {search_vendor: shortcut.searchVendor},\n }));\n });\n\n this.props.onClose();\n }\n\n _searchTopSite(shortcut) {\n return {\n url: shortcut.url,\n searchTopSite: true,\n label: shortcut.keyword,\n searchVendor: shortcut.shortURL,\n };\n }\n\n render() {\n return (\n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n MIN_CORNER_FAVICON_SIZE,\n MIN_RICH_FAVICON_SIZE,\n TOP_SITES_CONTEXT_MENU_OPTIONS,\n TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS,\n TOP_SITES_SOURCE,\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {screenshotImage: null};\n this.onDragEvent = this.onDragEvent.bind(this);\n this.onKeyPress = this.onKeyPress.bind(this);\n }\n\n /*\n * Helper to determine whether the drop zone should allow a drop. We only allow\n * dropping top sites for now.\n */\n _allowDrop(e) {\n return e.dataTransfer.types.includes(\"text/topsite-index\");\n }\n\n onDragEvent(event) {\n switch (event.type) {\n case \"click\":\n // Stop any link clicks if we started any dragging\n if (this.dragged) {\n event.preventDefault();\n }\n break;\n case \"dragstart\":\n this.dragged = true;\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n event.target.blur();\n this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n break;\n case \"dragend\":\n this.props.onDragEvent(event);\n break;\n case \"dragenter\":\n case \"dragover\":\n case \"drop\":\n if (this._allowDrop(event)) {\n event.preventDefault();\n this.props.onDragEvent(event, this.props.index);\n }\n break;\n case \"mousedown\":\n // Block the scroll wheel from appearing for middle clicks on search top sites\n if (event.button === 1 && this.props.link.searchTopSite) {\n event.preventDefault();\n }\n // Reset at the first mouse event of a potential drag\n this.dragged = false;\n break;\n }\n }\n\n /**\n * Helper to obtain the next state based on nextProps and prevState.\n *\n * NOTE: Rename this method to getDerivedStateFromProps when we update React\n * to >= 16.3. We will need to update tests as well. We cannot rename this\n * method to getDerivedStateFromProps now because there is a mismatch in\n * the React version that we are using for both testing and production.\n * (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n *\n * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n */\n static getNextStateFromProps(nextProps, prevState) {\n const {screenshot} = nextProps.link;\n const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n if (imageInState) {\n return null;\n }\n\n // Since image was updated, attempt to revoke old image blob URL, if it exists.\n ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillMount() {\n const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillReceiveProps(nextProps) {\n const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n componentWillUnmount() {\n ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n }\n\n onKeyPress(event) {\n // If we have tabbed to a search shortcut top site, and we click 'enter',\n // we should execute the onClick function. This needs to be added because\n // search top sites are anchor tags without an href. See bug 1483135\n if (this.props.link.searchTopSite && event.key === \"Enter\") {\n this.props.onClick(event);\n }\n }\n\n render() {\n const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}${link.searchTopSite ? \" search-shortcut\" : \"\"}`;\n const {tippyTopIcon, faviconSize} = link;\n const [letterFallback] = title;\n let imageClassName;\n let imageStyle;\n let showSmallFavicon = false;\n let smallFaviconStyle;\n let smallFaviconFallback;\n let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n smallFaviconFallback = false;\n } else if (link.searchTopSite) {\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: `url(${tippyTopIcon})`,\n };\n smallFaviconStyle = {backgroundImage: `url(${tippyTopIcon})`};\n } else if (link.customScreenshotURL) {\n // assume high quality custom screenshot and use rich icon styles and class names\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\",\n };\n } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n // styles and class names for top sites with rich icons\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: `url(${tippyTopIcon || link.favicon})`,\n };\n } else {\n // styles and class names for top sites with screenshot + small icon in top left corner\n imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n // only show a favicon in top left if it's greater than 16x16\n if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n showSmallFavicon = true;\n smallFaviconStyle = {backgroundImage: `url(${link.favicon})`};\n } else if (hasScreenshotImage) {\n // Don't show a small favicon if there is no screenshot, because that\n // would result in two fallback icons\n showSmallFavicon = true;\n smallFaviconFallback = true;\n }\n }\n let draggableProps = {};\n if (isDraggable) {\n draggableProps = {\n onClick: this.onDragEvent,\n onDragEnd: this.onDragEvent,\n onDragStart: this.onDragEvent,\n onMouseDown: this.onDragEvent,\n };\n }\n return (\n \n );\n }\n}\nTopSiteLink.defaultProps = {\n title: \"\",\n link: {},\n isDraggable: true,\n};\n\nexport class TopSite extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {showContextMenu: false};\n this.onLinkClick = this.onLinkClick.bind(this);\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n }\n\n /**\n * Report to telemetry additional information about the item.\n */\n _getTelemetryInfo() {\n const value = {icon_type: this.props.link.iconType};\n // Filter out \"not_pinned\" type for being the default\n if (this.props.link.isPinned) {\n value.card_type = \"pinned\";\n }\n if (this.props.link.searchTopSite) {\n // Set the card_type as \"search\" regardless of its pinning status\n value.card_type = \"search\";\n value.search_vendor = this.props.link.hostname;\n }\n return {value};\n }\n\n userEvent(event) {\n this.props.dispatch(ac.UserEvent(Object.assign({\n event,\n source: TOP_SITES_SOURCE,\n action_position: this.props.index,\n }, this._getTelemetryInfo())));\n }\n\n onLinkClick(event) {\n this.userEvent(\"CLICK\");\n\n // Specially handle a top site link click for \"typed\" frecency bonus as\n // specified as a property on the link.\n event.preventDefault();\n const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n if (!this.props.link.searchTopSite) {\n this.props.dispatch(ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n }));\n } else {\n this.props.dispatch(ac.OnlyToMain({\n type: at.FILL_SEARCH_TERM,\n data: {label: this.props.link.label},\n }));\n }\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.props.onActivate(this.props.index);\n this.setState({showContextMenu: true});\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n render() {\n const {props} = this;\n const {link} = props;\n const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n const title = link.label || link.hostname;\n return (\n \n \n \n \n \n \n {isContextMenuOpen &&\n \n }\n
\n );\n }\n}\nTopSite.defaultProps = {\n link: {},\n onActivate() {},\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEditButtonClick = this.onEditButtonClick.bind(this);\n }\n\n onEditButtonClick() {\n this.props.dispatch(\n {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n static get DEFAULT_STATE() {\n return {\n activeIndex: null,\n draggedIndex: null,\n draggedSite: null,\n draggedTitle: null,\n topSitesPreview: null,\n };\n }\n\n constructor(props) {\n super(props);\n this.state = _TopSiteList.DEFAULT_STATE;\n this.onDragEvent = this.onDragEvent.bind(this);\n this.onActivate = this.onActivate.bind(this);\n }\n\n componentWillReceiveProps(nextProps) {\n if (this.state.draggedSite) {\n const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n // We got the new order from the redux store via props. We can clear state now.\n this.setState(_TopSiteList.DEFAULT_STATE);\n }\n }\n }\n\n userEvent(event, index) {\n this.props.dispatch(ac.UserEvent({\n event,\n source: TOP_SITES_SOURCE,\n action_position: index,\n }));\n }\n\n onDragEvent(event, index, link, title) {\n switch (event.type) {\n case \"dragstart\":\n this.dropped = false;\n this.setState({\n draggedIndex: index,\n draggedSite: link,\n draggedTitle: title,\n activeIndex: null,\n });\n this.userEvent(\"DRAG\", index);\n break;\n case \"dragend\":\n if (!this.dropped) {\n // If there was no drop event, reset the state to the default.\n this.setState(_TopSiteList.DEFAULT_STATE);\n }\n break;\n case \"dragenter\":\n if (index === this.state.draggedIndex) {\n this.setState({topSitesPreview: null});\n } else {\n this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n }\n break;\n case \"drop\":\n if (index !== this.state.draggedIndex) {\n this.dropped = true;\n this.props.dispatch(ac.AlsoToMain({\n type: at.TOP_SITES_INSERT,\n data: {\n site: {\n url: this.state.draggedSite.url,\n label: this.state.draggedTitle,\n customScreenshotURL: this.state.draggedSite.customScreenshotURL,\n // Only if the search topsites experiment is enabled\n ...(this.state.draggedSite.searchTopSite && {searchTopSite: true}),\n },\n index,\n draggedFromIndex: this.state.draggedIndex,\n },\n }));\n this.userEvent(\"DROP\", index);\n }\n break;\n }\n }\n\n _getTopSites() {\n // Make a copy of the sites to truncate or extend to desired length\n let topSites = this.props.TopSites.rows.slice();\n topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n return topSites;\n }\n\n /**\n * Make a preview of the topsites that will be the result of dropping the currently\n * dragged site at the specified index.\n */\n _makeTopSitesPreview(index) {\n const topSites = this._getTopSites();\n topSites[this.state.draggedIndex] = null;\n const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n const unpinned = topSites.filter(site => site && !site.isPinned);\n const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n if (!pinnedOnly[index]) {\n pinnedOnly[index] = siteToInsert;\n } else {\n // Find the hole to shift the pinned site(s) towards. We shift towards the\n // hole left by the site being dragged.\n let holeIndex = index;\n const indexStep = index > this.state.draggedIndex ? -1 : 1;\n while (pinnedOnly[holeIndex]) {\n holeIndex += indexStep;\n }\n\n // Shift towards the hole.\n const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n while (holeIndex !== index) {\n const nextIndex = holeIndex + shiftingStep;\n pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n holeIndex = nextIndex;\n }\n pinnedOnly[index] = siteToInsert;\n }\n\n // Fill in the remaining holes with unpinned sites.\n const preview = pinnedOnly;\n for (let i = 0; i < preview.length; i++) {\n if (!preview[i]) {\n preview[i] = unpinned.shift() || null;\n }\n }\n\n return preview;\n }\n\n onActivate(index) {\n this.setState({activeIndex: index});\n }\n\n render() {\n const {props} = this;\n const topSites = this.state.topSitesPreview || this._getTopSites();\n const topSitesUI = [];\n const commonProps = {\n onDragEvent: this.onDragEvent,\n dispatch: props.dispatch,\n intl: props.intl,\n };\n // We assign a key to each placeholder slot. We need it to be independent\n // of the slot index (i below) so that the keys used stay the same during\n // drag and drop reordering and the underlying DOM nodes are reused.\n // This mostly (only?) affects linux so be sure to test on linux before changing.\n let holeIndex = 0;\n\n // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n // .hide-for-narrow to hide in CSS via @media query.\n const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n for (let i = 0, l = topSites.length; i < l; i++) {\n const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n const slotProps = {\n key: link ? link.url : holeIndex++,\n index: i,\n };\n if (i >= maxNarrowVisibleIndex) {\n slotProps.className = \"hide-for-narrow\";\n }\n topSitesUI.push(!link ? (\n \n ) : (\n \n ));\n }\n return ();\n }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n // Handle special case of default site\n const propOptions = (!site.isDefault || site.searchTopSite) ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n const {action, impression, id, string_id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id: string_id || id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n const userEventData = Object.assign({\n event: userEvent,\n source,\n action_position: index,\n }, siteInfo);\n props.dispatch(ac.UserEvent(userEventData));\n }\n if (impression && props.shouldSendImpressionStats) {\n props.dispatch(impression);\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ( );\n }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n id: \"menu_action_open_private_window\",\n icon: \"new-window-private\",\n action: ac.OnlyToMain({\n type: at.OPEN_PRIVATE_WINDOW,\n data: {url: site.url, referrer: site.referrer},\n }),\n userEvent: \"OPEN_PRIVATE_WINDOW\",\n});\n\nexport const GetPlatformString = platform => {\n switch (platform) {\n case \"win\":\n return \"menu_action_show_file_windows\";\n case \"macosx\":\n return \"menu_action_show_file_mac_os\";\n case \"linux\":\n return \"menu_action_show_file_linux\";\n default:\n return \"menu_action_show_file_default\";\n }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n EmptyItem: () => ({type: \"empty\"}),\n RemoveBookmark: site => ({\n id: \"menu_action_remove_bookmark\",\n icon: \"bookmark-added\",\n action: ac.AlsoToMain({\n type: at.DELETE_BOOKMARK_BY_ID,\n data: site.bookmarkGuid,\n }),\n userEvent: \"BOOKMARK_DELETE\",\n }),\n AddBookmark: site => ({\n id: \"menu_action_bookmark\",\n icon: \"bookmark-hollow\",\n action: ac.AlsoToMain({\n type: at.BOOKMARK_URL,\n data: {url: site.url, title: site.title, type: site.type},\n }),\n userEvent: \"BOOKMARK_ADD\",\n }),\n OpenInNewWindow: site => ({\n id: \"menu_action_open_new_window\",\n icon: \"new-window\",\n action: ac.AlsoToMain({\n type: at.OPEN_NEW_WINDOW,\n data: {\n referrer: site.referrer,\n typedBonus: site.typedBonus,\n url: site.url,\n },\n }),\n userEvent: \"OPEN_NEW_WINDOW\",\n }),\n BlockUrl: (site, index, eventSource) => ({\n id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.AlsoToMain({\n type: at.BLOCK_URL,\n data: {url: site.open_url || site.url, pocket_id: site.pocket_id},\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n block: 0,\n tiles: [{id: site.guid, pos: index}],\n }),\n userEvent: \"BLOCK\",\n }),\n\n // This is an option for web extentions which will result in remove items from\n // memory and notify the web extenion, rather than using the built-in block list.\n WebExtDismiss: (site, index, eventSource) => ({\n id: \"menu_action_webext_dismiss\",\n string_id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n source: eventSource,\n url: site.url,\n action_position: index,\n }),\n }),\n DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n id: \"menu_action_delete\",\n icon: \"delete\",\n action: {\n type: at.DIALOG_OPEN,\n data: {\n onConfirm: [\n ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo)),\n ],\n eventSource,\n body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n confirm_button_string_id: \"menu_action_delete\",\n cancel_button_string_id: \"topsites_form_cancel_button\",\n icon: \"modal-delete\",\n },\n },\n userEvent: \"DIALOG_OPEN\",\n }),\n ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n id: GetPlatformString(platform),\n icon: \"search\",\n action: ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n OpenFile: site => ({\n id: \"menu_action_open_file\",\n icon: \"open-file\",\n action: ac.OnlyToMain({\n type: at.OPEN_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n CopyDownloadLink: site => ({\n id: \"menu_action_copy_download_link\",\n icon: \"copy\",\n action: ac.OnlyToMain({\n type: at.COPY_DOWNLOAD_LINK,\n data: {url: site.url},\n }),\n }),\n GoToDownloadPage: site => ({\n id: \"menu_action_go_to_download_page\",\n icon: \"download\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: site.referrer},\n }),\n disabled: !site.referrer,\n }),\n RemoveDownload: site => ({\n id: \"menu_action_remove_download\",\n icon: \"delete\",\n action: ac.OnlyToMain({\n type: at.REMOVE_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n PinTopSite: ({url, searchTopSite, label}, index) => ({\n id: \"menu_action_pin\",\n icon: \"pin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_PIN,\n data: {\n site: {\n url,\n ...(searchTopSite && {searchTopSite, label}),\n },\n index,\n },\n }),\n userEvent: \"PIN\",\n }),\n UnpinTopSite: site => ({\n id: \"menu_action_unpin\",\n icon: \"unpin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_UNPIN,\n data: {site: {url: site.url}},\n }),\n userEvent: \"UNPIN\",\n }),\n SaveToPocket: (site, index, eventSource) => ({\n id: \"menu_action_save_to_pocket\",\n icon: \"pocket-save\",\n action: ac.AlsoToMain({\n type: at.SAVE_TO_POCKET,\n data: {site: {url: site.url, title: site.title}},\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n pocket: 0,\n tiles: [{id: site.guid, pos: index}],\n }),\n userEvent: \"SAVE_TO_POCKET\",\n }),\n DeleteFromPocket: site => ({\n id: \"menu_action_delete_pocket\",\n icon: \"delete\",\n action: ac.AlsoToMain({\n type: at.DELETE_FROM_POCKET,\n data: {pocket_id: site.pocket_id},\n }),\n userEvent: \"DELETE_FROM_POCKET\",\n }),\n ArchiveFromPocket: site => ({\n id: \"menu_action_archive_pocket\",\n icon: \"check\",\n action: ac.AlsoToMain({\n type: at.ARCHIVE_FROM_POCKET,\n data: {pocket_id: site.pocket_id},\n }),\n userEvent: \"ARCHIVE_FROM_POCKET\",\n }),\n EditTopSite: (site, index) => ({\n id: \"edit_topsites_button_text\",\n icon: \"edit\",\n action: {\n type: at.TOP_SITES_EDIT,\n data: {index},\n },\n }),\n CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),\n};\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n * the image in the React props. This can either be an object with the `data`\n * and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n * to the image *object* in the React component's state. All local image\n * objects have the `url` property, and an additional property `path`, if they\n * are blobs.\n */\nexport const ScreenshotUtils = {\n isBlob(isLocal, image) {\n return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n },\n\n // This should always be called with a remote image and not a local image.\n createLocalImageObject(remoteImage) {\n if (!remoteImage) {\n return null;\n }\n if (this.isBlob(false, remoteImage)) {\n return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n }\n return {url: remoteImage};\n },\n\n // Revokes the object URL of the image if the local image is a blob.\n // This should always be called with a local image and not a remote image.\n maybeRevokeBlobObjectURL(localImage) {\n if (this.isBlob(true, localImage)) {\n global.URL.revokeObjectURL(localImage.url);\n }\n },\n\n // Checks if remoteImage and localImage are the same.\n isRemoteImageLocal(localImage, remoteImage) {\n // Both remoteImage and localImage are present.\n if (remoteImage && localImage) {\n return this.isBlob(false, remoteImage) ?\n localImage.path === remoteImage.path :\n localImage.url === remoteImage;\n }\n\n // This will only handle the remaining three possible outcomes.\n // (i.e. everything except when both image and localImage are present)\n return !remoteImage && !localImage;\n },\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1. User clicks \"No Thanks\"\n * 2. User completed the data import\n * 3. After 3 active days\n * 4. User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLaunchTour = this.onLaunchTour.bind(this);\n this.onCancelTour = this.onCancelTour.bind(this);\n }\n\n onLaunchTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n }\n\n onCancelTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n }\n\n render() {\n return (\n
\n \n \n
\n
\n \n \n \n \n \n \n
\n
);\n }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n constructor(options) {\n this.initialPrefs = options.initialPrefs;\n this.initialSections = options.initialSections;\n this._setValidation(options.validation);\n }\n\n get validation() {\n return this._validation;\n }\n\n set validation(value) {\n this._setValidation(value);\n }\n\n get invalidatingPrefs() {\n return this._invalidatingPrefs;\n }\n\n // This is needed so we can use it in the constructor\n _setValidation(value = []) {\n this._validation = value;\n this._invalidatingPrefs = value.reduce((result, next) => {\n if (typeof next === \"string\") {\n result.push(next);\n return result;\n } else if (next && next.oneOf) {\n return result.concat(next.oneOf);\n } else if (next && next.indexedDB) {\n return result.concat(next.indexedDB);\n } else if (next && next.jsonPrefs) {\n return result.concat(next.jsonPrefs);\n }\n throw new Error(\"Your validation configuration is not properly configured\");\n }, []);\n }\n\n _isPrefEnabled(prefObj) {\n try {\n let data = JSON.parse(prefObj);\n return data && data.enabled;\n } catch (e) {\n return null;\n }\n }\n\n arePrefsValid(getPref, indexedDBPrefs) {\n for (const prefs of this.validation) {\n // {oneOf: [\"foo\", \"bar\"]}\n if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n return false;\n\n // {indexedDB: [\"foo\", \"bar\"]}\n } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n if (anyModifiedPrefs) {\n return false;\n }\n // {jsonPrefs: [\"foo\", \"bar\"]}\n } else if (prefs && prefs.jsonPrefs) {\n const isPrefModified =\n prefs.jsonPrefs.some(name => this._isPrefEnabled(getPref(name)) !== this.initialPrefs[name].enabled);\n if (isPrefModified) {\n return false;\n }\n // \"foo\"\n } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n return false;\n }\n }\n return true;\n }\n}\n\nthis.PrerenderData = new _PrerenderData({\n initialPrefs: {\n \"migrationExpired\": true,\n \"feeds.topsites\": true,\n \"showSearch\": true,\n \"topSitesRows\": 1,\n \"feeds.section.topstories\": true,\n \"feeds.section.highlights\": true,\n \"sectionOrder\": \"topsites,topstories,highlights\",\n \"collapsed\": false,\n \"discoverystream.config\": {\"enabled\": false},\n },\n // Prefs listed as invalidating will prevent the prerendered version\n // of AS from being used if their value is something other than what is listed\n // here. This is required because some preferences cause the page layout to be\n // too different for the prerendered version to be used. Unfortunately, this\n // will result in users who have modified some of their preferences not being\n // able to get the benefits of prerendering.\n validation: [\n \"feeds.topsites\",\n \"showSearch\",\n \"topSitesRows\",\n \"sectionOrder\",\n // This means if either of these are set to their default values,\n // prerendering can be used.\n {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n // If any component has the following preference set to `true` it will\n // invalidate the prerendered version.\n {indexedDB: [\"collapsed\"]},\n // For below prefs, parse value to check enabled property. If enabled property\n // differs from initial prefs enabled value, prerendering cannot be used\n {jsonPrefs: [\"discoverystream.config\"]},\n ],\n initialSections: [\n {\n enabled: true,\n icon: \"pocket\",\n id: \"topstories\",\n order: 1,\n title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}},\n },\n {\n enabled: true,\n id: \"highlights\",\n icon: \"highlights\",\n order: 2,\n title: {id: \"header_highlights\"},\n },\n ],\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onSearchClick = this.onSearchClick.bind(this);\n this.onSearchHandoffClick = this.onSearchHandoffClick.bind(this);\n this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);\n this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);\n this.onInputMount = this.onInputMount.bind(this);\n this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(this);\n }\n\n handleEvent(event) {\n // Also track search events with our own telemetry\n if (event.detail.type === \"Search\") {\n this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n }\n }\n\n onSearchClick(event) {\n window.gContentSearchController.search(event);\n }\n\n doSearchHandoff(text) {\n this.props.dispatch(ac.OnlyToMain({type: at.HANDOFF_SEARCH_TO_AWESOMEBAR, data: {text}}));\n this.props.dispatch({type: at.FAKE_FOCUS_SEARCH});\n this.props.dispatch(ac.UserEvent({event: \"SEARCH_HANDOFF\"}));\n if (text) {\n this.props.dispatch({type: at.HIDE_SEARCH});\n }\n }\n\n onSearchHandoffClick(event) {\n // When search hand-off is enabled, we render a big button that is styled to\n // look like a search textbox. If the button is clicked, we style\n // the button as if it was a focused search box and show a fake cursor but\n // really focus the awesomebar without the focus styles (\"hidden focus\").\n event.preventDefault();\n this.doSearchHandoff();\n }\n\n onSearchHandoffPaste(event) {\n event.preventDefault();\n this.doSearchHandoff(event.clipboardData.getData(\"Text\"));\n }\n\n onSearchHandoffDrop(event) {\n event.preventDefault();\n let text = event.dataTransfer.getData(\"text\");\n if (text) {\n this.doSearchHandoff(text);\n }\n }\n\n componentWillUnmount() {\n delete window.gContentSearchController;\n }\n\n onInputMount(input) {\n if (input) {\n // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n // can add the appropriate telemetry probes for search. Without the correct\n // name, certain tests like browser_UsageTelemetry_content.js will fail\n // (See github ticket #2348 for more details)\n const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n // the search data and acts as context for the search request (See\n // nsISearchEngine.getSubmission). It is necessary so that search engine\n // plugins can correctly atribute referrals. (See github ticket #3321 for\n // more details)\n const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n // gContentSearchController needs to exist as a global so that tests for\n // the existing about:home can find it; and so it allows these tests to pass.\n // In the future, when activity stream is default about:home, this can be renamed\n window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n healthReportKey, searchSource);\n addEventListener(\"ContentSearchClient\", this);\n } else {\n window.gContentSearchController = null;\n removeEventListener(\"ContentSearchClient\", this);\n }\n }\n\n onSearchHandoffButtonMount(button) {\n // Keep a reference to the button for use during \"paste\" event handling.\n this._searchHandoffButton = button;\n }\n\n /*\n * Do not change the ID on the input field, as legacy newtab code\n * specifically looks for the id 'newtab-search-text' on input fields\n * in order to execute searches in various tests\n */\n render() {\n const wrapperClassName = [\n \"search-wrapper\",\n this.props.hide && \"search-hidden\",\n this.props.fakeFocus && \"fake-focus\",\n ].filter(v => v).join(\" \");\n\n return (\n {this.props.showLogo &&\n
\n }\n {!this.props.handoffEnabled &&\n
\n \n \n \n \n \n \n \n
\n }\n {this.props.handoffEnabled &&\n
\n }\n
);\n }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {MoreRecommendations} from \"content-src/components/MoreRecommendations/MoreRecommendations\";\nimport {PocketLoggedInCta} from \"content-src/components/PocketLoggedInCta/PocketLoggedInCta\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class Section extends React.PureComponent {\n get numRows() {\n const {rowsPref, maxRows, Prefs} = this.props;\n return rowsPref ? Prefs.values[rowsPref] : maxRows;\n }\n\n _dispatchImpressionStats() {\n const {props} = this;\n let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n // If the section has compact cards and the viewport is wide enough, we show\n // 4 columns instead of 3.\n // $break-point-widest = 1072px (from _variables.scss)\n cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n }\n const maxCards = cardsPerRow * this.numRows;\n const cards = props.rows.slice(0, maxCards);\n\n if (this.needsImpressionStats(cards)) {\n props.dispatch(ac.ImpressionStats({\n source: props.eventSource,\n tiles: cards.map(link => ({id: link.guid})),\n }));\n this.impressionCardGuids = cards.map(link => link.guid);\n }\n }\n\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionStatsOrAddListener() {\n const {props} = this;\n\n if (!props.shouldSendImpressionStats || !props.dispatch) {\n return;\n }\n\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (props.document.visibilityState === VISIBLE) {\n if (!this.props.pref.collapsed) {\n this._dispatchImpressionStats();\n }\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillMount() {\n this.sendNewTabRehydrated(this.props.initialized);\n }\n\n componentDidMount() {\n if (this.props.rows.length && !this.props.pref.collapsed) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n const {props} = this;\n const isCollapsed = props.pref.collapsed;\n const wasCollapsed = prevProps.pref.collapsed;\n if (\n // Don't send impression stats for the empty state\n props.rows.length &&\n (\n // We only want to send impression stats if the content of the cards has changed\n // and the section is not collapsed...\n (props.rows !== prevProps.rows && !isCollapsed) ||\n // or if we are expanding a section that was collapsed.\n (wasCollapsed && !isCollapsed)\n )\n ) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentWillUpdate(nextProps) {\n this.sendNewTabRehydrated(nextProps.initialized);\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n needsImpressionStats(cards) {\n if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n return true;\n }\n\n for (let i = 0; i < cards.length; i++) {\n if (cards[i].guid !== this.impressionCardGuids[i]) {\n return true;\n }\n }\n\n return false;\n }\n\n // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n // data has been consumed e.g. for counting the number of tabs that\n // have rendered that data.\n sendNewTabRehydrated(initialized) {\n if (initialized && !this.renderNotified) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n this.renderNotified = true;\n }\n }\n\n render() {\n const {\n id, eventSource, title, icon, rows, Pocket, topics,\n emptyState, dispatch, compactCards, read_more_endpoint,\n contextMenuOptions, initialized, learnMore,\n pref, privacyNoticeURL, isFirst, isLast,\n } = this.props;\n\n const waitingForSpoc = id === \"topstories\" && this.props.Pocket.waitingForSpoc;\n const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n const {numRows} = this;\n const maxCards = maxCardsPerRow * numRows;\n const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n const {pocketCta, isUserLoggedIn} = Pocket || {};\n const {useCta} = pocketCta || {};\n\n // Don't display anything until we have a definitve result from Pocket,\n // to avoid a flash of logged out state while we render.\n const isPocketLoggedInDefined = (isUserLoggedIn === true || isUserLoggedIn === false);\n\n const hasTopics = topics && topics.length > 0;\n\n const shouldShowPocketCta = (id === \"topstories\" &&\n useCta && isUserLoggedIn === false);\n\n // Show topics only for top stories and if it has loaded with topics.\n // The classs .top-stories-bottom-container ensures content doesn't shift as things load.\n const shouldShowTopics = (id === \"topstories\" && hasTopics &&\n ((useCta && isUserLoggedIn === true) || (!useCta && isPocketLoggedInDefined)));\n\n // We use topics to determine language support for read more.\n const shouldShowReadMore = read_more_endpoint && hasTopics;\n\n const realRows = rows.slice(0, maxCards);\n\n // The empty state should only be shown after we have initialized and there is no content.\n // Otherwise, we should show placeholders.\n const shouldShowEmptyState = initialized && !rows.length;\n\n const cards = [];\n if (!shouldShowEmptyState) {\n for (let i = 0; i < maxCards; i++) {\n const link = realRows[i];\n // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n // .hide-for-narrow to hide in CSS via @media query.\n const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n let usePlaceholder = !link;\n // If we are in the third card and waiting for spoc,\n // use the placeholder.\n if (!usePlaceholder && i === 2 && waitingForSpoc) {\n usePlaceholder = true;\n }\n cards.push(!usePlaceholder ? (\n \n ) : (\n \n ));\n }\n }\n\n const sectionClassName = [\n \"section\",\n compactCards ? \"compact-cards\" : \"normal-cards\",\n ].join(\" \");\n\n // <-- React component\n // <-- HTML5 element\n return (\n \n\n {!shouldShowEmptyState && ()}\n {shouldShowEmptyState &&\n \n
\n {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n
:\n
}\n
\n {getFormattedMessage(emptyState.message)}\n
\n
\n
}\n {id === \"topstories\" &&\n \n {shouldShowTopics &&\n
\n \n
\n }\n\n {shouldShowPocketCta &&\n
\n }\n\n
\n {shouldShowReadMore &&\n }\n
\n
}\n \n );\n }\n}\n\nSection.defaultProps = {\n document: global.document,\n rows: [],\n emptyState: {},\n pref: {},\n title: \"\",\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs, Pocket: state.Pocket}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n renderSections() {\n const sections = [];\n const enabledSections = this.props.Sections.filter(section => section.enabled);\n const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n // Enabled sections doesn't include Top Sites, so we add it if enabled.\n const expectedCount = enabledSections.length + ~~showTopSites;\n\n for (const sectionId of sectionOrder.split(\",\")) {\n const commonProps = {\n key: sectionId,\n isFirst: sections.length === 0,\n isLast: sections.length === expectedCount - 1,\n };\n if (sectionId === \"topsites\" && showTopSites) {\n sections.push( );\n } else {\n const section = enabledSections.find(s => s.id === sectionId);\n if (section) {\n sections.push( );\n }\n }\n }\n return sections;\n }\n\n render() {\n return (\n \n {this.renderSections()}\n
\n );\n }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class MoreRecommendations extends React.PureComponent {\n render() {\n const {read_more_endpoint} = this.props;\n if (read_more_endpoint) {\n return (\n \n \n \n );\n }\n return null;\n }\n}\n","import {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class _PocketLoggedInCta extends React.PureComponent {\n render() {\n const {pocketCta} = this.props.Pocket;\n return (\n \n \n {pocketCta.ctaButton ? pocketCta.ctaButton : }\n \n\n \n \n {pocketCta.ctaText ? pocketCta.ctaText : }\n \n \n \n );\n }\n}\n\nexport const PocketLoggedInCta = connect(state => ({Pocket: state.Pocket}))(_PocketLoggedInCta);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n render() {\n const {url, name} = this.props;\n return ({name} );\n }\n}\n\nexport class Topics extends React.PureComponent {\n render() {\n const {topics} = this.props;\n return (\n \n \n {topics && topics.map(t => )} \n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n constructor(store, options = {}) {\n this._store = store;\n // Overrides for testing\n this.document = options.document || global.document;\n this._perfService = options.perfService || perfSvc;\n this._onVisibilityChange = this._onVisibilityChange.bind(this);\n }\n\n /**\n * sendEventOrAddListener - Notify immediately if the page is already visible,\n * or else set up a listener for when visibility changes.\n * This is needed for accurate session tracking for telemetry,\n * because tabs are pre-loaded.\n */\n sendEventOrAddListener() {\n if (this.document.visibilityState === VISIBLE) {\n // If the document is already visible, to the user, send a notification\n // immediately that a session has started.\n this._sendEvent();\n } else {\n // If the document is not visible, listen for when it does become visible.\n this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n /**\n * _sendEvent - Sends a message to the main process to indicate the current\n * tab is now visible to the user, includes the\n * visibility_event_rcvd_ts time in ms from the UNIX epoch.\n */\n _sendEvent() {\n this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n try {\n let visibility_event_rcvd_ts = this._perfService\n .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n this._store.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {visibility_event_rcvd_ts},\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up.\n }\n }\n\n /**\n * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n * and removes the event listener. This should only be called once per tab.\n */\n _onVisibilityChange() {\n if (this.document.visibilityState === VISIBLE) {\n this._sendEvent();\n this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n}\n","export function enableASRouterContent(store, asrouterContent) {\n // Enable asrouter content\n store.subscribe(() => {\n const state = store.getState();\n if (!state.ASRouter.initialized) {\n return;\n }\n\n if (!asrouterContent.initialized) {\n asrouterContent.init(store);\n }\n });\n // Return this for testing purposes\n return {asrouterContent};\n}\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport React from \"react\";\n\nexport class DSCard extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: this.props.index,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.props.id, pos: this.props.index}],\n }));\n }\n }\n\n render() {\n return (\n \n \n \n
\n
\n {this.props.excerpt &&
{this.props.excerpt}
}\n
\n
\n {this.props.context && (\n \n {this.props.context} \n \n \n )}\n {this.props.source} \n
\n
\n \n );\n }\n}\n","import {DSCard} from \"../DSCard/DSCard.jsx\";\nimport React from \"react\";\n\nexport class CardGrid extends React.PureComponent {\n render() {\n const {data} = this.props;\n\n // Handle a render before feed has been fetched by displaying nothing\n if (!data) {\n return (\n
\n );\n }\n\n let cards = data.recommendations.slice(0, this.props.items).map((rec, index) => (\n \n ));\n\n let divisibility = ``;\n\n if (this.props.items % 4 === 0) {\n divisibility = `divisible-by-4`;\n } else if (this.props.items % 3 === 0) {\n divisibility = `divisible-by-3`;\n }\n\n return (\n \n
{this.props.title}
\n
\n {cards}\n
\n
\n );\n }\n}\n\nCardGrid.defaultProps = {\n border: `border`,\n items: 4, // Number of stories to display\n};\n","export function truncateText(text = \"\", cap) {\n return text.substring(0, cap).trim() + (text.length > cap ? \"…\" : \"\");\n}\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {truncateText} from \"content-src/lib/truncate-text\";\n\n/**\n * @note exported for testing only\n */\nexport class ListItem extends React.PureComponent {\n // TODO performance: get feeds to send appropriately sized images rather\n // than waiting longer and scaling down on client?\n constructor(props) {\n super(props);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: this.props.index,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.props.id, pos: this.props.index}],\n }));\n }\n }\n\n render() {\n return (\n \n \n \n
{this.props.title}
\n {this.props.excerpt &&
{truncateText(this.props.excerpt, 90)}
}\n
{this.props.domain}
\n
\n
\n \n \n );\n }\n}\n\n/**\n * @note exported for testing only\n */\nexport function _List(props) {\n const feed = props.DiscoveryStream.feeds[props.feed.url];\n\n if (!feed || !feed.data || !feed.data.recommendations) {\n return null;\n }\n\n const recs = feed.data.recommendations;\n\n let recMarkup = recs.slice(props.recStartingPoint,\n props.recStartingPoint + props.items).map((rec, index) => (\n )\n );\n\n const listStyles = [\n \"ds-list\",\n props.fullWidth ? \"ds-list-full-width\" : \"\",\n props.hasBorders ? \"ds-list-borders\" : \"\",\n props.hasImages ? \"ds-list-images\" : \"\",\n props.hasNumbers ? \"ds-list-numbers\" : \"\",\n ];\n return (\n \n {props.header && props.header.title ?
{props.header.title}
: null }\n
\n
\n );\n}\n\n_List.defaultProps = {\n recStartingPoint: 0, // Index of recommendations to start displaying from\n fullWidth: false, // Display items taking up the whole column\n hasBorders: false, // Display lines separating each item\n hasImages: false, // Display images for each item\n hasNumbers: false, // Display numbers for each item\n items: 6, // Number of stories to display. TODO: get from endpoint\n};\n\nexport const List = connect(state => ({DiscoveryStream: state.DiscoveryStream}))(_List);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {DSCard} from \"../DSCard/DSCard.jsx\";\nimport {List} from \"../List/List.jsx\";\nimport React from \"react\";\nimport {truncateText} from \"content-src/lib/truncate-text\";\n\nexport class Hero extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: 0,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.heroRec.id, pos: 0}],\n }));\n }\n }\n\n render() {\n const {data} = this.props;\n\n // Handle a render before feed has been fetched by displaying nothing\n if (!data || !data.recommendations) {\n return (\n
\n );\n }\n\n let [heroRec, ...otherRecs] = data.recommendations.slice(0, this.props.items);\n this.heroRec = heroRec;\n\n // Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.\n let cards = otherRecs.map((rec, index) => (\n \n ));\n\n let list = (\n
\n );\n\n return (\n \n
{this.props.title}
\n
\n
\n );\n }\n}\n\nHero.defaultProps = {\n data: {},\n border: `border`,\n items: 1, // Number of stories to display\n};\n","import React from \"react\";\n\nexport class HorizontalRule extends React.PureComponent {\n render() {\n return (\n \n );\n }\n}\n","import React from \"react\";\n\nexport class Topic extends React.PureComponent {\n render() {\n const {url, name} = this.props;\n return ({name} );\n }\n}\n\nexport class Navigation extends React.PureComponent {\n render() {\n const {links} = this.props || [];\n const {alignment} = this.props || \"centered\";\n const header = this.props.header || {};\n return (\n \n {header.title ?
{header.title}
: null}\n
\n
\n {links && links.map(t => )}\n \n
\n
\n );\n }\n}\n","import React from \"react\";\n\nexport class SectionTitle extends React.PureComponent {\n render() {\n const {header: {title, subtitle}} = this.props;\n return (\n \n
{title}
\n {subtitle ?
{subtitle}
: null}\n
\n );\n }\n}\n","function defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n var length = prev.length;\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n var lastArgs = null;\n var lastResult = null;\n // we reference arguments instead of spreading them for performance reasons\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep;\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++;\n // apply arguments instead of spreading for performance.\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions));\n\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n var selector = memoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n }\n\n // apply arguments instead of spreading for performance.\n return memoizedResultFunc.apply(null, params);\n });\n\n selector.resultFunc = resultFunc;\n selector.dependencies = dependencies;\n selector.recomputations = function () {\n return recomputations;\n };\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n return selector;\n };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n }\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}","import {createSelector} from \"reselect\";\n\nexport const selectLayoutRender = createSelector(\n // Selects layout, feeds, spocs so that we only recompute if\n // any of these values change.\n [\n state => state.DiscoveryStream.layout,\n state => state.DiscoveryStream.feeds,\n state => state.DiscoveryStream.spocs,\n ],\n\n // Adds data to each component from feeds. This function only re-runs if one of the inputs change.\n // TODO: calculate spocs\n function layoutRender(layout, feeds, spocs) {\n let spocIndex = 0;\n\n function maybeInjectSpocs(data, spocsConfig) {\n if (data &&\n spocsConfig && spocsConfig.positions && spocsConfig.positions.length &&\n spocs.data.spocs && spocs.data.spocs.length) {\n const recommendations = [...data.recommendations];\n for (let position of spocsConfig.positions) {\n let rickRoll = Math.random();\n if (spocs.data.spocs[spocIndex] && rickRoll <= spocsConfig.probability) {\n recommendations.splice(position.index, 0, spocs.data.spocs[spocIndex++]);\n }\n }\n\n return {\n ...data,\n recommendations,\n };\n }\n\n return data;\n }\n\n return layout.map(row => ({\n ...row,\n\n // Loops through all the components and adds a .data property\n // containing data from feeds\n components: row.components.map(component => {\n if (!component.feed || !feeds[component.feed.url]) {\n return component;\n }\n\n return {...component, data: maybeInjectSpocs(feeds[component.feed.url].data, component.spocs)};\n }),\n }));\n }\n);\n","import {connect} from \"react-redux\";\nimport {TopSites as OldTopSites} from \"content-src/components/TopSites/TopSites\";\nimport React from \"react\";\n\nexport class _TopSites extends React.PureComponent {\n render() {\n const header = this.props.header || {};\n return (\n \n {header.title ? (\n
\n \n {header.title} \n
\n ) : null}\n
\n
\n );\n }\n}\n\nexport const TopSites = connect(state => ({TopSites: state.TopSites}))(_TopSites);\n","import {CardGrid} from \"content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid\";\nimport {connect} from \"react-redux\";\nimport {Hero} from \"content-src/components/DiscoveryStreamComponents/Hero/Hero\";\nimport {HorizontalRule} from \"content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule\";\nimport {ImpressionStats} from \"content-src/components/DiscoveryStreamImpressionStats/ImpressionStats\";\nimport {List} from \"content-src/components/DiscoveryStreamComponents/List/List\";\nimport {Navigation} from \"content-src/components/DiscoveryStreamComponents/Navigation/Navigation\";\nimport React from \"react\";\nimport {SectionTitle} from \"content-src/components/DiscoveryStreamComponents/SectionTitle/SectionTitle\";\nimport {selectLayoutRender} from \"content-src/lib/selectLayoutRender\";\nimport {TopSites} from \"content-src/components/DiscoveryStreamComponents/TopSites/TopSites\";\n\n// According to the Pocket API endpoint specs, `component.properties.items` is a required property with following values:\n// - List 1-6 items\n// - Hero 1-5 items\n// - CardGrid 1-8 items\n// To enforce that, we define various maximium items for individual components as an extra check.\n// Note that these values are subject to the future changes of the specs.\nconst MAX_ROWS_HERO = 5;\nconst MAX_ROWS_LIST = 6;\nconst MAX_ROWS_CARDGRID = 8;\n\nconst ALLOWED_CSS_URL_PREFIXES = [\"chrome://\", \"resource://\", \"https://img-getpocket.cdn.mozilla.net/\"];\nconst DUMMY_CSS_SELECTOR = \"DUMMY#CSS.SELECTOR\";\n\n/**\n * Validate a CSS declaration. The values are assumed to be normalized by CSSOM.\n */\nexport function isAllowedCSS(property, value) {\n // Bug 1454823: INTERNAL properties, e.g., -moz-context-properties, are\n // exposed but their values aren't resulting in getting nothing. Fortunately,\n // we don't care about validating the values of the current set of properties.\n if (value === undefined) {\n return true;\n }\n\n // Make sure all urls are of the allowed protocols/prefixes\n const urls = value.match(/url\\(\"[^\"]+\"\\)/g);\n return !urls || urls.every(url => ALLOWED_CSS_URL_PREFIXES.some(prefix =>\n url.slice(5).startsWith(prefix)));\n}\n\nexport class _DiscoveryStreamBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onStyleMount = this.onStyleMount.bind(this);\n }\n\n /**\n * Extracts the recommendation rows from component for the impression ping.\n * If `component.data.recommendations` is unset, returns an empty array.\n *\n * The row size is determined by the following rules:\n * - Use `component.properties.items` from the endpoint if it's specified\n * - Otherwise, use the length of recommendation array\n * - The row size is capped by the argument `limit`, which could be one of\n * [`MAX_ROW_HERO`, `MAX_ROWS_LIST`, `MAX_ROWS_CARDGRID`]\n */\n extractRows(component, limit) {\n if (component.data && component.data.recommendations) {\n const items = Math.min(limit, component.properties.items || component.data.recommendations.length);\n return component.data.recommendations.slice(0, items);\n }\n\n return [];\n }\n\n onStyleMount(style) {\n // Unmounting style gets rid of old styles, so nothing else to do\n if (!style) {\n return;\n }\n\n const {sheet} = style;\n const styles = JSON.parse(style.dataset.styles);\n styles.forEach((row, rowIndex) => {\n row.forEach((component, componentIndex) => {\n // Nothing to do without optional styles overrides\n if (!component) {\n return;\n }\n\n Object.entries(component).forEach(([selectors, declarations]) => {\n // Start with a dummy rule to validate declarations and selectors\n sheet.insertRule(`${DUMMY_CSS_SELECTOR} {}`);\n const [rule] = sheet.cssRules;\n\n // Validate declarations and remove any offenders. CSSOM silently\n // discards invalid entries, so here we apply extra restrictions.\n rule.style = declarations;\n [...rule.style].forEach(property => {\n const value = rule.style[property];\n if (!isAllowedCSS(property, value)) {\n console.error(`Bad CSS declaration ${property}: ${value}`); // eslint-disable-line no-console\n rule.style.removeProperty(property);\n }\n });\n\n // Set the actual desired selectors scoped to the component\n const prefix = `.ds-layout > .ds-column:nth-child(${rowIndex + 1}) .ds-column-grid > :nth-child(${componentIndex + 1})`;\n // NB: Splitting on \",\" doesn't work with strings with commas, but\n // we're okay with not supporting those selectors\n rule.selectorText = selectors.split(\",\").map(selector => prefix +\n // Assume :pseudo-classes are for component instead of descendant\n (selector[0] === \":\" ? \"\" : \" \") + selector).join(\",\");\n\n // CSSOM silently ignores bad selectors, so we'll be noisy instead\n if (rule.selectorText === DUMMY_CSS_SELECTOR) {\n console.error(`Bad CSS selector ${selectors}`); // eslint-disable-line no-console\n }\n });\n });\n });\n }\n\n renderComponent(component, embedWidth) {\n let rows;\n const {spocs} = this.props.DiscoveryStream;\n\n // TODO: Can we make this a bit better visually while it loads?\n // If this component expects spocs,\n // wait until spocs are loaded before attempting to use it.\n if (component.spocs && !spocs.loaded) {\n return null;\n }\n\n switch (component.type) {\n case \"TopSites\":\n return ( );\n case \"SectionTitle\":\n return (\n \n );\n case \"Navigation\":\n return (\n \n );\n case \"CardGrid\":\n rows = this.extractRows(component, MAX_ROWS_CARDGRID);\n return (\n \n \n \n );\n case \"Hero\":\n rows = this.extractRows(component, MAX_ROWS_HERO);\n return (\n \n = 9 ? `cards` : `list`}\n feed={component.feed}\n title={component.header && component.header.title}\n data={component.data}\n border={component.properties.border}\n type={component.type}\n dispatch={this.props.dispatch}\n items={component.properties.items} />\n \n );\n case \"HorizontalRule\":\n return ( );\n case \"List\":\n rows = this.extractRows(component, MAX_ROWS_LIST);\n return (\n \n
\n \n );\n default:\n return ({component.type}
);\n }\n }\n\n renderStyles(styles) {\n // Use json string as both the key and styles to render so React knows when\n // to unmount and mount a new instance for new styles.\n const json = JSON.stringify(styles);\n return ();\n }\n\n render() {\n const {layoutRender} = this.props.DiscoveryStream;\n const styles = [];\n return (\n \n {layoutRender.map((row, rowIndex) => (\n
\n
\n {row.components.map((component, componentIndex) => {\n styles[rowIndex] = [...styles[rowIndex] || [], component.styles];\n return (
\n {this.renderComponent(component, row.width)}\n
);\n })}\n
\n
\n ))}\n {this.renderStyles(styles)}\n
\n );\n }\n}\n\nfunction transform(state) {\n return {\n DiscoveryStream: {\n ...state.DiscoveryStream,\n layoutRender: selectLayoutRender(state),\n },\n };\n}\n\nexport const DiscoveryStreamBase = connect(transform)(_DiscoveryStreamBase);\n","import React from \"react\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n const style = {};\n\n // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n for (const tag of ALLOWED_STYLE_TAGS) {\n if (typeof props[tag] !== \"undefined\") {\n style[tag] = props[tag];\n }\n }\n // remove border if bg is set to something custom\n if (style.backgroundColor) {\n style.border = \"0\";\n }\n\n return (\n {props.children}\n );\n};\n","// lifted from https://gist.github.com/kitze/23d82bb9eb0baabfd03a6a720b1d637f\nexport const ConditionalWrapper = ({condition, wrap, children}) => (condition ? wrap(children) : children);\n","import React from \"react\";\nimport schema from \"../../templates/SimpleSnippet/SimpleSnippet.schema.json\";\n\nexport class SnippetBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBlockClicked = this.onBlockClicked.bind(this);\n this.onDismissClicked = this.onDismissClicked.bind(this);\n }\n\n onBlockClicked() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n }\n\n this.props.onBlock();\n }\n\n onDismissClicked() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"DISMISS\", id: this.props.UISurface});\n }\n\n this.props.onDismiss();\n }\n\n renderDismissButton() {\n if (this.props.footerDismiss) {\n return (\n \n
\n \n {this.props.content.scene2_dismiss_button_text}\n \n
\n
\n );\n }\n\n const defaultTitle = schema.properties.block_button_text.default;\n return (\n \n );\n }\n\n render() {\n const {props} = this;\n\n const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n return (\n
\n {props.children}\n
\n {this.renderDismissButton()}\n
);\n }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport {ConditionalWrapper} from \"../../components/ConditionalWrapper/ConditionalWrapper\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onButtonClick = this.onButtonClick.bind(this);\n }\n\n onButtonClick() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n }\n const {button_url} = this.props.content;\n // If button_url is defined handle it as OPEN_URL action\n const type = this.props.content.button_action || (button_url && \"OPEN_URL\");\n this.props.onAction({\n type,\n data: {args: this.props.content.button_action_args || button_url},\n });\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock();\n }\n }\n\n _shouldRenderButton() {\n return this.props.content.button_action || this.props.onButtonClick || this.props.content.button_url;\n }\n\n renderTitle() {\n const {title} = this.props.content;\n return title ?\n {this.renderTitleIcon()} {title} :\n null;\n }\n\n renderTitleIcon() {\n const titleIcon = safeURI(this.props.content.title_icon);\n return titleIcon ? : null;\n }\n\n renderButton() {\n const {props} = this;\n if (!this._shouldRenderButton()) {\n return null;\n }\n\n return (\n {props.content.button_label}\n );\n }\n\n renderText() {\n const {props} = this;\n return ( );\n }\n\n wrapSectionHeader(url) {\n return function(children) {\n return {children} ;\n };\n }\n\n wrapSnippetContent(children) {\n return {children}
;\n }\n\n renderSectionHeader() {\n const {props} = this;\n\n // an icon and text must be specified to render the section header\n if (props.content.section_title_icon && props.content.section_title_text) {\n const sectionTitleIcon = safeURI(props.content.section_title_icon);\n const sectionTitleURL = props.content.section_title_url;\n\n return (\n \n
\n \n \n {props.content.section_title_text} \n \n \n \n );\n }\n\n return null;\n }\n\n render() {\n const {props} = this;\n const sectionHeader = this.renderSectionHeader();\n let className = \"SimpleSnippet\";\n\n if (props.className) {\n className += ` ${props.className}`;\n }\n if (props.content.tall) {\n className += \" tall\";\n }\n if (sectionHeader) {\n className += \" has-section-header\";\n }\n\n return (\n {sectionHeader}\n \n \n \n {this.renderTitle()}
{this.renderText()}
\n {this.props.extraContent}\n
\n {{this.renderButton()}
}\n \n );\n }\n}\n","import React from \"react\";\nimport schema from \"./EOYSnippet.schema.json\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\n\nclass EOYSnippetBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n /**\n * setFrequencyValue - `frequency` form parameter value should be `monthly`\n * if `monthly-checkbox` is selected or `single` otherwise\n */\n setFrequencyValue() {\n const frequencyCheckbox = this.refs.form.querySelector(\"#monthly-checkbox\");\n if (frequencyCheckbox.checked) {\n this.refs.form.querySelector(\"[name='frequency']\").value = \"monthly\";\n }\n }\n\n handleSubmit(event) {\n event.preventDefault();\n this.setFrequencyValue();\n this.refs.form.submit();\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock();\n }\n }\n\n renderDonations() {\n const fieldNames = [\"first\", \"second\", \"third\", \"fourth\"];\n const numberFormat = new Intl.NumberFormat(this.props.content.locale || navigator.language, {\n style: \"currency\",\n currency: this.props.content.currency_code,\n minimumFractionDigits: 0,\n });\n // Default to `second` button\n const {selected_button} = this.props.content;\n const btnStyle = {\n color: this.props.content.button_color,\n backgroundColor: this.props.content.button_background_color,\n };\n const donationURLParams = [];\n const paramsStartIndex = this.props.content.donation_form_url.indexOf(\"?\");\n for (const entry of new URLSearchParams(this.props.content.donation_form_url.slice(paramsStartIndex)).entries()) {\n donationURLParams.push(entry);\n }\n\n return ();\n }\n\n render() {\n const textStyle = {\n color: this.props.content.text_color,\n backgroundColor: this.props.content.background_color,\n };\n const customElement = ;\n return ( );\n }\n}\n\nexport const EOYSnippet = props => {\n const extendedContent = {\n monthly_checkbox_label_text: schema.properties.monthly_checkbox_label_text.default,\n locale: schema.properties.locale.default,\n currency_code: schema.properties.currency_code.default,\n selected_button: schema.properties.selected_button.default,\n ...props.content,\n };\n\n return ( );\n};\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nexport class SubmitFormSnippet extends React.PureComponent {\n constructor(props) {\n super(props);\n this.expandSnippet = this.expandSnippet.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleSubmitAttempt = this.handleSubmitAttempt.bind(this);\n this.onInputChange = this.onInputChange.bind(this);\n this.state = {\n expanded: false,\n submitAttempted: false,\n signupSubmitted: false,\n signupSuccess: false,\n disableForm: false,\n };\n }\n\n handleSubmitAttempt() {\n if (!this.state.submitAttempted) {\n this.setState({submitAttempted: true});\n }\n }\n\n async handleSubmit(event) {\n let json;\n\n if (this.state.disableForm) {\n return;\n }\n\n event.preventDefault();\n this.setState({disableForm: true});\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"conversion-subscribe-activation\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n\n if (this.props.form_method.toUpperCase() === \"GET\") {\n this.props.onBlock({preventDismiss: true});\n this.refs.form.submit();\n return;\n }\n\n const {url, formData} = this.props.processFormData ?\n this.props.processFormData(this.refs.mainInput, this.props) :\n {url: this.refs.form.action, formData: new FormData(this.refs.form)};\n\n try {\n const fetchRequest = new Request(url, {body: formData, method: \"POST\", credentials: \"omit\"});\n const response = await fetch(fetchRequest);\n json = await response.json();\n } catch (err) {\n console.log(err); // eslint-disable-line no-console\n }\n\n if (json && json.status === \"ok\") {\n this.setState({signupSuccess: true, signupSubmitted: true});\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock({preventDismiss: true});\n }\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-success\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n } else {\n console.error(\"There was a problem submitting the form\", json || \"[No JSON response]\"); // eslint-disable-line no-console\n this.setState({signupSuccess: false, signupSubmitted: true});\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-error\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n }\n\n this.setState({disableForm: false});\n }\n\n expandSnippet() {\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"scene1-button-learn-more\", id: this.props.UISurface});\n\n this.setState({\n expanded: true,\n signupSuccess: false,\n signupSubmitted: false,\n });\n }\n\n renderHiddenFormInputs() {\n const {hidden_inputs} = this.props.content;\n\n if (!hidden_inputs) {\n return null;\n }\n\n return Object.keys(hidden_inputs).map((key, idx) => );\n }\n\n renderDisclaimer() {\n const {content} = this.props;\n if (!content.scene2_disclaimer_html) {\n return null;\n }\n return (\n \n
);\n }\n\n renderFormPrivacyNotice() {\n const {content} = this.props;\n if (!content.scene2_privacy_html) {\n return null;\n }\n return (\n \n \n \n \n
);\n }\n\n renderSignupSubmitted() {\n const {content} = this.props;\n const isSuccess = this.state.signupSuccess;\n const successTitle = isSuccess && content.success_title;\n const bodyText = isSuccess ? {success_text: content.success_text} : {error_text: content.error_text};\n const retryButtonText = content.scene1_button_label;\n return (\n {successTitle ?
{successTitle} : null}\n
\n \n {isSuccess ? null : {retryButtonText} }\n
\n
);\n }\n\n onInputChange(event) {\n if (!this.props.validateInput) {\n return;\n }\n const hasError = this.props.validateInput(event.target.value, this.props.content);\n event.target.setCustomValidity(hasError);\n }\n\n renderInput() {\n const placholder = this.props.content.scene2_email_placeholder_text || this.props.content.scene2_input_placeholder;\n return ( );\n }\n\n renderSignupView() {\n const {content} = this.props;\n const containerClass = `SubmitFormSnippet ${this.props.className}`;\n return (\n {content.scene2_icon ? : null}\n \n
\n {content.scene2_title &&
{content.scene2_title} }\n {\" \"}\n {content.scene2_text &&
}\n \n
\n \n );\n }\n\n getFirstSceneContent() {\n return Object.keys(this.props.content).filter(key => key.includes(\"scene1\")).reduce((acc, key) => {\n acc[key.substr(7)] = this.props.content[key];\n return acc;\n }, {});\n }\n\n render() {\n const content = {...this.props.content, ...this.getFirstSceneContent()};\n\n if (this.state.signupSubmitted) {\n return this.renderSignupSubmitted();\n }\n if (this.state.expanded) {\n return this.renderSignupView();\n }\n return ;\n }\n}\n","import React from \"react\";\nimport schema from \"./FXASignupSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const FXASignupSnippet = props => {\n const userAgent = window.navigator.userAgent.match(/Firefox\\/([0-9]+)\\./);\n const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;\n const extendedContent = {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_email_placeholder_text: schema.properties.scene2_email_placeholder_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n ...props.content,\n hidden_inputs: {\n action: \"email\",\n context: \"fx_desktop_v3\",\n entrypoint: \"snippets\",\n service: \"sync\",\n utm_source: \"snippet\",\n utm_content: firefox_version,\n utm_campaign: props.content.utm_campaign,\n utm_term: props.content.utm_term,\n ...props.content.hidden_inputs,\n },\n };\n\n return ( );\n};\n","import React from \"react\";\nimport schema from \"./NewsletterSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const NewsletterSnippet = props => {\n const extendedContent = {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_email_placeholder_text: schema.properties.scene2_email_placeholder_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n scene2_newsletter: schema.properties.scene2_newsletter.default,\n ...props.content,\n hidden_inputs: {\n newsletters: props.content.scene2_newsletter || schema.properties.scene2_newsletter.default,\n fmt: schema.properties.hidden_inputs.properties.fmt.default,\n lang: props.content.locale || schema.properties.locale.default,\n source_url: `https://snippets.mozilla.com/show/${props.id}`,\n ...props.content.hidden_inputs,\n },\n };\n\n return ( );\n};\n","/**\n * Checks if a given string is an email or phone number or neither\n * @param {string} val The user input\n * @param {ASRMessageContent} content .content property on ASR message\n * @returns {\"email\"|\"phone\"|\"\"} The type of the input\n */\nexport function isEmailOrPhoneNumber(val, content) {\n const {locale} = content;\n // http://emailregex.com/\n const email_re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const check_email = email_re.test(val);\n let check_phone; // depends on locale\n switch (locale) {\n case \"en-US\":\n case \"en-CA\":\n // allow 10-11 digits in case user wants to enter country code\n check_phone = val.length >= 10 && val.length <= 11 && !isNaN(val);\n break;\n case \"de\":\n // allow between 2 and 12 digits for german phone numbers\n check_phone = val.length >= 2 && val.length <= 12 && !isNaN(val);\n break;\n // this case should never be hit, but good to have a fallback just in case\n default:\n check_phone = !isNaN(val);\n break;\n }\n if (check_email) {\n return \"email\";\n } else if (check_phone) {\n return \"phone\";\n }\n return \"\";\n}\n","import {isEmailOrPhoneNumber} from \"./isEmailOrPhoneNumber\";\nimport React from \"react\";\nimport schema from \"./SendToDeviceSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nfunction validateInput(value, content) {\n const type = isEmailOrPhoneNumber(value, content);\n return type ? \"\" : \"Must be an email or a phone number.\";\n}\n\nfunction processFormData(input, message) {\n const {content} = message;\n const type = content.include_sms ? isEmailOrPhoneNumber(input.value, content) : \"email\";\n const formData = new FormData();\n let url;\n if (type === \"phone\") {\n url = \"https://basket.mozilla.org/news/subscribe_sms/\";\n formData.append(\"mobile_number\", input.value);\n formData.append(\"msg_name\", content.message_id_sms);\n formData.append(\"country\", content.country);\n } else if (type === \"email\") {\n url = \"https://basket.mozilla.org/news/subscribe/\";\n formData.append(\"email\", input.value);\n formData.append(\"newsletters\", content.message_id_email);\n formData.append(\"source_url\", encodeURIComponent(`https://snippets.mozilla.com/show/${message.id}`));\n }\n formData.append(\"lang\", content.locale);\n return {formData, url};\n}\n\nfunction addDefaultValues(props) {\n return {\n ...props,\n content: {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_input_placeholder: schema.properties.scene2_input_placeholder.default,\n locale: schema.properties.locale.default,\n country: schema.properties.country.default,\n message_id_email: \"\",\n include_sms: schema.properties.include_sms.default,\n ...props.content,\n },\n };\n}\n\nexport const SendToDeviceSnippet = props => {\n const propsWithDefaults = addDefaultValues(props);\n\n return ( );\n};\n","import {EOYSnippet} from \"./EOYSnippet/EOYSnippet\";\nimport {FXASignupSnippet} from \"./FXASignupSnippet/FXASignupSnippet\";\nimport {NewsletterSnippet} from \"./NewsletterSnippet/NewsletterSnippet\";\nimport {SendToDeviceSnippet} from \"./SendToDeviceSnippet/SendToDeviceSnippet\";\nimport {SimpleSnippet} from \"./SimpleSnippet/SimpleSnippet\";\n\n// Key names matching schema name of templates\nexport const SnippetsTemplates = {\n simple_snippet: SimpleSnippet,\n newsletter_snippet: NewsletterSnippet,\n fxa_signup_snippet: FXASignupSnippet,\n send_to_device_snippet: SendToDeviceSnippet,\n eoy_snippet: EOYSnippet,\n};\n","/* eslint no-magic-numbers: [0] */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n /**\n * Parse FTL code into entries formattable by the MessageContext.\n *\n * Given a string of FTL syntax, return a map of entries that can be passed\n * to MessageContext.format and a list of errors encountered during parsing.\n *\n * @param {String} string\n * @returns {Array}\n */\n getResource(string) {\n this._source = string;\n this._index = 0;\n this._length = string.length;\n this.entries = {};\n\n const errors = [];\n\n this.skipWS();\n while (this._index < this._length) {\n try {\n this.getEntry();\n } catch (e) {\n if (e instanceof SyntaxError) {\n errors.push(e);\n\n this.skipToNextEntryStart();\n } else {\n throw e;\n }\n }\n this.skipWS();\n }\n\n return [this.entries, errors];\n }\n\n /**\n * Parse the source string from the current index as an FTL entry\n * and add it to object's entries property.\n *\n * @private\n */\n getEntry() {\n // The index here should either be at the beginning of the file\n // or right after new line.\n if (this._index !== 0 &&\n this._source[this._index - 1] !== \"\\n\") {\n throw this.error(`Expected an entry to start\n at the beginning of the file or on a new line.`);\n }\n\n const ch = this._source[this._index];\n\n // We don't care about comments or sections at runtime\n if (ch === \"/\" ||\n (ch === \"#\" &&\n [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n this.skipComment();\n return;\n }\n\n if (ch === \"[\") {\n this.skipSection();\n return;\n }\n\n this.getMessage();\n }\n\n /**\n * Skip the section entry from the current index.\n *\n * @private\n */\n skipSection() {\n this._index += 1;\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[[\" to open a section');\n }\n\n this._index += 1;\n\n this.skipInlineWS();\n this.getVariantName();\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"]\" ||\n this._source[this._index + 1] !== \"]\") {\n throw this.error('Expected \"]]\" to close a section');\n }\n\n this._index += 2;\n }\n\n /**\n * Parse the source string from the current index as an FTL message\n * and add it to the entries property on the Parser.\n *\n * @private\n */\n getMessage() {\n const id = this.getEntryIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"=\") {\n this._index++;\n }\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (id.startsWith(\"-\") && val === null) {\n throw this.error(\"Expected term to have a value\");\n }\n\n let attrs = null;\n\n if (this._source[this._index] === \" \") {\n const lineStart = this._index;\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n this._index = lineStart;\n attrs = this.getAttributes();\n }\n }\n\n if (attrs === null && typeof val === \"string\") {\n this.entries[id] = val;\n } else {\n if (val === null && attrs === null) {\n throw this.error(\"Expected message to have a value or attributes\");\n }\n\n this.entries[id] = {};\n\n if (val !== null) {\n this.entries[id].val = val;\n }\n\n if (attrs !== null) {\n this.entries[id].attrs = attrs;\n }\n }\n }\n\n /**\n * Skip whitespace.\n *\n * @private\n */\n skipWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip inline whitespace (space and \\t).\n *\n * @private\n */\n skipInlineWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\t\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip blank lines.\n *\n * @private\n */\n skipBlankLines() {\n while (true) {\n const ptr = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"\\n\") {\n this._index += 1;\n } else {\n this._index = ptr;\n break;\n }\n }\n }\n\n /**\n * Get identifier using the provided regex.\n *\n * By default this will get identifiers of public messages, attributes and\n * external arguments (without the $).\n *\n * @returns {String}\n * @private\n */\n getIdentifier(re = identifierRe) {\n re.lastIndex = this._index;\n const result = re.exec(this._source);\n\n if (result === null) {\n this._index += 1;\n throw this.error(`Expected an identifier [${re.toString()}]`);\n }\n\n this._index = re.lastIndex;\n return result[0];\n }\n\n /**\n * Get identifier of a Message or a Term (staring with a dash).\n *\n * @returns {String}\n * @private\n */\n getEntryIdentifier() {\n return this.getIdentifier(entryIdentifierRe);\n }\n\n /**\n * Get Variant name.\n *\n * @returns {Object}\n * @private\n */\n getVariantName() {\n let name = \"\";\n\n const start = this._index;\n let cc = this._source.charCodeAt(this._index);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 95 || cc === 32) { // _ \n cc = this._source.charCodeAt(++this._index);\n } else {\n throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n }\n\n while ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n (cc >= 48 && cc <= 57) || // 0-9\n cc === 95 || cc === 45 || cc === 32) { // _- \n cc = this._source.charCodeAt(++this._index);\n }\n\n // If we encountered the end of name, we want to test if the last\n // collected character is a space.\n // If it is, we will backtrack to the last non-space character because\n // the keyword cannot end with a space character.\n while (this._source.charCodeAt(this._index - 1) === 32) {\n this._index--;\n }\n\n name += this._source.slice(start, this._index);\n\n return { type: \"varname\", name };\n }\n\n /**\n * Get simple string argument enclosed in `\"`.\n *\n * @returns {String}\n * @private\n */\n getString() {\n const start = this._index + 1;\n\n while (++this._index < this._length) {\n const ch = this._source[this._index];\n\n if (ch === '\"') {\n break;\n }\n\n if (ch === \"\\n\") {\n throw this.error(\"Unterminated string expression\");\n }\n }\n\n return this._source.substring(start, this._index++);\n }\n\n /**\n * Parses a Message pattern.\n * Message Pattern may be a simple string or an array of strings\n * and placeable expressions.\n *\n * @returns {String|Array}\n * @private\n */\n getPattern() {\n // We're going to first try to see if the pattern is simple.\n // If it is we can just look for the end of the line and read the string.\n //\n // Then, if either the line contains a placeable opening `{` or the\n // next line starts an indentation, we switch to complex pattern.\n const start = this._index;\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n eol = this._length;\n }\n\n const firstLineContent = start !== eol ?\n this._source.slice(start, eol) : null;\n\n if (firstLineContent && firstLineContent.includes(\"{\")) {\n return this.getComplexPattern();\n }\n\n this._index = eol + 1;\n\n this.skipBlankLines();\n\n if (this._source[this._index] !== \" \") {\n // No indentation means we're done with this message. Callers should check\n // if the return value here is null. It may be OK for messages, but not OK\n // for terms, attributes and variants.\n return firstLineContent;\n }\n\n const lineStart = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n // The pattern is followed by an attribute. Rewind _index to the first\n // column of the current line as expected by getAttributes.\n this._index = lineStart;\n return firstLineContent;\n }\n\n if (firstLineContent) {\n // It's a multiline pattern which started on the same line as the\n // identifier. Reparse the whole pattern to make sure we get all of it.\n this._index = start;\n }\n\n return this.getComplexPattern();\n }\n\n /**\n * Parses a complex Message pattern.\n * This function is called by getPattern when the message is multiline,\n * or contains escape chars or placeables.\n * It does full parsing of complex patterns.\n *\n * @returns {Array}\n * @private\n */\n /* eslint-disable complexity */\n getComplexPattern() {\n let buffer = \"\";\n const content = [];\n let placeables = 0;\n\n let ch = this._source[this._index];\n\n while (this._index < this._length) {\n // This block handles multi-line strings combining strings separated\n // by new line.\n if (ch === \"\\n\") {\n this._index++;\n\n // We want to capture the start and end pointers\n // around blank lines and add them to the buffer\n // but only if the blank lines are in the middle\n // of the string.\n const blankLinesStart = this._index;\n this.skipBlankLines();\n const blankLinesEnd = this._index;\n\n\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] === \"}\" ||\n this._source[this._index] === \"[\" ||\n this._source[this._index] === \"*\" ||\n this._source[this._index] === \".\") {\n this._index = blankLinesEnd;\n break;\n }\n\n buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n if (buffer.length || content.length) {\n buffer += \"\\n\";\n }\n ch = this._source[this._index];\n continue;\n } else if (ch === \"\\\\\") {\n const ch2 = this._source[this._index + 1];\n if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n ch = ch2;\n this._index++;\n }\n } else if (ch === \"{\") {\n // Push the buffer to content array right before placeable\n if (buffer.length) {\n content.push(buffer);\n }\n if (placeables > MAX_PLACEABLES - 1) {\n throw this.error(\n `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n }\n buffer = \"\";\n content.push(this.getPlaceable());\n\n this._index++;\n\n ch = this._source[this._index];\n placeables++;\n continue;\n }\n\n if (ch) {\n buffer += ch;\n }\n this._index++;\n ch = this._source[this._index];\n }\n\n if (content.length === 0) {\n return buffer.length ? buffer : null;\n }\n\n if (buffer.length) {\n content.push(buffer);\n }\n\n return content;\n }\n /* eslint-enable complexity */\n\n /**\n * Parses a single placeable in a Message pattern and returns its\n * expression.\n *\n * @returns {Object}\n * @private\n */\n getPlaceable() {\n const start = ++this._index;\n\n this.skipWS();\n\n if (this._source[this._index] === \"*\" ||\n (this._source[this._index] === \"[\" &&\n this._source[this._index + 1] !== \"]\")) {\n const variants = this.getVariants();\n\n return {\n type: \"sel\",\n exp: null,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n // Rewind the index and only support in-line white-space now.\n this._index = start;\n this.skipInlineWS();\n\n const selector = this.getSelectorExpression();\n\n this.skipWS();\n\n const ch = this._source[this._index];\n\n if (ch === \"}\") {\n if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of private messages cannot be interpolated.\"\n );\n }\n\n return selector;\n }\n\n if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n throw this.error('Expected \"}\" or \"->\"');\n }\n\n if (selector.type === \"ref\") {\n throw this.error(\"Message references cannot be used as selectors.\");\n }\n\n if (selector.type === \"var\") {\n throw this.error(\"Variants cannot be used as selectors.\");\n }\n\n if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of public messages cannot be used as selectors.\"\n );\n }\n\n\n this._index += 2; // ->\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"\\n\") {\n throw this.error(\"Variants should be listed in a new line\");\n }\n\n this.skipWS();\n\n const variants = this.getVariants();\n\n if (variants[0].length === 0) {\n throw this.error(\"Expected members for the select expression\");\n }\n\n return {\n type: \"sel\",\n exp: selector,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n /**\n * Parses a selector expression.\n *\n * @returns {Object}\n * @private\n */\n getSelectorExpression() {\n const literal = this.getLiteral();\n\n if (literal.type !== \"ref\") {\n return literal;\n }\n\n if (this._source[this._index] === \".\") {\n this._index++;\n\n const name = this.getIdentifier();\n this._index++;\n return {\n type: \"attr\",\n id: literal,\n name\n };\n }\n\n if (this._source[this._index] === \"[\") {\n this._index++;\n\n const key = this.getVariantKey();\n this._index++;\n return {\n type: \"var\",\n id: literal,\n key\n };\n }\n\n if (this._source[this._index] === \"(\") {\n this._index++;\n const args = this.getCallArgs();\n\n if (!functionIdentifierRe.test(literal.name)) {\n throw this.error(\"Function names must be all upper-case\");\n }\n\n this._index++;\n\n literal.type = \"fun\";\n\n return {\n type: \"call\",\n fun: literal,\n args\n };\n }\n\n return literal;\n }\n\n /**\n * Parses call arguments for a CallExpression.\n *\n * @returns {Array}\n * @private\n */\n getCallArgs() {\n const args = [];\n\n while (this._index < this._length) {\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n return args;\n }\n\n const exp = this.getSelectorExpression();\n\n // MessageReference in this place may be an entity reference, like:\n // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n if (exp.type !== \"ref\") {\n args.push(exp);\n } else {\n this.skipInlineWS();\n\n if (this._source[this._index] === \":\") {\n this._index++;\n this.skipInlineWS();\n\n const val = this.getSelectorExpression();\n\n // If the expression returned as a value of the argument\n // is not a quote delimited string or number, throw.\n //\n // We don't have to check here if the pattern is quote delimited\n // because that's the only type of string allowed in expressions.\n if (typeof val === \"string\" ||\n Array.isArray(val) ||\n val.type === \"num\") {\n args.push({\n type: \"narg\",\n name: exp.name,\n val\n });\n } else {\n this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n throw this.error(\n \"Expected string in quotes, number.\");\n }\n\n } else {\n args.push(exp);\n }\n }\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n break;\n } else if (this._source[this._index] === \",\") {\n this._index++;\n } else {\n throw this.error('Expected \",\" or \")\"');\n }\n }\n\n return args;\n }\n\n /**\n * Parses an FTL Number.\n *\n * @returns {Object}\n * @private\n */\n getNumber() {\n let num = \"\";\n let cc = this._source.charCodeAt(this._index);\n\n // The number literal may start with negative sign `-`.\n if (cc === 45) {\n num += \"-\";\n cc = this._source.charCodeAt(++this._index);\n }\n\n // next, we expect at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // followed by potentially more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n\n // followed by an optional decimal separator `.`\n if (cc === 46) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n\n // followed by at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // and optionally more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n }\n\n return {\n type: \"num\",\n val: num\n };\n }\n\n /**\n * Parses a list of Message attributes.\n *\n * @returns {Object}\n * @private\n */\n getAttributes() {\n const attrs = {};\n\n while (this._index < this._length) {\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] !== \".\") {\n break;\n }\n this._index++;\n\n const key = this.getIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"=\") {\n throw this.error('Expected \"=\"');\n }\n this._index++;\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected attribute to have a value\");\n }\n\n if (typeof val === \"string\") {\n attrs[key] = val;\n } else {\n attrs[key] = {\n val\n };\n }\n\n this.skipBlankLines();\n }\n\n return attrs;\n }\n\n /**\n * Parses a list of Selector variants.\n *\n * @returns {Array}\n * @private\n */\n getVariants() {\n const variants = [];\n let index = 0;\n let defaultIndex;\n\n while (this._index < this._length) {\n const ch = this._source[this._index];\n\n if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n ch !== \"*\") {\n break;\n }\n if (ch === \"*\") {\n this._index++;\n defaultIndex = index;\n }\n\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[\"');\n }\n\n this._index++;\n\n const key = this.getVariantKey();\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected variant to have a value\");\n }\n\n variants[index++] = {key, val};\n\n this.skipWS();\n }\n\n return [variants, defaultIndex];\n }\n\n /**\n * Parses a Variant key.\n *\n * @returns {String}\n * @private\n */\n getVariantKey() {\n // VariantKey may be a Keyword or Number\n\n const cc = this._source.charCodeAt(this._index);\n let literal;\n\n if ((cc >= 48 && cc <= 57) || cc === 45) {\n literal = this.getNumber();\n } else {\n literal = this.getVariantName();\n }\n\n if (this._source[this._index] !== \"]\") {\n throw this.error('Expected \"]\"');\n }\n\n this._index++;\n return literal;\n }\n\n /**\n * Parses an FTL literal.\n *\n * @returns {Object}\n * @private\n */\n getLiteral() {\n const cc0 = this._source.charCodeAt(this._index);\n\n if (cc0 === 36) { // $\n this._index++;\n return {\n type: \"ext\",\n name: this.getIdentifier()\n };\n }\n\n const cc1 = cc0 === 45 // -\n // Peek at the next character after the dash.\n ? this._source.charCodeAt(this._index + 1)\n // Or keep using the character at the current index.\n : cc0;\n\n if ((cc1 >= 97 && cc1 <= 122) || // a-z\n (cc1 >= 65 && cc1 <= 90)) { // A-Z\n return {\n type: \"ref\",\n name: this.getEntryIdentifier()\n };\n }\n\n if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n return this.getNumber();\n }\n\n if (cc0 === 34) { // \"\n return this.getString();\n }\n\n throw this.error(\"Expected literal\");\n }\n\n /**\n * Skips an FTL comment.\n *\n * @private\n */\n skipComment() {\n // At runtime, we don't care about comments so we just have\n // to parse them properly and skip their content.\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n while (eol !== -1 &&\n ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n (this._source[eol + 1] === \"#\" &&\n [\" \", \"#\"].includes(this._source[eol + 2])))) {\n this._index = eol + 3;\n\n eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n break;\n }\n }\n\n if (eol === -1) {\n this._index = this._length;\n } else {\n this._index = eol + 1;\n }\n }\n\n /**\n * Creates a new SyntaxError object with a given message.\n *\n * @param {String} message\n * @returns {Object}\n * @private\n */\n error(message) {\n return new SyntaxError(message);\n }\n\n /**\n * Skips to the beginning of a next entry after the current position.\n * This is used to mark the boundary of junk entry in case of error,\n * and recover from the returned position.\n *\n * @private\n */\n skipToNextEntryStart() {\n let start = this._index;\n\n while (true) {\n if (start === 0 || this._source[start - 1] === \"\\n\") {\n const cc = this._source.charCodeAt(start);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 47 || cc === 91) { // /[\n this._index = start;\n return;\n }\n }\n\n start = this._source.indexOf(\"\\n\", start);\n\n if (start === -1) {\n this._index = this._length;\n return;\n }\n start++;\n }\n }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array}\n */\nexport default function parse(string) {\n const parser = new RuntimeParser();\n return parser.getResource(string);\n}\n","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n /**\n * Create an `FluentType` instance.\n *\n * @param {Any} value - JavaScript value to wrap.\n * @param {Object} opts - Configuration.\n * @returns {FluentType}\n */\n constructor(value, opts) {\n this.value = value;\n this.opts = opts;\n }\n\n /**\n * Unwrap the raw value stored by this `FluentType`.\n *\n * @returns {Any}\n */\n valueOf() {\n return this.value;\n }\n\n /**\n * Format this instance of `FluentType` to a string.\n *\n * Formatted values are suitable for use outside of the `MessageContext`.\n * This method can use `Intl` formatters memoized by the `MessageContext`\n * instance passed as an argument.\n *\n * @param {MessageContext} [ctx]\n * @returns {string}\n */\n toString() {\n throw new Error(\"Subclasses of FluentType must implement toString.\");\n }\n}\n\nexport class FluentNone extends FluentType {\n toString() {\n return this.value || \"???\";\n }\n}\n\nexport class FluentNumber extends FluentType {\n constructor(value, opts) {\n super(parseFloat(value), opts);\n }\n\n toString(ctx) {\n try {\n const nf = ctx._memoizeIntlObject(\n Intl.NumberFormat, this.opts\n );\n return nf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentNumber) {\n return this.value === other.value;\n }\n return false;\n }\n}\n\nexport class FluentDateTime extends FluentType {\n constructor(value, opts) {\n super(new Date(value), opts);\n }\n\n toString(ctx) {\n try {\n const dtf = ctx._memoizeIntlObject(\n Intl.DateTimeFormat, this.opts\n );\n return dtf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n}\n\nexport class FluentSymbol extends FluentType {\n toString() {\n return this.value;\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentSymbol) {\n return this.value === other.value;\n } else if (typeof other === \"string\") {\n return this.value === other;\n } else if (other instanceof FluentNumber) {\n const pr = ctx._memoizeIntlObject(\n Intl.PluralRules, other.opts\n );\n return this.value === pr.select(other.value);\n }\n return false;\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`. Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n \"NUMBER\": ([arg], opts) =>\n new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n \"DATETIME\": ([arg], opts) =>\n new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n const unwrapped = {};\n for (const [name, opt] of Object.entries(opts)) {\n unwrapped[name] = opt.valueOf();\n }\n return unwrapped;\n}\n","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language. See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions. Consider:\n *\n * brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`. If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message. Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n * * {MessageContext} ctx\n * context for which the given resolution is happening\n * * {Object} args\n * list of developer provided arguments that can be used\n * * {Array} errors\n * list of errors collected while resolving\n * * {WeakSet} dirty\n * Set of patterns already encountered during this resolution.\n * This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} members\n * Hash map of variants from which the default value is to be selected.\n * @param {Number} def\n * The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n if (members[def]) {\n return members[def];\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No default\"));\n return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} id\n * The identifier of the message to be resolved.\n * @param {String} id.name\n * The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n const { ctx, errors } = env;\n const message = name.startsWith(\"-\")\n ? ctx._terms.get(name)\n : ctx._messages.get(name);\n\n if (!message) {\n const err = name.startsWith(\"-\")\n ? new ReferenceError(`Unknown term: ${name}`)\n : new ReferenceError(`Unknown message: ${name}`);\n errors.push(err);\n return new FluentNone(name);\n }\n\n return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.id\n * An Identifier of a message for which the variant is resolved.\n * @param {Object} expr.id.name\n * Name a message for which the variant is resolved.\n * @param {Object} expr.key\n * Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n const { ctx, errors } = env;\n const keyword = Type(env, key);\n\n function isVariantList(node) {\n return Array.isArray(node) &&\n node[0].type === \"sel\" &&\n node[0].exp === null;\n }\n\n if (isVariantList(message.val)) {\n // Match the specified key against keys of each variant, in order.\n for (const variant of message.val[0].vars) {\n const variantKey = Type(env, variant.key);\n if (keyword.match(ctx, variantKey)) {\n return variant;\n }\n }\n }\n\n errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.id\n * An ID of a message for which the attribute is resolved.\n * @param {String} expr.name\n * Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n if (message.attrs) {\n // Match the specified name against keys of each attribute.\n for (const attrName in message.attrs) {\n if (name === attrName) {\n return message.attrs[name];\n }\n }\n }\n\n const { errors } = env;\n errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.exp\n * Selector expression\n * @param {Array} expr.vars\n * List of variants for the select expression.\n * @param {Number} expr.def\n * Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n if (exp === null) {\n return DefaultMember(env, vars, def);\n }\n\n const selector = Type(env, exp);\n if (selector instanceof FluentNone) {\n return DefaultMember(env, vars, def);\n }\n\n // Match the selector against keys of each variant, in order.\n for (const variant of vars) {\n const key = Type(env, variant.key);\n const keyCanMatch =\n key instanceof FluentNumber || key instanceof FluentSymbol;\n\n if (!keyCanMatch) {\n continue;\n }\n\n const { ctx } = env;\n\n if (key.match(ctx, selector)) {\n return variant;\n }\n }\n\n return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case. Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n // A fast-path for strings which are the most common case, and for\n // `FluentNone` which doesn't require any additional logic.\n if (typeof expr === \"string\" || expr instanceof FluentNone) {\n return expr;\n }\n\n // The Runtime AST (Entries) encodes patterns (complex strings with\n // placeables) as Arrays.\n if (Array.isArray(expr)) {\n return Pattern(env, expr);\n }\n\n\n switch (expr.type) {\n case \"varname\":\n return new FluentSymbol(expr.name);\n case \"num\":\n return new FluentNumber(expr.val);\n case \"ext\":\n return ExternalArgument(env, expr);\n case \"fun\":\n return FunctionReference(env, expr);\n case \"call\":\n return CallExpression(env, expr);\n case \"ref\": {\n const message = MessageReference(env, expr);\n return Type(env, message);\n }\n case \"attr\": {\n const attr = AttributeExpression(env, expr);\n return Type(env, attr);\n }\n case \"var\": {\n const variant = VariantExpression(env, expr);\n return Type(env, variant);\n }\n case \"sel\": {\n const member = SelectExpression(env, expr);\n return Type(env, member);\n }\n case undefined: {\n // If it's a node with a value, resolve the value.\n if (expr.val !== null && expr.val !== undefined) {\n return Type(env, expr.val);\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No value\"));\n return new FluentNone();\n }\n default:\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n const { args, errors } = env;\n\n if (!args || !args.hasOwnProperty(name)) {\n errors.push(new ReferenceError(`Unknown external: ${name}`));\n return new FluentNone(name);\n }\n\n const arg = args[name];\n\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (arg instanceof Date) {\n return new FluentDateTime(arg);\n }\n default:\n errors.push(\n new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n );\n return new FluentNone(name);\n }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `MessageContext` constructor.\n const { ctx: { _functions }, errors } = env;\n const func = _functions[name] || builtins[name];\n\n if (!func) {\n errors.push(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n\n if (typeof func !== \"function\") {\n errors.push(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n\n return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.fun\n * FTL Function object.\n * @param {Array} expr.args\n * FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n const callee = FunctionReference(env, fun);\n\n if (callee instanceof FluentNone) {\n return callee;\n }\n\n const posargs = [];\n const keyargs = {};\n\n for (const arg of args) {\n if (arg.type === \"narg\") {\n keyargs[arg.name] = Type(env, arg.val);\n } else {\n posargs.push(Type(env, arg));\n }\n }\n\n try {\n return callee(posargs, keyargs);\n } catch (e) {\n // XXX Report errors.\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Array} ptn\n * Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n const { ctx, dirty, errors } = env;\n\n if (dirty.has(ptn)) {\n errors.push(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n\n // Tag the pattern as dirty for the purpose of the current resolution.\n dirty.add(ptn);\n const result = [];\n\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(elem);\n continue;\n }\n\n const part = Type(env, elem).toString(ctx);\n\n if (useIsolating) {\n result.push(FSI);\n }\n\n if (part.length > MAX_PLACEABLE_LENGTH) {\n errors.push(\n new RangeError(\n \"Too many characters in placeable \" +\n `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n )\n );\n result.push(part.slice(MAX_PLACEABLE_LENGTH));\n } else {\n result.push(part);\n }\n\n if (useIsolating) {\n result.push(PDI);\n }\n }\n\n dirty.delete(ptn);\n return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param {MessageContext} ctx\n * A MessageContext instance which will be used to resolve the\n * contextual information of the message.\n * @param {Object} args\n * List of arguments provided by the developer which can be accessed\n * from the message.\n * @param {Object} message\n * An object with the Message to be resolved.\n * @param {Array} errors\n * An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n const env = {\n ctx, args, errors, dirty: new WeakSet()\n };\n return Type(env, message).toString(ctx);\n}\n","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations. They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context. Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language. See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n /**\n * Create an instance of `MessageContext`.\n *\n * The `locales` argument is used to instantiate `Intl` formatters used by\n * translations. The `options` object can be used to configure the context.\n *\n * Examples:\n *\n * const ctx = new MessageContext(locales);\n *\n * const ctx = new MessageContext(locales, { useIsolating: false });\n *\n * const ctx = new MessageContext(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n *\n * Available options:\n *\n * - `functions` - an object of additional functions available to\n * translations as builtins.\n *\n * - `useIsolating` - boolean specifying whether to use Unicode isolation\n * marks (FSI, PDI) for bidi interpolations.\n *\n * @param {string|Array} locales - Locale or locales of the context\n * @param {Object} [options]\n * @returns {MessageContext}\n */\n constructor(locales, { functions = {}, useIsolating = true } = {}) {\n this.locales = Array.isArray(locales) ? locales : [locales];\n\n this._terms = new Map();\n this._messages = new Map();\n this._functions = functions;\n this._useIsolating = useIsolating;\n this._intls = new WeakMap();\n }\n\n /*\n * Return an iterator over public `[id, message]` pairs.\n *\n * @returns {Iterator}\n */\n get messages() {\n return this._messages[Symbol.iterator]();\n }\n\n /*\n * Check if a message is present in the context.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {bool}\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n\n /*\n * Return the internal representation of a message.\n *\n * The internal representation should only be used as an argument to\n * `MessageContext.format`.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {Any}\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n\n /**\n * Add a translation resource to the context.\n *\n * The translation resource must use the Fluent syntax. It will be parsed by\n * the context and each translation unit (message) will be available in the\n * context by its identifier.\n *\n * ctx.addMessages('foo = Foo');\n * ctx.getMessage('foo');\n *\n * // Returns a raw representation of the 'foo' message.\n *\n * Parsed entities should be formatted with the `format` method in case they\n * contain logic (references, select expressions etc.).\n *\n * @param {string} source - Text resource with translations.\n * @returns {Array}\n */\n addMessages(source) {\n const [entries, errors] = parse(source);\n for (const id in entries) {\n if (id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from MessageContext.\n if (this._terms.has(id)) {\n errors.push(`Attempt to override an existing term: \"${id}\"`);\n continue;\n }\n this._terms.set(id, entries[id]);\n } else {\n if (this._messages.has(id)) {\n errors.push(`Attempt to override an existing message: \"${id}\"`);\n continue;\n }\n this._messages.set(id, entries[id]);\n }\n }\n\n return errors;\n }\n\n /**\n * Format a message to a string or null.\n *\n * Format a raw `message` from the context into a string (or a null if it has\n * a null value). `args` will be used to resolve references to external\n * arguments inside of the translation.\n *\n * In case of errors `format` will try to salvage as much of the translation\n * as possible and will still return a string. For performance reasons, the\n * encountered errors are not returned but instead are appended to the\n * `errors` array passed as the third argument.\n *\n * const errors = [];\n * ctx.addMessages('hello = Hello, { $name }!');\n * const hello = ctx.getMessage('hello');\n * ctx.format(hello, { name: 'Jane' }, errors);\n *\n * // Returns 'Hello, Jane!' and `errors` is empty.\n *\n * ctx.format(hello, undefined, errors);\n *\n * // Returns 'Hello, name!' and `errors` is now:\n *\n * []\n *\n * @param {Object | string} message\n * @param {Object | undefined} args\n * @param {Array} errors\n * @returns {?string}\n */\n format(message, args, errors) {\n // optimize entities which are simple strings with no attributes\n if (typeof message === \"string\") {\n return message;\n }\n\n // optimize simple-string entities with attributes\n if (typeof message.val === \"string\") {\n return message.val;\n }\n\n // optimize entities with null values\n if (message.val === undefined) {\n return null;\n }\n\n return resolve(this, args, message, errors);\n }\n\n _memoizeIntlObject(ctor, opts) {\n const cache = this._intls.get(ctor) || {};\n const id = JSON.stringify(opts);\n\n if (!cache[id]) {\n cache[id] = new ctor(this.locales, opts);\n this._intls.set(ctor, cache);\n }\n\n return cache[id];\n }\n}\n","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n /**\n * Create an `CachedIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n constructor(iterable) {\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n\n this.seen = [];\n }\n\n [Symbol.iterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n next() {\n if (seen.length <= cur) {\n seen.push(iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n [Symbol.asyncIterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n async next() {\n if (seen.length <= cur) {\n seen.push(await iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n */\n touchNext() {\n const { seen, iterator } = this;\n if (seen.length === 0 || seen[seen.length - 1].done === false) {\n seen.push(iterator.next());\n }\n }\n}\n","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages. This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier. If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n * formatString(id, args) {\n * const ctx = mapContextSync(contexts, id);\n *\n * if (ctx === null) {\n * return id;\n * }\n *\n * const msg = ctx.getMessage(id);\n * return ctx.format(msg, args);\n * }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n * function *generateMessages() {\n * // Some lazy logic for yielding MessageContexts.\n * yield *[ctx1, ctx2];\n * }\n *\n * const contexts = new CachedIterable(generateMessages());\n * const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array} ids\n * @returns {MessageContext|Array}\n */\nexport function mapContextSync(iterable, ids) {\n if (!Array.isArray(ids)) {\n return getContextForId(iterable, ids);\n }\n\n return ids.map(\n id => getContextForId(iterable, id)\n );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n for (const context of iterable) {\n if (context.hasMessage(id)) {\n return context;\n }\n }\n\n return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array} ids\n * @returns {Promise>}\n */\nexport async function mapContextAsync(iterable, ids) {\n if (!Array.isArray(ids)) {\n for await (const context of iterable) {\n if (context.hasMessage(ids)) {\n return context;\n }\n }\n }\n\n let remainingCount = ids.length;\n const foundContexts = new Array(remainingCount).fill(null);\n\n for await (const context of iterable) {\n // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n // See https://github.com/babel/babel/issues/5880.\n for (let index = 0; index < ids.length; index++) {\n const id = ids[index];\n if (!foundContexts[index] && context.hasMessage(id)) {\n foundContexts[index] = context;\n remainingCount--;\n }\n\n // Return early when all ids have been mapped to contexts.\n if (remainingCount === 0) {\n return foundContexts;\n }\n }\n }\n\n return foundContexts;\n}\n","function nonBlank(line) {\n return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n const [indent] = line.match(/^\\s*/);\n return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array} strings\n */\nexport function ftl(strings) {\n const [code] = strings;\n const lines = code.split(\"\\n\").filter(nonBlank);\n const indents = lines.map(countIndent);\n const common = Math.min(...indents);\n const indent = new RegExp(`^\\\\s{${common}}`);\n\n return lines.map(\n line => line.replace(indent, \"\")\n ).join(\"\\n\");\n}\n","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n FluentType as MessageArgument,\n FluentNumber as MessageNumberArgument,\n FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances. This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain. When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n constructor(messages) {\n this.contexts = new CachedIterable(messages);\n this.subs = new Set();\n }\n\n /*\n * Subscribe a `Localized` component to changes of `messages`.\n */\n subscribe(comp) {\n this.subs.add(comp);\n }\n\n /*\n * Unsubscribe a `Localized` component from `messages` changes.\n */\n unsubscribe(comp) {\n this.subs.delete(comp);\n }\n\n /*\n * Set a new `messages` iterable and trigger the retranslation.\n */\n setMessages(messages) {\n this.contexts = new CachedIterable(messages);\n\n // Update all subscribed Localized components.\n this.subs.forEach(comp => comp.relocalize());\n }\n\n getMessageContext(id) {\n return mapContextSync(this.contexts, id);\n }\n\n formatCompound(mcx, msg, args) {\n const value = mcx.format(msg, args);\n\n if (msg.attrs) {\n var attrs = {};\n for (const name of Object.keys(msg.attrs)) {\n attrs[name] = mcx.format(msg.attrs[name], args);\n }\n }\n\n return { value, attrs };\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const mcx = this.getMessageContext(id);\n\n if (mcx === null) {\n return fallback || id;\n }\n\n const msg = mcx.getMessage(id);\n return mcx.format(msg, args);\n }\n}\n\nexport function isReactLocalization(props, propName) {\n const prop = props[propName];\n\n if (prop instanceof ReactLocalization) {\n return null;\n }\n\n return new Error(\n `The ${propName} context field must be an instance of ReactLocalization.`\n );\n}\n","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature. It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n * \n * …\n * \n *\n * The `LocalizationProvider` component takes one prop: `messages`. It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages. The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations. If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n constructor(props) {\n super(props);\n const { messages } = props;\n\n if (messages === undefined) {\n throw new Error(\"LocalizationProvider must receive the messages prop.\");\n }\n\n if (!messages[Symbol.iterator]) {\n throw new Error(\"The messages prop must be an iterable.\");\n }\n\n this.l10n = new ReactLocalization(messages);\n }\n\n getChildContext() {\n return {\n l10n: this.l10n\n };\n }\n\n componentWillReceiveProps(next) {\n const { messages } = next;\n\n if (messages !== this.props.messages) {\n this.l10n.setMessages(messages);\n }\n }\n\n render() {\n return Children.only(this.props.children);\n }\n}\n\nLocalizationProvider.childContextTypes = {\n l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n children: PropTypes.element.isRequired,\n messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n const prop = props[propName];\n\n if (Symbol.iterator in Object(prop)) {\n return null;\n }\n\n return new Error(\n `The ${propName} prop supplied to ${componentName} must be an iterable.`\n );\n}\n","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n class WithLocalization extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const { l10n } = this.context;\n\n if (!l10n) {\n return fallback || id;\n }\n\n return l10n.getString(id, args, fallback);\n }\n\n render() {\n return createElement(\n Inner,\n Object.assign(\n // getString needs to be re-bound on updates to trigger a re-render\n { getString: (...args) => this.getString(...args) },\n this.props\n )\n );\n }\n }\n\n WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n WithLocalization.contextTypes = {\n l10n: isReactLocalization\n };\n\n return WithLocalization;\n}\n\nfunction displayName(component) {\n return component.displayName || component.name || \"Component\";\n}\n","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n TEMPLATE.innerHTML = str;\n return TEMPLATE.content;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n menuitem: true,\n ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reMarkup = /<|?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n const args = {};\n const elems = {};\n\n for (const [propname, propval] of Object.entries(props)) {\n if (propname.startsWith(\"$\")) {\n const name = propname.substr(1);\n args[name] = propval;\n } else if (isValidElement(propval)) {\n // We'll try to match localNames of elements found in the translation with\n // names of elements passed as props. localNames are always lowercase.\n const name = propname.toLowerCase();\n elems[name] = propval;\n }\n }\n\n return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n * \n * {'Hello, world!'}
\n * \n *\n * The `id` prop should be the unique identifier of the translation. Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n * \n * {'Hello, { $username }!'}
\n * \n *\n * It's recommended that the contents of the wrapped component be a string\n * expression. The string will be used as the ultimate fallback if no\n * translation is available. It also makes it easy to grep for strings in the\n * source code.\n */\nexport default class Localized extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n render() {\n const { l10n } = this.context;\n const { id, attrs, children } = this.props;\n const elem = Children.only(children);\n\n if (!l10n) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const mcx = l10n.getMessageContext(id);\n\n if (mcx === null) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const msg = mcx.getMessage(id);\n const [args, elems] = toArguments(this.props);\n const {\n value: messageValue,\n attrs: messageAttrs\n } = l10n.formatCompound(mcx, msg, args);\n\n // The default is to forbid all message attributes. If the attrs prop exists\n // on the Localized instance, only set message attributes which have been\n // explicitly allowed by the developer.\n if (attrs && messageAttrs) {\n var localizedProps = {};\n\n for (const [name, value] of Object.entries(messageAttrs)) {\n if (attrs[name]) {\n localizedProps[name] = value;\n }\n }\n }\n\n // If the wrapped component is a known void element, explicitly dismiss the\n // message value and do not pass it to cloneElement in order to avoid the\n // \"void element tags must neither have `children` nor use\n // `dangerouslySetInnerHTML`\" error.\n if (elem.type in VOID_ELEMENTS) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message has a null value, we're only interested in its attributes.\n // Do not pass the null value to cloneElement as it would nuke all children\n // of the wrapped component.\n if (messageValue === null) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message value doesn't contain any markup nor any HTML entities,\n // insert it as the only child of the wrapped component.\n if (!reMarkup.test(messageValue)) {\n return cloneElement(elem, localizedProps, messageValue);\n }\n\n // If the message contains markup, parse it and try to match the children\n // found in the translation with the props passed to this Localized.\n const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n const translatedChildren = translationNodes.map(childNode => {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n return childNode.textContent;\n }\n\n // If the child is not expected just take its textContent.\n if (!elems.hasOwnProperty(childNode.localName)) {\n return childNode.textContent;\n }\n\n const sourceChild = elems[childNode.localName];\n\n // If the element passed as a prop to is a known void element,\n // explicitly dismiss any textContent which might have accidentally been\n // defined in the translation to prevent the \"void element tags must not\n // have children\" error.\n if (sourceChild.type in VOID_ELEMENTS) {\n return sourceChild;\n }\n\n // TODO Protect contents of elements wrapped in \n // https://github.com/projectfluent/fluent.js/issues/184\n // TODO Control localizable attributes on elements passed as props\n // https://github.com/projectfluent/fluent.js/issues/185\n return cloneElement(sourceChild, null, childNode.textContent);\n });\n\n return cloneElement(elem, localizedProps, ...translatedChildren);\n }\n}\n\nLocalized.contextTypes = {\n l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n children: PropTypes.element.isRequired,\n};\n","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent. It takes advantage of\n * React's Components system and the virtual DOM. Translations are exposed to\n * components via the provider pattern.\n *\n * \n * \n * {'Hello, world!'}
\n * \n * \n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n from \"./localization\";\n","this.Dedupe = class Dedupe {\n constructor(createKey) {\n this.createKey = createKey || this.defaultCreateKey;\n }\n\n defaultCreateKey(item) {\n return item;\n }\n\n /**\n * Dedupe any number of grouped elements favoring those from earlier groups.\n *\n * @param {Array} groups Contains an arbitrary number of arrays of elements.\n * @returns {Array} A matching array of each provided group deduped.\n */\n group(...groups) {\n const globalKeys = new Set();\n const result = [];\n for (const values of groups) {\n const valueMap = new Map();\n for (const value of values) {\n const key = this.createKey(value);\n if (!globalKeys.has(key) && !valueMap.has(key)) {\n valueMap.set(key, value);\n }\n }\n result.push(valueMap);\n valueMap.forEach((value, key) => globalKeys.add(key));\n }\n return result.map(m => Array.from(m.values()));\n }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n App: {\n // Have we received real data from the app yet?\n initialized: false,\n },\n ASRouter: {\n initialized: false,\n allowLegacySnippets: null,\n },\n Snippets: {initialized: false},\n TopSites: {\n // Have we received real data from history yet?\n initialized: false,\n // The history (and possibly default) links\n rows: [],\n // Used in content only to dispatch action to TopSiteForm.\n editForm: null,\n // Used in content only to open the SearchShortcutsForm modal.\n showSearchShortcutsForm: false,\n // The list of available search shortcuts.\n searchShortcuts: [],\n },\n Prefs: {\n initialized: false,\n values: {},\n },\n Dialog: {\n visible: false,\n data: {},\n },\n Sections: [],\n Pocket: {\n isUserLoggedIn: null,\n pocketCta: {},\n waitingForSpoc: true,\n },\n // This is the new pocket configurable layout state.\n DiscoveryStream: {\n // This is a JSON-parsed copy of the discoverystream.config pref value.\n config: {enabled: false, layout_endpoint: \"\"},\n layout: [],\n lastUpdated: null,\n feeds: {\n // \"https://foo.com/feed1\": {lastUpdated: 123, data: []}\n },\n spocs: {\n spocs_endpoint: \"\",\n lastUpdated: null,\n data: {}, // {spocs: []}\n loaded: false,\n },\n },\n Search: {\n // When search hand-off is enabled, we render a big button that is styled to\n // look like a search textbox. If the button is clicked, we style\n // the button as if it was a focused search box and show a fake cursor but\n // really focus the awesomebar without the focus styles (\"hidden focus\").\n fakeFocus: false,\n // Hide the search box after handing off to AwesomeBar and user starts typing.\n hide: false,\n },\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n switch (action.type) {\n case at.INIT:\n return Object.assign({}, prevState, action.data || {}, {initialized: true});\n default:\n return prevState;\n }\n}\n\nfunction ASRouter(prevState = INITIAL_STATE.ASRouter, action) {\n switch (action.type) {\n case at.AS_ROUTER_INITIALIZED:\n return {...action.data, initialized: true};\n case at.AS_ROUTER_PREF_CHANGED:\n return {...prevState, ...action.data};\n default:\n return prevState;\n }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n // Remove any pinned links\n const pinnedUrls = pinned.map(link => link && link.url);\n let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n newLinks = newLinks.map(link => {\n if (link && link.isPinned) {\n delete link.isPinned;\n delete link.pinIndex;\n }\n return link;\n });\n\n // Then insert them in their specified location\n pinned.forEach((val, index) => {\n if (!val) { return; }\n let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n if (index > newLinks.length) {\n newLinks[index] = link;\n } else {\n newLinks.splice(index, 0, link);\n }\n });\n\n return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n let hasMatch;\n let newRows;\n switch (action.type) {\n case at.TOP_SITES_UPDATED:\n if (!action.data || !action.data.links) {\n return prevState;\n }\n return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n case at.TOP_SITES_PREFS_UPDATED:\n return Object.assign({}, prevState, {pref: action.data.pref});\n case at.TOP_SITES_EDIT:\n return Object.assign({}, prevState, {\n editForm: {\n index: action.data.index,\n previewResponse: null,\n },\n });\n case at.TOP_SITES_CANCEL_EDIT:\n return Object.assign({}, prevState, {editForm: null});\n case at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: true});\n case at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: false});\n case at.PREVIEW_RESPONSE:\n if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: action.data.preview,\n previewUrl: action.data.url,\n },\n });\n case at.PREVIEW_REQUEST:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null,\n previewUrl: action.data.url,\n },\n });\n case at.PREVIEW_REQUEST_CANCEL:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null,\n },\n });\n case at.SCREENSHOT_UPDATED:\n newRows = prevState.rows.map(row => {\n if (row && row.url === action.data.url) {\n hasMatch = true;\n return Object.assign({}, row, {screenshot: action.data.screenshot});\n }\n return row;\n });\n return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const newSite = Object.assign({}, site);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n return newSite;\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_LINK_DELETED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.filter(site => action.data.url !== site.url);\n return Object.assign({}, prevState, {rows: newRows});\n case at.UPDATE_SEARCH_SHORTCUTS:\n return {...prevState, searchShortcuts: action.data.searchShortcuts};\n case at.SNIPPETS_PREVIEW_MODE:\n return {...prevState, rows: []};\n default:\n return prevState;\n }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n switch (action.type) {\n case at.DIALOG_OPEN:\n return Object.assign({}, prevState, {visible: true, data: action.data});\n case at.DIALOG_CANCEL:\n return Object.assign({}, prevState, {visible: false});\n case at.DELETE_HISTORY_URL:\n return Object.assign({}, INITIAL_STATE.Dialog);\n default:\n return prevState;\n }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n let newValues;\n switch (action.type) {\n case at.PREFS_INITIAL_VALUES:\n return Object.assign({}, prevState, {initialized: true, values: action.data});\n case at.PREF_CHANGED:\n newValues = Object.assign({}, prevState.values);\n newValues[action.data.name] = action.data.value;\n return Object.assign({}, prevState, {values: newValues});\n default:\n return prevState;\n }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n let hasMatch;\n let newState;\n switch (action.type) {\n case at.SECTION_DEREGISTER:\n return prevState.filter(section => section.id !== action.data);\n case at.SECTION_REGISTER:\n // If section exists in prevState, update it\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n hasMatch = true;\n return Object.assign({}, section, action.data);\n }\n return section;\n });\n // Otherwise, append it\n if (!hasMatch) {\n const initialized = !!(action.data.rows && action.data.rows.length > 0);\n const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n newState.push(section);\n }\n return newState;\n case at.SECTION_UPDATE:\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n // If the action is updating rows, we should consider initialized to be true.\n // This can be overridden if initialized is defined in the action.data\n const initialized = action.data.rows ? {initialized: true} : {};\n\n // Make sure pinned cards stay at their current position when rows are updated.\n // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n const rows = Array.from(action.data.rows);\n section.rows.forEach((card, index) => {\n if (card.pinned) {\n // Only add it if it's not already there.\n if (rows[index].guid !== card.guid) {\n rows.splice(index, 0, card);\n }\n }\n });\n return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n }\n\n return Object.assign({}, section, initialized, action.data);\n }\n return section;\n });\n\n if (!action.data.dedupeConfigurations) {\n return newState;\n }\n\n action.data.dedupeConfigurations.forEach(dedupeConf => {\n newState = newState.map(section => {\n if (section.id === dedupeConf.id) {\n const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n return newRows;\n }, section.rows);\n\n return Object.assign({}, section, {rows: dedupedRows});\n }\n\n return section;\n });\n });\n\n return newState;\n case at.SECTION_UPDATE_CARD:\n return prevState.map(section => {\n if (section && section.id === action.data.id && section.rows) {\n const newRows = section.rows.map(card => {\n if (card.url === action.data.url) {\n return Object.assign({}, card, action.data.options);\n }\n return card;\n });\n return Object.assign({}, section, {rows: newRows});\n }\n return section;\n });\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the item within the rows that is attempted to be bookmarked\n if (item.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, item, {\n bookmarkGuid,\n bookmarkTitle,\n bookmarkDateCreated: dateAdded,\n type: \"bookmark\",\n });\n }\n return item;\n }),\n }));\n case at.PLACES_SAVED_TO_POCKET:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n if (item.url === action.data.url) {\n return Object.assign({}, item, {\n open_url: action.data.open_url,\n pocket_id: action.data.pocket_id,\n title: action.data.title,\n type: \"pocket\",\n });\n }\n return item;\n }),\n }));\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the bookmark within the rows that is attempted to be removed\n if (item.url === action.data.url) {\n const newSite = Object.assign({}, item);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n if (!newSite.type || newSite.type === \"bookmark\") {\n newSite.type = \"history\";\n }\n return newSite;\n }\n return item;\n }),\n }));\n case at.PLACES_LINK_DELETED:\n case at.PLACES_LINK_BLOCKED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n case at.DELETE_FROM_POCKET:\n case at.ARCHIVE_FROM_POCKET:\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n case at.SNIPPETS_PREVIEW_MODE:\n return prevState.map(section => ({...section, rows: []}));\n default:\n return prevState;\n }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n switch (action.type) {\n case at.SNIPPETS_DATA:\n return Object.assign({}, prevState, {initialized: true}, action.data);\n case at.SNIPPET_BLOCKED:\n return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n case at.SNIPPETS_BLOCKLIST_CLEARED:\n return Object.assign({}, prevState, {blockList: []});\n case at.SNIPPETS_RESET:\n return INITIAL_STATE.Snippets;\n default:\n return prevState;\n }\n}\n\nfunction Pocket(prevState = INITIAL_STATE.Pocket, action) {\n switch (action.type) {\n case at.POCKET_WAITING_FOR_SPOC:\n return {...prevState, waitingForSpoc: action.data};\n case at.POCKET_LOGGED_IN:\n return {...prevState, isUserLoggedIn: !!action.data};\n case at.POCKET_CTA:\n return {\n ...prevState,\n pocketCta: {\n ctaButton: action.data.cta_button,\n ctaText: action.data.cta_text,\n ctaUrl: action.data.cta_url,\n useCta: action.data.use_cta,\n },\n };\n default:\n return prevState;\n }\n}\n\nfunction DiscoveryStream(prevState = INITIAL_STATE.DiscoveryStream, action) {\n switch (action.type) {\n case at.DISCOVERY_STREAM_CONFIG_CHANGE:\n // The reason this is a separate action is so it doesn't trigger a listener update on init\n case at.DISCOVERY_STREAM_CONFIG_SETUP:\n return {...prevState, config: action.data || {}};\n case at.DISCOVERY_STREAM_LAYOUT_UPDATE:\n return {...prevState, lastUpdated: action.data.lastUpdated || null, layout: action.data.layout || []};\n case at.DISCOVERY_STREAM_LAYOUT_RESET:\n return {...prevState, lastUpdated: INITIAL_STATE.DiscoveryStream.lastUpdated, layout: INITIAL_STATE.DiscoveryStream.layout};\n case at.DISCOVERY_STREAM_FEEDS_UPDATE:\n return {...prevState, feeds: action.data || prevState.feeds};\n case at.DISCOVERY_STREAM_SPOCS_ENDPOINT:\n return {\n ...prevState,\n spocs: {\n ...INITIAL_STATE.DiscoveryStream.spocs,\n spocs_endpoint: action.data || INITIAL_STATE.DiscoveryStream.spocs.spocs_endpoint,\n },\n };\n case at.DISCOVERY_STREAM_SPOCS_UPDATE:\n if (action.data) {\n return {\n ...prevState,\n spocs: {\n ...prevState.spocs,\n lastUpdated: action.data.lastUpdated,\n data: action.data.spocs,\n loaded: true,\n },\n };\n }\n return prevState;\n default:\n return prevState;\n }\n}\n\nfunction Search(prevState = INITIAL_STATE.Search, action) {\n switch (action.type) {\n case at.HIDE_SEARCH:\n return Object.assign({...prevState, hide: true});\n case at.FAKE_FOCUS_SEARCH:\n return Object.assign({...prevState, fakeFocus: true});\n case at.SHOW_SEARCH:\n return Object.assign({...prevState, hide: false, fakeFocus: false});\n default:\n return prevState;\n }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {\n TopSites,\n App,\n ASRouter,\n Snippets,\n Prefs,\n Dialog,\n Sections,\n Pocket,\n DiscoveryStream,\n Search,\n};\n\nconst EXPORTED_SYMBOLS = [\n \"reducers\",\n \"INITIAL_STATE\",\n \"insertPinned\",\n \"TOP_SITES_DEFAULT_ROWS\",\n \"TOP_SITES_MAX_SITES_PER_ROW\",\n];\n","export const cardContextTypes = {\n history: {\n intlID: \"type_label_visited\",\n icon: \"history-item\",\n },\n bookmark: {\n intlID: \"type_label_bookmarked\",\n icon: \"bookmark-added\",\n },\n trending: {\n intlID: \"type_label_recommended\",\n icon: \"trending\",\n },\n now: {\n intlID: \"type_label_now\",\n icon: \"now\",\n },\n pocket: {\n intlID: \"type_label_pocket\",\n icon: \"pocket\",\n },\n download: {\n intlID: \"type_label_downloaded\",\n icon: \"download\",\n },\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n activeCard: null,\n imageLoaded: false,\n showContextMenu: false,\n cardImage: null,\n };\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n /**\n * Helper to conditionally load an image and update state when it loads.\n */\n async maybeLoadImage() {\n // No need to load if it's already loaded or no image\n const {cardImage} = this.state;\n if (!cardImage) {\n return;\n }\n\n const imageUrl = cardImage.url;\n if (!this.state.imageLoaded) {\n // Initialize a promise to share a load across multiple card updates\n if (!gImageLoading.has(imageUrl)) {\n const loaderPromise = new Promise((resolve, reject) => {\n const loader = new Image();\n loader.addEventListener(\"load\", resolve);\n loader.addEventListener(\"error\", reject);\n loader.src = imageUrl;\n });\n\n // Save and remove the promise only while it's pending\n gImageLoading.set(imageUrl, loaderPromise);\n loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n }\n\n // Wait for the image whether just started loading or reused promise\n await gImageLoading.get(imageUrl);\n\n // Only update state if we're still waiting to load the original image\n if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n !this.state.imageLoaded) {\n this.setState({imageLoaded: true});\n }\n }\n }\n\n /**\n * Helper to obtain the next state based on nextProps and prevState.\n *\n * NOTE: Rename this method to getDerivedStateFromProps when we update React\n * to >= 16.3. We will need to update tests as well. We cannot rename this\n * method to getDerivedStateFromProps now because there is a mismatch in\n * the React version that we are using for both testing and production.\n * (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n *\n * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n */\n static getNextStateFromProps(nextProps, prevState) {\n const {image} = nextProps.link;\n const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n let nextState = null;\n\n // Image is updating.\n if (!imageInState && nextProps.link) {\n nextState = {imageLoaded: false};\n }\n\n if (imageInState) {\n return nextState;\n }\n\n // Since image was updated, attempt to revoke old image blob URL, if it exists.\n ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n nextState = nextState || {};\n nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n return nextState;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({\n activeCard: this.props.index,\n showContextMenu: true,\n });\n }\n\n /**\n * Report to telemetry additional information about the item.\n */\n _getTelemetryInfo() {\n // Filter out \"history\" type for being the default\n if (this.props.link.type !== \"history\") {\n return {value: {card_type: this.props.link.type}};\n }\n\n return null;\n }\n\n onLinkClick(event) {\n event.preventDefault();\n if (this.props.link.type === \"download\") {\n this.props.dispatch(ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: this.props.link,\n }));\n } else {\n const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n this.props.dispatch(ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n }));\n }\n if (this.props.isWebExtension) {\n this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n source: this.props.eventSource,\n url: this.props.link.url,\n action_position: this.props.index,\n }));\n } else {\n this.props.dispatch(ac.UserEvent(Object.assign({\n event: \"CLICK\",\n source: this.props.eventSource,\n action_position: this.props.index,\n }, this._getTelemetryInfo())));\n\n if (this.props.shouldSendImpressionStats) {\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.eventSource,\n click: 0,\n tiles: [{id: this.props.link.guid, pos: this.props.index}],\n }));\n }\n }\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n componentDidMount() {\n this.maybeLoadImage();\n }\n\n componentDidUpdate() {\n this.maybeLoadImage();\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillMount() {\n const nextState = _Card.getNextStateFromProps(this.props, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillReceiveProps(nextProps) {\n const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n componentWillUnmount() {\n ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n }\n\n render() {\n const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n const {props} = this;\n const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n // Display \"now\" as \"trending\" until we have new strings #3402\n const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n const hasImage = this.state.cardImage || link.hasImage;\n const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n const outerClassName = [\n \"card-outer\",\n className,\n isContextMenuOpen && \"active\",\n props.placeholder && \"placeholder\",\n ].filter(v => v).join(\" \");\n\n return (\n \n \n
\n
\n {link.type === \"download\" &&
}\n {link.hostname &&\n
\n {link.hostname.slice(0, 100)}{link.type === \"download\" && ` \\u2014 ${link.description}`}\n
\n }\n
\n
{link.title} \n
{link.description}
\n
\n
\n {icon && !link.context &&
}\n {link.icon && link.context &&
}\n {intlID && !link.context &&
}\n {link.context &&
{link.context}
}\n
\n
\n
\n \n {!props.placeholder && \n {`Open context menu for ${link.title}`} \n }\n {isContextMenuOpen &&\n \n }\n );\n }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(injectIntl(_Card));\nexport const PlaceholderCard = props => ;\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {validationError: this.props.validationError};\n this.onChange = this.onChange.bind(this);\n this.onMount = this.onMount.bind(this);\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.shouldFocus && !this.props.shouldFocus) {\n this.input.focus();\n }\n if (nextProps.validationError && !this.props.validationError) {\n this.setState({validationError: true});\n }\n // If the component is in an error state but the value was cleared by the parent\n if (this.state.validationError && !nextProps.value) {\n this.setState({validationError: false});\n }\n }\n\n onChange(ev) {\n if (this.state.validationError) {\n this.setState({validationError: false});\n }\n this.props.onChange(ev);\n }\n\n onMount(input) {\n this.input = input;\n }\n\n render() {\n const showClearButton = this.props.value && this.props.onClear;\n const {typeUrl} = this.props;\n const {validationError} = this.state;\n\n return ( \n \n {this.props.loading ?\n
:\n showClearButton &&
}\n
\n {validationError &&\n
}\n
\n );\n }\n}\n\nTopSiteFormInput.defaultProps = {\n showClearButton: false,\n value: \"\",\n validationError: false,\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n constructor(props) {\n super(props);\n const {site} = props;\n this.state = {\n label: site ? (site.label || site.hostname) : \"\",\n url: site ? site.url : \"\",\n validationError: false,\n customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n showCustomScreenshotForm: site ? site.customScreenshotURL : false,\n };\n this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n this.onLabelChange = this.onLabelChange.bind(this);\n this.onUrlChange = this.onUrlChange.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n this.onClearUrlClick = this.onClearUrlClick.bind(this);\n this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n this.validateUrl = this.validateUrl.bind(this);\n }\n\n onLabelChange(event) {\n this.setState({\"label\": event.target.value});\n }\n\n onUrlChange(event) {\n this.setState({\n url: event.target.value,\n validationError: false,\n });\n }\n\n onClearUrlClick() {\n this.setState({\n url: \"\",\n validationError: false,\n });\n }\n\n onEnableScreenshotUrlForm() {\n this.setState({showCustomScreenshotForm: true});\n }\n\n _updateCustomScreenshotInput(customScreenshotUrl) {\n this.setState({\n customScreenshotUrl,\n validationError: false,\n });\n this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n }\n\n onCustomScreenshotUrlChange(event) {\n this._updateCustomScreenshotInput(event.target.value);\n }\n\n onClearScreenshotInput() {\n this._updateCustomScreenshotInput(\"\");\n }\n\n onCancelButtonClick(ev) {\n ev.preventDefault();\n this.props.onClose();\n }\n\n onDoneButtonClick(ev) {\n ev.preventDefault();\n\n if (this.validateForm()) {\n const site = {url: this.cleanUrl(this.state.url)};\n const {index} = this.props;\n if (this.state.label !== \"\") {\n site.label = this.state.label;\n }\n\n if (this.state.customScreenshotUrl) {\n site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n } else if (this.props.site && this.props.site.customScreenshotURL) {\n // Used to flag that previously cached screenshot should be removed\n site.customScreenshotURL = null;\n }\n this.props.dispatch(ac.AlsoToMain({\n type: at.TOP_SITES_PIN,\n data: {site, index},\n }));\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"TOP_SITES_EDIT\",\n action_position: index,\n }));\n\n this.props.onClose();\n }\n }\n\n onPreviewButtonClick(event) {\n event.preventDefault();\n if (this.validateForm()) {\n this.props.dispatch(ac.AlsoToMain({\n type: at.PREVIEW_REQUEST,\n data: {url: this.cleanUrl(this.state.customScreenshotUrl)},\n }));\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"PREVIEW_REQUEST\",\n }));\n }\n }\n\n cleanUrl(url) {\n // If we are missing a protocol, prepend http://\n if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n return `http://${url}`;\n }\n return url;\n }\n\n _tryParseUrl(url) {\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n }\n\n validateUrl(url) {\n const validProtocols = [\"http:\", \"https:\"];\n const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n return urlObj && validProtocols.includes(urlObj.protocol);\n }\n\n validateCustomScreenshotUrl() {\n const {customScreenshotUrl} = this.state;\n return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n }\n\n validateForm() {\n const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n if (!validate) {\n this.setState({validationError: true});\n }\n\n return validate;\n }\n\n _renderCustomScreenshotInput() {\n const {customScreenshotUrl} = this.state;\n const requestFailed = this.props.previewResponse === \"\";\n const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n // Set focus on error if the url field is valid or when the input is first rendered and is empty\n const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n const isLoading = this.props.previewResponse === null &&\n customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n if (!this.state.showCustomScreenshotForm) {\n return (\n \n );\n }\n return (\n \n
);\n }\n\n render() {\n const {customScreenshotUrl} = this.state;\n const requestFailed = this.props.previewResponse === \"\";\n // For UI purposes, editing without an existing link is \"add\"\n const showAsAdd = !this.props.site;\n const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n // or the request failed\n const previewMode = changed && !this.props.previewResponse;\n const previewLink = Object.assign({}, this.props.site);\n if (this.props.previewResponse) {\n previewLink.screenshot = this.props.previewResponse;\n previewLink.customScreenshotURL = this.props.previewUrl;\n }\n return (\n \n );\n }\n}\n\nTopSiteForm.defaultProps = {\n site: null,\n index: -1,\n};\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/rich-text-strings.js","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///external \"ReactDOM\"","webpack:///./content-src/asrouter/templates/ReturnToAMO/ReturnToAMO.jsx","webpack:///./content-src/asrouter/components/RichText/RichText.jsx","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/asrouter/templates/StartupOverlay/StartupOverlay.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/Base/Base.jsx","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ASRouterAdmin/SimpleHashRouter.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///./content-src/components/DarkModeMessage/DarkModeMessage.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx","webpack:///./content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/TopSites/SearchShortcutsForm.jsx","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/components/MoreRecommendations/MoreRecommendations.jsx","webpack:///./content-src/components/PocketLoggedInCta/PocketLoggedInCta.jsx","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./content-src/lib/asroutercontent.js","webpack:///./content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/List/List.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/Hero/Hero.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/Navigation/Navigation.jsx","webpack:///./content-src/components/DiscoveryStreamComponents/SectionTitle/SectionTitle.jsx","webpack:///./node_modules/reselect/es/index.js","webpack:///./content-src/lib/selectLayoutRender.js","webpack:///./content-src/components/DiscoveryStreamComponents/TopSites/TopSites.jsx","webpack:///./content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/components/ConditionalWrapper/ConditionalWrapper.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./content-src/asrouter/templates/EOYSnippet/EOYSnippet.jsx","webpack:///./content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.jsx","webpack:///./content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet.jsx","webpack:///./content-src/asrouter/templates/NewsletterSnippet/NewsletterSnippet.jsx","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/isEmailOrPhoneNumber.js","webpack:///./content-src/asrouter/templates/SendToDeviceSnippet/SendToDeviceSnippet.jsx","webpack:///./content-src/asrouter/templates/template-manifest.jsx","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","reducers","global","gActivityStreamPrerenderedState","asrouterContent","ASRouterContent","DetectUserSessionStart","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","enableASRouterContent","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_showRemoteSnippets","snippetsEl","elementId","innerHTML","_logIfDevtools","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","style","display","devtoolsEnabled","log","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","initializing","subscribe","state","getState","Prefs","values","ASRouter","allowLegacySnippets","disableSnippets","Snippets","hash","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASR_CONTAINER_ID","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","dismissById","dismissBundle","bundle","executeAction","button_action","unblockById","unblockBundle","overrideMessage","sendTelemetry","ping","AS_GENERAL_OUTGOING_MESSAGE_NAME","getPreviewEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","sendClick","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","metric","dataset","args","content","do_not_autoblock","onBlockById","onDismissById","triggerOnboarding","trigger","setState","body","classList","remove","componentWillMount","addLocaleData","componentWillUnmount","renderSnippets","template","SnippetComponent","SnippetsTemplates","generateMessages","renderOnboarding","renderFirstRunOverlay","add","activityStreamStore","renderPreviewBanner","render","defaultProps","containerElement","_mount","zIndex","appendChild","_activityStreamStore","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","RICH_TEXT_CONFIG","RICH_TEXT_KEYS","cx","MessageContext","attrs","attrsToTry","Array","isArray","string","length","attr","pop","addMessages","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","OnboardingCard","onClick","UISurface","onAction","primary_button","icon","title","label","OnboardingMessage","button_label","header","extraTemplateStrings","map","ModalOverlay","active","onDoneButton","ReturnToAMO","onClickAddExtension","onBlockButton","onReady","onBlock","renderText","customElement","addon_icon","secondary_button","ALLOWED_TAGS","b","i","u","strong","em","br","convertLinks","links","doNotAutoBlock","openNewWindow","reduce","acc","linkTag","safeURI","RichText","localization_id","customElements","protocol","isAllowed","warn","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","flowId","flowBeginTime","didFetch","componentWillUpdate","fxa_endpoint","fxaParams","credentials","json","setTimeout","show","previousSibling","_getFormInfo","has_flow_params","preventDefault","focus","termsLink","privacyLink","intl","formatMessage","terms","privacy","StartupOverlay","injectIntl","didLogDevtoolsHelpText","PrefsButton","addLocaleDataForReactIntl","locale","parentLocale","debounce","func","wait","timer","wakeUp","apply","_Base","isFirstrun","isPrerendered","updateTheme","bodyClassName","filter","v","join","className","App","strings","prefs","startsWith","BaseContent","openPreferences","onWindowScroll","fixedSearch","SCROLL_THRESHOLD","scrollY","SETTINGS_OPEN","disableDarkTheme","bodyClassNames","shouldBeFixedToTop","PrerenderData","arePrefsValid","noSectionsEnabled","Sections","section","enabled","isDiscoveryStream","DiscoveryStream","config","searchHandoffEnabled","outerClassName","showSearch","Search","migrationExpired","darkModeMessage","Base","Row","relativeTime","timestamp","seconds","Math","floor","minutes","toLocaleString","DiscoveryStreamAdmin","onEnableToggle","setConfigValue","DISCOVERY_STREAM_CONFIG_SET_VALUE","checked","renderComponent","width","component","feed","renderFeed","feeds","lastUpdated","layout","opacity","layout_endpoint","row","rowIndex","components","componentIndex","ASRouterAdminInner","handleEnabledToggle","handleUserPrefToggle","onChangeMessageFilter","findOtherBundledMessagesOfSameTemplate","handleExpressionEval","onChangeTargetingParameters","onChangeAttributionParameters","setAttribution","onCopyTargetingParams","onPasteTargetingParams","onNewTargetingParams","messageFilter","evaluationStatus","stringTargetingParameters","newStringTargetingParameters","copiedToClipboard","pasteFromClipboard","attributionParameters","campaign","param","targetingParameters","messages","bundled","handleBlock","blockBundle","handleUnblock","handleOverride","expireCache","resetPref","context","parse","expression","refs","expressionInput","targetingParametersError","updatedParameters","providerPrefs","find","p","userPrefInfo","userPrefs","isUserEnabled","isSystemEnabled","isEnabling","undefined","setClipboardData","clipboardData","setData","execCommand","targetingParamsEval","innerText","renderMessageItem","isCurrent","lastMessageId","isBlocked","messageBlockList","impressions","messageImpressions","itemClassName","renderMessages","messagesToShow","renderMessageFilter","providers","renderTableHead","renderProviders","providersConfig","providerInfo","isTestProvider","info","bucket","reasonsDisabled","cohort","whiteSpace","renderPasteModal","errors","renderTargetingParameters","success","errorState","inputComp","renderPocketStory","story","guid","renderPocketStories","rows","Section","renderDiscoveryStream","renderAttributionParamers","getSection","routes","_ASRouterAdmin","ASRouterAdmin","SimpleHashRouter","onHashChange","replace","split","cloneElement","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","_DarkModeMessage","handleSwitch","handleCancel","DISCOVERY_STREAM_OPT_OUT","DarkModeMessage","INTERSECTION_RATIO","DSCard","cardElementRef","onLinkClick","setupIntersectionObserver","_intersectionObserver","unobserve","cardElement","threshold","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","dispatchSpocImpression","observe","campaignId","DISCOVERY_STREAM_SPOC_IMPRESSION","element","toUpperCase","action_position","index","click","tiles","pos","backgroundImage","image_src","excerpt","_needsImpressionStats","cards","impressionCardGuids","_dispatchImpressionStats","link","sendImpressionStatsOrAddListener","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","MIN_RICH_FAVICON_SIZE","screenshot","MIN_CORNER_FAVICON_SIZE","countTopSitesIconsTypes","topSites","countTopSitesTypes","_TopSites","onEditFormClose","onSearchShortcutsFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","site","isPinned","searchShortcuts","searchTopSite","topsites_icon_stats","topsites_pinned","topsites_search_shortcuts","sitesPerRow","TOP_SITES_MAX_SITES_PER_ROW","matchMedia","matches","TopSites","TopSitesRows","TOP_SITES_SOURCE","TOP_SITES_CANCEL_EDIT","TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL","editForm","showSearchShortcutsForm","extraMenuOptions","pref","collapsed","isFirst","isLast","topSitesRows","TOP_SITES_CONTEXT_MENU_OPTIONS","TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS","getFormattedMessage","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","setContextMenuButtonRef","sectionBody","scrollHeight","contextMenuButtonRef","node","maxHeight","_getSectionBodyHeight","userEvent","SectionMenuOptions","CheckCollapsed","div","currentTarget","renderIcon","isCollapsible","learnMore","showPrefName","privacyNoticeURL","isWebExtension","bodyStyle","CollapsibleSection","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","FallbackComponent","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","getOptions","propOptions","extraOptions","splice","option","first","last","onUpdate","SectionMenu","ContextMenu","hideContext","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","disabled","Separator","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","TOP_SITES_EDIT","AddSearchShortcut","TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL","PrivacyNotice","OPEN_LINK","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","Services","import","usablePerfObj","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","mostRecentEntry","startTime","SelectableSearchShortcut","shortcut","selected","imageStyle","keyword","onChange","SearchShortcutsForm","handleChange","onCancelButtonClick","onSaveButtonClick","shortcuts","isSelected","ev","onClose","pinQueue","unpinQueue","alreadyPinned","_searchTopSite","searchVendor","shortURL","UPDATE_PINNED_SEARCH_SHORTCUTS","addedShortcuts","deletedShortcuts","search_vendor","TopSiteLink","screenshotImage","onDragEvent","onKeyPress","_allowDrop","dataTransfer","types","dragged","effectAllowed","blur","button","getNextStateFromProps","imageInState","ScreenshotUtils","isRemoteImageLocal","maybeRevokeBlobObjectURL","createLocalImageObject","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","_getTelemetryInfo","icon_type","iconType","card_type","hostname","altKey","ctrlKey","metaKey","FILL_SEARCH_TERM","onActivate","isContextMenuOpen","activeIndex","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","shift","topSitesUI","commonProps","maxNarrowVisibleIndex","l","slotProps","TopSiteList","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","isPrivateBrowsingEnabled","siteInfo","platform","isDefault","LinkMenuOptions","impression","string_id","userEventData","shouldSendImpressionStats","LinkMenu","_OpenInPrivateWindow","OPEN_PRIVATE_WINDOW","referrer","GetPlatformString","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","BLOCK_URL","open_url","pocket_id","block","WebExtDismiss","WEBEXT_DISMISS","DeleteUrl","isEnabled","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","CheckBookmark","CheckPinTopSite","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","isBlob","isLocal","image","path","remoteImage","createObjectURL","localImage","revokeObjectURL","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","jsonPrefs","_isPrefEnabled","prefObj","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","isPrefModified","order","_Search","onSearchClick","onSearchHandoffClick","onSearchHandoffPaste","onSearchHandoffDrop","onInputMount","onSearchHandoffButtonMount","handleEvent","detail","gContentSearchController","search","doSearchHandoff","HANDOFF_SEARCH_TO_AWESOMEBAR","FAKE_FOCUS_SEARCH","HIDE_SEARCH","getData","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","_searchHandoffButton","wrapperClassName","hide","fakeFocus","showLogo","handoffEnabled","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","numRows","rowsPref","maxRows","cardsPerRow","compactCards","maxCards","needsImpressionStats","sendNewTabRehydrated","isCollapsed","wasCollapsed","renderNotified","NEW_TAB_REHYDRATED","Pocket","topics","emptyState","read_more_endpoint","contextMenuOptions","waitingForSpoc","maxCardsPerRow","maxCardsOnNarrow","pocketCta","isUserLoggedIn","useCta","isPocketLoggedInDefined","hasTopics","shouldShowPocketCta","shouldShowTopics","shouldShowReadMore","realRows","shouldShowEmptyState","usePlaceholder","sectionClassName","padding","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","s","MoreRecommendations","_PocketLoggedInCta","ctaUrl","ctaButton","ctaText","PocketLoggedInCta","Topic","Topics","t","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","CardGrid","recommendations","items","rec","campaign_id","domain","divisibility","border","DSMessage","hasSubtitleAndOrLink","link_text","link_url","subtitle","ListItem","_List","recs","recMarkup","recStartingPoint","listStyles","fullWidth","hasBorders","hasImages","hasNumbers","List","Hero","heroRec","otherRecs","list","subComponentType","HorizontalRule","Navigation","alignment","SectionTitle","selectLayoutRender","createSelector","spocs","layoutRender","spocIndex","maybeInjectSpocs","spocsConfig","positions","position","rickRoll","random","probability","MAX_ROWS_HERO","MAX_ROWS_LIST","MAX_ROWS_CARDGRID","ALLOWED_CSS_URL_PREFIXES","DUMMY_CSS_SELECTOR","isAllowedCSS","property","urls","match","every","prefix","_DiscoveryStreamBase","onStyleMount","extractRows","limit","min","properties","sheet","styles","selectors","declarations","insertRule","rule","cssRules","removeProperty","selectorText","selector","embedWidth","loaded","full_width","has_images","has_numbers","renderStyles","transform","DiscoveryStreamBase","ALLOWED_STYLE_TAGS","Button","tag","ConditionalWrapper","condition","wrap","SnippetBase","onBlockClicked","onDismissClicked","onDismiss","renderDismissButton","footerDismiss","scene2_dismiss_button_text","defaultTitle","schema","block_button_text","default","containerClassName","textStyle","DEFAULT_ICON_PATH","SimpleSnippet","onButtonClick","button_url","button_action_args","_shouldRenderButton","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_color","button_background_color","wrapSectionHeader","wrapSnippetContent","renderSectionHeader","section_title_icon","section_title_text","sectionTitleIcon","sectionTitleURL","section_title_url","sectionHeader","tall","extraContent","EOYSnippetBase","handleSubmit","setFrequencyValue","frequencyCheckbox","form","querySelector","submit","renderDonations","fieldNames","numberFormat","Intl","NumberFormat","navigator","language","currency","currency_code","minimumFractionDigits","selected_button","btnStyle","color","donationURLParams","paramsStartIndex","donation_form_url","form_method","idx","field","button_name","amount","format","monthly_checkbox_label_text","text_color","background_color","highlight_color","test","EOYSnippet","extendedContent","SubmitFormSnippet","expandSnippet","handleSubmitAttempt","expanded","submitAttempted","signupSubmitted","signupSuccess","disableForm","preventDismiss","formData","processFormData","mainInput","FormData","fetchRequest","Request","method","renderHiddenFormInputs","hidden_inputs","renderDisclaimer","scene2_disclaimer_html","renderFormPrivacyNotice","scene2_privacy_html","renderSignupSubmitted","isSuccess","successTitle","success_title","bodyText","success_text","error_text","retryButtonText","scene1_button_label","validateInput","setCustomValidity","renderInput","placholder","scene2_email_placeholder_text","scene2_input_placeholder","inputType","renderSignupView","containerClass","scene2_icon","scene2_title","scene2_text","form_action","scene2_button_label","getFirstSceneContent","substr","FXASignupSnippet","userAgent","firefox_version","entrypoint","service","utm_source","utm_content","utm_campaign","utm_term","NewsletterSnippet","scene2_newsletter","newsletters","fmt","source_url","isEmailOrPhoneNumber","val","email_re","check_email","check_phone","isNaN","include_sms","append","message_id_sms","country","message_id_email","encodeURIComponent","addDefaultValues","SendToDeviceSnippet","propsWithDefaults","simple_snippet","newsletter_snippet","fxa_signup_snippet","send_to_device_snippet","eoy_snippet","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","_source","_index","_length","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","getPattern","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","getSelectorExpression","literal","getLiteral","getVariantKey","getCallArgs","fun","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","member","hasOwnProperty","TypeError","_functions","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","RegExp","ReactLocalization","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","LocalizationProvider","l10n","getChildContext","Children","only","childContextTypes","propTypes","PropTypes","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","isValidElement","toLowerCase","Localized","messageValue","messageAttrs","localizedProps","VOID_ELEMENTS","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","dedupe","INITIAL_STATE","spocs_endpoint","AS_ROUTER_INITIALIZED","AS_ROUTER_PREF_CHANGED","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","UPDATE_SEARCH_SHORTCUTS","SNIPPETS_PREVIEW_MODE","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","POCKET_WAITING_FOR_SPOC","POCKET_LOGGED_IN","POCKET_CTA","cta_button","cta_text","cta_url","use_cta","DISCOVERY_STREAM_CONFIG_CHANGE","DISCOVERY_STREAM_CONFIG_SETUP","DISCOVERY_STREAM_LAYOUT_UPDATE","DISCOVERY_STREAM_LAYOUT_RESET","DISCOVERY_STREAM_FEEDS_UPDATE","DISCOVERY_STREAM_SPOCS_ENDPOINT","DISCOVERY_STREAM_SPOCS_UPDATE","SHOW_SEARCH","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","_Card","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","hasImage","placeholder","description","Card","PlaceholderCard","TopSiteFormInput","validationError","onMount","shouldFocus","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteForm","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {enableASRouterContent} from \"content-src/lib/asroutercontent\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\nconst asrouterContent = new ASRouterContent();\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\nenableASRouterContent(store, asrouterContent);\n\nReactDOM.hydrate(\n \n , document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n * Use this in action creators if you need different logic\n * for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n// INIT: \"INIT\",\n// UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n \"ADDONS_INFO_REQUEST\",\n \"ADDONS_INFO_RESPONSE\",\n \"ARCHIVE_FROM_POCKET\",\n \"AS_ROUTER_INITIALIZED\",\n \"AS_ROUTER_PREF_CHANGED\",\n \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n \"BLOCK_URL\",\n \"BOOKMARK_URL\",\n \"COPY_DOWNLOAD_LINK\",\n \"DELETE_BOOKMARK_BY_ID\",\n \"DELETE_FROM_POCKET\",\n \"DELETE_HISTORY_URL\",\n \"DIALOG_CANCEL\",\n \"DIALOG_OPEN\",\n \"DISCOVERY_STREAM_CONFIG_CHANGE\",\n \"DISCOVERY_STREAM_CONFIG_SETUP\",\n \"DISCOVERY_STREAM_CONFIG_SET_VALUE\",\n \"DISCOVERY_STREAM_FEEDS_UPDATE\",\n \"DISCOVERY_STREAM_LAYOUT_RESET\",\n \"DISCOVERY_STREAM_LAYOUT_UPDATE\",\n \"DISCOVERY_STREAM_OPT_OUT\",\n \"DISCOVERY_STREAM_SPOCS_ENDPOINT\",\n \"DISCOVERY_STREAM_SPOCS_UPDATE\",\n \"DISCOVERY_STREAM_SPOC_IMPRESSION\",\n \"DOWNLOAD_CHANGED\",\n \"FAKE_FOCUS_SEARCH\",\n \"FILL_SEARCH_TERM\",\n \"HANDOFF_SEARCH_TO_AWESOMEBAR\",\n \"HIDE_SEARCH\",\n \"INIT\",\n \"MIGRATION_CANCEL\",\n \"MIGRATION_COMPLETED\",\n \"MIGRATION_START\",\n \"NEW_TAB_INIT\",\n \"NEW_TAB_INITIAL_STATE\",\n \"NEW_TAB_LOAD\",\n \"NEW_TAB_REHYDRATED\",\n \"NEW_TAB_STATE_REQUEST\",\n \"NEW_TAB_UNLOAD\",\n \"OPEN_DOWNLOAD_FILE\",\n \"OPEN_LINK\",\n \"OPEN_NEW_WINDOW\",\n \"OPEN_PRIVATE_WINDOW\",\n \"OPEN_WEBEXT_SETTINGS\",\n \"PAGE_PRERENDERED\",\n \"PLACES_BOOKMARK_ADDED\",\n \"PLACES_BOOKMARK_REMOVED\",\n \"PLACES_HISTORY_CLEARED\",\n \"PLACES_LINKS_CHANGED\",\n \"PLACES_LINK_BLOCKED\",\n \"PLACES_LINK_DELETED\",\n \"PLACES_SAVED_TO_POCKET\",\n \"POCKET_CTA\",\n \"POCKET_LOGGED_IN\",\n \"POCKET_WAITING_FOR_SPOC\",\n \"PREFS_INITIAL_VALUES\",\n \"PREF_CHANGED\",\n \"PREVIEW_REQUEST\",\n \"PREVIEW_REQUEST_CANCEL\",\n \"PREVIEW_RESPONSE\",\n \"REMOVE_DOWNLOAD_FILE\",\n \"RICH_ICON_MISSING\",\n \"SAVE_SESSION_PERF_DATA\",\n \"SAVE_TO_POCKET\",\n \"SCREENSHOT_UPDATED\",\n \"SECTION_DEREGISTER\",\n \"SECTION_DISABLE\",\n \"SECTION_ENABLE\",\n \"SECTION_MOVE\",\n \"SECTION_OPTIONS_CHANGED\",\n \"SECTION_REGISTER\",\n \"SECTION_UPDATE\",\n \"SECTION_UPDATE_CARD\",\n \"SETTINGS_CLOSE\",\n \"SETTINGS_OPEN\",\n \"SET_PREF\",\n \"SHOW_DOWNLOAD_FILE\",\n \"SHOW_FIREFOX_ACCOUNTS\",\n \"SHOW_SEARCH\",\n \"SKIPPED_SIGNIN\",\n \"SNIPPETS_BLOCKLIST_CLEARED\",\n \"SNIPPETS_BLOCKLIST_UPDATED\",\n \"SNIPPETS_DATA\",\n \"SNIPPETS_PREVIEW_MODE\",\n \"SNIPPETS_RESET\",\n \"SNIPPET_BLOCKED\",\n \"SUBMIT_EMAIL\",\n \"SYSTEM_TICK\",\n \"TELEMETRY_IMPRESSION_STATS\",\n \"TELEMETRY_PERFORMANCE_EVENT\",\n \"TELEMETRY_UNDESIRED_EVENT\",\n \"TELEMETRY_USER_EVENT\",\n \"TOP_SITES_CANCEL_EDIT\",\n \"TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_EDIT\",\n \"TOP_SITES_INSERT\",\n \"TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL\",\n \"TOP_SITES_PIN\",\n \"TOP_SITES_PREFS_UPDATED\",\n \"TOP_SITES_UNPIN\",\n \"TOP_SITES_UPDATED\",\n \"TOTAL_BOOKMARKS_REQUEST\",\n \"TOTAL_BOOKMARKS_RESPONSE\",\n \"UNINIT\",\n \"UPDATE_PINNED_SEARCH_SHORTCUTS\",\n \"UPDATE_SEARCH_SHORTCUTS\",\n \"UPDATE_SECTION_PREFS\",\n \"WEBEXT_CLICK\",\n \"WEBEXT_DISMISS\",\n]) {\n actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n \"INSTALL_ADDON_FROM_URL\",\n \"OPEN_APPLICATIONS_MENU\",\n \"OPEN_PRIVATE_BROWSER_WINDOW\",\n \"OPEN_URL\",\n \"OPEN_ABOUT_PAGE\",\n \"OPEN_PREFERENCES_PAGE\",\n \"SHOW_FIREFOX_ACCOUNTS\",\n]) {\n ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n const meta = action.meta ? {...action.meta} : {};\n if (!options || !options.from || !options.to) {\n throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n }\n // For each of these fields, if they are passed as an option,\n // add them to the action. If they are not defined, remove them.\n [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n if (typeof options[o] !== \"undefined\") {\n meta[o] = options[o];\n } else if (meta[o]) {\n delete meta[o];\n }\n });\n return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {bool} skipLocal Used by OnlyToMain to skip the main reducer\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n return _RouteMessage(action, {\n from: CONTENT_MESSAGE_TYPE,\n to: MAIN_MESSAGE_TYPE,\n fromTarget,\n skipLocal,\n });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {object} options\n * @param {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE,\n });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n * and also sent to a particular Content process.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @param {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n if (!target) {\n throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n }\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: CONTENT_MESSAGE_TYPE,\n toTarget: target,\n skipMain,\n });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n * and skip the main reducer.\n *\n * @param {object} action Any redux action (required)\n * @param {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n return _RouteMessage(action, {\n from: MAIN_MESSAGE_TYPE,\n to: PRELOAD_MESSAGE_TYPE,\n });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n return AlsoToMain({\n type: actionTypes.TELEMETRY_USER_EVENT,\n data,\n });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n * be sent from the UI during a user session.\n *\n * @param {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n return AlsoToMain({\n type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n data,\n });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param {object} data Fields to include in the ping (value, etc.)\n * @param {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param {object} data Fields to include in the ping\n * @param {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n const action = {\n type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n data,\n };\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n const action = {type: actionTypes.SET_PREF, data: {name, value}};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n if (!data || !data.source) {\n throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n }\n const action = {type, data};\n return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n BroadcastToContent,\n UserEvent,\n ASRouterUserEvent,\n UndesiredEvent,\n PerfEvent,\n ImpressionStats,\n AlsoToOneContent,\n OnlyToOneContent,\n AlsoToMain,\n OnlyToMain,\n AlsoToPreloaded,\n SetPref,\n WebExtEvent,\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n isSendToMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n },\n isBroadcastToContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToOneContent(action) {\n if (!action.meta) {\n return false;\n }\n if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n return true;\n }\n return false;\n },\n isSendToPreloaded(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n action.meta.from === MAIN_MESSAGE_TYPE;\n },\n isFromMain(action) {\n if (!action.meta) {\n return false;\n }\n return action.meta.from === MAIN_MESSAGE_TYPE &&\n action.meta.to === CONTENT_MESSAGE_TYPE;\n },\n getPortIdOfSender(action) {\n return (action.meta && action.meta.fromTarget) || null;\n },\n _RouteMessage,\n};\n\nconst EXPORTED_SYMBOLS = [\n \"actionTypes\",\n \"actionCreators\",\n \"actionUtils\",\n \"ASRouterActions\",\n \"globalImportContext\",\n \"UI_CODE\",\n \"BACKGROUND_PROCESS\",\n \"MAIN_MESSAGE_TYPE\",\n \"CONTENT_MESSAGE_TYPE\",\n \"PRELOAD_MESSAGE_TYPE\",\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n * the same interface as a Map, but is optionally backed by\n * indexedDB for persistent storage.\n * Call .connect() to open a database connection and restore any\n * previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n constructor(dispatch) {\n super();\n this._db = null;\n this._dispatch = dispatch;\n }\n\n set(key, value) {\n super.set(key, value);\n return this._dbTransaction(db => db.put(value, key));\n }\n\n delete(key) {\n super.delete(key);\n return this._dbTransaction(db => db.delete(key));\n }\n\n clear() {\n super.clear();\n this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n return this._dbTransaction(db => db.clear());\n }\n\n get blockList() {\n return this.get(\"blockList\") || [];\n }\n\n /**\n * blockSnippetById - Blocks a snippet given an id\n *\n * @param {str|int} id The id of the snippet\n * @return {Promise} Resolves when the id has been written to indexedDB,\n * or immediately if the snippetMap is not connected\n */\n async blockSnippetById(id) {\n if (!id) {\n return;\n }\n const {blockList} = this;\n if (!blockList.includes(id)) {\n blockList.push(id);\n this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n await this.set(\"blockList\", blockList);\n }\n }\n\n disableOnboarding() {}\n\n showFirefoxAccounts() {\n this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n }\n\n getTotalBookmarksCount() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n getAddonsInfo() {\n return new Promise(resolve => {\n this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n if (action.type === at.ADDONS_INFO_RESPONSE) {\n resolve(action.data);\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n }\n });\n });\n }\n\n /**\n * connect - Attaches an indexedDB back-end to the Map so that any set values\n * are also cached in a store. It also restores any existing values\n * that are already stored in the indexedDB store.\n *\n * @return {type} description\n */\n async connect() {\n // Open the connection\n const db = await this._openDB();\n\n // Restore any existing values\n await this._restoreFromDb(db);\n\n // Attach a reference to the db\n this._db = db;\n }\n\n /**\n * _dbTransaction - Returns a db transaction wrapped with the given modifier\n * function as a Promise. If the db has not been connected,\n * it resolves immediately.\n *\n * @param {func} modifier A function to call with the transaction\n * @return {obj} A Promise that resolves when the transaction has\n * completed or errored\n */\n _dbTransaction(modifier) {\n if (!this._db) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const transaction = modifier(\n this._db\n .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n );\n transaction.onsuccess = event => resolve();\n\n /* istanbul ignore next */\n transaction.onerror = event => reject(transaction.error);\n });\n }\n\n _openDB() {\n return new Promise((resolve, reject) => {\n const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n /* istanbul ignore next */\n openRequest.onerror = event => {\n // Try to delete the old database so that we can start this process over\n // next time.\n indexedDB.deleteDatabase(DATABASE_NAME);\n reject(event);\n };\n\n openRequest.onupgradeneeded = event => {\n const db = event.target.result;\n if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n }\n };\n\n openRequest.onsuccess = event => {\n let db = event.target.result;\n\n /* istanbul ignore next */\n db.onerror = err => console.error(err); // eslint-disable-line no-console\n /* istanbul ignore next */\n db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n resolve(db);\n };\n });\n }\n\n _restoreFromDb(db) {\n return new Promise((resolve, reject) => {\n let cursorRequest;\n try {\n cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n } catch (err) {\n // istanbul ignore next\n reject(err);\n // istanbul ignore next\n return;\n }\n\n /* istanbul ignore next */\n cursorRequest.onerror = event => reject(event);\n\n cursorRequest.onsuccess = event => {\n let cursor = event.target.result;\n // Populate the cache from the persistent storage.\n if (cursor) {\n if (cursor.value !== \"blockList\") {\n this.set(cursor.key, cursor.value);\n }\n cursor.continue();\n } else {\n // We are done.\n resolve();\n }\n };\n });\n }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n * remote location, or else default snippets if the remote\n * snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n constructor(dispatch) {\n // Initialize the Snippets Map and attaches it to a global so that\n // the snippet payload can interact with it.\n global.gSnippetsMap = new SnippetsMap(dispatch);\n this._onAction = this._onAction.bind(this);\n }\n\n get snippetsMap() {\n return global.gSnippetsMap;\n }\n\n async _refreshSnippets() {\n // Check if the cached version of of the snippets in snippetsMap. If it's too\n // old, blow away the entire snippetsMap.\n const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n if (cachedVersion !== this.appData.version) {\n this.snippetsMap.clear();\n }\n\n // Has enough time passed for us to require an update?\n const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n if (needsUpdate && this.appData.snippetsURL) {\n this.snippetsMap.set(\"snippets-last-update\", Date.now());\n try {\n const response = await fetch(this.appData.snippetsURL);\n if (response.status === 200) {\n const payload = await response.text();\n\n this.snippetsMap.set(\"snippets\", payload);\n this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n }\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n }\n\n _showRemoteSnippets() {\n const snippetsEl = document.getElementById(this.elementId);\n const payload = this.snippetsMap.get(\"snippets\");\n\n if (!snippetsEl) {\n throw new Error(`No element was found with id '${this.elementId}'.`);\n }\n\n // This could happen if fetching failed\n if (!payload) {\n throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n }\n\n if (typeof payload !== \"string\") {\n throw new Error(\"Snippet payload was incorrectly formatted\");\n }\n\n // Note that injecting snippets can throw if they're invalid XML.\n // eslint-disable-next-line no-unsanitized/property\n snippetsEl.innerHTML = payload;\n\n this._logIfDevtools(\"Successfully added snippets.\");\n\n // Scripts injected by innerHTML are inactive, so we have to relocate them\n // through DOM manipulation to activate their contents.\n for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n const relocatedScript = document.createElement(\"script\");\n relocatedScript.text = scriptEl.text;\n scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n }\n }\n\n _onAction(msg) {\n if (msg.data.type === at.SNIPPET_BLOCKED) {\n if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n document.getElementById(\"snippets-container\").style.display = \"none\";\n }\n }\n }\n\n // istanbul ignore next\n _logIfDevtools(text) {\n if (this.devtoolsEnabled) {\n console.log(\"Legacy snippets:\", text); // eslint-disable-line no-console\n }\n }\n\n /**\n * init - Fetch the snippet payload and show snippets\n *\n * @param {obj} options\n * @param {str} options.appData.snippetsURL The URL from which we fetch snippets\n * @param {int} options.appData.version The current snippets version\n * @param {str} options.elementId The id of the element in which to inject snippets\n * @param {bool} options.connect Should gSnippetsMap connect to indexedDB?\n */\n async init(options) {\n Object.assign(this, {\n appData: {},\n elementId: \"snippets\",\n connect: true,\n devtoolsEnabled: false,\n }, options);\n\n this._logIfDevtools(\"Initializing...\");\n\n // Add listener so we know when snippets are blocked on other pages\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n\n // TODO: Requires enabling indexedDB on newtab\n // Restore the snippets map from indexedDB\n if (this.connect) {\n try {\n await this.snippetsMap.connect();\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n }\n\n // Cache app data values so they can be accessible from gSnippetsMap\n for (const key of Object.keys(this.appData)) {\n if (key === \"blockList\") {\n this.snippetsMap.set(\"blockList\", this.appData[key]);\n } else {\n this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n }\n }\n\n // Refresh snippets, if enough time has passed.\n await this._refreshSnippets();\n\n // Try showing remote snippets, falling back to defaults if necessary.\n try {\n this._showRemoteSnippets();\n } catch (e) {\n this._logIfDevtools(\"Problem inserting remote snippets!\");\n console.error(e); // eslint-disable-line no-console\n }\n\n window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n this.initialized = true;\n this._logIfDevtools(\"Finished initializing.\");\n }\n\n uninit() {\n window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n if (global.RPMRemoveMessageListener) {\n global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n }\n this.initialized = false;\n }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n * when the store has received the appropriate\n * Snippet data.\n *\n * @param {obj} store The redux store\n * @return {obj} Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n const snippets = new SnippetsProvider(store.dispatch);\n\n let initializing = false;\n\n store.subscribe(async () => {\n const state = store.getState();\n\n /**\n * Sorry this code is so complicated. It will be removed soon.\n * This is what the different values actually mean:\n *\n * ASRouter.initialized Is ASRouter.jsm initialised?\n * ASRouter.allowLegacySnippets Are ASRouter snippets turned OFF (i.e. legacy snippets are allowed)\n * state.Prefs.values[\"feeds.snippets\"] User preference for snippets\n * state.Snippets.initialized Is SnippetsFeed.jsm initialised?\n * snippets.initialized Is in-content snippets currently initialised?\n * state.Prefs.values.disableSnippets This pref is used to disable legacy snippets in an emergency\n * in a way that is not user-editable (true = disabled)\n */\n\n /** If we should initialize snippets... */\n if (\n state.Prefs.values[\"feeds.snippets\"] &&\n state.ASRouter.initialized &&\n state.ASRouter.allowLegacySnippets &&\n !state.Prefs.values.disableSnippets &&\n state.Snippets.initialized &&\n !snippets.initialized &&\n // Don't call init multiple times\n !initializing &&\n location.href !== \"about:welcome\" &&\n location.hash !== \"#asrouter\"\n ) {\n initializing = true;\n await snippets.init({appData: state.Snippets, devtoolsEnabled: state.Prefs.values[\"asrouter.devtoolsEnabled\"]});\n initializing = false;\n\n /** If we should remove snippets... */\n } else if (\n (\n state.Prefs.values[\"feeds.snippets\"] === false ||\n state.Prefs.values.disableSnippets === true ||\n (state.ASRouter.initialized && !state.ASRouter.allowLegacySnippets)\n ) &&\n snippets.initialized\n ) {\n // Remove snippets\n snippets.uninit();\n // istanbul ignore if\n if (state.Prefs.values[\"asrouter.devtoolsEnabled\"]) {\n console.log(\"Legacy snippets removed\"); // eslint-disable-line no-console\n }\n }\n });\n\n // Returned for testing purposes\n return {snippets};\n}\n","import {addLocaleData, IntlProvider} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {generateMessages} from \"./rich-text-strings\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {LocalizationProvider} from \"fluent-react\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {ReturnToAMO} from \"./templates/ReturnToAMO/ReturnToAMO\";\nimport {SnippetsTemplates} from \"./templates/template-manifest\";\nimport {StartupOverlay} from \"./templates/StartupOverlay/StartupOverlay\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\nconst ASR_CONTAINER_ID = \"asr-newtab-container\";\n\nexport const ASRouterUtils = {\n addListener(listener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n removeListener(listener) {\n global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n },\n sendMessage(action) {\n global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n },\n blockById(id, options) {\n ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id, ...options}});\n },\n dismissById(id) {\n ASRouterUtils.sendMessage({type: \"DISMISS_MESSAGE_BY_ID\", data: {id}});\n },\n dismissBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"DISMISS_BUNDLE\", data: {bundle}});\n },\n executeAction(button_action) {\n ASRouterUtils.sendMessage({\n type: \"USER_ACTION\",\n data: button_action,\n });\n },\n unblockById(id) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n },\n unblockBundle(bundle) {\n ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n },\n overrideMessage(id) {\n ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n },\n sendTelemetry(ping) {\n const payload = ac.ASRouterUserEvent(ping);\n global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n },\n getPreviewEndpoint() {\n if (window.location.href.includes(\"endpoint\")) {\n const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n try {\n const endpoint = new URL(params.get(\"endpoint\"));\n return {\n url: endpoint.href,\n snippetId: params.get(\"snippetId\"),\n };\n } catch (e) {}\n }\n\n return null;\n },\n};\n\n// Note: nextProps/prevProps refer to props passed to , not \nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessageFromParent = this.onMessageFromParent.bind(this);\n this.sendClick = this.sendClick.bind(this);\n this.sendImpression = this.sendImpression.bind(this);\n this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n this.state = {message: {}, bundle: {}};\n }\n\n sendUserActionTelemetry(extraProps = {}) {\n const {message, bundle} = this.state;\n if (!message && !extraProps.message_id) {\n throw new Error(`You must provide a message_id for bundled messages`);\n }\n const eventType = `${message.provider || bundle.provider}_user_event`;\n ASRouterUtils.sendTelemetry({\n message_id: message.id || extraProps.message_id,\n source: extraProps.id,\n action: eventType,\n ...extraProps,\n });\n }\n\n sendImpression(extraProps) {\n if (this.state.message.provider === \"preview\") {\n return;\n }\n\n ASRouterUtils.sendMessage({type: \"IMPRESSION\", data: this.state.message});\n this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n }\n\n // If link has a `metric` data attribute send it as part of the `value`\n // telemetry field which can have arbitrary values.\n // Used for router messages with links as part of the content.\n sendClick(event) {\n const metric = {\n value: event.target.dataset.metric,\n // Used for the `source` of the event. Needed to differentiate\n // from other snippet or onboarding events that may occur.\n id: \"NEWTAB_FOOTER_BAR_CONTENT\",\n };\n const action = {\n type: event.target.dataset.action,\n data: {args: event.target.dataset.args},\n };\n if (action.type) {\n ASRouterUtils.executeAction(action);\n }\n if (!this.state.message.content.do_not_autoblock && !event.target.dataset.do_not_autoblock) {\n ASRouterUtils.blockById(this.state.message.id);\n }\n if (this.state.message.provider !== \"preview\") {\n this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n }\n }\n\n onBlockById(id) {\n return options => ASRouterUtils.blockById(id, options);\n }\n\n onDismissById(id) {\n return () => ASRouterUtils.dismissById(id);\n }\n\n dismissBundle(bundle) {\n return () => ASRouterUtils.dismissBundle(bundle);\n }\n\n triggerOnboarding() {\n ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"showOnboarding\"}}});\n }\n\n onMessageFromParent({data: action}) {\n switch (action.type) {\n case \"SET_MESSAGE\":\n this.setState({message: action.data});\n break;\n case \"SET_BUNDLED_MESSAGES\":\n this.setState({bundle: action.data});\n break;\n case \"CLEAR_MESSAGE\":\n if (action.data.id === this.state.message.id) {\n this.setState({message: {}});\n // Remove any styles related to the RTAMO message\n document.body.classList.remove(\"welcome\", \"hide-main\", \"amo\");\n }\n break;\n case \"CLEAR_PROVIDER\":\n if (action.data.id === this.state.message.provider) {\n this.setState({message: {}});\n }\n break;\n case \"CLEAR_BUNDLE\":\n if (this.state.bundle.bundle) {\n this.setState({bundle: {}});\n }\n break;\n case \"CLEAR_ALL\":\n this.setState({message: {}, bundle: {}});\n }\n }\n\n componentWillMount() {\n // Add locale data for StartupOverlay because it uses react-intl\n addLocaleData(global.document.documentElement.lang);\n\n const endpoint = ASRouterUtils.getPreviewEndpoint();\n ASRouterUtils.addListener(this.onMessageFromParent);\n\n // If we are loading about:welcome we want to trigger the onboarding messages\n if (this.props.document.location.href === \"about:welcome\") {\n ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: {id: \"firstRun\"}}});\n } else {\n ASRouterUtils.sendMessage({type: \"SNIPPETS_REQUEST\", data: {endpoint}});\n }\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessageFromParent);\n }\n\n renderSnippets() {\n if (this.state.bundle.template === \"onboarding\" ||\n this.state.message.template === \"fxa_overlay\" ||\n this.state.message.template === \"return_to_amo_overlay\") {\n return null;\n }\n const SnippetComponent = SnippetsTemplates[this.state.message.template];\n const {content} = this.state.message;\n\n return (\n );\n }\n\n renderOnboarding() {\n if (this.state.bundle.template === \"onboarding\") {\n return (\n );\n }\n return null;\n }\n\n renderFirstRunOverlay() {\n const {message} = this.state;\n if (message.template === \"fxa_overlay\") {\n global.document.body.classList.add(\"fxa\");\n return (\n \n \n \n );\n } else if (message.template === \"return_to_amo_overlay\") {\n global.document.body.classList.add(\"amo\");\n return (\n \n \n \n );\n }\n return null;\n }\n\n renderPreviewBanner() {\n if (this.state.message.provider !== \"preview\") {\n return null;\n }\n\n return (\n \n \n Preview Purposes Only \n
\n );\n }\n\n render() {\n const {message, bundle} = this.state;\n if (!message.id && !bundle.template) { return null; }\n return (\n \n {this.renderPreviewBanner()}\n {this.renderFirstRunOverlay()}\n {this.renderOnboarding()}\n {this.renderSnippets()}\n \n );\n }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n constructor() {\n this.initialized = false;\n this.containerElement = null;\n }\n\n _mount() {\n this.containerElement = global.document.getElementById(ASR_CONTAINER_ID);\n if (!this.containerElement) {\n this.containerElement = global.document.createElement(\"div\");\n this.containerElement.id = ASR_CONTAINER_ID;\n this.containerElement.style.zIndex = 1;\n global.document.body.appendChild(this.containerElement);\n }\n\n ReactDOM.render( , this.containerElement);\n }\n\n _unmount() {\n ReactDOM.unmountComponentAtNode(this.containerElement);\n }\n\n init(store) {\n this._activityStreamStore = store;\n this._mount();\n this.initialized = true;\n }\n\n uninit() {\n if (this.initialized) {\n this._unmount();\n this.initialized = false;\n }\n }\n}\n","module.exports = ReactIntl;","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function} a reducer that, on MERGE_STORE_ACTION action,\n * will return the action.data object merged\n * into the previous state, and the result\n * of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n return (prevState, action) => {\n if (action.type === MERGE_STORE_ACTION) {\n return {...prevState, ...action.data};\n }\n\n return mainReducer(prevState, action);\n };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n const skipLocal = action.meta && action.meta.skipLocal;\n if (au.isSendToMain(action)) {\n RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n }\n if (!skipLocal) {\n next(action);\n }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n if (store._didRehydrate) {\n return next(action);\n }\n\n const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n if (isRehydrationRequest) {\n store._didRequestInitialState = true;\n return next(action);\n }\n\n if (isMergeStoreAction) {\n store._didRehydrate = true;\n return next(action);\n }\n\n // If init happened after our request was made, we need to re-request\n if (store._didRequestInitialState && action.type === at.INIT) {\n return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n }\n\n if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n // Note that actions received before didRehydrate will not be dispatched\n // because this could negatively affect preloading and the the state\n // will be replaced by rehydration anyway.\n return null;\n }\n\n return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n if (store._receivedFromMain) {\n next(action);\n } else if (au.isFromMain(action)) {\n next(action);\n store._receivedFromMain = true;\n // Sending out all the early actions as main is ready now\n if (store._earlyActionQueue) {\n store._earlyActionQueue.forEach(next);\n store._earlyActionQueue = [];\n }\n } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n store._earlyActionQueue = store._earlyActionQueue || [];\n store._earlyActionQueue.push(action);\n } else {\n // Let any other type of action go through\n next(action);\n }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param {object} reducers An object containing Redux reducers\n * @param {object} intialState (optional) The initial state of the store, if desired\n * @return {object} A redux store\n */\nexport function initStore(reducers, initialState) {\n const store = createStore(\n mergeStateReducer(combineReducers(reducers)),\n initialState,\n global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n );\n\n store._didRehydrate = false;\n store._didRequestInitialState = false;\n\n if (global.RPMAddMessageListener) {\n global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n try {\n store.dispatch(msg.data);\n } catch (ex) {\n console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n }\n });\n }\n\n return store;\n}\n","module.exports = Redux;","import {MessageContext} from \"fluent\";\n\n/**\n * Properties that allow rich text MUST be added to this list.\n * key: the localization_id that should be used\n * value: a property or array of properties on the message.content object\n */\nconst RICH_TEXT_CONFIG = {\n \"text\": [\"text\", \"scene1_text\"],\n \"success_text\": \"success_text\",\n \"error_text\": \"error_text\",\n \"scene2_text\": \"scene2_text\",\n \"amo_html\": \"amo_html\",\n \"privacy_html\": \"scene2_privacy_html\",\n \"disclaimer_html\": \"scene2_disclaimer_html\",\n};\n\nexport const RICH_TEXT_KEYS = Object.keys(RICH_TEXT_CONFIG);\n\n/**\n * Generates an array of messages suitable for fluent's localization provider\n * including all needed strings for rich text.\n * @param {object} content A .content object from an ASR message (i.e. message.content)\n * @returns {MessageContext[]} A array containing the fluent message context\n */\nexport function generateMessages(content) {\n const cx = new MessageContext(\"en-US\");\n\n RICH_TEXT_KEYS.forEach(key => {\n const attrs = RICH_TEXT_CONFIG[key];\n const attrsToTry = Array.isArray(attrs) ? [...attrs] : [attrs];\n let string = \"\";\n while (!string && attrsToTry.length) {\n const attr = attrsToTry.pop();\n string = content[attr];\n }\n cx.addMessages(`${key} = ${string}`);\n });\n return [cx];\n}\n","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionOrAddListener() {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (this.props.document.visibilityState === VISIBLE) {\n this.props.sendImpression({id: this.props.id});\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.sendOnMount) {\n this.sendImpressionOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n this.sendImpressionOrAddListener();\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nImpressionsWrapper.defaultProps = {\n document: global.document,\n sendOnMount: true,\n};\n","module.exports = React;","module.exports = PropTypes;","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n onClick() {\n const {props} = this;\n const ping = {\n event: \"CLICK_BUTTON\",\n message_id: props.id,\n id: props.UISurface,\n };\n props.sendUserActionTelemetry(ping);\n props.onAction(props.content.primary_button.action);\n }\n\n render() {\n const {content} = this.props;\n return (\n \n
\n
\n
\n {content.title} \n {content.text}
\n \n
\n {content.primary_button.label} \n \n
\n
\n );\n }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n render() {\n const {props} = this;\n const {button_label, header} = props.extraTemplateStrings;\n return (\n \n \n {props.bundle.map(message => (\n \n ))}\n
\n \n );\n }\n}\n","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n componentWillMount() {\n this.setState({active: true});\n document.body.classList.add(\"modal-open\");\n }\n\n componentWillUnmount() {\n document.body.classList.remove(\"modal-open\");\n this.setState({active: false});\n }\n\n render() {\n const {active} = this.state;\n const {title, button_label} = this.props;\n return (\n \n
\n
\n
{title} \n {this.props.children}\n
\n {button_label} \n
\n
\n
\n );\n }\n}\n","module.exports = ReactDOM;","import React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\n\nexport class ReturnToAMO extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClickAddExtension = this.onClickAddExtension.bind(this);\n this.onBlockButton = this.onBlockButton.bind(this);\n }\n\n componentDidMount() {\n this.props.onReady();\n }\n\n onClickAddExtension() {\n this.props.onAction(this.props.content.primary_button.action);\n }\n\n onBlockButton() {\n this.props.onBlock();\n document.body.classList.remove(\"welcome\", \"hide-main\", \"amo\");\n }\n\n renderText() {\n const customElement = ;\n return ( );\n }\n\n render() {\n const {content} = this.props;\n return (\n \n
\n
{content.header} \n
\n
\n
{content.title}
\n
\n {this.renderText()} \n
\n
{content.primary_button.label} \n
\n
\n
\n
{content.secondary_button.label} \n
\n
);\n }\n}\n","import {Localized} from \"fluent-react\";\nimport React from \"react\";\nimport {RICH_TEXT_KEYS} from \"../../rich-text-strings\";\nimport {safeURI} from \"../../template-utils\";\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n b: ,\n i: ,\n u: ,\n strong: ,\n em: ,\n br: ,\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick, doNotAutoBlock, openNewWindow = false) {\n if (links) {\n return Object.keys(links).reduce((acc, linkTag) => {\n const {action} = links[linkTag];\n // Setting the value to false will not include the attribute in the anchor\n const url = action ? false : safeURI(links[linkTag].url);\n\n acc[linkTag] = ( );\n return acc;\n }, {});\n }\n\n return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nexport function RichText(props) {\n if (!RICH_TEXT_KEYS.includes(props.localization_id)) {\n throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);\n }\n return (\n \n {props.text} \n \n );\n}\n","export function safeURI(url) {\n if (!url) {\n return \"\";\n }\n const {protocol} = new URL(url);\n const isAllowed = [\n \"http:\",\n \"https:\",\n \"data:\",\n \"resource:\",\n \"chrome:\",\n ].includes(protocol);\n if (!isAllowed) {\n console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n }\n return isAllowed ? url : \"\";\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onInputChange = this.onInputChange.bind(this);\n this.onSubmit = this.onSubmit.bind(this);\n this.clickSkip = this.clickSkip.bind(this);\n this.initScene = this.initScene.bind(this);\n this.removeOverlay = this.removeOverlay.bind(this);\n this.onInputInvalid = this.onInputInvalid.bind(this);\n\n this.state = {\n emailInput: \"\",\n overlayRemoved: false,\n flowId: \"\",\n flowBeginTime: 0,\n };\n this.didFetch = false;\n }\n\n async componentWillUpdate() {\n if (this.props.fxa_endpoint && !this.didFetch) {\n try {\n this.didFetch = true;\n const fxaParams = \"entrypoint=activity-stream-firstrun&utm_source=activity-stream&utm_campaign=firstrun&form_type=email\";\n const response = await fetch(`${this.props.fxa_endpoint}/metrics-flow?${fxaParams}`, {credentials: \"omit\"});\n if (response.status === 200) {\n const {flowId, flowBeginTime} = await response.json();\n this.setState({flowId, flowBeginTime});\n } else {\n this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_FETCH_ERROR\", value: response.status}}));\n }\n } catch (error) {\n this.props.dispatch(ac.OnlyToMain({type: at.TELEMETRY_UNDESIRED_EVENT, data: {event: \"FXA_METRICS_ERROR\"}}));\n }\n }\n }\n\n componentDidMount() {\n this.initScene();\n }\n\n initScene() {\n // Timeout to allow the scene to render once before attaching the attribute\n // to trigger the animation.\n setTimeout(() => {\n this.setState({show: true});\n this.props.onReady();\n }, 10);\n }\n\n removeOverlay() {\n window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n document.body.classList.remove(\"hide-main\", \"fxa\");\n this.setState({show: false});\n this.props.onBlock();\n setTimeout(() => {\n // Allow scrolling and fully remove overlay after animation finishes.\n document.body.classList.remove(\"welcome\");\n this.setState({overlayRemoved: true});\n }, 400);\n }\n\n onInputChange(e) {\n let error = e.target.previousSibling;\n this.setState({emailInput: e.target.value});\n error.classList.remove(\"active\");\n e.target.classList.remove(\"invalid\");\n }\n\n onSubmit() {\n this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\", ...this._getFormInfo()}));\n\n window.addEventListener(\"visibilitychange\", this.removeOverlay);\n }\n\n clickSkip() {\n this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\", ...this._getFormInfo()}));\n this.removeOverlay();\n }\n\n /**\n * Report to telemetry additional information about the form submission.\n */\n _getFormInfo() {\n const value = {has_flow_params: this.state.flowId.length > 0};\n return {value};\n }\n\n onInputInvalid(e) {\n let error = e.target.previousSibling;\n error.classList.add(\"active\");\n e.target.classList.add(\"invalid\");\n e.preventDefault(); // Override built-in form validation popup\n e.target.focus();\n }\n\n render() {\n // When skipping the onboarding tour we show AS but we are still on\n // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered\n if (this.state.overlayRemoved) {\n return null;\n }\n\n let termsLink = ( );\n let privacyLink = ( );\n\n return (\n \n );\n }\n}\n\nconst getState = state => ({fxa_endpoint: state.Prefs.values.fxa_endpoint});\nexport const StartupOverlay = connect(getState)(injectIntl(_StartupOverlay));\n","module.exports = ReactRedux;","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {DarkModeMessage} from \"content-src/components/DarkModeMessage/DarkModeMessage\";\nimport {DiscoveryStreamBase} from \"content-src/components/DiscoveryStreamBase/DiscoveryStreamBase\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\n\nlet didLogDevtoolsHelpText = false;\n\nconst PrefsButton = injectIntl(props => (\n \n \n
\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\n// Returns a function will not be continuously triggered when called. The\n// function will be triggered if called again after `wait` milliseconds.\nfunction debounce(func, wait) {\n let timer;\n return (...args) => {\n if (timer) { return; }\n\n let wakeUp = () => { timer = null; };\n\n timer = setTimeout(wakeUp, wait);\n func.apply(this, args);\n };\n}\n\nexport class _Base extends React.PureComponent {\n componentWillMount() {\n const {locale} = this.props;\n addLocaleDataForReactIntl(locale);\n if (this.props.isFirstrun) {\n global.document.body.classList.add(\"welcome\", \"hide-main\");\n }\n }\n\n componentDidMount() {\n // Request state AFTER the first render to ensure we don't cause the\n // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n // dispatched right after the store is ready.\n if (this.props.isPrerendered) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n }\n }\n\n componentWillUnmount() {\n this.updateTheme();\n }\n\n componentWillUpdate() {\n this.updateTheme();\n }\n\n updateTheme() {\n const bodyClassName = [\n \"activity-stream\",\n // If we skipped the about:welcome overlay and removed the CSS classes\n // we don't want to add them back to the Activity Stream view\n document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\",\n document.body.classList.contains(\"hide-main\") ? \"hide-main\" : \"\",\n ].filter(v => v).join(\" \");\n global.document.body.className = bodyClassName;\n }\n\n render() {\n const {props} = this;\n const {App, locale, strings} = props;\n const {initialized} = App;\n\n const prefs = props.Prefs.values;\n if (prefs[\"asrouter.devtoolsEnabled\"]) {\n if (window.location.hash.startsWith(\"#asrouter\") ||\n window.location.hash.startsWith(\"#devtools\")) {\n return ( );\n } else if (!didLogDevtoolsHelpText) {\n console.log(\"Activity Stream devtools enabled. To access visit %cabout:newtab#devtools\", \"font-weight: bold\"); // eslint-disable-line no-console\n didLogDevtoolsHelpText = true;\n }\n }\n\n if (!props.isPrerendered && !initialized) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n}\n\nexport class BaseContent extends React.PureComponent {\n constructor(props) {\n super(props);\n this.openPreferences = this.openPreferences.bind(this);\n this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);\n this.state = {fixedSearch: false};\n }\n\n componentDidMount() {\n global.addEventListener(\"scroll\", this.onWindowScroll);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"scroll\", this.onWindowScroll);\n }\n\n onWindowScroll() {\n const SCROLL_THRESHOLD = 34;\n if (global.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {\n this.setState({fixedSearch: true});\n } else if (global.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {\n this.setState({fixedSearch: false});\n }\n }\n\n openPreferences() {\n this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n }\n\n disableDarkTheme() {\n // Dark themes are not supported in discovery stream view\n // Add force-light-theme class to body tag to disable dark mode. See Bug 1519764\n const bodyClassNames = global.document.body.classList;\n if (!bodyClassNames.contains(\"force-light-theme\")) {\n bodyClassNames.add(\"force-light-theme\");\n }\n }\n\n render() {\n const {props} = this;\n const {App} = props;\n const {initialized} = App;\n const prefs = props.Prefs.values;\n\n const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n const noSectionsEnabled = !prefs[\"feeds.topsites\"] && props.Sections.filter(section => section.enabled).length === 0;\n const isDiscoveryStream = props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;\n const searchHandoffEnabled = prefs[\"improvesearch.handoffToAwesomebar\"];\n\n if (isDiscoveryStream) {\n this.disableDarkTheme();\n }\n\n const outerClassName = [\n \"outer-wrapper\",\n shouldBeFixedToTop && \"fixed-to-top\",\n prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && \"fixed-search\",\n prefs.showSearch && noSectionsEnabled && \"only-search\",\n ].filter(v => v).join(\" \");\n\n return (\n \n
\n
\n {prefs.showSearch &&\n \n \n \n \n
\n }\n \n {!isDiscoveryStream && !prefs.migrationExpired &&\n
\n \n
\n }\n {isDiscoveryStream ? (\n
\n {prefs.darkModeMessage && }\n \n ) :
}\n
\n
\n \n \n
\n
);\n }\n}\n\nexport const Base = connect(state => ({\n App: state.App,\n Prefs: state.Prefs,\n Sections: state.Sections,\n DiscoveryStream: state.DiscoveryStream,\n Search: state.Search,\n}))(_Base);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport {connect} from \"react-redux\";\nimport {ModalOverlay} from \"../../asrouter/components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\nimport {SimpleHashRouter} from \"./SimpleHashRouter\";\n\nconst Row = props => ({props.children} );\n\nfunction relativeTime(timestamp) {\n if (!timestamp) {\n return \"\";\n }\n const seconds = Math.floor((Date.now() - timestamp) / 1000);\n const minutes = Math.floor((Date.now() - timestamp) / 60000);\n if (seconds < 2) {\n return \"just now\";\n } else if (seconds < 60) {\n return `${seconds} seconds ago`;\n } else if (minutes === 1) {\n return \"1 minute ago\";\n } else if (minutes < 600) {\n return `${minutes} minutes ago`;\n }\n return new Date(timestamp).toLocaleString();\n}\n\nclass DiscoveryStreamAdmin extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEnableToggle = this.onEnableToggle.bind(this);\n }\n\n setConfigValue(name, value) {\n this.props.dispatch(ac.OnlyToMain({type: at.DISCOVERY_STREAM_CONFIG_SET_VALUE, data: {name, value}}));\n }\n\n onEnableToggle(event) {\n this.setConfigValue(\"enabled\", event.target.checked);\n }\n\n renderComponent(width, component) {\n return (\n \n \n Type \n {component.type} \n
\n \n Width \n {width} \n
\n {component.feed && this.renderFeed(component.feed)}\n
\n );\n }\n\n renderFeed(feed) {\n const {feeds} = this.props.state;\n if (!feed.url) {\n return null;\n }\n return (\n \n \n Feed url \n {feed.url} \n
\n \n Data last fetched \n {relativeTime(feeds[feed.url] ? feeds[feed.url].lastUpdated : null) || \"(no data)\"} \n
\n \n );\n }\n\n render() {\n const {config, lastUpdated, layout} = this.props.state;\n return (\n
enabled
\n\n
\n Data last fetched {relativeTime(lastUpdated) || \"(no data)\"}
\n Endpoint {config.layout_endpoint || \"(empty)\"}
\n
\n\n
Layout \n\n {layout.map((row, rowIndex) => (\n
\n {row.components.map((component, componentIndex) => (\n
\n {this.renderComponent(row.width, component)}\n
\n ))}\n
\n ))}\n
);\n }\n}\n\nexport class ASRouterAdminInner extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onMessage = this.onMessage.bind(this);\n this.handleEnabledToggle = this.handleEnabledToggle.bind(this);\n this.handleUserPrefToggle = this.handleUserPrefToggle.bind(this);\n this.onChangeMessageFilter = this.onChangeMessageFilter.bind(this);\n this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n this.handleExpressionEval = this.handleExpressionEval.bind(this);\n this.onChangeTargetingParameters = this.onChangeTargetingParameters.bind(this);\n this.onChangeAttributionParameters = this.onChangeAttributionParameters.bind(this);\n this.setAttribution = this.setAttribution.bind(this);\n this.onCopyTargetingParams = this.onCopyTargetingParams.bind(this);\n this.onPasteTargetingParams = this.onPasteTargetingParams.bind(this);\n this.onNewTargetingParams = this.onNewTargetingParams.bind(this);\n this.state = {\n messageFilter: \"all\",\n evaluationStatus: {},\n stringTargetingParameters: null,\n newStringTargetingParameters: null,\n copiedToClipboard: false,\n pasteFromClipboard: false,\n attributionParameters: {\n source: \"addons.mozilla.org\",\n campaign: \"non-fx-button\",\n content: \"iridium@particlecore.github.io\",\n },\n };\n }\n\n onMessage({data: action}) {\n if (action.type === \"ADMIN_SET_STATE\") {\n this.setState(action.data);\n if (!this.state.stringTargetingParameters) {\n const stringTargetingParameters = {};\n for (const param of Object.keys(action.data.targetingParameters)) {\n stringTargetingParameters[param] = JSON.stringify(action.data.targetingParameters[param], null, 2);\n }\n this.setState({stringTargetingParameters});\n }\n }\n }\n\n componentWillMount() {\n const endpoint = ASRouterUtils.getPreviewEndpoint();\n ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n ASRouterUtils.addListener(this.onMessage);\n }\n\n componentWillUnmount() {\n ASRouterUtils.removeListener(this.onMessage);\n }\n\n findOtherBundledMessagesOfSameTemplate(template) {\n return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n }\n\n handleBlock(msg) {\n if (msg.bundled) {\n // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.blockBundle(bundle);\n }\n return () => ASRouterUtils.blockById(msg.id);\n }\n\n handleUnblock(msg) {\n if (msg.bundled) {\n // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n return () => ASRouterUtils.unblockBundle(bundle);\n }\n return () => ASRouterUtils.unblockById(msg.id);\n }\n\n handleOverride(id) {\n return () => ASRouterUtils.overrideMessage(id);\n }\n\n expireCache() {\n ASRouterUtils.sendMessage({type: \"EXPIRE_QUERY_CACHE\"});\n }\n\n resetPref() {\n ASRouterUtils.sendMessage({type: \"RESET_PROVIDER_PREF\"});\n }\n\n handleExpressionEval() {\n const context = {};\n for (const param of Object.keys(this.state.stringTargetingParameters)) {\n const value = this.state.stringTargetingParameters[param];\n context[param] = value ? JSON.parse(value) : null;\n }\n ASRouterUtils.sendMessage({\n type: \"EVALUATE_JEXL_EXPRESSION\",\n data: {\n expression: this.refs.expressionInput.value,\n context,\n },\n });\n }\n\n onChangeTargetingParameters(event) {\n const {name} = event.target;\n const {value} = event.target;\n\n this.setState(({stringTargetingParameters}) => {\n let targetingParametersError = null;\n const updatedParameters = {...stringTargetingParameters};\n updatedParameters[name] = value;\n try {\n JSON.parse(value);\n } catch (e) {\n console.log(`Error parsing value of parameter ${name}`); // eslint-disable-line no-console\n targetingParametersError = {id: name};\n }\n\n return {\n copiedToClipboard: false,\n evaluationStatus: {},\n stringTargetingParameters: updatedParameters,\n targetingParametersError,\n };\n });\n }\n\n handleEnabledToggle(event) {\n const provider = this.state.providerPrefs.find(p => p.id === event.target.dataset.provider);\n const userPrefInfo = this.state.userPrefs;\n\n const isUserEnabled = provider.id in userPrefInfo ? userPrefInfo[provider.id] : true;\n const isSystemEnabled = provider.enabled;\n const isEnabling = event.target.checked;\n\n if (isEnabling) {\n if (!isUserEnabled) {\n ASRouterUtils.sendMessage({type: \"SET_PROVIDER_USER_PREF\", data: {id: provider.id, value: true}});\n }\n if (!isSystemEnabled) {\n ASRouterUtils.sendMessage({type: \"ENABLE_PROVIDER\", data: provider.id});\n }\n } else {\n ASRouterUtils.sendMessage({type: \"DISABLE_PROVIDER\", data: provider.id});\n }\n\n this.setState({messageFilter: \"all\"});\n }\n\n handleUserPrefToggle(event) {\n const action = {type: \"SET_PROVIDER_USER_PREF\", data: {id: event.target.dataset.provider, value: event.target.checked}};\n ASRouterUtils.sendMessage(action);\n this.setState({messageFilter: \"all\"});\n }\n\n onChangeMessageFilter(event) {\n this.setState({messageFilter: event.target.value});\n }\n\n // Simulate a copy event that sets to clipboard all targeting paramters and values\n onCopyTargetingParams(event) {\n const stringTargetingParameters = {...this.state.stringTargetingParameters};\n for (const key of Object.keys(stringTargetingParameters)) {\n // If the value is not set the parameter will be lost when we stringify\n if (stringTargetingParameters[key] === undefined) {\n stringTargetingParameters[key] = null;\n }\n }\n const setClipboardData = e => {\n e.preventDefault();\n e.clipboardData.setData(\"text\", JSON.stringify(stringTargetingParameters, null, 2));\n document.removeEventListener(\"copy\", setClipboardData);\n this.setState({copiedToClipboard: true});\n };\n\n document.addEventListener(\"copy\", setClipboardData);\n\n document.execCommand(\"copy\");\n }\n\n // Copy all clipboard data to targeting parameters\n onPasteTargetingParams(event) {\n this.setState(({pasteFromClipboard}) => ({\n pasteFromClipboard: !pasteFromClipboard,\n newStringTargetingParameters: \"\",\n }));\n }\n\n onNewTargetingParams(event) {\n this.setState({newStringTargetingParameters: event.target.value});\n event.target.classList.remove(\"errorState\");\n this.refs.targetingParamsEval.innerText = \"\";\n\n try {\n const stringTargetingParameters = JSON.parse(event.target.value);\n this.setState({stringTargetingParameters});\n } catch (e) {\n event.target.classList.add(\"errorState\");\n this.refs.targetingParamsEval.innerText = e.message;\n }\n }\n\n renderMessageItem(msg) {\n const isCurrent = msg.id === this.state.lastMessageId;\n const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);\n const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;\n\n let itemClassName = \"message-item\";\n if (isCurrent) { itemClassName += \" current\"; }\n if (isBlocked) { itemClassName += \" blocked\"; }\n\n return (\n {msg.id} \n \n {isBlocked ? \"Unblock\" : \"Block\"} \n {isBlocked ? null : Show }\n ({impressions} impressions)\n \n \n {JSON.stringify(msg, null, 2)} \n \n );\n }\n\n renderMessages() {\n if (!this.state.messages) {\n return null;\n }\n const messagesToShow = this.state.messageFilter === \"all\" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter);\n return (\n {messagesToShow.map(msg => this.renderMessageItem(msg))}\n
);\n }\n\n renderMessageFilter() {\n if (!this.state.providers) {\n return null;\n }\n return (Show messages from \n all providers \n {this.state.providers.map(provider => ({provider.id} ))}\n
);\n }\n\n renderTableHead() {\n return (\n \n \n Provider ID \n Source \n Cohort \n Last Updated \n \n );\n }\n\n renderProviders() {\n const providersConfig = this.state.providerPrefs;\n const providerInfo = this.state.providers;\n const userPrefInfo = this.state.userPrefs;\n\n return ();\n }\n\n renderPasteModal() {\n if (!this.state.pasteFromClipboard) {\n return null;\n }\n const errors = this.refs.targetingParamsEval && this.refs.targetingParamsEval.innerText.length;\n return (\n \n \n \n );\n }\n\n renderTargetingParameters() {\n // There was no error and the result is truthy\n const success = this.state.evaluationStatus.success && !!this.state.evaluationStatus.result;\n const result = JSON.stringify(this.state.evaluationStatus.result, null, 2) || \"(Empty result)\";\n\n return ();\n }\n\n onChangeAttributionParameters(event) {\n const {name, value} = event.target;\n\n this.setState(({attributionParameters}) => {\n const updatedParameters = {...attributionParameters};\n updatedParameters[name] = value;\n\n return {attributionParameters: updatedParameters};\n });\n }\n\n setAttribution(e) {\n ASRouterUtils.sendMessage({type: \"FORCE_ATTRIBUTION\", data: this.state.attributionParameters});\n }\n\n renderPocketStory(story) {\n return (\n {story.guid} \n \n {JSON.stringify(story, null, 2)} \n \n );\n }\n\n renderPocketStories() {\n const {rows} = this.props.Sections.find(Section => Section.id === \"topstories\") || {};\n\n return (\n {rows && rows.map(story => this.renderPocketStory(story))}\n
);\n }\n\n renderDiscoveryStream() {\n const {config} = this.props.DiscoveryStream;\n\n return (\n
\n Enabled {config.enabled ? \"yes\" : \"no\"} \n Endpoint {config.endpoint || \"(empty)\"} \n
\n
);\n }\n\n renderAttributionParamers() {\n return (\n \n
Attribution Parameters \n
This forces the browser to set some attribution parameters, useful for testing the Return To AMO feature. Clicking on 'Force Attribution', with the default values in each field, will demo the Return To AMO flow with the addon called 'Iridium for Youtube'. If you wish to try different attribution parameters, enter them in the text boxes. If you wish to try a different addon with the Return To AMO flow, make sure the 'content' text box has the addon GUID, then click 'Force Attribution'.
\n
\n
);\n }\n\n getSection() {\n const [section] = this.props.location.routes;\n switch (section) {\n case \"targeting\":\n return (\n Targeting Utilities \n Expire Cache (This expires the cache in ASR Targeting for bookmarks and top sites)\n {this.renderTargetingParameters()}\n {this.renderAttributionParamers()}\n );\n case \"pocket\":\n return (\n Pocket \n {this.renderPocketStories()}\n );\n case \"ds\":\n return (\n Discovery Stream \n \n );\n default:\n return (\n Message Providers Restore default prefs \n {this.state.providers ? this.renderProviders() : null}\n Messages \n {this.renderMessageFilter()}\n {this.renderMessages()}\n {this.renderPasteModal()}\n );\n }\n }\n\n render() {\n return (\n
\n
\n AS Router Admin \n\n \n \n {\" \"}\n \n Need help using these tools? Check out our documentation \n \n
\n\n {this.getSection()}\n \n
);\n }\n}\n\nexport const _ASRouterAdmin = props => ( );\nexport const ASRouterAdmin = connect(state => ({Sections: state.Sections, DiscoveryStream: state.DiscoveryStream}))(_ASRouterAdmin);\n","import React from \"react\";\n\nexport class SimpleHashRouter extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onHashChange = this.onHashChange.bind(this);\n this.state = {hash: global.location.hash};\n }\n\n onHashChange() {\n this.setState({hash: global.location.hash});\n }\n\n componentWillMount() {\n global.addEventListener(\"hashchange\", this.onHashChange);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"hashchange\", this.onHashChange);\n }\n\n render() {\n const [, ...routes] = this.state.hash.replace(\"#asrouter\", \"\").split(\"-\");\n return React.cloneElement(this.props.children, {\n location: {\n hash: this.state.hash,\n routes,\n },\n });\n }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n * // Any sort of data needed to be passed around by actions.\n * payload: site.url,\n * // Primary button AlsoToMain action.\n * action: \"DELETE_HISTORY_URL\",\n * // Primary button USerEvent action.\n * userEvent: \"DELETE\",\n * // Array of locale ids to display.\n * message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n * // Text for primary button.\n * confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n constructor(props) {\n super(props);\n this._handleCancelBtn = this._handleCancelBtn.bind(this);\n this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n }\n\n _handleCancelBtn() {\n this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n }\n\n _handleConfirmBtn() {\n this.props.data.onConfirm.forEach(this.props.dispatch);\n }\n\n _renderModalMessage() {\n const message_body = this.props.data.body_string_id;\n\n if (!message_body) {\n return null;\n }\n\n return (\n {message_body.map(msg =>
)}\n );\n }\n\n render() {\n if (!this.props.visible) {\n return null;\n }\n\n return (\n
\n
\n \n {this.props.data.icon && }\n {this._renderModalMessage()}\n \n \n
\n
);\n }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _DarkModeMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n this.handleSwitch = this.handleSwitch.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n handleSwitch() {\n // Switch to default new tab version\n this.props.dispatch(ac.AlsoToMain({type: at.DISCOVERY_STREAM_OPT_OUT}));\n }\n\n handleCancel() {\n // Capture user consent and not show dark mode message in future\n this.props.dispatch(ac.SetPref(\"darkModeMessage\", false));\n }\n\n render() {\n return (\n
\n \n This version of New Tab doesn not support dark mode yet. \n
\n
\n \n Got it \n \n \n Use older version \n \n
\n
);\n }\n}\n\nexport const DarkModeMessage = connect()(_DarkModeMessage);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport React from \"react\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst INTERSECTION_RATIO = 0.5;\n\nexport class DSCard extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.cardElementRef = this.cardElementRef.bind(this);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n componentDidMount() {\n if (this.props.document.visibilityState === VISIBLE) {\n this.setupIntersectionObserver();\n } else {\n this._onVisibilityChange = () => {\n if (this.props.document.visibilityState === VISIBLE) {\n this.setupIntersectionObserver();\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n if (this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.cardElement);\n }\n }\n\n setupIntersectionObserver() {\n const options = {threshold: INTERSECTION_RATIO};\n this._intersectionObserver = new IntersectionObserver(entries => {\n for (let entry of entries) {\n if (entry.isIntersecting && entry.intersectionRatio >= INTERSECTION_RATIO) {\n this.dispatchSpocImpression();\n break;\n }\n }\n }, options);\n this._intersectionObserver.observe(this.cardElement);\n }\n\n dispatchSpocImpression() {\n if (this.props.campaignId) {\n this.props.dispatch(ac.OnlyToMain({type: at.DISCOVERY_STREAM_SPOC_IMPRESSION, data: {campaignId: this.props.campaignId}}));\n }\n this._intersectionObserver.unobserve(this.cardElement);\n }\n\n cardElementRef(element) {\n this.cardElement = element;\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: this.props.index,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.props.id, pos: this.props.index}],\n }));\n }\n }\n\n render() {\n return (\n \n \n \n
\n
\n {this.props.excerpt &&
{this.props.excerpt}
}\n
\n
\n {this.props.context && (\n \n {this.props.context} \n \n \n )}\n {this.props.source} \n
\n
\n \n );\n }\n}\n\nDSCard.defaultProps = {\n document: global.document,\n};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport React from \"react\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class ImpressionStats extends React.PureComponent {\n // This checks if the given cards are the same as those in the last impression ping.\n // If so, it should not send the same impression ping again.\n _needsImpressionStats(cards) {\n if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n return true;\n }\n\n for (let i = 0; i < cards.length; i++) {\n if (cards[i].id !== this.impressionCardGuids[i]) {\n return true;\n }\n }\n\n return false;\n }\n\n _dispatchImpressionStats() {\n const {props} = this;\n const cards = props.rows;\n\n if (this._needsImpressionStats(cards)) {\n props.dispatch(ac.ImpressionStats({\n source: props.source.toUpperCase(),\n tiles: cards.map(link => ({id: link.id})),\n }));\n this.impressionCardGuids = cards.map(link => link.id);\n }\n }\n\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionStatsOrAddListener() {\n const {props} = this;\n\n if (!props.dispatch) {\n return;\n }\n\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n this._onVisibilityChange = () => {\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentDidMount() {\n if (this.props.rows.length) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.rows.length && this.props.rows !== prevProps.rows) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nImpressionStats.defaultProps = {\n document: global.document,\n rows: [],\n source: \"\",\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SearchShortcutsForm} from \"./SearchShortcutsForm\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n if (link.customScreenshotURL) {\n return \"custom_screenshot\";\n }\n if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n return \"tippytop\";\n }\n if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n return \"rich_icon\";\n }\n if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n return \"screenshot_with_icon\";\n }\n if (link.screenshot) {\n return \"screenshot\";\n }\n return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n const countTopSitesTypes = (acc, link) => {\n acc[topSiteIconType(link)]++;\n return acc;\n };\n\n return topSites.reduce(countTopSitesTypes, {\n \"custom_screenshot\": 0,\n \"screenshot_with_icon\": 0,\n \"screenshot\": 0,\n \"tippytop\": 0,\n \"rich_icon\": 0,\n \"no_image\": 0,\n });\n}\n\nexport class _TopSites extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEditFormClose = this.onEditFormClose.bind(this);\n this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);\n }\n\n /**\n * Dispatch session statistics about the quality of TopSites icons and pinned count.\n */\n _dispatchTopSitesStats() {\n const topSites = this._getVisibleTopSites();\n const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length;\n // Dispatch telemetry event with the count of TopSites images types.\n this.props.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {\n topsites_icon_stats: topSitesIconsStats,\n topsites_pinned: topSitesPinned,\n topsites_search_shortcuts: searchShortcuts,\n },\n }));\n }\n\n /**\n * Return the TopSites that are visible based on prefs and window width.\n */\n _getVisibleTopSites() {\n // We hide 2 sites per row when not in the wide layout.\n let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n // $break-point-widest = 1072px (from _variables.scss)\n if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n sitesPerRow -= 2;\n }\n return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n }\n\n componentDidUpdate() {\n this._dispatchTopSitesStats();\n }\n\n componentDidMount() {\n this._dispatchTopSitesStats();\n }\n\n onEditFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"TOP_SITES_EDIT_CLOSE\",\n }));\n this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n }\n\n onSearchShortcutsFormClose() {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_CLOSE\",\n }));\n this.props.dispatch({type: at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL});\n }\n\n render() {\n const {props} = this;\n const {editForm, showSearchShortcutsForm} = props.TopSites;\n const extraMenuOptions = [\"AddTopSite\"];\n if (props.Prefs.values[\"improvesearch.topSiteSearchShortcuts\"]) {\n extraMenuOptions.push(\"AddSearchShortcut\");\n }\n\n return (\n \n \n \n {editForm &&\n
\n }\n {showSearchShortcutsForm &&\n
\n }\n
\n \n );\n }\n}\n\nexport const TopSites = connect(state => ({\n TopSites: state.TopSites,\n Prefs: state.Prefs,\n TopSitesRows: state.Prefs.values.topSitesRows,\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite\nexport const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"Separator\", \"BlockUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class _CollapsibleSection extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBodyMount = this.onBodyMount.bind(this);\n this.onHeaderClick = this.onHeaderClick.bind(this);\n this.onTransitionEnd = this.onTransitionEnd.bind(this);\n this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n this.setContextMenuButtonRef = this.setContextMenuButtonRef.bind(this);\n }\n\n componentWillMount() {\n this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n }\n\n componentWillUpdate(nextProps) {\n // Check if we're about to go from expanded to collapsed\n if (!this.props.collapsed && nextProps.collapsed) {\n // This next line forces a layout flush of the section body, which has a\n // max-height style set, so that the upcoming collapse animation can\n // animate from that height to the collapsed height. Without this, the\n // update is coalesced and there's no animation from no-max-height to 0.\n this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n }\n }\n\n setContextMenuButtonRef(element) {\n this.contextMenuButtonRef = element;\n }\n\n componentDidMount() {\n this.contextMenuButtonRef.addEventListener(\"mouseenter\", this.onMenuButtonMouseEnter);\n this.contextMenuButtonRef.addEventListener(\"mouseleave\", this.onMenuButtonMouseLeave);\n }\n\n componentWillUnmount() {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n this.contextMenuButtonRef.removeEventListener(\"mouseenter\", this.onMenuButtonMouseEnter);\n this.contextMenuButtonRef.removeEventListener(\"mouseleave\", this.onMenuButtonMouseLeave);\n }\n\n enableOrDisableAnimation() {\n // Only animate the collapse/expand for visible tabs.\n const visible = this.props.document.visibilityState === VISIBLE;\n if (this.state.enableAnimation !== visible) {\n this.setState({enableAnimation: visible});\n }\n }\n\n onBodyMount(node) {\n this.sectionBody = node;\n }\n\n onHeaderClick() {\n // If this.sectionBody is unset, it means that we're in some sort of error\n // state, probably displaying the error fallback, so we won't be able to\n // compute the height, and we don't want to persist the preference.\n // If props.collapsed is undefined handler shouldn't do anything.\n if (!this.sectionBody || this.props.collapsed === undefined) {\n return;\n }\n\n // Get the current height of the body so max-height transitions can work\n this.setState({\n isAnimating: true,\n maxHeight: `${this._getSectionBodyHeight()}px`,\n });\n const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n this.props.dispatch(action);\n this.props.dispatch(ac.UserEvent({\n event: userEvent,\n source: this.props.source,\n }));\n }\n\n _getSectionBodyHeight() {\n const div = this.sectionBody;\n if (div.style.display === \"none\") {\n // If the div isn't displayed, we can't get it's height. So we display it\n // to get the height (it doesn't show up because max-height is set to 0px\n // in CSS). We don't undo this because we are about to expand the section.\n div.style.display = \"block\";\n }\n return div.scrollHeight;\n }\n\n onTransitionEnd(event) {\n // Only update the animating state for our own transition (not a child's)\n if (event.target === event.currentTarget) {\n this.setState({isAnimating: false});\n }\n }\n\n renderIcon() {\n const {icon} = this.props;\n if (icon && icon.startsWith(\"moz-extension://\")) {\n return ;\n }\n return ;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({showContextMenu: true});\n }\n\n onMenuButtonMouseEnter() {\n this.setState({menuButtonHover: true});\n }\n\n onMenuButtonMouseLeave() {\n this.setState({menuButtonHover: false});\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n render() {\n const isCollapsible = this.props.collapsed !== undefined;\n const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n const {id, eventSource, collapsed, learnMore, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n const active = menuButtonHover || showContextMenu;\n let bodyStyle;\n if (isAnimating && !collapsed) {\n bodyStyle = {maxHeight};\n } else if (!isAnimating && collapsed) {\n bodyStyle = {display: \"none\"};\n }\n return (\n \n \n
\n \n \n {this.renderIcon()}\n {getFormattedMessage(title)}\n \n \n {isCollapsible && }\n \n \n {learnMore &&\n \n \n \n \n \n }\n \n \n \n
\n \n \n \n \n \n {showContextMenu &&\n \n }\n
\n
\n \n \n {this.props.children}\n
\n \n \n );\n }\n}\n\n_CollapsibleSection.defaultProps = {\n document: global.document || {\n addEventListener: () => {},\n removeEventListener: () => {},\n visibilityState: \"hidden\",\n },\n Prefs: {values: {}},\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n constructor(props) {\n super(props);\n this.windowObj = this.props.windowObj || window;\n this.onClick = this.onClick.bind(this);\n }\n\n /**\n * Since we only get here if part of the page has crashed, do a\n * forced reload to give us the best chance at recovering.\n */\n onClick() {\n this.windowObj.location.reload(true);\n }\n\n render() {\n const defaultClass = \"as-error-fallback\";\n let className;\n if (\"className\" in this.props) {\n className = `${this.props.className} ${defaultClass}`;\n } else {\n className = defaultClass;\n }\n\n // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n return (\n \n
\n \n
\n
\n \n \n \n \n
\n );\n }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {hasError: false};\n }\n\n componentDidCatch(error, info) {\n this.setState({hasError: true});\n }\n\n render() {\n if (!this.state.hasError) {\n return (this.props.children);\n }\n\n return ;\n }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n\n const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n // Prepend custom options and a separator\n if (props.extraOptions) {\n propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n }\n // Insert privacy notice before the last option (\"ManageSection\")\n if (props.privacyNoticeURL) {\n propOptions.splice(-1, 0, \"PrivacyNotice\");\n }\n\n const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n const {action, id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n props.dispatch(ac.UserEvent({\n event: userEvent,\n source: props.source,\n }));\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ( );\n }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n constructor(props) {\n super(props);\n this.hideContext = this.hideContext.bind(this);\n this.onClick = this.onClick.bind(this);\n }\n\n hideContext() {\n this.props.onUpdate(false);\n }\n\n componentDidMount() {\n setTimeout(() => {\n global.addEventListener(\"click\", this.hideContext);\n }, 0);\n }\n\n componentWillUnmount() {\n global.removeEventListener(\"click\", this.hideContext);\n }\n\n onClick(event) {\n // Eat all clicks on the context menu so they don't bubble up to window.\n // This prevents the context menu from closing when clicking disabled items\n // or the separators.\n event.stopPropagation();\n }\n\n render() {\n return (\n \n {this.props.options.map((option, i) => (option.type === \"separator\" ?\n ( ) :\n (option.type !== \"empty\" && )\n ))}\n \n );\n }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n }\n\n onClick() {\n this.props.hideContext();\n this.props.option.onClick();\n }\n\n onKeyDown(event) {\n const {option} = this.props;\n switch (event.key) {\n case \"Tab\":\n // tab goes down in context menu, shift + tab goes up in context menu\n // if we're on the last item, one more tab will close the context menu\n // similarly, if we're on the first item, one more shift + tab will close it\n if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n this.props.hideContext();\n }\n break;\n case \"Enter\":\n this.props.hideContext();\n option.onClick();\n break;\n }\n }\n\n render() {\n const {option} = this.props;\n return (\n \n \n {option.icon && }\n {option.label}\n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n MoveUp: section => ({\n id: \"section_menu_action_move_up\",\n icon: \"arrowhead-up\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: -1},\n }),\n userEvent: \"MENU_MOVE_UP\",\n disabled: !!section.isFirst,\n }),\n MoveDown: section => ({\n id: \"section_menu_action_move_down\",\n icon: \"arrowhead-down\",\n action: ac.OnlyToMain({\n type: at.SECTION_MOVE,\n data: {id: section.id, direction: +1},\n }),\n userEvent: \"MENU_MOVE_DOWN\",\n disabled: !!section.isLast,\n }),\n RemoveSection: section => ({\n id: \"section_menu_action_remove_section\",\n icon: \"dismiss\",\n action: ac.SetPref(section.showPrefName, false),\n userEvent: \"MENU_REMOVE\",\n }),\n CollapseSection: section => ({\n id: \"section_menu_action_collapse_section\",\n icon: \"minimize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n userEvent: \"MENU_COLLAPSE\",\n }),\n ExpandSection: section => ({\n id: \"section_menu_action_expand_section\",\n icon: \"maximize\",\n action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n userEvent: \"MENU_EXPAND\",\n }),\n ManageSection: section => ({\n id: \"section_menu_action_manage_section\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n userEvent: \"MENU_MANAGE\",\n }),\n ManageWebExtension: section => ({\n id: \"section_menu_action_manage_webext\",\n icon: \"settings\",\n action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id}),\n }),\n AddTopSite: section => ({\n id: \"section_menu_action_add_topsite\",\n icon: \"add\",\n action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n userEvent: \"MENU_ADD_TOPSITE\",\n }),\n AddSearchShortcut: section => ({\n id: \"section_menu_action_add_search_engine\",\n icon: \"search\",\n action: {type: at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL},\n userEvent: \"MENU_ADD_SEARCH\",\n }),\n PrivacyNotice: section => ({\n id: \"section_menu_action_privacy_notice\",\n icon: \"info\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: section.privacyNoticeURL},\n }),\n userEvent: \"MENU_PRIVACY_NOTICE\",\n }),\n CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)),\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n constructor(props) {\n super(props);\n // Just for test dependency injection:\n this.perfSvc = this.props.perfSvc || perfSvc;\n\n this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n this._reportMissingData = false;\n this._timestampHandled = false;\n this._recordedFirstRender = false;\n }\n\n componentDidMount() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n componentDidUpdate() {\n if (!RECORDED_SECTIONS.includes(this.props.id)) {\n return;\n }\n\n this._maybeSendPaintedEvent();\n }\n\n /**\n * Call the given callback after the upcoming frame paints.\n *\n * @note Both setTimeout and requestAnimationFrame are throttled when the page\n * is hidden, so this callback may get called up to a second or so after the\n * requestAnimationFrame \"paint\" for hidden tabs.\n *\n * Newtabs hidden while loading will presumably be fairly rare (other than\n * preloaded tabs, which we will be filtering out on the server side), so such\n * cases should get lost in the noise.\n *\n * If we decide that it's important to find out when something that's hidden\n * has \"painted\", however, another option is to post a message to this window.\n * That should happen even faster than setTimeout, and, at least as of this\n * writing, it's not throttled in hidden windows in Firefox.\n *\n * @param {Function} callback\n *\n * @returns void\n */\n _afterFramePaint(callback) {\n requestAnimationFrame(() => setTimeout(callback, 0));\n }\n\n _maybeSendBadStateEvent() {\n // Follow up bugs:\n // https://github.com/mozilla/activity-stream/issues/3691\n if (!this.props.initialized) {\n // Remember to report back when data is available.\n this._reportMissingData = true;\n } else if (this._reportMissingData) {\n this._reportMissingData = false;\n // Report how long it took for component to become initialized.\n this._sendBadStateEvent();\n }\n }\n\n _maybeSendPaintedEvent() {\n // If we've already handled a timestamp, don't do it again.\n if (this._timestampHandled || !this.props.initialized) {\n return;\n }\n\n // And if we haven't, we're doing so now, so remember that. Even if\n // something goes wrong in the callback, we can't try again, as we'd be\n // sending back the wrong data, and we have to do it here, so that other\n // calls to this method while waiting for the next frame won't also try to\n // handle it.\n this._timestampHandled = true;\n this._afterFramePaint(this._sendPaintedEvent);\n }\n\n /**\n * Triggered by call to render. Only first call goes through due to\n * `_recordedFirstRender`.\n */\n _ensureFirstRenderTsRecorded() {\n // Used as t0 for recording how long component took to initialize.\n if (!this._recordedFirstRender) {\n this._recordedFirstRender = true;\n // topsites_first_render_ts, highlights_first_render_ts.\n const key = `${this.props.id}_first_render_ts`;\n this.perfSvc.mark(key);\n }\n }\n\n /**\n * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n * of how much longer the data took to be ready for display than it would\n * have been the ideal case.\n * https://github.com/mozilla/ping-centre/issues/98\n */\n _sendBadStateEvent() {\n // highlights_data_ready_ts, topsites_data_ready_ts.\n const dataReadyKey = `${this.props.id}_data_ready_ts`;\n this.perfSvc.mark(dataReadyKey);\n\n try {\n const firstRenderKey = `${this.props.id}_first_render_ts`;\n // value has to be Int32.\n const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n // highlights_data_late_by_ms, topsites_data_late_by_ms.\n data: {[`${this.props.id}_data_late_by_ms`]: value},\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true.\n }\n }\n\n _sendPaintedEvent() {\n // Record first_painted event but only send if topsites.\n if (this.props.id !== \"topsites\") {\n return;\n }\n\n // topsites_first_painted_ts.\n const key = `${this.props.id}_first_painted_ts`;\n this.perfSvc.mark(key);\n\n try {\n const data = {};\n data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n this.props.dispatch(ac.OnlyToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data,\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up, and should continue\n // to set this._timestampHandled to avoid going through this again.\n }\n }\n\n render() {\n if (RECORDED_SECTIONS.includes(this.props.id)) {\n this._ensureFirstRenderTsRecorded();\n this._maybeSendBadStateEvent();\n }\n return this.props.children;\n }\n}\n","\"use strict\";\n\nif (typeof ChromeUtils !== \"undefined\") {\n // Use a var here instead of let outside to avoid creating a locally scoped\n // variable that hides the global, which we modify for testing.\n // eslint-disable-next-line no-var, vars-on-top\n var {Services} = ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore else */\n// eslint-disable-next-line block-scoped-var\nif (typeof Services !== \"undefined\") {\n // Borrow the high-resolution timer from the hidden window....\n // eslint-disable-next-line block-scoped-var\n usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n // we must be running in content space\n // eslint-disable-next-line no-undef\n usablePerfObj = performance;\n} else {\n // This is a dummy object so this file doesn't crash in the node prerendering\n // task.\n usablePerfObj = {\n now() {},\n mark() {},\n };\n}\n\nfunction _PerfService(options) {\n // For testing, so that we can use a fake Window.performance object with\n // known state.\n if (options && options.performanceObj) {\n this._perf = options.performanceObj;\n } else {\n this._perf = usablePerfObj;\n }\n}\n\n_PerfService.prototype = {\n /**\n * Calls the underlying mark() method on the appropriate Window.performance\n * object to add a mark with the given name to the appropriate performance\n * timeline.\n *\n * @param {String} name the name to give the current mark\n * @return {void}\n */\n mark: function mark(str) {\n this._perf.mark(str);\n },\n\n /**\n * Calls the underlying getEntriesByName on the appropriate Window.performance\n * object.\n *\n * @param {String} name\n * @param {String} type eg \"mark\"\n * @return {Array} Performance* objects\n */\n getEntriesByName: function getEntriesByName(name, type) {\n return this._perf.getEntriesByName(name, type);\n },\n\n /**\n * The timeOrigin property from the appropriate performance object.\n * Used to ensure that timestamps from the add-on code and the content code\n * are comparable.\n *\n * @note If this is called from a context without a window\n * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n * window, which appears to be the first created window (and thus\n * timeOrigin) in the browser. Note also, however, there is also a private\n * hidden window, presumably for private browsing, which appears to be\n * created dynamically later. Exactly how/when that shows up needs to be\n * investigated.\n *\n * @return {Number} A double of milliseconds with a precision of 0.5us.\n */\n get timeOrigin() {\n return this._perf.timeOrigin;\n },\n\n /**\n * Returns the \"absolute\" version of performance.now(), i.e. one that\n * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n * be comparable across both chrome and content.\n *\n * @return {Number}\n */\n absNow: function absNow() {\n return this.timeOrigin + this._perf.now();\n },\n\n /**\n * This returns the absolute startTime from the most recent performance.mark()\n * with the given name.\n *\n * @param {String} name the name to lookup the start time for\n *\n * @return {Number} the returned start time, as a DOMHighResTimeStamp\n *\n * @throws {Error} \"No Marks with the name ...\" if none are available\n *\n * @note Always surround calls to this by try/catch. Otherwise your code\n * may fail when the `privacy.resistFingerprinting` pref is true. When\n * this pref is set, all attempts to get marks will likely fail, which will\n * cause this method to throw.\n *\n * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n * for more info.\n */\n getMostRecentAbsMarkStartByName(name) {\n let entries = this.getEntriesByName(name, \"mark\");\n\n if (!entries.length) {\n throw new Error(`No marks with the name ${name}`);\n }\n\n let mostRecentEntry = entries[entries.length - 1];\n return this._perf.timeOrigin + mostRecentEntry.startTime;\n },\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\n\nclass SelectableSearchShortcut extends React.PureComponent {\n render() {\n const {shortcut, selected} = this.props;\n const imageStyle = {backgroundImage: `url(\"${shortcut.tippyTopIcon}\")`};\n return (\n \n
\n
\n \n
\n \n \n {shortcut.keyword} \n
\n \n
\n \n
\n );\n }\n}\n\nexport class SearchShortcutsForm extends React.PureComponent {\n constructor(props) {\n super(props);\n this.handleChange = this.handleChange.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n this.onSaveButtonClick = this.onSaveButtonClick.bind(this);\n\n // clone the shortcuts and add them to the state so we can add isSelected property\n const shortcuts = [];\n const {rows, searchShortcuts} = props.TopSites;\n searchShortcuts.forEach(shortcut => {\n shortcuts.push({\n ...shortcut,\n isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword),\n });\n });\n this.state = {shortcuts};\n }\n\n handleChange(event) {\n const {target} = event;\n const {name, checked} = target;\n this.setState(prevState => {\n const shortcuts = prevState.shortcuts.slice();\n let shortcut = shortcuts.find(({keyword}) => keyword === name);\n shortcut.isSelected = checked;\n return {shortcuts};\n });\n }\n\n onCancelButtonClick(ev) {\n ev.preventDefault();\n this.props.onClose();\n }\n\n onSaveButtonClick(ev) {\n ev.preventDefault();\n\n // Check if there were any changes and act accordingly\n const {rows} = this.props.TopSites;\n const pinQueue = [];\n const unpinQueue = [];\n this.state.shortcuts.forEach(shortcut => {\n const alreadyPinned = rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword);\n if (shortcut.isSelected && !alreadyPinned) {\n pinQueue.push(this._searchTopSite(shortcut));\n } else if (!shortcut.isSelected && alreadyPinned) {\n unpinQueue.push({url: alreadyPinned.url, searchVendor: shortcut.shortURL});\n }\n });\n\n // Tell the feed to do the work.\n this.props.dispatch(ac.OnlyToMain({\n type: at.UPDATE_PINNED_SEARCH_SHORTCUTS,\n data: {\n addedShortcuts: pinQueue,\n deletedShortcuts: unpinQueue,\n },\n }));\n\n // Send the Telemetry pings.\n pinQueue.forEach(shortcut => {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_ADD\",\n value: {search_vendor: shortcut.searchVendor},\n }));\n });\n unpinQueue.forEach(shortcut => {\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"SEARCH_EDIT_DELETE\",\n value: {search_vendor: shortcut.searchVendor},\n }));\n });\n\n this.props.onClose();\n }\n\n _searchTopSite(shortcut) {\n return {\n url: shortcut.url,\n searchTopSite: true,\n label: shortcut.keyword,\n searchVendor: shortcut.shortURL,\n };\n }\n\n render() {\n return (\n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n MIN_CORNER_FAVICON_SIZE,\n MIN_RICH_FAVICON_SIZE,\n TOP_SITES_CONTEXT_MENU_OPTIONS,\n TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS,\n TOP_SITES_SOURCE,\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {screenshotImage: null};\n this.onDragEvent = this.onDragEvent.bind(this);\n this.onKeyPress = this.onKeyPress.bind(this);\n }\n\n /*\n * Helper to determine whether the drop zone should allow a drop. We only allow\n * dropping top sites for now.\n */\n _allowDrop(e) {\n return e.dataTransfer.types.includes(\"text/topsite-index\");\n }\n\n onDragEvent(event) {\n switch (event.type) {\n case \"click\":\n // Stop any link clicks if we started any dragging\n if (this.dragged) {\n event.preventDefault();\n }\n break;\n case \"dragstart\":\n this.dragged = true;\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n event.target.blur();\n this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n break;\n case \"dragend\":\n this.props.onDragEvent(event);\n break;\n case \"dragenter\":\n case \"dragover\":\n case \"drop\":\n if (this._allowDrop(event)) {\n event.preventDefault();\n this.props.onDragEvent(event, this.props.index);\n }\n break;\n case \"mousedown\":\n // Block the scroll wheel from appearing for middle clicks on search top sites\n if (event.button === 1 && this.props.link.searchTopSite) {\n event.preventDefault();\n }\n // Reset at the first mouse event of a potential drag\n this.dragged = false;\n break;\n }\n }\n\n /**\n * Helper to obtain the next state based on nextProps and prevState.\n *\n * NOTE: Rename this method to getDerivedStateFromProps when we update React\n * to >= 16.3. We will need to update tests as well. We cannot rename this\n * method to getDerivedStateFromProps now because there is a mismatch in\n * the React version that we are using for both testing and production.\n * (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n *\n * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n */\n static getNextStateFromProps(nextProps, prevState) {\n const {screenshot} = nextProps.link;\n const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n if (imageInState) {\n return null;\n }\n\n // Since image was updated, attempt to revoke old image blob URL, if it exists.\n ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillMount() {\n const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillReceiveProps(nextProps) {\n const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n componentWillUnmount() {\n ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n }\n\n onKeyPress(event) {\n // If we have tabbed to a search shortcut top site, and we click 'enter',\n // we should execute the onClick function. This needs to be added because\n // search top sites are anchor tags without an href. See bug 1483135\n if (this.props.link.searchTopSite && event.key === \"Enter\") {\n this.props.onClick(event);\n }\n }\n\n render() {\n const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}${link.searchTopSite ? \" search-shortcut\" : \"\"}`;\n const {tippyTopIcon, faviconSize} = link;\n const [letterFallback] = title;\n let imageClassName;\n let imageStyle;\n let showSmallFavicon = false;\n let smallFaviconStyle;\n let smallFaviconFallback;\n let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n smallFaviconFallback = false;\n } else if (link.searchTopSite) {\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: `url(${tippyTopIcon})`,\n };\n smallFaviconStyle = {backgroundImage: `url(${tippyTopIcon})`};\n } else if (link.customScreenshotURL) {\n // assume high quality custom screenshot and use rich icon styles and class names\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\",\n };\n } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n // styles and class names for top sites with rich icons\n imageClassName = \"top-site-icon rich-icon\";\n imageStyle = {\n backgroundColor: link.backgroundColor,\n backgroundImage: `url(${tippyTopIcon || link.favicon})`,\n };\n } else {\n // styles and class names for top sites with screenshot + small icon in top left corner\n imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n // only show a favicon in top left if it's greater than 16x16\n if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n showSmallFavicon = true;\n smallFaviconStyle = {backgroundImage: `url(${link.favicon})`};\n } else if (hasScreenshotImage) {\n // Don't show a small favicon if there is no screenshot, because that\n // would result in two fallback icons\n showSmallFavicon = true;\n smallFaviconFallback = true;\n }\n }\n let draggableProps = {};\n if (isDraggable) {\n draggableProps = {\n onClick: this.onDragEvent,\n onDragEnd: this.onDragEvent,\n onDragStart: this.onDragEvent,\n onMouseDown: this.onDragEvent,\n };\n }\n return (\n \n );\n }\n}\nTopSiteLink.defaultProps = {\n title: \"\",\n link: {},\n isDraggable: true,\n};\n\nexport class TopSite extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {showContextMenu: false};\n this.onLinkClick = this.onLinkClick.bind(this);\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n }\n\n /**\n * Report to telemetry additional information about the item.\n */\n _getTelemetryInfo() {\n const value = {icon_type: this.props.link.iconType};\n // Filter out \"not_pinned\" type for being the default\n if (this.props.link.isPinned) {\n value.card_type = \"pinned\";\n }\n if (this.props.link.searchTopSite) {\n // Set the card_type as \"search\" regardless of its pinning status\n value.card_type = \"search\";\n value.search_vendor = this.props.link.hostname;\n }\n return {value};\n }\n\n userEvent(event) {\n this.props.dispatch(ac.UserEvent(Object.assign({\n event,\n source: TOP_SITES_SOURCE,\n action_position: this.props.index,\n }, this._getTelemetryInfo())));\n }\n\n onLinkClick(event) {\n this.userEvent(\"CLICK\");\n\n // Specially handle a top site link click for \"typed\" frecency bonus as\n // specified as a property on the link.\n event.preventDefault();\n const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n if (!this.props.link.searchTopSite) {\n this.props.dispatch(ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n }));\n } else {\n this.props.dispatch(ac.OnlyToMain({\n type: at.FILL_SEARCH_TERM,\n data: {label: this.props.link.label},\n }));\n }\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.props.onActivate(this.props.index);\n this.setState({showContextMenu: true});\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n render() {\n const {props} = this;\n const {link} = props;\n const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n const title = link.label || link.hostname;\n return (\n \n \n \n \n \n \n {isContextMenuOpen &&\n \n }\n
\n );\n }\n}\nTopSite.defaultProps = {\n link: {},\n onActivate() {},\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onEditButtonClick = this.onEditButtonClick.bind(this);\n }\n\n onEditButtonClick() {\n this.props.dispatch(\n {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n static get DEFAULT_STATE() {\n return {\n activeIndex: null,\n draggedIndex: null,\n draggedSite: null,\n draggedTitle: null,\n topSitesPreview: null,\n };\n }\n\n constructor(props) {\n super(props);\n this.state = _TopSiteList.DEFAULT_STATE;\n this.onDragEvent = this.onDragEvent.bind(this);\n this.onActivate = this.onActivate.bind(this);\n }\n\n componentWillReceiveProps(nextProps) {\n if (this.state.draggedSite) {\n const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n // We got the new order from the redux store via props. We can clear state now.\n this.setState(_TopSiteList.DEFAULT_STATE);\n }\n }\n }\n\n userEvent(event, index) {\n this.props.dispatch(ac.UserEvent({\n event,\n source: TOP_SITES_SOURCE,\n action_position: index,\n }));\n }\n\n onDragEvent(event, index, link, title) {\n switch (event.type) {\n case \"dragstart\":\n this.dropped = false;\n this.setState({\n draggedIndex: index,\n draggedSite: link,\n draggedTitle: title,\n activeIndex: null,\n });\n this.userEvent(\"DRAG\", index);\n break;\n case \"dragend\":\n if (!this.dropped) {\n // If there was no drop event, reset the state to the default.\n this.setState(_TopSiteList.DEFAULT_STATE);\n }\n break;\n case \"dragenter\":\n if (index === this.state.draggedIndex) {\n this.setState({topSitesPreview: null});\n } else {\n this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n }\n break;\n case \"drop\":\n if (index !== this.state.draggedIndex) {\n this.dropped = true;\n this.props.dispatch(ac.AlsoToMain({\n type: at.TOP_SITES_INSERT,\n data: {\n site: {\n url: this.state.draggedSite.url,\n label: this.state.draggedTitle,\n customScreenshotURL: this.state.draggedSite.customScreenshotURL,\n // Only if the search topsites experiment is enabled\n ...(this.state.draggedSite.searchTopSite && {searchTopSite: true}),\n },\n index,\n draggedFromIndex: this.state.draggedIndex,\n },\n }));\n this.userEvent(\"DROP\", index);\n }\n break;\n }\n }\n\n _getTopSites() {\n // Make a copy of the sites to truncate or extend to desired length\n let topSites = this.props.TopSites.rows.slice();\n topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n return topSites;\n }\n\n /**\n * Make a preview of the topsites that will be the result of dropping the currently\n * dragged site at the specified index.\n */\n _makeTopSitesPreview(index) {\n const topSites = this._getTopSites();\n topSites[this.state.draggedIndex] = null;\n const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n const unpinned = topSites.filter(site => site && !site.isPinned);\n const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n if (!pinnedOnly[index]) {\n pinnedOnly[index] = siteToInsert;\n } else {\n // Find the hole to shift the pinned site(s) towards. We shift towards the\n // hole left by the site being dragged.\n let holeIndex = index;\n const indexStep = index > this.state.draggedIndex ? -1 : 1;\n while (pinnedOnly[holeIndex]) {\n holeIndex += indexStep;\n }\n\n // Shift towards the hole.\n const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n while (holeIndex !== index) {\n const nextIndex = holeIndex + shiftingStep;\n pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n holeIndex = nextIndex;\n }\n pinnedOnly[index] = siteToInsert;\n }\n\n // Fill in the remaining holes with unpinned sites.\n const preview = pinnedOnly;\n for (let i = 0; i < preview.length; i++) {\n if (!preview[i]) {\n preview[i] = unpinned.shift() || null;\n }\n }\n\n return preview;\n }\n\n onActivate(index) {\n this.setState({activeIndex: index});\n }\n\n render() {\n const {props} = this;\n const topSites = this.state.topSitesPreview || this._getTopSites();\n const topSitesUI = [];\n const commonProps = {\n onDragEvent: this.onDragEvent,\n dispatch: props.dispatch,\n intl: props.intl,\n };\n // We assign a key to each placeholder slot. We need it to be independent\n // of the slot index (i below) so that the keys used stay the same during\n // drag and drop reordering and the underlying DOM nodes are reused.\n // This mostly (only?) affects linux so be sure to test on linux before changing.\n let holeIndex = 0;\n\n // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n // .hide-for-narrow to hide in CSS via @media query.\n const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n for (let i = 0, l = topSites.length; i < l; i++) {\n const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n const slotProps = {\n key: link ? link.url : holeIndex++,\n index: i,\n };\n if (i >= maxNarrowVisibleIndex) {\n slotProps.className = \"hide-for-narrow\";\n }\n topSitesUI.push(!link ? (\n \n ) : (\n \n ));\n }\n return ();\n }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n getOptions() {\n const {props} = this;\n const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n // Handle special case of default site\n const propOptions = (!site.isDefault || site.searchTopSite) ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n const {action, impression, id, string_id, type, userEvent} = option;\n if (!type && id) {\n option.label = props.intl.formatMessage({id: string_id || id});\n option.onClick = () => {\n props.dispatch(action);\n if (userEvent) {\n const userEventData = Object.assign({\n event: userEvent,\n source,\n action_position: index,\n }, siteInfo);\n props.dispatch(ac.UserEvent(userEventData));\n }\n if (impression && props.shouldSendImpressionStats) {\n props.dispatch(impression);\n }\n };\n }\n return option;\n });\n\n // This is for accessibility to support making each item tabbable.\n // We want to know which item is the first and which item\n // is the last, so we can close the context menu accordingly.\n options[0].first = true;\n options[options.length - 1].last = true;\n return options;\n }\n\n render() {\n return ( );\n }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n id: \"menu_action_open_private_window\",\n icon: \"new-window-private\",\n action: ac.OnlyToMain({\n type: at.OPEN_PRIVATE_WINDOW,\n data: {url: site.url, referrer: site.referrer},\n }),\n userEvent: \"OPEN_PRIVATE_WINDOW\",\n});\n\nexport const GetPlatformString = platform => {\n switch (platform) {\n case \"win\":\n return \"menu_action_show_file_windows\";\n case \"macosx\":\n return \"menu_action_show_file_mac_os\";\n case \"linux\":\n return \"menu_action_show_file_linux\";\n default:\n return \"menu_action_show_file_default\";\n }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n Separator: () => ({type: \"separator\"}),\n EmptyItem: () => ({type: \"empty\"}),\n RemoveBookmark: site => ({\n id: \"menu_action_remove_bookmark\",\n icon: \"bookmark-added\",\n action: ac.AlsoToMain({\n type: at.DELETE_BOOKMARK_BY_ID,\n data: site.bookmarkGuid,\n }),\n userEvent: \"BOOKMARK_DELETE\",\n }),\n AddBookmark: site => ({\n id: \"menu_action_bookmark\",\n icon: \"bookmark-hollow\",\n action: ac.AlsoToMain({\n type: at.BOOKMARK_URL,\n data: {url: site.url, title: site.title, type: site.type},\n }),\n userEvent: \"BOOKMARK_ADD\",\n }),\n OpenInNewWindow: site => ({\n id: \"menu_action_open_new_window\",\n icon: \"new-window\",\n action: ac.AlsoToMain({\n type: at.OPEN_NEW_WINDOW,\n data: {\n referrer: site.referrer,\n typedBonus: site.typedBonus,\n url: site.url,\n },\n }),\n userEvent: \"OPEN_NEW_WINDOW\",\n }),\n BlockUrl: (site, index, eventSource) => ({\n id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.AlsoToMain({\n type: at.BLOCK_URL,\n data: {url: site.open_url || site.url, pocket_id: site.pocket_id},\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n block: 0,\n tiles: [{id: site.guid, pos: index}],\n }),\n userEvent: \"BLOCK\",\n }),\n\n // This is an option for web extentions which will result in remove items from\n // memory and notify the web extenion, rather than using the built-in block list.\n WebExtDismiss: (site, index, eventSource) => ({\n id: \"menu_action_webext_dismiss\",\n string_id: \"menu_action_dismiss\",\n icon: \"dismiss\",\n action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n source: eventSource,\n url: site.url,\n action_position: index,\n }),\n }),\n DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n id: \"menu_action_delete\",\n icon: \"delete\",\n action: {\n type: at.DIALOG_OPEN,\n data: {\n onConfirm: [\n ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo)),\n ],\n eventSource,\n body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n confirm_button_string_id: \"menu_action_delete\",\n cancel_button_string_id: \"topsites_form_cancel_button\",\n icon: \"modal-delete\",\n },\n },\n userEvent: \"DIALOG_OPEN\",\n }),\n ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n id: GetPlatformString(platform),\n icon: \"search\",\n action: ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n OpenFile: site => ({\n id: \"menu_action_open_file\",\n icon: \"open-file\",\n action: ac.OnlyToMain({\n type: at.OPEN_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n CopyDownloadLink: site => ({\n id: \"menu_action_copy_download_link\",\n icon: \"copy\",\n action: ac.OnlyToMain({\n type: at.COPY_DOWNLOAD_LINK,\n data: {url: site.url},\n }),\n }),\n GoToDownloadPage: site => ({\n id: \"menu_action_go_to_download_page\",\n icon: \"download\",\n action: ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: {url: site.referrer},\n }),\n disabled: !site.referrer,\n }),\n RemoveDownload: site => ({\n id: \"menu_action_remove_download\",\n icon: \"delete\",\n action: ac.OnlyToMain({\n type: at.REMOVE_DOWNLOAD_FILE,\n data: {url: site.url},\n }),\n }),\n PinTopSite: ({url, searchTopSite, label}, index) => ({\n id: \"menu_action_pin\",\n icon: \"pin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_PIN,\n data: {\n site: {\n url,\n ...(searchTopSite && {searchTopSite, label}),\n },\n index,\n },\n }),\n userEvent: \"PIN\",\n }),\n UnpinTopSite: site => ({\n id: \"menu_action_unpin\",\n icon: \"unpin\",\n action: ac.AlsoToMain({\n type: at.TOP_SITES_UNPIN,\n data: {site: {url: site.url}},\n }),\n userEvent: \"UNPIN\",\n }),\n SaveToPocket: (site, index, eventSource) => ({\n id: \"menu_action_save_to_pocket\",\n icon: \"pocket-save\",\n action: ac.AlsoToMain({\n type: at.SAVE_TO_POCKET,\n data: {site: {url: site.url, title: site.title}},\n }),\n impression: ac.ImpressionStats({\n source: eventSource,\n pocket: 0,\n tiles: [{id: site.guid, pos: index}],\n }),\n userEvent: \"SAVE_TO_POCKET\",\n }),\n DeleteFromPocket: site => ({\n id: \"menu_action_delete_pocket\",\n icon: \"delete\",\n action: ac.AlsoToMain({\n type: at.DELETE_FROM_POCKET,\n data: {pocket_id: site.pocket_id},\n }),\n userEvent: \"DELETE_FROM_POCKET\",\n }),\n ArchiveFromPocket: site => ({\n id: \"menu_action_archive_pocket\",\n icon: \"check\",\n action: ac.AlsoToMain({\n type: at.ARCHIVE_FROM_POCKET,\n data: {pocket_id: site.pocket_id},\n }),\n userEvent: \"ARCHIVE_FROM_POCKET\",\n }),\n EditTopSite: (site, index) => ({\n id: \"edit_topsites_button_text\",\n icon: \"edit\",\n action: {\n type: at.TOP_SITES_EDIT,\n data: {index},\n },\n }),\n CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()),\n};\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n * the image in the React props. This can either be an object with the `data`\n * and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n * to the image *object* in the React component's state. All local image\n * objects have the `url` property, and an additional property `path`, if they\n * are blobs.\n */\nexport const ScreenshotUtils = {\n isBlob(isLocal, image) {\n return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n },\n\n // This should always be called with a remote image and not a local image.\n createLocalImageObject(remoteImage) {\n if (!remoteImage) {\n return null;\n }\n if (this.isBlob(false, remoteImage)) {\n return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n }\n return {url: remoteImage};\n },\n\n // Revokes the object URL of the image if the local image is a blob.\n // This should always be called with a local image and not a remote image.\n maybeRevokeBlobObjectURL(localImage) {\n if (this.isBlob(true, localImage)) {\n global.URL.revokeObjectURL(localImage.url);\n }\n },\n\n // Checks if remoteImage and localImage are the same.\n isRemoteImageLocal(localImage, remoteImage) {\n // Both remoteImage and localImage are present.\n if (remoteImage && localImage) {\n return this.isBlob(false, remoteImage) ?\n localImage.path === remoteImage.path :\n localImage.url === remoteImage;\n }\n\n // This will only handle the remaining three possible outcomes.\n // (i.e. everything except when both image and localImage are present)\n return !remoteImage && !localImage;\n },\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1. User clicks \"No Thanks\"\n * 2. User completed the data import\n * 3. After 3 active days\n * 4. User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLaunchTour = this.onLaunchTour.bind(this);\n this.onCancelTour = this.onCancelTour.bind(this);\n }\n\n onLaunchTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n }\n\n onCancelTour() {\n this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n }\n\n render() {\n return (\n
\n \n \n
\n
\n \n \n \n \n \n \n
\n
);\n }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n constructor(options) {\n this.initialPrefs = options.initialPrefs;\n this.initialSections = options.initialSections;\n this._setValidation(options.validation);\n }\n\n get validation() {\n return this._validation;\n }\n\n set validation(value) {\n this._setValidation(value);\n }\n\n get invalidatingPrefs() {\n return this._invalidatingPrefs;\n }\n\n // This is needed so we can use it in the constructor\n _setValidation(value = []) {\n this._validation = value;\n this._invalidatingPrefs = value.reduce((result, next) => {\n if (typeof next === \"string\") {\n result.push(next);\n return result;\n } else if (next && next.oneOf) {\n return result.concat(next.oneOf);\n } else if (next && next.indexedDB) {\n return result.concat(next.indexedDB);\n } else if (next && next.jsonPrefs) {\n return result.concat(next.jsonPrefs);\n }\n throw new Error(\"Your validation configuration is not properly configured\");\n }, []);\n }\n\n _isPrefEnabled(prefObj) {\n try {\n let data = JSON.parse(prefObj);\n return data && data.enabled;\n } catch (e) {\n return null;\n }\n }\n\n arePrefsValid(getPref, indexedDBPrefs) {\n for (const prefs of this.validation) {\n // {oneOf: [\"foo\", \"bar\"]}\n if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n return false;\n\n // {indexedDB: [\"foo\", \"bar\"]}\n } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n if (anyModifiedPrefs) {\n return false;\n }\n // {jsonPrefs: [\"foo\", \"bar\"]}\n } else if (prefs && prefs.jsonPrefs) {\n const isPrefModified =\n prefs.jsonPrefs.some(name => this._isPrefEnabled(getPref(name)) !== this.initialPrefs[name].enabled);\n if (isPrefModified) {\n return false;\n }\n // \"foo\"\n } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n return false;\n }\n }\n return true;\n }\n}\n\nthis.PrerenderData = new _PrerenderData({\n initialPrefs: {\n \"migrationExpired\": true,\n \"feeds.topsites\": true,\n \"showSearch\": true,\n \"topSitesRows\": 1,\n \"feeds.section.topstories\": true,\n \"feeds.section.highlights\": true,\n \"sectionOrder\": \"topsites,topstories,highlights\",\n \"collapsed\": false,\n \"discoverystream.config\": {\"enabled\": false},\n },\n // Prefs listed as invalidating will prevent the prerendered version\n // of AS from being used if their value is something other than what is listed\n // here. This is required because some preferences cause the page layout to be\n // too different for the prerendered version to be used. Unfortunately, this\n // will result in users who have modified some of their preferences not being\n // able to get the benefits of prerendering.\n validation: [\n \"feeds.topsites\",\n \"showSearch\",\n \"topSitesRows\",\n \"sectionOrder\",\n // This means if either of these are set to their default values,\n // prerendering can be used.\n {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n // If any component has the following preference set to `true` it will\n // invalidate the prerendered version.\n {indexedDB: [\"collapsed\"]},\n // For below prefs, parse value to check enabled property. If enabled property\n // differs from initial prefs enabled value, prerendering cannot be used\n {jsonPrefs: [\"discoverystream.config\"]},\n ],\n initialSections: [\n {\n enabled: true,\n icon: \"pocket\",\n id: \"topstories\",\n order: 1,\n title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}},\n },\n {\n enabled: true,\n id: \"highlights\",\n icon: \"highlights\",\n order: 2,\n title: {id: \"header_highlights\"},\n },\n ],\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onSearchClick = this.onSearchClick.bind(this);\n this.onSearchHandoffClick = this.onSearchHandoffClick.bind(this);\n this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);\n this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);\n this.onInputMount = this.onInputMount.bind(this);\n this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(this);\n }\n\n handleEvent(event) {\n // Also track search events with our own telemetry\n if (event.detail.type === \"Search\") {\n this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n }\n }\n\n onSearchClick(event) {\n window.gContentSearchController.search(event);\n }\n\n doSearchHandoff(text) {\n this.props.dispatch(ac.OnlyToMain({type: at.HANDOFF_SEARCH_TO_AWESOMEBAR, data: {text}}));\n this.props.dispatch({type: at.FAKE_FOCUS_SEARCH});\n this.props.dispatch(ac.UserEvent({event: \"SEARCH_HANDOFF\"}));\n if (text) {\n this.props.dispatch({type: at.HIDE_SEARCH});\n }\n }\n\n onSearchHandoffClick(event) {\n // When search hand-off is enabled, we render a big button that is styled to\n // look like a search textbox. If the button is clicked, we style\n // the button as if it was a focused search box and show a fake cursor but\n // really focus the awesomebar without the focus styles (\"hidden focus\").\n event.preventDefault();\n this.doSearchHandoff();\n }\n\n onSearchHandoffPaste(event) {\n event.preventDefault();\n this.doSearchHandoff(event.clipboardData.getData(\"Text\"));\n }\n\n onSearchHandoffDrop(event) {\n event.preventDefault();\n let text = event.dataTransfer.getData(\"text\");\n if (text) {\n this.doSearchHandoff(text);\n }\n }\n\n componentWillUnmount() {\n delete window.gContentSearchController;\n }\n\n onInputMount(input) {\n if (input) {\n // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n // can add the appropriate telemetry probes for search. Without the correct\n // name, certain tests like browser_UsageTelemetry_content.js will fail\n // (See github ticket #2348 for more details)\n const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n // the search data and acts as context for the search request (See\n // nsISearchEngine.getSubmission). It is necessary so that search engine\n // plugins can correctly atribute referrals. (See github ticket #3321 for\n // more details)\n const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n // gContentSearchController needs to exist as a global so that tests for\n // the existing about:home can find it; and so it allows these tests to pass.\n // In the future, when activity stream is default about:home, this can be renamed\n window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n healthReportKey, searchSource);\n addEventListener(\"ContentSearchClient\", this);\n } else {\n window.gContentSearchController = null;\n removeEventListener(\"ContentSearchClient\", this);\n }\n }\n\n onSearchHandoffButtonMount(button) {\n // Keep a reference to the button for use during \"paste\" event handling.\n this._searchHandoffButton = button;\n }\n\n /*\n * Do not change the ID on the input field, as legacy newtab code\n * specifically looks for the id 'newtab-search-text' on input fields\n * in order to execute searches in various tests\n */\n render() {\n const wrapperClassName = [\n \"search-wrapper\",\n this.props.hide && \"search-hidden\",\n this.props.fakeFocus && \"fake-focus\",\n ].filter(v => v).join(\" \");\n\n return (\n {this.props.showLogo &&\n
\n }\n {!this.props.handoffEnabled &&\n
\n \n \n \n \n \n \n \n
\n }\n {this.props.handoffEnabled &&\n
\n }\n
);\n }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {MoreRecommendations} from \"content-src/components/MoreRecommendations/MoreRecommendations\";\nimport {PocketLoggedInCta} from \"content-src/components/PocketLoggedInCta/PocketLoggedInCta\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n return typeof message === \"string\" ? {message} : ;\n}\n\nexport class Section extends React.PureComponent {\n get numRows() {\n const {rowsPref, maxRows, Prefs} = this.props;\n return rowsPref ? Prefs.values[rowsPref] : maxRows;\n }\n\n _dispatchImpressionStats() {\n const {props} = this;\n let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n // If the section has compact cards and the viewport is wide enough, we show\n // 4 columns instead of 3.\n // $break-point-widest = 1072px (from _variables.scss)\n cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n }\n const maxCards = cardsPerRow * this.numRows;\n const cards = props.rows.slice(0, maxCards);\n\n if (this.needsImpressionStats(cards)) {\n props.dispatch(ac.ImpressionStats({\n source: props.eventSource,\n tiles: cards.map(link => ({id: link.guid})),\n }));\n this.impressionCardGuids = cards.map(link => link.guid);\n }\n }\n\n // This sends an event when a user sees a set of new content. If content\n // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n // only send the event if the page becomes visible again.\n sendImpressionStatsOrAddListener() {\n const {props} = this;\n\n if (!props.shouldSendImpressionStats || !props.dispatch) {\n return;\n }\n\n if (props.document.visibilityState === VISIBLE) {\n this._dispatchImpressionStats();\n } else {\n // We should only ever send the latest impression stats ping, so remove any\n // older listeners.\n if (this._onVisibilityChange) {\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n\n // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n this._onVisibilityChange = () => {\n if (props.document.visibilityState === VISIBLE) {\n if (!this.props.pref.collapsed) {\n this._dispatchImpressionStats();\n }\n props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n };\n props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n componentWillMount() {\n this.sendNewTabRehydrated(this.props.initialized);\n }\n\n componentDidMount() {\n if (this.props.rows.length && !this.props.pref.collapsed) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentDidUpdate(prevProps) {\n const {props} = this;\n const isCollapsed = props.pref.collapsed;\n const wasCollapsed = prevProps.pref.collapsed;\n if (\n // Don't send impression stats for the empty state\n props.rows.length &&\n (\n // We only want to send impression stats if the content of the cards has changed\n // and the section is not collapsed...\n (props.rows !== prevProps.rows && !isCollapsed) ||\n // or if we are expanding a section that was collapsed.\n (wasCollapsed && !isCollapsed)\n )\n ) {\n this.sendImpressionStatsOrAddListener();\n }\n }\n\n componentWillUpdate(nextProps) {\n this.sendNewTabRehydrated(nextProps.initialized);\n }\n\n componentWillUnmount() {\n if (this._onVisibilityChange) {\n this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n needsImpressionStats(cards) {\n if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n return true;\n }\n\n for (let i = 0; i < cards.length; i++) {\n if (cards[i].guid !== this.impressionCardGuids[i]) {\n return true;\n }\n }\n\n return false;\n }\n\n // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n // data has been consumed e.g. for counting the number of tabs that\n // have rendered that data.\n sendNewTabRehydrated(initialized) {\n if (initialized && !this.renderNotified) {\n this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n this.renderNotified = true;\n }\n }\n\n render() {\n const {\n id, eventSource, title, icon, rows, Pocket, topics,\n emptyState, dispatch, compactCards, read_more_endpoint,\n contextMenuOptions, initialized, learnMore,\n pref, privacyNoticeURL, isFirst, isLast,\n } = this.props;\n\n const waitingForSpoc = id === \"topstories\" && this.props.Pocket.waitingForSpoc;\n const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n const {numRows} = this;\n const maxCards = maxCardsPerRow * numRows;\n const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n const {pocketCta, isUserLoggedIn} = Pocket || {};\n const {useCta} = pocketCta || {};\n\n // Don't display anything until we have a definitve result from Pocket,\n // to avoid a flash of logged out state while we render.\n const isPocketLoggedInDefined = (isUserLoggedIn === true || isUserLoggedIn === false);\n\n const hasTopics = topics && topics.length > 0;\n\n const shouldShowPocketCta = (id === \"topstories\" &&\n useCta && isUserLoggedIn === false);\n\n // Show topics only for top stories and if it has loaded with topics.\n // The classs .top-stories-bottom-container ensures content doesn't shift as things load.\n const shouldShowTopics = (id === \"topstories\" && hasTopics &&\n ((useCta && isUserLoggedIn === true) || (!useCta && isPocketLoggedInDefined)));\n\n // We use topics to determine language support for read more.\n const shouldShowReadMore = read_more_endpoint && hasTopics;\n\n const realRows = rows.slice(0, maxCards);\n\n // The empty state should only be shown after we have initialized and there is no content.\n // Otherwise, we should show placeholders.\n const shouldShowEmptyState = initialized && !rows.length;\n\n const cards = [];\n if (!shouldShowEmptyState) {\n for (let i = 0; i < maxCards; i++) {\n const link = realRows[i];\n // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n // .hide-for-narrow to hide in CSS via @media query.\n const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n let usePlaceholder = !link;\n // If we are in the third card and waiting for spoc,\n // use the placeholder.\n if (!usePlaceholder && i === 2 && waitingForSpoc) {\n usePlaceholder = true;\n }\n cards.push(!usePlaceholder ? (\n \n ) : (\n \n ));\n }\n }\n\n const sectionClassName = [\n \"section\",\n compactCards ? \"compact-cards\" : \"normal-cards\",\n ].join(\" \");\n\n // <-- React component\n // <-- HTML5 element\n return (\n \n\n {!shouldShowEmptyState && ()}\n {shouldShowEmptyState &&\n \n
\n {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n
:\n
}\n
\n {getFormattedMessage(emptyState.message)}\n
\n
\n
}\n {id === \"topstories\" &&\n \n {shouldShowTopics &&\n
\n \n
\n }\n\n {shouldShowPocketCta &&\n
\n }\n\n
\n {shouldShowReadMore &&\n }\n
\n
}\n \n );\n }\n}\n\nSection.defaultProps = {\n document: global.document,\n rows: [],\n emptyState: {},\n pref: {},\n title: \"\",\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs, Pocket: state.Pocket}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n renderSections() {\n const sections = [];\n const enabledSections = this.props.Sections.filter(section => section.enabled);\n const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n // Enabled sections doesn't include Top Sites, so we add it if enabled.\n const expectedCount = enabledSections.length + ~~showTopSites;\n\n for (const sectionId of sectionOrder.split(\",\")) {\n const commonProps = {\n key: sectionId,\n isFirst: sections.length === 0,\n isLast: sections.length === expectedCount - 1,\n };\n if (sectionId === \"topsites\" && showTopSites) {\n sections.push( );\n } else {\n const section = enabledSections.find(s => s.id === sectionId);\n if (section) {\n sections.push( );\n }\n }\n }\n return sections;\n }\n\n render() {\n return (\n \n {this.renderSections()}\n
\n );\n }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class MoreRecommendations extends React.PureComponent {\n render() {\n const {read_more_endpoint} = this.props;\n if (read_more_endpoint) {\n return (\n \n \n \n );\n }\n return null;\n }\n}\n","import {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class _PocketLoggedInCta extends React.PureComponent {\n render() {\n const {pocketCta} = this.props.Pocket;\n return (\n \n \n {pocketCta.ctaButton ? pocketCta.ctaButton : }\n \n\n \n \n {pocketCta.ctaText ? pocketCta.ctaText : }\n \n \n \n );\n }\n}\n\nexport const PocketLoggedInCta = connect(state => ({Pocket: state.Pocket}))(_PocketLoggedInCta);\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n render() {\n const {url, name} = this.props;\n return ({name} );\n }\n}\n\nexport class Topics extends React.PureComponent {\n render() {\n const {topics} = this.props;\n return (\n \n \n {topics && topics.map(t => )} \n \n );\n }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n constructor(store, options = {}) {\n this._store = store;\n // Overrides for testing\n this.document = options.document || global.document;\n this._perfService = options.perfService || perfSvc;\n this._onVisibilityChange = this._onVisibilityChange.bind(this);\n }\n\n /**\n * sendEventOrAddListener - Notify immediately if the page is already visible,\n * or else set up a listener for when visibility changes.\n * This is needed for accurate session tracking for telemetry,\n * because tabs are pre-loaded.\n */\n sendEventOrAddListener() {\n if (this.document.visibilityState === VISIBLE) {\n // If the document is already visible, to the user, send a notification\n // immediately that a session has started.\n this._sendEvent();\n } else {\n // If the document is not visible, listen for when it does become visible.\n this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n\n /**\n * _sendEvent - Sends a message to the main process to indicate the current\n * tab is now visible to the user, includes the\n * visibility_event_rcvd_ts time in ms from the UNIX epoch.\n */\n _sendEvent() {\n this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n try {\n let visibility_event_rcvd_ts = this._perfService\n .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n this._store.dispatch(ac.AlsoToMain({\n type: at.SAVE_SESSION_PERF_DATA,\n data: {visibility_event_rcvd_ts},\n }));\n } catch (ex) {\n // If this failed, it's likely because the `privacy.resistFingerprinting`\n // pref is true. We should at least not blow up.\n }\n }\n\n /**\n * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n * and removes the event listener. This should only be called once per tab.\n */\n _onVisibilityChange() {\n if (this.document.visibilityState === VISIBLE) {\n this._sendEvent();\n this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n }\n }\n}\n","export function enableASRouterContent(store, asrouterContent) {\n // Enable asrouter content\n store.subscribe(() => {\n const state = store.getState();\n if (!state.ASRouter.initialized) {\n return;\n }\n\n if (!asrouterContent.initialized) {\n asrouterContent.init(store);\n }\n });\n // Return this for testing purposes\n return {asrouterContent};\n}\n","import {DSCard} from \"../DSCard/DSCard.jsx\";\nimport React from \"react\";\n\nexport class CardGrid extends React.PureComponent {\n render() {\n const {data} = this.props;\n\n // Handle a render before feed has been fetched by displaying nothing\n if (!data) {\n return (\n
\n );\n }\n\n let cards = data.recommendations.slice(0, this.props.items).map((rec, index) => (\n \n ));\n\n let divisibility = ``;\n\n if (this.props.items % 4 === 0) {\n divisibility = `divisible-by-4`;\n } else if (this.props.items % 3 === 0) {\n divisibility = `divisible-by-3`;\n }\n\n return (\n \n
{this.props.title}
\n
\n {cards}\n
\n
\n );\n }\n}\n\nCardGrid.defaultProps = {\n border: `border`,\n items: 4, // Number of stories to display\n};\n","import React from \"react\";\n\nexport class DSMessage extends React.PureComponent {\n render() {\n let hasSubtitleAndOrLink = this.props.link_text && this.props.link_url;\n hasSubtitleAndOrLink = hasSubtitleAndOrLink || this.props.subtitle;\n\n return (\n \n {this.props.title && (\n
\n {this.props.icon && ( )}\n {this.props.title} \n \n )}\n { hasSubtitleAndOrLink && (\n
\n {this.props.subtitle && ({this.props.subtitle} )}\n {this.props.link_text && this.props.link_url && ({this.props.link_text} )}\n
\n )}\n
\n
\n );\n }\n}\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\n/**\n * @note exported for testing only\n */\nexport class ListItem extends React.PureComponent {\n // TODO performance: get feeds to send appropriately sized images rather\n // than waiting longer and scaling down on client?\n constructor(props) {\n super(props);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: this.props.index,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.props.id, pos: this.props.index}],\n }));\n }\n }\n\n render() {\n return (\n \n \n \n
{this.props.title}
\n {this.props.excerpt &&
{this.props.excerpt}
}\n
{this.props.domain}
\n
\n
\n \n \n );\n }\n}\n\n/**\n * @note exported for testing only\n */\nexport function _List(props) {\n const feed = props.DiscoveryStream.feeds[props.feed.url];\n\n if (!feed || !feed.data || !feed.data.recommendations) {\n return null;\n }\n\n const recs = feed.data.recommendations;\n\n let recMarkup = recs.slice(props.recStartingPoint,\n props.recStartingPoint + props.items).map((rec, index) => (\n )\n );\n\n const listStyles = [\n \"ds-list\",\n props.fullWidth ? \"ds-list-full-width\" : \"\",\n props.hasBorders ? \"ds-list-borders\" : \"\",\n props.hasImages ? \"ds-list-images\" : \"\",\n props.hasNumbers ? \"ds-list-numbers\" : \"\",\n ];\n return (\n \n {props.header && props.header.title ?
{props.header.title}
: null }\n
\n
\n );\n}\n\n_List.defaultProps = {\n recStartingPoint: 0, // Index of recommendations to start displaying from\n fullWidth: false, // Display items taking up the whole column\n hasBorders: false, // Display lines separating each item\n hasImages: false, // Display images for each item\n hasNumbers: false, // Display numbers for each item\n items: 6, // Number of stories to display. TODO: get from endpoint\n};\n\nexport const List = connect(state => ({DiscoveryStream: state.DiscoveryStream}))(_List);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {DSCard} from \"../DSCard/DSCard.jsx\";\nimport {List} from \"../List/List.jsx\";\nimport React from \"react\";\n\nexport class Hero extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n onLinkClick(event) {\n if (this.props.dispatch) {\n this.props.dispatch(ac.UserEvent({\n event: \"CLICK\",\n source: this.props.type.toUpperCase(),\n action_position: 0,\n }));\n\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.type.toUpperCase(),\n click: 0,\n tiles: [{id: this.heroRec.id, pos: 0}],\n }));\n }\n }\n\n render() {\n const {data} = this.props;\n\n // Handle a render before feed has been fetched by displaying nothing\n if (!data || !data.recommendations) {\n return (\n
\n );\n }\n\n let [heroRec, ...otherRecs] = data.recommendations.slice(0, this.props.items);\n this.heroRec = heroRec;\n\n // Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.\n let cards = otherRecs.map((rec, index) => (\n \n ));\n\n let list = (\n
\n );\n\n return (\n \n
{this.props.title}
\n
\n
\n );\n }\n}\n\nHero.defaultProps = {\n data: {},\n border: `border`,\n items: 1, // Number of stories to display\n};\n","import React from \"react\";\n\nexport class HorizontalRule extends React.PureComponent {\n render() {\n return (\n \n );\n }\n}\n","import React from \"react\";\n\nexport class Topic extends React.PureComponent {\n render() {\n const {url, name} = this.props;\n return ({name} );\n }\n}\n\nexport class Navigation extends React.PureComponent {\n render() {\n const {links} = this.props || [];\n const {alignment} = this.props || \"centered\";\n const header = this.props.header || {};\n return (\n \n {header.title ?
{header.title}
: null}\n
\n
\n {links && links.map(t => )}\n \n
\n
\n );\n }\n}\n","import React from \"react\";\n\nexport class SectionTitle extends React.PureComponent {\n render() {\n const {header: {title, subtitle}} = this.props;\n return (\n \n
{title}
\n {subtitle ?
{subtitle}
: null}\n
\n );\n }\n}\n","function defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n var length = prev.length;\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n var lastArgs = null;\n var lastResult = null;\n // we reference arguments instead of spreading them for performance reasons\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep;\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++;\n // apply arguments instead of spreading for performance.\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions));\n\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n var selector = memoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n }\n\n // apply arguments instead of spreading for performance.\n return memoizedResultFunc.apply(null, params);\n });\n\n selector.resultFunc = resultFunc;\n selector.dependencies = dependencies;\n selector.recomputations = function () {\n return recomputations;\n };\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n return selector;\n };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n }\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}","import {createSelector} from \"reselect\";\n\nexport const selectLayoutRender = createSelector(\n // Selects layout, feeds, spocs so that we only recompute if\n // any of these values change.\n [\n state => state.DiscoveryStream.layout,\n state => state.DiscoveryStream.feeds,\n state => state.DiscoveryStream.spocs,\n ],\n\n // Adds data to each component from feeds. This function only re-runs if one of the inputs change.\n // TODO: calculate spocs\n function layoutRender(layout, feeds, spocs) {\n let spocIndex = 0;\n\n function maybeInjectSpocs(data, spocsConfig) {\n if (data &&\n spocsConfig && spocsConfig.positions && spocsConfig.positions.length &&\n spocs.data.spocs && spocs.data.spocs.length) {\n const recommendations = [...data.recommendations];\n for (let position of spocsConfig.positions) {\n let rickRoll = Math.random();\n if (spocs.data.spocs[spocIndex] && rickRoll <= spocsConfig.probability) {\n recommendations.splice(position.index, 0, spocs.data.spocs[spocIndex++]);\n }\n }\n\n return {\n ...data,\n recommendations,\n };\n }\n\n return data;\n }\n\n return layout.map(row => ({\n ...row,\n\n // Loops through all the components and adds a .data property\n // containing data from feeds\n components: row.components.map(component => {\n if (!component.feed || !feeds[component.feed.url]) {\n return component;\n }\n\n return {...component, data: maybeInjectSpocs(feeds[component.feed.url].data, component.spocs)};\n }),\n }));\n }\n);\n","import {connect} from \"react-redux\";\nimport {TopSites as OldTopSites} from \"content-src/components/TopSites/TopSites\";\nimport React from \"react\";\n\nexport class _TopSites extends React.PureComponent {\n render() {\n const header = this.props.header || {};\n return (\n \n {header.title ? (\n
\n \n {header.title} \n
\n ) : null}\n
\n
\n );\n }\n}\n\nexport const TopSites = connect(state => ({TopSites: state.TopSites}))(_TopSites);\n","import {CardGrid} from \"content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid\";\nimport {connect} from \"react-redux\";\nimport {DSMessage} from \"content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage\";\nimport {Hero} from \"content-src/components/DiscoveryStreamComponents/Hero/Hero\";\nimport {HorizontalRule} from \"content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule\";\nimport {ImpressionStats} from \"content-src/components/DiscoveryStreamImpressionStats/ImpressionStats\";\nimport {List} from \"content-src/components/DiscoveryStreamComponents/List/List\";\nimport {Navigation} from \"content-src/components/DiscoveryStreamComponents/Navigation/Navigation\";\nimport React from \"react\";\nimport {SectionTitle} from \"content-src/components/DiscoveryStreamComponents/SectionTitle/SectionTitle\";\nimport {selectLayoutRender} from \"content-src/lib/selectLayoutRender\";\nimport {TopSites} from \"content-src/components/DiscoveryStreamComponents/TopSites/TopSites\";\n\n// According to the Pocket API endpoint specs, `component.properties.items` is a required property with following values:\n// - List 1-12 items\n// - Hero 1-5 items\n// - CardGrid 1-16 items\n// To enforce that, we define various maximium items for individual components as an extra check.\n// Note that these values are subject to the future changes of the specs.\nconst MAX_ROWS_HERO = 5;\nconst MAX_ROWS_LIST = 12;\nconst MAX_ROWS_CARDGRID = 16;\n\nconst ALLOWED_CSS_URL_PREFIXES = [\"chrome://\", \"resource://\", \"https://img-getpocket.cdn.mozilla.net/\"];\nconst DUMMY_CSS_SELECTOR = \"DUMMY#CSS.SELECTOR\";\n\n/**\n * Validate a CSS declaration. The values are assumed to be normalized by CSSOM.\n */\nexport function isAllowedCSS(property, value) {\n // Bug 1454823: INTERNAL properties, e.g., -moz-context-properties, are\n // exposed but their values aren't resulting in getting nothing. Fortunately,\n // we don't care about validating the values of the current set of properties.\n if (value === undefined) {\n return true;\n }\n\n // Make sure all urls are of the allowed protocols/prefixes\n const urls = value.match(/url\\(\"[^\"]+\"\\)/g);\n return !urls || urls.every(url => ALLOWED_CSS_URL_PREFIXES.some(prefix =>\n url.slice(5).startsWith(prefix)));\n}\n\nexport class _DiscoveryStreamBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onStyleMount = this.onStyleMount.bind(this);\n }\n\n /**\n * Extracts the recommendation rows from component for the impression ping.\n * If `component.data.recommendations` is unset, returns an empty array.\n *\n * The row size is determined by the following rules:\n * - Use `component.properties.items` from the endpoint if it's specified\n * - Otherwise, use the length of recommendation array\n * - The row size is capped by the argument `limit`, which could be one of\n * [`MAX_ROW_HERO`, `MAX_ROWS_LIST`, `MAX_ROWS_CARDGRID`]\n */\n extractRows(component, limit) {\n if (component.data && component.data.recommendations) {\n const items = Math.min(limit, component.properties.items || component.data.recommendations.length);\n return component.data.recommendations.slice(0, items);\n }\n\n return [];\n }\n\n onStyleMount(style) {\n // Unmounting style gets rid of old styles, so nothing else to do\n if (!style) {\n return;\n }\n\n const {sheet} = style;\n const styles = JSON.parse(style.dataset.styles);\n styles.forEach((row, rowIndex) => {\n row.forEach((component, componentIndex) => {\n // Nothing to do without optional styles overrides\n if (!component) {\n return;\n }\n\n Object.entries(component).forEach(([selectors, declarations]) => {\n // Start with a dummy rule to validate declarations and selectors\n sheet.insertRule(`${DUMMY_CSS_SELECTOR} {}`);\n const [rule] = sheet.cssRules;\n\n // Validate declarations and remove any offenders. CSSOM silently\n // discards invalid entries, so here we apply extra restrictions.\n rule.style = declarations;\n [...rule.style].forEach(property => {\n const value = rule.style[property];\n if (!isAllowedCSS(property, value)) {\n console.error(`Bad CSS declaration ${property}: ${value}`); // eslint-disable-line no-console\n rule.style.removeProperty(property);\n }\n });\n\n // Set the actual desired selectors scoped to the component\n const prefix = `.ds-layout > .ds-column:nth-child(${rowIndex + 1}) .ds-column-grid > :nth-child(${componentIndex + 1})`;\n // NB: Splitting on \",\" doesn't work with strings with commas, but\n // we're okay with not supporting those selectors\n rule.selectorText = selectors.split(\",\").map(selector => prefix +\n // Assume :pseudo-classes are for component instead of descendant\n (selector[0] === \":\" ? \"\" : \" \") + selector).join(\",\");\n\n // CSSOM silently ignores bad selectors, so we'll be noisy instead\n if (rule.selectorText === DUMMY_CSS_SELECTOR) {\n console.error(`Bad CSS selector ${selectors}`); // eslint-disable-line no-console\n }\n });\n });\n });\n }\n\n renderComponent(component, embedWidth) {\n let rows;\n const {spocs} = this.props.DiscoveryStream;\n\n // TODO: Can we make this a bit better visually while it loads?\n // If this component expects spocs,\n // wait until spocs are loaded before attempting to use it.\n if (component.spocs && !spocs.loaded) {\n return null;\n }\n\n switch (component.type) {\n case \"TopSites\":\n return ( );\n case \"Message\":\n return (\n \n );\n case \"SectionTitle\":\n return (\n \n );\n case \"Navigation\":\n return (\n \n );\n case \"CardGrid\":\n rows = this.extractRows(component, MAX_ROWS_CARDGRID);\n return (\n \n \n \n );\n case \"Hero\":\n rows = this.extractRows(component, MAX_ROWS_HERO);\n return (\n \n = 9 ? `cards` : `list`}\n feed={component.feed}\n title={component.header && component.header.title}\n data={component.data}\n border={component.properties.border}\n type={component.type}\n dispatch={this.props.dispatch}\n items={component.properties.items} />\n \n );\n case \"HorizontalRule\":\n return ( );\n case \"List\":\n rows = this.extractRows(component, MAX_ROWS_LIST);\n return (\n \n
\n \n );\n default:\n return ({component.type}
);\n }\n }\n\n renderStyles(styles) {\n // Use json string as both the key and styles to render so React knows when\n // to unmount and mount a new instance for new styles.\n const json = JSON.stringify(styles);\n return ();\n }\n\n render() {\n const {layoutRender} = this.props.DiscoveryStream;\n const styles = [];\n return (\n \n {layoutRender.map((row, rowIndex) => (\n
\n
\n {row.components.map((component, componentIndex) => {\n styles[rowIndex] = [...styles[rowIndex] || [], component.styles];\n return (
\n {this.renderComponent(component, row.width)}\n
);\n })}\n
\n
\n ))}\n {this.renderStyles(styles)}\n
\n );\n }\n}\n\nfunction transform(state) {\n return {\n DiscoveryStream: {\n ...state.DiscoveryStream,\n layoutRender: selectLayoutRender(state),\n },\n };\n}\n\nexport const DiscoveryStreamBase = connect(transform)(_DiscoveryStreamBase);\n","import React from \"react\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n const style = {};\n\n // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n for (const tag of ALLOWED_STYLE_TAGS) {\n if (typeof props[tag] !== \"undefined\") {\n style[tag] = props[tag];\n }\n }\n // remove border if bg is set to something custom\n if (style.backgroundColor) {\n style.border = \"0\";\n }\n\n return (\n {props.children}\n );\n};\n","// lifted from https://gist.github.com/kitze/23d82bb9eb0baabfd03a6a720b1d637f\nexport const ConditionalWrapper = ({condition, wrap, children}) => (condition ? wrap(children) : children);\n","import React from \"react\";\nimport schema from \"../../templates/SimpleSnippet/SimpleSnippet.schema.json\";\n\nexport class SnippetBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onBlockClicked = this.onBlockClicked.bind(this);\n this.onDismissClicked = this.onDismissClicked.bind(this);\n }\n\n onBlockClicked() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n }\n\n this.props.onBlock();\n }\n\n onDismissClicked() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"DISMISS\", id: this.props.UISurface});\n }\n\n this.props.onDismiss();\n }\n\n renderDismissButton() {\n if (this.props.footerDismiss) {\n return (\n \n
\n \n {this.props.content.scene2_dismiss_button_text}\n \n
\n
\n );\n }\n\n const defaultTitle = schema.properties.block_button_text.default;\n return (\n \n );\n }\n\n render() {\n const {props} = this;\n\n const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n return (\n
\n {props.children}\n
\n {this.renderDismissButton()}\n
);\n }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport {ConditionalWrapper} from \"../../components/ConditionalWrapper/ConditionalWrapper\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n constructor(props) {\n super(props);\n this.onButtonClick = this.onButtonClick.bind(this);\n }\n\n onButtonClick() {\n if (this.props.provider !== \"preview\") {\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n }\n const {button_url} = this.props.content;\n // If button_url is defined handle it as OPEN_URL action\n const type = this.props.content.button_action || (button_url && \"OPEN_URL\");\n this.props.onAction({\n type,\n data: {args: this.props.content.button_action_args || button_url},\n });\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock();\n }\n }\n\n _shouldRenderButton() {\n return this.props.content.button_action || this.props.onButtonClick || this.props.content.button_url;\n }\n\n renderTitle() {\n const {title} = this.props.content;\n return title ?\n {this.renderTitleIcon()} {title} :\n null;\n }\n\n renderTitleIcon() {\n const titleIcon = safeURI(this.props.content.title_icon);\n return titleIcon ? : null;\n }\n\n renderButton() {\n const {props} = this;\n if (!this._shouldRenderButton()) {\n return null;\n }\n\n return (\n {props.content.button_label}\n );\n }\n\n renderText() {\n const {props} = this;\n return ( );\n }\n\n wrapSectionHeader(url) {\n return function(children) {\n return {children} ;\n };\n }\n\n wrapSnippetContent(children) {\n return {children}
;\n }\n\n renderSectionHeader() {\n const {props} = this;\n\n // an icon and text must be specified to render the section header\n if (props.content.section_title_icon && props.content.section_title_text) {\n const sectionTitleIcon = safeURI(props.content.section_title_icon);\n const sectionTitleURL = props.content.section_title_url;\n\n return (\n \n
\n \n \n {props.content.section_title_text} \n \n \n \n );\n }\n\n return null;\n }\n\n render() {\n const {props} = this;\n const sectionHeader = this.renderSectionHeader();\n let className = \"SimpleSnippet\";\n\n if (props.className) {\n className += ` ${props.className}`;\n }\n if (props.content.tall) {\n className += \" tall\";\n }\n if (sectionHeader) {\n className += \" has-section-header\";\n }\n\n return (\n {sectionHeader}\n \n \n \n {this.renderTitle()}
{this.renderText()}
\n {this.props.extraContent}\n
\n {{this.renderButton()}
}\n \n );\n }\n}\n","import React from \"react\";\nimport schema from \"./EOYSnippet.schema.json\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\n\nclass EOYSnippetBase extends React.PureComponent {\n constructor(props) {\n super(props);\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n /**\n * setFrequencyValue - `frequency` form parameter value should be `monthly`\n * if `monthly-checkbox` is selected or `single` otherwise\n */\n setFrequencyValue() {\n const frequencyCheckbox = this.refs.form.querySelector(\"#monthly-checkbox\");\n if (frequencyCheckbox.checked) {\n this.refs.form.querySelector(\"[name='frequency']\").value = \"monthly\";\n }\n }\n\n handleSubmit(event) {\n event.preventDefault();\n this.setFrequencyValue();\n this.refs.form.submit();\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock();\n }\n }\n\n renderDonations() {\n const fieldNames = [\"first\", \"second\", \"third\", \"fourth\"];\n const numberFormat = new Intl.NumberFormat(this.props.content.locale || navigator.language, {\n style: \"currency\",\n currency: this.props.content.currency_code,\n minimumFractionDigits: 0,\n });\n // Default to `second` button\n const {selected_button} = this.props.content;\n const btnStyle = {\n color: this.props.content.button_color,\n backgroundColor: this.props.content.button_background_color,\n };\n const donationURLParams = [];\n const paramsStartIndex = this.props.content.donation_form_url.indexOf(\"?\");\n for (const entry of new URLSearchParams(this.props.content.donation_form_url.slice(paramsStartIndex)).entries()) {\n donationURLParams.push(entry);\n }\n\n return ();\n }\n\n render() {\n const textStyle = {\n color: this.props.content.text_color,\n backgroundColor: this.props.content.background_color,\n };\n const customElement = ;\n return ( );\n }\n}\n\nexport const EOYSnippet = props => {\n const extendedContent = {\n monthly_checkbox_label_text: schema.properties.monthly_checkbox_label_text.default,\n locale: schema.properties.locale.default,\n currency_code: schema.properties.currency_code.default,\n selected_button: schema.properties.selected_button.default,\n ...props.content,\n };\n\n return ( );\n};\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {RichText} from \"../../components/RichText/RichText\";\nimport {SimpleSnippet} from \"../SimpleSnippet/SimpleSnippet\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nexport class SubmitFormSnippet extends React.PureComponent {\n constructor(props) {\n super(props);\n this.expandSnippet = this.expandSnippet.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleSubmitAttempt = this.handleSubmitAttempt.bind(this);\n this.onInputChange = this.onInputChange.bind(this);\n this.state = {\n expanded: false,\n submitAttempted: false,\n signupSubmitted: false,\n signupSuccess: false,\n disableForm: false,\n };\n }\n\n handleSubmitAttempt() {\n if (!this.state.submitAttempted) {\n this.setState({submitAttempted: true});\n }\n }\n\n async handleSubmit(event) {\n let json;\n\n if (this.state.disableForm) {\n return;\n }\n\n event.preventDefault();\n this.setState({disableForm: true});\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"conversion-subscribe-activation\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n\n if (this.props.form_method.toUpperCase() === \"GET\") {\n this.props.onBlock({preventDismiss: true});\n this.refs.form.submit();\n return;\n }\n\n const {url, formData} = this.props.processFormData ?\n this.props.processFormData(this.refs.mainInput, this.props) :\n {url: this.refs.form.action, formData: new FormData(this.refs.form)};\n\n try {\n const fetchRequest = new Request(url, {body: formData, method: \"POST\", credentials: \"omit\"});\n const response = await fetch(fetchRequest);\n json = await response.json();\n } catch (err) {\n console.log(err); // eslint-disable-line no-console\n }\n\n if (json && json.status === \"ok\") {\n this.setState({signupSuccess: true, signupSubmitted: true});\n if (!this.props.content.do_not_autoblock) {\n this.props.onBlock({preventDismiss: true});\n }\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-success\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n } else {\n console.error(\"There was a problem submitting the form\", json || \"[No JSON response]\"); // eslint-disable-line no-console\n this.setState({signupSuccess: false, signupSubmitted: true});\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"subscribe-error\", id: \"NEWTAB_FOOTER_BAR_CONTENT\"});\n }\n\n this.setState({disableForm: false});\n }\n\n expandSnippet() {\n this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", value: \"scene1-button-learn-more\", id: this.props.UISurface});\n\n this.setState({\n expanded: true,\n signupSuccess: false,\n signupSubmitted: false,\n });\n }\n\n renderHiddenFormInputs() {\n const {hidden_inputs} = this.props.content;\n\n if (!hidden_inputs) {\n return null;\n }\n\n return Object.keys(hidden_inputs).map((key, idx) => );\n }\n\n renderDisclaimer() {\n const {content} = this.props;\n if (!content.scene2_disclaimer_html) {\n return null;\n }\n return (\n \n
);\n }\n\n renderFormPrivacyNotice() {\n const {content} = this.props;\n if (!content.scene2_privacy_html) {\n return null;\n }\n return (\n \n \n \n \n
);\n }\n\n renderSignupSubmitted() {\n const {content} = this.props;\n const isSuccess = this.state.signupSuccess;\n const successTitle = isSuccess && content.success_title;\n const bodyText = isSuccess ? {success_text: content.success_text} : {error_text: content.error_text};\n const retryButtonText = content.scene1_button_label;\n return (\n {successTitle ?
{successTitle} : null}\n
\n \n {isSuccess ? null : {retryButtonText} }\n
\n
);\n }\n\n onInputChange(event) {\n if (!this.props.validateInput) {\n return;\n }\n const hasError = this.props.validateInput(event.target.value, this.props.content);\n event.target.setCustomValidity(hasError);\n }\n\n renderInput() {\n const placholder = this.props.content.scene2_email_placeholder_text || this.props.content.scene2_input_placeholder;\n return ( );\n }\n\n renderSignupView() {\n const {content} = this.props;\n const containerClass = `SubmitFormSnippet ${this.props.className}`;\n return (\n {content.scene2_icon ? : null}\n \n
\n {content.scene2_title &&
{content.scene2_title} }\n {\" \"}\n {content.scene2_text &&
}\n \n
\n \n );\n }\n\n getFirstSceneContent() {\n return Object.keys(this.props.content).filter(key => key.includes(\"scene1\")).reduce((acc, key) => {\n acc[key.substr(7)] = this.props.content[key];\n return acc;\n }, {});\n }\n\n render() {\n const content = {...this.props.content, ...this.getFirstSceneContent()};\n\n if (this.state.signupSubmitted) {\n return this.renderSignupSubmitted();\n }\n if (this.state.expanded) {\n return this.renderSignupView();\n }\n return ;\n }\n}\n","import React from \"react\";\nimport schema from \"./FXASignupSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const FXASignupSnippet = props => {\n const userAgent = window.navigator.userAgent.match(/Firefox\\/([0-9]+)\\./);\n const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;\n const extendedContent = {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_email_placeholder_text: schema.properties.scene2_email_placeholder_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n ...props.content,\n hidden_inputs: {\n action: \"email\",\n context: \"fx_desktop_v3\",\n entrypoint: \"snippets\",\n service: \"sync\",\n utm_source: \"snippet\",\n utm_content: firefox_version,\n utm_campaign: props.content.utm_campaign,\n utm_term: props.content.utm_term,\n ...props.content.hidden_inputs,\n },\n };\n\n return ( );\n};\n","import React from \"react\";\nimport schema from \"./NewsletterSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nexport const NewsletterSnippet = props => {\n const extendedContent = {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_email_placeholder_text: schema.properties.scene2_email_placeholder_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n scene2_newsletter: schema.properties.scene2_newsletter.default,\n ...props.content,\n hidden_inputs: {\n newsletters: props.content.scene2_newsletter || schema.properties.scene2_newsletter.default,\n fmt: schema.properties.hidden_inputs.properties.fmt.default,\n lang: props.content.locale || schema.properties.locale.default,\n source_url: `https://snippets.mozilla.com/show/${props.id}`,\n ...props.content.hidden_inputs,\n },\n };\n\n return ( );\n};\n","/**\n * Checks if a given string is an email or phone number or neither\n * @param {string} val The user input\n * @param {ASRMessageContent} content .content property on ASR message\n * @returns {\"email\"|\"phone\"|\"\"} The type of the input\n */\nexport function isEmailOrPhoneNumber(val, content) {\n const {locale} = content;\n // http://emailregex.com/\n const email_re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const check_email = email_re.test(val);\n let check_phone; // depends on locale\n switch (locale) {\n case \"en-US\":\n case \"en-CA\":\n // allow 10-11 digits in case user wants to enter country code\n check_phone = val.length >= 10 && val.length <= 11 && !isNaN(val);\n break;\n case \"de\":\n // allow between 2 and 12 digits for german phone numbers\n check_phone = val.length >= 2 && val.length <= 12 && !isNaN(val);\n break;\n // this case should never be hit, but good to have a fallback just in case\n default:\n check_phone = !isNaN(val);\n break;\n }\n if (check_email) {\n return \"email\";\n } else if (check_phone) {\n return \"phone\";\n }\n return \"\";\n}\n","import {isEmailOrPhoneNumber} from \"./isEmailOrPhoneNumber\";\nimport React from \"react\";\nimport schema from \"./SendToDeviceSnippet.schema.json\";\nimport {SubmitFormSnippet} from \"../SubmitFormSnippet/SubmitFormSnippet.jsx\";\n\nfunction validateInput(value, content) {\n const type = isEmailOrPhoneNumber(value, content);\n return type ? \"\" : \"Must be an email or a phone number.\";\n}\n\nfunction processFormData(input, message) {\n const {content} = message;\n const type = content.include_sms ? isEmailOrPhoneNumber(input.value, content) : \"email\";\n const formData = new FormData();\n let url;\n if (type === \"phone\") {\n url = \"https://basket.mozilla.org/news/subscribe_sms/\";\n formData.append(\"mobile_number\", input.value);\n formData.append(\"msg_name\", content.message_id_sms);\n formData.append(\"country\", content.country);\n } else if (type === \"email\") {\n url = \"https://basket.mozilla.org/news/subscribe/\";\n formData.append(\"email\", input.value);\n formData.append(\"newsletters\", content.message_id_email);\n formData.append(\"source_url\", encodeURIComponent(`https://snippets.mozilla.com/show/${message.id}`));\n }\n formData.append(\"lang\", content.locale);\n return {formData, url};\n}\n\nfunction addDefaultValues(props) {\n return {\n ...props,\n content: {\n scene1_button_label: schema.properties.scene1_button_label.default,\n scene2_dismiss_button_text: schema.properties.scene2_dismiss_button_text.default,\n scene2_button_label: schema.properties.scene2_button_label.default,\n scene2_input_placeholder: schema.properties.scene2_input_placeholder.default,\n locale: schema.properties.locale.default,\n country: schema.properties.country.default,\n message_id_email: \"\",\n include_sms: schema.properties.include_sms.default,\n ...props.content,\n },\n };\n}\n\nexport const SendToDeviceSnippet = props => {\n const propsWithDefaults = addDefaultValues(props);\n\n return ( );\n};\n","import {EOYSnippet} from \"./EOYSnippet/EOYSnippet\";\nimport {FXASignupSnippet} from \"./FXASignupSnippet/FXASignupSnippet\";\nimport {NewsletterSnippet} from \"./NewsletterSnippet/NewsletterSnippet\";\nimport {SendToDeviceSnippet} from \"./SendToDeviceSnippet/SendToDeviceSnippet\";\nimport {SimpleSnippet} from \"./SimpleSnippet/SimpleSnippet\";\n\n// Key names matching schema name of templates\nexport const SnippetsTemplates = {\n simple_snippet: SimpleSnippet,\n newsletter_snippet: NewsletterSnippet,\n fxa_signup_snippet: FXASignupSnippet,\n send_to_device_snippet: SendToDeviceSnippet,\n eoy_snippet: EOYSnippet,\n};\n","/* eslint no-magic-numbers: [0] */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n /**\n * Parse FTL code into entries formattable by the MessageContext.\n *\n * Given a string of FTL syntax, return a map of entries that can be passed\n * to MessageContext.format and a list of errors encountered during parsing.\n *\n * @param {String} string\n * @returns {Array}\n */\n getResource(string) {\n this._source = string;\n this._index = 0;\n this._length = string.length;\n this.entries = {};\n\n const errors = [];\n\n this.skipWS();\n while (this._index < this._length) {\n try {\n this.getEntry();\n } catch (e) {\n if (e instanceof SyntaxError) {\n errors.push(e);\n\n this.skipToNextEntryStart();\n } else {\n throw e;\n }\n }\n this.skipWS();\n }\n\n return [this.entries, errors];\n }\n\n /**\n * Parse the source string from the current index as an FTL entry\n * and add it to object's entries property.\n *\n * @private\n */\n getEntry() {\n // The index here should either be at the beginning of the file\n // or right after new line.\n if (this._index !== 0 &&\n this._source[this._index - 1] !== \"\\n\") {\n throw this.error(`Expected an entry to start\n at the beginning of the file or on a new line.`);\n }\n\n const ch = this._source[this._index];\n\n // We don't care about comments or sections at runtime\n if (ch === \"/\" ||\n (ch === \"#\" &&\n [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n this.skipComment();\n return;\n }\n\n if (ch === \"[\") {\n this.skipSection();\n return;\n }\n\n this.getMessage();\n }\n\n /**\n * Skip the section entry from the current index.\n *\n * @private\n */\n skipSection() {\n this._index += 1;\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[[\" to open a section');\n }\n\n this._index += 1;\n\n this.skipInlineWS();\n this.getVariantName();\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"]\" ||\n this._source[this._index + 1] !== \"]\") {\n throw this.error('Expected \"]]\" to close a section');\n }\n\n this._index += 2;\n }\n\n /**\n * Parse the source string from the current index as an FTL message\n * and add it to the entries property on the Parser.\n *\n * @private\n */\n getMessage() {\n const id = this.getEntryIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"=\") {\n this._index++;\n }\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (id.startsWith(\"-\") && val === null) {\n throw this.error(\"Expected term to have a value\");\n }\n\n let attrs = null;\n\n if (this._source[this._index] === \" \") {\n const lineStart = this._index;\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n this._index = lineStart;\n attrs = this.getAttributes();\n }\n }\n\n if (attrs === null && typeof val === \"string\") {\n this.entries[id] = val;\n } else {\n if (val === null && attrs === null) {\n throw this.error(\"Expected message to have a value or attributes\");\n }\n\n this.entries[id] = {};\n\n if (val !== null) {\n this.entries[id].val = val;\n }\n\n if (attrs !== null) {\n this.entries[id].attrs = attrs;\n }\n }\n }\n\n /**\n * Skip whitespace.\n *\n * @private\n */\n skipWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip inline whitespace (space and \\t).\n *\n * @private\n */\n skipInlineWS() {\n let ch = this._source[this._index];\n while (ch === \" \" || ch === \"\\t\") {\n ch = this._source[++this._index];\n }\n }\n\n /**\n * Skip blank lines.\n *\n * @private\n */\n skipBlankLines() {\n while (true) {\n const ptr = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \"\\n\") {\n this._index += 1;\n } else {\n this._index = ptr;\n break;\n }\n }\n }\n\n /**\n * Get identifier using the provided regex.\n *\n * By default this will get identifiers of public messages, attributes and\n * external arguments (without the $).\n *\n * @returns {String}\n * @private\n */\n getIdentifier(re = identifierRe) {\n re.lastIndex = this._index;\n const result = re.exec(this._source);\n\n if (result === null) {\n this._index += 1;\n throw this.error(`Expected an identifier [${re.toString()}]`);\n }\n\n this._index = re.lastIndex;\n return result[0];\n }\n\n /**\n * Get identifier of a Message or a Term (staring with a dash).\n *\n * @returns {String}\n * @private\n */\n getEntryIdentifier() {\n return this.getIdentifier(entryIdentifierRe);\n }\n\n /**\n * Get Variant name.\n *\n * @returns {Object}\n * @private\n */\n getVariantName() {\n let name = \"\";\n\n const start = this._index;\n let cc = this._source.charCodeAt(this._index);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 95 || cc === 32) { // _ \n cc = this._source.charCodeAt(++this._index);\n } else {\n throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n }\n\n while ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n (cc >= 48 && cc <= 57) || // 0-9\n cc === 95 || cc === 45 || cc === 32) { // _- \n cc = this._source.charCodeAt(++this._index);\n }\n\n // If we encountered the end of name, we want to test if the last\n // collected character is a space.\n // If it is, we will backtrack to the last non-space character because\n // the keyword cannot end with a space character.\n while (this._source.charCodeAt(this._index - 1) === 32) {\n this._index--;\n }\n\n name += this._source.slice(start, this._index);\n\n return { type: \"varname\", name };\n }\n\n /**\n * Get simple string argument enclosed in `\"`.\n *\n * @returns {String}\n * @private\n */\n getString() {\n const start = this._index + 1;\n\n while (++this._index < this._length) {\n const ch = this._source[this._index];\n\n if (ch === '\"') {\n break;\n }\n\n if (ch === \"\\n\") {\n throw this.error(\"Unterminated string expression\");\n }\n }\n\n return this._source.substring(start, this._index++);\n }\n\n /**\n * Parses a Message pattern.\n * Message Pattern may be a simple string or an array of strings\n * and placeable expressions.\n *\n * @returns {String|Array}\n * @private\n */\n getPattern() {\n // We're going to first try to see if the pattern is simple.\n // If it is we can just look for the end of the line and read the string.\n //\n // Then, if either the line contains a placeable opening `{` or the\n // next line starts an indentation, we switch to complex pattern.\n const start = this._index;\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n eol = this._length;\n }\n\n const firstLineContent = start !== eol ?\n this._source.slice(start, eol) : null;\n\n if (firstLineContent && firstLineContent.includes(\"{\")) {\n return this.getComplexPattern();\n }\n\n this._index = eol + 1;\n\n this.skipBlankLines();\n\n if (this._source[this._index] !== \" \") {\n // No indentation means we're done with this message. Callers should check\n // if the return value here is null. It may be OK for messages, but not OK\n // for terms, attributes and variants.\n return firstLineContent;\n }\n\n const lineStart = this._index;\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \".\") {\n // The pattern is followed by an attribute. Rewind _index to the first\n // column of the current line as expected by getAttributes.\n this._index = lineStart;\n return firstLineContent;\n }\n\n if (firstLineContent) {\n // It's a multiline pattern which started on the same line as the\n // identifier. Reparse the whole pattern to make sure we get all of it.\n this._index = start;\n }\n\n return this.getComplexPattern();\n }\n\n /**\n * Parses a complex Message pattern.\n * This function is called by getPattern when the message is multiline,\n * or contains escape chars or placeables.\n * It does full parsing of complex patterns.\n *\n * @returns {Array}\n * @private\n */\n /* eslint-disable complexity */\n getComplexPattern() {\n let buffer = \"\";\n const content = [];\n let placeables = 0;\n\n let ch = this._source[this._index];\n\n while (this._index < this._length) {\n // This block handles multi-line strings combining strings separated\n // by new line.\n if (ch === \"\\n\") {\n this._index++;\n\n // We want to capture the start and end pointers\n // around blank lines and add them to the buffer\n // but only if the blank lines are in the middle\n // of the string.\n const blankLinesStart = this._index;\n this.skipBlankLines();\n const blankLinesEnd = this._index;\n\n\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] === \"}\" ||\n this._source[this._index] === \"[\" ||\n this._source[this._index] === \"*\" ||\n this._source[this._index] === \".\") {\n this._index = blankLinesEnd;\n break;\n }\n\n buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n if (buffer.length || content.length) {\n buffer += \"\\n\";\n }\n ch = this._source[this._index];\n continue;\n } else if (ch === \"\\\\\") {\n const ch2 = this._source[this._index + 1];\n if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n ch = ch2;\n this._index++;\n }\n } else if (ch === \"{\") {\n // Push the buffer to content array right before placeable\n if (buffer.length) {\n content.push(buffer);\n }\n if (placeables > MAX_PLACEABLES - 1) {\n throw this.error(\n `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n }\n buffer = \"\";\n content.push(this.getPlaceable());\n\n this._index++;\n\n ch = this._source[this._index];\n placeables++;\n continue;\n }\n\n if (ch) {\n buffer += ch;\n }\n this._index++;\n ch = this._source[this._index];\n }\n\n if (content.length === 0) {\n return buffer.length ? buffer : null;\n }\n\n if (buffer.length) {\n content.push(buffer);\n }\n\n return content;\n }\n /* eslint-enable complexity */\n\n /**\n * Parses a single placeable in a Message pattern and returns its\n * expression.\n *\n * @returns {Object}\n * @private\n */\n getPlaceable() {\n const start = ++this._index;\n\n this.skipWS();\n\n if (this._source[this._index] === \"*\" ||\n (this._source[this._index] === \"[\" &&\n this._source[this._index + 1] !== \"]\")) {\n const variants = this.getVariants();\n\n return {\n type: \"sel\",\n exp: null,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n // Rewind the index and only support in-line white-space now.\n this._index = start;\n this.skipInlineWS();\n\n const selector = this.getSelectorExpression();\n\n this.skipWS();\n\n const ch = this._source[this._index];\n\n if (ch === \"}\") {\n if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of private messages cannot be interpolated.\"\n );\n }\n\n return selector;\n }\n\n if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n throw this.error('Expected \"}\" or \"->\"');\n }\n\n if (selector.type === \"ref\") {\n throw this.error(\"Message references cannot be used as selectors.\");\n }\n\n if (selector.type === \"var\") {\n throw this.error(\"Variants cannot be used as selectors.\");\n }\n\n if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n throw this.error(\n \"Attributes of public messages cannot be used as selectors.\"\n );\n }\n\n\n this._index += 2; // ->\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"\\n\") {\n throw this.error(\"Variants should be listed in a new line\");\n }\n\n this.skipWS();\n\n const variants = this.getVariants();\n\n if (variants[0].length === 0) {\n throw this.error(\"Expected members for the select expression\");\n }\n\n return {\n type: \"sel\",\n exp: selector,\n vars: variants[0],\n def: variants[1]\n };\n }\n\n /**\n * Parses a selector expression.\n *\n * @returns {Object}\n * @private\n */\n getSelectorExpression() {\n const literal = this.getLiteral();\n\n if (literal.type !== \"ref\") {\n return literal;\n }\n\n if (this._source[this._index] === \".\") {\n this._index++;\n\n const name = this.getIdentifier();\n this._index++;\n return {\n type: \"attr\",\n id: literal,\n name\n };\n }\n\n if (this._source[this._index] === \"[\") {\n this._index++;\n\n const key = this.getVariantKey();\n this._index++;\n return {\n type: \"var\",\n id: literal,\n key\n };\n }\n\n if (this._source[this._index] === \"(\") {\n this._index++;\n const args = this.getCallArgs();\n\n if (!functionIdentifierRe.test(literal.name)) {\n throw this.error(\"Function names must be all upper-case\");\n }\n\n this._index++;\n\n literal.type = \"fun\";\n\n return {\n type: \"call\",\n fun: literal,\n args\n };\n }\n\n return literal;\n }\n\n /**\n * Parses call arguments for a CallExpression.\n *\n * @returns {Array}\n * @private\n */\n getCallArgs() {\n const args = [];\n\n while (this._index < this._length) {\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n return args;\n }\n\n const exp = this.getSelectorExpression();\n\n // MessageReference in this place may be an entity reference, like:\n // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n if (exp.type !== \"ref\") {\n args.push(exp);\n } else {\n this.skipInlineWS();\n\n if (this._source[this._index] === \":\") {\n this._index++;\n this.skipInlineWS();\n\n const val = this.getSelectorExpression();\n\n // If the expression returned as a value of the argument\n // is not a quote delimited string or number, throw.\n //\n // We don't have to check here if the pattern is quote delimited\n // because that's the only type of string allowed in expressions.\n if (typeof val === \"string\" ||\n Array.isArray(val) ||\n val.type === \"num\") {\n args.push({\n type: \"narg\",\n name: exp.name,\n val\n });\n } else {\n this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n throw this.error(\n \"Expected string in quotes, number.\");\n }\n\n } else {\n args.push(exp);\n }\n }\n\n this.skipInlineWS();\n\n if (this._source[this._index] === \")\") {\n break;\n } else if (this._source[this._index] === \",\") {\n this._index++;\n } else {\n throw this.error('Expected \",\" or \")\"');\n }\n }\n\n return args;\n }\n\n /**\n * Parses an FTL Number.\n *\n * @returns {Object}\n * @private\n */\n getNumber() {\n let num = \"\";\n let cc = this._source.charCodeAt(this._index);\n\n // The number literal may start with negative sign `-`.\n if (cc === 45) {\n num += \"-\";\n cc = this._source.charCodeAt(++this._index);\n }\n\n // next, we expect at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // followed by potentially more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n\n // followed by an optional decimal separator `.`\n if (cc === 46) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n\n // followed by at least one digit\n if (cc < 48 || cc > 57) {\n throw this.error(`Unknown literal \"${num}\"`);\n }\n\n // and optionally more digits\n while (cc >= 48 && cc <= 57) {\n num += this._source[this._index++];\n cc = this._source.charCodeAt(this._index);\n }\n }\n\n return {\n type: \"num\",\n val: num\n };\n }\n\n /**\n * Parses a list of Message attributes.\n *\n * @returns {Object}\n * @private\n */\n getAttributes() {\n const attrs = {};\n\n while (this._index < this._length) {\n if (this._source[this._index] !== \" \") {\n break;\n }\n this.skipInlineWS();\n\n if (this._source[this._index] !== \".\") {\n break;\n }\n this._index++;\n\n const key = this.getIdentifier();\n\n this.skipInlineWS();\n\n if (this._source[this._index] !== \"=\") {\n throw this.error('Expected \"=\"');\n }\n this._index++;\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected attribute to have a value\");\n }\n\n if (typeof val === \"string\") {\n attrs[key] = val;\n } else {\n attrs[key] = {\n val\n };\n }\n\n this.skipBlankLines();\n }\n\n return attrs;\n }\n\n /**\n * Parses a list of Selector variants.\n *\n * @returns {Array}\n * @private\n */\n getVariants() {\n const variants = [];\n let index = 0;\n let defaultIndex;\n\n while (this._index < this._length) {\n const ch = this._source[this._index];\n\n if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n ch !== \"*\") {\n break;\n }\n if (ch === \"*\") {\n this._index++;\n defaultIndex = index;\n }\n\n if (this._source[this._index] !== \"[\") {\n throw this.error('Expected \"[\"');\n }\n\n this._index++;\n\n const key = this.getVariantKey();\n\n this.skipInlineWS();\n\n const val = this.getPattern();\n\n if (val === null) {\n throw this.error(\"Expected variant to have a value\");\n }\n\n variants[index++] = {key, val};\n\n this.skipWS();\n }\n\n return [variants, defaultIndex];\n }\n\n /**\n * Parses a Variant key.\n *\n * @returns {String}\n * @private\n */\n getVariantKey() {\n // VariantKey may be a Keyword or Number\n\n const cc = this._source.charCodeAt(this._index);\n let literal;\n\n if ((cc >= 48 && cc <= 57) || cc === 45) {\n literal = this.getNumber();\n } else {\n literal = this.getVariantName();\n }\n\n if (this._source[this._index] !== \"]\") {\n throw this.error('Expected \"]\"');\n }\n\n this._index++;\n return literal;\n }\n\n /**\n * Parses an FTL literal.\n *\n * @returns {Object}\n * @private\n */\n getLiteral() {\n const cc0 = this._source.charCodeAt(this._index);\n\n if (cc0 === 36) { // $\n this._index++;\n return {\n type: \"ext\",\n name: this.getIdentifier()\n };\n }\n\n const cc1 = cc0 === 45 // -\n // Peek at the next character after the dash.\n ? this._source.charCodeAt(this._index + 1)\n // Or keep using the character at the current index.\n : cc0;\n\n if ((cc1 >= 97 && cc1 <= 122) || // a-z\n (cc1 >= 65 && cc1 <= 90)) { // A-Z\n return {\n type: \"ref\",\n name: this.getEntryIdentifier()\n };\n }\n\n if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n return this.getNumber();\n }\n\n if (cc0 === 34) { // \"\n return this.getString();\n }\n\n throw this.error(\"Expected literal\");\n }\n\n /**\n * Skips an FTL comment.\n *\n * @private\n */\n skipComment() {\n // At runtime, we don't care about comments so we just have\n // to parse them properly and skip their content.\n let eol = this._source.indexOf(\"\\n\", this._index);\n\n while (eol !== -1 &&\n ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n (this._source[eol + 1] === \"#\" &&\n [\" \", \"#\"].includes(this._source[eol + 2])))) {\n this._index = eol + 3;\n\n eol = this._source.indexOf(\"\\n\", this._index);\n\n if (eol === -1) {\n break;\n }\n }\n\n if (eol === -1) {\n this._index = this._length;\n } else {\n this._index = eol + 1;\n }\n }\n\n /**\n * Creates a new SyntaxError object with a given message.\n *\n * @param {String} message\n * @returns {Object}\n * @private\n */\n error(message) {\n return new SyntaxError(message);\n }\n\n /**\n * Skips to the beginning of a next entry after the current position.\n * This is used to mark the boundary of junk entry in case of error,\n * and recover from the returned position.\n *\n * @private\n */\n skipToNextEntryStart() {\n let start = this._index;\n\n while (true) {\n if (start === 0 || this._source[start - 1] === \"\\n\") {\n const cc = this._source.charCodeAt(start);\n\n if ((cc >= 97 && cc <= 122) || // a-z\n (cc >= 65 && cc <= 90) || // A-Z\n cc === 47 || cc === 91) { // /[\n this._index = start;\n return;\n }\n }\n\n start = this._source.indexOf(\"\\n\", start);\n\n if (start === -1) {\n this._index = this._length;\n return;\n }\n start++;\n }\n }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array}\n */\nexport default function parse(string) {\n const parser = new RuntimeParser();\n return parser.getResource(string);\n}\n","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n /**\n * Create an `FluentType` instance.\n *\n * @param {Any} value - JavaScript value to wrap.\n * @param {Object} opts - Configuration.\n * @returns {FluentType}\n */\n constructor(value, opts) {\n this.value = value;\n this.opts = opts;\n }\n\n /**\n * Unwrap the raw value stored by this `FluentType`.\n *\n * @returns {Any}\n */\n valueOf() {\n return this.value;\n }\n\n /**\n * Format this instance of `FluentType` to a string.\n *\n * Formatted values are suitable for use outside of the `MessageContext`.\n * This method can use `Intl` formatters memoized by the `MessageContext`\n * instance passed as an argument.\n *\n * @param {MessageContext} [ctx]\n * @returns {string}\n */\n toString() {\n throw new Error(\"Subclasses of FluentType must implement toString.\");\n }\n}\n\nexport class FluentNone extends FluentType {\n toString() {\n return this.value || \"???\";\n }\n}\n\nexport class FluentNumber extends FluentType {\n constructor(value, opts) {\n super(parseFloat(value), opts);\n }\n\n toString(ctx) {\n try {\n const nf = ctx._memoizeIntlObject(\n Intl.NumberFormat, this.opts\n );\n return nf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentNumber) {\n return this.value === other.value;\n }\n return false;\n }\n}\n\nexport class FluentDateTime extends FluentType {\n constructor(value, opts) {\n super(new Date(value), opts);\n }\n\n toString(ctx) {\n try {\n const dtf = ctx._memoizeIntlObject(\n Intl.DateTimeFormat, this.opts\n );\n return dtf.format(this.value);\n } catch (e) {\n // XXX Report the error.\n return this.value;\n }\n }\n}\n\nexport class FluentSymbol extends FluentType {\n toString() {\n return this.value;\n }\n\n /**\n * Compare the object with another instance of a FluentType.\n *\n * @param {MessageContext} ctx\n * @param {FluentType} other\n * @returns {bool}\n */\n match(ctx, other) {\n if (other instanceof FluentSymbol) {\n return this.value === other.value;\n } else if (typeof other === \"string\") {\n return this.value === other;\n } else if (other instanceof FluentNumber) {\n const pr = ctx._memoizeIntlObject(\n Intl.PluralRules, other.opts\n );\n return this.value === pr.select(other.value);\n }\n return false;\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`. Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n \"NUMBER\": ([arg], opts) =>\n new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n \"DATETIME\": ([arg], opts) =>\n new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n const unwrapped = {};\n for (const [name, opt] of Object.entries(opts)) {\n unwrapped[name] = opt.valueOf();\n }\n return unwrapped;\n}\n","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language. See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions. Consider:\n *\n * brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`. If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message. Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n * * {MessageContext} ctx\n * context for which the given resolution is happening\n * * {Object} args\n * list of developer provided arguments that can be used\n * * {Array} errors\n * list of errors collected while resolving\n * * {WeakSet} dirty\n * Set of patterns already encountered during this resolution.\n * This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} members\n * Hash map of variants from which the default value is to be selected.\n * @param {Number} def\n * The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n if (members[def]) {\n return members[def];\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No default\"));\n return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} id\n * The identifier of the message to be resolved.\n * @param {String} id.name\n * The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n const { ctx, errors } = env;\n const message = name.startsWith(\"-\")\n ? ctx._terms.get(name)\n : ctx._messages.get(name);\n\n if (!message) {\n const err = name.startsWith(\"-\")\n ? new ReferenceError(`Unknown term: ${name}`)\n : new ReferenceError(`Unknown message: ${name}`);\n errors.push(err);\n return new FluentNone(name);\n }\n\n return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.id\n * An Identifier of a message for which the variant is resolved.\n * @param {Object} expr.id.name\n * Name a message for which the variant is resolved.\n * @param {Object} expr.key\n * Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n const { ctx, errors } = env;\n const keyword = Type(env, key);\n\n function isVariantList(node) {\n return Array.isArray(node) &&\n node[0].type === \"sel\" &&\n node[0].exp === null;\n }\n\n if (isVariantList(message.val)) {\n // Match the specified key against keys of each variant, in order.\n for (const variant of message.val[0].vars) {\n const variantKey = Type(env, variant.key);\n if (keyword.match(ctx, variantKey)) {\n return variant;\n }\n }\n }\n\n errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.id\n * An ID of a message for which the attribute is resolved.\n * @param {String} expr.name\n * Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n const message = MessageReference(env, id);\n if (message instanceof FluentNone) {\n return message;\n }\n\n if (message.attrs) {\n // Match the specified name against keys of each attribute.\n for (const attrName in message.attrs) {\n if (name === attrName) {\n return message.attrs[name];\n }\n }\n }\n\n const { errors } = env;\n errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.exp\n * Selector expression\n * @param {Array} expr.vars\n * List of variants for the select expression.\n * @param {Number} expr.def\n * Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n if (exp === null) {\n return DefaultMember(env, vars, def);\n }\n\n const selector = Type(env, exp);\n if (selector instanceof FluentNone) {\n return DefaultMember(env, vars, def);\n }\n\n // Match the selector against keys of each variant, in order.\n for (const variant of vars) {\n const key = Type(env, variant.key);\n const keyCanMatch =\n key instanceof FluentNumber || key instanceof FluentSymbol;\n\n if (!keyCanMatch) {\n continue;\n }\n\n const { ctx } = env;\n\n if (key.match(ctx, selector)) {\n return variant;\n }\n }\n\n return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case. Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n // A fast-path for strings which are the most common case, and for\n // `FluentNone` which doesn't require any additional logic.\n if (typeof expr === \"string\" || expr instanceof FluentNone) {\n return expr;\n }\n\n // The Runtime AST (Entries) encodes patterns (complex strings with\n // placeables) as Arrays.\n if (Array.isArray(expr)) {\n return Pattern(env, expr);\n }\n\n\n switch (expr.type) {\n case \"varname\":\n return new FluentSymbol(expr.name);\n case \"num\":\n return new FluentNumber(expr.val);\n case \"ext\":\n return ExternalArgument(env, expr);\n case \"fun\":\n return FunctionReference(env, expr);\n case \"call\":\n return CallExpression(env, expr);\n case \"ref\": {\n const message = MessageReference(env, expr);\n return Type(env, message);\n }\n case \"attr\": {\n const attr = AttributeExpression(env, expr);\n return Type(env, attr);\n }\n case \"var\": {\n const variant = VariantExpression(env, expr);\n return Type(env, variant);\n }\n case \"sel\": {\n const member = SelectExpression(env, expr);\n return Type(env, member);\n }\n case undefined: {\n // If it's a node with a value, resolve the value.\n if (expr.val !== null && expr.val !== undefined) {\n return Type(env, expr.val);\n }\n\n const { errors } = env;\n errors.push(new RangeError(\"No value\"));\n return new FluentNone();\n }\n default:\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n const { args, errors } = env;\n\n if (!args || !args.hasOwnProperty(name)) {\n errors.push(new ReferenceError(`Unknown external: ${name}`));\n return new FluentNone(name);\n }\n\n const arg = args[name];\n\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (arg instanceof Date) {\n return new FluentDateTime(arg);\n }\n default:\n errors.push(\n new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n );\n return new FluentNone(name);\n }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {String} expr.name\n * Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `MessageContext` constructor.\n const { ctx: { _functions }, errors } = env;\n const func = _functions[name] || builtins[name];\n\n if (!func) {\n errors.push(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n\n if (typeof func !== \"function\") {\n errors.push(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n\n return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Object} expr\n * An expression to be resolved.\n * @param {Object} expr.fun\n * FTL Function object.\n * @param {Array} expr.args\n * FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n const callee = FunctionReference(env, fun);\n\n if (callee instanceof FluentNone) {\n return callee;\n }\n\n const posargs = [];\n const keyargs = {};\n\n for (const arg of args) {\n if (arg.type === \"narg\") {\n keyargs[arg.name] = Type(env, arg.val);\n } else {\n posargs.push(Type(env, arg));\n }\n }\n\n try {\n return callee(posargs, keyargs);\n } catch (e) {\n // XXX Report errors.\n return new FluentNone();\n }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param {Object} env\n * Resolver environment object.\n * @param {Array} ptn\n * Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n const { ctx, dirty, errors } = env;\n\n if (dirty.has(ptn)) {\n errors.push(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n\n // Tag the pattern as dirty for the purpose of the current resolution.\n dirty.add(ptn);\n const result = [];\n\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(elem);\n continue;\n }\n\n const part = Type(env, elem).toString(ctx);\n\n if (useIsolating) {\n result.push(FSI);\n }\n\n if (part.length > MAX_PLACEABLE_LENGTH) {\n errors.push(\n new RangeError(\n \"Too many characters in placeable \" +\n `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n )\n );\n result.push(part.slice(MAX_PLACEABLE_LENGTH));\n } else {\n result.push(part);\n }\n\n if (useIsolating) {\n result.push(PDI);\n }\n }\n\n dirty.delete(ptn);\n return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param {MessageContext} ctx\n * A MessageContext instance which will be used to resolve the\n * contextual information of the message.\n * @param {Object} args\n * List of arguments provided by the developer which can be accessed\n * from the message.\n * @param {Object} message\n * An object with the Message to be resolved.\n * @param {Array} errors\n * An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n const env = {\n ctx, args, errors, dirty: new WeakSet()\n };\n return Type(env, message).toString(ctx);\n}\n","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations. They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context. Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language. See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n /**\n * Create an instance of `MessageContext`.\n *\n * The `locales` argument is used to instantiate `Intl` formatters used by\n * translations. The `options` object can be used to configure the context.\n *\n * Examples:\n *\n * const ctx = new MessageContext(locales);\n *\n * const ctx = new MessageContext(locales, { useIsolating: false });\n *\n * const ctx = new MessageContext(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n *\n * Available options:\n *\n * - `functions` - an object of additional functions available to\n * translations as builtins.\n *\n * - `useIsolating` - boolean specifying whether to use Unicode isolation\n * marks (FSI, PDI) for bidi interpolations.\n *\n * @param {string|Array} locales - Locale or locales of the context\n * @param {Object} [options]\n * @returns {MessageContext}\n */\n constructor(locales, { functions = {}, useIsolating = true } = {}) {\n this.locales = Array.isArray(locales) ? locales : [locales];\n\n this._terms = new Map();\n this._messages = new Map();\n this._functions = functions;\n this._useIsolating = useIsolating;\n this._intls = new WeakMap();\n }\n\n /*\n * Return an iterator over public `[id, message]` pairs.\n *\n * @returns {Iterator}\n */\n get messages() {\n return this._messages[Symbol.iterator]();\n }\n\n /*\n * Check if a message is present in the context.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {bool}\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n\n /*\n * Return the internal representation of a message.\n *\n * The internal representation should only be used as an argument to\n * `MessageContext.format`.\n *\n * @param {string} id - The identifier of the message to check.\n * @returns {Any}\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n\n /**\n * Add a translation resource to the context.\n *\n * The translation resource must use the Fluent syntax. It will be parsed by\n * the context and each translation unit (message) will be available in the\n * context by its identifier.\n *\n * ctx.addMessages('foo = Foo');\n * ctx.getMessage('foo');\n *\n * // Returns a raw representation of the 'foo' message.\n *\n * Parsed entities should be formatted with the `format` method in case they\n * contain logic (references, select expressions etc.).\n *\n * @param {string} source - Text resource with translations.\n * @returns {Array}\n */\n addMessages(source) {\n const [entries, errors] = parse(source);\n for (const id in entries) {\n if (id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from MessageContext.\n if (this._terms.has(id)) {\n errors.push(`Attempt to override an existing term: \"${id}\"`);\n continue;\n }\n this._terms.set(id, entries[id]);\n } else {\n if (this._messages.has(id)) {\n errors.push(`Attempt to override an existing message: \"${id}\"`);\n continue;\n }\n this._messages.set(id, entries[id]);\n }\n }\n\n return errors;\n }\n\n /**\n * Format a message to a string or null.\n *\n * Format a raw `message` from the context into a string (or a null if it has\n * a null value). `args` will be used to resolve references to external\n * arguments inside of the translation.\n *\n * In case of errors `format` will try to salvage as much of the translation\n * as possible and will still return a string. For performance reasons, the\n * encountered errors are not returned but instead are appended to the\n * `errors` array passed as the third argument.\n *\n * const errors = [];\n * ctx.addMessages('hello = Hello, { $name }!');\n * const hello = ctx.getMessage('hello');\n * ctx.format(hello, { name: 'Jane' }, errors);\n *\n * // Returns 'Hello, Jane!' and `errors` is empty.\n *\n * ctx.format(hello, undefined, errors);\n *\n * // Returns 'Hello, name!' and `errors` is now:\n *\n * []\n *\n * @param {Object | string} message\n * @param {Object | undefined} args\n * @param {Array} errors\n * @returns {?string}\n */\n format(message, args, errors) {\n // optimize entities which are simple strings with no attributes\n if (typeof message === \"string\") {\n return message;\n }\n\n // optimize simple-string entities with attributes\n if (typeof message.val === \"string\") {\n return message.val;\n }\n\n // optimize entities with null values\n if (message.val === undefined) {\n return null;\n }\n\n return resolve(this, args, message, errors);\n }\n\n _memoizeIntlObject(ctor, opts) {\n const cache = this._intls.get(ctor) || {};\n const id = JSON.stringify(opts);\n\n if (!cache[id]) {\n cache[id] = new ctor(this.locales, opts);\n this._intls.set(ctor, cache);\n }\n\n return cache[id];\n }\n}\n","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n /**\n * Create an `CachedIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n constructor(iterable) {\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n\n this.seen = [];\n }\n\n [Symbol.iterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n next() {\n if (seen.length <= cur) {\n seen.push(iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n [Symbol.asyncIterator]() {\n const { seen, iterator } = this;\n let cur = 0;\n\n return {\n async next() {\n if (seen.length <= cur) {\n seen.push(await iterator.next());\n }\n return seen[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n */\n touchNext() {\n const { seen, iterator } = this;\n if (seen.length === 0 || seen[seen.length - 1].done === false) {\n seen.push(iterator.next());\n }\n }\n}\n","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages. This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier. If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n * formatString(id, args) {\n * const ctx = mapContextSync(contexts, id);\n *\n * if (ctx === null) {\n * return id;\n * }\n *\n * const msg = ctx.getMessage(id);\n * return ctx.format(msg, args);\n * }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n * function *generateMessages() {\n * // Some lazy logic for yielding MessageContexts.\n * yield *[ctx1, ctx2];\n * }\n *\n * const contexts = new CachedIterable(generateMessages());\n * const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array} ids\n * @returns {MessageContext|Array}\n */\nexport function mapContextSync(iterable, ids) {\n if (!Array.isArray(ids)) {\n return getContextForId(iterable, ids);\n }\n\n return ids.map(\n id => getContextForId(iterable, id)\n );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n for (const context of iterable) {\n if (context.hasMessage(id)) {\n return context;\n }\n }\n\n return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array} ids\n * @returns {Promise>}\n */\nexport async function mapContextAsync(iterable, ids) {\n if (!Array.isArray(ids)) {\n for await (const context of iterable) {\n if (context.hasMessage(ids)) {\n return context;\n }\n }\n }\n\n let remainingCount = ids.length;\n const foundContexts = new Array(remainingCount).fill(null);\n\n for await (const context of iterable) {\n // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n // See https://github.com/babel/babel/issues/5880.\n for (let index = 0; index < ids.length; index++) {\n const id = ids[index];\n if (!foundContexts[index] && context.hasMessage(id)) {\n foundContexts[index] = context;\n remainingCount--;\n }\n\n // Return early when all ids have been mapped to contexts.\n if (remainingCount === 0) {\n return foundContexts;\n }\n }\n }\n\n return foundContexts;\n}\n","function nonBlank(line) {\n return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n const [indent] = line.match(/^\\s*/);\n return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array} strings\n */\nexport function ftl(strings) {\n const [code] = strings;\n const lines = code.split(\"\\n\").filter(nonBlank);\n const indents = lines.map(countIndent);\n const common = Math.min(...indents);\n const indent = new RegExp(`^\\\\s{${common}}`);\n\n return lines.map(\n line => line.replace(indent, \"\")\n ).join(\"\\n\");\n}\n","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n FluentType as MessageArgument,\n FluentNumber as MessageNumberArgument,\n FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances. This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain. When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n constructor(messages) {\n this.contexts = new CachedIterable(messages);\n this.subs = new Set();\n }\n\n /*\n * Subscribe a `Localized` component to changes of `messages`.\n */\n subscribe(comp) {\n this.subs.add(comp);\n }\n\n /*\n * Unsubscribe a `Localized` component from `messages` changes.\n */\n unsubscribe(comp) {\n this.subs.delete(comp);\n }\n\n /*\n * Set a new `messages` iterable and trigger the retranslation.\n */\n setMessages(messages) {\n this.contexts = new CachedIterable(messages);\n\n // Update all subscribed Localized components.\n this.subs.forEach(comp => comp.relocalize());\n }\n\n getMessageContext(id) {\n return mapContextSync(this.contexts, id);\n }\n\n formatCompound(mcx, msg, args) {\n const value = mcx.format(msg, args);\n\n if (msg.attrs) {\n var attrs = {};\n for (const name of Object.keys(msg.attrs)) {\n attrs[name] = mcx.format(msg.attrs[name], args);\n }\n }\n\n return { value, attrs };\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const mcx = this.getMessageContext(id);\n\n if (mcx === null) {\n return fallback || id;\n }\n\n const msg = mcx.getMessage(id);\n return mcx.format(msg, args);\n }\n}\n\nexport function isReactLocalization(props, propName) {\n const prop = props[propName];\n\n if (prop instanceof ReactLocalization) {\n return null;\n }\n\n return new Error(\n `The ${propName} context field must be an instance of ReactLocalization.`\n );\n}\n","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature. It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n * \n * …\n * \n *\n * The `LocalizationProvider` component takes one prop: `messages`. It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages. The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations. If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n constructor(props) {\n super(props);\n const { messages } = props;\n\n if (messages === undefined) {\n throw new Error(\"LocalizationProvider must receive the messages prop.\");\n }\n\n if (!messages[Symbol.iterator]) {\n throw new Error(\"The messages prop must be an iterable.\");\n }\n\n this.l10n = new ReactLocalization(messages);\n }\n\n getChildContext() {\n return {\n l10n: this.l10n\n };\n }\n\n componentWillReceiveProps(next) {\n const { messages } = next;\n\n if (messages !== this.props.messages) {\n this.l10n.setMessages(messages);\n }\n }\n\n render() {\n return Children.only(this.props.children);\n }\n}\n\nLocalizationProvider.childContextTypes = {\n l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n children: PropTypes.element.isRequired,\n messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n const prop = props[propName];\n\n if (Symbol.iterator in Object(prop)) {\n return null;\n }\n\n return new Error(\n `The ${propName} prop supplied to ${componentName} must be an iterable.`\n );\n}\n","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n class WithLocalization extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n /*\n * Find a translation by `id` and format it to a string using `args`.\n */\n getString(id, args, fallback) {\n const { l10n } = this.context;\n\n if (!l10n) {\n return fallback || id;\n }\n\n return l10n.getString(id, args, fallback);\n }\n\n render() {\n return createElement(\n Inner,\n Object.assign(\n // getString needs to be re-bound on updates to trigger a re-render\n { getString: (...args) => this.getString(...args) },\n this.props\n )\n );\n }\n }\n\n WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n WithLocalization.contextTypes = {\n l10n: isReactLocalization\n };\n\n return WithLocalization;\n}\n\nfunction displayName(component) {\n return component.displayName || component.name || \"Component\";\n}\n","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n TEMPLATE.innerHTML = str;\n return TEMPLATE.content;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n menuitem: true,\n ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reMarkup = /<|?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n const args = {};\n const elems = {};\n\n for (const [propname, propval] of Object.entries(props)) {\n if (propname.startsWith(\"$\")) {\n const name = propname.substr(1);\n args[name] = propval;\n } else if (isValidElement(propval)) {\n // We'll try to match localNames of elements found in the translation with\n // names of elements passed as props. localNames are always lowercase.\n const name = propname.toLowerCase();\n elems[name] = propval;\n }\n }\n\n return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n * \n * {'Hello, world!'}
\n * \n *\n * The `id` prop should be the unique identifier of the translation. Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n * \n * {'Hello, { $username }!'}
\n * \n *\n * It's recommended that the contents of the wrapped component be a string\n * expression. The string will be used as the ultimate fallback if no\n * translation is available. It also makes it easy to grep for strings in the\n * source code.\n */\nexport default class Localized extends Component {\n componentDidMount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.subscribe(this);\n }\n }\n\n componentWillUnmount() {\n const { l10n } = this.context;\n\n if (l10n) {\n l10n.unsubscribe(this);\n }\n }\n\n /*\n * Rerender this component in a new language.\n */\n relocalize() {\n // When the `ReactLocalization`'s fallback chain changes, update the\n // component.\n this.forceUpdate();\n }\n\n render() {\n const { l10n } = this.context;\n const { id, attrs, children } = this.props;\n const elem = Children.only(children);\n\n if (!l10n) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const mcx = l10n.getMessageContext(id);\n\n if (mcx === null) {\n // Use the wrapped component as fallback.\n return elem;\n }\n\n const msg = mcx.getMessage(id);\n const [args, elems] = toArguments(this.props);\n const {\n value: messageValue,\n attrs: messageAttrs\n } = l10n.formatCompound(mcx, msg, args);\n\n // The default is to forbid all message attributes. If the attrs prop exists\n // on the Localized instance, only set message attributes which have been\n // explicitly allowed by the developer.\n if (attrs && messageAttrs) {\n var localizedProps = {};\n\n for (const [name, value] of Object.entries(messageAttrs)) {\n if (attrs[name]) {\n localizedProps[name] = value;\n }\n }\n }\n\n // If the wrapped component is a known void element, explicitly dismiss the\n // message value and do not pass it to cloneElement in order to avoid the\n // \"void element tags must neither have `children` nor use\n // `dangerouslySetInnerHTML`\" error.\n if (elem.type in VOID_ELEMENTS) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message has a null value, we're only interested in its attributes.\n // Do not pass the null value to cloneElement as it would nuke all children\n // of the wrapped component.\n if (messageValue === null) {\n return cloneElement(elem, localizedProps);\n }\n\n // If the message value doesn't contain any markup nor any HTML entities,\n // insert it as the only child of the wrapped component.\n if (!reMarkup.test(messageValue)) {\n return cloneElement(elem, localizedProps, messageValue);\n }\n\n // If the message contains markup, parse it and try to match the children\n // found in the translation with the props passed to this Localized.\n const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n const translatedChildren = translationNodes.map(childNode => {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n return childNode.textContent;\n }\n\n // If the child is not expected just take its textContent.\n if (!elems.hasOwnProperty(childNode.localName)) {\n return childNode.textContent;\n }\n\n const sourceChild = elems[childNode.localName];\n\n // If the element passed as a prop to is a known void element,\n // explicitly dismiss any textContent which might have accidentally been\n // defined in the translation to prevent the \"void element tags must not\n // have children\" error.\n if (sourceChild.type in VOID_ELEMENTS) {\n return sourceChild;\n }\n\n // TODO Protect contents of elements wrapped in \n // https://github.com/projectfluent/fluent.js/issues/184\n // TODO Control localizable attributes on elements passed as props\n // https://github.com/projectfluent/fluent.js/issues/185\n return cloneElement(sourceChild, null, childNode.textContent);\n });\n\n return cloneElement(elem, localizedProps, ...translatedChildren);\n }\n}\n\nLocalized.contextTypes = {\n l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n children: PropTypes.element.isRequired,\n};\n","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent. It takes advantage of\n * React's Components system and the virtual DOM. Translations are exposed to\n * components via the provider pattern.\n *\n * \n * \n * {'Hello, world!'}
\n * \n * \n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n from \"./localization\";\n","this.Dedupe = class Dedupe {\n constructor(createKey) {\n this.createKey = createKey || this.defaultCreateKey;\n }\n\n defaultCreateKey(item) {\n return item;\n }\n\n /**\n * Dedupe any number of grouped elements favoring those from earlier groups.\n *\n * @param {Array} groups Contains an arbitrary number of arrays of elements.\n * @returns {Array} A matching array of each provided group deduped.\n */\n group(...groups) {\n const globalKeys = new Set();\n const result = [];\n for (const values of groups) {\n const valueMap = new Map();\n for (const value of values) {\n const key = this.createKey(value);\n if (!globalKeys.has(key) && !valueMap.has(key)) {\n valueMap.set(key, value);\n }\n }\n result.push(valueMap);\n valueMap.forEach((value, key) => globalKeys.add(key));\n }\n return result.map(m => Array.from(m.values()));\n }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\");\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\");\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n App: {\n // Have we received real data from the app yet?\n initialized: false,\n },\n ASRouter: {\n initialized: false,\n allowLegacySnippets: null,\n },\n Snippets: {initialized: false},\n TopSites: {\n // Have we received real data from history yet?\n initialized: false,\n // The history (and possibly default) links\n rows: [],\n // Used in content only to dispatch action to TopSiteForm.\n editForm: null,\n // Used in content only to open the SearchShortcutsForm modal.\n showSearchShortcutsForm: false,\n // The list of available search shortcuts.\n searchShortcuts: [],\n },\n Prefs: {\n initialized: false,\n values: {},\n },\n Dialog: {\n visible: false,\n data: {},\n },\n Sections: [],\n Pocket: {\n isUserLoggedIn: null,\n pocketCta: {},\n waitingForSpoc: true,\n },\n // This is the new pocket configurable layout state.\n DiscoveryStream: {\n // This is a JSON-parsed copy of the discoverystream.config pref value.\n config: {enabled: false, layout_endpoint: \"\"},\n layout: [],\n lastUpdated: null,\n feeds: {\n // \"https://foo.com/feed1\": {lastUpdated: 123, data: []}\n },\n spocs: {\n spocs_endpoint: \"\",\n lastUpdated: null,\n data: {}, // {spocs: []}\n loaded: false,\n },\n },\n Search: {\n // When search hand-off is enabled, we render a big button that is styled to\n // look like a search textbox. If the button is clicked, we style\n // the button as if it was a focused search box and show a fake cursor but\n // really focus the awesomebar without the focus styles (\"hidden focus\").\n fakeFocus: false,\n // Hide the search box after handing off to AwesomeBar and user starts typing.\n hide: false,\n },\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n switch (action.type) {\n case at.INIT:\n return Object.assign({}, prevState, action.data || {}, {initialized: true});\n default:\n return prevState;\n }\n}\n\nfunction ASRouter(prevState = INITIAL_STATE.ASRouter, action) {\n switch (action.type) {\n case at.AS_ROUTER_INITIALIZED:\n return {...action.data, initialized: true};\n case at.AS_ROUTER_PREF_CHANGED:\n return {...prevState, ...action.data};\n default:\n return prevState;\n }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n // Remove any pinned links\n const pinnedUrls = pinned.map(link => link && link.url);\n let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n newLinks = newLinks.map(link => {\n if (link && link.isPinned) {\n delete link.isPinned;\n delete link.pinIndex;\n }\n return link;\n });\n\n // Then insert them in their specified location\n pinned.forEach((val, index) => {\n if (!val) { return; }\n let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n if (index > newLinks.length) {\n newLinks[index] = link;\n } else {\n newLinks.splice(index, 0, link);\n }\n });\n\n return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n let hasMatch;\n let newRows;\n switch (action.type) {\n case at.TOP_SITES_UPDATED:\n if (!action.data || !action.data.links) {\n return prevState;\n }\n return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n case at.TOP_SITES_PREFS_UPDATED:\n return Object.assign({}, prevState, {pref: action.data.pref});\n case at.TOP_SITES_EDIT:\n return Object.assign({}, prevState, {\n editForm: {\n index: action.data.index,\n previewResponse: null,\n },\n });\n case at.TOP_SITES_CANCEL_EDIT:\n return Object.assign({}, prevState, {editForm: null});\n case at.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: true});\n case at.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:\n return Object.assign({}, prevState, {showSearchShortcutsForm: false});\n case at.PREVIEW_RESPONSE:\n if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: action.data.preview,\n previewUrl: action.data.url,\n },\n });\n case at.PREVIEW_REQUEST:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null,\n previewUrl: action.data.url,\n },\n });\n case at.PREVIEW_REQUEST_CANCEL:\n if (!prevState.editForm) {\n return prevState;\n }\n return Object.assign({}, prevState, {\n editForm: {\n index: prevState.editForm.index,\n previewResponse: null,\n },\n });\n case at.SCREENSHOT_UPDATED:\n newRows = prevState.rows.map(row => {\n if (row && row.url === action.data.url) {\n hasMatch = true;\n return Object.assign({}, row, {screenshot: action.data.screenshot});\n }\n return row;\n });\n return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.map(site => {\n if (site && site.url === action.data.url) {\n const newSite = Object.assign({}, site);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n return newSite;\n }\n return site;\n });\n return Object.assign({}, prevState, {rows: newRows});\n case at.PLACES_LINK_DELETED:\n if (!action.data) {\n return prevState;\n }\n newRows = prevState.rows.filter(site => action.data.url !== site.url);\n return Object.assign({}, prevState, {rows: newRows});\n case at.UPDATE_SEARCH_SHORTCUTS:\n return {...prevState, searchShortcuts: action.data.searchShortcuts};\n case at.SNIPPETS_PREVIEW_MODE:\n return {...prevState, rows: []};\n default:\n return prevState;\n }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n switch (action.type) {\n case at.DIALOG_OPEN:\n return Object.assign({}, prevState, {visible: true, data: action.data});\n case at.DIALOG_CANCEL:\n return Object.assign({}, prevState, {visible: false});\n case at.DELETE_HISTORY_URL:\n return Object.assign({}, INITIAL_STATE.Dialog);\n default:\n return prevState;\n }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n let newValues;\n switch (action.type) {\n case at.PREFS_INITIAL_VALUES:\n return Object.assign({}, prevState, {initialized: true, values: action.data});\n case at.PREF_CHANGED:\n newValues = Object.assign({}, prevState.values);\n newValues[action.data.name] = action.data.value;\n return Object.assign({}, prevState, {values: newValues});\n default:\n return prevState;\n }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n let hasMatch;\n let newState;\n switch (action.type) {\n case at.SECTION_DEREGISTER:\n return prevState.filter(section => section.id !== action.data);\n case at.SECTION_REGISTER:\n // If section exists in prevState, update it\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n hasMatch = true;\n return Object.assign({}, section, action.data);\n }\n return section;\n });\n // Otherwise, append it\n if (!hasMatch) {\n const initialized = !!(action.data.rows && action.data.rows.length > 0);\n const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n newState.push(section);\n }\n return newState;\n case at.SECTION_UPDATE:\n newState = prevState.map(section => {\n if (section && section.id === action.data.id) {\n // If the action is updating rows, we should consider initialized to be true.\n // This can be overridden if initialized is defined in the action.data\n const initialized = action.data.rows ? {initialized: true} : {};\n\n // Make sure pinned cards stay at their current position when rows are updated.\n // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n const rows = Array.from(action.data.rows);\n section.rows.forEach((card, index) => {\n if (card.pinned) {\n // Only add it if it's not already there.\n if (rows[index].guid !== card.guid) {\n rows.splice(index, 0, card);\n }\n }\n });\n return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n }\n\n return Object.assign({}, section, initialized, action.data);\n }\n return section;\n });\n\n if (!action.data.dedupeConfigurations) {\n return newState;\n }\n\n action.data.dedupeConfigurations.forEach(dedupeConf => {\n newState = newState.map(section => {\n if (section.id === dedupeConf.id) {\n const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n return newRows;\n }, section.rows);\n\n return Object.assign({}, section, {rows: dedupedRows});\n }\n\n return section;\n });\n });\n\n return newState;\n case at.SECTION_UPDATE_CARD:\n return prevState.map(section => {\n if (section && section.id === action.data.id && section.rows) {\n const newRows = section.rows.map(card => {\n if (card.url === action.data.url) {\n return Object.assign({}, card, action.data.options);\n }\n return card;\n });\n return Object.assign({}, section, {rows: newRows});\n }\n return section;\n });\n case at.PLACES_BOOKMARK_ADDED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the item within the rows that is attempted to be bookmarked\n if (item.url === action.data.url) {\n const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n return Object.assign({}, item, {\n bookmarkGuid,\n bookmarkTitle,\n bookmarkDateCreated: dateAdded,\n type: \"bookmark\",\n });\n }\n return item;\n }),\n }));\n case at.PLACES_SAVED_TO_POCKET:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n if (item.url === action.data.url) {\n return Object.assign({}, item, {\n open_url: action.data.open_url,\n pocket_id: action.data.pocket_id,\n title: action.data.title,\n type: \"pocket\",\n });\n }\n return item;\n }),\n }));\n case at.PLACES_BOOKMARK_REMOVED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section => Object.assign({}, section, {\n rows: section.rows.map(item => {\n // find the bookmark within the rows that is attempted to be removed\n if (item.url === action.data.url) {\n const newSite = Object.assign({}, item);\n delete newSite.bookmarkGuid;\n delete newSite.bookmarkTitle;\n delete newSite.bookmarkDateCreated;\n if (!newSite.type || newSite.type === \"bookmark\") {\n newSite.type = \"history\";\n }\n return newSite;\n }\n return item;\n }),\n }));\n case at.PLACES_LINK_DELETED:\n case at.PLACES_LINK_BLOCKED:\n if (!action.data) {\n return prevState;\n }\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n case at.DELETE_FROM_POCKET:\n case at.ARCHIVE_FROM_POCKET:\n return prevState.map(section =>\n Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n case at.SNIPPETS_PREVIEW_MODE:\n return prevState.map(section => ({...section, rows: []}));\n default:\n return prevState;\n }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n switch (action.type) {\n case at.SNIPPETS_DATA:\n return Object.assign({}, prevState, {initialized: true}, action.data);\n case at.SNIPPET_BLOCKED:\n return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n case at.SNIPPETS_BLOCKLIST_CLEARED:\n return Object.assign({}, prevState, {blockList: []});\n case at.SNIPPETS_RESET:\n return INITIAL_STATE.Snippets;\n default:\n return prevState;\n }\n}\n\nfunction Pocket(prevState = INITIAL_STATE.Pocket, action) {\n switch (action.type) {\n case at.POCKET_WAITING_FOR_SPOC:\n return {...prevState, waitingForSpoc: action.data};\n case at.POCKET_LOGGED_IN:\n return {...prevState, isUserLoggedIn: !!action.data};\n case at.POCKET_CTA:\n return {\n ...prevState,\n pocketCta: {\n ctaButton: action.data.cta_button,\n ctaText: action.data.cta_text,\n ctaUrl: action.data.cta_url,\n useCta: action.data.use_cta,\n },\n };\n default:\n return prevState;\n }\n}\n\nfunction DiscoveryStream(prevState = INITIAL_STATE.DiscoveryStream, action) {\n switch (action.type) {\n case at.DISCOVERY_STREAM_CONFIG_CHANGE:\n // The reason this is a separate action is so it doesn't trigger a listener update on init\n case at.DISCOVERY_STREAM_CONFIG_SETUP:\n return {...prevState, config: action.data || {}};\n case at.DISCOVERY_STREAM_LAYOUT_UPDATE:\n return {...prevState, lastUpdated: action.data.lastUpdated || null, layout: action.data.layout || []};\n case at.DISCOVERY_STREAM_LAYOUT_RESET:\n return {...prevState, lastUpdated: INITIAL_STATE.DiscoveryStream.lastUpdated, layout: INITIAL_STATE.DiscoveryStream.layout};\n case at.DISCOVERY_STREAM_FEEDS_UPDATE:\n return {...prevState, feeds: action.data || prevState.feeds};\n case at.DISCOVERY_STREAM_SPOCS_ENDPOINT:\n return {\n ...prevState,\n spocs: {\n ...INITIAL_STATE.DiscoveryStream.spocs,\n spocs_endpoint: action.data || INITIAL_STATE.DiscoveryStream.spocs.spocs_endpoint,\n },\n };\n case at.DISCOVERY_STREAM_SPOCS_UPDATE:\n if (action.data) {\n return {\n ...prevState,\n spocs: {\n ...prevState.spocs,\n lastUpdated: action.data.lastUpdated,\n data: action.data.spocs,\n loaded: true,\n },\n };\n }\n return prevState;\n default:\n return prevState;\n }\n}\n\nfunction Search(prevState = INITIAL_STATE.Search, action) {\n switch (action.type) {\n case at.HIDE_SEARCH:\n return Object.assign({...prevState, hide: true});\n case at.FAKE_FOCUS_SEARCH:\n return Object.assign({...prevState, fakeFocus: true});\n case at.SHOW_SEARCH:\n return Object.assign({...prevState, hide: false, fakeFocus: false});\n default:\n return prevState;\n }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {\n TopSites,\n App,\n ASRouter,\n Snippets,\n Prefs,\n Dialog,\n Sections,\n Pocket,\n DiscoveryStream,\n Search,\n};\n\nconst EXPORTED_SYMBOLS = [\n \"reducers\",\n \"INITIAL_STATE\",\n \"insertPinned\",\n \"TOP_SITES_DEFAULT_ROWS\",\n \"TOP_SITES_MAX_SITES_PER_ROW\",\n];\n","export const cardContextTypes = {\n history: {\n intlID: \"type_label_visited\",\n icon: \"history-item\",\n },\n bookmark: {\n intlID: \"type_label_bookmarked\",\n icon: \"bookmark-added\",\n },\n trending: {\n intlID: \"type_label_recommended\",\n icon: \"trending\",\n },\n now: {\n intlID: \"type_label_now\",\n icon: \"now\",\n },\n pocket: {\n intlID: \"type_label_pocket\",\n icon: \"pocket\",\n },\n download: {\n intlID: \"type_label_downloaded\",\n icon: \"download\",\n },\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n activeCard: null,\n imageLoaded: false,\n showContextMenu: false,\n cardImage: null,\n };\n this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n this.onMenuUpdate = this.onMenuUpdate.bind(this);\n this.onLinkClick = this.onLinkClick.bind(this);\n }\n\n /**\n * Helper to conditionally load an image and update state when it loads.\n */\n async maybeLoadImage() {\n // No need to load if it's already loaded or no image\n const {cardImage} = this.state;\n if (!cardImage) {\n return;\n }\n\n const imageUrl = cardImage.url;\n if (!this.state.imageLoaded) {\n // Initialize a promise to share a load across multiple card updates\n if (!gImageLoading.has(imageUrl)) {\n const loaderPromise = new Promise((resolve, reject) => {\n const loader = new Image();\n loader.addEventListener(\"load\", resolve);\n loader.addEventListener(\"error\", reject);\n loader.src = imageUrl;\n });\n\n // Save and remove the promise only while it's pending\n gImageLoading.set(imageUrl, loaderPromise);\n loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n }\n\n // Wait for the image whether just started loading or reused promise\n await gImageLoading.get(imageUrl);\n\n // Only update state if we're still waiting to load the original image\n if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n !this.state.imageLoaded) {\n this.setState({imageLoaded: true});\n }\n }\n }\n\n /**\n * Helper to obtain the next state based on nextProps and prevState.\n *\n * NOTE: Rename this method to getDerivedStateFromProps when we update React\n * to >= 16.3. We will need to update tests as well. We cannot rename this\n * method to getDerivedStateFromProps now because there is a mismatch in\n * the React version that we are using for both testing and production.\n * (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n *\n * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n */\n static getNextStateFromProps(nextProps, prevState) {\n const {image} = nextProps.link;\n const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n let nextState = null;\n\n // Image is updating.\n if (!imageInState && nextProps.link) {\n nextState = {imageLoaded: false};\n }\n\n if (imageInState) {\n return nextState;\n }\n\n // Since image was updated, attempt to revoke old image blob URL, if it exists.\n ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n nextState = nextState || {};\n nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n return nextState;\n }\n\n onMenuButtonClick(event) {\n event.preventDefault();\n this.setState({\n activeCard: this.props.index,\n showContextMenu: true,\n });\n }\n\n /**\n * Report to telemetry additional information about the item.\n */\n _getTelemetryInfo() {\n // Filter out \"history\" type for being the default\n if (this.props.link.type !== \"history\") {\n return {value: {card_type: this.props.link.type}};\n }\n\n return null;\n }\n\n onLinkClick(event) {\n event.preventDefault();\n if (this.props.link.type === \"download\") {\n this.props.dispatch(ac.OnlyToMain({\n type: at.SHOW_DOWNLOAD_FILE,\n data: this.props.link,\n }));\n } else {\n const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n this.props.dispatch(ac.OnlyToMain({\n type: at.OPEN_LINK,\n data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}}),\n }));\n }\n if (this.props.isWebExtension) {\n this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n source: this.props.eventSource,\n url: this.props.link.url,\n action_position: this.props.index,\n }));\n } else {\n this.props.dispatch(ac.UserEvent(Object.assign({\n event: \"CLICK\",\n source: this.props.eventSource,\n action_position: this.props.index,\n }, this._getTelemetryInfo())));\n\n if (this.props.shouldSendImpressionStats) {\n this.props.dispatch(ac.ImpressionStats({\n source: this.props.eventSource,\n click: 0,\n tiles: [{id: this.props.link.guid, pos: this.props.index}],\n }));\n }\n }\n }\n\n onMenuUpdate(showContextMenu) {\n this.setState({showContextMenu});\n }\n\n componentDidMount() {\n this.maybeLoadImage();\n }\n\n componentDidUpdate() {\n this.maybeLoadImage();\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillMount() {\n const nextState = _Card.getNextStateFromProps(this.props, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n // NOTE: Remove this function when we update React to >= 16.3 since React will\n // call getDerivedStateFromProps automatically. We will also need to\n // rename getNextStateFromProps to getDerivedStateFromProps.\n componentWillReceiveProps(nextProps) {\n const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n if (nextState) {\n this.setState(nextState);\n }\n }\n\n componentWillUnmount() {\n ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n }\n\n render() {\n const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n const {props} = this;\n const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n // Display \"now\" as \"trending\" until we have new strings #3402\n const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n const hasImage = this.state.cardImage || link.hasImage;\n const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n const outerClassName = [\n \"card-outer\",\n className,\n isContextMenuOpen && \"active\",\n props.placeholder && \"placeholder\",\n ].filter(v => v).join(\" \");\n\n return (\n \n \n
\n
\n {link.type === \"download\" &&
}\n {link.hostname &&\n
\n {link.hostname.slice(0, 100)}{link.type === \"download\" && ` \\u2014 ${link.description}`}\n
\n }\n
\n
{link.title} \n
{link.description}
\n
\n
\n {icon && !link.context &&
}\n {link.icon && link.context &&
}\n {intlID && !link.context &&
}\n {link.context &&
{link.context}
}\n
\n
\n
\n \n {!props.placeholder && \n {`Open context menu for ${link.title}`} \n }\n {isContextMenuOpen &&\n \n }\n );\n }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(injectIntl(_Card));\nexport const PlaceholderCard = props => ;\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {validationError: this.props.validationError};\n this.onChange = this.onChange.bind(this);\n this.onMount = this.onMount.bind(this);\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.shouldFocus && !this.props.shouldFocus) {\n this.input.focus();\n }\n if (nextProps.validationError && !this.props.validationError) {\n this.setState({validationError: true});\n }\n // If the component is in an error state but the value was cleared by the parent\n if (this.state.validationError && !nextProps.value) {\n this.setState({validationError: false});\n }\n }\n\n onChange(ev) {\n if (this.state.validationError) {\n this.setState({validationError: false});\n }\n this.props.onChange(ev);\n }\n\n onMount(input) {\n this.input = input;\n }\n\n render() {\n const showClearButton = this.props.value && this.props.onClear;\n const {typeUrl} = this.props;\n const {validationError} = this.state;\n\n return ( \n \n {this.props.loading ?\n
:\n showClearButton &&
}\n
\n {validationError &&\n
}\n
\n );\n }\n}\n\nTopSiteFormInput.defaultProps = {\n showClearButton: false,\n value: \"\",\n validationError: false,\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n constructor(props) {\n super(props);\n const {site} = props;\n this.state = {\n label: site ? (site.label || site.hostname) : \"\",\n url: site ? site.url : \"\",\n validationError: false,\n customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n showCustomScreenshotForm: site ? site.customScreenshotURL : false,\n };\n this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n this.onLabelChange = this.onLabelChange.bind(this);\n this.onUrlChange = this.onUrlChange.bind(this);\n this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n this.onClearUrlClick = this.onClearUrlClick.bind(this);\n this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n this.validateUrl = this.validateUrl.bind(this);\n }\n\n onLabelChange(event) {\n this.setState({\"label\": event.target.value});\n }\n\n onUrlChange(event) {\n this.setState({\n url: event.target.value,\n validationError: false,\n });\n }\n\n onClearUrlClick() {\n this.setState({\n url: \"\",\n validationError: false,\n });\n }\n\n onEnableScreenshotUrlForm() {\n this.setState({showCustomScreenshotForm: true});\n }\n\n _updateCustomScreenshotInput(customScreenshotUrl) {\n this.setState({\n customScreenshotUrl,\n validationError: false,\n });\n this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n }\n\n onCustomScreenshotUrlChange(event) {\n this._updateCustomScreenshotInput(event.target.value);\n }\n\n onClearScreenshotInput() {\n this._updateCustomScreenshotInput(\"\");\n }\n\n onCancelButtonClick(ev) {\n ev.preventDefault();\n this.props.onClose();\n }\n\n onDoneButtonClick(ev) {\n ev.preventDefault();\n\n if (this.validateForm()) {\n const site = {url: this.cleanUrl(this.state.url)};\n const {index} = this.props;\n if (this.state.label !== \"\") {\n site.label = this.state.label;\n }\n\n if (this.state.customScreenshotUrl) {\n site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n } else if (this.props.site && this.props.site.customScreenshotURL) {\n // Used to flag that previously cached screenshot should be removed\n site.customScreenshotURL = null;\n }\n this.props.dispatch(ac.AlsoToMain({\n type: at.TOP_SITES_PIN,\n data: {site, index},\n }));\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"TOP_SITES_EDIT\",\n action_position: index,\n }));\n\n this.props.onClose();\n }\n }\n\n onPreviewButtonClick(event) {\n event.preventDefault();\n if (this.validateForm()) {\n this.props.dispatch(ac.AlsoToMain({\n type: at.PREVIEW_REQUEST,\n data: {url: this.cleanUrl(this.state.customScreenshotUrl)},\n }));\n this.props.dispatch(ac.UserEvent({\n source: TOP_SITES_SOURCE,\n event: \"PREVIEW_REQUEST\",\n }));\n }\n }\n\n cleanUrl(url) {\n // If we are missing a protocol, prepend http://\n if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n return `http://${url}`;\n }\n return url;\n }\n\n _tryParseUrl(url) {\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n }\n\n validateUrl(url) {\n const validProtocols = [\"http:\", \"https:\"];\n const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n return urlObj && validProtocols.includes(urlObj.protocol);\n }\n\n validateCustomScreenshotUrl() {\n const {customScreenshotUrl} = this.state;\n return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n }\n\n validateForm() {\n const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n if (!validate) {\n this.setState({validationError: true});\n }\n\n return validate;\n }\n\n _renderCustomScreenshotInput() {\n const {customScreenshotUrl} = this.state;\n const requestFailed = this.props.previewResponse === \"\";\n const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n // Set focus on error if the url field is valid or when the input is first rendered and is empty\n const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n const isLoading = this.props.previewResponse === null &&\n customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n if (!this.state.showCustomScreenshotForm) {\n return (\n \n );\n }\n return (\n \n
);\n }\n\n render() {\n const {customScreenshotUrl} = this.state;\n const requestFailed = this.props.previewResponse === \"\";\n // For UI purposes, editing without an existing link is \"add\"\n const showAsAdd = !this.props.site;\n const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n // or the request failed\n const previewMode = changed && !this.props.previewResponse;\n const previewLink = Object.assign({}, this.props.site);\n if (this.props.previewResponse) {\n previewLink.screenshot = this.props.previewResponse;\n previewLink.customScreenshotURL = this.props.previewUrl;\n }\n return (\n \n );\n }\n}\n\nTopSiteForm.defaultProps = {\n site: null,\n index: -1,\n};\n"],"sourceRoot":""}
\ No newline at end of file
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/karma.mc.config.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/karma.mc.config.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/karma.mc.config.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/karma.mc.config.js 2019-02-07 12:50:25.000000000 +0000
@@ -91,7 +91,7 @@
options: {
plugins: [
// Converts .jsm files into common-js modules
- ["jsm-to-commonjs", {basePath: PATHS.resourcePathRegEx, replace: true}], // require("babel-plugin-jsm-to-commonjs")
+ ["jsm-to-commonjs", {basePath: PATHS.resourcePathRegEx, removeOtherImports: true, replace: true}], // require("babel-plugin-jsm-to-commonjs")
["transform-async-to-module-method", {module: "co-task", method: "async"}], // require("babel-plugin-transform-async-to-module-method")
"transform-es2015-modules-commonjs", // require("babel-plugin-transform-es2015-modules-commonjs")
["transform-object-rest-spread", {"useBuiltIns": true}], // require("babel-plugin-transform-object-rest-spread")
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/AboutPreferences.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/AboutPreferences.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/AboutPreferences.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/AboutPreferences.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -287,6 +287,7 @@
createAppend("hbox", discoveryGroup)
.appendChild(contentDiscoveryButton)
.addEventListener("click", async () => {
+ this.store.dispatch({type: at.DISCOVERY_STREAM_OPT_OUT});
const activeExperiments = await PreferenceExperiments.getAllActive();
const experiment = activeExperiments.find(exp => exp.preferenceName === DISCOVERY_STREAM_CONFIG_PREF_NAME);
// Unconditionally update the UI for a fast user response and in
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/ActivityStream.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/ActivityStream.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/ActivityStream.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/ActivityStream.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -222,6 +222,14 @@
layout_endpoint: "https://getpocket.com/v3/newtab/layout?version=1&consumer_key=40249-e88c401e1b1f2242d9e441c4&layout_variant=basic",
}),
}],
+ ["discoverystream.optOut.0", {
+ title: "Opt out of new layout v0",
+ value: false,
+ }],
+ ["darkModeMessage", {
+ title: "Boolean flag that decides whether to show the dark Mode message or not.",
+ value: IS_NIGHTLY_OR_UNBRANDED_BUILD,
+ }],
]);
// Array of each feed's FEEDS_CONFIG factory and values to add to PREFS_CONFIG
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/ASRouter.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/ASRouter.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/ASRouter.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/ASRouter.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -246,9 +246,8 @@
const aUri = Services.io.newURI(url);
const systemPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
- // AddonManager installation source associated to the addons installed from activitystream
- // (See Bug 1496167 for a rationale).
- const telemetryInfo = {source: "activitystream"};
+ // AddonManager installation source associated to the addons installed from activitystream's CFR
+ const telemetryInfo = {source: "amo"};
const install = await AddonManager.getInstallForURL(aUri.spec, {telemetryInfo});
await AddonManager.installAddonFromWebpage("application/x-xpinstall", browser,
systemPrincipal, install);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/DiscoveryStreamFeed.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/DiscoveryStreamFeed.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/DiscoveryStreamFeed.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/DiscoveryStreamFeed.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -5,7 +5,6 @@
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
-const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
const {actionTypes: at, actionCreators: ac} = ChromeUtils.import("resource://activity-stream/common/Actions.jsm");
const {PersistentCache} = ChromeUtils.import("resource://activity-stream/lib/PersistentCache.jsm");
@@ -14,7 +13,11 @@
const LAYOUT_UPDATE_TIME = 30 * 60 * 1000; // 30 minutes
const COMPONENT_FEEDS_UPDATE_TIME = 30 * 60 * 1000; // 30 minutes
const SPOCS_FEEDS_UPDATE_TIME = 30 * 60 * 1000; // 30 minutes
-const CONFIG_PREF_NAME = "browser.newtabpage.activity-stream.discoverystream.config";
+const MAX_LIFETIME_CAP = 500; // Guard against misconfiguration on the server
+const PREF_CONFIG = "discoverystream.config";
+const PREF_OPT_OUT = "discoverystream.optOut.0";
+const PREF_SHOW_SPONSORED = "showSponsored";
+const PREF_SPOC_IMPRESSIONS = "discoverystream.spoc.impressions";
this.DiscoveryStreamFeed = class DiscoveryStreamFeed {
constructor() {
@@ -32,41 +35,35 @@
return this._prefCache.config;
}
try {
- this._prefCache.config = JSON.parse(Services.prefs.getStringPref(CONFIG_PREF_NAME, ""));
+ this._prefCache.config = JSON.parse(this.store.getState().Prefs.values[PREF_CONFIG]);
+
+ // Modify the cached config with the user set opt-out for other consumers
+ this._prefCache.config.enabled = this._prefCache.config.enabled &&
+ !this.store.getState().Prefs.values[PREF_OPT_OUT];
} catch (e) {
// istanbul ignore next
this._prefCache.config = {};
// istanbul ignore next
- Cu.reportError(`Could not parse preference. Try resetting ${CONFIG_PREF_NAME} in about:config.`);
+ Cu.reportError(`Could not parse preference. Try resetting ${PREF_CONFIG} in about:config.`);
}
return this._prefCache.config;
}
get showSpocs() {
- // showSponsored is generally a use set spoc opt out,
- // show_spocs is generally a mozilla set value.
- return this.store.getState().Prefs.values.showSponsored && this.config.show_spocs;
+ // Combine user-set sponsored opt-out with Mozilla-set config
+ return this.store.getState().Prefs.values[PREF_SHOW_SPONSORED] && this.config.show_spocs;
}
setupPrefs() {
- Services.prefs.addObserver(CONFIG_PREF_NAME, this);
// Send the initial state of the pref on our reducer
this.store.dispatch(ac.BroadcastToContent({type: at.DISCOVERY_STREAM_CONFIG_SETUP, data: this.config}));
}
uninitPrefs() {
- Services.prefs.removeObserver(CONFIG_PREF_NAME, this);
// Reset in-memory cache
this._prefCache = {};
}
- observe(aSubject, aTopic, aPrefName) {
- if (aPrefName === CONFIG_PREF_NAME) {
- this._prefCache.config = null;
- this.store.dispatch(ac.BroadcastToContent({type: at.DISCOVERY_STREAM_CONFIG_CHANGE, data: this.config}));
- }
- }
-
async fetchFromEndpoint(endpoint) {
if (!endpoint) {
Cu.reportError("Tried to fetch endpoint but none was configured.");
@@ -183,6 +180,8 @@
lastUpdated: Date.now(),
data: spocsResponse,
};
+
+ this.cleanUpCampaignImpressionPref(spocs.data);
await this.cache.set("spocs", spocs);
} else {
Cu.reportError("No response for spocs_endpoint prop");
@@ -203,11 +202,62 @@
type: at.DISCOVERY_STREAM_SPOCS_UPDATE,
data: {
lastUpdated: spocs.lastUpdated,
- spocs: spocs.data,
+ spocs: this.filterSpocs(spocs.data),
},
});
}
+ // Filter spocs based on frequency caps
+ filterSpocs(data) {
+ if (data && data.spocs && data.spocs.length) {
+ const {spocs} = data;
+ const impressions = this.readImpressionsPref(PREF_SPOC_IMPRESSIONS);
+ return {
+ ...data,
+ spocs: spocs.filter(s => this.isBelowFrequencyCap(impressions, s)),
+ };
+ }
+ return data;
+ }
+
+ // Frequency caps are based on campaigns, which may include multiple spocs.
+ // We currently support two types of frequency caps:
+ // - lifetime: Indicates how many times spocs from a campaign can be shown in total
+ // - period: Indicates how many times spocs from a campaign can be shown within a period
+ //
+ // So, for example, the feed configuration below defines that for campaign 1 no more
+ // than 5 spocs can be shown in total, and no more than 2 per hour.
+ // "campaign_id": 1,
+ // "caps": {
+ // "lifetime": 5,
+ // "campaign": {
+ // "count": 2,
+ // "period": 3600
+ // }
+ // }
+ isBelowFrequencyCap(impressions, spoc) {
+ const campaignImpressions = impressions[spoc.campaign_id];
+ if (!campaignImpressions) {
+ return true;
+ }
+
+ const lifetime = spoc.caps && spoc.caps.lifetime;
+
+ const lifeTimeCap = Math.min(lifetime || MAX_LIFETIME_CAP, MAX_LIFETIME_CAP);
+ const lifeTimeCapExceeded = campaignImpressions.length >= lifeTimeCap;
+ if (lifeTimeCapExceeded) {
+ return false;
+ }
+
+ const campaignCap = spoc.caps && spoc.caps.campaign;
+ if (campaignCap) {
+ const campaignCapExceeded = campaignImpressions
+ .filter(i => (Date.now() - i) < (campaignCap.period * 1000)).length >= campaignCap.count;
+ return !campaignCapExceeded;
+ }
+ return true;
+ }
+
async getComponentFeed(feedUrl) {
const cachedData = await this.cache.get() || {};
const {feeds} = cachedData;
@@ -277,6 +327,50 @@
}
}
+ recordCampaignImpression(campaignId) {
+ let impressions = this.readImpressionsPref(PREF_SPOC_IMPRESSIONS);
+
+ const timeStamps = impressions[campaignId] || [];
+ timeStamps.push(Date.now());
+ impressions = {...impressions, [campaignId]: timeStamps};
+
+ this.writeImpressionsPref(PREF_SPOC_IMPRESSIONS, impressions);
+ }
+
+ cleanUpCampaignImpressionPref(data) {
+ if (data.spocs && data.spocs.length) {
+ const campaignIds = data.spocs.map(s => `${s.campaign_id}`);
+ this.cleanUpImpressionPref(id => !campaignIds.includes(id), PREF_SPOC_IMPRESSIONS);
+ }
+ }
+
+ writeImpressionsPref(pref, impressions) {
+ this.store.dispatch(ac.SetPref(pref, JSON.stringify(impressions)));
+ }
+
+ readImpressionsPref(pref) {
+ const prefVal = this.store.getState().Prefs.values[pref];
+ return prefVal ? JSON.parse(prefVal) : {};
+ }
+
+ cleanUpImpressionPref(isExpired, pref) {
+ const impressions = this.readImpressionsPref(pref);
+ let changed = false;
+
+ Object
+ .keys(impressions)
+ .forEach(id => {
+ if (isExpired(id)) {
+ changed = true;
+ delete impressions[id];
+ }
+ });
+
+ if (changed) {
+ this.writeImpressionsPref(pref, impressions);
+ }
+ }
+
async onAction(action) {
switch (action.type) {
case at.INIT:
@@ -295,20 +389,60 @@
}
break;
case at.DISCOVERY_STREAM_CONFIG_SET_VALUE:
- Services.prefs.setStringPref(CONFIG_PREF_NAME, JSON.stringify({...this.config, [action.data.name]: action.data.value}));
+ // Disable opt-out if we're explicitly trying to enable
+ if (action.data.name === "enabled" && action.data.value) {
+ this.store.dispatch(ac.SetPref(PREF_OPT_OUT, false));
+ }
+
+ // Use the original string pref to then set a value instead of
+ // this.config which has some modifications
+ this.store.dispatch(ac.SetPref(PREF_CONFIG, JSON.stringify({
+ ...JSON.parse(this.store.getState().Prefs.values[PREF_CONFIG]),
+ [action.data.name]: action.data.value,
+ })));
break;
case at.DISCOVERY_STREAM_CONFIG_CHANGE:
// When the config pref changes, load or unload data as needed.
await this.onPrefChange();
break;
+ case at.DISCOVERY_STREAM_OPT_OUT:
+ this.store.dispatch(ac.SetPref(PREF_OPT_OUT, true));
+ break;
+ case at.DISCOVERY_STREAM_SPOC_IMPRESSION:
+ if (this.showSpocs) {
+ this.recordCampaignImpression(action.data.campaignId);
+
+ const cachedData = await this.cache.get() || {};
+ const {spocs} = cachedData;
+
+ this.store.dispatch(ac.AlsoToPreloaded({
+ type: at.DISCOVERY_STREAM_SPOCS_UPDATE,
+ data: {
+ lastUpdated: spocs.lastUpdated,
+ spocs: this.filterSpocs(spocs.data),
+ },
+ }));
+ }
+ break;
case at.UNINIT:
// When this feed is shutting down:
this.uninitPrefs();
break;
case at.PREF_CHANGED:
- // Check if spocs was disabled. Remove them if they were.
- if (action.data.name === "showSponsored") {
- await this.loadSpocs();
+ switch (action.data.name) {
+ case PREF_CONFIG:
+ case PREF_OPT_OUT:
+ // Clear the cached config and broadcast the newly computed value
+ this._prefCache.config = null;
+ this.store.dispatch(ac.BroadcastToContent({
+ type: at.DISCOVERY_STREAM_CONFIG_CHANGE,
+ data: this.config,
+ }));
+ break;
+ // Check if spocs was disabled. Remove them if they were.
+ case PREF_SHOW_SPONSORED:
+ await this.loadSpocs();
+ break;
}
break;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/TelemetryFeed.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/TelemetryFeed.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/TelemetryFeed.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/TelemetryFeed.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -622,6 +622,15 @@
this.setLoadTriggerInfo(port);
}
+ let timestamp = data.topsites_first_painted_ts;
+
+ if (timestamp &&
+ session.page === "about:home" &&
+ !HomePage.overridden &&
+ Services.prefs.getIntPref("browser.startup.page") === 1) {
+ aboutNewTabService.maybeRecordTopsitesPainted(timestamp);
+ }
+
Object.assign(session.perf, data);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/TopStoriesFeed.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/TopStoriesFeed.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/lib/TopStoriesFeed.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/lib/TopStoriesFeed.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -25,6 +25,7 @@
const MIN_DOMAIN_AFFINITIES_UPDATE_TIME = 12 * 60 * 60 * 1000; // 12 hours
const DEFAULT_RECS_EXPIRE_TIME = 60 * 60 * 1000; // 1 hour
const SECTION_ID = "topstories";
+const IMPRESSION_SOURCE = "TOP_STORIES";
const SPOC_IMPRESSION_TRACKING_PREF = "feeds.section.topstories.spoc.impressions";
const REC_IMPRESSION_TRACKING_PREF = "feeds.section.topstories.rec.impressions";
const OPTIONS_PREF = "feeds.section.topstories.options";
@@ -656,21 +657,27 @@
}
break;
case at.TELEMETRY_IMPRESSION_STATS: {
- const payload = action.data;
- const viewImpression = !("click" in payload || "block" in payload || "pocket" in payload);
- if (payload.tiles && viewImpression) {
- if (this.shouldShowSpocs()) {
- payload.tiles.forEach(t => {
- if (this.spocCampaignMap.has(t.id)) {
- this.recordCampaignImpression(this.spocCampaignMap.get(t.id));
- }
- });
- }
- if (this.personalized) {
- const topRecs = payload.tiles
- .filter(t => !this.spocCampaignMap.has(t.id))
- .map(t => t.id);
- this.recordTopRecImpressions(topRecs);
+ // We want to make sure we only track impressions from Top Stories,
+ // otherwise unexpected things that are not properly handled can happen.
+ // Example: Impressions from spocs on Discovery Stream can cause the
+ // Top Stories impressions pref to continuously grow, see bug #1523408
+ if (action.data.source === IMPRESSION_SOURCE) {
+ const payload = action.data;
+ const viewImpression = !("click" in payload || "block" in payload || "pocket" in payload);
+ if (payload.tiles && viewImpression) {
+ if (this.shouldShowSpocs()) {
+ payload.tiles.forEach(t => {
+ if (this.spocCampaignMap.has(t.id)) {
+ this.recordCampaignImpression(this.spocCampaignMap.get(t.id));
+ }
+ });
+ }
+ if (this.personalized) {
+ const topRecs = payload.tiles
+ .filter(t => !this.spocCampaignMap.has(t.id))
+ .map(t => t.id);
+ this.recordTopRecImpressions(topRecs);
+ }
}
}
break;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ach/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ach/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ach/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ach/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -203,3 +203,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Yab jami ayera
+section_menu_action_add_search_engine=Med Ingin me Yeny
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ar/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ar/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ar/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ar/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -90,7 +90,12 @@
# sidebar mozilla-central string for the panel that has preferences related to
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=محتوى فَيَرفُكس الرئيسي
-prefs_home_description=اختر المحتوى الذي تريد عرضه في شاشة فَيَرفُكس الرئيسية.
+prefs_home_description=اختر المحتوى الذي تريد عرضه في شاشة بداية فَيَرفُكس.
+
+prefs_content_discovery_header=شاشة بداية فَيَرفُكس
+prefs_content_discovery_description=تتيح لك ميزة ”اكتشاف المحتوى“ في صفحة بداية فَيَرفُكس رؤية مقالات عالية الجودة لها علاقة بما تتابع، تأتيك من أرجاء الوِب.
+prefs_content_discovery_button=عطّل اكتشاف المحتوى
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +149,6 @@
# end of the list of popular topic links.
pocket_read_even_more=اعرض المزيد من الأخبار
pocket_more_reccommendations=مقترحات أخرى
-pocket_learn_more=اطّلع على المزيد
pocket_how_it_works=آلية العمل
pocket_cta_button=نزِّل بوكِت
pocket_cta_text=احفظ القصص التي تحبّها في بوكِت، وزوّد عقلك بمقالات رائعة.
@@ -209,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=افتح القائمة
+section_menu_action_add_search_engine=أضِف محرك بحث
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/az/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/az/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/az/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/az/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menyunu aç
+section_menu_action_add_search_engine=Axtarış mühərriyi əlavə et
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/be/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/be/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/be/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/be/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Хатні экран Firefox
prefs_home_description=Выберыце пажаданае змесціва для хатняга экрана Firefox.
+
+prefs_content_discovery_header=Хатняя старонка Firefox
+prefs_content_discovery_description=Выяўленне змесціва на хатняй старонцы Firefox дазволіць вам знаходзіць высакаякасныя рэлевантныя артыкулы з усяго сеціва.
+prefs_content_discovery_button=Адключыць выяўленне змесціва
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +149,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Іншыя навіны
pocket_more_reccommendations=Больш рэкамендацый
-pocket_learn_more=Падрабязней
pocket_how_it_works=Як гэта працуе
pocket_cta_button=Атрымаць Pocket
pocket_cta_text=Захоўвайце ўлюбёныя гісторыі ў Pocket, і сілкуйце свой розум добрай чытанкай.
@@ -209,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Адкрыць меню
+section_menu_action_add_search_engine=Дадаць пашукавік
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bg/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bg/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bg/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bg/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -206,3 +206,4 @@
firstrun_continue_to_login=Продължаване
firstrun_skip_login=Пропускане
+section_menu_action_add_search_engine=Добавяне на търсеща машина
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bn-BD/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bn-BD/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bn-BD/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bn-BD/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=মেনু খুলুন
+section_menu_action_add_search_engine=অনুসন্ধান ইঞ্জিন যোগ
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bn-IN/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bn-IN/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/bn-IN/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/bn-IN/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=মেনু খুলুন
+section_menu_action_add_search_engine=অনুসন্ধান ইঞ্জিন যোগ করুন
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/br/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/br/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/br/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/br/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,9 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Endalc'had Degemer Firefox
prefs_home_description=Dibabit peseurt endalc'had a fell deoc'h kaout war ho skramm Firefox Degemer.
+
+prefs_content_discovery_header=Degemer Firefox
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +147,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Gwelet muioc'h a istorioù
pocket_more_reccommendations=Erbedadennoù ouzhpenn
-pocket_learn_more=Gouzout hiroc'h
pocket_how_it_works=Penaos ez a en-dro
pocket_cta_button=Staliañ Pocket
pocket_cta_text=Enrollit pennadoù a-zoare e Pocket ha magit ho spered gant lennadennoù boemus.
@@ -209,3 +211,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Digeriñ al lañser
+section_menu_action_add_search_engine=Ouzhpennañ ul lusker enklask
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ca/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ca/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ca/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ca/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Obre el menú
+section_menu_action_add_search_engine=Afegeix un motor de cerca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cak/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cak/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cak/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cak/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -93,6 +93,8 @@
prefs_home_description=Tacha' achike etamab'äl nawajo' pa ri Rutikirib'al Firefox ruwäch.
prefs_content_discovery_header=Rutikirib'al Firefox
+prefs_content_discovery_description=Content Discovery pa Rutikirib'al Firefox nuya' q'ij chawe richin ye'awïl nima'q taq cholna'oj ri nïm kejqalem pa ronojel ajk'amaya'l.
+prefs_content_discovery_button=Tichup Content Discovery
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
@@ -211,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Tijaq k'utüy samaj
+section_menu_action_add_search_engine=Titz'aqatisäx Kanob'äl
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cs/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cs/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cs/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cs/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Otevře nabídku
+section_menu_action_add_search_engine=Přidat vyhledávač
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cy/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cy/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/cy/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/cy/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Agor y ddewislen
+section_menu_action_add_search_engine=Ychwanegu Peiriant Chwilio
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/da/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/da/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/da/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/da/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -218,7 +218,7 @@
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
-firstrun_extra_legal_links=Ved at fortsætte godkender du vores {terms} og {privacy}.
+firstrun_extra_legal_links=Ved at fortsætte accepterer du vores {terms} og vores {privacy}.
firstrun_terms_of_service=tjenestevilkår
firstrun_privacy_notice=privatlivspolitik
@@ -227,3 +227,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Åbn menu
+section_menu_action_add_search_engine=Tilføj søgetjeneste
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/de/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/de/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/de/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/de/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menü öffnen
+section_menu_action_add_search_engine=Suchmaschine hinzufügen
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/dsb/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/dsb/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/dsb/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/dsb/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Meni wócyniś
+section_menu_action_add_search_engine=Pytnicu pśidaś
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/el/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/el/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/el/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/el/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -212,3 +212,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Άνοιγμα μενού
+section_menu_action_add_search_engine=Προσθήκη μηχανής αναζήτησης
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/en-CA/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/en-CA/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/en-CA/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/en-CA/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Open menu
+section_menu_action_add_search_engine=Add Search Engine
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/en-GB/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/en-GB/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/en-GB/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/en-GB/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Open menu
+section_menu_action_add_search_engine=Add Search Engine
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/eo/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/eo/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/eo/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/eo/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Malfermi menuon
+section_menu_action_add_search_engine=Aldoni serĉilon
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-AR/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-AR/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-AR/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-AR/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -206,10 +206,11 @@
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_extra_legal_links=Al proceder, acepta los {terms} y {privacy}.
firstrun_terms_of_service=Términos del servicio
-firstrun_privacy_notice=Anuncio de privacidad
+firstrun_privacy_notice=Nota de privacidad
firstrun_continue_to_login=Continuar
firstrun_skip_login=Saltear este paso
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú
+section_menu_action_add_search_engine=Agregar buscador
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-CL/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-CL/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-CL/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-CL/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -211,3 +211,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú
+section_menu_action_add_search_engine=Añadir motor de búsqueda
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-ES/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-ES/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-ES/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-ES/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -93,6 +93,7 @@
prefs_home_description=Seleccione el contenido que desea en la pantalla de inicio de Firefox.
prefs_content_discovery_header=Página de inicio de Firefox
+prefs_content_discovery_description=Content Discovery en la página de inicio de Firefox le permite descubrir artículos de alta calidad y relevantes de toda la web.
prefs_content_discovery_button=Desactivar Content Discovery
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
@@ -212,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú
+section_menu_action_add_search_engine=Añadir motor de búsqueda
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-MX/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-MX/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/es-MX/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/es-MX/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú
+section_menu_action_add_search_engine=Agregar motor de búsqueda
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/et/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/et/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/et/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/et/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Ava menüü
+section_menu_action_add_search_engine=Lisa otsingumootor
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/eu/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/eu/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/eu/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/eu/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Ireki menua
+section_menu_action_add_search_engine=Gehitu bilaketa-motorra
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fa/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fa/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fa/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fa/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -206,3 +206,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=باز کردن منو
+section_menu_action_add_search_engine=افزودن موتور جستوجو
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ff/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ff/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ff/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ff/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Uddit cuɓirgol
+section_menu_action_add_search_engine=Ɓeydu Masiŋ Njiilaw
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fi/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fi/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fi/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fi/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Avaa valikko
+section_menu_action_add_search_engine=Lisää hakukone
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fr/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fr/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fr/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fr/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -148,7 +148,7 @@
# end of the list of popular topic links.
pocket_read_even_more=Afficher plus d’articles
pocket_more_reccommendations=Plus de recommandations
-pocket_how_it_works=Mode d'emploi
+pocket_how_it_works=Mode d’emploi
pocket_cta_button=Installer Pocket
pocket_cta_text=Enregistrez les articles que vous aimez dans Pocket, et stimulez votre imagination avec des lectures fascinantes.
@@ -212,3 +212,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Ouvrir le menu
+section_menu_action_add_search_engine=Ajouter ce moteur de recherche
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fy-NL/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fy-NL/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/fy-NL/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/fy-NL/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Ynhâld fan Firefox-startside
prefs_home_description=Kies hokker ynhâld jo op jo Firefox-startside werjaan wolle.
+
+prefs_content_discovery_header=Firefox Home
+prefs_content_discovery_description=Fia Content Discovery op de Firefox-startside kinne jo relevante artikelen op it hiele web mei hege kwaliteit fine.
+prefs_content_discovery_button=Content Discovery útskeakelje
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +149,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Mear ferhalen besjen
pocket_more_reccommendations=Mear oanrekommandaasjes
-pocket_learn_more=Mear ynfo
pocket_how_it_works=Hoe it wurket
pocket_cta_button=Pocket brûke
pocket_cta_text=Bewarje de ferhalen dy't jo ynteressant fine yn Pocket, en stimulearje jo tinzen mei boeiende lêsstof.
@@ -209,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menu iepenje
+section_menu_action_add_search_engine=Sykmasine tafoegje
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gd/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gd/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gd/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gd/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Fosgail an clàr-taice
+section_menu_action_add_search_engine=Cuir einnsean-luirg ris
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gl/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gl/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gl/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gl/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menú
+section_menu_action_add_search_engine=Engadir buscador
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gn/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gn/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gn/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gn/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -211,3 +211,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Eike poravorãme
+section_menu_action_add_search_engine=Embojuaju jehekaha mongu’eha
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gu-IN/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gu-IN/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/gu-IN/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/gu-IN/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=મેનૂ ખોલો
+section_menu_action_add_search_engine=શોધ યંત્ર ઉમેરો
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/he/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/he/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/he/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/he/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -212,3 +212,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=פתיחת תפריט
+section_menu_action_add_search_engine=הוספת מנוע חיפוש
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hi-IN/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hi-IN/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hi-IN/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hi-IN/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -210,3 +210,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=मेन्यू खोलें
+section_menu_action_add_search_engine=सर्च इंजन जोड़े
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hr/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hr/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hr/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hr/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Firefox početni sadržaj
prefs_home_description=Odaberite koji sadržaj želite na vašoj Firefox početnoj stranici.
+
+prefs_content_discovery_header=Firefox početna stranica
+prefs_content_discovery_description=Otkrivanje sadržaja u Firefox početnoj stranici pomaže vam u otkrivanju visoko kvalitenih, relevantnih članaka diljem interneta.
+prefs_content_discovery_button=Uključite otkrivanje sadržaja
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -208,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Otvori izbornik
+section_menu_action_add_search_engine=Dodaj tražilicu
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hsb/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hsb/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hsb/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hsb/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Meni wočinić
+section_menu_action_add_search_engine=Pytawu přidać
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hu/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hu/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/hu/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/hu/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menü megnyitása
+section_menu_action_add_search_engine=Keresőszolgáltatás hozzáadása
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ia/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ia/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ia/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ia/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Aperir le menu
+section_menu_action_add_search_engine=Adder un motor de recerca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/id/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/id/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/id/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/id/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Buka menu
+section_menu_action_add_search_engine=Tambahkan Mesin Pencari
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/is/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/is/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/is/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/is/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,10 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Upphafssíða Firefox
prefs_home_description=Veldu hvaða efni þú vilt á Firefox heimaskjánum þínum.
+
+prefs_content_discovery_header=Upphafssíða Firefox
+prefs_content_discovery_button=Slökkva á efnisveitu
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -208,3 +212,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Opna valmynd
+section_menu_action_add_search_engine=Bæta við leitarvél
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/it/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/it/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/it/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/it/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -113,3 +113,4 @@
firstrun_continue_to_login=Continua
firstrun_skip_login=Ignora questo passaggio
context_menu_title=Apri menu
+section_menu_action_add_search_engine=Aggiungi motore di ricerca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ja/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ja/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ja/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ja/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=メニューを開きます
+section_menu_action_add_search_engine=検索エンジンを追加
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ja-JP-mac/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ja-JP-mac/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ja-JP-mac/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ja-JP-mac/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=メニューを開きます
+section_menu_action_add_search_engine=検索エンジンを追加
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ka/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ka/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ka/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ka/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=მენიუს გახსნა
+section_menu_action_add_search_engine=საძიებო სისტემის დამატება
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/kab/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/kab/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/kab/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/kab/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -93,6 +93,7 @@
prefs_home_description=Fren agbur i tebɣiḍ deg ugdil agejdan Firefox.
prefs_content_discovery_header=Asebter agejdan Firefox
+prefs_content_discovery_button=Sens asnirem n ubur
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
@@ -211,3 +212,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Ldi umuɣ
+section_menu_action_add_search_engine=Rnu amsedday n unadi
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/kk/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/kk/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/kk/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/kk/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Мәзірді ашу
+section_menu_action_add_search_engine=Іздеу жүйесін қосу
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ko/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ko/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ko/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ko/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -93,6 +93,8 @@
prefs_home_description=Firefox 홈 화면에 나올 콘텐츠를 선택하세요.
prefs_content_discovery_header=Firefox 홈
+prefs_content_discovery_description=Firefox 홈의 콘텐츠 탐색 기능을 사용하면 웹에 있는 고품질의 관련 문서를 탐색할 수 있습니다.
+prefs_content_discovery_button=콘텐츠 탐색 끄기
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
@@ -211,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=메뉴 열기
+section_menu_action_add_search_engine=검색 엔진 추가
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lij/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lij/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lij/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lij/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
firstrun_continue_to_login=Continoa
firstrun_skip_login=Sata sto passo
+section_menu_action_add_search_engine=Azonzi motô de riçerca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lo/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lo/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lo/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lo/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -207,3 +207,4 @@
firstrun_continue_to_login=ສືບຕໍ່
firstrun_skip_login=ຂ້າມຂັ້ນຕອນນີ້
+section_menu_action_add_search_engine=ເພີ່ມເຄື່ອງມືການຊອກຫາ
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lt/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lt/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lt/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lt/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Atverti meniu
+section_menu_action_add_search_engine=Pridėti ieškyklę
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ltg/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ltg/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ltg/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ltg/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -202,3 +202,4 @@
firstrun_continue_to_login=Turpynōt
firstrun_skip_login=Izlaist itū sūli
+section_menu_action_add_search_engine=Daīvīnōt mekleitōji
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lv/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lv/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/lv/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/lv/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Atvērt izvēlni
+section_menu_action_add_search_engine=Pievienot meklētāju
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/mr/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/mr/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/mr/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/mr/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,9 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=फायरफॉक्स होम वरील मजकूर
prefs_home_description=आपल्या फायरफॉक्सचा मुख्यपृष्ठवर आपल्याला कोणती माहिती पाहिजे ते निवडा.
+
+prefs_content_discovery_header=Firefox मुख्यपृष्ठ
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -143,8 +146,9 @@
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=अधिक कथा पहा
-
-pocket_learn_more=अधिक जाणा
+pocket_more_reccommendations=अधिक शिफारसी
+pocket_how_it_works=हे कसे कार्य करते
+pocket_cta_button=Pocket मिळवा
highlights_empty_state=ब्राउझिंग सुरू करा, आणि आम्ही आपल्याला इथे आपण अलीकडील भेट दिलेले किंवा वाचनखूण लावलेले उत्कृष्ठ लेख, व्हिडिओ, आणि इतर पृष्ठांपैकी काही दाखवू.
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
@@ -193,7 +197,6 @@
firstrun_form_sub_header=Firefox Sync वर सुरू ठेवण्यासाठी
firstrun_email_input_placeholder=ईमेल
-
firstrun_invalid_input=वैध ईमेल आवश्यक
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@@ -204,3 +207,7 @@
firstrun_continue_to_login=पुढे चला
firstrun_skip_login=ही पायरी वगळा
+
+# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
+context_menu_title=मेनु उघडा
+section_menu_action_add_search_engine=शोध इंजीन जोडा
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ms/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ms/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ms/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ms/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Buka menu
+section_menu_action_add_search_engine=Tambah Enjin Carian
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nb-NO/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nb-NO/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nb-NO/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nb-NO/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Åpne meny
+section_menu_action_add_search_engine=Legg til søkemotor
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nl/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nl/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nl/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nl/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menu openen
+section_menu_action_add_search_engine=Zoekmachine toevoegen
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nn-NO/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nn-NO/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/nn-NO/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/nn-NO/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,9 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Innhald Firefox-startside
prefs_home_description=Vel kva for innhald du vil ha på Firefox-startsida di.
+
+prefs_content_discovery_header=Firefox startside
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +147,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Vis fleire saker
pocket_more_reccommendations=Fleire tilrådingar
-pocket_learn_more=Les meir
pocket_how_it_works=Korleis det fungerar
pocket_cta_button=Last ned Pocket
pocket_cta_text=Lagre artiklane du synest er interessante i Pocket, og stimuler tankane dine med fasinerande lesemateriell.
@@ -209,3 +211,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Opne meny
+section_menu_action_add_search_engine=Legg til søkjemotor
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/oc/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/oc/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/oc/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/oc/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -207,3 +207,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Dobrir lo menú
+section_menu_action_add_search_engine=Apondre un motor de recèrca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pa-IN/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pa-IN/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pa-IN/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pa-IN/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -90,6 +90,9 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਪੰਨਾ
prefs_home_description=ਉਹ ਸਮੱਗਰੀ ਚੁਣੋ ਜੋ ਤੁਸੀਂ ਆਪਣੇ ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਪੰਨੇ 'ਤੇ ਚਾਹੁੰਦੇ ਹੋ।
+
+prefs_content_discovery_header=ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਸਫ਼ਾ
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -97,7 +100,7 @@
prefs_search_header=ਵੈੱਬ ਖੋਜ
prefs_topsites_description=ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੀਆਂ ਸਾਈਟਾਂ
prefs_topstories_description2=ਸਮੁੱਚੇ ਵੈੱਬ ਤੋਂ ਸ਼ਾਨਦਾਰ ਸਮੱਗਰੀ, ਤੁਹਾਡੇ ਲਈ ਵਿਅਕਤੀਗਤ ਹੈ
-prefs_topstories_options_sponsored_label=ਪ੍ਰਾਯੋਜਿਤ ਕਹਾਣੀਆਂ
+prefs_topstories_options_sponsored_label=ਸਪਾਂਸਰ ਕੀਤੀਆਂ ਕਹਾਣੀਆਂ
prefs_topstories_sponsored_learn_more=ਹੋਰ ਜਾਣੋ
prefs_highlights_description=ਉਹਨਾਂ ਸਾਈਟਾਂ ਦੀ ਚੋਣ ਕਰੋ ਜੋ ਤੁਸੀਂ ਸੁਰੱਖਿਅਤ ਜਾਂ ਵਿਜ਼ਿਟ ਕੀਤੀ ਹੈ
prefs_highlights_options_visited_label=ਵੇਖੇ ਗਏ ਸਫੇ
@@ -129,7 +132,7 @@
topsites_form_url_placeholder=ਕੋਈ URL ਲਿਖੋ ਜਾਂ ਚੇਪੋ
topsites_form_use_image_link=ਇੱਕ ਕਸਟਮ ਚਿੱਤਰ ਵਰਤੋ…
# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
-topsites_form_preview_button=ਪੂਰਵ ਦਰਸ਼ਨ
+topsites_form_preview_button=ਝਲਕ
topsites_form_add_button=ਜੋੜੋ
topsites_form_save_button=ਸੰਭਾਲੋ
topsites_form_cancel_button=ਰੱਦ ਕਰੋ
@@ -143,7 +146,6 @@
# end of the list of popular topic links.
pocket_read_even_more=ਹੋਰ ਕਹਾਣੀਆਂ ਵੇਖੋ
pocket_more_reccommendations=ਹੋਰ ਸਿਫਾਰਸ਼ਾਂ
-pocket_learn_more=ਹੋਰ ਸਿੱਖੋ
pocket_how_it_works=ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦੀ ਹੈ
pocket_cta_button=ਪਾਕੇਟ ਲਵੋ
@@ -170,7 +172,7 @@
section_menu_action_remove_section=ਸੈਕਸ਼ਨ ਹਟਾਓ
section_menu_action_collapse_section=ਸੈਕਸ਼ਨ ਨੂੰ ਸਮੇਟੋ
section_menu_action_expand_section=ਸੈਕਸ਼ਨ ਦੀ ਫੈਲਾਓ
-section_menu_action_manage_section=ਸੈਕਸ਼ਨ ਦਾ ਪ੍ਰਬੰਧ ਕਰੋ
+section_menu_action_manage_section=ਸੈਕਸ਼ਨ ਦਾ ਬੰਦੋਬਸਤ
section_menu_action_manage_webext=ਇਕਸਟੈਨਸ਼ਨਾਂ ਦਾ ਇੰਤਜ਼ਾਮ
section_menu_action_add_topsite=ਚੋਟੀ ਦੀਆਂ ਸਾਈਟਾਂ ਜੋੜੋ
section_menu_action_add_search_engine=ਖੋਜ ਇੰਜਣ ਜੋੜੋ
@@ -204,3 +206,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=ਮੇਨੂ ਖੋਲ੍ਹੋ
+section_menu_action_add_search_engine=ਖੋਜ ਇੰਜਣ ਜੋੜੋ
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pl/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pl/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pl/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pl/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -125,3 +125,4 @@
firstrun_skip_login=Pomiń
context_menu_title=Otwórz menu
+section_menu_action_add_search_engine=Dodaj wyszukiwarkę
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pt-BR/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pt-BR/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pt-BR/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pt-BR/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -100,7 +100,7 @@
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
prefs_section_rows_option={num} linha;{num} linhas
-prefs_search_header=Pesquisa na web
+prefs_search_header=Pesquisar na web
prefs_topsites_description=Os sites que você mais visita
prefs_topstories_description2=Os melhores conteúdos disponíveis na Web, personalizados pra você
prefs_topstories_options_sponsored_label=Histórias patrocinadas
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menu
+section_menu_action_add_search_engine=Adicionar mecanismo de busca
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pt-PT/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pt-PT/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/pt-PT/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/pt-PT/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Abrir menu
+section_menu_action_add_search_engine=Adicionar motor de pesquisa
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/rm/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/rm/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/rm/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/rm/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Avrir il menu
+section_menu_action_add_search_engine=Agiuntar questa maschina da tschertgar
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ro/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ro/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ro/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ro/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Conținutul paginii de start Firefox
prefs_home_description=Alege ce conținut vrei pe ecranul de start Firefox.
+
+prefs_content_discovery_header=Pagina de start Firefox
+prefs_content_discovery_description=Descoperirea de conținut din pagina de start Firefox îți permite să descoperi articole relevante de calitate înaltă de pe web.
+prefs_content_discovery_button=Dezactivează descoperirea de conținut
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +149,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Vezi mai multe articole
pocket_more_reccommendations=Mai multe recomandări
-pocket_learn_more=Află mai multe
pocket_how_it_works=Cum funcționează
pocket_cta_button=Obține Pocket
pocket_cta_text=Salvează în Pocket articolele care ți-au plăcut și hrănește-ți mintea cu lecturi fascinante.
@@ -209,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Deschide meniul
+section_menu_action_add_search_engine=Adaugă motor de căutare
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ru/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ru/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ru/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ru/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Открыть меню
+section_menu_action_add_search_engine=Добавить поисковую систему
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sk/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sk/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sk/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sk/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Otvorí ponuku
+section_menu_action_add_search_engine=Pridať vyhľadávací modul
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sl/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sl/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sl/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sl/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Odpri meni
+section_menu_action_add_search_engine=Dodaj iskalnik
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sq/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sq/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sq/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sq/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Lëndë Firefox Home
prefs_home_description=Zgjidhni ç’lëndë doni në skenën tuaj Firefox.
+
+prefs_content_discovery_header=Kreu i Firefox-it
+prefs_content_discovery_description=Zbulimi i Lëndës në Kreun e Firefox-it ju lejon të zbuloni në internet artikuj të cilësisë së lartë, dhe afër interesave tuaja.
+prefs_content_discovery_button=Çaktivizoje Zbulimin e Lëndës
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -144,7 +149,6 @@
# end of the list of popular topic links.
pocket_read_even_more=Shihni Më Tepër Histori
pocket_more_reccommendations=Më Tepër Rekomandime
-pocket_learn_more=Mësoni Më Tepër
pocket_how_it_works=Si funksionon
pocket_cta_button=Merreni Pocket-in
pocket_cta_text=Ruajini në Pocket shkrimet që doni, dhe ushqejeni mendjen me lexime të mahnitshme.
@@ -209,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Hape menunë
+section_menu_action_add_search_engine=Shtoni Motor Kërkimesh
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sr/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sr/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sr/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sr/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -91,6 +91,11 @@
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Садржај Firefox почетне странице
prefs_home_description=Изаберите садржај који желите видети на вашој Firefox почетној страници.
+
+prefs_content_discovery_header=Firefox почетна
+prefs_content_discovery_description=Откривање садржаја на Firefox почетној вам омогућава да добијете веома квалитетне и вама значајне чланке са целог веба.
+prefs_content_discovery_button=Искључи откривање садржаја
+
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@@ -143,9 +148,8 @@
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Погледајте још прича
-
pocket_more_reccommendations=Још препорука
-pocket_learn_more=Сазнајте више
+pocket_how_it_works=Како ово ради
pocket_cta_button=Преузмите Pocket
pocket_cta_text=Сачувајте приче које волите у Pocket и напуните свој ум фасцинантним причама.
@@ -196,7 +200,6 @@
firstrun_form_sub_header=да бисте наставили на Firefox Sync.
firstrun_email_input_placeholder=Адреса е-поште
-
firstrun_invalid_input=Исправна е-пошта се захтева
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
@@ -207,3 +210,7 @@
firstrun_continue_to_login=Настави
firstrun_skip_login=Прескочи овај корак
+
+# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
+context_menu_title=Отвори мени
+section_menu_action_add_search_engine=Додај претраживач
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sv-SE/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sv-SE/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/sv-SE/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/sv-SE/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Öppna meny
+section_menu_action_add_search_engine=Lägg till sökmotor
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/th/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/th/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/th/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/th/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -207,3 +207,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=เปิดเมนู
+section_menu_action_add_search_engine=เพิ่มเครื่องมือค้นหา
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/tl/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/tl/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/tl/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/tl/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -208,3 +208,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Buksan ang menu
+section_menu_action_add_search_engine=Magdagdag ng Search Engine
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/tr/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/tr/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/tr/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/tr/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Menüyü aç
+section_menu_action_add_search_engine=Arama motoru ekle
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/uk/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/uk/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/uk/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/uk/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -209,3 +209,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Відкрити меню
+section_menu_action_add_search_engine=Додати засіб пошуку
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ur/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ur/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/ur/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/ur/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -187,3 +187,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=مینیو کھولیں
+section_menu_action_add_search_engine=تلاش انجن کا اضافہ کریں
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/vi/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/vi/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/vi/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/vi/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Mở bảng chọn
+section_menu_action_add_search_engine=Thêm công cụ tìm kiếm
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/zh-CN/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/zh-CN/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/zh-CN/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/zh-CN/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=打开菜单
+section_menu_action_add_search_engine=添加搜索引擎
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/zh-TW/strings.properties firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/zh-TW/strings.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/locales-src/zh-TW/strings.properties 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/locales-src/zh-TW/strings.properties 2019-02-07 12:50:25.000000000 +0000
@@ -213,3 +213,4 @@
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=開啟選單
+section_menu_action_add_search_engine=新增搜尋引擎
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/nsIAboutNewTabService.idl firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/nsIAboutNewTabService.idl
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/nsIAboutNewTabService.idl 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/nsIAboutNewTabService.idl 2019-02-07 12:50:25.000000000 +0000
@@ -64,4 +64,10 @@
* overridden attribute to false.
*/
void resetNewTabURL();
+
+ /**
+ * Records a scalar metric for how long it takes to pain Top Sites, this will
+ * only record the first timestamp, all the subsequent calls will be ignored.
+ */
+ void maybeRecordTopsitesPainted(in unsigned long long timestamp);
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/package.json firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/package.json
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/package.json 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/package.json 2019-02-07 12:50:25.000000000 +0000
@@ -22,8 +22,8 @@
"babel-core": "6.26.3",
"babel-eslint": "10.0.1",
"babel-loader": "7.1.4",
- "babel-plugin-jsm-to-commonjs": "0.4.0",
- "babel-plugin-jsm-to-esmodules": "0.4.0",
+ "babel-plugin-jsm-to-commonjs": "0.5.0",
+ "babel-plugin-jsm-to-esmodules": "0.6.0",
"babel-plugin-transform-async-generator-functions": "6.24.1",
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-async-to-module-method": "6.24.1",
@@ -39,7 +39,7 @@
"eslint": "5.9.0",
"eslint-plugin-import": "2.14.0",
"eslint-plugin-json": "1.2.1",
- "eslint-plugin-mozilla": "0.16.3",
+ "eslint-plugin-mozilla": "1.1.0",
"eslint-plugin-no-unsanitized": "3.0.2",
"eslint-plugin-promise": "4.0.1",
"eslint-plugin-react": "7.11.1",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/package-lock.json firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/package-lock.json
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/package-lock.json 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/package-lock.json 2019-02-07 12:50:25.000000000 +0000
@@ -1055,15 +1055,15 @@
}
},
"babel-plugin-jsm-to-commonjs": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-commonjs/-/babel-plugin-jsm-to-commonjs-0.4.0.tgz",
- "integrity": "sha1-eBgITBlMWsH/yUokv6Dtxzfxi/s=",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-commonjs/-/babel-plugin-jsm-to-commonjs-0.5.0.tgz",
+ "integrity": "sha512-2+84X/eEYxs+ig3ZVfQhcnvFrYPKKCYmdTs6RZp00MKoIOZ2zET3+mK7gyO6IN922oIv6NGrizOtSEJqLxl/RA==",
"dev": true
},
"babel-plugin-jsm-to-esmodules": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.4.0.tgz",
- "integrity": "sha1-UJLJUW/YX7UBGMOPFG4MyA36d8k=",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
+ "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
"dev": true
},
"babel-plugin-syntax-async-functions": {
@@ -3493,14 +3493,50 @@
}
},
"eslint-plugin-mozilla": {
- "version": "0.16.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-mozilla/-/eslint-plugin-mozilla-0.16.3.tgz",
- "integrity": "sha512-ZvseeV3flenYTZP/B6SUTnwmfMkW99o0FNm3DaM4ZlyahTGXHepmAEPLkwIvY5eKrcRmo8On+kNmUqelDmxwKw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mozilla/-/eslint-plugin-mozilla-1.1.0.tgz",
+ "integrity": "sha512-LmmwR+/B5MDC/50aGIqMsuRnGBSLjBBHTIfm9IawLap5GHwOWN7BcP0x4AFiWwgUQMr+PScQniW5W+olFLuk+Q==",
"dev": true,
"requires": {
- "htmlparser2": "3.9.2",
+ "htmlparser2": "3.10.0",
"ini-parser": "0.0.2",
"sax": "1.2.4"
+ },
+ "dependencies": {
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.0.6"
+ }
+ },
+ "readable-stream": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+ "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"eslint-plugin-no-unsanitized": {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ach/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ach/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ach/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ach/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Lo bute",
"section_menu_action_manage_webext": "Manage Extension",
"section_menu_action_add_topsite": "Med Kakube maloyo",
- "section_menu_action_add_search_engine": "Med ingin me yeny",
+ "section_menu_action_add_search_engine": "Med Ingin me Yeny",
"section_menu_action_move_up": "Kob Malo",
"section_menu_action_move_down": "Kob Piny",
"section_menu_action_privacy_notice": "Ngec me mung",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ar/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ar/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ar/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ar/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -39,10 +39,10 @@
"section_disclaimer_topstories_linktext": "اطلع على طريقة عملها.",
"section_disclaimer_topstories_buttontext": "حسنًا، فهمت",
"prefs_home_header": "محتوى فَيَرفُكس الرئيسي",
- "prefs_home_description": "اختر المحتوى الذي تريد عرضه في شاشة فَيَرفُكس الرئيسية.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_home_description": "اختر المحتوى الذي تريد عرضه في شاشة بداية فَيَرفُكس.",
+ "prefs_content_discovery_header": "شاشة بداية فَيَرفُكس",
+ "prefs_content_discovery_description": "تتيح لك ميزة ”اكتشاف المحتوى“ في صفحة بداية فَيَرفُكس رؤية مقالات عالية الجودة لها علاقة بما تتابع، تأتيك من أرجاء الوِب.",
+ "prefs_content_discovery_button": "عطّل اكتشاف المحتوى",
"prefs_section_rows_option": "صف واحد;صفان;{num} صفوف;{num} صفا;{num} صف;لا صفوف",
"prefs_search_header": "ابحث في الوِب",
"prefs_topsites_description": "أكثر المواقع المزارة",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "تنويه الخصوصية",
"firstrun_continue_to_login": "تابِع",
"firstrun_skip_login": "تجاوز هذه الخطوة",
- "context_menu_title": "افتح القائمة",
- "pocket_learn_more": "اطّلع على المزيد"
+ "context_menu_title": "افتح القائمة"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/be/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/be/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/be/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/be/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "Зразумела",
"prefs_home_header": "Хатні экран Firefox",
"prefs_home_description": "Выберыце пажаданае змесціва для хатняга экрана Firefox.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_header": "Хатняя старонка Firefox",
+ "prefs_content_discovery_description": "Выяўленне змесціва на хатняй старонцы Firefox дазволіць вам знаходзіць высакаякасныя рэлевантныя артыкулы з усяго сеціва.",
+ "prefs_content_discovery_button": "Адключыць выяўленне змесціва",
"prefs_section_rows_option": "{num} радок;{num} радкі;{num} радкоў",
"prefs_search_header": "Пошук у сеціве",
"prefs_topsites_description": "Сайты, якія вы наведваеце найчасцей",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "паведамленнем аб прыватнасці",
"firstrun_continue_to_login": "Працягнуць",
"firstrun_skip_login": "Прапусціць гэты крок",
- "context_menu_title": "Адкрыць меню",
- "pocket_learn_more": "Падрабязней"
+ "context_menu_title": "Адкрыць меню"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/bn-BD/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/bn-BD/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/bn-BD/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/bn-BD/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "সেকশনটি পরিচালনা করুন",
"section_menu_action_manage_webext": "এক্সটেনসন ব্যবহার করুন",
"section_menu_action_add_topsite": "টপ সাইট যোগ করুন",
- "section_menu_action_add_search_engine": "অনুসন্ধান ইঞ্জিন যোগ করুন",
+ "section_menu_action_add_search_engine": "অনুসন্ধান ইঞ্জিন যোগ",
"section_menu_action_move_up": "উপরে উঠাও",
"section_menu_action_move_down": "নীচে নামাও",
"section_menu_action_privacy_notice": "গোপনীয়তা নীতি",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/bn-IN/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/bn-IN/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/bn-IN/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/bn-IN/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "বিভাগটি পরিচালনা করুন",
"section_menu_action_manage_webext": "এক্সটেনশনটি পরিচালনা করুন",
"section_menu_action_add_topsite": "উপরে সাইট যোগ করুন",
- "section_menu_action_add_search_engine": "অনুসন্ধানের ইঞ্জিন যোগ করুন",
+ "section_menu_action_add_search_engine": "অনুসন্ধান ইঞ্জিন যোগ করুন",
"section_menu_action_move_up": "উপরে স্থানান্তর",
"section_menu_action_move_down": "নীচে স্থানান্তর",
"section_menu_action_privacy_notice": "গোপনীয়তা সংক্রান্ত নীতি",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/br/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/br/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/br/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/br/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,7 +40,7 @@
"section_disclaimer_topstories_buttontext": "Mat eo, komprenet am eus",
"prefs_home_header": "Endalc'had Degemer Firefox",
"prefs_home_description": "Dibabit peseurt endalc'had a fell deoc'h kaout war ho skramm Firefox Degemer.",
- "prefs_content_discovery_header": "Firefox Home",
+ "prefs_content_discovery_header": "Degemer Firefox",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_section_rows_option": "{num} renk;{num} renk;{num} renk;{num} a renkoù;{num} renk",
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Merañ ar gevrenn",
"section_menu_action_manage_webext": "Merañ an askouezh",
"section_menu_action_add_topsite": "Ouzhpennañ ul lec'hienn gwellañ din",
- "section_menu_action_add_search_engine": "Ouzhpennañ ul lusker klask",
+ "section_menu_action_add_search_engine": "Ouzhpennañ ul lusker enklask",
"section_menu_action_move_up": "Dilec'hiañ etrezek ar c'hrec'h",
"section_menu_action_move_down": "Dilec'hiañ etrezek an traoñ",
"section_menu_action_privacy_notice": "Evezhiadennoù a-fet buhez prevez",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "evezhiadennoù a-fet buhez prevez",
"firstrun_continue_to_login": "Kenderc'hel",
"firstrun_skip_login": "Tremen ar bazenn-mañ",
- "context_menu_title": "Digeriñ al lañser",
- "pocket_learn_more": "Gouzout hiroc'h"
+ "context_menu_title": "Digeriñ al lañser"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/cak/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/cak/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/cak/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/cak/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,8 +41,8 @@
"prefs_home_header": "Etamab'äl pa ri Rutikirib'al Firefox",
"prefs_home_description": "Tacha' achike etamab'äl nawajo' pa ri Rutikirib'al Firefox ruwäch.",
"prefs_content_discovery_header": "Rutikirib'al Firefox",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_description": "Content Discovery pa Rutikirib'al Firefox nuya' q'ij chawe richin ye'awïl nima'q taq cholna'oj ri nïm kejqalem pa ronojel ajk'amaya'l.",
+ "prefs_content_discovery_button": "Tichup Content Discovery",
"prefs_section_rows_option": "{num} cholaj;{num} taq cholaj",
"prefs_search_header": "Ajk'amaya'l Kanoxïk",
"prefs_topsites_description": "Taq ruxaq yalan ye'atz'ët",
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Tinuk'samajïx Peraj",
"section_menu_action_manage_webext": "Tinuk'samajïx K'amal",
"section_menu_action_add_topsite": "Titz'aqatisäx K'ïy Ruwinaq Ruxaq K'amaya'l",
- "section_menu_action_add_search_engine": "Titz'aqatisäx kanob'äl",
+ "section_menu_action_add_search_engine": "Titz'aqatisäx Kanob'äl",
"section_menu_action_move_up": "Tijotob'äx",
"section_menu_action_move_down": "Tiqasäx qa",
"section_menu_action_privacy_notice": "Ichinan na'oj",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/da/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/da/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/da/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/da/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -105,7 +105,7 @@
"firstrun_form_sub_header": "for at fortsætte til Firefox Sync.",
"firstrun_email_input_placeholder": "Mailadresse",
"firstrun_invalid_input": "En gyldig mailadresse er påkrævet",
- "firstrun_extra_legal_links": "Ved at fortsætte godkender du vores {terms} og {privacy}.",
+ "firstrun_extra_legal_links": "Ved at fortsætte accepterer du vores {terms} og vores {privacy}.",
"firstrun_terms_of_service": "tjenestevilkår",
"firstrun_privacy_notice": "privatlivspolitik",
"firstrun_continue_to_login": "Fortsæt",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-AR/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-AR/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-AR/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-AR/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -107,7 +107,7 @@
"firstrun_invalid_input": "Se requiere un correo electrónico válido",
"firstrun_extra_legal_links": "Al proceder, acepta los {terms} y {privacy}.",
"firstrun_terms_of_service": "Términos del servicio",
- "firstrun_privacy_notice": "Anuncio de privacidad",
+ "firstrun_privacy_notice": "Nota de privacidad",
"firstrun_continue_to_login": "Continuar",
"firstrun_skip_login": "Saltear este paso",
"context_menu_title": "Abrir menú",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-CL/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-CL/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-CL/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-CL/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,7 +41,7 @@
"prefs_home_header": "Contenido de la página de inicio de Firefox",
"prefs_home_description": "Elige qué contenido quieres en tu pantalla de inicio de Firefox.",
"prefs_content_discovery_header": "Inicio de Firefox",
- "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos relevantes de alta calidad en toda la web.",
+ "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos de alta calidad y relevantes de toda la web.",
"prefs_content_discovery_button": "Desactivar Content Discovery",
"prefs_section_rows_option": "{num} fila;{num} filas",
"prefs_search_header": "Búsqueda web",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-ES/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-ES/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-ES/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-ES/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,7 +41,7 @@
"prefs_home_header": "Contenido de la página de inicio de Firefox",
"prefs_home_description": "Seleccione el contenido que desea en la pantalla de inicio de Firefox.",
"prefs_content_discovery_header": "Página de inicio de Firefox",
- "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos relevantes de alta calidad en toda la web.",
+ "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos de alta calidad y relevantes de toda la web.",
"prefs_content_discovery_button": "Desactivar Content Discovery",
"prefs_section_rows_option": "{num} fila;{num} filas",
"prefs_search_header": "Búsqueda web",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-MX/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-MX/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/es-MX/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/es-MX/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,7 +41,7 @@
"prefs_home_header": "Contenido de la página de inicio de Firefox",
"prefs_home_description": "Selecciona el contenido que desea en la pantalla de inicio de Firefox.",
"prefs_content_discovery_header": "Página de inicio de Firefox",
- "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos relevantes de alta calidad en toda la web.",
+ "prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos de alta calidad y relevantes de toda la web.",
"prefs_content_discovery_button": "Desactivar Content Discovery",
"prefs_section_rows_option": "{num} fila;{num} filas",
"prefs_search_header": "Búsqueda web",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ff/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ff/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ff/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ff/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Feewnu taƴre",
"section_menu_action_manage_webext": "Yiil Timmitere",
"section_menu_action_add_topsite": "Ɓeydu lowre rowrowre",
- "section_menu_action_add_search_engine": "Ɓeydu yiylorde",
+ "section_menu_action_add_search_engine": "Ɓeydu Masiŋ Njiilaw",
"section_menu_action_move_up": "Dirtin dow",
"section_menu_action_move_down": "Dirtin les",
"section_menu_action_privacy_notice": "Tintinal sirlu",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/fr/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/fr/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/fr/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/fr/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -78,7 +78,7 @@
"pocket_read_more": "Sujets populaires :",
"pocket_read_even_more": "Afficher plus d’articles",
"pocket_more_reccommendations": "Plus de recommandations",
- "pocket_how_it_works": "Mode d'emploi",
+ "pocket_how_it_works": "Mode d’emploi",
"pocket_cta_button": "Installer Pocket",
"pocket_cta_text": "Enregistrez les articles que vous aimez dans Pocket, et stimulez votre imagination avec des lectures fascinantes.",
"highlights_empty_state": "Commencez à naviguer puis nous afficherons des articles, des vidéos ou d’autres pages que vous avez récemment visités ou ajoutés aux marque-pages.",
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Gérer la section",
"section_menu_action_manage_webext": "Gérer l’extension",
"section_menu_action_add_topsite": "Ajouter un site populaire",
- "section_menu_action_add_search_engine": "Ajouter un moteur de recherche",
+ "section_menu_action_add_search_engine": "Ajouter ce moteur de recherche",
"section_menu_action_move_up": "Déplacer vers le haut",
"section_menu_action_move_down": "Déplacer vers le bas",
"section_menu_action_privacy_notice": "Politique de confidentialité",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/fy-NL/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/fy-NL/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/fy-NL/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/fy-NL/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,8 +41,8 @@
"prefs_home_header": "Ynhâld fan Firefox-startside",
"prefs_home_description": "Kies hokker ynhâld jo op jo Firefox-startside werjaan wolle.",
"prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_description": "Fia Content Discovery op de Firefox-startside kinne jo relevante artikelen op it hiele web mei hege kwaliteit fine.",
+ "prefs_content_discovery_button": "Content Discovery útskeakelje",
"prefs_section_rows_option": "{num} rige;{num} rigen",
"prefs_search_header": "Sykje op it web",
"prefs_topsites_description": "De troch jo meast besochte websites",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "Privacyferklearring",
"firstrun_continue_to_login": "Trochgean",
"firstrun_skip_login": "Dizze stap oerslaan",
- "context_menu_title": "Menu iepenje",
- "pocket_learn_more": "Mear ynfo"
+ "context_menu_title": "Menu iepenje"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/gn/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/gn/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/gn/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/gn/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Eñagareko vorére",
"section_menu_action_manage_webext": "Emongu'e jepysokue",
"section_menu_action_add_topsite": "Embojuaju Tenda ojeikeveha",
- "section_menu_action_add_search_engine": "Embojuaju hekaha",
+ "section_menu_action_add_search_engine": "Embojuaju jehekaha mongu’eha",
"section_menu_action_move_up": "Jupi",
"section_menu_action_move_down": "Guejy",
"section_menu_action_privacy_notice": "Marandu’i ñemiguáva",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/gu-IN/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/gu-IN/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/gu-IN/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/gu-IN/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "વિભાગ સંચાલિત કરો",
"section_menu_action_manage_webext": "એક્સ્ટેંશનનો વહીવટ કરો",
"section_menu_action_add_topsite": "ટોચની સાઇટ ઉમેરો",
- "section_menu_action_add_search_engine": "શોધ એંજીન ઉમેરો",
+ "section_menu_action_add_search_engine": "શોધ યંત્ર ઉમેરો",
"section_menu_action_move_up": "ઉપર કરો",
"section_menu_action_move_down": "નીચે કરો",
"section_menu_action_privacy_notice": "ખાનગી સૂચના",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/hi-IN/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/hi-IN/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/hi-IN/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/hi-IN/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "अनुभाग प्रबंधित करें",
"section_menu_action_manage_webext": "विस्तारक प्रबंधित करें",
"section_menu_action_add_topsite": "शीर्ष साइट जोड़ें",
- "section_menu_action_add_search_engine": "खोज ईंजन जोड़ें",
+ "section_menu_action_add_search_engine": "सर्च इंजन जोड़े",
"section_menu_action_move_up": "ऊपर जाएँ",
"section_menu_action_move_down": "नीचे जाएँ",
"section_menu_action_privacy_notice": "गोपनीयता नीति",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/hr/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/hr/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/hr/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/hr/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "U redu, razumijem",
"prefs_home_header": "Firefox početni sadržaj",
"prefs_home_description": "Odaberite koji sadržaj želite na vašoj Firefox početnoj stranici.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_header": "Firefox početna stranica",
+ "prefs_content_discovery_description": "Otkrivanje sadržaja u Firefox početnoj stranici pomaže vam u otkrivanju visoko kvalitenih, relevantnih članaka diljem interneta.",
+ "prefs_content_discovery_button": "Uključite otkrivanje sadržaja",
"prefs_section_rows_option": "{num} red;{num} reda;{num} reda",
"prefs_search_header": "Web pretraživanje",
"prefs_topsites_description": "Stranice koje najviše posjećujete",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/is/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/is/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/is/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/is/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "Allt í lagi, ég skil",
"prefs_home_header": "Upphafssíða Firefox",
"prefs_home_description": "Veldu hvaða efni þú vilt á Firefox heimaskjánum þínum.",
- "prefs_content_discovery_header": "Firefox Home",
+ "prefs_content_discovery_header": "Upphafssíða Firefox",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_button": "Slökkva á efnisveitu",
"prefs_section_rows_option": "{num} röð;{num} raðir",
"prefs_search_header": "Vefleit",
"prefs_topsites_description": "Mest heimsóttu vefsíður",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/kab/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/kab/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/kab/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/kab/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -42,7 +42,7 @@
"prefs_home_description": "Fren agbur i tebɣiḍ deg ugdil agejdan Firefox.",
"prefs_content_discovery_header": "Asebter agejdan Firefox",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_button": "Sens asnirem n ubur",
"prefs_section_rows_option": "{num} izirig;{num} izirigen",
"prefs_search_header": "Anadi Web",
"prefs_topsites_description": "Ismal i tettwaliḍ aṭas",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ko/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ko/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ko/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ko/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,8 +41,8 @@
"prefs_home_header": "Firefox 홈 콘텐츠",
"prefs_home_description": "Firefox 홈 화면에 나올 콘텐츠를 선택하세요.",
"prefs_content_discovery_header": "Firefox 홈",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_description": "Firefox 홈의 콘텐츠 탐색 기능을 사용하면 웹에 있는 고품질의 관련 문서를 탐색할 수 있습니다.",
+ "prefs_content_discovery_button": "콘텐츠 탐색 끄기",
"prefs_section_rows_option": "{num} 행",
"prefs_search_header": "웹 검색",
"prefs_topsites_description": "가장 많이 방문한 사이트",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/lo/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/lo/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/lo/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/lo/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "ຈັດການສ່ວນ",
"section_menu_action_manage_webext": "ຈັດການສ່ວນເສີມ",
"section_menu_action_add_topsite": "ເພີ່ມເວັບໄຊທ໌ຍອດນິຍົມ",
- "section_menu_action_add_search_engine": "ເພີ່ມ Search Engine",
+ "section_menu_action_add_search_engine": "ເພີ່ມເຄື່ອງມືການຊອກຫາ",
"section_menu_action_move_up": "ຍ້າຍຂື້ນ",
"section_menu_action_move_down": "ຍ້າຍລົງ",
"section_menu_action_privacy_notice": "ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ltg/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ltg/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ltg/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ltg/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Porvaldēt sadaļu",
"section_menu_action_manage_webext": "Porvaldēt paplašinōjumu",
"section_menu_action_add_topsite": "Jauna lopa topā",
- "section_menu_action_add_search_engine": "Davīnōt mekleitōji",
+ "section_menu_action_add_search_engine": "Daīvīnōt mekleitōji",
"section_menu_action_move_up": "Porvītōt iz augšu",
"section_menu_action_move_down": "Porvītōt iz zamušku",
"section_menu_action_privacy_notice": "Privatuma pīzeime",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered.html firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered.html
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered.html 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered.html 2019-02-07 12:50:25.000000000 +0000
@@ -9,7 +9,7 @@
-
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered-noscripts.html firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered-noscripts.html
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered-noscripts.html 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-prerendered-noscripts.html 2019-02-07 12:50:25.000000000 +0000
@@ -9,7 +9,7 @@
-
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/mr/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/mr/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,7 +40,7 @@
"section_disclaimer_topstories_buttontext": "ठीक आहे, समजले",
"prefs_home_header": "फायरफॉक्स होम वरील मजकूर",
"prefs_home_description": "आपल्या फायरफॉक्सचा मुख्यपृष्ठवर आपल्याला कोणती माहिती पाहिजे ते निवडा.",
- "prefs_content_discovery_header": "Firefox Home",
+ "prefs_content_discovery_header": "Firefox मुख्यपृष्ठ",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_section_rows_option": "{num} ओळ;{num} ओळी",
@@ -77,9 +77,9 @@
"topsites_form_image_validation": "प्रतिमा लोड झाली नाही. वेगळी URL वापरून पहा.",
"pocket_read_more": "लोकप्रिय विषय:",
"pocket_read_even_more": "अधिक कथा पहा",
- "pocket_more_reccommendations": "More Recommendations",
- "pocket_how_it_works": "How it works",
- "pocket_cta_button": "Get Pocket",
+ "pocket_more_reccommendations": "अधिक शिफारसी",
+ "pocket_how_it_works": "हे कसे कार्य करते",
+ "pocket_cta_button": "Pocket मिळवा",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "ब्राउझिंग सुरू करा, आणि आम्ही आपल्याला इथे आपण अलीकडील भेट दिलेले किंवा वाचनखूण लावलेले उत्कृष्ठ लेख, व्हिडिओ, आणि इतर पृष्ठांपैकी काही दाखवू.",
"topstories_empty_state": "तुम्ही सर्व बघितले. {provider} कडून आणखी महत्वाच्या गोष्टी बघण्यासाठी नंतर परत तपासा. प्रतीक्षा करू शकत नाही? वेबवरील छान गोष्टी शोधण्यासाठी लोकप्रिय विषय निवडा.",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "गोपनीयता सूचना",
"firstrun_continue_to_login": "पुढे चला",
"firstrun_skip_login": "ही पायरी वगळा",
- "context_menu_title": "Open menu",
- "pocket_learn_more": "अधिक जाणा"
+ "context_menu_title": "मेनु उघडा"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/nn-NO/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/nn-NO/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/nn-NO/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/nn-NO/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,7 +40,7 @@
"section_disclaimer_topstories_buttontext": "OK, eg forstår det!",
"prefs_home_header": "Innhald Firefox-startside",
"prefs_home_description": "Vel kva for innhald du vil ha på Firefox-startsida di.",
- "prefs_content_discovery_header": "Firefox Home",
+ "prefs_content_discovery_header": "Firefox startside",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_section_rows_option": "{num} rekkje;{num} rekkjer",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "Personvernpraksis",
"firstrun_continue_to_login": "Fortset",
"firstrun_skip_login": "Hopp over dette steget",
- "context_menu_title": "Opne meny",
- "pocket_learn_more": "Les meir"
+ "context_menu_title": "Opne meny"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/pa-IN/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/pa-IN/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/pa-IN/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/pa-IN/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,14 +40,14 @@
"section_disclaimer_topstories_buttontext": "ਠੀਕ ਹੈ, ਸਮਝ ਲਿਆ",
"prefs_home_header": "ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਪੰਨਾ",
"prefs_home_description": "ਉਹ ਸਮੱਗਰੀ ਚੁਣੋ ਜੋ ਤੁਸੀਂ ਆਪਣੇ ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਪੰਨੇ 'ਤੇ ਚਾਹੁੰਦੇ ਹੋ।",
- "prefs_content_discovery_header": "Firefox Home",
+ "prefs_content_discovery_header": "ਫਾਇਰਫਾਕਸ ਮੁੱਖ ਸਫ਼ਾ",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_section_rows_option": "{num} ਕਤਾਰ;{num} ਕਤਾਰਾਂ",
"prefs_search_header": "ਵੈੱਬ ਖੋਜ",
"prefs_topsites_description": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੀਆਂ ਸਾਈਟਾਂ",
"prefs_topstories_description2": "ਸਮੁੱਚੇ ਵੈੱਬ ਤੋਂ ਸ਼ਾਨਦਾਰ ਸਮੱਗਰੀ, ਤੁਹਾਡੇ ਲਈ ਵਿਅਕਤੀਗਤ ਹੈ",
- "prefs_topstories_options_sponsored_label": "ਪ੍ਰਾਯੋਜਿਤ ਕਹਾਣੀਆਂ",
+ "prefs_topstories_options_sponsored_label": "ਸਪਾਂਸਰ ਕੀਤੀਆਂ ਕਹਾਣੀਆਂ",
"prefs_topstories_sponsored_learn_more": "ਹੋਰ ਜਾਣੋ",
"prefs_highlights_description": "ਉਹਨਾਂ ਸਾਈਟਾਂ ਦੀ ਚੋਣ ਕਰੋ ਜੋ ਤੁਸੀਂ ਸੁਰੱਖਿਅਤ ਜਾਂ ਵਿਜ਼ਿਟ ਕੀਤੀ ਹੈ",
"prefs_highlights_options_visited_label": "ਵੇਖੇ ਗਏ ਸਫੇ",
@@ -69,7 +69,7 @@
"topsites_form_image_url_label": "URL ਕਸਟਮ ਚਿੱਤਰ",
"topsites_form_url_placeholder": "ਕੋਈ URL ਲਿਖੋ ਜਾਂ ਚੇਪੋ",
"topsites_form_use_image_link": "ਇੱਕ ਕਸਟਮ ਚਿੱਤਰ ਵਰਤੋ…",
- "topsites_form_preview_button": "ਪੂਰਵ ਦਰਸ਼ਨ",
+ "topsites_form_preview_button": "ਝਲਕ",
"topsites_form_add_button": "ਜੋੜੋ",
"topsites_form_save_button": "ਸੰਭਾਲੋ",
"topsites_form_cancel_button": "ਰੱਦ ਕਰੋ",
@@ -91,7 +91,7 @@
"section_menu_action_remove_section": "ਸੈਕਸ਼ਨ ਹਟਾਓ",
"section_menu_action_collapse_section": "ਸੈਕਸ਼ਨ ਨੂੰ ਸਮੇਟੋ",
"section_menu_action_expand_section": "ਸੈਕਸ਼ਨ ਦੀ ਫੈਲਾਓ",
- "section_menu_action_manage_section": "ਸੈਕਸ਼ਨ ਦਾ ਪ੍ਰਬੰਧ ਕਰੋ",
+ "section_menu_action_manage_section": "ਸੈਕਸ਼ਨ ਦਾ ਬੰਦੋਬਸਤ",
"section_menu_action_manage_webext": "ਇਕਸਟੈਨਸ਼ਨਾਂ ਦਾ ਇੰਤਜ਼ਾਮ",
"section_menu_action_add_topsite": "ਚੋਟੀ ਦੀਆਂ ਸਾਈਟਾਂ ਜੋੜੋ",
"section_menu_action_add_search_engine": "ਖੋਜ ਇੰਜਣ ਜੋੜੋ",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "ਪਰਦੇਦਾਰੀ ਦਾ ਨੋਟਿਸ",
"firstrun_continue_to_login": "ਜਾਰੀ ਰੱਖੋ",
"firstrun_skip_login": "ਇਹ ਪਗ਼ ਛੱਡੋ",
- "context_menu_title": "ਮੇਨੂ ਖੋਲ੍ਹੋ",
- "pocket_learn_more": "ਹੋਰ ਸਿੱਖੋ"
+ "context_menu_title": "ਮੇਨੂ ਖੋਲ੍ਹੋ"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/pt-BR/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/pt-BR/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/pt-BR/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/pt-BR/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -44,7 +44,7 @@
"prefs_content_discovery_description": "A descoberta de conteúdo na página inicial do Firefox permite descobrir artigos relevantes, de alta qualidade, pela web afora.",
"prefs_content_discovery_button": "Desativar descoberta de conteúdo",
"prefs_section_rows_option": "{num} linha;{num} linhas",
- "prefs_search_header": "Pesquisa na web",
+ "prefs_search_header": "Pesquisar na web",
"prefs_topsites_description": "Os sites que você mais visita",
"prefs_topstories_description2": "Os melhores conteúdos disponíveis na Web, personalizados pra você",
"prefs_topstories_options_sponsored_label": "Histórias patrocinadas",
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Gerenciar seção",
"section_menu_action_manage_webext": "Gerenciar extensão",
"section_menu_action_add_topsite": "Adicionar ao sites preferidos",
- "section_menu_action_add_search_engine": "Adicionar mecanismo de pesquisa",
+ "section_menu_action_add_search_engine": "Adicionar mecanismo de busca",
"section_menu_action_move_up": "Mover para cima",
"section_menu_action_move_down": "Mover para baixo",
"section_menu_action_privacy_notice": "Política de privacidade",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/rm/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/rm/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/rm/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/rm/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -94,7 +94,7 @@
"section_menu_action_manage_section": "Administrar la secziun",
"section_menu_action_manage_webext": "Administrar l'extensiun",
"section_menu_action_add_topsite": "Agiuntar ina pagina principala",
- "section_menu_action_add_search_engine": "Agiuntar maschina da tschertgar",
+ "section_menu_action_add_search_engine": "Agiuntar questa maschina da tschertgar",
"section_menu_action_move_up": "Spustar ensi",
"section_menu_action_move_down": "Spustar engiu",
"section_menu_action_privacy_notice": "Infurmaziuns davart la protecziun da datas",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ro/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ro/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/ro/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/ro/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "Ok, am înțeles",
"prefs_home_header": "Conținutul paginii de start Firefox",
"prefs_home_description": "Alege ce conținut vrei pe ecranul de start Firefox.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_header": "Pagina de start Firefox",
+ "prefs_content_discovery_description": "Descoperirea de conținut din pagina de start Firefox îți permite să descoperi articole relevante de calitate înaltă de pe web.",
+ "prefs_content_discovery_button": "Dezactivează descoperirea de conținut",
"prefs_section_rows_option": "{num} rând;{num} rânduri;{num} de rânduri",
"prefs_search_header": "Căutare web",
"prefs_topsites_description": "Site-urile pe care le vizitezi cel mai des",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "Politica de confidențialitate",
"firstrun_continue_to_login": "Continuă",
"firstrun_skip_login": "Omite acest pas",
- "context_menu_title": "Deschide meniul",
- "pocket_learn_more": "Află mai multe"
+ "context_menu_title": "Deschide meniul"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sq/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sq/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sq/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sq/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "OK, e mora vesh",
"prefs_home_header": "Lëndë Firefox Home",
"prefs_home_description": "Zgjidhni ç’lëndë doni në skenën tuaj Firefox.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_header": "Kreu i Firefox-it",
+ "prefs_content_discovery_description": "Zbulimi i Lëndës në Kreun e Firefox-it ju lejon të zbuloni në internet artikuj të cilësisë së lartë, dhe afër interesave tuaja.",
+ "prefs_content_discovery_button": "Çaktivizoje Zbulimin e Lëndës",
"prefs_section_rows_option": "{num} rresht;{num} rreshta",
"prefs_search_header": "Kërkim Web",
"prefs_topsites_description": "Sajtet që vizitoni më tepër",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "Shënim Mbi Privatësinë",
"firstrun_continue_to_login": "Vazhdo",
"firstrun_skip_login": "Anashkalojeni këtë hap",
- "context_menu_title": "Hape menunë",
- "pocket_learn_more": "Mësoni Më Tepër"
+ "context_menu_title": "Hape menunë"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered.html firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered.html
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered.html 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered.html 2019-02-07 12:50:25.000000000 +0000
@@ -9,7 +9,7 @@
-
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered-noscripts.html firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered-noscripts.html
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered-noscripts.html 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-prerendered-noscripts.html 2019-02-07 12:50:25.000000000 +0000
@@ -9,7 +9,7 @@
-
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-strings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-strings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/prerendered/locales/sr/activity-stream-strings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/prerendered/locales/sr/activity-stream-strings.js 2019-02-07 12:50:25.000000000 +0000
@@ -40,9 +40,9 @@
"section_disclaimer_topstories_buttontext": "У реду",
"prefs_home_header": "Садржај Firefox почетне странице",
"prefs_home_description": "Изаберите садржај који желите видети на вашој Firefox почетној страници.",
- "prefs_content_discovery_header": "Firefox Home",
- "prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
- "prefs_content_discovery_button": "Turn Off Content Discovery",
+ "prefs_content_discovery_header": "Firefox почетна",
+ "prefs_content_discovery_description": "Откривање садржаја на Firefox почетној вам омогућава да добијете веома квалитетне и вама значајне чланке са целог веба.",
+ "prefs_content_discovery_button": "Искључи откривање садржаја",
"prefs_section_rows_option": "{num} ред;{num} реда;{num} редова",
"prefs_search_header": "Веб претрага",
"prefs_topsites_description": "Сајтови које највише посећујете",
@@ -78,7 +78,7 @@
"pocket_read_more": "Популарне теме:",
"pocket_read_even_more": "Погледајте још прича",
"pocket_more_reccommendations": "Још препорука",
- "pocket_how_it_works": "How it works",
+ "pocket_how_it_works": "Како ово ради",
"pocket_cta_button": "Преузмите Pocket",
"pocket_cta_text": "Сачувајте приче које волите у Pocket и напуните свој ум фасцинантним причама.",
"highlights_empty_state": "Почните са коришћењем веба а ми ћемо вам овде приказивати неке од одличних чланака, видео записа и других страница које сте скоро посетили.",
@@ -110,6 +110,5 @@
"firstrun_privacy_notice": "обавештење о приватности",
"firstrun_continue_to_login": "Настави",
"firstrun_skip_login": "Прескочи овај корак",
- "context_menu_title": "Open menu",
- "pocket_learn_more": "Сазнајте више"
+ "context_menu_title": "Отвори мени"
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/browser/browser_discovery_styles.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/browser/browser_discovery_styles.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/browser/browser_discovery_styles.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/browser/browser_discovery_styles.js 2019-02-07 12:50:25.000000000 +0000
@@ -64,7 +64,9 @@
components: [{
type: "HorizontalRule",
styles: {
- "hr": `background-image: url(https://example.com/background);
+ // NB: Use display: none to avoid network requests to unfiltered urls
+ "hr": `display: none;
+ background-image: url(https://example.com/background);
content: url(chrome://browser/content);
cursor: url( resource://activity-stream/cursor ), auto;
list-style-image: url('https://img-getpocket.cdn.mozilla.net/list');`,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/asrouter/MessageLoaderUtils.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/asrouter/MessageLoaderUtils.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/asrouter/MessageLoaderUtils.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/asrouter/MessageLoaderUtils.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -303,8 +303,7 @@
// Verify that the expected installation source has been passed to the getInstallForURL
// method (See Bug 1496167 for a rationale).
- assert.calledWithExactly(getInstallStub, "foo.com", "application/x-xpinstall", null,
- null, null, null, null, {source: "activitystream"});
+ assert.calledWithExactly(getInstallStub, "foo.com", {telemetryInfo: {source: "amo"}});
});
it("should not call the Addons API on invalid URLs", async () => {
sandbox.stub(global.Services.scriptSecurityManager, "getSystemPrincipal").throws();
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DarkModeMessage.test.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DarkModeMessage.test.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DarkModeMessage.test.jsx 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DarkModeMessage.test.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,37 @@
+import {actionCreators as ac, actionTypes as at} from "common/Actions.jsm";
+import {_DarkModeMessage as DarkModeMessage} from "content-src/components/DarkModeMessage/DarkModeMessage";
+import React from "react";
+import {shallow} from "enzyme";
+
+describe("", () => {
+ let dispatch;
+ let wrapper;
+ beforeEach(() => {
+ dispatch = sinon.stub();
+ wrapper = shallow( );
+ });
+ it("should render the component", () => {
+ assert.isNotNull(wrapper.getElement());
+ });
+ describe("actions", () => {
+ it("should render two buttons", () => {
+ assert.equal(wrapper.find(".actions").children().length, 2);
+ });
+ it("Cancel btn should dispatch correct call", () => {
+ const cancelBtn = wrapper.find(".actions").childAt(0);
+
+ cancelBtn.simulate("click");
+
+ assert.calledOnce(dispatch);
+ assert.calledWith(dispatch, ac.SetPref("darkModeMessage", false));
+ });
+ it("Switch to older version should dispatch correct call", () => {
+ const switchBtn = wrapper.find(".actions").childAt(1);
+
+ switchBtn.simulate("click");
+
+ assert.calledOnce(dispatch);
+ assert.calledWith(dispatch, ac.AlsoToMain({type: at.DISCOVERY_STREAM_OPT_OUT}));
+ });
+ });
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/Hero.test.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/Hero.test.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/Hero.test.jsx 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/Hero.test.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,68 @@
+import {DSCard} from "content-src/components/DiscoveryStreamComponents/DSCard/DSCard";
+import {Hero} from "content-src/components/DiscoveryStreamComponents/Hero/Hero";
+import {List} from "content-src/components/DiscoveryStreamComponents/List/List";
+import React from "react";
+import {shallow} from "enzyme";
+
+describe("", () => {
+ let DEFAULT_PROPS;
+ beforeEach(() => {
+ DEFAULT_PROPS = {
+ data: {
+ recommendations: [
+ {url: 1},
+ {url: 2},
+ {url: 3},
+ ],
+ },
+ };
+ });
+
+ it("should render with nothing", () => {
+ const wrapper = shallow( );
+
+ assert.lengthOf(wrapper.find("a"), 0);
+ });
+
+ it("should render a hero link with expected url", () => {
+ const wrapper = shallow( );
+
+ assert.equal(wrapper.find("a").prop("href"), DEFAULT_PROPS.data.recommendations[0].url);
+ });
+
+ describe("subComponent: cards", () => {
+ beforeEach(() => {
+ DEFAULT_PROPS.subComponentType = "cards";
+ });
+
+ it("should render no cards for 1 hero item", () => {
+ const wrapper = shallow( );
+
+ assert.lengthOf(wrapper.find(DSCard), 0);
+ });
+
+ it("should render 1 card with expected url for 2 hero items", () => {
+ const wrapper = shallow( );
+
+ assert.equal(wrapper.find(DSCard).prop("url"), DEFAULT_PROPS.data.recommendations[1].url);
+ });
+ });
+
+ describe("subComponent: list", () => {
+ beforeEach(() => {
+ DEFAULT_PROPS.subComponentType = "list";
+ });
+
+ it("should render list with no items for 1 hero item", () => {
+ const wrapper = shallow( );
+
+ assert.equal(wrapper.find(List).prop("items"), 0);
+ });
+
+ it("should render list with 1 item for 2 hero items", () => {
+ const wrapper = shallow( );
+
+ assert.equal(wrapper.find(List).prop("items"), 1);
+ });
+ });
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/List.test.jsx firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/List.test.jsx
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/List.test.jsx 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/List.test.jsx 2019-02-07 12:50:25.000000000 +0000
@@ -4,7 +4,7 @@
import {shallow} from "enzyme";
describe(" presentation component", () => {
- const ValidRecommendations = [{a: 1}, {a: 2}];
+ const ValidRecommendations = [{url: 1}, {url: 2}, {url: 3}];
const ValidListProps = {
DiscoveryStream: {
feeds: {
@@ -48,6 +48,27 @@
const listItem = wrapper.find(ListItem);
assert.lengthOf(listItem, ValidRecommendations.length);
});
+
+ it("should return fewer ListItems for fewer items", () => {
+ const wrapper = shallow(
);
+
+ const listItem = wrapper.find(ListItem);
+ assert.lengthOf(listItem, 1);
+ });
+
+ it("should return fewer ListItems for starting point", () => {
+ const wrapper = shallow(
);
+
+ const listItem = wrapper.find(ListItem);
+ assert.lengthOf(listItem, ValidRecommendations.length - 1);
+ });
+
+ it("should return expected ListItems when offset", () => {
+ const wrapper = shallow(
);
+
+ const listItemUrls = wrapper.find(ListItem).map(i => i.prop("url"));
+ assert.sameOrderedMembers(listItemUrls, [ValidRecommendations[1].url, ValidRecommendations[2].url]);
+ });
});
describe(" presentation component", () => {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/lib/truncate-text.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/lib/truncate-text.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/content-src/lib/truncate-text.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/content-src/lib/truncate-text.test.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-import {truncateText} from "content-src/lib/truncate-text";
-
-describe("truncateText", () => {
- it("should accept nothing", () => {
- assert.equal(truncateText(), "");
- });
-
- it("should give back string with no truncating", () => {
- const str = "hello";
-
- assert.equal(truncateText(str), str);
- });
-
- it("should give back short string for long cap", () => {
- const str = "hello";
-
- assert.equal(truncateText(str, 100), str);
- });
-
- it("should give back string for exact cap", () => {
- const str = "hello";
-
- assert.equal(truncateText(str, str.length), str);
- });
-
- it("should cap off long string with ellipsis", () => {
- const str = "hello world";
-
- assert.equal(truncateText(str, 5), "hello…");
- });
-
- it("should avoid putting ellipsis after whitespace", () => {
- const str = "hello world";
-
- assert.equal(truncateText(str, 10), "hello…");
- });
-});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/AboutPreferences.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/AboutPreferences.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/AboutPreferences.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/AboutPreferences.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -16,7 +16,10 @@
Sections = [];
DiscoveryStream = {config: {enabled: false}};
instance = new AboutPreferences();
- instance.store = {getState: () => ({Sections, DiscoveryStream})};
+ instance.store = {
+ dispatch: sandbox.stub(),
+ getState: () => ({Sections, DiscoveryStream}),
+ };
});
afterEach(() => {
globals.restore();
@@ -293,13 +296,23 @@
});
});
describe("#DiscoveryStream", () => {
+ let PreferenceExperimentsStub;
+ beforeEach(() => {
+ DiscoveryStream = {config: {enabled: true}};
+ PreferenceExperimentsStub = {
+ getAllActive: sandbox.stub().resolves([{name: "discoverystream", preferenceName: "browser.newtabpage.activity-stream.discoverystream.config"}]),
+ stop: sandbox.stub().resolves(),
+ };
+ globals.set("PreferenceExperiments", PreferenceExperimentsStub);
+ });
it("should not render the Discovery Stream section", () => {
+ DiscoveryStream = {config: {enabled: false}};
+
testRender();
assert.isFalse(node.textContent.includes("prefs_content_discovery"));
});
it("should render the Discovery Stream section", () => {
- DiscoveryStream = {config: {enabled: true}};
const spy = sandbox.spy(instance, "renderPreferences");
testRender();
@@ -312,14 +325,15 @@
// Stream is enabled
assert.propertyVal(node.style, "visibility", "hidden");
});
- it("should toggle the Discovery Stream pref on button click", async () => {
- DiscoveryStream = {config: {enabled: true}};
- const PreferenceExperimentsStub = {
- getAllActive: sandbox.stub().resolves([{name: "discoverystream", preferenceName: "browser.newtabpage.activity-stream.discoverystream.config"}]),
- stop: sandbox.stub().resolves(),
- };
- globals.set("PreferenceExperiments", PreferenceExperimentsStub);
+ it("should request Discovery Stream opt-out on button click", async () => {
+ testRender();
+ // Trigger the button click listener
+ await node.addEventListener.firstCall.args[1]();
+ assert.calledOnce(instance.store.dispatch);
+ assert.calledWithExactly(instance.store.dispatch, {type: at.DISCOVERY_STREAM_OPT_OUT});
+ });
+ it("should reset the Discovery Stream experiment on button click", async () => {
testRender();
assert.calledOnce(node.addEventListener);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/DiscoveryStreamFeed.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/DiscoveryStreamFeed.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/DiscoveryStreamFeed.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/DiscoveryStreamFeed.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -3,22 +3,29 @@
import {DiscoveryStreamFeed} from "lib/DiscoveryStreamFeed.jsm";
import {reducers} from "common/Reducers.jsm";
-const CONFIG_PREF_NAME = "browser.newtabpage.activity-stream.discoverystream.config";
+const CONFIG_PREF_NAME = "discoverystream.config";
+const SPOC_IMPRESSION_TRACKING_PREF = "discoverystream.spoc.impressions";
const THIRTY_MINUTES = 30 * 60 * 1000;
describe("DiscoveryStreamFeed", () => {
let feed;
let sandbox;
- let configPrefStub;
let fetchStub;
let clock;
+ const setPref = (name, value) => {
+ const action = {
+ type: at.PREF_CHANGED,
+ data: {
+ name,
+ value: typeof value === "object" ? JSON.stringify(value) : value,
+ },
+ };
+ feed.store.dispatch(action);
+ feed.onAction(action);
+ };
beforeEach(() => {
- // Pref
sandbox = sinon.createSandbox();
- configPrefStub = sandbox.stub(global.Services.prefs, "getStringPref")
- .withArgs(CONFIG_PREF_NAME)
- .returns(JSON.stringify({enabled: false, show_spocs: false, layout_endpoint: "foo.com"}));
// Fetch
fetchStub = sandbox.stub(global, "fetch");
@@ -28,7 +35,13 @@
// Feed
feed = new DiscoveryStreamFeed();
- feed.store = createStore(combineReducers(reducers));
+ feed.store = createStore(combineReducers(reducers), {
+ Prefs: {
+ values: {
+ [CONFIG_PREF_NAME]: JSON.stringify({enabled: false, show_spocs: false, layout_endpoint: "foo"}),
+ },
+ },
+ });
});
afterEach(() => {
@@ -36,16 +49,6 @@
sandbox.restore();
});
- describe("#observe", () => {
- it("should update state.DiscoveryStream.config when the pref changes", async () => {
- configPrefStub.returns(JSON.stringify({enabled: true, show_spocs: false, layout_endpoint: "foo"}));
-
- feed.observe(null, null, CONFIG_PREF_NAME);
-
- assert.deepEqual(feed.store.getState().DiscoveryStream.config, {enabled: true, show_spocs: false, layout_endpoint: "foo"});
- });
- });
-
describe("#loadLayout", () => {
it("should fetch data and populate the cache if it is empty", async () => {
const resp = {layout: ["foo", "bar"]};
@@ -234,11 +237,6 @@
assert.isTrue(feed.showSpocs);
});
- it("should fire loadSpocs is showSponsored pref changes", async () => {
- sandbox.stub(feed, "loadSpocs").returns(Promise.resolve());
- await feed.onAction({type: at.PREF_CHANGED, data: {name: "showSponsored"}});
- assert.calledOnce(feed.loadSpocs);
- });
});
describe("#clearCache", () => {
@@ -257,32 +255,306 @@
});
});
+ describe("#filterSpocs", () => {
+ it("should return filtered out spocs based on frequency caps", () => {
+ const fakeSpocs = {
+ spocs: [
+ {
+ campaign_id: "seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ {
+ campaign_id: "not-seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ ],
+ };
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ sandbox.stub(feed, "readImpressionsPref").returns(fakeImpressions);
+
+ const result = feed.filterSpocs(fakeSpocs);
+
+ assert.equal(result.spocs.length, 1);
+ assert.equal(result.spocs[0].campaign_id, "not-seen");
+ });
+ });
+
+ describe("#isBelowFrequencyCap", () => {
+ it("should return true if there are no campaign impressions", () => {
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ const fakeSpoc = {
+ campaign_id: "not-seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ };
+
+ const result = feed.isBelowFrequencyCap(fakeImpressions, fakeSpoc);
+
+ assert.isTrue(result);
+ });
+ it("should return true if there are no campaign caps", () => {
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ const fakeSpoc = {
+ campaign_id: "seen",
+ caps: {
+ lifetime: 3,
+ },
+ };
+
+ const result = feed.isBelowFrequencyCap(fakeImpressions, fakeSpoc);
+
+ assert.isTrue(result);
+ });
+
+ it("should return false if lifetime cap is hit", () => {
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ const fakeSpoc = {
+ campaign_id: "seen",
+ caps: {
+ lifetime: 1,
+ campaign: {
+ count: 3,
+ period: 1,
+ },
+ },
+ };
+
+ const result = feed.isBelowFrequencyCap(fakeImpressions, fakeSpoc);
+
+ assert.isFalse(result);
+ });
+
+ it("should return false if time based cap is hit", () => {
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ const fakeSpoc = {
+ campaign_id: "seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ };
+
+ const result = feed.isBelowFrequencyCap(fakeImpressions, fakeSpoc);
+
+ assert.isFalse(result);
+ });
+ });
+
+ describe("#recordCampaignImpression", () => {
+ it("should return false if time based cap is hit", () => {
+ sandbox.stub(feed, "readImpressionsPref").returns({});
+ sandbox.stub(feed, "writeImpressionsPref").returns();
+
+ feed.recordCampaignImpression("seen");
+
+ assert.calledWith(feed.writeImpressionsPref, SPOC_IMPRESSION_TRACKING_PREF, {"seen": [0]});
+ });
+ });
+
+ describe("#cleanUpCampaignImpressionPref", () => {
+ it("should remove campaign-3 because it is no longer being used", async () => {
+ const fakeSpocs = {
+ spocs: [
+ {
+ campaign_id: "campaign-1",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ {
+ campaign_id: "campaign-2",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ ],
+ };
+ const fakeImpressions = {
+ "campaign-2": [Date.now() - 1],
+ "campaign-3": [Date.now() - 1],
+ };
+ sandbox.stub(feed, "readImpressionsPref").returns(fakeImpressions);
+ sandbox.stub(feed, "writeImpressionsPref").returns();
+
+ feed.cleanUpCampaignImpressionPref(fakeSpocs);
+
+ assert.calledWith(feed.writeImpressionsPref, SPOC_IMPRESSION_TRACKING_PREF, {"campaign-2": [-1]});
+ });
+ });
+
+ describe("#writeImpressionsPref", () => {
+ it("should call Services.prefs.setStringPref", () => {
+ sandbox.spy(feed.store, "dispatch");
+ const fakeImpressions = {
+ "foo": [Date.now() - 1],
+ "bar": [Date.now() - 1],
+ };
+
+ feed.writeImpressionsPref(SPOC_IMPRESSION_TRACKING_PREF, fakeImpressions);
+
+ assert.calledWithMatch(feed.store.dispatch, {
+ data: {
+ name: SPOC_IMPRESSION_TRACKING_PREF,
+ value: JSON.stringify(fakeImpressions),
+ },
+ type: at.SET_PREF,
+ });
+ });
+ });
+
+ describe("#readImpressionsPref", () => {
+ it("should return what's in Services.prefs.getStringPref", () => {
+ const fakeImpressions = {
+ "foo": [Date.now() - 1],
+ "bar": [Date.now() - 1],
+ };
+ setPref(SPOC_IMPRESSION_TRACKING_PREF, fakeImpressions);
+
+ const result = feed.readImpressionsPref(SPOC_IMPRESSION_TRACKING_PREF);
+
+ assert.deepEqual(result, fakeImpressions);
+ });
+ });
+
+ describe("#onAction: DISCOVERY_STREAM_SPOC_IMPRESSION", () => {
+ it("should call dispatch to ac.AlsoToPreloaded with filtered spoc data", async () => {
+ Object.defineProperty(feed, "showSpocs", {get: () => true});
+ const fakeSpocs = {
+ lastUpdated: 1,
+ data: {
+ spocs: [
+ {
+ campaign_id: "seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ {
+ campaign_id: "not-seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ ],
+ },
+ };
+ const fakeImpressions = {
+ "seen": [Date.now() - 1],
+ };
+ const result = {
+ spocs: [
+ {
+ campaign_id: "not-seen",
+ caps: {
+ lifetime: 3,
+ campaign: {
+ count: 1,
+ period: 1,
+ },
+ },
+ },
+ ],
+ };
+ sandbox.stub(feed, "recordCampaignImpression").returns();
+ sandbox.stub(feed, "readImpressionsPref").returns(fakeImpressions);
+ sandbox.stub(feed.cache, "get").returns(Promise.resolve({spocs: fakeSpocs}));
+ sandbox.spy(feed.store, "dispatch");
+
+ await feed.onAction({type: at.DISCOVERY_STREAM_SPOC_IMPRESSION, data: {campaign_id: "seen"}});
+
+ assert.deepEqual(feed.store.dispatch.firstCall.args[0].data.spocs, result);
+ });
+ });
+
describe("#onAction: INIT", () => {
it("should be .loaded=false before initialization", () => {
assert.isFalse(feed.loaded);
});
- it("should load data, add pref observer, and set .loaded=true if config.enabled is true", async () => {
+ it("should load data and set .loaded=true if config.enabled is true", async () => {
sandbox.stub(feed.cache, "set").returns(Promise.resolve());
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
sandbox.stub(feed, "loadLayout").returns(Promise.resolve());
- sandbox.stub(global.Services.prefs, "addObserver");
await feed.onAction({type: at.INIT});
assert.calledOnce(feed.loadLayout);
- assert.calledWith(global.Services.prefs.addObserver, CONFIG_PREF_NAME, feed);
assert.isTrue(feed.loaded);
});
});
- describe("#onAction: DISCOVERY_STREAM_CONFIG_SET_VALUE", () => {
+ describe("#onAction: DISCOVERY_STREAM_CONFIG_SET_VALUE", async () => {
it("should add the new value to the pref without changing the existing values", async () => {
- sandbox.stub(global.Services.prefs, "setStringPref");
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ sandbox.spy(feed.store, "dispatch");
+ setPref(CONFIG_PREF_NAME, {enabled: true, other: "value"});
await feed.onAction({type: at.DISCOVERY_STREAM_CONFIG_SET_VALUE, data: {name: "layout_endpoint", value: "foo.com"}});
- assert.calledWith(global.Services.prefs.setStringPref, CONFIG_PREF_NAME, JSON.stringify({enabled: true, layout_endpoint: "foo.com"}));
+ assert.calledWithMatch(feed.store.dispatch, {
+ data: {
+ name: CONFIG_PREF_NAME,
+ value: JSON.stringify({enabled: true, other: "value", layout_endpoint: "foo.com"}),
+ },
+ type: at.SET_PREF,
+ });
+ });
+ it("should disable opt-out when setting config enabled", () => {
+ sandbox.spy(feed.store, "dispatch");
+
+ feed.onAction({type: at.DISCOVERY_STREAM_CONFIG_SET_VALUE, data: {name: "enabled", value: true}});
+
+ assert.calledWithMatch(feed.store.dispatch, {
+ data: {
+ name: "discoverystream.optOut.0",
+ value: false,
+ },
+ type: at.SET_PREF,
+ });
});
});
@@ -295,7 +567,7 @@
// force clear cached pref value
feed._prefCache = {};
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
sandbox.stub(feed, "clearCache").returns(Promise.resolve());
sandbox.stub(feed, "loadLayout").returns(Promise.resolve());
@@ -309,7 +581,7 @@
sandbox.stub(feed.cache, "set").returns(Promise.resolve());
// force clear cached pref value
feed._prefCache = {};
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
sandbox.stub(feed, "clearCache").returns(Promise.resolve());
await feed.onAction({type: at.DISCOVERY_STREAM_CONFIG_CHANGE});
@@ -320,13 +592,13 @@
sandbox.stub(feed.cache, "set").returns(Promise.resolve());
// force clear cached pref value
feed._prefCache = {};
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
await feed.onAction({type: at.INIT});
assert.isTrue(feed.loaded);
feed._prefCache = {};
- configPrefStub.returns(JSON.stringify({enabled: false}));
+ setPref(CONFIG_PREF_NAME, {enabled: false});
sandbox.stub(feed, "clearCache").returns(Promise.resolve());
sandbox.stub(feed, "loadLayout").returns(Promise.resolve());
await feed.onAction({type: at.DISCOVERY_STREAM_CONFIG_CHANGE});
@@ -336,19 +608,59 @@
assert.isFalse(feed.loaded);
});
});
+
+ describe("#onAction: DISCOVERY_STREAM_OPT_OUT", () => {
+ it("should update opt-out pref", async () => {
+ sandbox.spy(feed.store, "dispatch");
+
+ await feed.onAction({type: at.DISCOVERY_STREAM_OPT_OUT});
+
+ assert.calledWithMatch(feed.store.dispatch, {
+ data: {
+ name: "discoverystream.optOut.0",
+ value: true,
+ },
+ type: at.SET_PREF,
+ });
+ });
+ });
+
describe("#onAction: UNINIT", () => {
- it("should remove pref listeners", async () => {
- sandbox.stub(global.Services.prefs, "removeObserver");
+ it("should reset pref cache", async () => {
+ feed._prefCache = {cached: "value"};
await feed.onAction({type: at.UNINIT});
- assert.calledWith(global.Services.prefs.removeObserver, CONFIG_PREF_NAME, feed);
+
+ assert.deepEqual(feed._prefCache, {});
+ });
+ });
+
+ describe("#onAction: PREF_CHANGED", () => {
+ it("should update state.DiscoveryStream.config when the pref changes", async () => {
+ setPref(CONFIG_PREF_NAME, {enabled: true, show_spocs: false, layout_endpoint: "foo"});
+
+ assert.deepEqual(feed.store.getState().DiscoveryStream.config, {enabled: true, show_spocs: false, layout_endpoint: "foo"});
+ });
+ it("should handle pref changes when opt out changes", async () => {
+ setPref(CONFIG_PREF_NAME, {enabled: true, show_spocs: false, layout_endpoint: "foo"});
+
+ setPref("discoverystream.optOut.0", true);
+
+ assert.deepEqual(feed.store.getState().DiscoveryStream.config, {enabled: false, show_spocs: false, layout_endpoint: "foo"});
+ });
+ it("should fire loadSpocs is showSponsored pref changes", async () => {
+ sandbox.stub(feed, "loadSpocs").returns(Promise.resolve());
+
+ await feed.onAction({type: at.PREF_CHANGED, data: {name: "showSponsored"}});
+
+ assert.calledOnce(feed.loadSpocs);
});
});
describe("#onAction: SYSTEM_TICK", () => {
it("should not refresh if DiscoveryStream has not been loaded", async () => {
sandbox.stub(feed, "refreshAll").resolves();
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
await feed.onAction({type: at.SYSTEM_TICK});
assert.notCalled(feed.refreshAll);
@@ -356,7 +668,7 @@
it("should not refresh if no caches are expired", async () => {
sandbox.stub(feed.cache, "set").resolves();
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
await feed.onAction({type: at.INIT});
@@ -369,7 +681,7 @@
it("should refresh if DiscoveryStream has been loaded at least once and a cache has expired", async () => {
sandbox.stub(feed.cache, "set").resolves();
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
await feed.onAction({type: at.INIT});
@@ -382,7 +694,7 @@
it("should refresh and not update open tabs if DiscoveryStream has been loaded at least once", async () => {
sandbox.stub(feed.cache, "set").resolves();
- configPrefStub.returns(JSON.stringify({enabled: true}));
+ setPref(CONFIG_PREF_NAME, {enabled: true});
await feed.onAction({type: at.INIT});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/SnippetsFeed.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/SnippetsFeed.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/SnippetsFeed.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/SnippetsFeed.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -167,6 +167,15 @@
assert.equal(action.type, at.SNIPPETS_DATA);
assert.deepEqual(action.data, {selectedSearchEngine: searchData});
});
+ it("should catch errors when calling getVisibleEngines", async () => {
+ const feed = new SnippetsFeed();
+ sandbox.stub(global.Services.search, "getVisibleEngines").rejects();
+
+ const result = await feed.getSelectedSearchEngine();
+
+ assert.lengthOf(result.engines, 0);
+ assert.equal(result.searchEngineIdentifier, "");
+ });
it("should call showFirefoxAccounts", () => {
const feed = new SnippetsFeed();
const browser = {};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TelemetryFeed.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TelemetryFeed.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TelemetryFeed.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TelemetryFeed.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -747,6 +747,24 @@
assert.notCalled(instance.setLoadTriggerInfo);
});
+
+ it("should call maybeRecordTopsitesPainted when url is about:home and topsites_first_painted_ts is given", () => {
+ const topsites_first_painted_ts = 44455;
+ const data = {topsites_first_painted_ts};
+ const spy = sandbox.spy();
+
+ sandbox.stub(Services.prefs, "getIntPref").returns(1);
+ globals.set("aboutNewTabService", {
+ overridden: false,
+ newTabURL: "",
+ maybeRecordTopsitesPainted: spy,
+ });
+ instance.addSession("port123", "about:home");
+ instance.saveSessionPerfData("port123", data);
+
+ assert.calledOnce(spy);
+ assert.calledWith(spy, topsites_first_painted_ts);
+ });
});
describe("#uninit", () => {
it("should call .pingCentre.uninit", () => {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TopSitesFeed.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TopSitesFeed.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TopSitesFeed.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TopSitesFeed.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -1124,7 +1124,7 @@
describe("improvesearch.noDefaultSearchTile experiment", () => {
const NO_DEFAULT_SEARCH_TILE_PREF = "improvesearch.noDefaultSearchTile";
beforeEach(() => {
- global.Services.search.getDefault = async () => {identifier: "google", searchForm: "google.com"};
+ global.Services.search.getDefault = async () => ({identifier: "google", searchForm: "google.com"});
feed.store.state.Prefs.values[NO_DEFAULT_SEARCH_TILE_PREF] = true;
});
it("should filter out alexa top 5 search from the default sites", async () => {
@@ -1162,7 +1162,7 @@
});
it("should call refresh and set ._currentSearchHostname to the new engine hostname when the the default search engine has been set", () => {
sinon.stub(feed, "refresh");
- global.Services.search.getDefault = async () => {identifier: "ddg", searchForm: "duckduckgo.com"};
+ sandbox.stub(global.Services.search, "defaultEngine").value({identifier: "ddg", searchForm: "duckduckgo.com"});
feed.observe(null, "browser-search-engine-modified", "engine-current");
assert.equal(feed._currentSearchHostname, "duckduckgo");
assert.calledOnce(feed.refresh);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TopStoriesFeed.test.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TopStoriesFeed.test.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/lib/TopStoriesFeed.test.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/lib/TopStoriesFeed.test.js 2019-02-07 12:50:25.000000000 +0000
@@ -526,32 +526,32 @@
clock.tick(1);
let expectedPrefValue = JSON.stringify({1: 1, 2: 1, 3: 1});
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 1}, {id: 2}, {id: 3}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 1}, {id: 2}, {id: 3}]}});
assert.calledWith(instance._prefs.set.firstCall, REC_IMPRESSION_TRACKING_PREF, expectedPrefValue);
// Only need to record first impression, so impression pref shouldn't change
instance._prefs.get = pref => expectedPrefValue;
clock.tick(1);
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 1}, {id: 2}, {id: 3}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 1}, {id: 2}, {id: 3}]}});
assert.calledOnce(instance._prefs.set);
// New first impressions should be added
clock.tick(1);
let expectedPrefValueTwo = JSON.stringify({1: 1, 2: 1, 3: 1, 4: 3, 5: 3, 6: 3});
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 4}, {id: 5}, {id: 6}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 4}, {id: 5}, {id: 6}]}});
assert.calledWith(instance._prefs.set.secondCall, REC_IMPRESSION_TRACKING_PREF, expectedPrefValueTwo);
});
it("should not record top story impressions for non-view impressions", async () => {
instance._prefs = {get: pref => undefined, set: sinon.spy()};
instance.personalized = true;
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {click: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", click: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {block: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", block: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {pocket: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", pocket: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
});
it("should clean up top story impressions", async () => {
@@ -973,18 +973,18 @@
await instance.fetchStories();
let expectedPrefValue = JSON.stringify({5: [0]});
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 3}, {id: 2}, {id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 3}, {id: 2}, {id: 1}]}});
assert.calledWith(instance._prefs.set.firstCall, SPOC_IMPRESSION_TRACKING_PREF, expectedPrefValue);
clock.tick(1);
instance._prefs.get = pref => expectedPrefValue;
let expectedPrefValueCallTwo = JSON.stringify({5: [0, 1]});
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 3}, {id: 2}, {id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 3}, {id: 2}, {id: 1}]}});
assert.calledWith(instance._prefs.set.secondCall, SPOC_IMPRESSION_TRACKING_PREF, expectedPrefValueCallTwo);
clock.tick(1);
instance._prefs.get = pref => expectedPrefValueCallTwo;
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 3}, {id: 2}, {id: 4}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 3}, {id: 2}, {id: 4}]}});
assert.calledWith(instance._prefs.set.thirdCall, SPOC_IMPRESSION_TRACKING_PREF, JSON.stringify({5: [0, 1], 6: [2]}));
});
it("should not record spoc/campaign impressions for non-view impressions", async () => {
@@ -1007,13 +1007,13 @@
fetchStub.resolves({ok: true, status: 200, json: () => Promise.resolve(response)});
await instance.onInit();
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {click: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", click: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {block: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", block: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {pocket: 0, tiles: [{id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", pocket: 0, tiles: [{id: 1}]}});
assert.notCalled(instance._prefs.set);
});
it("should clean up spoc/campaign impressions", async () => {
@@ -1033,9 +1033,9 @@
await instance.fetchStories();
// simulate impressions for campaign 5 and 6
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 3}, {id: 2}, {id: 1}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 3}, {id: 2}, {id: 1}]}});
instance._prefs.get = pref => (pref === SPOC_IMPRESSION_TRACKING_PREF) && JSON.stringify({5: [0]});
- instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {tiles: [{id: 3}, {id: 2}, {id: 4}]}});
+ instance.onAction({type: at.TELEMETRY_IMPRESSION_STATS, data: {source: "TOP_STORIES", tiles: [{id: 3}, {id: 2}, {id: 4}]}});
let expectedPrefValue = JSON.stringify({5: [0], 6: [0]});
assert.calledWith(instance._prefs.set.secondCall, SPOC_IMPRESSION_TRACKING_PREF, expectedPrefValue);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/unit-entry.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/unit-entry.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/test/unit/unit-entry.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/test/unit/unit-entry.js 2019-02-07 12:50:25.000000000 +0000
@@ -37,12 +37,7 @@
ChromeUtils: {
defineModuleGetter() {},
generateQI() { return {}; },
- import(str) {
- if (str === "resource://services-settings/remote-settings.js") {
- return {RemoteSettings: TEST_GLOBAL.RemoteSettings};
- }
- return {};
- },
+ import() { return global; },
},
Components: {isSuccessCode: () => true},
// eslint-disable-next-line object-shorthand
@@ -223,8 +218,8 @@
}),
},
search: {
- init(cb) { cb(); },
- getVisibleEngines: () => [{identifier: "google"}, {identifier: "bing"}],
+ init() { return Promise.resolve(); },
+ getVisibleEngines: () => Promise.resolve([{identifier: "google"}, {identifier: "bing"}]),
defaultEngine: {
identifier: "google",
searchForm: "https://www.google.com/search?q=&ie=utf-8&oe=utf-8&client=firefox-b",
@@ -232,6 +227,7 @@
__internalAliases: ["@google"],
},
},
+ currentEngine: {identifier: "google", searchForm: "https://www.google.com/search?q=&ie=utf-8&oe=utf-8&client=firefox-b"},
},
scriptSecurityManager: {
createNullPrincipal() {},
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/webpack.system-addon.config.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/webpack.system-addon.config.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/newtab/webpack.system-addon.config.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/newtab/webpack.system-addon.config.js 2019-02-07 12:50:25.000000000 +0000
@@ -34,7 +34,7 @@
exclude: /node_modules/,
loader: "babel-loader",
// Converts .jsm files into common-js modules
- options: {plugins: [["jsm-to-esmodules", {basePath: resourcePathRegEx, replace: true}], ["transform-object-rest-spread", {"useBuiltIns": true}]]},
+ options: {plugins: [["jsm-to-esmodules", {basePath: resourcePathRegEx, removeOtherImports: true, replace: true}], ["transform-object-rest-spread", {"useBuiltIns": true}]]},
},
],
},
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/nsBrowserGlue.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/nsBrowserGlue.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/nsBrowserGlue.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/nsBrowserGlue.js 2019-02-07 12:50:25.000000000 +0000
@@ -987,8 +987,7 @@
os.removeObserver(this, "sync-ui-state:update");
os.removeObserver(this, "shield-init-complete");
- Services.prefs.removeObserver("privacy.trackingprotection.enabled", this._matchCBCategory);
- Services.prefs.removeObserver("privacy.trackingprotection.pbmode.enabled", this._matchCBCategory);
+ Services.prefs.removeObserver("privacy.trackingprotection", this._matchCBCategory);
Services.prefs.removeObserver("urlclassifier.trackingTable", this._matchCBCategory);
Services.prefs.removeObserver("network.cookie.cookieBehavior", this._matchCBCategory);
Services.prefs.removeObserver(ContentBlockingCategoriesPrefs.PREF_CB_CATEGORY, this._updateCBCategory);
@@ -1363,8 +1362,8 @@
PlacesUtils.favicons.setDefaultIconURIPreferredSize(16 * aWindow.devicePixelRatio);
this._matchCBCategory();
- Services.prefs.addObserver("privacy.trackingprotection.enabled", this._matchCBCategory);
- Services.prefs.addObserver("privacy.trackingprotection.pbmode.enabled", this._matchCBCategory);
+ // This observes the entire privacy.trackingprotection.* pref tree.
+ Services.prefs.addObserver("privacy.trackingprotection", this._matchCBCategory);
Services.prefs.addObserver("urlclassifier.trackingTable", this._matchCBCategory);
Services.prefs.addObserver("network.cookie.cookieBehavior", this._matchCBCategory);
Services.prefs.addObserver(ContentBlockingCategoriesPrefs.PREF_CB_CATEGORY, this._updateCBCategory);
@@ -2996,12 +2995,16 @@
["network.cookie.cookieBehavior", Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER],
["privacy.trackingprotection.pbmode.enabled", true],
["privacy.trackingprotection.enabled", true],
+ ["privacy.trackingprotection.fingerprinting.enabled", null],
+ ["privacy.trackingprotection.cryptomining.enabled", null],
],
standard: [
["urlclassifier.trackingTable", null],
["network.cookie.cookieBehavior", null],
["privacy.trackingprotection.pbmode.enabled", null],
["privacy.trackingprotection.enabled", null],
+ ["privacy.trackingprotection.fingerprinting.enabled", null],
+ ["privacy.trackingprotection.cryptomining.enabled", null],
],
},
switchingCategory: false,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/privacy.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/privacy.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/privacy.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/privacy.js 2019-02-07 12:50:25.000000000 +0000
@@ -41,9 +41,11 @@
});
Preferences.addAll([
- // Tracking Protection
+ // Content blocking / Tracking Protection
{ id: "privacy.trackingprotection.enabled", type: "bool" },
{ id: "privacy.trackingprotection.pbmode.enabled", type: "bool" },
+ { id: "privacy.trackingprotection.fingerprinting.enabled", type: "bool" },
+ { id: "privacy.trackingprotection.cryptomining.enabled", type: "bool" },
// Button prefs
{ id: "pref.privacy.disable_button.cookie_exceptions", type: "bool" },
@@ -448,6 +450,14 @@
Preferences.get("browser.contentblocking.category").on("change",
gPrivacyPane.highlightCBCategory);
+ let cryptoMinersOption = document.getElementById("contentBlockingCryptominersOption");
+ let fingerprintersOption = document.getElementById("contentBlockingFingerprintersOption");
+
+ cryptoMinersOption.hidden =
+ !Services.prefs.getBoolPref("browser.contentblocking.cryptomining.preferences.ui.enabled");
+ fingerprintersOption.hidden =
+ !Services.prefs.getBoolPref("browser.contentblocking.fingerprinting.preferences.ui.enabled");
+
this.highlightCBCategory();
this.readBlockCookies();
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/privacy.xul firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/privacy.xul
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/privacy.xul 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/privacy.xul 2019-02-07 12:50:25.000000000 +0000
@@ -106,7 +106,7 @@
-
+
@@ -175,6 +175,20 @@
+
+
+
+
+
+
@@ -182,7 +196,7 @@
-
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/tests/browser_contentblocking.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/tests/browser_contentblocking.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/in-content/tests/browser_contentblocking.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/in-content/tests/browser_contentblocking.js 2019-02-07 12:50:25.000000000 +0000
@@ -8,6 +8,8 @@
const TP_LIST_PREF = "urlclassifier.trackingTable";
const NCB_PREF = "network.cookie.cookieBehavior";
const CAT_PREF = "browser.contentblocking.category";
+const FP_PREF = "privacy.trackingprotection.fingerprinting.enabled";
+const CM_PREF = "privacy.trackingprotection.cryptomining.enabled";
requestLongerTimeout(2);
@@ -113,6 +115,8 @@
[TP_PREF]: null,
[TP_PBM_PREF]: null,
[NCB_PREF]: null,
+ [FP_PREF]: null,
+ [CM_PREF]: null,
};
for (let pref in prefs) {
@@ -135,6 +139,8 @@
Services.prefs.setBoolPref(TP_PREF, true);
Services.prefs.setBoolPref(TP_PBM_PREF, false);
Services.prefs.setIntPref(NCB_PREF, Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER);
+ Services.prefs.setBoolPref(FP_PREF, true);
+ Services.prefs.setBoolPref(CM_PREF, true);
for (let pref in prefs) {
switch (Services.prefs.getPrefType(pref)) {
@@ -197,13 +203,15 @@
is(Services.prefs.getBoolPref(TP_PBM_PREF), true, `${TP_PBM_PREF} has been set to true`);
is(Services.prefs.getIntPref(NCB_PREF), Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER, `${NCB_PREF} has been set to ${Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER}`);
ok(!Services.prefs.prefHasUserValue(TP_LIST_PREF), `reset the pref ${TP_LIST_PREF}`);
+ ok(!Services.prefs.prefHasUserValue(FP_PREF), `reset the pref ${FP_PREF}`);
+ ok(!Services.prefs.prefHasUserValue(CM_PREF), `reset the pref ${CM_PREF}`);
gBrowser.removeCurrentTab();
});
// Tests that the content blocking "Custom" category behaves as expected.
add_task(async function testContentBlockingCustomCategory() {
- let prefs = [TP_LIST_PREF, TP_PREF, TP_PBM_PREF, NCB_PREF];
+ let prefs = [TP_LIST_PREF, TP_PREF, TP_PBM_PREF, NCB_PREF, FP_PREF, CM_PREF];
await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
let doc = gBrowser.contentDocument;
@@ -234,6 +242,16 @@
strictRadioOption.click();
await TestUtils.waitForCondition(() => Services.prefs.getStringPref(CAT_PREF) == "strict");
+ // Changing the FP_PREF and CM_PREF should necessarily set CAT_PREF to "custom"
+ for (let pref of [FP_PREF, CM_PREF]) {
+ Services.prefs.setBoolPref(pref, true);
+ await TestUtils.waitForCondition(() => Services.prefs.prefHasUserValue(pref));
+ is(Services.prefs.getStringPref(CAT_PREF), "custom", `${CAT_PREF} has been set to custom`);
+
+ strictRadioOption.click();
+ await TestUtils.waitForCondition(() => Services.prefs.getStringPref(CAT_PREF) == "strict");
+ }
+
// Changing the NCB_PREF should necessarily set CAT_PREF to "custom"
let defaultNCB = defaults.get(NCB_PREF);
let nonDefaultNCB;
@@ -291,3 +309,49 @@
gBrowser.removeCurrentTab();
});
+
+// Checks that cryptomining and fingerprinting visibility can be controlled via pref.
+add_task(async function testCustomOptionsVisibility() {
+ Services.prefs.setBoolPref("browser.contentblocking.cryptomining.preferences.ui.enabled", false);
+ Services.prefs.setBoolPref("browser.contentblocking.fingerprinting.preferences.ui.enabled", false);
+
+ await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
+
+ let doc = gBrowser.contentDocument;
+ let cryptominersOption = doc.getElementById("contentBlockingCryptominersOption");
+ let fingerprintersOption = doc.getElementById("contentBlockingFingerprintersOption");
+
+ ok(cryptominersOption.hidden, "Cryptomining is hidden");
+ ok(fingerprintersOption.hidden, "Fingerprinting is hidden");
+
+ gBrowser.removeCurrentTab();
+
+ Services.prefs.setBoolPref("browser.contentblocking.cryptomining.preferences.ui.enabled", true);
+
+ await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
+
+ doc = gBrowser.contentDocument;
+ cryptominersOption = doc.getElementById("contentBlockingCryptominersOption");
+ fingerprintersOption = doc.getElementById("contentBlockingFingerprintersOption");
+
+ ok(!cryptominersOption.hidden, "Cryptomining is shown");
+ ok(fingerprintersOption.hidden, "Fingerprinting is hidden");
+
+ gBrowser.removeCurrentTab();
+
+ Services.prefs.setBoolPref("browser.contentblocking.fingerprinting.preferences.ui.enabled", true);
+
+ await openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
+
+ doc = gBrowser.contentDocument;
+ cryptominersOption = doc.getElementById("contentBlockingCryptominersOption");
+ fingerprintersOption = doc.getElementById("contentBlockingFingerprintersOption");
+
+ ok(!cryptominersOption.hidden, "Cryptomining is shown");
+ ok(!fingerprintersOption.hidden, "Fingerprinting is shown");
+
+ gBrowser.removeCurrentTab();
+
+ Services.prefs.clearUserPref("browser.contentblocking.cryptomining.preferences.ui.enabled");
+ Services.prefs.clearUserPref("browser.contentblocking.fingerprinting.preferences.ui.enabled");
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/permissions.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/permissions.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/preferences/permissions.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/preferences/permissions.js 2019-02-07 12:50:25.000000000 +0000
@@ -420,8 +420,11 @@
case "statusCol":
sortFunc = (a, b) => {
- return a.querySelector(".website-capability-value").getAttribute("value") >
- b.querySelector(".website-capability-value").getAttribute("value");
+ // The capabilities values ("Allow" and "Block") are localized asynchronously.
+ // Sort based on the guaranteed-present localization ID instead, note that the
+ // ascending/descending arrow may be pointing the wrong way.
+ return a.querySelector(".website-capability-value").getAttribute("data-l10n-id") >
+ b.querySelector(".website-capability-value").getAttribute("data-l10n-id");
};
break;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/resistfingerprinting/test/browser/browser_navigator.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/resistfingerprinting/test/browser/browser_navigator.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/resistfingerprinting/test/browser/browser_navigator.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/resistfingerprinting/test/browser/browser_navigator.js 2019-02-07 12:50:25.000000000 +0000
@@ -139,7 +139,7 @@
});
let appVersion = parseInt(Services.appinfo.version);
- let spoofedVersion = appVersion - ((appVersion - 4) % 7);
+ let spoofedVersion = appVersion - ((appVersion - 4) % 8);
spoofedUserAgentNavigator = `Mozilla/5.0 (${SPOOFED_UA_NAVIGATOR_OS[AppConstants.platform]}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
spoofedUserAgentHeader = `Mozilla/5.0 (${SPOOFED_UA_HTTPHEADER_OS[AppConstants.platform]}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/search/content/search-one-offs.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/search/content/search-one-offs.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/search/content/search-one-offs.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/search/content/search-one-offs.js 2019-02-07 12:50:25.000000000 +0000
@@ -79,6 +79,12 @@
this._engines = null;
/**
+ * `_rebuild()` is async, because it queries the Search Service, which means
+ * there is a potential for a race when it's called multiple times in succession.
+ */
+ this._rebuilding = false;
+
+ /**
* If a page offers more than this number of engines, the add-engines
* menu button is shown, instead of showing the engines directly in the
* popup.
@@ -399,9 +405,27 @@
}
/**
- * Builds all the UI.
+ * Infallible, non-re-entrant version of `__rebuild()`.
*/
async _rebuild() {
+ if (this._rebuilding) {
+ return;
+ }
+
+ this._rebuilding = true;
+ try {
+ await this.__rebuild();
+ } catch (ex) {
+ Cu.reportError("Search-one-offs::_rebuild() error: " + ex);
+ } finally {
+ this._rebuilding = false;
+ }
+ }
+
+ /**
+ * Builds all the UI.
+ */
+ async __rebuild() {
// Update the 'Search for with:" header.
this._updateAfterQueryChanged();
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_autocomplete_no_title.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_autocomplete_no_title.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_autocomplete_no_title.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_autocomplete_no_title.js 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,27 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * This test ensures that we display just the domain name when a URL result doesn't
+ * have a title.
+ */
+
+ add_task(async function() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
+ await PlacesUtils.history.clear();
+ const uri = "http://bug1060642.example.com/beards/are/pretty/great";
+ await PlacesTestUtils.addVisits([{ uri, title: "" }]);
+ registerCleanupFunction(async function() {
+ await PlacesUtils.history.clear();
+ BrowserTestUtils.removeTab(tab);
+ });
+
+ await promiseAutocompleteResultPopup("bug1060642");
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
+ Assert.equal(result.displayed.title, "bug1060642.example.com",
+ "Result title should be as expected");
+
+ await UrlbarTestUtils.promisePopupClose(window);
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser.ini firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser.ini
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser.ini 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser.ini 2019-02-07 12:50:26.000000000 +0000
@@ -13,6 +13,7 @@
[browser_action_searchengine.js]
[browser_action_searchengine_alias.js]
[browser_autocomplete_edit_completed.js]
+[browser_autocomplete_no_title.js]
[browser_canonizeURL.js]
[browser_locationBarCommand.js]
[browser_locationBarExternalLoad.js]
@@ -22,7 +23,11 @@
[browser_redirect_error.js]
support-files = redirect_error.sjs
[browser_remotetab.js]
+[browser_removeUnsafeProtocolsFromURLBarPaste.js]
+subsuite = clipboard
[browser_switchToTabHavingURI_aOpenParams.js]
+[browser_tabMatchesInAwesomebar_perwindowpb.js]
+skip-if = os == 'linux' # Bug 1104755 (Intermittent failure)
[browser_urlbar_blanking.js]
support-files =
file_blank_but_not_blank.html
@@ -46,7 +51,12 @@
support-files =
authenticate.sjs
[browser_urlbarCutting.js]
+[browser_urlbarDecode.js]
+[browser_urlbarDelete.js]
+skip-if = os != "mac" # Bug 1525547 - Delete key not working correctly on non-mac
[browser_urlbarEnter.js]
+[browser_urlbarEnterAfterMouseOver.js]
+skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux/e10s
[browser_urlbarFocusedCmdK.js]
[browser_urlbarHashChangeProxyState.js]
[browser_UrlbarInput_autofill.js]
@@ -60,6 +70,7 @@
[browser_UrlbarInput_unit.js]
support-files = empty.xul
[browser_UrlbarLoadRace.js]
+[browser_urlbarOneOffs_settings.js]
[browser_urlbarPlaceholder.js]
support-files =
searchSuggestionEngine.xml
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_removeUnsafeProtocolsFromURLBarPaste.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_removeUnsafeProtocolsFromURLBarPaste.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_removeUnsafeProtocolsFromURLBarPaste.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_removeUnsafeProtocolsFromURLBarPaste.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,70 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Ensures that pasting unsafe protocols in the urlbar have the protocol
+ * correctly stripped.
+ */
+
+var pairs = [
+ ["javascript:", ""],
+ ["javascript:1+1", "1+1"],
+ ["javascript:document.domain", "document.domain"],
+ [" \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009javascript:document.domain", "document.domain"],
+ ["java\nscript:foo", "foo"],
+ ["java\tscript:foo", "foo"],
+ ["http://\nexample.com", "http://example.com"],
+ ["http://\nexample.com\n", "http://example.com"],
+ ["data:text/html,hi", "data:text/html,hi"],
+ ["javaScript:foopy", "foopy"],
+ ["javaScript:javaScript:alert('hi')", "alert('hi')"],
+ // Nested things get confusing because some things don't parse as URIs:
+ ["javascript:javascript:alert('hi!')", "alert('hi!')"],
+ ["data:data:text/html,hi", "data:data:text/html,hi"],
+ ["javascript:data:javascript:alert('hi!')", "data:javascript:alert('hi!')"],
+ ["javascript:data:text/html,javascript:alert('hi!')", "data:text/html,javascript:alert('hi!')"],
+ ["data:data:text/html,javascript:alert('hi!')", "data:data:text/html,javascript:alert('hi!')"],
+];
+
+let supportsNullBytes = AppConstants.platform == "macosx";
+// Note that \u000d (\r) is missing here; we test it separately because it
+// makes the test sad on Windows.
+let gobbledygook = "\u000a\u000b\u000c\u000e\u000f\u0010\u0011\u0012\u0013\u0014javascript:foo";
+if (supportsNullBytes) {
+ gobbledygook = "\u0000" + gobbledygook;
+}
+pairs.push([gobbledygook, "foo"]);
+
+let supportsReturnWithoutNewline = AppConstants.platform != "win";
+if (supportsReturnWithoutNewline) {
+ pairs.push(["java\rscript:foo", "foo"]);
+}
+
+var clipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
+
+async function paste(input) {
+ try {
+ await SimpleTest.promiseClipboardChange(input, () => {
+ clipboardHelper.copyString(input);
+ });
+ } catch (ex) {
+ Assert.ok(false, "Failed to copy string '" + input + "' to clipboard");
+ }
+
+ document.commandDispatcher.getControllerForCommand("cmd_paste").doCommand("cmd_paste");
+}
+
+add_task(async function test_stripUnsafeProtocolPaste() {
+ for (let [inputValue, expectedURL] of pairs) {
+ gURLBar.value = "";
+ gURLBar.focus();
+ await paste(inputValue);
+
+ Assert.equal(gURLBar.textValue, expectedURL,
+ `entering ${inputValue} strips relevant bits.`);
+
+ await new Promise(resolve => setTimeout(resolve, 0));
+ }
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar_perwindowpb.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar_perwindowpb.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar_perwindowpb.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar_perwindowpb.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,96 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * This test ensures that we don't move switch between tabs when one is in
+ * private browsing and the other is normal, or vice-versa.
+ */
+
+const TEST_PATH = getRootDirectory(gTestPath)
+ .replace("chrome://mochitests/content", "http://example.com");
+const TEST_URL = `${TEST_PATH}dummy_page.html`;
+
+add_task(async function() {
+ let normalWindow = await BrowserTestUtils.openNewBrowserWindow();
+ let privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
+ await runTest(normalWindow, privateWindow, false);
+ await BrowserTestUtils.closeWindow(normalWindow);
+ await BrowserTestUtils.closeWindow(privateWindow);
+
+ normalWindow = await BrowserTestUtils.openNewBrowserWindow();
+ privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
+ await runTest(privateWindow, normalWindow, false);
+ await BrowserTestUtils.closeWindow(normalWindow);
+ await BrowserTestUtils.closeWindow(privateWindow);
+
+ privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
+ await runTest(privateWindow, privateWindow, false);
+ await BrowserTestUtils.closeWindow(privateWindow);
+
+ normalWindow = await BrowserTestUtils.openNewBrowserWindow();
+ await runTest(normalWindow, normalWindow, true);
+ await BrowserTestUtils.closeWindow(normalWindow);
+});
+
+async function runTest(aSourceWindow, aDestWindow, aExpectSwitch, aCallback) {
+ await BrowserTestUtils.openNewForegroundTab(aSourceWindow.gBrowser, TEST_URL);
+ let testTab = await BrowserTestUtils.openNewForegroundTab(aDestWindow.gBrowser);
+
+ info("waiting for focus on the window");
+ await SimpleTest.promiseFocus(aDestWindow);
+ info("got focus on the window");
+
+ // Select the testTab
+ aDestWindow.gBrowser.selectedTab = testTab;
+
+ // Ensure that this tab has no history entries
+ let sessionHistoryCount = await new Promise(resolve => {
+ SessionStore.getSessionHistory(gBrowser.selectedTab, function(sessionHistory) {
+ resolve(sessionHistory.entries.length);
+ });
+ });
+
+ ok(sessionHistoryCount < 2,
+ `The test tab has 1 or fewer history entries. sessionHistoryCount=${sessionHistoryCount}`);
+ // Ensure that this tab is on about:blank
+ is(testTab.linkedBrowser.currentURI.spec, "about:blank",
+ "The test tab is on about:blank");
+ // Ensure that this tab's document has no child nodes
+ await ContentTask.spawn(testTab.linkedBrowser, null, async function() {
+ ok(!content.document.body.hasChildNodes(),
+ "The test tab has no child nodes");
+ });
+ ok(!testTab.hasAttribute("busy"),
+ "The test tab doesn't have the busy attribute");
+
+ // Wait for the Awesomebar popup to appear.
+ await promiseAutocompleteResultPopup(TEST_URL, aDestWindow);
+
+ info(`awesomebar popup appeared. aExpectSwitch: ${aExpectSwitch}`);
+ // Make sure the last match is selected.
+ while (UrlbarTestUtils.getSelectedIndex(aDestWindow) <
+ UrlbarTestUtils.getResultCount(aDestWindow) - 1) {
+ info("handling key navigation for DOM_VK_DOWN key");
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, aDestWindow);
+ }
+
+ let awaitTabSwitch;
+ if (aExpectSwitch) {
+ awaitTabSwitch = BrowserTestUtils.waitForTabClosing(testTab);
+ }
+
+ // Execute the selected action.
+ EventUtils.synthesizeKey("KEY_Enter", {}, aDestWindow);
+ info("sent Enter command to the controller");
+
+ if (aExpectSwitch) {
+ // If we expect a tab switch then the current tab
+ // will be closed and we switch to the other tab.
+ await awaitTabSwitch;
+ } else {
+ // If we don't expect a tab switch then wait for the tab to load.
+ await BrowserTestUtils.browserLoaded(testTab.linkedBrowser);
+ }
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarDecode.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarDecode.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarDecode.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarDecode.js 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,116 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// This test makes sure (1) you can't break the urlbar by typing particular JSON
+// or JS fragments into it, (2) urlbar.textValue shows URLs unescaped, and (3)
+// the urlbar also shows the URLs embedded in action URIs unescaped. See bug
+// 1233672.
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ UrlbarResult: "resource:///modules/UrlbarResult.jsm",
+ UrlbarUtils: "resource:///modules/UrlbarUtils.jsm",
+});
+
+add_task(async function injectJSON() {
+ let inputStrs = [
+ 'http://example.com/ ", "url": "bar',
+ "http://example.com/\\",
+ 'http://example.com/"',
+ 'http://example.com/","url":"evil.com',
+ "http://mozilla.org/\\u0020",
+ 'http://www.mozilla.org/","url":1e6,"some-key":"foo',
+ 'http://www.mozilla.org/","url":null,"some-key":"foo',
+ 'http://www.mozilla.org/","url":["foo","bar"],"some-key":"foo',
+ ];
+ for (let inputStr of inputStrs) {
+ await checkInput(inputStr);
+ }
+ gURLBar.value = "";
+ gURLBar.handleRevert();
+ gURLBar.blur();
+});
+
+add_task(function losslessDecode() {
+ let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
+ let url = "http://" + urlNoScheme;
+ if (Services.prefs.getBoolPref("browser.urlbar.quantumbar", true)) {
+ const result = new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ UrlbarUtils.RESULT_SOURCE.TABS,
+ { url });
+ gURLBar.setValueFromResult(result);
+ } else {
+ gURLBar.textValue = url;
+ }
+ // Since this is directly setting textValue, it is expected to be trimmed.
+ Assert.equal(gURLBar.inputField.value, urlNoScheme,
+ "The string displayed in the textbox should not be escaped");
+ gURLBar.value = "";
+ gURLBar.handleRevert();
+ gURLBar.blur();
+});
+
+add_task(async function actionURILosslessDecode() {
+ let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
+ let url = "http://" + urlNoScheme;
+ await promiseAutocompleteResultPopup(url);
+
+ // At this point the heuristic result is selected but the urlbar's value is
+ // simply `url`. Key down and back around until the heuristic result is
+ // selected again, and at that point the urlbar's value should be a visiturl
+ // moz-action.
+ do {
+ EventUtils.synthesizeKey("KEY_ArrowDown");
+ } while (UrlbarTestUtils.getSelectedIndex(window) != 0);
+
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 0);
+
+ Assert.equal(result.type, UrlbarUtils.RESULT_TYPE.URL,
+ "Should have selected a result of URL type");
+
+ Assert.equal(gURLBar.inputField.value, urlNoScheme,
+ "The string displayed in the textbox should not be escaped");
+
+ gURLBar.value = "";
+ gURLBar.handleRevert();
+ gURLBar.blur();
+});
+
+async function checkInput(inputStr) {
+ await promiseAutocompleteResultPopup(inputStr);
+
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 0);
+
+ // URL matches have their param.urls fixed up.
+ let fixupInfo = Services.uriFixup.getFixupURIInfo(inputStr,
+ Ci.nsIURIFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS |
+ Ci.nsIURIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP
+ );
+ let expectedVisitURL = fixupInfo.fixedURI.spec;
+
+ if (!UrlbarPrefs.get("quantumbar")) {
+ let type = "visiturl";
+ let params = {
+ url: expectedVisitURL,
+ input: inputStr,
+ };
+ for (let key in params) {
+ params[key] = encodeURIComponent(params[key]);
+ }
+ expectedVisitURL = "moz-action:" + type + "," + JSON.stringify(params);
+ }
+
+ Assert.equal(result.url, expectedVisitURL, "Should have the correct URL");
+ Assert.equal(result.title, inputStr.replace("\\", "/"),
+ "Should have the correct title");
+ Assert.equal(result.type, UrlbarUtils.RESULT_TYPE.URL,
+ "Should have be a result of type URL");
+
+ Assert.equal(result.displayed.title, inputStr.replace("\\", "/"),
+ "Should be displaying the correct text");
+ Assert.equal(result.displayed.action,
+ Services.strings.createBundle("chrome://global/locale/autocomplete.properties")
+ .GetStringFromName("visit"),
+ "Should be displaying the correct action text");
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarDelete.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarDelete.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarDelete.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarDelete.js 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,48 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test deleting the start of urls works correctly.
+ */
+
+add_task(async function() {
+ let bm = await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ url: "http://bug1105244.example.com/",
+ title: "test" });
+
+ registerCleanupFunction(async function() {
+ await PlacesUtils.bookmarks.remove(bm);
+ });
+
+ await BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, testDelete);
+});
+
+function sendHome() {
+ // unclear why VK_HOME doesn't work on Mac, but it doesn't...
+ if (AppConstants.platform == "macosx") {
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {metaKey: true});
+ } else {
+ EventUtils.synthesizeKey("KEY_Home");
+ }
+}
+
+function sendDelete() {
+ EventUtils.synthesizeKey("KEY_Delete");
+}
+
+async function testDelete() {
+ await promiseAutocompleteResultPopup("bug1105244");
+
+ // move to the start.
+ sendHome();
+
+ // delete the first few chars - each delete should operate on the input field.
+ await UrlbarTestUtils.promisePopupOpen(window, sendDelete);
+
+ Assert.equal(gURLBar.inputField.value, "ug1105244.example.com/");
+
+ sendDelete();
+ Assert.equal(gURLBar.inputField.value, "g1105244.example.com/");
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarEnterAfterMouseOver.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarEnterAfterMouseOver.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarEnterAfterMouseOver.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarEnterAfterMouseOver.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,80 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests that enter works correctly after a mouse over.
+ */
+
+function repeat(limit, func) {
+ for (let i = 0; i < limit; i++) {
+ func(i);
+ }
+}
+
+async function promiseAutoComplete(inputText) {
+ gURLBar.focus();
+ gURLBar.value = inputText.slice(0, -1);
+ EventUtils.sendString(inputText.slice(-1));
+ await promiseSearchComplete();
+}
+
+function assertSelected(index) {
+ Assert.equal(UrlbarTestUtils.getSelectedIndex(window), index,
+ "Should have the correct index selected");
+}
+
+let gMaxResults;
+
+add_task(async function() {
+ registerCleanupFunction(async function() {
+ await PlacesUtils.history.clear();
+ });
+
+ await PlacesUtils.history.clear();
+
+ gMaxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
+
+ let visits = [];
+ repeat(gMaxResults, i => {
+ visits.push({
+ uri: makeURI("http://example.com/autocomplete/?" + i),
+ });
+ });
+ await PlacesTestUtils.addVisits(visits);
+
+ gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
+ await promiseAutoComplete("http://example.com/autocomplete/");
+
+ Assert.equal(UrlbarTestUtils.getResultCount(window), gMaxResults,
+ "Should have got the correct amount of results");
+
+ let initiallySelected = UrlbarTestUtils.getSelectedIndex(window);
+
+ info("Key Down to select the next item");
+ EventUtils.synthesizeKey("KEY_ArrowDown");
+ assertSelected(initiallySelected + 1);
+
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, initiallySelected + 1);
+ let expectedURL = result.url;
+
+ Assert.equal(gURLBar.value, expectedURL,
+ "Value in the URL bar should be updated by keyboard selection");
+
+ // Verify that what we're about to do changes the selectedIndex:
+ Assert.notEqual(initiallySelected + 1, 3,
+ "Shouldn't be changing the selectedIndex to the same index we keyboard-selected.");
+
+ let element = await UrlbarTestUtils.waitForAutocompleteResultAt(window, 3);
+ EventUtils.synthesizeMouseAtCenter(element, {type: "mousemove"});
+
+ await UrlbarTestUtils.promisePopupClose(window, async () => {
+ let openedExpectedPage =
+ BrowserTestUtils.waitForDocLoadAndStopIt(expectedURL, gBrowser.selectedBrowser);
+ EventUtils.synthesizeKey("KEY_Enter");
+ await openedExpectedPage;
+ });
+
+ gBrowser.removeCurrentTab();
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_UrlbarInput_autofill.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_UrlbarInput_autofill.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_UrlbarInput_autofill.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_UrlbarInput_autofill.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,34 +2,24 @@
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
- * Tests the UrlbarInput.autofill() method. It needs to be tested in the actual
- * browser because UrlbarInput relies on the trimURL() function defined in the
- * browser window's global scope, and this test hits the path that calls it.
+ * Tests the autofill functionality of UrlbarInput.
*/
"use strict";
add_task(async function test() {
- let tests = [
- // [initial value, autofill value, expected selected substring in new value]
- ["foo", "foobar", "bar"],
- ["FOO", "foobar", "bar"],
- ["fOo", "foobar", "bar"],
- ["foo", "quuxbar", ""],
- ["FOO", "quuxbar", ""],
- ["fOo", "quuxbar", ""],
- ];
-
- gURLBar.focus();
- for (let [initial, autofill, expectedSelected] of tests) {
- gURLBar.value = initial;
- gURLBar.autofill(autofill);
- let expectedValue = initial + expectedSelected;
- Assert.equal(gURLBar.value, expectedValue,
- "The input value should be correct");
- Assert.equal(gURLBar.selectionStart, initial.length,
- "The start of the selection should be correct");
- Assert.equal(gURLBar.selectionEnd, expectedValue.length,
- "The end of the selection should be correct");
- }
+ gURLBar.setValueFromResult({
+ autofill: {
+ value: "foobar",
+ selectionStart: "foo".length,
+ selectionEnd: "foobar".length,
+ },
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ });
+ Assert.equal(gURLBar.value, "foobar",
+ "The input value should be correct");
+ Assert.equal(gURLBar.selectionStart, "foo".length,
+ "The start of the selection should be correct");
+ Assert.equal(gURLBar.selectionEnd, "foobar".length,
+ "The end of the selection should be correct");
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbar_locationchange_urlbar_edit_dos.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbar_locationchange_urlbar_edit_dos.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbar_locationchange_urlbar_edit_dos.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbar_locationchange_urlbar_edit_dos.js 2019-02-07 12:50:26.000000000 +0000
@@ -27,6 +27,11 @@
}
add_task(async function() {
+ // Disable autofill so that when checkURLBarValueStays types "a", it's not
+ // autofilled to addons.mozilla.org (or anything else).
+ await SpecialPowers.pushPrefEnv({ set: [
+ ["browser.urlbar.autoFill", false],
+ ]});
await BrowserTestUtils.withNewTab({
gBrowser,
url: TEST_URL,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarOneOffs_settings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarOneOffs_settings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/browser_urlbarOneOffs_settings.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/browser_urlbarOneOffs_settings.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,84 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * This tests that the settings button in the one-off buttons display correctly
+ * loads the search preferences.
+ */
+
+let gMaxResults;
+
+add_task(async function init() {
+ await SpecialPowers.pushPrefEnv({"set": [["browser.urlbar.oneOffSearches", true]]});
+ gMaxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
+
+ registerCleanupFunction(async function() {
+ await UrlbarTestUtils.promisePopupClose(window);
+ await PlacesUtils.history.clear();
+ });
+
+ await PlacesUtils.history.clear();
+
+ let visits = [];
+ for (let i = 0; i < gMaxResults; i++) {
+ visits.push({
+ uri: makeURI("http://example.com/browser_urlbarOneOffs.js/?" + i),
+ // TYPED so that the visit shows up when the urlbar's drop-down arrow is
+ // pressed.
+ transition: Ci.nsINavHistoryService.TRANSITION_TYPED,
+ });
+ }
+ await PlacesTestUtils.addVisits(visits);
+});
+
+
+async function selectSettings(activateFn) {
+ await BrowserTestUtils.withNewTab({gBrowser, url: "about:blank"}, async browser => {
+ await UrlbarTestUtils.promisePopupOpen(window, () => {
+ gURLBar.focus();
+ EventUtils.synthesizeKey("KEY_ArrowDown");
+ });
+ await waitForAutocompleteResultAt(gMaxResults - 1);
+
+ await UrlbarTestUtils.promisePopupClose(window, async () => {
+ let prefPaneLoaded = TestUtils.topicObserved("sync-pane-loaded", () => true);
+
+ activateFn();
+
+ await prefPaneLoaded;
+ });
+
+ Assert.equal(gBrowser.contentWindow.history.state, "paneSearch",
+ "Should have opened the search preferences pane");
+ });
+}
+
+add_task(async function test_open_settings_with_enter() {
+ // TODO: Bug 1525269 will implement this for QuantumBar.
+ if (UrlbarPrefs.get("quantumbar")) {
+ return;
+ }
+ if (!UrlbarPrefs.get("quantumbar")) {
+ // The old urlbar bindings can sometimes be in a state where they
+ // won't show the one off searches, so force it here.
+ gURLBar.popup.toggleOneOffSearches(true);
+ }
+
+ await selectSettings(() => {
+ EventUtils.synthesizeKey("KEY_ArrowUp");
+
+ Assert.ok(UrlbarTestUtils.getOneOffSearchButtons(window).selectedButton
+ .classList.contains("search-setting-button-compact"),
+ "Should have selected the settings button");
+
+ EventUtils.synthesizeKey("KEY_Enter");
+ });
+});
+
+add_task(async function test_open_settings_with_click() {
+ await selectSettings(() => {
+ UrlbarTestUtils.getOneOffSearchButtons(window).settingsButton.click();
+ });
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/head.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/head.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/browser/head.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/browser/head.js 2019-02-07 12:50:26.000000000 +0000
@@ -11,6 +11,7 @@
var {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
+ AppConstants: "resource://gre/modules/AppConstants.jsm",
PromiseUtils: "resource://gre/modules/PromiseUtils.jsm",
UrlbarController: "resource:///modules/UrlbarController.jsm",
UrlbarResult: "resource:///modules/UrlbarResult.jsm",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_autocomplete_no_title.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_autocomplete_no_title.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_autocomplete_no_title.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_autocomplete_no_title.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-add_task(async function() {
- let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
- await PlacesUtils.history.clear();
- const uri = "http://bug1060642.example.com/beards/are/pretty/great";
- await PlacesTestUtils.addVisits([{ uri, title: "" }]);
- registerCleanupFunction(async function() {
- await PlacesUtils.history.clear();
- BrowserTestUtils.removeTab(tab);
- });
-
- await promiseAutocompleteResultPopup("bug1060642");
- let result = await waitForAutocompleteResultAt(1);
- is(result._titleText.textContent, "bug1060642.example.com", "Result title should be as expected");
-
- gURLBar.popup.hidePopup();
- await promisePopupHidden(gURLBar.popup);
-});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser.ini firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser.ini
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser.ini 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser.ini 2019-02-07 12:50:25.000000000 +0000
@@ -23,7 +23,6 @@
[browser_autocomplete_cursor.js]
skip-if = verify
[browser_autocomplete_enter_race.js]
-[browser_autocomplete_no_title.js]
[browser_autocomplete_readline_navigation.js]
skip-if = os != "mac" # Mac only feature
[browser_autocomplete_tag_star_visibility.js]
@@ -31,8 +30,6 @@
[browser_keyword_select_and_type.js]
[browser_pasteAndGo.js]
subsuite = clipboard
-[browser_removeUnsafeProtocolsFromURLBarPaste.js]
-subsuite = clipboard
[browser_search_favicon.js]
[browser_switchtab_copy.js]
subsuite = clipboard
@@ -43,8 +40,6 @@
[browser_tabMatchesInAwesomebar.js]
support-files =
../browser/moz.png
-[browser_tabMatchesInAwesomebar_perwindowpb.js]
-skip-if = os == 'linux' # Bug 1104755
[browser_urlbarAddonIframe.js]
support-files =
../browser/Panel.jsm
@@ -53,10 +48,6 @@
../browser/urlbarAddonIframeContentScript.js
[browser_urlbarAutofillPreserveCase.js]
[browser_urlbarAutoFillTrimURLs.js]
-[browser_urlbarDecode.js]
-[browser_urlbarDelete.js]
-[browser_urlbarEnterAfterMouseOver.js]
-skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux/e10s
[browser_urlbarKeepStateAcrossTabSwitches.js]
[browser_urlbarOneOffs.js]
support-files =
@@ -66,10 +57,6 @@
support-files =
../browser/searchSuggestionEngine.xml
../browser/searchSuggestionEngine.sjs
-[browser_urlbarOneOffs_settings.js]
-support-files =
- ../browser/searchSuggestionEngine.xml
- ../browser/searchSuggestionEngine.sjs
[browser_urlbarPrivateBrowsingWindowChange.js]
[browser_urlbarRaceWithTabs.js]
skip-if = os == "linux" # Bug 1382456
@@ -95,6 +82,7 @@
[../browser/browser_action_searchengine.js]
[../browser/browser_action_searchengine_alias.js]
[../browser/browser_autocomplete_edit_completed.js]
+[../browser/browser_autocomplete_no_title.js]
[../browser/browser_canonizeURL.js]
[../browser/browser_URLBarSetURI.js]
skip-if = (os == "linux" || os == "mac") && debug # bug 970052, bug 970053
@@ -106,13 +94,18 @@
[../browser/browser_redirect_error.js]
support-files = ../browser/redirect_error.sjs
[../browser/browser_remotetab.js]
+[../browser/browser_removeUnsafeProtocolsFromURLBarPaste.js]
+subsuite = clipboard
[../browser/browser_switchToTabHavingURI_aOpenParams.js]
+[../browser/browser_tabMatchesInAwesomebar_perwindowpb.js]
+skip-if = os == 'linux' # Bug 1104755
[../browser/browser_urlbarAboutHomeLoading.js]
[../browser/browser_urlbarCopying.js]
subsuite = clipboard
support-files =
../browser/authenticate.sjs
[../browser/browser_urlbarCutting.js]
+[../browser/browser_urlbarDecode.js]
[../browser/browser_urlbar_blanking.js]
support-files =
../browser/file_blank_but_not_blank.html
@@ -120,10 +113,14 @@
[../browser/browser_urlbar_locationchange_urlbar_edit_dos.js]
support-files =
../browser/file_urlbar_edit_dos.html
+[../browser/browser_urlbarDelete.js]
[../browser/browser_urlbarEnter.js]
+[../browser/browser_urlbarEnterAfterMouseOver.js]
+skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux/e10s
[../browser/browser_urlbar_whereToOpen.js]
[../browser/browser_urlbarFocusedCmdK.js]
[../browser/browser_urlbarHashChangeProxyState.js]
+[../browser/browser_urlbarOneOffs_settings.js]
[../browser/browser_urlbarPlaceholder.js]
support-files =
../browser/searchSuggestionEngine.xml
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_removeUnsafeProtocolsFromURLBarPaste.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_removeUnsafeProtocolsFromURLBarPaste.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_removeUnsafeProtocolsFromURLBarPaste.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_removeUnsafeProtocolsFromURLBarPaste.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-function test() {
- waitForExplicitFinish();
- testNext();
-}
-
-var pairs = [
- ["javascript:", ""],
- ["javascript:1+1", "1+1"],
- ["javascript:document.domain", "document.domain"],
- [" \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009javascript:document.domain", "document.domain"],
- ["java\nscript:foo", "foo"],
- ["java\tscript:foo", "foo"],
- ["http://\nexample.com", "http://example.com"],
- ["http://\nexample.com\n", "http://example.com"],
- ["data:text/html,hi", "data:text/html,hi"],
- ["javaScript:foopy", "foopy"],
- ["javaScript:javaScript:alert('hi')", "alert('hi')"],
- // Nested things get confusing because some things don't parse as URIs:
- ["javascript:javascript:alert('hi!')", "alert('hi!')"],
- ["data:data:text/html,hi", "data:data:text/html,hi"],
- ["javascript:data:javascript:alert('hi!')", "data:javascript:alert('hi!')"],
- ["javascript:data:text/html,javascript:alert('hi!')", "data:text/html,javascript:alert('hi!')"],
- ["data:data:text/html,javascript:alert('hi!')", "data:data:text/html,javascript:alert('hi!')"],
-];
-
-let supportsNullBytes = AppConstants.platform == "macosx";
-// Note that \u000d (\r) is missing here; we test it separately because it
-// makes the test sad on Windows.
-let gobbledygook = "\u000a\u000b\u000c\u000e\u000f\u0010\u0011\u0012\u0013\u0014javascript:foo";
-if (supportsNullBytes) {
- gobbledygook = "\u0000" + gobbledygook;
-}
-pairs.push([gobbledygook, "foo"]);
-
-let supportsReturnWithoutNewline = AppConstants.platform != "win";
-if (supportsReturnWithoutNewline) {
- pairs.push(["java\rscript:foo", "foo"]);
-}
-
-var clipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
-
-function paste(input, cb) {
- waitForClipboard(input, function() {
- clipboardHelper.copyString(input);
- }, function() {
- document.commandDispatcher.getControllerForCommand("cmd_paste").doCommand("cmd_paste");
- cb();
- }, function() {
- ok(false, "Failed to copy string '" + input + "' to clipboard");
- cb();
- });
-}
-
-function testNext() {
- gURLBar.value = "";
- if (!pairs.length) {
- finish();
- return;
- }
-
- let [inputValue, expectedURL] = pairs.shift();
-
- gURLBar.focus();
- paste(inputValue, function() {
- is(gURLBar.textValue, expectedURL, "entering '" + inputValue + "' strips relevant bits.");
-
- setTimeout(testNext, 0);
- });
-}
-
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_tabMatchesInAwesomebar_perwindowpb.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_tabMatchesInAwesomebar_perwindowpb.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_tabMatchesInAwesomebar_perwindowpb.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_tabMatchesInAwesomebar_perwindowpb.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,86 +0,0 @@
-const TEST_PATH = getRootDirectory(gTestPath)
- .replace("chrome://mochitests/content", "http://example.com");
-const TEST_URL = `${TEST_PATH}dummy_page.html`;
-
-add_task(async function() {
- let normalWindow = await BrowserTestUtils.openNewBrowserWindow();
- let privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
- await runTest(normalWindow, privateWindow, false);
- await BrowserTestUtils.closeWindow(normalWindow);
- await BrowserTestUtils.closeWindow(privateWindow);
-
- normalWindow = await BrowserTestUtils.openNewBrowserWindow();
- privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
- await runTest(privateWindow, normalWindow, false);
- await BrowserTestUtils.closeWindow(normalWindow);
- await BrowserTestUtils.closeWindow(privateWindow);
-
- privateWindow = await BrowserTestUtils.openNewBrowserWindow({private: true});
- await runTest(privateWindow, privateWindow, false);
- await BrowserTestUtils.closeWindow(privateWindow);
-
- normalWindow = await BrowserTestUtils.openNewBrowserWindow();
- await runTest(normalWindow, normalWindow, true);
- await BrowserTestUtils.closeWindow(normalWindow);
-});
-
-async function runTest(aSourceWindow, aDestWindow, aExpectSwitch, aCallback) {
- await BrowserTestUtils.openNewForegroundTab(aSourceWindow.gBrowser, TEST_URL);
- let testTab = await BrowserTestUtils.openNewForegroundTab(aDestWindow.gBrowser);
-
- info("waiting for focus on the window");
- await SimpleTest.promiseFocus(aDestWindow);
- info("got focus on the window");
-
- // Select the testTab
- aDestWindow.gBrowser.selectedTab = testTab;
-
- // Ensure that this tab has no history entries
- let sessionHistoryCount = await new Promise(resolve => {
- SessionStore.getSessionHistory(gBrowser.selectedTab, function(sessionHistory) {
- resolve(sessionHistory.entries.length);
- });
- });
-
- ok(sessionHistoryCount < 2,
- `The test tab has 1 or fewer history entries. sessionHistoryCount=${sessionHistoryCount}`);
- // Ensure that this tab is on about:blank
- is(testTab.linkedBrowser.currentURI.spec, "about:blank",
- "The test tab is on about:blank");
- // Ensure that this tab's document has no child nodes
- await ContentTask.spawn(testTab.linkedBrowser, null, async function() {
- ok(!content.document.body.hasChildNodes(),
- "The test tab has no child nodes");
- });
- ok(!testTab.hasAttribute("busy"),
- "The test tab doesn't have the busy attribute");
-
- // Wait for the Awesomebar popup to appear.
- await promiseAutocompleteResultPopup(TEST_URL, aDestWindow);
-
- info(`awesomebar popup appeared. aExpectSwitch: ${aExpectSwitch}`);
- // Make sure the last match is selected.
- let {controller, popup} = aDestWindow.gURLBar;
- while (popup.selectedIndex < controller.matchCount - 1) {
- info("handling key navigation for DOM_VK_DOWN key");
- controller.handleKeyNavigation(KeyEvent.DOM_VK_DOWN);
- }
-
- let awaitTabSwitch;
- if (aExpectSwitch) {
- awaitTabSwitch = BrowserTestUtils.waitForTabClosing(testTab);
- }
-
- // Execute the selected action.
- controller.handleEnter(true);
- info("sent Enter command to the controller");
-
- if (aExpectSwitch) {
- // If we expect a tab switch then the current tab
- // will be closed and we switch to the other tab.
- await awaitTabSwitch;
- } else {
- // If we don't expect a tab switch then wait for the tab to load.
- await BrowserTestUtils.browserLoaded(testTab.linkedBrowser);
- }
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarDecode.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarDecode.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarDecode.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarDecode.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,109 +0,0 @@
-"use strict";
-
-// This test makes sure (1) you can't break the urlbar by typing particular JSON
-// or JS fragments into it, (2) urlbar.textValue shows URLs unescaped, and (3)
-// the urlbar also shows the URLs embedded in action URIs unescaped. See bug
-// 1233672.
-
-XPCOMUtils.defineLazyModuleGetters(this, {
- UrlbarResult: "resource:///modules/UrlbarResult.jsm",
- UrlbarUtils: "resource:///modules/UrlbarUtils.jsm",
-});
-
-add_task(async function injectJSON() {
- let inputStrs = [
- 'http://example.com/ ", "url": "bar',
- "http://example.com/\\",
- 'http://example.com/"',
- 'http://example.com/","url":"evil.com',
- "http://mozilla.org/\\u0020",
- 'http://www.mozilla.org/","url":1e6,"some-key":"foo',
- 'http://www.mozilla.org/","url":null,"some-key":"foo',
- 'http://www.mozilla.org/","url":["foo","bar"],"some-key":"foo',
- ];
- for (let inputStr of inputStrs) {
- await checkInput(inputStr);
- }
- gURLBar.value = "";
- gURLBar.handleRevert();
- gURLBar.blur();
-});
-
-add_task(function losslessDecode() {
- let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
- let url = "http://" + urlNoScheme;
- if (Services.prefs.getBoolPref("browser.urlbar.quantumbar", true)) {
- const result = new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
- UrlbarUtils.RESULT_SOURCE.TABS,
- { url });
- gURLBar.setValueFromResult(result);
- } else {
- gURLBar.textValue = url;
- }
- // Since this is directly setting textValue, it is expected to be trimmed.
- Assert.equal(gURLBar.inputField.value, urlNoScheme,
- "The string displayed in the textbox should not be escaped");
- gURLBar.value = "";
- gURLBar.handleRevert();
- gURLBar.blur();
-});
-
-add_task(async function actionURILosslessDecode() {
- let urlNoScheme = "example.com/\u30a2\u30a4\u30a6\u30a8\u30aa";
- let url = "http://" + urlNoScheme;
- await promiseAutocompleteResultPopup(url);
-
- // At this point the heuristic result is selected but the urlbar's value is
- // simply `url`. Key down and back around until the heuristic result is
- // selected again, and at that point the urlbar's value should be a visiturl
- // moz-action.
-
- do {
- gURLBar.controller.handleKeyNavigation(KeyEvent.DOM_VK_DOWN);
- } while (gURLBar.popup.selectedIndex != 0);
-
- let [, type ] = gURLBar.value.match(/^moz-action:([^,]+),(.*)$/);
- Assert.equal(type, "visiturl",
- "visiturl action URI should be in the urlbar");
-
- Assert.equal(gURLBar.inputField.value, urlNoScheme,
- "The string displayed in the textbox should not be escaped");
-
- gURLBar.value = "";
- gURLBar.handleRevert();
- gURLBar.blur();
-});
-
-async function checkInput(inputStr) {
- await promiseAutocompleteResultPopup(inputStr);
-
- let item = gURLBar.popup.richlistbox.firstElementChild;
- Assert.ok(item, "Should have a result");
-
- // visiturl matches have their param.urls fixed up.
- let fixupInfo = Services.uriFixup.getFixupURIInfo(inputStr,
- Ci.nsIURIFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS |
- Ci.nsIURIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP
- );
- let expectedVisitURL = fixupInfo.fixedURI.spec;
-
- let type = "visiturl";
- let params = {
- url: expectedVisitURL,
- input: inputStr,
- };
- for (let key in params) {
- params[key] = encodeURIComponent(params[key]);
- }
- let expectedURL = "moz-action:" + type + "," + JSON.stringify(params);
- Assert.equal(item.getAttribute("url"), expectedURL, "url");
-
- Assert.equal(item.getAttribute("title"), inputStr.replace("\\", "/"), "title");
- Assert.equal(item.getAttribute("text"), inputStr, "text");
-
- let itemType = item.getAttribute("type");
- Assert.equal(itemType, "visiturl");
-
- Assert.equal(item._titleText.textContent, inputStr.replace("\\", "/"), "Visible title");
- Assert.equal(item._actionText.textContent, "Visit", "Visible action");
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarDelete.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarDelete.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarDelete.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarDelete.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-add_task(async function() {
- let bm = await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
- url: "http://bug1105244.example.com/",
- title: "test" });
-
- registerCleanupFunction(async function() {
- await PlacesUtils.bookmarks.remove(bm);
- });
-
- await BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, testDelete);
-});
-
-function sendHome() {
- // unclear why VK_HOME doesn't work on Mac, but it doesn't...
- if (Services.appinfo.OS == "Darwin") {
- EventUtils.synthesizeKey("KEY_ArrowLeft", {metaKey: true});
- } else {
- EventUtils.synthesizeKey("KEY_Home");
- }
-}
-
-function sendDelete() {
- EventUtils.synthesizeKey("KEY_Delete");
-}
-
-async function testDelete() {
- await promiseAutocompleteResultPopup("bug1105244");
-
- // move to the start.
- sendHome();
- // delete the first few chars - each delete should operate on the input field.
- sendDelete();
- Assert.equal(gURLBar.inputField.value, "ug1105244.example.com/");
-
- await promisePopupShown(gURLBar.popup);
-
- sendDelete();
- Assert.equal(gURLBar.inputField.value, "g1105244.example.com/");
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarEnterAfterMouseOver.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarEnterAfterMouseOver.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarEnterAfterMouseOver.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarEnterAfterMouseOver.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-function repeat(limit, func) {
- for (let i = 0; i < limit; i++) {
- func(i);
- }
-}
-
-async function promiseAutoComplete(inputText) {
- gURLBar.focus();
- gURLBar.value = inputText.slice(0, -1);
- EventUtils.sendString(inputText.slice(-1));
- await promiseSearchComplete();
-}
-
-function is_selected(index) {
- is(gURLBar.popup.richlistbox.selectedIndex, index, `Item ${index + 1} should be selected`);
-}
-
-let gMaxResults;
-
-add_task(async function() {
- registerCleanupFunction(async function() {
- await PlacesUtils.history.clear();
- });
-
- await PlacesUtils.history.clear();
-
- gMaxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
-
- let visits = [];
- repeat(gMaxResults, i => {
- visits.push({
- uri: makeURI("http://example.com/autocomplete/?" + i),
- });
- });
- await PlacesTestUtils.addVisits(visits);
-
- gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
- await promiseAutoComplete("http://example.com/autocomplete/");
-
- let popup = gURLBar.popup;
- let results = popup.richlistbox.itemChildren;
- is(results.length, gMaxResults,
- "Should get gMaxResults=" + gMaxResults + " results");
-
- let initiallySelected = gURLBar.popup.richlistbox.selectedIndex;
-
- info("Key Down to select the next item");
- EventUtils.synthesizeKey("KEY_ArrowDown");
- is_selected(initiallySelected + 1);
- let expectedURL = gURLBar.controller.getFinalCompleteValueAt(initiallySelected + 1);
-
- is(gURLBar.value, gURLBar.controller.getValueAt(initiallySelected + 1),
- "Value in the URL bar should be updated by keyboard selection");
-
- // Verify that what we're about to do changes the selectedIndex:
- isnot(initiallySelected + 1, 3, "Shouldn't be changing the selectedIndex to the same index we keyboard-selected.");
-
- // Would love to use a synthetic mousemove event here, but that doesn't seem to do anything.
- // EventUtils.synthesizeMouseAtCenter(results[3], {type: "mousemove"});
- gURLBar.popup.richlistbox.selectedIndex = 3;
- is_selected(3);
-
- let autocompletePopupHidden = promisePopupHidden(gURLBar.popup);
- let openedExpectedPage =
- BrowserTestUtils.waitForDocLoadAndStopIt(expectedURL, gBrowser.selectedBrowser);
- EventUtils.synthesizeKey("KEY_Enter");
- await Promise.all([autocompletePopupHidden, openedExpectedPage]);
-
- gBrowser.removeCurrentTab();
-});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarOneOffs_settings.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarOneOffs_settings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/legacy/browser_urlbarOneOffs_settings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/legacy/browser_urlbarOneOffs_settings.js 1970-01-01 00:00:00.000000000 +0000
@@ -1,79 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
-
-let gMaxResults;
-
-add_task(async function init() {
- Services.prefs.setBoolPref("browser.urlbar.oneOffSearches", true);
- gMaxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
-
- // Add a search suggestion engine and move it to the front so that it appears
- // as the first one-off.
- let engine = await SearchTestUtils.promiseNewSearchEngine(
- getRootDirectory(gTestPath) + TEST_ENGINE_BASENAME);
- await Services.search.moveEngine(engine, 0);
-
- registerCleanupFunction(async function() {
- await hidePopup();
- await PlacesUtils.history.clear();
- });
-
- await PlacesUtils.history.clear();
-
- let visits = [];
- for (let i = 0; i < gMaxResults; i++) {
- visits.push({
- uri: makeURI("http://example.com/browser_urlbarOneOffs.js/?" + i),
- // TYPED so that the visit shows up when the urlbar's drop-down arrow is
- // pressed.
- transition: Ci.nsINavHistoryService.TRANSITION_TYPED,
- });
- }
- await PlacesTestUtils.addVisits(visits);
-});
-
-
-async function selectSettings(activateFn) {
- await BrowserTestUtils.withNewTab({gBrowser, url: "about:blank"}, async browser => {
- gURLBar.focus();
- EventUtils.synthesizeKey("KEY_ArrowDown");
- await promisePopupShown(gURLBar.popup);
- await waitForAutocompleteResultAt(gMaxResults - 1);
-
- let promiseHidden = promisePopupHidden(gURLBar.popup);
- let prefPaneLoaded = TestUtils.topicObserved("sync-pane-loaded", () => true);
-
- activateFn();
-
- await prefPaneLoaded;
- await promiseHidden;
-
- Assert.equal(gBrowser.contentWindow.history.state, "paneSearch",
- "Should have opened the search preferences pane");
- });
-}
-
-add_task(async function test_open_settings_with_enter() {
- await selectSettings(() => {
- EventUtils.synthesizeKey("KEY_ArrowUp");
-
- Assert.ok(gURLBar.popup.oneOffSearchButtons.selectedButton
- .classList.contains("search-setting-button-compact"),
- "Should have selected the settings button");
-
- EventUtils.synthesizeKey("KEY_Enter");
- });
-});
-
-add_task(async function test_open_settings_with_click() {
- await selectSettings(() => {
- gURLBar.popup.oneOffSearchButtons.settingsButton.click();
- });
-});
-
-async function hidePopup() {
- EventUtils.synthesizeKey("KEY_Escape");
- await promisePopupHidden(gURLBar.popup);
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/unit/test_UrlbarController_unit.js firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/unit/test_UrlbarController_unit.js
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/unit/test_UrlbarController_unit.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/unit/test_UrlbarController_unit.js 2019-02-07 12:50:26.000000000 +0000
@@ -205,45 +205,3 @@
sandbox.resetHistory();
});
-
-add_task(async function test_autofillValue() {
- // Ensure the controller doesn't have any previous queries.
- delete controller._lastQueryContext;
-
- // Stub the controller's input so we can tell whether input.autofill() is
- // called.
- let input = {
- autofill: sandbox.stub(),
- };
- controller.input = input;
-
- const context = createContext();
- controller.startQuery(context);
-
- // Set autofillValue and call receiveResults().
- context.autofillValue = "test";
- context.results = [
- new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
- UrlbarUtils.RESULT_SOURCE.TABS,
- { url: "http://example.com/1" }),
- ];
- controller.receiveResults(context);
-
- Assert.equal(input.autofill.callCount, 1,
- "Should have called input.autofill() one time");
- Assert.deepEqual(input.autofill.args[0], ["test"],
- "Should have called input.autofill() with context.autofillValue");
-
- // Call receiveResults() again with more results.
- context.results.push(
- new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
- UrlbarUtils.RESULT_SOURCE.TABS,
- { url: "http://example.com/2" }),
- );
- controller.receiveResults(context);
-
- Assert.equal(input.autofill.callCount, 1,
- "Should not have called input.autofill() again");
-
- sandbox.resetHistory();
-});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/UrlbarTestUtils.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/UrlbarTestUtils.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/tests/UrlbarTestUtils.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/tests/UrlbarTestUtils.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -72,6 +72,16 @@
},
/**
+ * Returns the oneOffSearchButtons object for the urlbar.
+ * @param {object} win The window containing the urlbar
+ * @returns {object} The oneOffSearchButtons
+ */
+ getOneOffSearchButtons(win) {
+ let urlbar = getUrlbarAbstraction(win);
+ return urlbar.oneOffSearchButtons;
+ },
+
+ /**
* Gets an abstracted rapresentation of the result at an index.
* @param {object} win The window containing the urlbar
* @param {number} index The index to look for
@@ -141,6 +151,20 @@
/**
* Waits for the popup to be hidden.
* @param {object} win The window containing the urlbar
+ * @param {function} openFn Function to be used to open the popup.
+ * @returns {Promise} resolved once the popup is closed
+ */
+ promisePopupOpen(win, openFn) {
+ if (!openFn) {
+ throw new Error("openFn should be supplied to promisePopupOpen");
+ }
+ let urlbar = getUrlbarAbstraction(win);
+ return urlbar.promisePopupOpen(openFn);
+ },
+
+ /**
+ * Waits for the popup to be hidden.
+ * @param {object} win The window containing the urlbar
* @param {function} [closeFn] Function to be used to close the popup, if not
* supplied it will default to a closing the popup directly.
* @returns {Promise} resolved once the popup is closed
@@ -223,6 +247,11 @@
return this.quantumbar ? this.urlbar.panel : this.urlbar.popup;
}
+ get oneOffSearchButtons() {
+ return this.quantumbar ? this.urlbar.view.oneOffSearchButtons :
+ this.urlbar.popup.oneOffSearchButtons;
+ }
+
startSearch(text) {
if (this.quantumbar) {
this.urlbar.value = text;
@@ -308,8 +337,14 @@
let context = await this.urlbar.lastQueryContextPromise;
details.url = (UrlbarUtils.getUrlFromResult(context.results[index])).url;
details.type = context.results[index].type;
- details.autofill = index == 0 && context.autofillValue;
+ details.autofill = index == 0 && context.results[index].autofill;
details.image = element.getElementsByClassName("urlbarView-favicon")[0].src;
+ details.title = context.results[index].title;
+ let actions = element.getElementsByClassName("urlbarView-action");
+ details.displayed = {
+ title: element.getElementsByClassName("urlbarView-title")[0].textContent,
+ action: actions.length > 0 ? actions[0].textContent : null,
+ };
if (details.type == UrlbarUtils.RESULT_TYPE.SEARCH) {
details.searchParams = {
engine: context.results[index].payload.engine,
@@ -325,6 +360,11 @@
details.type = getType(style, action);
details.autofill = style.includes("autofill");
details.image = element.getAttribute("image");
+ details.title = element.getAttribute("title");
+ details.displayed = {
+ title: element._titleText.textContent,
+ action: element._actionText.textContent,
+ };
if (details.type == UrlbarUtils.RESULT_TYPE.SEARCH) {
details.searchParams = {
engine: action.params.engineName,
@@ -366,6 +406,11 @@
});
}
+ async promisePopupOpen(openFn) {
+ await openFn();
+ return BrowserTestUtils.waitForPopupEvent(this.panel, "shown");
+ }
+
closePopup() {
if (this.quantumbar) {
this.urlbar.view.close();
@@ -374,9 +419,9 @@
}
}
- promisePopupClose(closeFn) {
+ async promisePopupClose(closeFn) {
if (closeFn) {
- closeFn();
+ await closeFn();
} else {
this.closePopup();
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarController.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarController.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarController.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarController.jsm 2019-02-07 12:50:26.000000000 +0000
@@ -136,8 +136,8 @@
}
if (queryContext.lastResultCount == 0) {
- if (queryContext.autofillValue) {
- this.input.autofill(queryContext.autofillValue);
+ if (queryContext.results.length && queryContext.results[0].autofill) {
+ this.input.setValueFromResult(queryContext.results[0]);
}
// The first time we receive results try to connect to the heuristic
// result.
@@ -273,7 +273,7 @@
switch (reason) {
case "resultsadded": {
// We should connect to an heuristic result, if it exists.
- if (resultIndex == 0 && (context.preselected || context.autofillValue)) {
+ if ((resultIndex == 0 && context.preselected) || result.autofill) {
if (result.type == UrlbarUtils.RESULT_TYPE.SEARCH) {
// Speculative connect only if search suggestions are enabled.
if (UrlbarPrefs.get("suggest.searches") &&
@@ -281,7 +281,7 @@
let engine = Services.search.defaultEngine;
UrlbarUtils.setupSpeculativeConnection(engine, this.browserWindow);
}
- } else if (context.autofillValue) {
+ } else if (result.autofill) {
UrlbarUtils.setupSpeculativeConnection(url, this.browserWindow);
}
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarInput.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarInput.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarInput.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarInput.jsm 2019-02-07 12:50:26.000000000 +0000
@@ -109,6 +109,7 @@
this.inputField.addEventListener("mouseover", this);
this.inputField.addEventListener("overflow", this);
this.inputField.addEventListener("underflow", this);
+ this.inputField.addEventListener("paste", this);
this.inputField.addEventListener("scrollend", this);
this.inputField.addEventListener("select", this);
this.inputField.addEventListener("keydown", this);
@@ -367,29 +368,14 @@
* @param {UrlbarResult} result The result that was selected.
*/
setValueFromResult(result) {
- let val;
- switch (result.type) {
- case UrlbarUtils.RESULT_TYPE.SEARCH:
- val = result.payload.suggestion || result.payload.query;
- break;
- case UrlbarUtils.RESULT_TYPE.OMNIBOX:
- val = result.payload.content;
- break;
- default: {
- val = result.payload.url;
- let uri;
- try {
- uri = Services.io.newURI(val);
- } catch (ex) {}
- if (uri) {
- val = this.window.losslessDecodeURI(uri);
- }
- break;
- }
+ if (result.autofill) {
+ this._setValueFromResultAutofill(result);
+ } else {
+ this.value = this._valueFromResultPayload(result);
}
- this.value = val;
+
// Also update userTypedValue. See bug 287996.
- this.window.gBrowser.userTypedValue = val;
+ this.window.gBrowser.userTypedValue = this.value;
// The value setter clobbers the actiontype attribute, so update this after that.
switch (result.type) {
@@ -482,27 +468,6 @@
this.textbox.classList.remove("hidden-focus");
}
- /**
- * Autofills the given value into the input. That is, sets the input's value
- * to the given value and selects the portion of the new value that comes
- * after the current value. The given value should therefore start with the
- * input's current value. If it doesn't, then this method doesn't do
- * anything.
- *
- * @param {string} value
- * The value to autofill.
- */
- autofill(value) {
- if (!value.toLocaleLowerCase()
- .startsWith(this.textValue.toLocaleLowerCase())) {
- return;
- }
- let len = this.textValue.length;
- this.value = this.textValue + value.substring(len);
- this.selectionStart = len;
- this.selectionEnd = value.length;
- }
-
// Getters and Setters below.
get focused() {
@@ -547,6 +512,30 @@
// Private methods below.
+ _setValueFromResultAutofill(result) {
+ this.value = result.autofill.value;
+ this.selectionStart = result.autofill.selectionStart;
+ this.selectionEnd = result.autofill.selectionEnd;
+ }
+
+ _valueFromResultPayload(result) {
+ switch (result.type) {
+ case UrlbarUtils.RESULT_TYPE.SEARCH:
+ return result.payload.suggestion || result.payload.query;
+ case UrlbarUtils.RESULT_TYPE.OMNIBOX:
+ return result.payload.content;
+ }
+
+ try {
+ let uri = Services.io.newURI(result.payload.url);
+ if (uri) {
+ return this.window.losslessDecodeURI(uri);
+ }
+ } catch (ex) {}
+
+ return "";
+ }
+
_updateTextOverflow() {
if (!this._overflowing) {
this.removeAttribute("textoverflow");
@@ -995,6 +984,37 @@
this._updateUrlTooltip();
}
+ _on_paste(event) {
+ let originalPasteData = event.clipboardData.getData("text/plain");
+ if (!originalPasteData) {
+ return;
+ }
+
+ let oldValue = this.inputField.value;
+ let oldStart = oldValue.substring(0, this.inputField.selectionStart);
+ // If there is already non-whitespace content in the URL bar
+ // preceding the pasted content, it's not necessary to check
+ // protocols used by the pasted content:
+ if (oldStart.trim()) {
+ return;
+ }
+ let oldEnd = oldValue.substring(this.inputField.selectionEnd);
+
+ let pasteData = UrlbarUtils.stripUnsafeProtocolOnPaste(originalPasteData);
+ if (originalPasteData != pasteData) {
+ // Unfortunately we're not allowed to set the bits being pasted
+ // so cancel this event:
+ event.preventDefault();
+ event.stopImmediatePropagation();
+
+ this.inputField.value = oldStart + pasteData + oldEnd;
+ // Fix up cursor/selection:
+ let newCursorPos = oldStart.length + pasteData.length;
+ this.inputField.selectionStart = newCursorPos;
+ this.inputField.selectionEnd = newCursorPos;
+ }
+ }
+
_on_scrollend(event) {
this._updateTextOverflow();
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarProviderUnifiedComplete.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarProviderUnifiedComplete.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarProviderUnifiedComplete.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarProviderUnifiedComplete.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -16,10 +16,10 @@
XPCOMUtils.defineLazyModuleGetters(this, {
Log: "resource://gre/modules/Log.jsm",
PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
+ PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
UrlbarProvider: "resource:///modules/UrlbarUtils.jsm",
UrlbarResult: "resource:///modules/UrlbarResult.jsm",
UrlbarUtils: "resource:///modules/UrlbarUtils.jsm",
- PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
});
XPCOMUtils.defineLazyServiceGetter(this, "unifiedComplete",
@@ -197,10 +197,19 @@
if (!match) {
continue;
}
- // Manage autofillValue and preselected properties for the first match.
+ // Manage autofill and preselected properties for the first match.
if (i == 0) {
if (style.includes("autofill") && result.defaultIndex == 0) {
- context.autofillValue = result.getValueAt(i);
+ let autofillValue = result.getValueAt(i);
+ if (autofillValue.toLocaleLowerCase()
+ .startsWith(context.searchString.toLocaleLowerCase())) {
+ match.autofill = {
+ value: context.searchString +
+ autofillValue.substring(context.searchString.length),
+ selectionStart: context.searchString.length,
+ selectionEnd: autofillValue.length,
+ };
+ }
}
if (style.includes("heuristic")) {
context.preselected = true;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarResult.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarResult.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarResult.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarResult.jsm 2019-02-07 12:50:25.000000000 +0000
@@ -131,6 +131,9 @@
* return values as the `payload` and `payloadHighlights` params of the
* UrlbarResult constructor.
*
+ * If the payload doesn't have a title or has an empty title, and it also has
+ * a URL, then this function also sets the title to the URL's domain.
+ *
* @param {array} tokens The tokens that should be highlighted in each of the
* payload properties.
* @param {object} payloadInfo An object that looks like this:
@@ -138,9 +141,25 @@
* payloadPropertyName: [payloadPropertyValue, shouldHighlight],
* ...
* }
+ * payloadPropertyValue may be a string or an array of strings. If
+ * it's a string, then the payloadHighlights in the return value will
+ * be an array of match highlights as described in
+ * UrlbarUtils.getTokenMatches(). If it's an array, then
+ * payloadHighlights will be an array of arrays of match highlights,
+ * one element per element in payloadPropertyValue.
* @returns {array} An array [payload, payloadHighlights].
*/
static payloadAndSimpleHighlights(tokens, payloadInfo) {
+ if ((!payloadInfo.title || (payloadInfo.title && !payloadInfo.title[0])) &&
+ payloadInfo.url && typeof payloadInfo.url[0] == "string") {
+ // If there's no title, show the domain as the title. Not all valid URLs
+ // have a domain.
+ payloadInfo.title = payloadInfo.title || ["", true];
+ try {
+ payloadInfo.title[0] = new URL(payloadInfo.url[0]).host;
+ } catch (e) {}
+ }
+
let entries = Object.entries(payloadInfo);
return [
entries.reduce((payload, [name, [val, _]]) => {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarUtils.jsm firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarUtils.jsm
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/components/urlbar/UrlbarUtils.jsm 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/components/urlbar/UrlbarUtils.jsm 2019-02-07 12:50:26.000000000 +0000
@@ -295,6 +295,29 @@
// Can't setup speculative connection for this url, just ignore it.
}
},
+
+ /**
+ * Used to filter out the javascript protocol from URIs, since we don't
+ * support LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL for those.
+ * @param {string} pasteData The data to check for javacript protocol.
+ * @returns {string} The modified paste data.
+ */
+ stripUnsafeProtocolOnPaste(pasteData) {
+ while (true) {
+ let scheme = "";
+ try {
+ scheme = Services.io.extractScheme(pasteData);
+ } catch (ex) {
+ // If it throws, this is not a javascript scheme.
+ }
+ if (scheme != "javascript") {
+ break;
+ }
+
+ pasteData = pasteData.substring(pasteData.indexOf(":") + 1);
+ }
+ return pasteData;
+ },
};
/**
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/config/mozconfigs/win32/l10n-mozconfig-devedition firefox-trunk-67.0~a1~hg20190207r457544/browser/config/mozconfigs/win32/l10n-mozconfig-devedition
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/config/mozconfigs/win32/l10n-mozconfig-devedition 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/config/mozconfigs/win32/l10n-mozconfig-devedition 2019-02-07 12:50:26.000000000 +0000
@@ -1,6 +1,8 @@
. "$topsrcdir/browser/config/mozconfigs/common"
. "$topsrcdir/build/mozconfig.no-compile"
+ac_add_options --target=i686-pc-mingw32
+
ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
ac_add_options --with-l10n-base=../../l10n
ac_add_options --with-branding=browser/branding/aurora
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/docs/AddressBar.rst firefox-trunk-67.0~a1~hg20190207r457544/browser/docs/AddressBar.rst
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/docs/AddressBar.rst 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/docs/AddressBar.rst 2019-02-07 12:50:25.000000000 +0000
@@ -75,8 +75,6 @@
// RESULT_SOURCE.*, that can be returned by the model.
// Properties added by the Model.
- autofillValue; // {string} the text value that should be autofilled in the
- // input, if any.
preselected; // {boolean} whether the first result should be preselected.
results; // {array} list of UrlbarResult objects.
tokens; // {array} tokens extracted from the searchString, each token is an
@@ -375,6 +373,12 @@
title: {string} A title that may be used as a label for this result.
icon: {string} Url of an icon for this result.
payload: {object} Object containing properties for the specific RESULT_TYPE.
+ autofill: {object} An object describing the text that should be
+ autofilled in the input when the result is selected, if any.
+ autofill.value: {string} The autofill value.
+ autofill.selectionStart: {integer} The first index in the autofill
+ selection.
+ autofill.selectionEnd: {integer} The last index in the autofill selection.
}
The following RESULT_TYPEs are supported:
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/installer/package-manifest.in firefox-trunk-67.0~a1~hg20190207r457544/browser/installer/package-manifest.in
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/installer/package-manifest.in 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/installer/package-manifest.in 2019-02-07 12:50:26.000000000 +0000
@@ -355,9 +355,6 @@
@RESPATH@/browser/components/startupRecorder.js
#endif
-@RESPATH@/components/mozDOMLocalization.js
-@RESPATH@/components/mozDOMLocalization.manifest
-
; [Extensions]
@RESPATH@/components/extensions-toolkit.manifest
@RESPATH@/browser/components/extensions-browser.manifest
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/locales/en-US/browser/preferences/preferences.ftl firefox-trunk-67.0~a1~hg20190207r457544/browser/locales/en-US/browser/preferences/preferences.ftl
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/locales/en-US/browser/preferences/preferences.ftl 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/locales/en-US/browser/preferences/preferences.ftl 2019-02-07 12:50:25.000000000 +0000
@@ -847,7 +847,7 @@
content-blocking-all-third-party-cookies = All third-party cookies
content-blocking-warning-title = Heads up!
-content-blocking-warning-desc = Blocking cookies and trackers can cause some websites to break. It’s easy to disable blocking for sites you trust.
+content-blocking-warning-description = Blocking content can cause some websites to break. It’s easy to disable blocking for sites you trust.
content-blocking-learn-how = Learn how
content-blocking-trackers-label =
@@ -865,6 +865,17 @@
.label = Cookies
.accesskey = C
+# Cryptomining refers to using scripts on websites that can use a computer’s resources to mine cryptocurrency without a user’s knowledge.
+content-blocking-cryptominers-label =
+ .label = Cryptominers
+ .accesskey = y
+
+# Browser fingerprinting is a method of tracking users by the configuration and settings information (their "digital fingerprint")
+# that is visible to websites they browse, rather than traditional tracking methods such as IP addresses and unique cookies.
+content-blocking-fingerprinters-label =
+ .label = Fingerprinters
+ .accesskey = F
+
## Privacy Section - Tracking
tracking-manage-exceptions =
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/osx/browser.css firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/osx/browser.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/osx/browser.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/osx/browser.css 2019-02-07 12:50:26.000000000 +0000
@@ -588,7 +588,7 @@
margin-bottom: 0;
}
-.tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([selected="true"]) {
+.tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([selected="true"]):not([multiselected]) {
opacity: .9;
}
@@ -600,7 +600,7 @@
opacity: 0.9999;
}
-.tab-label-container:not([selected="true"]) {
+.tab-label-container:not([selected="true"]):not([multiselected]) {
opacity: .7;
}
@@ -608,12 +608,13 @@
font: message-box;
border: none;
}
-
+.tabbrowser-tab[multiselected]:not(:-moz-lwtheme),
.tabbrowser-tab[visuallyselected=true]:not(:-moz-lwtheme) {
/* overriding tabbox.css */
color: hsl(240, 5%, 5%);
}
+.tabbrowser-tab[multiselected],
.tabbrowser-tab[visuallyselected=true] {
/* overriding tabbox.css */
text-shadow: inherit;
@@ -642,6 +643,7 @@
text-shadow: none;
}
+.tabbrowser-tab[multiselected]:not(:-moz-lwtheme),
.tabbrowser-tab[visuallyselected=true]:not(:-moz-lwtheme) {
-moz-font-smoothing-background-color: var(--toolbar-bgcolor);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/osx/compacttheme.css firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/osx/compacttheme.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/osx/compacttheme.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/osx/compacttheme.css 2019-02-07 12:50:26.000000000 +0000
@@ -9,6 +9,7 @@
-moz-font-smoothing-background-color: -moz-mac-vibrant-titlebar-light;
}
+.tabbrowser-tab[multiselected],
.tabbrowser-tab[visuallyselected=true] {
-moz-font-smoothing-background-color: var(--toolbar-bgcolor);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/cryptominers-disabled.svg firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/cryptominers-disabled.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/cryptominers-disabled.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/cryptominers-disabled.svg 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,7 @@
+
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/cryptominers.svg firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/cryptominers.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/cryptominers.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/cryptominers.svg 2019-02-07 12:50:25.000000000 +0000
@@ -0,0 +1,6 @@
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/fingerprinters-disabled.svg firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/fingerprinters-disabled.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/fingerprinters-disabled.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/fingerprinters-disabled.svg 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/fingerprinters.svg firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/fingerprinters.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/controlcenter/fingerprinters.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/controlcenter/fingerprinters.svg 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/incontentprefs/privacy.css firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/incontentprefs/privacy.css
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/incontentprefs/privacy.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/incontentprefs/privacy.css 2019-02-07 12:50:26.000000000 +0000
@@ -34,6 +34,21 @@
list-style-image: url("chrome://browser/skin/controlcenter/3rdpartycookies-disabled.svg");
}
+#contentBlockingCryptominersCheckbox > .checkbox-label-box {
+ list-style-image: url("chrome://browser/skin/controlcenter/cryptominers.svg");
+}
+
+#contentBlockingCryptominersCheckbox[checked] > .checkbox-label-box {
+ list-style-image: url("chrome://browser/skin/controlcenter/cryptominers-disabled.svg");
+}
+
+#contentBlockingFingerprintersCheckbox > .checkbox-label-box {
+ list-style-image: url("chrome://browser/skin/controlcenter/fingerprinters.svg");
+}
+
+#contentBlockingFingerprintersCheckbox[checked] > .checkbox-label-box {
+ list-style-image: url("chrome://browser/skin/controlcenter/fingerprinters-disabled.svg");
+}
.content-blocking-icon,
.permission-icon {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/jar.inc.mn firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/jar.inc.mn
--- firefox-trunk-67.0~a1~hg20190205r457303/browser/themes/shared/jar.inc.mn 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/browser/themes/shared/jar.inc.mn 2019-02-07 12:50:26.000000000 +0000
@@ -27,8 +27,12 @@
skin/classic/browser/controlcenter/3rdpartycookies-disabled.svg (../shared/controlcenter/3rdpartycookies-disabled.svg)
skin/classic/browser/controlcenter/conn-not-secure.svg (../shared/controlcenter/conn-not-secure.svg)
skin/classic/browser/controlcenter/connection.svg (../shared/controlcenter/connection.svg)
+ skin/classic/browser/controlcenter/cryptominers.svg (../shared/controlcenter/cryptominers.svg)
+ skin/classic/browser/controlcenter/cryptominers-disabled.svg (../shared/controlcenter/cryptominers-disabled.svg)
skin/classic/browser/controlcenter/mcb-disabled.svg (../shared/controlcenter/mcb-disabled.svg)
skin/classic/browser/controlcenter/extension.svg (../shared/controlcenter/extension.svg)
+ skin/classic/browser/controlcenter/fingerprinters.svg (../shared/controlcenter/fingerprinters.svg)
+ skin/classic/browser/controlcenter/fingerprinters-disabled.svg (../shared/controlcenter/fingerprinters-disabled.svg)
skin/classic/browser/controlcenter/info.svg (../shared/controlcenter/info.svg)
skin/classic/browser/controlcenter/permissions.svg (../shared/controlcenter/permissions.svg)
skin/classic/browser/controlcenter/trackers.svg (../shared/controlcenter/trackers.svg)
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/build/moz.configure/toolchain.configure firefox-trunk-67.0~a1~hg20190207r457544/build/moz.configure/toolchain.configure
--- firefox-trunk-67.0~a1~hg20190205r457303/build/moz.configure/toolchain.configure 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/build/moz.configure/toolchain.configure 2019-02-07 12:50:26.000000000 +0000
@@ -1215,6 +1215,8 @@
valid_compiler.try_compile(check_msg='%s works' % what,
onerror=compiler_error)
+ set_config('%s_BASE_FLAGS' % var, valid_compiler.flags)
+
# Set CPP/CXXCPP for both the build system and old-configure. We don't
# need to check this works for preprocessing, because we already relied
# on $CC -E/$CXX -E doing preprocessing work to validate the compiler
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/.cargo/config.in firefox-trunk-67.0~a1~hg20190207r457544/.cargo/config.in
--- firefox-trunk-67.0~a1~hg20190205r457303/.cargo/config.in 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/.cargo/config.in 2019-02-07 12:50:25.000000000 +0000
@@ -17,6 +17,16 @@
branch = "aarch64"
replace-with = "vendored-sources"
+[source."https://github.com/alexcrichton/cc-rs"]
+git = "https://github.com/glandium/cc-rs"
+branch = "1.0.23-clang-cl-aarch64"
+replace-with = "vendored-sources"
+
+[source."https://github.com/mozilla/lmdb-rs"]
+git = "https://github.com/mozilla/lmdb-rs"
+branch = "lmdb-sys-0.8.0-android-fix"
+replace-with = "vendored-sources"
+
[source.vendored-sources]
directory = '@top_srcdir@/third_party/rust'
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/Cargo.lock firefox-trunk-67.0~a1~hg20190207r457544/Cargo.lock
--- firefox-trunk-67.0~a1~hg20190205r457303/Cargo.lock 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/Cargo.lock 2019-02-07 12:50:25.000000000 +0000
@@ -154,7 +154,7 @@
version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -350,7 +350,7 @@
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -362,7 +362,7 @@
[[package]]
name = "cc"
version = "1.0.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
+source = "git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64#2aa71628b1261b5515bd8668afca591669ba195d"
[[package]]
name = "cexpr"
@@ -417,7 +417,7 @@
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
]
[[package]]
@@ -1307,7 +1307,6 @@
version = "0.1.0"
dependencies = [
"baldrdash 0.1.0",
- "bindgen 0.43.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1400,7 +1399,7 @@
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
"winapi 0.3.6 (git+https://github.com/froydnj/winapi-rs?branch=aarch64)",
]
@@ -1444,15 +1443,15 @@
dependencies = [
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "lmdb-sys 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lmdb-sys 0.8.0 (git+https://github.com/mozilla/lmdb-rs?branch=lmdb-sys-0.8.0-android-fix)",
]
[[package]]
name = "lmdb-sys"
version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
+source = "git+https://github.com/mozilla/lmdb-rs?branch=lmdb-sys-0.8.0-android-fix#1295a0e2c0e3eeff2036ada60cb22d57663d0e74"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1568,7 +1567,7 @@
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
"crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
"miniz_oxide 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3253,7 +3252,7 @@
"checksum bzip2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3eafc42c44e0d827de6b1c131175098fe7fb53b8ce8a47e65cb3ea94688be24"
"checksum bzip2-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2c5162604199bbb17690ede847eaa6120a3f33d5ab4dcc8e7c25b16d849ae79b"
"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
-"checksum cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)" = "c37f0efaa4b9b001fa6f02d4b644dee4af97d3414df07c51e3e4f015f3a3e131"
+"checksum cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)" = ""
"checksum cexpr 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fc0086be9ca82f7fc89fc873435531cb898b86e850005850de1f820e2db6e9b"
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
@@ -3356,7 +3355,7 @@
"checksum libz-sys 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "3fdd64ef8ee652185674455c1d450b83cbc8ad895625d543b5324d923f82e4d8"
"checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e"
"checksum lmdb-rkv 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "07d8d72d709440ac7a19b71e04fb66684ec7547b3831817872454b01fdaefe23"
-"checksum lmdb-sys 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5b392838cfe8858e86fac37cf97a0e8c55cc60ba0a18365cadc33092f128ce9"
+"checksum lmdb-sys 0.8.0 (git+https://github.com/mozilla/lmdb-rs?branch=lmdb-sys-0.8.0-android-fix)" = ""
"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/Cargo.toml firefox-trunk-67.0~a1~hg20190207r457544/Cargo.toml
--- firefox-trunk-67.0~a1~hg20190205r457303/Cargo.toml 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/Cargo.toml 2019-02-07 12:50:25.000000000 +0000
@@ -57,5 +57,7 @@
[patch.crates-io]
libudev-sys = { path = "dom/webauthn/libudev-sys" }
+lmdb-sys = { git = "https://github.com/mozilla/lmdb-rs", branch = "lmdb-sys-0.8.0-android-fix" }
serde_derive = { git = "https://github.com/servo/serde", branch = "deserialize_from_enums9" }
winapi = { git = "https://github.com/froydnj/winapi-rs", branch = "aarch64" }
+cc = { git = "https://github.com/glandium/cc-rs", branch = "1.0.23-clang-cl-aarch64" }
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/config/makefiles/rust.mk firefox-trunk-67.0~a1~hg20190207r457544/config/makefiles/rust.mk
--- firefox-trunk-67.0~a1~hg20190205r457303/config/makefiles/rust.mk 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/config/makefiles/rust.mk 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,296 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# /!\ In this file, we export multiple variables globally via make rather than
+# in recipes via the `env` command to avoid round-trips to msys on Windows, which
+# tend to break environment variable values in interesting ways.
+
+# /!\ Avoid the use of double-quotes in this file, so that the cargo
+# commands can be executed directly by make, without doing a round-trip
+# through a shell.
+
+cargo_host_flag := --target=$(RUST_HOST_TARGET)
+cargo_target_flag := --target=$(RUST_TARGET)
+
+# Permit users to pass flags to cargo from their mozconfigs (e.g. --color=always).
+cargo_build_flags = $(CARGOFLAGS)
+ifndef MOZ_DEBUG_RUST
+cargo_build_flags += --release
+endif
+
+# The Spidermonkey library can be built from a package tarball outside the
+# tree, so we want to let Cargo create lock files in this case. When built
+# within a tree, the Rust dependencies have been vendored in so Cargo won't
+# touch the lock file.
+ifndef JS_STANDALONE
+cargo_build_flags += --frozen
+endif
+
+cargo_build_flags += --manifest-path $(CARGO_FILE)
+ifdef BUILD_VERBOSE_LOG
+cargo_build_flags += -vv
+endif
+
+# Enable color output if original stdout was a TTY and color settings
+# aren't already present. This essentially restores the default behavior
+# of cargo when running via `mach`.
+ifdef MACH_STDOUT_ISATTY
+ifeq (,$(findstring --color,$(cargo_build_flags)))
+cargo_build_flags += --color=always
+endif
+endif
+
+# These flags are passed via `cargo rustc` and only apply to the final rustc
+# invocation (i.e., only the top-level crate, not its dependencies).
+cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
+ifndef DEVELOPER_OPTIONS
+ifndef MOZ_DEBUG_RUST
+# Enable link-time optimization for release builds.
+cargo_rustc_flags += -C lto
+endif
+endif
+
+ifdef CARGO_INCREMENTAL
+export CARGO_INCREMENTAL
+endif
+
+rustflags_neon =
+ifeq (neon,$(MOZ_FPU))
+rustflags_neon += -C target_feature=+neon
+endif
+
+rustflags_override = $(MOZ_RUST_DEFAULT_FLAGS) $(rustflags_neon)
+
+ifdef MOZ_USING_SCCACHE
+export RUSTC_WRAPPER=$(CCACHE)
+endif
+
+ifdef MOZ_CODE_COVERAGE
+ifeq (gcc,$(CC_TYPE))
+CODE_COVERAGE_GCC=1
+endif
+endif
+
+# We start with host variables because the rust host and the rust target might be the same,
+# in which case we want the latter to take priority.
+
+# We're passing these for consumption by the `cc` crate, which doesn't use the same
+# convention as cargo itself:
+# https://github.com/alexcrichton/cc-rs/blob/baa71c0e298d9ad7ac30f0ad78f20b4b3b3a8fb2/src/lib.rs#L1715
+rust_host_cc_env_name := $(subst -,_,$(RUST_HOST_TARGET))
+
+export CC_$(rust_host_cc_env_name)=$(HOST_CC)
+export CXX_$(rust_host_cc_env_name)=$(HOST_CXX)
+# We don't have a HOST_AR. If rust needs one, assume it's going to pick an appropriate one.
+
+rust_cc_env_name := $(subst -,_,$(RUST_TARGET))
+
+export CC_$(rust_cc_env_name)=$(CC)
+export CXX_$(rust_cc_env_name)=$(CXX)
+export AR_$(rust_cc_env_name)=$(AR)
+ifeq (,$(MOZ_ASAN)$(MOZ_TSAN)$(MOZ_UBSAN)$(CODE_COVERAGE_GCC)$(FUZZING_INTERFACES))
+# -DMOZILLA_CONFIG_H is added to prevent mozilla-config.h from injecting anything
+# in C/C++ compiles from rust. That's not needed in the other branch because the
+# base flags don't force-include mozilla-config.h.
+export CFLAGS_$(rust_host_cc_env_name)=$(COMPUTED_HOST_CFLAGS) -DMOZILLA_CONFIG_H
+export CXXFLAGS_$(rust_host_cc_env_name)=$(COMPUTED_HOST_CXXFLAGS) -DMOZILLA_CONFIG_H
+export CFLAGS_$(rust_cc_env_name)=$(COMPUTED_CFLAGS) -DMOZILLA_CONFIG_H
+export CXXFLAGS_$(rust_cc_env_name)=$(COMPUTED_CXXFLAGS) -DMOZILLA_CONFIG_H
+else
+# Because cargo doesn't allow to distinguish builds happening for build
+# scripts/procedural macros vs. those happening for the rust target,
+# we can't blindly pass all our flags down for cc-rs to use them, because of the
+# side effects they can have on what otherwise should be host builds.
+# So for sanitizer, fuzzing and coverage builds, we only pass the base compiler
+# flags.
+# This means C code built by rust is not going to be covered by sanitizer,
+# fuzzing and coverage. But at least we control what compiler is being used,
+# rather than relying on cc-rs guesses, which, sometimes fail us.
+export CFLAGS_$(rust_host_cc_env_name)=$(HOST_CC_BASE_FLAGS)
+export CXXFLAGS_$(rust_host_cc_env_name)=$(HOST_CXX_BASE_FLAGS)
+export CFLAGS_$(rust_cc_env_name)=$(CC_BASE_FLAGS)
+export CXXFLAGS_$(rust_cc_env_name)=$(CXX_BASE_FLAGS)
+endif
+
+export CARGO_TARGET_DIR
+export RUSTFLAGS
+export RUSTC
+export RUSTDOC
+export RUSTFMT
+export MOZ_SRC=$(topsrcdir)
+export MOZ_DIST=$(ABS_DIST)
+export LIBCLANG_PATH=$(MOZ_LIBCLANG_PATH)
+export CLANG_PATH=$(MOZ_CLANG_PATH)
+export PKG_CONFIG_ALLOW_CROSS=1
+export RUST_BACKTRACE=full
+export MOZ_TOPOBJDIR=$(topobjdir)
+
+TARGET_RECIPES := \
+ force-cargo-test-run \
+ $(foreach a,library program,$(foreach b,build check,force-cargo-$(a)-$(b)))
+
+$(TARGET_RECIPES): RUSTFLAGS:=$(rustflags_override) $(RUSTFLAGS)
+
+HOST_RECIPES := \
+ $(foreach a,library program,$(foreach b,build check,force-cargo-host-$(a)-$(b)))
+
+$(HOST_RECIPES): RUSTFLAGS:=$(rustflags_override)
+
+# We use the + prefix to pass down the jobserver fds to cargo, but we
+# don't use the prefix when make -n is used, so that cargo doesn't run
+# in that case)
+define RUN_CARGO
+$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)$(CARGO) $(1) $(cargo_build_flags)
+endef
+
+# This function is intended to be called by:
+#
+# $(call CARGO_BUILD,EXTRA_ENV_VAR1=X EXTRA_ENV_VAR2=Y ...)
+#
+# but, given the idiosyncracies of make, can also be called without arguments:
+#
+# $(call CARGO_BUILD)
+define CARGO_BUILD
+$(call RUN_CARGO,rustc)
+endef
+
+define CARGO_CHECK
+$(call RUN_CARGO,check)
+endef
+
+cargo_linker_env_var := CARGO_TARGET_$(RUST_TARGET_ENV_NAME)_LINKER
+
+# Don't define a custom linker on Windows, as it's difficult to have a
+# non-binary file that will get executed correctly by Cargo. We don't
+# have to worry about a cross-compiling (besides x86-64 -> x86, which
+# already works with the current setup) setup on Windows, and we don't
+# have to pass in any special linker options on Windows.
+ifneq (WINNT,$(OS_ARCH))
+
+# Defining all of this for ASan/TSan builds results in crashes while running
+# some crates's build scripts (!), so disable it for now.
+ifndef MOZ_ASAN
+ifndef MOZ_TSAN
+ifndef MOZ_UBSAN
+ifndef FUZZING_INTERFACES
+# Cargo needs the same linker flags as the C/C++ compiler,
+# but not the final libraries. Filter those out because they
+# cause problems on macOS 10.7; see bug 1365993 for details.
+# Also, we don't want to pass PGO flags until cargo supports them.
+export MOZ_CARGO_WRAP_LDFLAGS
+export MOZ_CARGO_WRAP_LD
+# Exporting from make always exports a value. Setting a value per-recipe
+# would export an empty value for the host recipes. When not doing a
+# cross-compile, the --target for those is the same, and cargo will use
+# $(cargo_linker_env_var) for its linker, so we always pass the
+# cargo-linker wrapper, and fill MOZ_CARGO_WRAP_LD* more or less
+# appropriately for all recipes.
+export $(cargo_linker_env_var):=$(topsrcdir)/build/cargo-linker
+$(TARGET_RECIPES): MOZ_CARGO_WRAP_LDFLAGS:=$(filter-out -fsanitize=cfi% -framework Cocoa -lobjc AudioToolbox ExceptionHandling -fprofile-%,$(LDFLAGS))
+$(TARGET_RECIPES): MOZ_CARGO_WRAP_LD:=$(CC)
+$(HOST_RECIPES): MOZ_CARGO_WRAP_LDFLAGS:=$(HOST_LDFLAGS)
+$(HOST_RECIPES): MOZ_CARGO_WRAP_LD:=$(HOST_CC)
+endif # FUZZING_INTERFACES
+endif # MOZ_UBSAN
+endif # MOZ_TSAN
+endif # MOZ_ASAN
+
+endif # ifneq WINNT
+
+ifdef RUST_LIBRARY_FILE
+
+ifdef RUST_LIBRARY_FEATURES
+rust_features_flag := --features '$(RUST_LIBRARY_FEATURES)'
+endif
+
+# Assume any system libraries rustc links against are already in the target's LIBS.
+#
+# We need to run cargo unconditionally, because cargo is the only thing that
+# has full visibility into how changes in Rust sources might affect the final
+# build.
+force-cargo-library-build:
+ $(REPORT_BUILD)
+ $(call CARGO_BUILD) --lib $(cargo_target_flag) $(rust_features_flag) -- $(cargo_rustc_flags)
+
+$(RUST_LIBRARY_FILE): force-cargo-library-build
+# When we are building in --enable-release mode; we add an additional check to confirm
+# that we are not importing any networking-related functions in rust code. This reduces
+# the chance of proxy bypasses originating from rust code.
+ifndef DEVELOPER_OPTIONS
+ifndef MOZ_DEBUG_RUST
+ifeq ($(OS_ARCH), Linux)
+ $(call py_action,check_binary,--target --networking $@)
+endif
+endif
+endif
+
+force-cargo-library-check:
+ $(call CARGO_CHECK) --lib $(cargo_target_flag) $(rust_features_flag)
+else
+force-cargo-library-check:
+ @true
+endif # RUST_LIBRARY_FILE
+
+ifdef RUST_TESTS
+
+rust_test_options := $(foreach test,$(RUST_TESTS),-p $(test))
+
+ifdef RUST_TEST_FEATURES
+rust_features_flag := --features '$(RUST_TEST_FEATURES)'
+endif
+
+# Don't stop at the first failure. We want to list all failures together.
+rust_test_flag := --no-fail-fast
+
+force-cargo-test-run:
+ $(call RUN_CARGO,test $(cargo_target_flag) $(rust_test_flag) $(rust_test_options) $(rust_features_flag))
+
+endif
+
+ifdef HOST_RUST_LIBRARY_FILE
+
+ifdef HOST_RUST_LIBRARY_FEATURES
+host_rust_features_flag := --features '$(HOST_RUST_LIBRARY_FEATURES)'
+endif
+
+force-cargo-host-library-build:
+ $(REPORT_BUILD)
+ $(call CARGO_BUILD) --lib $(cargo_host_flag) $(host_rust_features_flag)
+
+$(HOST_RUST_LIBRARY_FILE): force-cargo-host-library-build
+
+force-cargo-host-library-check:
+ $(call CARGO_CHECK) --lib $(cargo_host_flag) $(host_rust_features_flag)
+else
+force-cargo-host-library-check:
+ @true
+endif # HOST_RUST_LIBRARY_FILE
+
+ifdef RUST_PROGRAMS
+force-cargo-program-build:
+ $(REPORT_BUILD)
+ $(call CARGO_BUILD) $(addprefix --bin ,$(RUST_CARGO_PROGRAMS)) $(cargo_target_flag)
+
+$(RUST_PROGRAMS): force-cargo-program-build
+
+force-cargo-program-check:
+ $(call CARGO_CHECK) $(addprefix --bin ,$(RUST_CARGO_PROGRAMS)) $(cargo_target_flag)
+else
+force-cargo-program-check:
+ @true
+endif # RUST_PROGRAMS
+ifdef HOST_RUST_PROGRAMS
+force-cargo-host-program-build:
+ $(REPORT_BUILD)
+ $(call CARGO_BUILD) $(addprefix --bin ,$(HOST_RUST_CARGO_PROGRAMS)) $(cargo_host_flag)
+
+$(HOST_RUST_PROGRAMS): force-cargo-host-program-build
+
+force-cargo-host-program-check:
+ $(REPORT_BUILD)
+ $(call CARGO_CHECK) $(addprefix --bin ,$(HOST_RUST_CARGO_PROGRAMS)) $(cargo_host_flag)
+else
+force-cargo-host-program-check:
+ @true
+endif # HOST_RUST_PROGRAMS
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/config/rules.mk firefox-trunk-67.0~a1~hg20190207r457544/config/rules.mk
--- firefox-trunk-67.0~a1~hg20190205r457303/config/rules.mk 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/config/rules.mk 2019-02-07 12:50:26.000000000 +0000
@@ -800,284 +800,10 @@
$(foreach file,$(DUMP_SYMS_TARGETS),$(eval $(call syms_template,$(file),$(notdir $(file))_syms.track)))
endif
-cargo_host_flag := --target=$(RUST_HOST_TARGET)
-cargo_target_flag := --target=$(RUST_TARGET)
-
-# Permit users to pass flags to cargo from their mozconfigs (e.g. --color=always).
-cargo_build_flags = $(CARGOFLAGS)
-ifndef MOZ_DEBUG_RUST
-cargo_build_flags += --release
-endif
-
-# The Spidermonkey library can be built from a package tarball outside the
-# tree, so we want to let Cargo create lock files in this case. When built
-# within a tree, the Rust dependencies have been vendored in so Cargo won't
-# touch the lock file.
-ifndef JS_STANDALONE
-cargo_build_flags += --frozen
-endif
-
-cargo_build_flags += --manifest-path $(CARGO_FILE)
-ifdef BUILD_VERBOSE_LOG
-cargo_build_flags += -vv
+ifneq (,$(RUST_TESTS)$(RUST_LIBRARY_FILE)$(HOST_RUST_LIBRARY_FILE)$(RUST_PROGRAMS)$(HOST_RUST_PROGRAMS))
+include $(MOZILLA_DIR)/config/makefiles/rust.mk
endif
-# Enable color output if original stdout was a TTY and color settings
-# aren't already present. This essentially restores the default behavior
-# of cargo when running via `mach`.
-ifdef MACH_STDOUT_ISATTY
-ifeq (,$(findstring --color,$(cargo_build_flags)))
-cargo_build_flags += --color=always
-endif
-endif
-
-# These flags are passed via `cargo rustc` and only apply to the final rustc
-# invocation (i.e., only the top-level crate, not its dependencies).
-cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
-ifndef DEVELOPER_OPTIONS
-ifndef MOZ_DEBUG_RUST
-# Enable link-time optimization for release builds.
-cargo_rustc_flags += -C lto
-endif
-endif
-
-ifdef CARGO_INCREMENTAL
-cargo_incremental := CARGO_INCREMENTAL=$(CARGO_INCREMENTAL)
-endif
-
-rustflags_neon =
-ifeq (neon,$(MOZ_FPU))
-rustflags_neon += -C target_feature=+neon
-endif
-
-rustflags_override = $(MOZ_RUST_DEFAULT_FLAGS) $(rustflags_neon)
-
-ifdef MOZ_USING_SCCACHE
-sccache_wrap := RUSTC_WRAPPER='$(CCACHE)'
-endif
-
-ifdef MOZ_CODE_COVERAGE
-ifeq (gcc,$(CC_TYPE))
-CODE_COVERAGE_GCC=1
-endif
-endif
-
-ifndef MOZ_ASAN
-ifndef MOZ_TSAN
-ifndef MOZ_UBSAN
-ifneq (1,$(CODE_COVERAGE_GCC))
-ifndef FUZZING_INTERFACES
-# Pass the compilers and flags in use to cargo for use in build scripts.
-# * Don't do this for ASAN/TSAN builds because we don't pass our custom linker (see below)
-# which will muck things up.
-# * Don't do this for GCC code coverage builds because the way rustc invokes the linker doesn't
-# work with GCC 6: https://bugzilla.mozilla.org/show_bug.cgi?id=1477305
-#
-# We don't pass HOST_{CC,CXX} down in any form because our host value might not match
-# what cargo chooses and there's no way to control cargo's selection, so we just have to
-# hope that if something needs to build a host C source file it can find a usable compiler!
-#
-# We're passing these for consumption by the `cc` crate, which doesn't use the same
-# convention as cargo itself:
-# https://github.com/alexcrichton/cc-rs/blob/baa71c0e298d9ad7ac30f0ad78f20b4b3b3a8fb2/src/lib.rs#L1715
-rust_cc_env_name := $(subst -,_,$(RUST_TARGET))
-
-ifeq (WINNT,$(HOST_OS_ARCH))
-# Don't do most of this on Windows because msys path translation makes a mess of the paths, and
-# we put MSVC in PATH there anyway. But we do suppress warnings, since all such warnings
-# are in third-party code.
-cargo_c_compiler_envs := \
- CFLAGS_$(rust_cc_env_name)="-w" \
- $(NULL)
-else
-cargo_c_compiler_envs := \
- CC_$(rust_cc_env_name)="$(CC)" \
- CXX_$(rust_cc_env_name)="$(CXX)" \
- CFLAGS_$(rust_cc_env_name)="$(COMPUTED_CFLAGS)" \
- CXXFLAGS_$(rust_cc_env_name)="$(COMPUTED_CXXFLAGS)" \
- AR_$(rust_cc_env_name)="$(AR)" \
- $(NULL)
-endif # WINNT
-endif # FUZZING_INTERFACES
-endif # MOZ_CODE_COVERAGE
-endif # MOZ_UBSAN
-endif # MOZ_TSAN
-endif # MOZ_ASAN
-
-# We use the + prefix to pass down the jobserver fds to cargo, but we
-# don't use the prefix when make -n is used, so that cargo doesn't run
-# in that case)
-define RUN_CARGO
-$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env $(sccache_wrap) \
- CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
- RUSTFLAGS='$(2)' \
- RUSTC=$(RUSTC) \
- RUSTDOC=$(RUSTDOC) \
- RUSTFMT=$(RUSTFMT) \
- $(cargo_c_compiler_envs) \
- MOZ_SRC=$(topsrcdir) \
- MOZ_DIST=$(ABS_DIST) \
- LIBCLANG_PATH="$(MOZ_LIBCLANG_PATH)" \
- CLANG_PATH="$(MOZ_CLANG_PATH)" \
- PKG_CONFIG_ALLOW_CROSS=1 \
- RUST_BACKTRACE=full \
- MOZ_TOPOBJDIR=$(topobjdir) \
- $(cargo_incremental) \
- $(3) \
- $(CARGO) $(1) $(cargo_build_flags)
-endef
-
-# This function is intended to be called by:
-#
-# $(call CARGO_BUILD,EXTRA_ENV_VAR1=X EXTRA_ENV_VAR2=Y ...)
-#
-# but, given the idiosyncracies of make, can also be called without arguments:
-#
-# $(call CARGO_BUILD)
-define CARGO_BUILD_HOST
-$(call RUN_CARGO,rustc,$(rustflags_override),$(1))
-endef
-
-define CARGO_CHECK_HOST
-$(call RUN_CARGO,check,$(rustflags_override),$(1))
-endef
-
-define CARGO_BUILD
-$(call RUN_CARGO,rustc,$(rustflags_override) $(RUSTFLAGS),$(1))
-endef
-
-define CARGO_CHECK
-$(call RUN_CARGO,check,$(rustflags_override) $(RUSTFLAGS),$(1))
-endef
-
-cargo_linker_env_var := CARGO_TARGET_$(RUST_TARGET_ENV_NAME)_LINKER
-
-# Don't define a custom linker on Windows, as it's difficult to have a
-# non-binary file that will get executed correctly by Cargo. We don't
-# have to worry about a cross-compiling (besides x86-64 -> x86, which
-# already works with the current setup) setup on Windows, and we don't
-# have to pass in any special linker options on Windows.
-ifneq (WINNT,$(OS_ARCH))
-
-# Defining all of this for ASan/TSan builds results in crashes while running
-# some crates's build scripts (!), so disable it for now.
-ifndef MOZ_ASAN
-ifndef MOZ_TSAN
-ifndef MOZ_UBSAN
-ifndef FUZZING_INTERFACES
-# Cargo needs the same linker flags as the C/C++ compiler,
-# but not the final libraries. Filter those out because they
-# cause problems on macOS 10.7; see bug 1365993 for details.
-# Also, we don't want to pass PGO flags until cargo supports them.
-target_cargo_env_vars := \
- MOZ_CARGO_WRAP_LDFLAGS="$(filter-out -fsanitize=cfi% -framework Cocoa -lobjc AudioToolbox ExceptionHandling -fprofile-%,$(LDFLAGS))" \
- MOZ_CARGO_WRAP_LD="$(CC)" \
- $(cargo_linker_env_var)=$(topsrcdir)/build/cargo-linker
-endif # FUZZING_INTERFACES
-endif # MOZ_UBSAN
-endif # MOZ_TSAN
-endif # MOZ_ASAN
-
-endif # ifneq WINNT
-
-ifdef RUST_LIBRARY_FILE
-
-ifdef RUST_LIBRARY_FEATURES
-rust_features_flag := --features "$(RUST_LIBRARY_FEATURES)"
-endif
-
-# Assume any system libraries rustc links against are already in the target's LIBS.
-#
-# We need to run cargo unconditionally, because cargo is the only thing that
-# has full visibility into how changes in Rust sources might affect the final
-# build.
-#
-# When we are building in --enable-release mode; we add an additional check to confirm
-# that we are not importing any networking-related functions in rust code. This reduces
-# the chance of proxy bypasses originating from rust code.
-force-cargo-library-build:
- $(REPORT_BUILD)
- $(call CARGO_BUILD,$(target_cargo_env_vars)) --lib $(cargo_target_flag) $(rust_features_flag) -- $(cargo_rustc_flags)
-ifndef DEVELOPER_OPTIONS
-ifndef MOZ_DEBUG_RUST
-ifeq ($(OS_ARCH), Linux)
- $(call py_action,check_binary,--target --networking $(RUST_LIBRARY_FILE))
-endif
-endif
-endif
-
-$(RUST_LIBRARY_FILE): force-cargo-library-build
-
-force-cargo-library-check:
- $(call CARGO_CHECK,$(target_cargo_env_vars)) --lib $(cargo_target_flag) $(rust_features_flag)
-else
-force-cargo-library-check:
- @true
-endif # RUST_LIBRARY_FILE
-
-ifdef RUST_TESTS
-
-rust_test_options := $(foreach test,$(RUST_TESTS),-p $(test))
-
-ifdef RUST_TEST_FEATURES
-rust_features_flag := --features "$(RUST_TEST_FEATURES)"
-endif
-
-# Don't stop at the first failure. We want to list all failures together.
-rust_test_flag := --no-fail-fast
-
-force-cargo-test-run:
- $(call RUN_CARGO,test $(cargo_target_flag) $(rust_test_flag) $(rust_test_options) $(rust_features_flag),$(rustflags_override) $(RUSTFLAGS),$(target_cargo_env_vars))
-
-endif
-
-ifdef HOST_RUST_LIBRARY_FILE
-
-ifdef HOST_RUST_LIBRARY_FEATURES
-host_rust_features_flag := --features "$(HOST_RUST_LIBRARY_FEATURES)"
-endif
-
-force-cargo-host-library-build:
- $(REPORT_BUILD)
- $(call CARGO_BUILD_HOST) --lib $(cargo_host_flag) $(host_rust_features_flag)
-
-$(HOST_RUST_LIBRARY_FILE): force-cargo-host-library-build
-
-force-cargo-host-library-check:
- $(call CARGO_CHECK_HOST) --lib $(cargo_host_flag) $(host_rust_features_flag)
-else
-force-cargo-host-library-check:
- @true
-endif # HOST_RUST_LIBRARY_FILE
-
-ifdef RUST_PROGRAMS
-force-cargo-program-build:
- $(REPORT_BUILD)
- $(call CARGO_BUILD,$(target_cargo_env_vars)) $(addprefix --bin ,$(RUST_CARGO_PROGRAMS)) $(cargo_target_flag)
-
-$(RUST_PROGRAMS): force-cargo-program-build
-
-force-cargo-program-check:
- $(call CARGO_CHECK,$(target_cargo_env_vars)) $(addprefix --bin ,$(RUST_CARGO_PROGRAMS)) $(cargo_target_flag)
-else
-force-cargo-program-check:
- @true
-endif # RUST_PROGRAMS
-ifdef HOST_RUST_PROGRAMS
-force-cargo-host-program-build:
- $(REPORT_BUILD)
- $(call CARGO_BUILD_HOST) $(addprefix --bin ,$(HOST_RUST_CARGO_PROGRAMS)) $(cargo_host_flag)
-
-$(HOST_RUST_PROGRAMS): force-cargo-host-program-build
-
-force-cargo-host-program-check:
- $(REPORT_BUILD)
- $(call CARGO_CHECK_HOST) $(addprefix --bin ,$(HOST_RUST_CARGO_PROGRAMS)) $(cargo_host_flag)
-else
-force-cargo-host-program-check:
- @true
-endif # HOST_RUST_PROGRAMS
-
$(SOBJS):
$(REPORT_BUILD)
$(AS) $(ASOUTOPTION)$@ $(SFLAGS) $($(notdir $<)_FLAGS) -c $<
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/debian/changelog firefox-trunk-67.0~a1~hg20190207r457544/debian/changelog
--- firefox-trunk-67.0~a1~hg20190205r457303/debian/changelog 2019-02-06 08:28:33.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/debian/changelog 2019-02-07 13:15:40.000000000 +0000
@@ -1,10 +1,15 @@
-firefox-trunk (67.0~a1~hg20190205r457303-0ubuntu0.18.10.1~umd1) cosmic; urgency=emergency
+firefox-trunk (67.0~a1~hg20190207r457544-0ubuntu0.18.10.1~umd1) cosmic; urgency=emergency
* Update patches
- debian/patches/partially-revert-google-search-update.patch
+ - debian/patches/mark-distribution-search-engines-as-read-only.patch
+ - debian/patches/support-coinstallable-trunk-build.patch
+ * Bump build-dep to clang-7 and llvm-7-dev
+ - debian/config/mozconfig.in
+ - debian/control{,.in}
* New upstream snapshot
- -- Rico Tzschichholz Wed, 06 Feb 2019 09:28:33 +0100
+ -- Rico Tzschichholz Thu, 07 Feb 2019 14:15:40 +0100
firefox-trunk (66.0~a1~hg20190128r455577-0ubuntu1) disco; urgency=medium
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/debian/config/mozconfig.in firefox-trunk-67.0~a1~hg20190207r457544/debian/config/mozconfig.in
--- firefox-trunk-67.0~a1~hg20190205r457303/debian/config/mozconfig.in 2019-01-16 14:18:05.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/debian/config/mozconfig.in 2019-02-07 12:41:11.000000000 +0000
@@ -88,6 +88,7 @@
%%if MOZ_UPDATE_CHANNEL == nightly
ac_add_options --enable-profiling
%%endif
+mk_add_options "export LLVM_CONFIG=/usr/bin/llvm-config-7"
mk_add_options "export CBINDGEN=@TOPSRCDIR@/@DEB_BUILDDIR@/cbindgen/bin/cbindgen"
%%if DEB_HOST_ARCH != i386
%%if DEB_HOST_ARCH != armhf
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/debian/control firefox-trunk-67.0~a1~hg20190207r457544/debian/control
--- firefox-trunk-67.0~a1~hg20190205r457303/debian/control 2019-02-06 08:28:33.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/debian/control 2019-02-07 13:15:40.000000000 +0000
@@ -37,8 +37,8 @@
xvfb,
python (>= 2.7),
libffi-dev (>= 3.0.9) [powerpc ppc64el s390x],
- clang-4.0,
- llvm-4.0-dev,
+ clang-7,
+ llvm-7-dev,
cargo (>= 0.32),
rustc (>= 1.31.0),
nodejs (>= 8.11)
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/debian/control.in firefox-trunk-67.0~a1~hg20190207r457544/debian/control.in
--- firefox-trunk-67.0~a1~hg20190205r457303/debian/control.in 2019-02-06 08:28:33.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/debian/control.in 2019-02-07 13:15:40.000000000 +0000
@@ -37,8 +37,8 @@
xvfb,
python (>= 2.7),
libffi-dev (>= 3.0.9) [powerpc ppc64el s390x],
- clang-4.0,
- llvm-4.0-dev,
+ clang-7,
+ llvm-7-dev,
cargo (>= 0.32),
rustc (>= 1.31.0),
nodejs (>= 8.11)
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu.js 2019-02-07 12:50:26.000000000 +0000
@@ -14,37 +14,20 @@
prepareCollapsibilitiesTest();
const { document, tab, window } = await openAboutDebugging();
+ const { devtoolsBrowser, devtoolsTab } =
+ await openAboutDevtoolsToolbox(document, tab, window);
- info("Show about:devtools-toolbox page");
- const target = findDebugTargetByText("about:debugging", document);
- ok(target, "about:debugging tab target appeared");
- const inspectButton = target.querySelector(".js-debug-target-inspect-button");
- ok(inspectButton, "Inspect button for about:debugging appeared");
- inspectButton.click();
- await Promise.all([
- waitUntil(() => tab.nextElementSibling),
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-ready"),
- ]);
-
- info("Wait for about:devtools-toolbox tab will be selected");
- const devtoolsTab = tab.nextElementSibling;
- await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
info("Check whether the menu item which opens devtools is disabled");
const rootDocument = devtoolsTab.ownerDocument;
- await assertContextMenu(rootDocument, gBrowser.selectedBrowser,
+ await assertContextMenu(rootDocument, devtoolsBrowser,
".debug-target-info", false);
info("Force to select about:debugging page");
gBrowser.selectedTab = tab;
info("Check whether the menu item which opens devtools is enabled");
- await assertContextMenu(rootDocument, gBrowser.selectedBrowser, "#mount", true);
+ await assertContextMenu(rootDocument, devtoolsBrowser, "#mount", true);
- await removeTab(devtoolsTab);
- await Promise.all([
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-destroyed"),
- ]);
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
await removeTab(tab);
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu_markupview.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu_markupview.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu_markupview.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_contextmenu_markupview.js 2019-02-07 12:50:26.000000000 +0000
@@ -14,51 +14,23 @@
prepareCollapsibilitiesTest();
const { document, tab, window } = await openAboutDebugging();
-
- info("Show about:devtools-toolbox page");
- const target = findDebugTargetByText("about:debugging", document);
- ok(target, "about:debugging tab target appeared");
- const inspectButton = target.querySelector(".js-debug-target-inspect-button");
- ok(inspectButton, "Inspect button for about:debugging appeared");
- inspectButton.click();
- await Promise.all([
- waitUntil(() => tab.nextElementSibling),
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-ready"),
- ]);
-
- info("Wait for about:devtools-toolbox tab will be selected");
- const devtoolsTab = tab.nextElementSibling;
- await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
+ const { devtoolsDocument, devtoolsTab, devtoolsWindow } =
+ await openAboutDevtoolsToolbox(document, tab, window);
info("Select inspector tool");
- const devtoolsBrowser = gBrowser.selectedBrowser;
- const devtoolsDocument = devtoolsBrowser.contentDocument;
- const devtoolsWindow = devtoolsBrowser.contentWindow;
const toolbox = getToolbox(devtoolsWindow);
await toolbox.selectTool("inspector");
info("Show context menu of markup view");
- const markupFrame = getMarkupViewFrame(devtoolsDocument);
- const markupDocument = markupFrame.contentDocument;
- const markupWindow = markupFrame.contentWindow;
+ const markupDocument = toolbox.getPanel("inspector").markup.doc;
EventUtils.synthesizeMouseAtCenter(markupDocument.body,
{ type: "contextmenu" },
- markupWindow);
+ markupDocument.ownerGlobal);
info("Check whether proper context menu of markup view will be shown");
await waitUntil(() => devtoolsDocument.querySelector("#node-menu-edithtml"));
ok(true, "Context menu of markup view should be shown");
- await removeTab(devtoolsTab);
- await Promise.all([
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-destroyed"),
- ]);
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
await removeTab(tab);
});
-
-function getMarkupViewFrame(rootDocument) {
- const inspectorFrame = rootDocument.querySelector("#toolbox-panel-iframe-inspector");
- return inspectorFrame.contentDocument.querySelector("#markup-box iframe");
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_menubar.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_menubar.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_menubar.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_menubar.js 2019-02-07 12:50:26.000000000 +0000
@@ -14,22 +14,8 @@
prepareCollapsibilitiesTest();
const { document, tab, window } = await openAboutDebugging();
+ const { devtoolsTab } = await openAboutDevtoolsToolbox(document, tab, window);
- info("Show about:devtools-toolbox page");
- const target = findDebugTargetByText("about:debugging", document);
- ok(target, "about:debugging tab target appeared");
- const inspectButton = target.querySelector(".js-debug-target-inspect-button");
- ok(inspectButton, "Inspect button for about:debugging appeared");
- inspectButton.click();
- await Promise.all([
- waitUntil(() => tab.nextElementSibling),
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-ready"),
- ]);
-
- info("Wait for about:devtools-toolbox tab will be selected");
- const devtoolsTab = tab.nextElementSibling;
- await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
info("Check whether the menu items are disabled");
const rootDocument = devtoolsTab.ownerDocument;
await assertMenusItems(rootDocument, false);
@@ -39,11 +25,7 @@
info("Check whether the menu items are enabled");
await assertMenusItems(rootDocument, true);
- await removeTab(devtoolsTab);
- await Promise.all([
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-destroyed"),
- ]);
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
await removeTab(tab);
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_reload.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_reload.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_reload.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_reload.js 2019-02-07 12:50:26.000000000 +0000
@@ -14,26 +14,11 @@
prepareCollapsibilitiesTest();
const { document, tab, window } = await openAboutDebugging();
-
- info("Show about:devtools-toolbox page");
- const target = findDebugTargetByText("about:debugging", document);
- ok(target, "about:debugging tab target appeared");
- const inspectButton = target.querySelector(".js-debug-target-inspect-button");
- ok(inspectButton, "Inspect button for about:debugging appeared");
- inspectButton.click();
- await Promise.all([
- waitUntil(() => tab.nextElementSibling),
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-ready"),
- ]);
-
- info("Wait for about:devtools-toolbox tab will be selected");
- const devtoolsTab = tab.nextElementSibling;
- await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
+ const { devtoolsBrowser, devtoolsTab, devtoolsWindow } =
+ await openAboutDevtoolsToolbox(document, tab, window);
info("Select webconsole tool");
- const devtoolsBrowser = gBrowser.selectedBrowser;
- const toolbox = getToolbox(devtoolsBrowser.contentWindow);
+ const toolbox = getToolbox(devtoolsWindow);
await toolbox.selectTool("webconsole");
info("Reload about:devtools-toolbox page");
@@ -45,10 +30,6 @@
ok(devtoolsBrowser.contentDocument.querySelector(".debug-target-info"),
"about:devtools-toolbox page displays correctly");
- await removeTab(devtoolsTab);
- await Promise.all([
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-destroyed"),
- ]);
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
await removeTab(tab);
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_shortcuts.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_shortcuts.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_shortcuts.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_shortcuts.js 2019-02-07 12:50:26.000000000 +0000
@@ -14,35 +14,18 @@
prepareCollapsibilitiesTest();
const { document, tab, window } = await openAboutDebugging();
+ const { devtoolsBrowser, devtoolsTab } =
+ await openAboutDevtoolsToolbox(document, tab, window);
- info("Show about:devtools-toolbox page");
- const target = findDebugTargetByText("about:debugging", document);
- ok(target, "about:debugging tab target appeared");
- const inspectButton = target.querySelector(".js-debug-target-inspect-button");
- ok(inspectButton, "Inspect button for about:debugging appeared");
- inspectButton.click();
- await Promise.all([
- waitUntil(() => tab.nextElementSibling),
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-ready"),
- ]);
-
- info("Wait for about:devtools-toolbox tab will be selected");
- const devtoolsTab = tab.nextElementSibling;
- await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
info("Check whether the shortcut keys which opens devtools is disabled");
- await assertShortcutKeys(gBrowser.selectedBrowser, false);
+ await assertShortcutKeys(devtoolsBrowser, false);
info("Force to select about:debugging page");
gBrowser.selectedTab = tab;
info("Check whether the shortcut keys which opens devtools is enabled");
- await assertShortcutKeys(gBrowser.selectedBrowser, true);
+ await assertShortcutKeys(tab.linkedBrowser, true);
- await removeTab(devtoolsTab);
- await Promise.all([
- waitForRequestsToSettle(window.AboutDebugging.store),
- gDevTools.once("toolbox-destroyed"),
- ]);
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
await removeTab(tab);
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,62 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/* import-globals-from helper-collapsibilities.js */
+Services.scriptloader.loadSubScript(CHROME_URL_ROOT + "helper-collapsibilities.js", this);
+
+/**
+ * Test tooltip of markup view on about:devtools-toolbox page.
+ */
+add_task(async function() {
+ info("Force all debug target panes to be expanded");
+ prepareCollapsibilitiesTest();
+
+ const { document, tab, window } = await openAboutDebugging();
+ const { devtoolsDocument, devtoolsTab, devtoolsWindow } =
+ await openAboutDevtoolsToolbox(document, tab, window);
+
+ info("Select inspector tool");
+ const toolbox = getToolbox(devtoolsWindow);
+ await toolbox.selectTool("inspector");
+
+ const inspector = toolbox.getPanel("inspector");
+ const markupDocument = inspector.markup.doc;
+ const eventBadge = markupDocument.querySelector(".inspector-badge.interactive");
+
+ info("Check tooltip visibility after clicking on an element in the markup view");
+ await checkTooltipVisibility(inspector, eventBadge, markupDocument.body);
+
+ info("Check tooltip visibility after clicking on an element in the DevTools document");
+ await checkTooltipVisibility(
+ inspector, eventBadge, devtoolsDocument.querySelector(".debug-target-info"));
+
+ info("Check tooltip visibility after clicking on an element in the root document");
+ const rootDocument = devtoolsWindow.windowRoot.ownerGlobal.document;
+ await checkTooltipVisibility(
+ inspector, eventBadge, rootDocument.querySelector("#titlebar"));
+
+ await closeAboutDevtoolsToolbox(devtoolsTab, window);
+ await removeTab(tab);
+});
+
+async function checkTooltipVisibility(inspector, elementForShowing, elementForHiding) {
+ info("Show event tooltip");
+ elementForShowing.click();
+ const tooltip = inspector.markup.eventDetailsTooltip;
+ await tooltip.once("shown");
+ is(tooltip.container.classList.contains("tooltip-visible"), true,
+ "The tooltip should be shown");
+
+ info("Hide event tooltip");
+ EventUtils.synthesizeMouse(elementForHiding, 1, 1, {}, elementForHiding.ownerGlobal);
+ await tooltip.once("hidden");
+ is(tooltip.container.classList.contains("tooltip-visible"), false,
+ "Tooltip should be hidden");
+
+ if (inspector._updateProgress) {
+ info("Need to wait for the inspector to update");
+ await inspector.once("inspector-updated");
+ }
+}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser.ini firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser.ini
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/browser.ini 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/browser.ini 2019-02-07 12:50:26.000000000 +0000
@@ -56,6 +56,7 @@
[browser_aboutdebugging_devtoolstoolbox_reload.js]
[browser_aboutdebugging_devtoolstoolbox_shortcuts.js]
skip-if = (os == "win" && ccov) # Bug 1521349
+[browser_aboutdebugging_devtoolstoolbox_tooltip_markupview.js]
[browser_aboutdebugging_navigate.js]
[browser_aboutdebugging_persist_connection.js]
[browser_aboutdebugging_routes.js]
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/head.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/head.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/aboutdebugging-new/test/browser/head.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/aboutdebugging-new/test/browser/head.js 2019-02-07 12:50:26.000000000 +0000
@@ -56,6 +56,40 @@
return { tab, document, window };
}
+async function openAboutDevtoolsToolbox(doc, tab, win) {
+ info("Open about:devtools-toolbox page");
+ const target = findDebugTargetByText("about:debugging", doc);
+ ok(target, "about:debugging tab target appeared");
+ const inspectButton = target.querySelector(".js-debug-target-inspect-button");
+ ok(inspectButton, "Inspect button for about:debugging appeared");
+ inspectButton.click();
+ await Promise.all([
+ waitUntil(() => tab.nextElementSibling),
+ waitForRequestsToSettle(win.AboutDebugging.store),
+ gDevTools.once("toolbox-ready"),
+ ]);
+
+ info("Wait for about:devtools-toolbox tab will be selected");
+ const devtoolsTab = tab.nextElementSibling;
+ await waitUntil(() => gBrowser.selectedTab === devtoolsTab);
+ const devtoolsBrowser = gBrowser.selectedBrowser;
+
+ return {
+ devtoolsBrowser,
+ devtoolsDocument: devtoolsBrowser.contentDocument,
+ devtoolsTab,
+ devtoolsWindow: devtoolsBrowser.contentWindow,
+ };
+}
+
+async function closeAboutDevtoolsToolbox(devtoolsTab, win) {
+ await removeTab(devtoolsTab);
+ await Promise.all([
+ waitForRequestsToSettle(win.AboutDebugging.store),
+ gDevTools.once("toolbox-destroyed"),
+ ]);
+}
+
async function reloadAboutDebugging(tab) {
info("reload about:debugging");
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/debugger.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/debugger.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/debugger.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/debugger.css 2019-02-07 12:50:26.000000000 +0000
@@ -548,6 +548,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+:root {
+ /* header height is 28px + 1px for its border */
+ --editor-header-height: 29px;
+ /* footer height is 24px + 1px for its border */
+ --editor-footer-height: 25px;
+ /* searchbar height is 24px + 2px for its top and bottom borders */
+ --editor-searchbar-height: 26px;
+}
+
:root.theme-light,
:root .theme-light {
--search-overlays-semitransparent: rgba(221, 225, 228, 0.66);
@@ -570,6 +579,8 @@
button {
background: transparent;
border: none;
+ font-family: inherit;
+ font-size: inherit;
}
button:hover,
@@ -577,6 +588,11 @@
background-color: var(--theme-toolbar-background-hover);
}
+.theme-dark button:hover,
+.theme-dark button:focus {
+ background-color: var(--theme-toolbar-hover);
+}
+
.debugger {
display: flex;
flex: 1;
@@ -587,15 +603,11 @@
display: flex;
position: relative;
flex: 1;
- background-color: var(--theme-tab-toolbar-background);
- height: calc(100% - 1px);
+ background-color: var(--theme-body-background);
+ height: 100%;
overflow: hidden;
}
-.theme-dark .editor-pane {
- background-color: var(--theme-toolbar-background);
-}
-
.editor-container {
width: 100%;
}
@@ -1060,7 +1072,7 @@
height: 12px;
/* makes span appear like an image */
display: inline-block;
- background: var(--theme-body-color);
+ background: var(--theme-icon-color);
mask-size: 100%;
}
/* This Source Code Form is subject to the terms of the Mozilla Public
@@ -1144,6 +1156,10 @@
background: var(--theme-toolbar-background-hover);
}
+.theme-dark .command-bar-button:not(.disabled):hover {
+ background: var(--theme-toolbar-hover);
+}
+
:root.theme-dark .command-bar-button {
color: var(--theme-body-color);
}
@@ -1159,19 +1175,11 @@
* file, You can obtain one at . */
.toggle-button {
- transform: translate(0, 0px);
- transition: transform 0.25s ease-in-out;
- padding: 5px;
- height: inherit;
+ padding: 4px 6px;
}
.toggle-button .img {
- fill: var(--theme-comment);
- vertical-align: 0;
-}
-
-:root.theme-dark .toggle-button .img {
- fill: var(--theme-comment-alt);
+ vertical-align: middle;
}
.toggle-button.end {
@@ -1183,19 +1191,14 @@
margin-inline-start: 0px;
}
-html:not([dir="rtl"]) .toggle-button.end .img,
-html[dir="rtl"] .toggle-button.start .img {
- transform: rotate(180deg);
+html[dir="rtl"] .toggle-button.start .img,
+html[dir="ltr"] .toggle-button.end:not(.vertical) .img {
+ transform: scaleX(-1);
}
-html .toggle-button.end.vertical .img {
+.toggle-button.end.vertical .img {
transform: rotate(-90deg);
}
-
-.toggle-button.start.collapsed,
-.toggle-button.end.collapsed {
- transform: rotate(180deg);
-}
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
@@ -1406,8 +1409,13 @@
mask-size: 100%;
}
-.img.toggle-panes {
- mask: url("resource://devtools/client/debugger/new/images/toggle-panes.svg") no-repeat;
+.img.pane-collapse {
+ mask: url("resource://devtools/client/debugger/new/images/pane-collapse.svg") no-repeat;
+ mask-size: 100%;
+}
+
+.img.pane-expand {
+ mask: url("resource://devtools/client/debugger/new/images/pane-expand.svg") no-repeat;
mask-size: 100%;
}
@@ -2073,7 +2081,6 @@
left: 0;
right: 0;
list-style-type: none;
- font-family: var(--monospace-font-family);
overflow: auto;
}
@@ -2374,58 +2381,58 @@
font-size: 12px;
width: 100%;
background: var(--theme-body-background);
- border-top: 1px solid var(--theme-splitter-color);
display: flex;
-moz-user-select: none;
user-select: none;
box-sizing: border-box;
- height: 29px;
+ height: var(--editor-header-height);
margin: 0;
padding: 0;
+ border-bottom: 1px solid var(--theme-splitter-color);
}
.source-outline-tabs .tab {
+ align-items: center;
background-color: var(--theme-toolbar-background);
- border-top: 2px solid transparent;
- border-bottom: 1px solid var(--theme-splitter-color);
color: var(--theme-toolbar-color);
cursor: default;
display: inline-flex;
flex: 1;
justify-content: center;
- margin-bottom: 0px;
- margin-top: -1px;
overflow: hidden;
- padding: 5px 8px 7px 8px;
+ padding: 5px;
position: relative;
transition: all 0.25s ease;
}
-.source-outline-tabs .tab:not(.active):hover {
- background-color: var(--theme-toolbar-hover);
- border-top: 2px solid rgba(0, 0, 0, 0.2);
-}
-
-.theme-dark .source-outline-tabs .tab:hover {
- border-top: 2px solid var(--tab-line-hover-color);
+.source-outline-tabs .tab::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background-color: var(--tab-line-color, transparent);
+ transition: transform 250ms var(--animation-curve), opacity 250ms var(--animation-curve);
+ opacity: 0;
+ transform: scaleX(0);
}
.source-outline-tabs .tab.active {
- border-top: 2px solid var(--tab-line-selected-color);
- color: var(--theme-toolbar-selected-color);
-}
-
-.theme-dark .source-outline-tabs .tab.active {
+ --tab-line-color: var(--tab-line-selected-color);
color: var(--theme-toolbar-selected-color);
+ border-bottom-color: transparent;
}
-.theme-dark .source-outline-tabs .tab.active:hover {
- border-top: 2px solid var(--tab-line-selected-color);
+.source-outline-tabs .tab:not(.active):hover {
+ --tab-line-color: var(--tab-line-hover-color);
+ background-color: var(--theme-toolbar-hover);
}
-.source-outline-tabs .tab.active path,
-.source-outline-tabs .tab:hover path {
- fill: var(--theme-body-color);
+.source-outline-tabs .tab:hover::before,
+.source-outline-tabs .tab.active::before {
+ opacity: 1;
+ transform: scaleX(1);
}
.source-outline-panel {
@@ -2533,7 +2540,7 @@
transition: opacity 200ms;
border: none;
background: transparent;
- padding: 6px;
+ padding: 4px 6px;
}
.source-footer > .commands > .action .img {
@@ -2603,13 +2610,13 @@
.search-bar {
display: flex;
border: 1px solid transparent;
- border-top: 1px solid var(--theme-splitter-color);
+ border-top-color: var(--theme-splitter-color);
height: var(--editor-searchbar-height);
+ transition: border-color 200ms var(--animation-curve);
}
.search-bar.search-bar-focused {
- border: 1px solid var(--blue-50);
- transition: border-color 0.2s ease-in-out;
+ border-color: var(--blue-50);
}
.search-bar .search-field {
@@ -2961,7 +2968,7 @@
.column-breakpoint {
display: inline;
padding: 0;
- margin-inline-end: 4px;
+ padding-inline-end: 4px;
}
.column-breakpoint:hover {
@@ -3042,6 +3049,10 @@
line-height: 30px;
}
+.conditional-breakpoint-panel input:not(:placeholder-shown) {
+ font-family: var(--monospace-font-family);
+}
+
.conditional-breakpoint-panel input:focus {
outline-width: 0;
}
@@ -3052,10 +3063,8 @@
.editor-wrapper {
--debug-line-border: rgb(145, 188, 219);
--debug-expression-background: rgba(202, 227, 255, 0.5);
- --editor-searchbar-height: 27px;
--debug-line-error-border: rgb(255, 0, 0);
--debug-expression-error-background: rgba(231, 116, 113, 0.3);
- --editor-header-height: 30px;
--highlight-line-duration: 1500ms;
}
@@ -3095,7 +3104,6 @@
width: calc(100% - 1px);
top: var(--editor-header-height);
left: 0px;
- --editor-footer-height: 24px;
}
html[dir="rtl"] .editor-mount {
@@ -3516,11 +3524,6 @@
background-color: var(--search-overlays-semitransparent);
}
-.breakpoints-list .breakpoint .breakpoint-line,
-.breakpoints-list .breakpoint-label {
- font-family: var(--monospace-font-family);
-}
-
.breakpoints-list .breakpoint .breakpoint-line {
font-size: 11px;
color: var(--theme-comment);
@@ -3751,8 +3754,8 @@
padding-inline-start: 10px;
}
-.expression-input {
- max-width: 50%;
+.input-expression:not(:placeholder-shown) {
+ font-family: var(--monospace-font-family);
}
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -4234,7 +4237,8 @@
border-bottom: none;
background-color: var(--theme-body-background);
border-top: 1px solid var(--theme-splitter-color);
- flex: 0 0 25px;
+ flex: none;
+ height: var(--editor-footer-height);
}
.command-bar.bottom {
@@ -4517,16 +4521,13 @@
* file, You can obtain one at . */
.welcomebox {
- width: calc(100% - 1px);
-
- /* Offsetting it by 30px for the sources-header area */
- height: calc(100% - 30px);
position: absolute;
- top: 30px;
+ top: var(--editor-header-height);
left: 0;
+ bottom: 1px;
+ width: calc(100% - 1px);
padding: 50px 0 0 0;
text-align: center;
- font-size: 1.25em;
background-color: var(--theme-toolbar-background);
font-weight: lighter;
z-index: 10;
@@ -4550,6 +4551,7 @@
.alignlabel {
display: flex;
white-space: nowrap;
+ font-size: 1.25em;
}
.shortcutKeys {
@@ -4610,10 +4612,11 @@
* file, You can obtain one at . */
.source-header {
- border-bottom: 1px solid var(--theme-splitter-color);
- width: 100%;
- height: 29px;
display: flex;
+ width: 100%;
+ height: var(--editor-header-height);
+ border-bottom: 1px solid var(--theme-splitter-color);
+ background-color: var(--theme-toolbar-background);
}
.source-header * {
@@ -4621,24 +4624,6 @@
user-select: none;
}
-.source-header .new-tab-btn {
- padding: 4px;
- margin-top: 4px;
- margin-left: 2px;
- fill: var(--theme-comment);
- transition: 0.1s ease;
- align-self: center;
-}
-
-.source-header .new-tab-btn:hover {
- background-color: var(--theme-toolbar-background-hover);
-}
-
-.source-header .new-tab-btn svg {
- width: 12px;
- display: block;
-}
-
.source-tabs {
max-width: calc(100% - 80px);
align-self: flex-start;
@@ -4653,9 +4638,10 @@
overflow: hidden;
padding: 5px;
cursor: default;
- height: 30px;
+ height: calc(var(--editor-header-height) - 1px);
font-size: 12px;
background-color: transparent;
+ vertical-align: bottom;
}
.source-tab::before {
@@ -4665,46 +4651,29 @@
left: 0;
width: 100%;
height: 2px;
- background: transparent;
+ background-color: var(--tab-line-color, transparent);
transition: transform 250ms var(--animation-curve), opacity 250ms var(--animation-curve);
opacity: 0;
transform: scaleX(0);
}
-.source-tab:first-child {
- margin-inline-start: 0;
-}
-
-.source-tab:not(.active):hover {
- background: linear-gradient(var(--theme-toolbar-hover) 28px, transparent 1px);
-}
-
-.source-tab:not(.active):hover::before {
- background: var(--tab-line-hover-color);
- opacity: 1;
- transform: scaleX(1);
-}
-
.source-tab.active {
+ --tab-line-color: var(--tab-line-selected-color);
color: var(--theme-toolbar-selected-color);
border-bottom-color: transparent;
}
+.source-tab:not(.active):hover {
+ --tab-line-color: var(--tab-line-hover-color);
+ background-color: var(--theme-toolbar-hover);
+}
+
+.source-tab:hover::before,
.source-tab.active::before {
- background: var(--tab-line-selected-color);
opacity: 1;
transform: scaleX(1);
}
-.theme-dark .source-tab.active {
- color: var(--theme-toolbar-selected-color);
-}
-
-.source-tab.active path,
-.source-tab:hover path {
- fill: var(--theme-body-color);
-}
-
.source-tab .source-icon {
margin-inline-end: 0;
}
@@ -4716,10 +4685,6 @@
align-self: center;
}
-.source-tab .prettyPrint path {
- fill: var(--theme-textbox-box-shadow);
-}
-
.source-tab .img.react {
mask: url("resource://devtools/client/debugger/new/images/react.svg") no-repeat;
mask-size: 100%;
@@ -4729,14 +4694,6 @@
top: 0;
}
-.source-tab .blackBox path {
- fill: var(--theme-textbox-box-shadow);
-}
-
-.theme-dark .source-tab .blackBox circle {
- fill: var(--theme-body-color);
-}
-
.source-tab .filename {
white-space: nowrap;
text-overflow: ellipsis;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/parser-worker.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/parser-worker.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/parser-worker.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/parser-worker.js 2019-02-07 12:50:26.000000000 +0000
@@ -883,7 +883,7 @@
function parseConsoleScript(text, opts) {
try {
return _parse(text, {
- plugins: ["objectRestSpread"],
+ plugins: ["objectRestSpread", "dynamicImport"],
...opts,
allowAwaitOutsideFunction: true
});
@@ -23651,7 +23651,7 @@
// translates new bindings `var a = 3` into `self.a = 3`
// and existing bindings `var a = 3` into `a = 3` for re-assignments
function globalizeDeclaration(node, bindings) {
- return node.declarations.map(declaration => t.expressionStatement(t.assignmentExpression("=", getAssignmentTarget(declaration.id, bindings), declaration.init)));
+ return node.declarations.map(declaration => t.expressionStatement(t.assignmentExpression("=", getAssignmentTarget(declaration.id, bindings), declaration.init || t.unaryExpression("void", t.numericLiteral(0)))));
}
// translates new bindings `a = 3` into `self.a = 3`
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/search-worker.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/search-worker.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/search-worker.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/search-worker.js 2019-02-07 12:50:26.000000000 +0000
@@ -584,6 +584,11 @@
let singleMatch;
const line = lines[i];
while ((singleMatch = regexQuery.exec(line)) !== null) {
+ // Flow doesn't understand the test above.
+ if (!singleMatch) {
+ throw new Error("no singleMatch");
+ }
+
matchedLocations.push({ line: i, ch: singleMatch.index });
// When the match is an empty string the regexQuery.lastIndex will not
@@ -619,7 +624,7 @@
function findSourceMatches(source, queryText) {
const { id, loadedState, text } = source;
- if (loadedState != "loaded" || !text || queryText == "") {
+ if (loadedState != "loaded" || typeof text != "string" || queryText == "") {
return [];
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/vendors.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/vendors.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/vendors.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/vendors.css 2019-02-07 12:50:26.000000000 +0000
@@ -385,8 +385,13 @@
mask-size: 100%;
}
-.img.toggle-panes {
- mask: url("resource://devtools/client/debugger/new/images/toggle-panes.svg") no-repeat;
+.img.pane-collapse {
+ mask: url("resource://devtools/client/debugger/new/images/pane-collapse.svg") no-repeat;
+ mask-size: 100%;
+}
+
+.img.pane-expand {
+ mask: url("resource://devtools/client/debugger/new/images/pane-expand.svg") no-repeat;
mask-size: 100%;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/vendors.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/vendors.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/dist/vendors.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/dist/vendors.js 2019-02-07 12:50:26.000000000 +0000
@@ -952,13 +952,39 @@
"use strict";
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+var _devtoolsServices = __webpack_require__(22);
+
+var _devtoolsServices2 = _interopRequireDefault(_devtoolsServices);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const { appinfo } = _devtoolsServices2.default; /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const isMacOS = appinfo.OS === "Darwin";
-const { formatKeyShortcut } = __webpack_require__(3786);
const EventEmitter = __webpack_require__(1382);
+/**
+ * Formats key for use in tooltips
+ * For macOS we use the following unicode
+ *
+ * cmd ⌘ = \u2318
+ * shift ⇧ – \u21E7
+ * option (alt) ⌥ \u2325
+ *
+ * For Win/Lin this replaces CommandOrControl or CmdOrCtrl with Ctrl
+ *
+ * @static
+ */
+function formatKeyShortcut(shortcut) {
+ if (isMacOS) {
+ return shortcut.replace(/Shift\+/g, "\u21E7").replace(/Command\+|Cmd\+/g, "\u2318").replace(/CommandOrControl\+|CmdOrCtrl\+/g, "\u2318").replace(/Alt\+/g, "\u2325");
+ }
+ return shortcut.replace(/CommandOrControl\+|CmdOrCtrl\+/g, `${L10N.getStr("ctrl")}+`).replace(/Shift\+/g, "Shift+");
+}
+
function inToolbox() {
try {
return window.parent.document.documentURI == "about:devtools-toolbox";
@@ -3870,7 +3896,7 @@
-const punycode = __webpack_require__(916);
+const punycode = __webpack_require__(3641);
/**
* Gets a readble Unicode hostname from a hostname.
@@ -3969,1657 +3995,1703 @@
/***/ }),
-/***/ 3642:
-/***/ (function(module, exports) {
+/***/ 3641:
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = __WEBPACK_EXTERNAL_MODULE_3642__;
+/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */
+;(function(root) {
-/***/ }),
+ /** Detect free variables */
+ var freeExports = typeof exports == 'object' && exports &&
+ !exports.nodeType && exports;
+ var freeModule = typeof module == 'object' && module &&
+ !module.nodeType && module;
+ var freeGlobal = typeof global == 'object' && global;
+ if (
+ freeGlobal.global === freeGlobal ||
+ freeGlobal.window === freeGlobal ||
+ freeGlobal.self === freeGlobal
+ ) {
+ root = freeGlobal;
+ }
-/***/ 3643:
-/***/ (function(module, exports) {
+ /**
+ * The `punycode` object.
+ * @name punycode
+ * @type Object
+ */
+ var punycode,
-module.exports = __WEBPACK_EXTERNAL_MODULE_3643__;
+ /** Highest positive signed 32-bit float value */
+ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
-/***/ }),
+ /** Bootstring parameters */
+ base = 36,
+ tMin = 1,
+ tMax = 26,
+ skew = 38,
+ damp = 700,
+ initialBias = 72,
+ initialN = 128, // 0x80
+ delimiter = '-', // '\x2D'
-/***/ 3651:
-/***/ (function(module, exports, __webpack_require__) {
+ /** Regular expressions */
+ regexPunycode = /^xn--/,
+ regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
+ regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ /** Error messages */
+ errors = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+ },
-const networkRequest = __webpack_require__(3653);
-const workerUtils = __webpack_require__(3654);
+ /** Convenience shortcuts */
+ baseMinusTMin = base - tMin,
+ floor = Math.floor,
+ stringFromCharCode = String.fromCharCode,
-module.exports = {
- networkRequest,
- workerUtils
-};
+ /** Temporary variable */
+ key;
-/***/ }),
+ /*--------------------------------------------------------------------------*/
-/***/ 3653:
-/***/ (function(module, exports) {
+ /**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+ function error(type) {
+ throw new RangeError(errors[type]);
+ }
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ /**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+ function map(array, fn) {
+ var length = array.length;
+ var result = [];
+ while (length--) {
+ result[length] = fn(array[length]);
+ }
+ return result;
+ }
-function networkRequest(url, opts) {
- return fetch(url, {
- cache: opts.loadFromCache ? "default" : "no-cache"
- }).then(res => {
- if (res.status >= 200 && res.status < 300) {
- if (res.headers.get("Content-Type") === "application/wasm") {
- return res.arrayBuffer().then(buffer => ({
- content: buffer,
- isDwarf: true
- }));
- }
- return res.text().then(text => ({ content: text }));
- }
- return Promise.reject(`request failed with status ${res.status}`);
- });
-}
+ /**
+ * A simple `Array#map`-like wrapper to work with domain name strings or email
+ * addresses.
+ * @private
+ * @param {String} domain The domain name or email address.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {Array} A new string of characters returned by the callback
+ * function.
+ */
+ function mapDomain(string, fn) {
+ var parts = string.split('@');
+ var result = '';
+ if (parts.length > 1) {
+ // In email addresses, only the domain name should be punycoded. Leave
+ // the local part (i.e. everything up to `@`) intact.
+ result = parts[0] + '@';
+ string = parts[1];
+ }
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ string = string.replace(regexSeparators, '\x2E');
+ var labels = string.split('.');
+ var encoded = map(labels, fn).join('.');
+ return result + encoded;
+ }
-module.exports = networkRequest;
+ /**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+ function ucs2decode(string) {
+ var output = [],
+ counter = 0,
+ length = string.length,
+ value,
+ extra;
+ while (counter < length) {
+ value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // high surrogate, and there is a next character
+ extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // unmatched surrogate; only append this code unit, in case the next
+ // code unit is the high surrogate of a surrogate pair
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+ }
-/***/ }),
+ /**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+ function ucs2encode(array) {
+ return map(array, function(value) {
+ var output = '';
+ if (value > 0xFFFF) {
+ value -= 0x10000;
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+ value = 0xDC00 | value & 0x3FF;
+ }
+ output += stringFromCharCode(value);
+ return output;
+ }).join('');
+ }
-/***/ 3654:
-/***/ (function(module, exports) {
+ /**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+ function basicToDigit(codePoint) {
+ if (codePoint - 48 < 10) {
+ return codePoint - 22;
+ }
+ if (codePoint - 65 < 26) {
+ return codePoint - 65;
+ }
+ if (codePoint - 97 < 26) {
+ return codePoint - 97;
+ }
+ return base;
+ }
-function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
+ /**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+ function digitToBasic(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+ }
-function WorkerDispatcher() {
- this.msgId = 1;
- this.worker = null;
-} /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ /**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * https://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+ function adapt(delta, numPoints, firstTime) {
+ var k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+ }
-WorkerDispatcher.prototype = {
- start(url, win = window) {
- this.worker = new win.Worker(url);
- this.worker.onerror = () => {
- console.error(`Error in worker ${url}`);
- };
- },
+ /**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+ function decode(input) {
+ // Don't use UCS-2
+ var output = [],
+ inputLength = input.length,
+ out,
+ i = 0,
+ n = initialN,
+ bias = initialBias,
+ basic,
+ j,
+ index,
+ oldi,
+ w,
+ k,
+ digit,
+ t,
+ /** Cached calculation results */
+ baseMinusT;
- stop() {
- if (!this.worker) {
- return;
- }
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
- this.worker.terminate();
- this.worker = null;
- },
+ basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
- task(method, { queue = false } = {}) {
- const calls = [];
- const push = args => {
- return new Promise((resolve, reject) => {
- if (queue && calls.length === 0) {
- Promise.resolve().then(flush);
- }
+ for (j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
- calls.push([args, resolve, reject]);
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
- if (!queue) {
- flush();
- }
- });
- };
+ for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
- const flush = () => {
- const items = calls.slice();
- calls.length = 0;
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
- if (!this.worker) {
- return;
- }
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
- const id = this.msgId++;
- this.worker.postMessage({
- id,
- method,
- calls: items.map(item => item[0])
- });
+ digit = basicToDigit(input.charCodeAt(index++));
- const listener = ({ data: result }) => {
- if (result.id !== id) {
- return;
- }
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
- if (!this.worker) {
- return;
- }
+ i += digit * w;
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- this.worker.removeEventListener("message", listener);
+ if (digit < t) {
+ break;
+ }
- result.results.forEach((resultData, i) => {
- const [, resolve, reject] = items[i];
+ baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
- if (resultData.error) {
- reject(resultData.error);
- } else {
- resolve(resultData.response);
- }
- });
- };
+ w *= baseMinusT;
- this.worker.addEventListener("message", listener);
- };
+ }
- return (...args) => push(args);
- },
+ out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
- invoke(method, ...args) {
- return this.task(method)(...args);
- }
-};
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
-function workerHandler(publicInterface) {
- return function (msg) {
- const { id, method, calls } = msg.data;
+ n += floor(i / out);
+ i %= out;
- Promise.all(calls.map(args => {
- try {
- const response = publicInterface[method].apply(undefined, args);
- if (response instanceof Promise) {
- return response.then(val => ({ response: val }),
- // Error can't be sent via postMessage, so be sure to
- // convert to string.
- err => ({ error: err.toString() }));
- }
- return { response };
- } catch (error) {
- // Error can't be sent via postMessage, so be sure to convert to
- // string.
- return { error: error.toString() };
- }
- })).then(results => {
- self.postMessage({ id, results });
- });
- };
-}
+ // Insert `n` at position `i` of the output
+ output.splice(i++, 0, n);
-function streamingWorkerHandler(publicInterface, { timeout = 100 } = {}, worker = self) {
- let streamingWorker = (() => {
- var _ref = _asyncToGenerator(function* (id, tasks) {
- let isWorking = true;
+ }
- const timeoutId = setTimeout(function () {
- isWorking = false;
- }, timeout);
+ return ucs2encode(output);
+ }
- const results = [];
- while (tasks.length !== 0 && isWorking) {
- const { callback, context, args } = tasks.shift();
- const result = yield callback.call(context, args);
- results.push(result);
- }
- worker.postMessage({ id, status: "pending", data: results });
- clearTimeout(timeoutId);
+ /**
+ * Converts a string of Unicode symbols (e.g. a domain name label) to a
+ * Punycode string of ASCII-only symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+ function encode(input) {
+ var n,
+ delta,
+ handledCPCount,
+ basicLength,
+ bias,
+ j,
+ m,
+ q,
+ k,
+ t,
+ currentValue,
+ output = [],
+ /** `inputLength` will hold the number of code points in `input`. */
+ inputLength,
+ /** Cached calculation results */
+ handledCPCountPlusOne,
+ baseMinusT,
+ qMinusT;
- if (tasks.length !== 0) {
- yield streamingWorker(id, tasks);
- }
- });
+ // Convert the input in UCS-2 to Unicode
+ input = ucs2decode(input);
- return function streamingWorker(_x, _x2) {
- return _ref.apply(this, arguments);
- };
- })();
+ // Cache the length
+ inputLength = input.length;
- return (() => {
- var _ref2 = _asyncToGenerator(function* (msg) {
- const { id, method, args } = msg.data;
- const workerMethod = publicInterface[method];
- if (!workerMethod) {
- console.error(`Could not find ${method} defined in worker.`);
- }
- worker.postMessage({ id, status: "start" });
+ // Initialize the state
+ n = initialN;
+ delta = 0;
+ bias = initialBias;
- try {
- const tasks = workerMethod(args);
- yield streamingWorker(id, tasks);
- worker.postMessage({ id, status: "done" });
- } catch (error) {
- worker.postMessage({ id, status: "error", error });
- }
- });
+ // Handle the basic code points
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
- return function (_x3) {
- return _ref2.apply(this, arguments);
- };
- })();
-}
+ handledCPCount = basicLength = output.length;
-module.exports = {
- WorkerDispatcher,
- workerHandler,
- streamingWorkerHandler
-};
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
-/***/ }),
+ // Finish the basic string - if it is not empty - with a delimiter
+ if (basicLength) {
+ output.push(delimiter);
+ }
-/***/ 3669:
-/***/ (function(module, exports, __webpack_require__) {
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
-"use strict";
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ for (m = maxInt, j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
+ // Increase `delta` enough to advance the decoder's state to ,
+ // but guard against overflow
+ handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
-var _tree = __webpack_require__(3670);
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
-var _tree2 = _interopRequireDefault(_tree);
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
-module.exports = {
- Tree: _tree2.default
-}; /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ if (currentValue == n) {
+ // Represent delta as a generalized variable-length integer
+ for (q = delta, k = base; /* no condition */; k += base) {
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ qMinusT = q - t;
+ baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
-/***/ }),
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
-/***/ 3670:
-/***/ (function(module, exports, __webpack_require__) {
+ ++delta;
+ ++n;
-"use strict";
+ }
+ return output.join('');
+ }
+ /**
+ * Converts a Punycode string representing a domain name or an email address
+ * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+ * it doesn't matter if you call it on a string that has already been
+ * converted to Unicode.
+ * @memberOf punycode
+ * @param {String} input The Punycoded domain name or email address to
+ * convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+ function toUnicode(input) {
+ return mapDomain(input, function(string) {
+ return regexPunycode.test(string)
+ ? decode(string.slice(4).toLowerCase())
+ : string;
+ });
+ }
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
+ /**
+ * Converts a Unicode string representing a domain name or an email address to
+ * Punycode. Only the non-ASCII parts of the domain name will be converted,
+ * i.e. it doesn't matter if you call it with a domain that's already in
+ * ASCII.
+ * @memberOf punycode
+ * @param {String} input The domain name or email address to convert, as a
+ * Unicode string.
+ * @returns {String} The Punycode representation of the given domain name or
+ * email address.
+ */
+ function toASCII(input) {
+ return mapDomain(input, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode(string)
+ : string;
+ });
+ }
-var _react = __webpack_require__(0);
+ /*--------------------------------------------------------------------------*/
-var _react2 = _interopRequireDefault(_react);
+ /** Define the public API */
+ punycode = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '1.4.1',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode,
+ 'encode': encode,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+ };
-var _reactDomFactories = __webpack_require__(3643);
+ /** Expose `punycode` */
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ true
+ ) {
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
+ return punycode;
+ }).call(exports, __webpack_require__, exports, module),
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else if (freeExports && freeModule) {
+ if (module.exports == freeExports) {
+ // in Node.js, io.js, or RingoJS v0.8.0+
+ freeModule.exports = punycode;
+ } else {
+ // in Narwhal or RingoJS v0.7.0-
+ for (key in punycode) {
+ punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
+ }
+ }
+ } else {
+ // in Rhino or a web browser
+ root.punycode = punycode;
+ }
-var _reactDomFactories2 = _interopRequireDefault(_reactDomFactories);
+}(this));
-var _propTypes = __webpack_require__(3642);
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(793)(module), __webpack_require__(792)))
-var _propTypes2 = _interopRequireDefault(_propTypes);
+/***/ }),
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/***/ 3642:
+/***/ (function(module, exports) {
-const { Component, createFactory } = _react2.default; /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+module.exports = __WEBPACK_EXTERNAL_MODULE_3642__;
-__webpack_require__(3671);
+/***/ }),
-// depth
-const AUTO_EXPAND_DEPTH = 0;
+/***/ 3643:
+/***/ (function(module, exports) {
-/**
- * An arrow that displays whether its node is expanded (▼) or collapsed
- * (▶). When its node has no children, it is hidden.
- */
-class ArrowExpander extends Component {
- static get propTypes() {
- return {
- expanded: _propTypes2.default.bool
- };
- }
+module.exports = __WEBPACK_EXTERNAL_MODULE_3643__;
- shouldComponentUpdate(nextProps, nextState) {
- return this.props.expanded !== nextProps.expanded;
- }
+/***/ }),
- render() {
- const { expanded } = this.props;
+/***/ 3651:
+/***/ (function(module, exports, __webpack_require__) {
- const classNames = ["arrow"];
- if (expanded) {
- classNames.push("expanded");
- }
- return _reactDomFactories2.default.button({
- className: classNames.join(" ")
- });
- }
-}
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-const treeIndent = _reactDomFactories2.default.span({ className: "tree-indent" }, "\u200B");
+const networkRequest = __webpack_require__(3653);
+const workerUtils = __webpack_require__(3654);
-class TreeNode extends Component {
- static get propTypes() {
- return {
- id: _propTypes2.default.any.isRequired,
- index: _propTypes2.default.number.isRequired,
- depth: _propTypes2.default.number.isRequired,
- focused: _propTypes2.default.bool.isRequired,
- expanded: _propTypes2.default.bool.isRequired,
- item: _propTypes2.default.any.isRequired,
- isExpandable: _propTypes2.default.bool.isRequired,
- onClick: _propTypes2.default.func,
- renderItem: _propTypes2.default.func.isRequired
- };
- }
+module.exports = {
+ networkRequest,
+ workerUtils
+};
- shouldComponentUpdate(nextProps) {
- return this.props.item !== nextProps.item || this.props.focused !== nextProps.focused || this.props.expanded !== nextProps.expanded;
- }
+/***/ }),
- render() {
- const {
- depth,
- id,
- item,
- focused,
- expanded,
- renderItem,
- isExpandable
- } = this.props;
+/***/ 3653:
+/***/ (function(module, exports) {
- const arrow = isExpandable ? ArrowExpanderFactory({
- item,
- expanded
- }) : null;
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- let ariaExpanded;
- if (this.props.isExpandable) {
- ariaExpanded = false;
- }
- if (this.props.expanded) {
- ariaExpanded = true;
+function networkRequest(url, opts) {
+ return fetch(url, {
+ cache: opts.loadFromCache ? "default" : "no-cache"
+ }).then(res => {
+ if (res.status >= 200 && res.status < 300) {
+ if (res.headers.get("Content-Type") === "application/wasm") {
+ return res.arrayBuffer().then(buffer => ({
+ content: buffer,
+ isDwarf: true
+ }));
+ }
+ return res.text().then(text => ({ content: text }));
}
+ return Promise.reject(`request failed with status ${res.status}`);
+ });
+}
- const indents = Array.from({ length: depth }).fill(treeIndent);
- const items = indents.concat(renderItem(item, depth, focused, arrow, expanded));
+module.exports = networkRequest;
- return _reactDomFactories2.default.div({
- id,
- className: `tree-node${focused ? " focused" : ""}`,
- onClick: this.props.onClick,
- role: "treeitem",
- "aria-level": depth + 1,
- "aria-expanded": ariaExpanded,
- "data-expandable": this.props.isExpandable
- }, ...items);
- }
-}
+/***/ }),
-const ArrowExpanderFactory = createFactory(ArrowExpander);
-const TreeNodeFactory = createFactory(TreeNode);
+/***/ 3654:
+/***/ (function(module, exports) {
-/**
- * Create a function that calls the given function `fn` only once per animation
- * frame.
- *
- * @param {Function} fn
- * @returns {Function}
- */
-function oncePerAnimationFrame(fn) {
- let animationId = null;
- let argsToPass = null;
- return function (...args) {
- argsToPass = args;
- if (animationId !== null) {
+function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
+
+function WorkerDispatcher() {
+ this.msgId = 1;
+ this.worker = null;
+} /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+
+WorkerDispatcher.prototype = {
+ start(url, win = window) {
+ this.worker = new win.Worker(url);
+ this.worker.onerror = () => {
+ console.error(`Error in worker ${url}`);
+ };
+ },
+
+ stop() {
+ if (!this.worker) {
return;
}
- animationId = requestAnimationFrame(() => {
- fn.call(this, ...argsToPass);
- animationId = null;
- argsToPass = null;
- });
- };
-}
+ this.worker.terminate();
+ this.worker = null;
+ },
-/**
- * A generic tree component. See propTypes for the public API.
- *
- * This tree component doesn't make any assumptions about the structure of your
- * tree data. Whether children are computed on demand, or stored in an array in
- * the parent's `_children` property, it doesn't matter. We only require the
- * implementation of `getChildren`, `getRoots`, `getParent`, and `isExpanded`
- * functions.
- *
- * This tree component is well tested and reliable. See the tests in ./tests
- * and its usage in the performance and memory panels in mozilla-central.
- *
- * This tree component doesn't make any assumptions about how to render items in
- * the tree. You provide a `renderItem` function, and this component will ensure
- * that only those items whose parents are expanded and which are visible in the
- * viewport are rendered. The `renderItem` function could render the items as a
- * "traditional" tree or as rows in a table or anything else. It doesn't
- * restrict you to only one certain kind of tree.
- *
- * The tree comes with basic styling for the indent, the arrow, as well as
- * hovered and focused styles which can be override in CSS.
- *
- * ### Example Usage
- *
- * Suppose we have some tree data where each item has this form:
- *
- * {
- * id: Number,
- * label: String,
- * parent: Item or null,
- * children: Array of child items,
- * expanded: bool,
- * }
- *
- * Here is how we could render that data with this component:
- *
- * class MyTree extends Component {
- * static get propTypes() {
- * // The root item of the tree, with the form described above.
- * return {
- * root: PropTypes.object.isRequired
- * };
- * },
- *
- * render() {
- * return Tree({
- * itemHeight: 20, // px
- *
- * getRoots: () => [this.props.root],
- *
- * getParent: item => item.parent,
- * getChildren: item => item.children,
- * getKey: item => item.id,
- * isExpanded: item => item.expanded,
- *
- * renderItem: (item, depth, isFocused, arrow, isExpanded) => {
- * let className = "my-tree-item";
- * if (isFocused) {
- * className += " focused";
- * }
- * return dom.div({
- * className,
- * },
- * arrow,
- * // And here is the label for this item.
- * dom.span({ className: "my-tree-item-label" }, item.label)
- * );
- * },
- *
- * onExpand: item => dispatchExpandActionToRedux(item),
- * onCollapse: item => dispatchCollapseActionToRedux(item),
- * });
- * }
- * }
- */
-class Tree extends Component {
- static get propTypes() {
- return {
- // Required props
+ task(method, { queue = false } = {}) {
+ const calls = [];
+ const push = args => {
+ return new Promise((resolve, reject) => {
+ if (queue && calls.length === 0) {
+ Promise.resolve().then(flush);
+ }
- // A function to get an item's parent, or null if it is a root.
- //
- // Type: getParent(item: Item) -> Maybe-
- //
- // Example:
- //
- // // The parent of this item is stored in its `parent` property.
- // getParent: item => item.parent
- getParent: _propTypes2.default.func.isRequired,
+ calls.push([args, resolve, reject]);
- // A function to get an item's children.
- //
- // Type: getChildren(item: Item) -> [Item]
- //
- // Example:
- //
- // // This item's children are stored in its `children` property.
- // getChildren: item => item.children
- getChildren: _propTypes2.default.func.isRequired,
+ if (!queue) {
+ flush();
+ }
+ });
+ };
- // A function which takes an item and ArrowExpander component instance and
- // returns a component, or text, or anything else that React considers
- // renderable.
- //
- // Type: renderItem(item: Item,
- // depth: Number,
- // isFocused: Boolean,
- // arrow: ReactComponent,
- // isExpanded: Boolean) -> ReactRenderable
- //
- // Example:
- //
- // renderItem: (item, depth, isFocused, arrow, isExpanded) => {
- // let className = "my-tree-item";
- // if (isFocused) {
- // className += " focused";
- // }
- // return dom.div(
- // {
- // className,
- // style: { marginLeft: depth * 10 + "px" }
- // },
- // arrow,
- // dom.span({ className: "my-tree-item-label" }, item.label)
- // );
- // },
- renderItem: _propTypes2.default.func.isRequired,
-
- // A function which returns the roots of the tree (forest).
- //
- // Type: getRoots() -> [Item]
- //
- // Example:
- //
- // // In this case, we only have one top level, root item. You could
- // // return multiple items if you have many top level items in your
- // // tree.
- // getRoots: () => [this.props.rootOfMyTree]
- getRoots: _propTypes2.default.func.isRequired,
-
- // A function to get a unique key for the given item. This helps speed up
- // React's rendering a *TON*.
- //
- // Type: getKey(item: Item) -> String
- //
- // Example:
- //
- // getKey: item => `my-tree-item-${item.uniqueId}`
- getKey: _propTypes2.default.func.isRequired,
-
- // A function to get whether an item is expanded or not. If an item is not
- // expanded, then it must be collapsed.
- //
- // Type: isExpanded(item: Item) -> Boolean
- //
- // Example:
- //
- // isExpanded: item => item.expanded,
- isExpanded: _propTypes2.default.func.isRequired,
-
- // Optional props
-
- // The currently focused item, if any such item exists.
- focused: _propTypes2.default.any,
+ const flush = () => {
+ const items = calls.slice();
+ calls.length = 0;
- // Handle when a new item is focused.
- onFocus: _propTypes2.default.func,
+ if (!this.worker) {
+ return;
+ }
- // The depth to which we should automatically expand new items.
- autoExpandDepth: _propTypes2.default.number,
- // Should auto expand all new items or just the new items under the first
- // root item.
- autoExpandAll: _propTypes2.default.bool,
+ const id = this.msgId++;
+ this.worker.postMessage({
+ id,
+ method,
+ calls: items.map(item => item[0])
+ });
- // Auto expand a node only if number of its children
- // are less than autoExpandNodeChildrenLimit
- autoExpandNodeChildrenLimit: _propTypes2.default.number,
+ const listener = ({ data: result }) => {
+ if (result.id !== id) {
+ return;
+ }
- // Note: the two properties below are mutually exclusive. Only one of the
- // label properties is necessary.
- // ID of an element whose textual content serves as an accessible label
- // for a tree.
- labelledby: _propTypes2.default.string,
- // Accessibility label for a tree widget.
- label: _propTypes2.default.string,
+ if (!this.worker) {
+ return;
+ }
- // Optional event handlers for when items are expanded or collapsed.
- // Useful for dispatching redux events and updating application state,
- // maybe lazily loading subtrees from a worker, etc.
- //
- // Type:
- // onExpand(item: Item)
- // onCollapse(item: Item)
- //
- // Example:
- //
- // onExpand: item => dispatchExpandActionToRedux(item)
- onExpand: _propTypes2.default.func,
- onCollapse: _propTypes2.default.func,
- // Optional event handler called with the current focused node when the
- // Enter key is pressed. Can be useful to allow further keyboard actions
- // within the tree node.
- onActivate: _propTypes2.default.func,
- isExpandable: _propTypes2.default.func,
- // Additional classes to add to the root element.
- className: _propTypes2.default.string,
- // style object to be applied to the root element.
- style: _propTypes2.default.object,
- // Prevents blur when Tree loses focus
- preventBlur: _propTypes2.default.bool
- };
- }
+ this.worker.removeEventListener("message", listener);
- static get defaultProps() {
- return {
- autoExpandDepth: AUTO_EXPAND_DEPTH,
- autoExpandAll: true
- };
- }
+ result.results.forEach((resultData, i) => {
+ const [, resolve, reject] = items[i];
- constructor(props) {
- super(props);
+ if (resultData.error) {
+ reject(resultData.error);
+ } else {
+ resolve(resultData.response);
+ }
+ });
+ };
- this.state = {
- seen: new Set()
+ this.worker.addEventListener("message", listener);
};
- this._onExpand = oncePerAnimationFrame(this._onExpand).bind(this);
- this._onCollapse = oncePerAnimationFrame(this._onCollapse).bind(this);
- this._focusPrevNode = oncePerAnimationFrame(this._focusPrevNode).bind(this);
- this._focusNextNode = oncePerAnimationFrame(this._focusNextNode).bind(this);
- this._focusParentNode = oncePerAnimationFrame(this._focusParentNode).bind(this);
- this._focusFirstNode = oncePerAnimationFrame(this._focusFirstNode).bind(this);
- this._focusLastNode = oncePerAnimationFrame(this._focusLastNode).bind(this);
+ return (...args) => push(args);
+ },
- this._autoExpand = this._autoExpand.bind(this);
- this._preventArrowKeyScrolling = this._preventArrowKeyScrolling.bind(this);
- this._dfs = this._dfs.bind(this);
- this._dfsFromRoots = this._dfsFromRoots.bind(this);
- this._focus = this._focus.bind(this);
- this._scrollNodeIntoView = this._scrollNodeIntoView.bind(this);
- this._onBlur = this._onBlur.bind(this);
- this._onKeyDown = this._onKeyDown.bind(this);
- this._nodeIsExpandable = this._nodeIsExpandable.bind(this);
- this._activateNode = oncePerAnimationFrame(this._activateNode).bind(this);
+ invoke(method, ...args) {
+ return this.task(method)(...args);
}
+};
- componentDidMount() {
- this._autoExpand();
- if (this.props.focused) {
- this._scrollNodeIntoView(this.props.focused);
- // Always keep the focus on the tree itself.
- this.treeRef.focus();
- }
- }
+function workerHandler(publicInterface) {
+ return function (msg) {
+ const { id, method, calls } = msg.data;
- componentWillReceiveProps(nextProps) {
- this._autoExpand();
- }
+ Promise.all(calls.map(args => {
+ try {
+ const response = publicInterface[method].apply(undefined, args);
+ if (response instanceof Promise) {
+ return response.then(val => ({ response: val }),
+ // Error can't be sent via postMessage, so be sure to
+ // convert to string.
+ err => ({ error: err.toString() }));
+ }
+ return { response };
+ } catch (error) {
+ // Error can't be sent via postMessage, so be sure to convert to
+ // string.
+ return { error: error.toString() };
+ }
+ })).then(results => {
+ self.postMessage({ id, results });
+ });
+ };
+}
- componentDidUpdate(prevProps, prevState) {
- if (this.props.focused && prevProps.focused !== this.props.focused) {
- this._scrollNodeIntoView(this.props.focused);
- // Always keep the focus on the tree itself.
- this.treeRef.focus();
- }
- }
+function streamingWorkerHandler(publicInterface, { timeout = 100 } = {}, worker = self) {
+ let streamingWorker = (() => {
+ var _ref = _asyncToGenerator(function* (id, tasks) {
+ let isWorking = true;
- _autoExpand() {
- const { autoExpandDepth, autoExpandNodeChildrenLimit } = this.props;
- if (!autoExpandDepth) {
- return;
- }
+ const timeoutId = setTimeout(function () {
+ isWorking = false;
+ }, timeout);
- // Automatically expand the first autoExpandDepth levels for new items. Do
- // not use the usual DFS infrastructure because we don't want to ignore
- // collapsed nodes.
- const autoExpand = (item, currentDepth) => {
- if (currentDepth >= autoExpandDepth || this.state.seen.has(item)) {
- return;
+ const results = [];
+ while (tasks.length !== 0 && isWorking) {
+ const { callback, context, args } = tasks.shift();
+ const result = yield callback.call(context, args);
+ results.push(result);
}
+ worker.postMessage({ id, status: "pending", data: results });
+ clearTimeout(timeoutId);
- const children = this.props.getChildren(item);
- if (autoExpandNodeChildrenLimit && children.length > autoExpandNodeChildrenLimit) {
- return;
+ if (tasks.length !== 0) {
+ yield streamingWorker(id, tasks);
}
+ });
- this.props.onExpand(item);
- this.state.seen.add(item);
+ return function streamingWorker(_x, _x2) {
+ return _ref.apply(this, arguments);
+ };
+ })();
- const length = children.length;
- for (let i = 0; i < length; i++) {
- autoExpand(children[i], currentDepth + 1);
+ return (() => {
+ var _ref2 = _asyncToGenerator(function* (msg) {
+ const { id, method, args } = msg.data;
+ const workerMethod = publicInterface[method];
+ if (!workerMethod) {
+ console.error(`Could not find ${method} defined in worker.`);
}
- };
+ worker.postMessage({ id, status: "start" });
- const roots = this.props.getRoots();
- const length = roots.length;
- if (this.props.autoExpandAll) {
- for (let i = 0; i < length; i++) {
- autoExpand(roots[i], 0);
+ try {
+ const tasks = workerMethod(args);
+ yield streamingWorker(id, tasks);
+ worker.postMessage({ id, status: "done" });
+ } catch (error) {
+ worker.postMessage({ id, status: "error", error });
}
- } else if (length != 0) {
- autoExpand(roots[0], 0);
- }
- }
+ });
- _preventArrowKeyScrolling(e) {
- switch (e.key) {
- case "ArrowUp":
- case "ArrowDown":
- case "ArrowLeft":
- case "ArrowRight":
- e.preventDefault();
- e.stopPropagation();
- if (e.nativeEvent) {
- if (e.nativeEvent.preventDefault) {
- e.nativeEvent.preventDefault();
- }
- if (e.nativeEvent.stopPropagation) {
- e.nativeEvent.stopPropagation();
- }
- }
- }
- }
+ return function (_x3) {
+ return _ref2.apply(this, arguments);
+ };
+ })();
+}
- /**
- * Perform a pre-order depth-first search from item.
- */
- _dfs(item, maxDepth = Infinity, traversal = [], _depth = 0) {
- traversal.push({ item, depth: _depth });
+module.exports = {
+ WorkerDispatcher,
+ workerHandler,
+ streamingWorkerHandler
+};
- if (!this.props.isExpanded(item)) {
- return traversal;
- }
+/***/ }),
- const nextDepth = _depth + 1;
+/***/ 3669:
+/***/ (function(module, exports, __webpack_require__) {
- if (nextDepth > maxDepth) {
- return traversal;
- }
+"use strict";
- const children = this.props.getChildren(item);
- const length = children.length;
- for (let i = 0; i < length; i++) {
- this._dfs(children[i], maxDepth, traversal, nextDepth);
- }
- return traversal;
- }
+var _tree = __webpack_require__(3670);
- /**
- * Perform a pre-order depth-first search over the whole forest.
- */
- _dfsFromRoots(maxDepth = Infinity) {
- const traversal = [];
+var _tree2 = _interopRequireDefault(_tree);
- const roots = this.props.getRoots();
- const length = roots.length;
- for (let i = 0; i < length; i++) {
- this._dfs(roots[i], maxDepth, traversal);
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- return traversal;
- }
+module.exports = {
+ Tree: _tree2.default
+}; /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- /**
- * Expands current row.
- *
- * @param {Object} item
- * @param {Boolean} expandAllChildren
- */
- _onExpand(item, expandAllChildren) {
- if (this.props.onExpand) {
- this.props.onExpand(item);
+/***/ }),
- if (expandAllChildren) {
- const children = this._dfs(item);
- const length = children.length;
- for (let i = 0; i < length; i++) {
- this.props.onExpand(children[i].item);
- }
- }
- }
- }
+/***/ 3670:
+/***/ (function(module, exports, __webpack_require__) {
- /**
- * Collapses current row.
- *
- * @param {Object} item
- */
- _onCollapse(item) {
- if (this.props.onCollapse) {
- this.props.onCollapse(item);
- }
- }
+"use strict";
- /**
- * Sets the passed in item to be the focused item.
- *
- * @param {Object|undefined} item
- * The item to be focused, or undefined to focus no item.
- *
- * @param {Object|undefined} options
- * An options object which can contain:
- * - dir: "up" or "down" to indicate if we should scroll the element
- * to the top or the bottom of the scrollable container when
- * the element is off canvas.
- */
- _focus(item, options = {}) {
- const { preventAutoScroll } = options;
- if (item && !preventAutoScroll) {
- this._scrollNodeIntoView(item, options);
- }
- if (this.props.onFocus) {
- this.props.onFocus(item);
- }
- }
- /**
- * Sets the passed in item to be the focused item.
- *
- * @param {Object|undefined} item
- * The item to be scrolled to.
- *
- * @param {Object|undefined} options
- * An options object which can contain:
- * - dir: "up" or "down" to indicate if we should scroll the element
- * to the top or the bottom of the scrollable container when
- * the element is off canvas.
- */
- _scrollNodeIntoView(item, options = {}) {
- if (item !== undefined) {
- const treeElement = this.treeRef;
- const element = document.getElementById(this.props.getKey(item));
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- if (element) {
- const { top, bottom } = element.getBoundingClientRect();
- const closestScrolledParent = node => {
- if (node == null) {
- return null;
- }
+var _react = __webpack_require__(0);
- if (node.scrollHeight > node.clientHeight) {
- return node;
- }
- return closestScrolledParent(node.parentNode);
- };
- const scrolledParent = closestScrolledParent(treeElement);
- const scrolledParentRect = scrolledParent ? scrolledParent.getBoundingClientRect() : null;
- const isVisible = !scrolledParent || top >= scrolledParentRect.top && bottom <= scrolledParentRect.bottom;
+var _react2 = _interopRequireDefault(_react);
- if (!isVisible) {
- const { alignTo } = options;
- const scrollToTop = alignTo ? alignTo === "top" : !scrolledParentRect || top < scrolledParentRect.top;
- element.scrollIntoView(scrollToTop);
- }
- }
- }
- }
+var _reactDomFactories = __webpack_require__(3643);
- /**
- * Sets the state to have no focused item.
- */
- _onBlur() {
- if (!this.props.preventBlur) {
- this._focus(undefined);
- }
- }
+var _reactDomFactories2 = _interopRequireDefault(_reactDomFactories);
- /**
- * Handles key down events in the tree's container.
- *
- * @param {Event} e
- */
- _onKeyDown(e) {
- if (this.props.focused == null) {
- return;
- }
+var _propTypes = __webpack_require__(3642);
- // Allow parent nodes to use navigation arrows with modifiers.
- if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {
- return;
- }
+var _propTypes2 = _interopRequireDefault(_propTypes);
- this._preventArrowKeyScrolling(e);
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- switch (e.key) {
- case "ArrowUp":
- this._focusPrevNode();
- return;
+const { Component, createFactory } = _react2.default; /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at
. */
- case "ArrowDown":
- this._focusNextNode();
- return;
+__webpack_require__(3671);
- case "ArrowLeft":
- if (this.props.isExpanded(this.props.focused) && this._nodeIsExpandable(this.props.focused)) {
- this._onCollapse(this.props.focused);
- } else {
- this._focusParentNode();
- }
- return;
+// depth
+const AUTO_EXPAND_DEPTH = 0;
- case "ArrowRight":
- if (this._nodeIsExpandable(this.props.focused) && !this.props.isExpanded(this.props.focused)) {
- this._onExpand(this.props.focused);
- } else {
- this._focusNextNode();
- }
- return;
+/**
+ * An arrow that displays whether its node is expanded (▼) or collapsed
+ * (▶). When its node has no children, it is hidden.
+ */
+class ArrowExpander extends Component {
+ static get propTypes() {
+ return {
+ expanded: _propTypes2.default.bool
+ };
+ }
- case "Home":
- this._focusFirstNode();
- return;
+ shouldComponentUpdate(nextProps, nextState) {
+ return this.props.expanded !== nextProps.expanded;
+ }
- case "End":
- this._focusLastNode();
- return;
+ render() {
+ const { expanded } = this.props;
- case "Enter":
- this._activateNode();
+ const classNames = ["arrow"];
+ if (expanded) {
+ classNames.push("expanded");
}
+ return _reactDomFactories2.default.button({
+ className: classNames.join(" ")
+ });
}
+}
- /**
- * Sets the previous node relative to the currently focused item, to focused.
- */
- _focusPrevNode() {
- // Start a depth first search and keep going until we reach the currently
- // focused node. Focus the previous node in the DFS, if it exists. If it
- // doesn't exist, we're at the first node already.
-
- let prev;
+const treeIndent = _reactDomFactories2.default.span({ className: "tree-indent" }, "\u200B");
- const traversal = this._dfsFromRoots();
- const length = traversal.length;
- for (let i = 0; i < length; i++) {
- const item = traversal[i].item;
- if (item === this.props.focused) {
- break;
- }
- prev = item;
- }
- if (prev === undefined) {
- return;
- }
+class TreeNode extends Component {
+ static get propTypes() {
+ return {
+ id: _propTypes2.default.any.isRequired,
+ index: _propTypes2.default.number.isRequired,
+ depth: _propTypes2.default.number.isRequired,
+ focused: _propTypes2.default.bool.isRequired,
+ expanded: _propTypes2.default.bool.isRequired,
+ item: _propTypes2.default.any.isRequired,
+ isExpandable: _propTypes2.default.bool.isRequired,
+ onClick: _propTypes2.default.func,
+ renderItem: _propTypes2.default.func.isRequired
+ };
+ }
- this._focus(prev, { alignTo: "top" });
+ shouldComponentUpdate(nextProps) {
+ return this.props.item !== nextProps.item || this.props.focused !== nextProps.focused || this.props.expanded !== nextProps.expanded;
}
- /**
- * Handles the down arrow key which will focus either the next child
- * or sibling row.
- */
- _focusNextNode() {
- // Start a depth first search and keep going until we reach the currently
- // focused node. Focus the next node in the DFS, if it exists. If it
- // doesn't exist, we're at the last node already.
- const traversal = this._dfsFromRoots();
- const length = traversal.length;
- let i = 0;
+ render() {
+ const {
+ depth,
+ id,
+ item,
+ focused,
+ expanded,
+ renderItem,
+ isExpandable
+ } = this.props;
- while (i < length) {
- if (traversal[i].item === this.props.focused) {
- break;
- }
- i++;
- }
+ const arrow = isExpandable ? ArrowExpanderFactory({
+ item,
+ expanded
+ }) : null;
- if (i + 1 < traversal.length) {
- this._focus(traversal[i + 1].item, { alignTo: "bottom" });
+ let ariaExpanded;
+ if (this.props.isExpandable) {
+ ariaExpanded = false;
}
- }
-
- /**
- * Handles the left arrow key, going back up to the current rows'
- * parent row.
- */
- _focusParentNode() {
- const parent = this.props.getParent(this.props.focused);
- if (!parent) {
- this._focusPrevNode(this.props.focused);
- return;
+ if (this.props.expanded) {
+ ariaExpanded = true;
}
- this._focus(parent, { alignTo: "top" });
- }
+ const indents = Array.from({ length: depth }).fill(treeIndent);
+ const items = indents.concat(renderItem(item, depth, focused, arrow, expanded));
- _focusFirstNode() {
- const traversal = this._dfsFromRoots();
- this._focus(traversal[0].item, { alignTo: "top" });
+ return _reactDomFactories2.default.div({
+ id,
+ className: `tree-node${focused ? " focused" : ""}`,
+ onClick: this.props.onClick,
+ role: "treeitem",
+ "aria-level": depth + 1,
+ "aria-expanded": ariaExpanded,
+ "data-expandable": this.props.isExpandable
+ }, ...items);
}
+}
- _focusLastNode() {
- const traversal = this._dfsFromRoots();
- const lastIndex = traversal.length - 1;
- this._focus(traversal[lastIndex].item, { alignTo: "bottom" });
- }
+const ArrowExpanderFactory = createFactory(ArrowExpander);
+const TreeNodeFactory = createFactory(TreeNode);
- _activateNode() {
- if (this.props.onActivate) {
- this.props.onActivate(this.props.focused);
+/**
+ * Create a function that calls the given function `fn` only once per animation
+ * frame.
+ *
+ * @param {Function} fn
+ * @returns {Function}
+ */
+function oncePerAnimationFrame(fn) {
+ let animationId = null;
+ let argsToPass = null;
+ return function (...args) {
+ argsToPass = args;
+ if (animationId !== null) {
+ return;
}
- }
- _nodeIsExpandable(item) {
- return this.props.isExpandable ? this.props.isExpandable(item) : !!this.props.getChildren(item).length;
- }
+ animationId = requestAnimationFrame(() => {
+ fn.call(this, ...argsToPass);
+ animationId = null;
+ argsToPass = null;
+ });
+ };
+}
- render() {
- const traversal = this._dfsFromRoots();
- const { focused } = this.props;
+/**
+ * A generic tree component. See propTypes for the public API.
+ *
+ * This tree component doesn't make any assumptions about the structure of your
+ * tree data. Whether children are computed on demand, or stored in an array in
+ * the parent's `_children` property, it doesn't matter. We only require the
+ * implementation of `getChildren`, `getRoots`, `getParent`, and `isExpanded`
+ * functions.
+ *
+ * This tree component is well tested and reliable. See the tests in ./tests
+ * and its usage in the performance and memory panels in mozilla-central.
+ *
+ * This tree component doesn't make any assumptions about how to render items in
+ * the tree. You provide a `renderItem` function, and this component will ensure
+ * that only those items whose parents are expanded and which are visible in the
+ * viewport are rendered. The `renderItem` function could render the items as a
+ * "traditional" tree or as rows in a table or anything else. It doesn't
+ * restrict you to only one certain kind of tree.
+ *
+ * The tree comes with basic styling for the indent, the arrow, as well as
+ * hovered and focused styles which can be override in CSS.
+ *
+ * ### Example Usage
+ *
+ * Suppose we have some tree data where each item has this form:
+ *
+ * {
+ * id: Number,
+ * label: String,
+ * parent: Item or null,
+ * children: Array of child items,
+ * expanded: bool,
+ * }
+ *
+ * Here is how we could render that data with this component:
+ *
+ * class MyTree extends Component {
+ * static get propTypes() {
+ * // The root item of the tree, with the form described above.
+ * return {
+ * root: PropTypes.object.isRequired
+ * };
+ * },
+ *
+ * render() {
+ * return Tree({
+ * itemHeight: 20, // px
+ *
+ * getRoots: () => [this.props.root],
+ *
+ * getParent: item => item.parent,
+ * getChildren: item => item.children,
+ * getKey: item => item.id,
+ * isExpanded: item => item.expanded,
+ *
+ * renderItem: (item, depth, isFocused, arrow, isExpanded) => {
+ * let className = "my-tree-item";
+ * if (isFocused) {
+ * className += " focused";
+ * }
+ * return dom.div({
+ * className,
+ * },
+ * arrow,
+ * // And here is the label for this item.
+ * dom.span({ className: "my-tree-item-label" }, item.label)
+ * );
+ * },
+ *
+ * onExpand: item => dispatchExpandActionToRedux(item),
+ * onCollapse: item => dispatchCollapseActionToRedux(item),
+ * });
+ * }
+ * }
+ */
+class Tree extends Component {
+ static get propTypes() {
+ return {
+ // Required props
- const nodes = traversal.map((v, i) => {
- const { item, depth } = traversal[i];
- const key = this.props.getKey(item, i);
- return TreeNodeFactory({
- key,
- id: key,
- index: i,
- item,
- depth,
- renderItem: this.props.renderItem,
- focused: focused === item,
- expanded: this.props.isExpanded(item),
- isExpandable: this._nodeIsExpandable(item),
- onExpand: this._onExpand,
- onCollapse: this._onCollapse,
- onClick: e => {
- // We can stop the propagation since click handler on the node can be
- // created in `renderItem`.
- e.stopPropagation();
+ // A function to get an item's parent, or null if it is a root.
+ //
+ // Type: getParent(item: Item) -> Maybe-
+ //
+ // Example:
+ //
+ // // The parent of this item is stored in its `parent` property.
+ // getParent: item => item.parent
+ getParent: _propTypes2.default.func.isRequired,
- // Since the user just clicked the node, there's no need to check if
- // it should be scrolled into view.
- this._focus(item, { preventAutoScroll: true });
- if (this.props.isExpanded(item)) {
- this.props.onCollapse(item, e.altKey);
- } else {
- this.props.onExpand(item, e.altKey);
- }
- }
- });
- });
+ // A function to get an item's children.
+ //
+ // Type: getChildren(item: Item) -> [Item]
+ //
+ // Example:
+ //
+ // // This item's children are stored in its `children` property.
+ // getChildren: item => item.children
+ getChildren: _propTypes2.default.func.isRequired,
- const style = Object.assign({}, this.props.style || {});
-
- return _reactDomFactories2.default.div({
- className: `tree ${this.props.className ? this.props.className : ""}`,
- ref: el => {
- this.treeRef = el;
- },
- role: "tree",
- tabIndex: "0",
- onKeyDown: this._onKeyDown,
- onKeyPress: this._preventArrowKeyScrolling,
- onKeyUp: this._preventArrowKeyScrolling,
- onFocus: ({ nativeEvent }) => {
- if (focused || !nativeEvent || !this.treeRef) {
- return;
- }
-
- const { explicitOriginalTarget } = nativeEvent;
- // Only set default focus to the first tree node if the focus came
- // from outside the tree (e.g. by tabbing to the tree from other
- // external elements).
- if (explicitOriginalTarget !== this.treeRef && !this.treeRef.contains(explicitOriginalTarget)) {
- this._focus(traversal[0].item);
- }
- },
- onBlur: this._onBlur,
- "aria-label": this.props.label,
- "aria-labelledby": this.props.labelledby,
- "aria-activedescendant": focused && this.props.getKey(focused),
- style
- }, nodes);
- }
-}
-
-exports.default = Tree;
+ // A function which takes an item and ArrowExpander component instance and
+ // returns a component, or text, or anything else that React considers
+ // renderable.
+ //
+ // Type: renderItem(item: Item,
+ // depth: Number,
+ // isFocused: Boolean,
+ // arrow: ReactComponent,
+ // isExpanded: Boolean) -> ReactRenderable
+ //
+ // Example:
+ //
+ // renderItem: (item, depth, isFocused, arrow, isExpanded) => {
+ // let className = "my-tree-item";
+ // if (isFocused) {
+ // className += " focused";
+ // }
+ // return dom.div(
+ // {
+ // className,
+ // style: { marginLeft: depth * 10 + "px" }
+ // },
+ // arrow,
+ // dom.span({ className: "my-tree-item-label" }, item.label)
+ // );
+ // },
+ renderItem: _propTypes2.default.func.isRequired,
-/***/ }),
+ // A function which returns the roots of the tree (forest).
+ //
+ // Type: getRoots() -> [Item]
+ //
+ // Example:
+ //
+ // // In this case, we only have one top level, root item. You could
+ // // return multiple items if you have many top level items in your
+ // // tree.
+ // getRoots: () => [this.props.rootOfMyTree]
+ getRoots: _propTypes2.default.func.isRequired,
-/***/ 3671:
-/***/ (function(module, exports) {
+ // A function to get a unique key for the given item. This helps speed up
+ // React's rendering a *TON*.
+ //
+ // Type: getKey(item: Item) -> String
+ //
+ // Example:
+ //
+ // getKey: item => `my-tree-item-${item.uniqueId}`
+ getKey: _propTypes2.default.func.isRequired,
-// removed by extract-text-webpack-plugin
+ // A function to get whether an item is expanded or not. If an item is not
+ // expanded, then it must be collapsed.
+ //
+ // Type: isExpanded(item: Item) -> Boolean
+ //
+ // Example:
+ //
+ // isExpanded: item => item.expanded,
+ isExpanded: _propTypes2.default.func.isRequired,
-/***/ }),
+ // Optional props
-/***/ 3721:
-/***/ (function(module, exports, __webpack_require__) {
+ // The currently focused item, if any such item exists.
+ focused: _propTypes2.default.any,
-"use strict";
-/* WEBPACK VAR INJECTION */(function(process) {
+ // Handle when a new item is focused.
+ onFocus: _propTypes2.default.func,
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at
. */
+ // The depth to which we should automatically expand new items.
+ autoExpandDepth: _propTypes2.default.number,
+ // Should auto expand all new items or just the new items under the first
+ // root item.
+ autoExpandAll: _propTypes2.default.bool,
-const flag = __webpack_require__(52);
+ // Auto expand a node only if number of its children
+ // are less than autoExpandNodeChildrenLimit
+ autoExpandNodeChildrenLimit: _propTypes2.default.number,
-function isBrowser() {
- return typeof window == "object";
-}
+ // Note: the two properties below are mutually exclusive. Only one of the
+ // label properties is necessary.
+ // ID of an element whose textual content serves as an accessible label
+ // for a tree.
+ labelledby: _propTypes2.default.string,
+ // Accessibility label for a tree widget.
+ label: _propTypes2.default.string,
-function isNode() {
- return process && process.release && process.release.name == 'node';
-}
+ // Optional event handlers for when items are expanded or collapsed.
+ // Useful for dispatching redux events and updating application state,
+ // maybe lazily loading subtrees from a worker, etc.
+ //
+ // Type:
+ // onExpand(item: Item)
+ // onCollapse(item: Item)
+ //
+ // Example:
+ //
+ // onExpand: item => dispatchExpandActionToRedux(item)
+ onExpand: _propTypes2.default.func,
+ onCollapse: _propTypes2.default.func,
+ // Optional event handler called with the current focused node when the
+ // Enter key is pressed. Can be useful to allow further keyboard actions
+ // within the tree node.
+ onActivate: _propTypes2.default.func,
+ isExpandable: _propTypes2.default.func,
+ // Additional classes to add to the root element.
+ className: _propTypes2.default.string,
+ // style object to be applied to the root element.
+ style: _propTypes2.default.object,
+ // Prevents blur when Tree loses focus
+ preventBlur: _propTypes2.default.bool
+ };
+ }
-function isDevelopment() {
- if (!isNode() && isBrowser()) {
- const href = window.location ? window.location.href : "";
- return href.match(/^file:/) || href.match(/localhost:/);
+ static get defaultProps() {
+ return {
+ autoExpandDepth: AUTO_EXPAND_DEPTH,
+ autoExpandAll: true
+ };
}
- return "production" != "production";
-}
+ constructor(props) {
+ super(props);
-function isTesting() {
- return flag.testing;
-}
+ this.state = {
+ seen: new Set()
+ };
-function isFirefoxPanel() {
- return !isDevelopment();
-}
+ this._onExpand = oncePerAnimationFrame(this._onExpand).bind(this);
+ this._onCollapse = oncePerAnimationFrame(this._onCollapse).bind(this);
+ this._focusPrevNode = oncePerAnimationFrame(this._focusPrevNode).bind(this);
+ this._focusNextNode = oncePerAnimationFrame(this._focusNextNode).bind(this);
+ this._focusParentNode = oncePerAnimationFrame(this._focusParentNode).bind(this);
+ this._focusFirstNode = oncePerAnimationFrame(this._focusFirstNode).bind(this);
+ this._focusLastNode = oncePerAnimationFrame(this._focusLastNode).bind(this);
-function isFirefox() {
- return (/firefox/i.test(navigator.userAgent)
- );
-}
+ this._autoExpand = this._autoExpand.bind(this);
+ this._preventArrowKeyScrolling = this._preventArrowKeyScrolling.bind(this);
+ this._dfs = this._dfs.bind(this);
+ this._dfsFromRoots = this._dfsFromRoots.bind(this);
+ this._focus = this._focus.bind(this);
+ this._scrollNodeIntoView = this._scrollNodeIntoView.bind(this);
+ this._onBlur = this._onBlur.bind(this);
+ this._onKeyDown = this._onKeyDown.bind(this);
+ this._nodeIsExpandable = this._nodeIsExpandable.bind(this);
+ this._activateNode = oncePerAnimationFrame(this._activateNode).bind(this);
+ }
-module.exports = {
- isDevelopment,
- isTesting,
- isFirefoxPanel,
- isFirefox
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(120)))
+ componentDidMount() {
+ this._autoExpand();
+ if (this.props.focused) {
+ this._scrollNodeIntoView(this.props.focused);
+ // Always keep the focus on the tree itself.
+ this.treeRef.focus();
+ }
+ }
-/***/ }),
+ componentWillReceiveProps(nextProps) {
+ this._autoExpand();
+ }
-/***/ 3728:
-/***/ (function(module, exports, __webpack_require__) {
+ componentDidUpdate(prevProps, prevState) {
+ if (this.props.focused && prevProps.focused !== this.props.focused) {
+ this._scrollNodeIntoView(this.props.focused);
+ // Always keep the focus on the tree itself.
+ this.treeRef.focus();
+ }
+ }
-module.exports = __webpack_require__(3729);
+ _autoExpand() {
+ const { autoExpandDepth, autoExpandNodeChildrenLimit } = this.props;
+ if (!autoExpandDepth) {
+ return;
+ }
+ // Automatically expand the first autoExpandDepth levels for new items. Do
+ // not use the usual DFS infrastructure because we don't want to ignore
+ // collapsed nodes.
+ const autoExpand = (item, currentDepth) => {
+ if (currentDepth >= autoExpandDepth || this.state.seen.has(item)) {
+ return;
+ }
-/***/ }),
+ const children = this.props.getChildren(item);
+ if (autoExpandNodeChildrenLimit && children.length > autoExpandNodeChildrenLimit) {
+ return;
+ }
-/***/ 3729:
-/***/ (function(module, exports, __webpack_require__) {
+ this.props.onExpand(item);
+ this.state.seen.add(item);
-"use strict";
+ const length = children.length;
+ for (let i = 0; i < length; i++) {
+ autoExpand(children[i], currentDepth + 1);
+ }
+ };
+ const roots = this.props.getRoots();
+ const length = roots.length;
+ if (this.props.autoExpandAll) {
+ for (let i = 0; i < length; i++) {
+ autoExpand(roots[i], 0);
+ }
+ } else if (length != 0) {
+ autoExpand(roots[0], 0);
+ }
+ }
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.vendored = undefined;
-
-var _devtoolsComponents = __webpack_require__(3669);
-
-var devtoolsComponents = _interopRequireWildcard(_devtoolsComponents);
-
-var _devtoolsConfig = __webpack_require__(1355);
+ _preventArrowKeyScrolling(e) {
+ switch (e.key) {
+ case "ArrowUp":
+ case "ArrowDown":
+ case "ArrowLeft":
+ case "ArrowRight":
+ e.preventDefault();
+ e.stopPropagation();
+ if (e.nativeEvent) {
+ if (e.nativeEvent.preventDefault) {
+ e.nativeEvent.preventDefault();
+ }
+ if (e.nativeEvent.stopPropagation) {
+ e.nativeEvent.stopPropagation();
+ }
+ }
+ }
+ }
-var devtoolsConfig = _interopRequireWildcard(_devtoolsConfig);
+ /**
+ * Perform a pre-order depth-first search from item.
+ */
+ _dfs(item, maxDepth = Infinity, traversal = [], _depth = 0) {
+ traversal.push({ item, depth: _depth });
-var _devtoolsContextmenu = __webpack_require__(1413);
+ if (!this.props.isExpanded(item)) {
+ return traversal;
+ }
-var devtoolsContextmenu = _interopRequireWildcard(_devtoolsContextmenu);
+ const nextDepth = _depth + 1;
-var _devtoolsEnvironment = __webpack_require__(3721);
+ if (nextDepth > maxDepth) {
+ return traversal;
+ }
-var devtoolsEnvironment = _interopRequireWildcard(_devtoolsEnvironment);
+ const children = this.props.getChildren(item);
+ const length = children.length;
+ for (let i = 0; i < length; i++) {
+ this._dfs(children[i], maxDepth, traversal, nextDepth);
+ }
-var _devtoolsModules = __webpack_require__(1376);
+ return traversal;
+ }
-var devtoolsModules = _interopRequireWildcard(_devtoolsModules);
+ /**
+ * Perform a pre-order depth-first search over the whole forest.
+ */
+ _dfsFromRoots(maxDepth = Infinity) {
+ const traversal = [];
-var _devtoolsUtils = __webpack_require__(3651);
+ const roots = this.props.getRoots();
+ const length = roots.length;
+ for (let i = 0; i < length; i++) {
+ this._dfs(roots[i], maxDepth, traversal);
+ }
-var devtoolsUtils = _interopRequireWildcard(_devtoolsUtils);
+ return traversal;
+ }
-var _fuzzaldrinPlus = __webpack_require__(161);
+ /**
+ * Expands current row.
+ *
+ * @param {Object} item
+ * @param {Boolean} expandAllChildren
+ */
+ _onExpand(item, expandAllChildren) {
+ if (this.props.onExpand) {
+ this.props.onExpand(item);
-var fuzzaldrinPlus = _interopRequireWildcard(_fuzzaldrinPlus);
+ if (expandAllChildren) {
+ const children = this._dfs(item);
+ const length = children.length;
+ for (let i = 0; i < length; i++) {
+ this.props.onExpand(children[i].item);
+ }
+ }
+ }
+ }
-var _Transition = __webpack_require__(333);
+ /**
+ * Collapses current row.
+ *
+ * @param {Object} item
+ */
+ _onCollapse(item) {
+ if (this.props.onCollapse) {
+ this.props.onCollapse(item);
+ }
+ }
-var transition = _interopRequireWildcard(_Transition);
+ /**
+ * Sets the passed in item to be the focused item.
+ *
+ * @param {Object|undefined} item
+ * The item to be focused, or undefined to focus no item.
+ *
+ * @param {Object|undefined} options
+ * An options object which can contain:
+ * - dir: "up" or "down" to indicate if we should scroll the element
+ * to the top or the bottom of the scrollable container when
+ * the element is off canvas.
+ */
+ _focus(item, options = {}) {
+ const { preventAutoScroll } = options;
+ if (item && !preventAutoScroll) {
+ this._scrollNodeIntoView(item, options);
+ }
+ if (this.props.onFocus) {
+ this.props.onFocus(item);
+ }
+ }
-var _tabs = __webpack_require__(3762);
+ /**
+ * Sets the passed in item to be the focused item.
+ *
+ * @param {Object|undefined} item
+ * The item to be scrolled to.
+ *
+ * @param {Object|undefined} options
+ * An options object which can contain:
+ * - dir: "up" or "down" to indicate if we should scroll the element
+ * to the top or the bottom of the scrollable container when
+ * the element is off canvas.
+ */
+ _scrollNodeIntoView(item, options = {}) {
+ if (item !== undefined) {
+ const treeElement = this.treeRef;
+ const element = document.getElementById(this.props.getKey(item));
-var reactAriaComponentsTabs = _interopRequireWildcard(_tabs);
+ if (element) {
+ const { top, bottom } = element.getBoundingClientRect();
+ const closestScrolledParent = node => {
+ if (node == null) {
+ return null;
+ }
-var _reselect = __webpack_require__(3791);
+ if (node.scrollHeight > node.clientHeight) {
+ return node;
+ }
+ return closestScrolledParent(node.parentNode);
+ };
+ const scrolledParent = closestScrolledParent(treeElement);
+ const scrolledParentRect = scrolledParent ? scrolledParent.getBoundingClientRect() : null;
+ const isVisible = !scrolledParent || top >= scrolledParentRect.top && bottom <= scrolledParentRect.bottom;
-var reselect = _interopRequireWildcard(_reselect);
+ if (!isVisible) {
+ const { alignTo } = options;
+ const scrollToTop = alignTo ? alignTo === "top" : !scrolledParentRect || top < scrolledParentRect.top;
+ element.scrollIntoView(scrollToTop);
+ }
+ }
+ }
+ }
-var _classnames = __webpack_require__(175);
+ /**
+ * Sets the state to have no focused item.
+ */
+ _onBlur() {
+ if (!this.props.preventBlur) {
+ this._focus(undefined);
+ }
+ }
-var _classnames2 = _interopRequireDefault(_classnames);
+ /**
+ * Handles key down events in the tree's container.
+ *
+ * @param {Event} e
+ */
+ _onKeyDown(e) {
+ if (this.props.focused == null) {
+ return;
+ }
-var _devtoolsSplitter = __webpack_require__(3802);
+ // Allow parent nodes to use navigation arrows with modifiers.
+ if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {
+ return;
+ }
-var _devtoolsSplitter2 = _interopRequireDefault(_devtoolsSplitter);
+ this._preventArrowKeyScrolling(e);
-var _lodashMove = __webpack_require__(3751);
+ switch (e.key) {
+ case "ArrowUp":
+ this._focusPrevNode();
+ return;
-var _lodashMove2 = _interopRequireDefault(_lodashMove);
+ case "ArrowDown":
+ this._focusNextNode();
+ return;
-var _Svg = __webpack_require__(1359);
+ case "ArrowLeft":
+ if (this.props.isExpanded(this.props.focused) && this._nodeIsExpandable(this.props.focused)) {
+ this._onCollapse(this.props.focused);
+ } else {
+ this._focusParentNode();
+ }
+ return;
-var _Svg2 = _interopRequireDefault(_Svg);
+ case "ArrowRight":
+ if (this._nodeIsExpandable(this.props.focused) && !this.props.isExpanded(this.props.focused)) {
+ this._onExpand(this.props.focused);
+ } else {
+ this._focusNextNode();
+ }
+ return;
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+ case "Home":
+ this._focusFirstNode();
+ return;
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+ case "End":
+ this._focusLastNode();
+ return;
-// We cannot directly export literals containing special characters
-// (eg. "my-module/Test") which is why they are nested in "vendored".
-// The keys of the vendored object should match the module names
-// !!! Should remain synchronized with .babel/transform-mc.js !!!
+ case "Enter":
+ this._activateNode();
+ }
+ }
+ /**
+ * Sets the previous node relative to the currently focused item, to focused.
+ */
+ _focusPrevNode() {
+ // Start a depth first search and keep going until we reach the currently
+ // focused node. Focus the previous node in the DFS, if it exists. If it
+ // doesn't exist, we're at the first node already.
-// Modules imported without destructuring
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ let prev;
-/**
- * Vendors.js is a file used to bundle and expose all dependencies needed to run
- * the transpiled debugger modules when running in Firefox.
- *
- * To make transpilation easier, a vendored module should always be imported in
- * same way:
- * - always with destructuring (import { a } from "modA";)
- * - always without destructuring (import modB from "modB")
- *
- * Both are fine, but cannot be mixed for the same module.
- */
-
-// Modules imported with destructuring
-const vendored = exports.vendored = {
- classnames: _classnames2.default,
- "devtools-components": devtoolsComponents,
- "devtools-config": devtoolsConfig,
- "devtools-contextmenu": devtoolsContextmenu,
- "devtools-environment": devtoolsEnvironment,
- "devtools-modules": devtoolsModules,
- "devtools-splitter": _devtoolsSplitter2.default,
- "devtools-utils": devtoolsUtils,
- "fuzzaldrin-plus": fuzzaldrinPlus,
- "lodash-move": _lodashMove2.default,
- "react-aria-components/src/tabs": reactAriaComponentsTabs,
- "react-transition-group/Transition": transition,
- reselect,
- // Svg is required via relative paths, so the key is not imported path.
- // See .babel/transform-mc.js
- Svg: _Svg2.default
-};
-
-/***/ }),
-
-/***/ 3750:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-
-/**
- * This is a stub of the DevTools telemetry module and will be replaced by the
- * full version of the file by Webpack for running inside Firefox.
- */
+ const traversal = this._dfsFromRoots();
+ const length = traversal.length;
+ for (let i = 0; i < length; i++) {
+ const item = traversal[i].item;
+ if (item === this.props.focused) {
+ break;
+ }
+ prev = item;
+ }
+ if (prev === undefined) {
+ return;
+ }
-class Telemetry {
- /**
- * Time since the system wide epoch. This is not a monotonic timer but
- * can be used across process boundaries.
- */
- get msSystemNow() {
- return 0;
+ this._focus(prev, { alignTo: "top" });
}
/**
- * Starts a timer associated with a telemetry histogram. The timer can be
- * directly associated with a histogram, or with a pair of a histogram and
- * an object.
- *
- * @param {String} histogramId
- * A string which must be a valid histogram name.
- * @param {Object} obj
- * Optional parameter. If specified, the timer is associated with this
- * object, meaning that multiple timers for the same histogram may be
- * run concurrently, as long as they are associated with different
- * objects.
- *
- * @returns {Boolean}
- * True if the timer was successfully started, false otherwise. If a
- * timer already exists, it can't be started again, and the existing
- * one will be cleared in order to avoid measurements errors.
+ * Handles the down arrow key which will focus either the next child
+ * or sibling row.
*/
- start(histogramId, obj) {
- return true;
+ _focusNextNode() {
+ // Start a depth first search and keep going until we reach the currently
+ // focused node. Focus the next node in the DFS, if it exists. If it
+ // doesn't exist, we're at the last node already.
+ const traversal = this._dfsFromRoots();
+ const length = traversal.length;
+ let i = 0;
+
+ while (i < length) {
+ if (traversal[i].item === this.props.focused) {
+ break;
+ }
+ i++;
+ }
+
+ if (i + 1 < traversal.length) {
+ this._focus(traversal[i + 1].item, { alignTo: "bottom" });
+ }
}
/**
- * Starts a timer associated with a keyed telemetry histogram. The timer can
- * be directly associated with a histogram and its key. Similarly to
- * TelemetryStopwatch.start the histogram and its key can be associated
- * with an object. Each key may have multiple associated objects and each
- * object can be associated with multiple keys.
- *
- * @param {String} histogramId
- * A string which must be a valid histogram name.
- * @param {String} key
- * A string which must be a valid histgram key.
- * @param {Object} obj
- * Optional parameter. If specified, the timer is associated with this
- * object, meaning that multiple timers for the same histogram may be
- * run concurrently,as long as they are associated with different
- * objects.
- *
- * @returns {Boolean}
- * True if the timer was successfully started, false otherwise. If a
- * timer already exists, it can't be started again, and the existing
- * one will be cleared in order to avoid measurements errors.
+ * Handles the left arrow key, going back up to the current rows'
+ * parent row.
*/
- startKeyed(histogramId, key, obj) {
- return true;
+ _focusParentNode() {
+ const parent = this.props.getParent(this.props.focused);
+ if (!parent) {
+ this._focusPrevNode(this.props.focused);
+ return;
+ }
+
+ this._focus(parent, { alignTo: "top" });
}
- /**
- * Stops the timer associated with the given histogram (and object),
- * calculates the time delta between start and finish, and adds the value
- * to the histogram.
- *
- * @param {String} histogramId
- * A string which must be a valid histogram name.
- * @param {Object} obj
- * Optional parameter which associates the histogram timer with the
- * given object.
- * @param {Boolean} canceledOkay
- * Optional parameter which will suppress any warnings that normally
- * fire when a stopwatch is finished after being cancelled.
- * Defaults to false.
- *
- * @returns {Boolean}
- * True if the timer was succesfully stopped and the data was added
- * to the histogram, False otherwise.
- */
- finish(histogramId, obj, canceledOkay) {
- return true;
+ _focusFirstNode() {
+ const traversal = this._dfsFromRoots();
+ this._focus(traversal[0].item, { alignTo: "top" });
}
- /**
- * Stops the timer associated with the given keyed histogram (and object),
- * calculates the time delta between start and finish, and adds the value
- * to the keyed histogram.
- *
- * @param {String} histogramId
- * A string which must be a valid histogram name.
- * @param {String} key
- * A string which must be a valid histogram key.
- * @param {Object} obj
- * Optional parameter which associates the histogram timer with the
- * given object.
- * @param {Boolean} canceledOkay
- * Optional parameter which will suppress any warnings that normally
- * fire when a stopwatch is finished after being cancelled.
- * Defaults to false.
- *
- * @returns {Boolean}
- * True if the timer was succesfully stopped and the data was added
- * to the histogram, False otherwise.
- */
- finishKeyed(histogramId, key, obj, cancelledOkay) {
- return true;
+ _focusLastNode() {
+ const traversal = this._dfsFromRoots();
+ const lastIndex = traversal.length - 1;
+ this._focus(traversal[lastIndex].item, { alignTo: "bottom" });
}
- /**
- * Log a value to a histogram.
- *
- * @param {String} histogramId
- * Histogram in which the data is to be stored.
- */
- getHistogramById(histogramId) {
- return {
- add: () => {}
- };
+ _activateNode() {
+ if (this.props.onActivate) {
+ this.props.onActivate(this.props.focused);
+ }
}
- /**
- * Get a keyed histogram.
- *
- * @param {String} histogramId
- * Histogram in which the data is to be stored.
- */
- getKeyedHistogramById(histogramId) {
- return {
- add: () => {}
- };
+ _nodeIsExpandable(item) {
+ return this.props.isExpandable ? this.props.isExpandable(item) : !!this.props.getChildren(item).length;
}
- /**
- * Log a value to a scalar.
- *
- * @param {String} scalarId
- * Scalar in which the data is to be stored.
- * @param value
- * Value to store.
- */
- scalarSet(scalarId, value) {}
+ render() {
+ const traversal = this._dfsFromRoots();
+ const { focused } = this.props;
- /**
- * Log a value to a count scalar.
- *
- * @param {String} scalarId
- * Scalar in which the data is to be stored.
- * @param value
- * Value to store.
- */
- scalarAdd(scalarId, value) {}
+ const nodes = traversal.map((v, i) => {
+ const { item, depth } = traversal[i];
+ const key = this.props.getKey(item, i);
+ return TreeNodeFactory({
+ key,
+ id: key,
+ index: i,
+ item,
+ depth,
+ renderItem: this.props.renderItem,
+ focused: focused === item,
+ expanded: this.props.isExpanded(item),
+ isExpandable: this._nodeIsExpandable(item),
+ onExpand: this._onExpand,
+ onCollapse: this._onCollapse,
+ onClick: e => {
+ // We can stop the propagation since click handler on the node can be
+ // created in `renderItem`.
+ e.stopPropagation();
- /**
- * Log a value to a keyed count scalar.
- *
- * @param {String} scalarId
- * Scalar in which the data is to be stored.
- * @param {String} key
- * The key within the scalar.
- * @param value
- * Value to store.
- */
- keyedScalarAdd(scalarId, key, value) {}
-
- /**
- * Event telemetry is disabled by default. Use this method to enable it for
- * a particular category.
- *
- * @param {Boolean} enabled
- * Enabled: true or false.
- */
- setEventRecordingEnabled(enabled) {
- return enabled;
- }
-
- /**
- * Telemetry events often need to make use of a number of properties from
- * completely different codepaths. To make this possible we create a
- * "pending event" along with an array of property names that we need to wait
- * for before sending the event.
- *
- * As each property is received via addEventProperty() we check if all
- * properties have been received. Once they have all been received we send the
- * telemetry event.
- *
- * @param {Object} obj
- * The telemetry event or ping is associated with this object, meaning
- * that multiple events or pings for the same histogram may be run
- * concurrently, as long as they are associated with different objects.
- * @param {String} method
- * The telemetry event method (describes the type of event that
- * occurred e.g. "open")
- * @param {String} object
- * The telemetry event object name (the name of the object the event
- * occurred on) e.g. "tools" or "setting"
- * @param {String|null} value
- * The telemetry event value (a user defined value, providing context
- * for the event) e.g. "console"
- * @param {Array} expected
- * An array of the properties needed before sending the telemetry
- * event e.g.
- * [
- * "host",
- * "width"
- * ]
- */
- preparePendingEvent(obj, method, object, value, expected = []) {}
+ // Since the user just clicked the node, there's no need to check if
+ // it should be scrolled into view.
+ this._focus(item, { preventAutoScroll: true });
+ if (this.props.isExpanded(item)) {
+ this.props.onCollapse(item, e.altKey);
+ } else {
+ this.props.onExpand(item, e.altKey);
+ }
+ }
+ });
+ });
- /**
- * Adds an expected property for either a current or future pending event.
- * This means that if preparePendingEvent() is called before or after sending
- * the event properties they will automatically added to the event.
- *
- * @param {Object} obj
- * The telemetry event or ping is associated with this object, meaning
- * that multiple events or pings for the same histogram may be run
- * concurrently, as long as they are associated with different objects.
- * @param {String} method
- * The telemetry event method (describes the type of event that
- * occurred e.g. "open")
- * @param {String} object
- * The telemetry event object name (the name of the object the event
- * occurred on) e.g. "tools" or "setting"
- * @param {String|null} value
- * The telemetry event value (a user defined value, providing context
- * for the event) e.g. "console"
- * @param {String} pendingPropName
- * The pending property name
- * @param {String} pendingPropValue
- * The pending property value
- */
- addEventProperty(obj, method, object, value, pendingPropName, pendingPropValue) {}
+ const style = Object.assign({}, this.props.style || {});
- /**
- * Adds expected properties for either a current or future pending event.
- * This means that if preparePendingEvent() is called before or after sending
- * the event properties they will automatically added to the event.
- *
- * @param {Object} obj
- * The telemetry event or ping is associated with this object, meaning
- * that multiple events or pings for the same histogram may be run
- * concurrently, as long as they are associated with different objects.
- * @param {String} method
- * The telemetry event method (describes the type of event that
- * occurred e.g. "open")
- * @param {String} object
- * The telemetry event object name (the name of the object the event
- * occurred on) e.g. "tools" or "setting"
- * @param {String|null} value
- * The telemetry event value (a user defined value, providing context
- * for the event) e.g. "console"
- * @param {String} pendingObject
- * An object containing key, value pairs that should be added to the
- * event as properties.
- */
- addEventProperties(obj, method, object, value, pendingObject) {}
+ return _reactDomFactories2.default.div({
+ className: `tree ${this.props.className ? this.props.className : ""}`,
+ ref: el => {
+ this.treeRef = el;
+ },
+ role: "tree",
+ tabIndex: "0",
+ onKeyDown: this._onKeyDown,
+ onKeyPress: this._preventArrowKeyScrolling,
+ onKeyUp: this._preventArrowKeyScrolling,
+ onFocus: ({ nativeEvent }) => {
+ if (focused || !nativeEvent || !this.treeRef) {
+ return;
+ }
- /**
- * A private method that is not to be used externally. This method is used to
- * prepare a pending telemetry event for sending and then send it via
- * recordEvent().
- *
- * @param {Object} obj
- * The telemetry event or ping is associated with this object, meaning
- * that multiple events or pings for the same histogram may be run
- * concurrently, as long as they are associated with different objects.
- * @param {String} method
- * The telemetry event method (describes the type of event that
- * occurred e.g. "open")
- * @param {String} object
- * The telemetry event object name (the name of the object the event
- * occurred on) e.g. "tools" or "setting"
- * @param {String|null} value
- * The telemetry event value (a user defined value, providing context
- * for the event) e.g. "console"
- */
- _sendPendingEvent(obj, method, object, value) {}
+ const { explicitOriginalTarget } = nativeEvent;
+ // Only set default focus to the first tree node if the focus came
+ // from outside the tree (e.g. by tabbing to the tree from other
+ // external elements).
+ if (explicitOriginalTarget !== this.treeRef && !this.treeRef.contains(explicitOriginalTarget)) {
+ this._focus(traversal[0].item);
+ }
+ },
+ onBlur: this._onBlur,
+ "aria-label": this.props.label,
+ "aria-labelledby": this.props.labelledby,
+ "aria-activedescendant": focused && this.props.getKey(focused),
+ style
+ }, nodes);
+ }
+}
- /**
- * Send a telemetry event.
- *
- * @param {String} method
- * The telemetry event method (describes the type of event that
- * occurred e.g. "open")
- * @param {String} object
- * The telemetry event object name (the name of the object the event
- * occurred on) e.g. "tools" or "setting"
- * @param {String|null} value
- * The telemetry event value (a user defined value, providing context
- * for the event) e.g. "console"
- * @param {Object} extra
- * The telemetry event extra object containing the properties that will
- * be sent with the event e.g.
- * {
- * host: "bottom",
- * width: "1024"
- * }
- */
- recordEvent(method, object, value, extra) {}
+exports.default = Tree;
- /**
- * Sends telemetry pings to indicate that a tool has been opened.
- *
- * @param {String} id
- * The ID of the tool opened.
- * @param {String} sessionId
- * Toolbox session id used when we need to ensure a tool really has a
- * timer before calculating a delta.
- * @param {Object} obj
- * The telemetry event or ping is associated with this object, meaning
- * that multiple events or pings for the same histogram may be run
- * concurrently, as long as they are associated with different objects.
- */
- toolOpened(id, sessionId, obj) {}
+/***/ }),
- /**
- * Sends telemetry pings to indicate that a tool has been closed.
- *
- * @param {String} id
- * The ID of the tool opened.
- */
- toolClosed(id, sessionId, obj) {}
-}
+/***/ 3671:
+/***/ (function(module, exports) {
-module.exports = Telemetry;
+// removed by extract-text-webpack-plugin
/***/ }),
-/***/ 3751:
+/***/ 3721:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
+/* WEBPACK VAR INJECTION */(function(process) {
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = move;
+const flag = __webpack_require__(52);
-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+function isBrowser() {
+ return typeof window == "object";
+}
-function move(array, moveIndex, toIndex) {
- /* #move - Moves an array item from one position in an array to another.
- Note: This is a pure function so a new array will be returned, instead
- of altering the array argument.
- Arguments:
- 1. array (String) : Array in which to move an item. (required)
- 2. moveIndex (Object) : The index of the item to move. (required)
- 3. toIndex (Object) : The index to move item at moveIndex to. (required)
- */
- var item = array[moveIndex];
- var length = array.length;
- var diff = moveIndex - toIndex;
+function isNode() {
+ return process && process.release && process.release.name == 'node';
+}
- if (diff > 0) {
- // move left
- return [].concat(_toConsumableArray(array.slice(0, toIndex)), [item], _toConsumableArray(array.slice(toIndex, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, length)));
- } else if (diff < 0) {
- // move right
- return [].concat(_toConsumableArray(array.slice(0, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, toIndex + 1)), [item], _toConsumableArray(array.slice(toIndex + 1, length)));
+function isDevelopment() {
+ if (!isNode() && isBrowser()) {
+ const href = window.location ? window.location.href : "";
+ return href.match(/^file:/) || href.match(/localhost:/);
}
- return array;
+
+ return "production" != "production";
}
-/***/ }),
+function isTesting() {
+ return flag.testing;
+}
-/***/ 3758:
+function isFirefoxPanel() {
+ return !isDevelopment();
+}
+
+function isFirefox() {
+ return (/firefox/i.test(navigator.userAgent)
+ );
+}
+
+module.exports = {
+ isDevelopment,
+ isTesting,
+ isFirefoxPanel,
+ isFirefox
+};
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(120)))
+
+/***/ }),
+
+/***/ 3728:
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(3729);
+
+
+/***/ }),
+
+/***/ 3729:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -5628,354 +5700,493 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
+exports.vendored = undefined;
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+var _devtoolsComponents = __webpack_require__(3669);
-var _propTypes = __webpack_require__(3642);
+var devtoolsComponents = _interopRequireWildcard(_devtoolsComponents);
-var _propTypes2 = _interopRequireDefault(_propTypes);
+var _devtoolsConfig = __webpack_require__(1355);
-var _react = __webpack_require__(0);
+var devtoolsConfig = _interopRequireWildcard(_devtoolsConfig);
-var _react2 = _interopRequireDefault(_react);
+var _devtoolsContextmenu = __webpack_require__(1413);
-var _tab = __webpack_require__(3759);
+var devtoolsContextmenu = _interopRequireWildcard(_devtoolsContextmenu);
-var _tab2 = _interopRequireDefault(_tab);
+var _devtoolsEnvironment = __webpack_require__(3721);
-var _tabList = __webpack_require__(3764);
+var devtoolsEnvironment = _interopRequireWildcard(_devtoolsEnvironment);
-var _tabList2 = _interopRequireDefault(_tabList);
+var _devtoolsModules = __webpack_require__(1376);
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var devtoolsModules = _interopRequireWildcard(_devtoolsModules);
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+var _devtoolsUtils = __webpack_require__(3651);
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+var devtoolsUtils = _interopRequireWildcard(_devtoolsUtils);
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+var _fuzzaldrinPlus = __webpack_require__(161);
-var TabList = function (_React$Component) {
- _inherits(TabList, _React$Component);
+var fuzzaldrinPlus = _interopRequireWildcard(_fuzzaldrinPlus);
- function TabList(props) {
- _classCallCheck(this, TabList);
+var _Transition = __webpack_require__(333);
- var _this = _possibleConstructorReturn(this, (TabList.__proto__ || Object.getPrototypeOf(TabList)).call(this, props));
+var transition = _interopRequireWildcard(_Transition);
- var childrenCount = _react2.default.Children.count(props.children);
+var _tabs = __webpack_require__(3762);
- _this.handleKeyPress = _this.handleKeyPress.bind(_this);
- _this.tabRefs = new Array(childrenCount).fill(0).map(function () {
- return _react2.default.createRef();
- });
- _this.handlers = _this.getHandlers(props.vertical);
- return _this;
- }
+var reactAriaComponentsTabs = _interopRequireWildcard(_tabs);
- _createClass(TabList, [{
- key: 'componentDidUpdate',
- value: function componentDidUpdate(prevProps) {
- if (prevProps.activeIndex !== this.props.activeIndex) {
- this.tabRefs[this.props.activeIndex].current.focus();
- }
- }
- }, {
- key: 'getHandlers',
- value: function getHandlers(vertical) {
- if (vertical) {
- return {
- ArrowDown: this.next.bind(this),
- ArrowUp: this.previous.bind(this)
- };
- }
- return {
- ArrowLeft: this.previous.bind(this),
- ArrowRight: this.next.bind(this)
- };
- }
- }, {
- key: 'wrapIndex',
- value: function wrapIndex(index) {
- var count = _react2.default.Children.count(this.props.children);
- return (index + count) % count;
- }
- }, {
- key: 'handleKeyPress',
- value: function handleKeyPress(event) {
- var handler = this.handlers[event.key];
- if (handler) {
- handler();
- }
- }
- }, {
- key: 'previous',
- value: function previous() {
- var newIndex = this.wrapIndex(this.props.activeIndex - 1);
- this.props.onActivateTab(newIndex);
- }
- }, {
- key: 'next',
- value: function next() {
- var newIndex = this.wrapIndex(this.props.activeIndex + 1);
- this.props.onActivateTab(newIndex);
- }
- }, {
- key: 'render',
- value: function render() {
- var _this2 = this;
+var _reselect = __webpack_require__(3791);
- var _props = this.props,
- accessibleId = _props.accessibleId,
- activeIndex = _props.activeIndex,
- children = _props.children,
- className = _props.className,
- onActivateTab = _props.onActivateTab;
+var reselect = _interopRequireWildcard(_reselect);
+var _classnames = __webpack_require__(175);
- return _react2.default.createElement(
- 'ul',
- { className: className, onKeyUp: this.handleKeyPress, role: 'tablist' },
- _react2.default.Children.map(children, function (child, index) {
- if (child.type !== _tab2.default) {
- throw new Error('Direct children of a must be a ');
- }
+var _classnames2 = _interopRequireDefault(_classnames);
- var active = index === activeIndex;
- var tabRef = _this2.tabRefs[index];
+var _devtoolsSplitter = __webpack_require__(3802);
- return _react2.default.cloneElement(child, {
- accessibleId: active ? accessibleId : undefined,
- active: active,
- tabRef: tabRef,
- onActivate: function onActivate() {
- return onActivateTab(index);
- }
- });
- })
- );
- }
- }]);
+var _devtoolsSplitter2 = _interopRequireDefault(_devtoolsSplitter);
- return TabList;
-}(_react2.default.Component);
+var _lodashMove = __webpack_require__(3751);
-exports.default = TabList;
+var _lodashMove2 = _interopRequireDefault(_lodashMove);
+var _Svg = __webpack_require__(1359);
-TabList.propTypes = {
- accessibleId: _propTypes2.default.string,
- activeIndex: _propTypes2.default.number,
- children: _propTypes2.default.node,
- className: _propTypes2.default.string,
- onActivateTab: _propTypes2.default.func,
- vertical: _propTypes2.default.bool
-};
+var _Svg2 = _interopRequireDefault(_Svg);
-TabList.defaultProps = {
- accessibleId: undefined,
- activeIndex: 0,
- children: null,
- className: _tabList2.default.container,
- onActivateTab: function onActivateTab() {},
- vertical: false
-};
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-/***/ }),
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-/***/ 3759:
-/***/ (function(module, exports, __webpack_require__) {
+// We cannot directly export literals containing special characters
+// (eg. "my-module/Test") which is why they are nested in "vendored".
+// The keys of the vendored object should match the module names
+// !!! Should remain synchronized with .babel/transform-mc.js !!!
-"use strict";
+// Modules imported without destructuring
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = Tab;
+/**
+ * Vendors.js is a file used to bundle and expose all dependencies needed to run
+ * the transpiled debugger modules when running in Firefox.
+ *
+ * To make transpilation easier, a vendored module should always be imported in
+ * same way:
+ * - always with destructuring (import { a } from "modA";)
+ * - always without destructuring (import modB from "modB")
+ *
+ * Both are fine, but cannot be mixed for the same module.
+ */
-var _propTypes = __webpack_require__(3642);
+// Modules imported with destructuring
+const vendored = exports.vendored = {
+ classnames: _classnames2.default,
+ "devtools-components": devtoolsComponents,
+ "devtools-config": devtoolsConfig,
+ "devtools-contextmenu": devtoolsContextmenu,
+ "devtools-environment": devtoolsEnvironment,
+ "devtools-modules": devtoolsModules,
+ "devtools-splitter": _devtoolsSplitter2.default,
+ "devtools-utils": devtoolsUtils,
+ "fuzzaldrin-plus": fuzzaldrinPlus,
+ "lodash-move": _lodashMove2.default,
+ "react-aria-components/src/tabs": reactAriaComponentsTabs,
+ "react-transition-group/Transition": transition,
+ reselect,
+ // Svg is required via relative paths, so the key is not imported path.
+ // See .babel/transform-mc.js
+ Svg: _Svg2.default
+};
+// $FlowIgnore
-var _propTypes2 = _interopRequireDefault(_propTypes);
+/***/ }),
-var _react = __webpack_require__(0);
+/***/ 3750:
+/***/ (function(module, exports, __webpack_require__) {
-var _react2 = _interopRequireDefault(_react);
+"use strict";
-var _ref2 = __webpack_require__(3784);
-var _ref3 = _interopRequireDefault(_ref2);
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
-var _tab = __webpack_require__(3763);
+/**
+ * This is a stub of the DevTools telemetry module and will be replaced by the
+ * full version of the file by Webpack for running inside Firefox.
+ */
-var _tab2 = _interopRequireDefault(_tab);
+class Telemetry {
+ /**
+ * Time since the system wide epoch. This is not a monotonic timer but
+ * can be used across process boundaries.
+ */
+ get msSystemNow() {
+ return 0;
+ }
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function Tab(_ref) {
- var accessibleId = _ref.accessibleId,
- active = _ref.active,
- children = _ref.children,
- className = _ref.className,
- onActivate = _ref.onActivate,
- tabRef = _ref.tabRef;
-
- return _react2.default.createElement(
- 'li',
- {
- 'aria-selected': active,
- className: className,
- id: accessibleId,
- onClick: onActivate,
- onKeyDown: function onKeyDown() {},
- ref: tabRef,
- role: 'tab',
- tabIndex: active ? 0 : undefined
- },
- children
- );
-}
-
-Tab.propTypes = {
- accessibleId: _propTypes2.default.string,
- active: _propTypes2.default.bool,
- children: _propTypes2.default.node.isRequired,
- className: _propTypes2.default.string,
- onActivate: _propTypes2.default.func,
- tabRef: _ref3.default
-};
-
-Tab.defaultProps = {
- accessibleId: undefined,
- active: false,
- className: _tab2.default.container,
- onActivate: undefined,
- tabRef: undefined
-};
-
-/***/ }),
-
-/***/ 3760:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.default = TabPanels;
-
-var _propTypes = __webpack_require__(3642);
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _react = __webpack_require__(0);
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function TabPanels(_ref) {
- var accessibleId = _ref.accessibleId,
- activeIndex = _ref.activeIndex,
- children = _ref.children,
- className = _ref.className,
- hasFocusableContent = _ref.hasFocusableContent;
-
- return _react2.default.createElement(
- 'div',
- {
- 'aria-labelledby': accessibleId,
- role: 'tabpanel',
- className: className,
- tabIndex: hasFocusableContent ? undefined : 0
- },
- _react2.default.Children.toArray(children)[activeIndex]
- );
-}
+ /**
+ * Starts a timer associated with a telemetry histogram. The timer can be
+ * directly associated with a histogram, or with a pair of a histogram and
+ * an object.
+ *
+ * @param {String} histogramId
+ * A string which must be a valid histogram name.
+ * @param {Object} obj
+ * Optional parameter. If specified, the timer is associated with this
+ * object, meaning that multiple timers for the same histogram may be
+ * run concurrently, as long as they are associated with different
+ * objects.
+ *
+ * @returns {Boolean}
+ * True if the timer was successfully started, false otherwise. If a
+ * timer already exists, it can't be started again, and the existing
+ * one will be cleared in order to avoid measurements errors.
+ */
+ start(histogramId, obj) {
+ return true;
+ }
-TabPanels.propTypes = {
- accessibleId: _propTypes2.default.string,
- activeIndex: _propTypes2.default.number,
- children: _propTypes2.default.node.isRequired,
- className: _propTypes2.default.string,
- hasFocusableContent: _propTypes2.default.bool.isRequired
-};
+ /**
+ * Starts a timer associated with a keyed telemetry histogram. The timer can
+ * be directly associated with a histogram and its key. Similarly to
+ * TelemetryStopwatch.start the histogram and its key can be associated
+ * with an object. Each key may have multiple associated objects and each
+ * object can be associated with multiple keys.
+ *
+ * @param {String} histogramId
+ * A string which must be a valid histogram name.
+ * @param {String} key
+ * A string which must be a valid histgram key.
+ * @param {Object} obj
+ * Optional parameter. If specified, the timer is associated with this
+ * object, meaning that multiple timers for the same histogram may be
+ * run concurrently,as long as they are associated with different
+ * objects.
+ *
+ * @returns {Boolean}
+ * True if the timer was successfully started, false otherwise. If a
+ * timer already exists, it can't be started again, and the existing
+ * one will be cleared in order to avoid measurements errors.
+ */
+ startKeyed(histogramId, key, obj) {
+ return true;
+ }
-TabPanels.defaultProps = {
- accessibleId: undefined,
- activeIndex: 0,
- className: null
-};
+ /**
+ * Stops the timer associated with the given histogram (and object),
+ * calculates the time delta between start and finish, and adds the value
+ * to the histogram.
+ *
+ * @param {String} histogramId
+ * A string which must be a valid histogram name.
+ * @param {Object} obj
+ * Optional parameter which associates the histogram timer with the
+ * given object.
+ * @param {Boolean} canceledOkay
+ * Optional parameter which will suppress any warnings that normally
+ * fire when a stopwatch is finished after being cancelled.
+ * Defaults to false.
+ *
+ * @returns {Boolean}
+ * True if the timer was succesfully stopped and the data was added
+ * to the histogram, False otherwise.
+ */
+ finish(histogramId, obj, canceledOkay) {
+ return true;
+ }
-/***/ }),
+ /**
+ * Stops the timer associated with the given keyed histogram (and object),
+ * calculates the time delta between start and finish, and adds the value
+ * to the keyed histogram.
+ *
+ * @param {String} histogramId
+ * A string which must be a valid histogram name.
+ * @param {String} key
+ * A string which must be a valid histogram key.
+ * @param {Object} obj
+ * Optional parameter which associates the histogram timer with the
+ * given object.
+ * @param {Boolean} canceledOkay
+ * Optional parameter which will suppress any warnings that normally
+ * fire when a stopwatch is finished after being cancelled.
+ * Defaults to false.
+ *
+ * @returns {Boolean}
+ * True if the timer was succesfully stopped and the data was added
+ * to the histogram, False otherwise.
+ */
+ finishKeyed(histogramId, key, obj, cancelledOkay) {
+ return true;
+ }
-/***/ 3762:
-/***/ (function(module, exports, __webpack_require__) {
+ /**
+ * Log a value to a histogram.
+ *
+ * @param {String} histogramId
+ * Histogram in which the data is to be stored.
+ */
+ getHistogramById(histogramId) {
+ return {
+ add: () => {}
+ };
+ }
-"use strict";
+ /**
+ * Get a keyed histogram.
+ *
+ * @param {String} histogramId
+ * Histogram in which the data is to be stored.
+ */
+ getKeyedHistogramById(histogramId) {
+ return {
+ add: () => {}
+ };
+ }
+ /**
+ * Log a value to a scalar.
+ *
+ * @param {String} scalarId
+ * Scalar in which the data is to be stored.
+ * @param value
+ * Value to store.
+ */
+ scalarSet(scalarId, value) {}
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
+ /**
+ * Log a value to a count scalar.
+ *
+ * @param {String} scalarId
+ * Scalar in which the data is to be stored.
+ * @param value
+ * Value to store.
+ */
+ scalarAdd(scalarId, value) {}
-var _tabList = __webpack_require__(3758);
+ /**
+ * Log a value to a keyed count scalar.
+ *
+ * @param {String} scalarId
+ * Scalar in which the data is to be stored.
+ * @param {String} key
+ * The key within the scalar.
+ * @param value
+ * Value to store.
+ */
+ keyedScalarAdd(scalarId, key, value) {}
-Object.defineProperty(exports, 'TabList', {
- enumerable: true,
- get: function get() {
- return _interopRequireDefault(_tabList).default;
+ /**
+ * Event telemetry is disabled by default. Use this method to enable it for
+ * a particular category.
+ *
+ * @param {Boolean} enabled
+ * Enabled: true or false.
+ */
+ setEventRecordingEnabled(enabled) {
+ return enabled;
}
-});
-var _tabPanels = __webpack_require__(3760);
+ /**
+ * Telemetry events often need to make use of a number of properties from
+ * completely different codepaths. To make this possible we create a
+ * "pending event" along with an array of property names that we need to wait
+ * for before sending the event.
+ *
+ * As each property is received via addEventProperty() we check if all
+ * properties have been received. Once they have all been received we send the
+ * telemetry event.
+ *
+ * @param {Object} obj
+ * The telemetry event or ping is associated with this object, meaning
+ * that multiple events or pings for the same histogram may be run
+ * concurrently, as long as they are associated with different objects.
+ * @param {String} method
+ * The telemetry event method (describes the type of event that
+ * occurred e.g. "open")
+ * @param {String} object
+ * The telemetry event object name (the name of the object the event
+ * occurred on) e.g. "tools" or "setting"
+ * @param {String|null} value
+ * The telemetry event value (a user defined value, providing context
+ * for the event) e.g. "console"
+ * @param {Array} expected
+ * An array of the properties needed before sending the telemetry
+ * event e.g.
+ * [
+ * "host",
+ * "width"
+ * ]
+ */
+ preparePendingEvent(obj, method, object, value, expected = []) {}
-Object.defineProperty(exports, 'TabPanels', {
- enumerable: true,
- get: function get() {
- return _interopRequireDefault(_tabPanels).default;
- }
-});
+ /**
+ * Adds an expected property for either a current or future pending event.
+ * This means that if preparePendingEvent() is called before or after sending
+ * the event properties they will automatically added to the event.
+ *
+ * @param {Object} obj
+ * The telemetry event or ping is associated with this object, meaning
+ * that multiple events or pings for the same histogram may be run
+ * concurrently, as long as they are associated with different objects.
+ * @param {String} method
+ * The telemetry event method (describes the type of event that
+ * occurred e.g. "open")
+ * @param {String} object
+ * The telemetry event object name (the name of the object the event
+ * occurred on) e.g. "tools" or "setting"
+ * @param {String|null} value
+ * The telemetry event value (a user defined value, providing context
+ * for the event) e.g. "console"
+ * @param {String} pendingPropName
+ * The pending property name
+ * @param {String} pendingPropValue
+ * The pending property value
+ */
+ addEventProperty(obj, method, object, value, pendingPropName, pendingPropValue) {}
-var _tab = __webpack_require__(3759);
+ /**
+ * Adds expected properties for either a current or future pending event.
+ * This means that if preparePendingEvent() is called before or after sending
+ * the event properties they will automatically added to the event.
+ *
+ * @param {Object} obj
+ * The telemetry event or ping is associated with this object, meaning
+ * that multiple events or pings for the same histogram may be run
+ * concurrently, as long as they are associated with different objects.
+ * @param {String} method
+ * The telemetry event method (describes the type of event that
+ * occurred e.g. "open")
+ * @param {String} object
+ * The telemetry event object name (the name of the object the event
+ * occurred on) e.g. "tools" or "setting"
+ * @param {String|null} value
+ * The telemetry event value (a user defined value, providing context
+ * for the event) e.g. "console"
+ * @param {String} pendingObject
+ * An object containing key, value pairs that should be added to the
+ * event as properties.
+ */
+ addEventProperties(obj, method, object, value, pendingObject) {}
-Object.defineProperty(exports, 'Tab', {
- enumerable: true,
- get: function get() {
- return _interopRequireDefault(_tab).default;
- }
-});
+ /**
+ * A private method that is not to be used externally. This method is used to
+ * prepare a pending telemetry event for sending and then send it via
+ * recordEvent().
+ *
+ * @param {Object} obj
+ * The telemetry event or ping is associated with this object, meaning
+ * that multiple events or pings for the same histogram may be run
+ * concurrently, as long as they are associated with different objects.
+ * @param {String} method
+ * The telemetry event method (describes the type of event that
+ * occurred e.g. "open")
+ * @param {String} object
+ * The telemetry event object name (the name of the object the event
+ * occurred on) e.g. "tools" or "setting"
+ * @param {String|null} value
+ * The telemetry event value (a user defined value, providing context
+ * for the event) e.g. "console"
+ */
+ _sendPendingEvent(obj, method, object, value) {}
-var _tabs = __webpack_require__(3765);
+ /**
+ * Send a telemetry event.
+ *
+ * @param {String} method
+ * The telemetry event method (describes the type of event that
+ * occurred e.g. "open")
+ * @param {String} object
+ * The telemetry event object name (the name of the object the event
+ * occurred on) e.g. "tools" or "setting"
+ * @param {String|null} value
+ * The telemetry event value (a user defined value, providing context
+ * for the event) e.g. "console"
+ * @param {Object} extra
+ * The telemetry event extra object containing the properties that will
+ * be sent with the event e.g.
+ * {
+ * host: "bottom",
+ * width: "1024"
+ * }
+ */
+ recordEvent(method, object, value, extra) {}
-Object.defineProperty(exports, 'Tabs', {
- enumerable: true,
- get: function get() {
- return _interopRequireDefault(_tabs).default;
- }
-});
+ /**
+ * Sends telemetry pings to indicate that a tool has been opened.
+ *
+ * @param {String} id
+ * The ID of the tool opened.
+ * @param {String} sessionId
+ * Toolbox session id used when we need to ensure a tool really has a
+ * timer before calculating a delta.
+ * @param {Object} obj
+ * The telemetry event or ping is associated with this object, meaning
+ * that multiple events or pings for the same histogram may be run
+ * concurrently, as long as they are associated with different objects.
+ */
+ toolOpened(id, sessionId, obj) {}
+
+ /**
+ * Sends telemetry pings to indicate that a tool has been closed.
+ *
+ * @param {String} id
+ * The ID of the tool opened.
+ */
+ toolClosed(id, sessionId, obj) {}
+}
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+module.exports = Telemetry;
/***/ }),
-/***/ 3763:
-/***/ (function(module, exports) {
+/***/ 3751:
+/***/ (function(module, exports, __webpack_require__) {
-// removed by extract-text-webpack-plugin
+"use strict";
-/***/ }),
-/***/ 3764:
-/***/ (function(module, exports) {
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = move;
-// removed by extract-text-webpack-plugin
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function move(array, moveIndex, toIndex) {
+ /* #move - Moves an array item from one position in an array to another.
+ Note: This is a pure function so a new array will be returned, instead
+ of altering the array argument.
+ Arguments:
+ 1. array (String) : Array in which to move an item. (required)
+ 2. moveIndex (Object) : The index of the item to move. (required)
+ 3. toIndex (Object) : The index to move item at moveIndex to. (required)
+ */
+ var item = array[moveIndex];
+ var length = array.length;
+ var diff = moveIndex - toIndex;
+
+ if (diff > 0) {
+ // move left
+ return [].concat(_toConsumableArray(array.slice(0, toIndex)), [item], _toConsumableArray(array.slice(toIndex, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, length)));
+ } else if (diff < 0) {
+ // move right
+ return [].concat(_toConsumableArray(array.slice(0, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, toIndex + 1)), [item], _toConsumableArray(array.slice(toIndex + 1, length)));
+ }
+ return array;
+}
/***/ }),
-/***/ 3765:
+/***/ 3758:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -5995,18 +6206,14 @@
var _react2 = _interopRequireDefault(_react);
-var _uniqueId = __webpack_require__(3766);
+var _tab = __webpack_require__(3759);
-var _uniqueId2 = _interopRequireDefault(_uniqueId);
+var _tab2 = _interopRequireDefault(_tab);
-var _tabList = __webpack_require__(3758);
+var _tabList = __webpack_require__(3764);
var _tabList2 = _interopRequireDefault(_tabList);
-var _tabPanels = __webpack_require__(3760);
-
-var _tabPanels2 = _interopRequireDefault(_tabPanels);
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -6015,72 +6222,135 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-var Tabs = function (_React$Component) {
- _inherits(Tabs, _React$Component);
+var TabList = function (_React$Component) {
+ _inherits(TabList, _React$Component);
- function Tabs() {
- _classCallCheck(this, Tabs);
+ function TabList(props) {
+ _classCallCheck(this, TabList);
- var _this = _possibleConstructorReturn(this, (Tabs.__proto__ || Object.getPrototypeOf(Tabs)).call(this));
+ var _this = _possibleConstructorReturn(this, (TabList.__proto__ || Object.getPrototypeOf(TabList)).call(this, props));
- _this.accessibleId = (0, _uniqueId2.default)();
+ var childrenCount = _react2.default.Children.count(props.children);
+
+ _this.handleKeyPress = _this.handleKeyPress.bind(_this);
+ _this.tabRefs = new Array(childrenCount).fill(0).map(function () {
+ return _react2.default.createRef();
+ });
+ _this.handlers = _this.getHandlers(props.vertical);
return _this;
}
- _createClass(Tabs, [{
+ _createClass(TabList, [{
+ key: 'componentDidUpdate',
+ value: function componentDidUpdate(prevProps) {
+ if (prevProps.activeIndex !== this.props.activeIndex) {
+ this.tabRefs[this.props.activeIndex].current.focus();
+ }
+ }
+ }, {
+ key: 'getHandlers',
+ value: function getHandlers(vertical) {
+ if (vertical) {
+ return {
+ ArrowDown: this.next.bind(this),
+ ArrowUp: this.previous.bind(this)
+ };
+ }
+ return {
+ ArrowLeft: this.previous.bind(this),
+ ArrowRight: this.next.bind(this)
+ };
+ }
+ }, {
+ key: 'wrapIndex',
+ value: function wrapIndex(index) {
+ var count = _react2.default.Children.count(this.props.children);
+ return (index + count) % count;
+ }
+ }, {
+ key: 'handleKeyPress',
+ value: function handleKeyPress(event) {
+ var handler = this.handlers[event.key];
+ if (handler) {
+ handler();
+ }
+ }
+ }, {
+ key: 'previous',
+ value: function previous() {
+ var newIndex = this.wrapIndex(this.props.activeIndex - 1);
+ this.props.onActivateTab(newIndex);
+ }
+ }, {
+ key: 'next',
+ value: function next() {
+ var newIndex = this.wrapIndex(this.props.activeIndex + 1);
+ this.props.onActivateTab(newIndex);
+ }
+ }, {
key: 'render',
value: function render() {
+ var _this2 = this;
+
var _props = this.props,
+ accessibleId = _props.accessibleId,
activeIndex = _props.activeIndex,
children = _props.children,
className = _props.className,
onActivateTab = _props.onActivateTab;
- var accessibleId = this.accessibleId;
return _react2.default.createElement(
- 'div',
- { className: className },
- _react2.default.Children.map(children, function (child) {
- if (!child) {
- return child;
+ 'ul',
+ { className: className, onKeyUp: this.handleKeyPress, role: 'tablist' },
+ _react2.default.Children.map(children, function (child, index) {
+ if (child.type !== _tab2.default) {
+ throw new Error('Direct children of a must be a ');
}
- switch (child.type) {
- case _tabList2.default:
- return _react2.default.cloneElement(child, { accessibleId: accessibleId, activeIndex: activeIndex, onActivateTab: onActivateTab });
- case _tabPanels2.default:
- return _react2.default.cloneElement(child, { accessibleId: accessibleId, activeIndex: activeIndex });
- default:
- return child;
- }
+ var active = index === activeIndex;
+ var tabRef = _this2.tabRefs[index];
+
+ return _react2.default.cloneElement(child, {
+ accessibleId: active ? accessibleId : undefined,
+ active: active,
+ tabRef: tabRef,
+ onActivate: function onActivate() {
+ return onActivateTab(index);
+ }
+ });
})
);
}
}]);
- return Tabs;
+ return TabList;
}(_react2.default.Component);
-exports.default = Tabs;
+exports.default = TabList;
-Tabs.propTypes = {
- activeIndex: _propTypes2.default.number.isRequired,
+TabList.propTypes = {
+ accessibleId: _propTypes2.default.string,
+ activeIndex: _propTypes2.default.number,
children: _propTypes2.default.node,
className: _propTypes2.default.string,
- onActivateTab: _propTypes2.default.func
+ onActivateTab: _propTypes2.default.func,
+ vertical: _propTypes2.default.bool
};
-Tabs.defaultProps = {
+TabList.defaultProps = {
+ accessibleId: undefined,
+ activeIndex: 0,
children: null,
- className: undefined,
- onActivateTab: function onActivateTab() {}
+ className: _tabList2.default.container,
+ onActivateTab: function onActivateTab() {},
+ vertical: false
};
/***/ }),
-/***/ 3766:
+/***/ 3759:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -6089,378 +6359,190 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.default = uniqueId;
-var counter = 0;
+exports.default = Tab;
-function uniqueId() {
- counter += 1;
- return "$rac$" + counter;
-}
+var _propTypes = __webpack_require__(3642);
-/***/ }),
+var _propTypes2 = _interopRequireDefault(_propTypes);
-/***/ 3769:
-/***/ (function(module, exports, __webpack_require__) {
+var _react = __webpack_require__(0);
-"use strict";
-/**
- *
- * Adapted from https://github.com/mozilla-b2g/gaia/blob/f09993563fb5fec4393eb71816ce76cb00463190/shared/js/async_storage.js
- * (converted to use Promises instead of callbacks).
- *
- * This file defines an asynchronous version of the localStorage API, backed by
- * an IndexedDB database. It creates a global asyncStorage object that has
- * methods like the localStorage object.
- *
- * To store a value use setItem:
- *
- * asyncStorage.setItem("key", "value");
- *
- * This returns a promise in case you want confirmation that the value has been stored.
- *
- * asyncStorage.setItem("key", "newvalue").then(function() {
- * console.log("new value stored");
- * });
- *
- * To read a value, call getItem(), but note that you must wait for a promise
- * resolution for the value to be retrieved.
- *
- * asyncStorage.getItem("key").then(function(value) {
- * console.log("The value of key is:", value);
- * });
- *
- * Note that unlike localStorage, asyncStorage does not allow you to store and
- * retrieve values by setting and querying properties directly. You cannot just
- * write asyncStorage.key; you have to explicitly call setItem() or getItem().
- *
- * removeItem(), clear(), length(), and key() are like the same-named methods of
- * localStorage, and all return a promise.
- *
- * The asynchronous nature of getItem() makes it tricky to retrieve multiple
- * values. But unlike localStorage, asyncStorage does not require the values you
- * store to be strings. So if you need to save multiple values and want to
- * retrieve them together, in a single asynchronous operation, just group the
- * values into a single object. The properties of this object may not include
- * DOM elements, but they may include things like Blobs and typed arrays.
- *
- */
+var _react2 = _interopRequireDefault(_react);
+
+var _ref2 = __webpack_require__(3784);
+
+var _ref3 = _interopRequireDefault(_ref2);
+
+var _tab = __webpack_require__(3763);
+
+var _tab2 = _interopRequireDefault(_tab);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function Tab(_ref) {
+ var accessibleId = _ref.accessibleId,
+ active = _ref.active,
+ children = _ref.children,
+ className = _ref.className,
+ onActivate = _ref.onActivate,
+ tabRef = _ref.tabRef;
+
+ return _react2.default.createElement(
+ 'li',
+ {
+ 'aria-selected': active,
+ className: className,
+ id: accessibleId,
+ onClick: onActivate,
+ onKeyDown: function onKeyDown() {},
+ ref: tabRef,
+ role: 'tab',
+ tabIndex: active ? 0 : undefined
+ },
+ children
+ );
+}
+Tab.propTypes = {
+ accessibleId: _propTypes2.default.string,
+ active: _propTypes2.default.bool,
+ children: _propTypes2.default.node.isRequired,
+ className: _propTypes2.default.string,
+ onActivate: _propTypes2.default.func,
+ tabRef: _ref3.default
+};
+Tab.defaultProps = {
+ accessibleId: undefined,
+ active: false,
+ className: _tab2.default.container,
+ onActivate: undefined,
+ tabRef: undefined
+};
-const DBNAME = "devtools-async-storage";
-const DBVERSION = 1;
-const STORENAME = "keyvaluepairs";
-var db = null;
+/***/ }),
-function withStore(type, onsuccess, onerror) {
- if (db) {
- const transaction = db.transaction(STORENAME, type);
- const store = transaction.objectStore(STORENAME);
- onsuccess(store);
- } else {
- const openreq = indexedDB.open(DBNAME, DBVERSION);
- openreq.onerror = function withStoreOnError() {
- onerror();
- };
- openreq.onupgradeneeded = function withStoreOnUpgradeNeeded() {
- // First time setup: create an empty object store
- openreq.result.createObjectStore(STORENAME);
- };
- openreq.onsuccess = function withStoreOnSuccess() {
- db = openreq.result;
- const transaction = db.transaction(STORENAME, type);
- const store = transaction.objectStore(STORENAME);
- onsuccess(store);
- };
- }
-}
+/***/ 3760:
+/***/ (function(module, exports, __webpack_require__) {
-function getItem(itemKey) {
- return new Promise((resolve, reject) => {
- let req;
- withStore("readonly", store => {
- store.transaction.oncomplete = function onComplete() {
- let value = req.result;
- if (value === undefined) {
- value = null;
- }
- resolve(value);
- };
- req = store.get(itemKey);
- req.onerror = function getItemOnError() {
- reject("Error in asyncStorage.getItem(): ", req.error.name);
- };
- }, reject);
- });
-}
+"use strict";
-function setItem(itemKey, value) {
- return new Promise((resolve, reject) => {
- withStore("readwrite", store => {
- store.transaction.oncomplete = resolve;
- const req = store.put(value, itemKey);
- req.onerror = function setItemOnError() {
- reject("Error in asyncStorage.setItem(): ", req.error.name);
- };
- }, reject);
- });
-}
-function removeItem(itemKey) {
- return new Promise((resolve, reject) => {
- withStore("readwrite", store => {
- store.transaction.oncomplete = resolve;
- const req = store.delete(itemKey);
- req.onerror = function removeItemOnError() {
- reject("Error in asyncStorage.removeItem(): ", req.error.name);
- };
- }, reject);
- });
-}
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = TabPanels;
-function clear() {
- return new Promise((resolve, reject) => {
- withStore("readwrite", store => {
- store.transaction.oncomplete = resolve;
- const req = store.clear();
- req.onerror = function clearOnError() {
- reject("Error in asyncStorage.clear(): ", req.error.name);
- };
- }, reject);
- });
-}
+var _propTypes = __webpack_require__(3642);
-function length() {
- return new Promise((resolve, reject) => {
- let req;
- withStore("readonly", store => {
- store.transaction.oncomplete = function onComplete() {
- resolve(req.result);
- };
- req = store.count();
- req.onerror = function lengthOnError() {
- reject("Error in asyncStorage.length(): ", req.error.name);
- };
- }, reject);
- });
-}
+var _propTypes2 = _interopRequireDefault(_propTypes);
-function key(n) {
- return new Promise((resolve, reject) => {
- if (n < 0) {
- resolve(null);
- return;
- }
+var _react = __webpack_require__(0);
- let req;
- withStore("readonly", store => {
- store.transaction.oncomplete = function onComplete() {
- const cursor = req.result;
- resolve(cursor ? cursor.key : null);
- };
- let advanced = false;
- req = store.openCursor();
- req.onsuccess = function keyOnSuccess() {
- const cursor = req.result;
- if (!cursor) {
- // this means there weren"t enough keys
- return;
- }
- if (n === 0 || advanced) {
- // Either 1) we have the first key, return it if that's what they
- // wanted, or 2) we"ve got the nth key.
- return;
- }
+var _react2 = _interopRequireDefault(_react);
- // Otherwise, ask the cursor to skip ahead n records
- advanced = true;
- cursor.advance(n);
- };
- req.onerror = function keyOnError() {
- reject("Error in asyncStorage.key(): ", req.error.name);
- };
- }, reject);
- });
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function TabPanels(_ref) {
+ var accessibleId = _ref.accessibleId,
+ activeIndex = _ref.activeIndex,
+ children = _ref.children,
+ className = _ref.className,
+ hasFocusableContent = _ref.hasFocusableContent;
+
+ return _react2.default.createElement(
+ 'div',
+ {
+ 'aria-labelledby': accessibleId,
+ role: 'tabpanel',
+ className: className,
+ tabIndex: hasFocusableContent ? undefined : 0
+ },
+ _react2.default.Children.toArray(children)[activeIndex]
+ );
}
-exports.getItem = getItem;
-exports.setItem = setItem;
-exports.removeItem = removeItem;
-exports.clear = clear;
-exports.length = length;
-exports.key = key;
+TabPanels.propTypes = {
+ accessibleId: _propTypes2.default.string,
+ activeIndex: _propTypes2.default.number,
+ children: _propTypes2.default.node.isRequired,
+ className: _propTypes2.default.string,
+ hasFocusableContent: _propTypes2.default.bool.isRequired
+};
+
+TabPanels.defaultProps = {
+ accessibleId: undefined,
+ activeIndex: 0,
+ className: null
+};
/***/ }),
-/***/ 3770:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+/***/ 3762:
+/***/ (function(module, exports, __webpack_require__) {
"use strict";
-Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyfill", function() { return polyfill; });
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-function componentWillMount() {
- // Call this.constructor.gDSFP to support sub-classes.
- var state = this.constructor.getDerivedStateFromProps(this.props, this.state);
- if (state !== null && state !== undefined) {
- this.setState(state);
- }
-}
-
-function componentWillReceiveProps(nextProps) {
- // Call this.constructor.gDSFP to support sub-classes.
- // Use the setState() updater to ensure state isn't stale in certain edge cases.
- function updater(prevState) {
- var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);
- return state !== null && state !== undefined ? state : null;
- }
- // Binding "this" is important for shallow renderer support.
- this.setState(updater.bind(this));
-}
-function componentWillUpdate(nextProps, nextState) {
- try {
- var prevProps = this.props;
- var prevState = this.state;
- this.props = nextProps;
- this.state = nextState;
- this.__reactInternalSnapshotFlag = true;
- this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(
- prevProps,
- prevState
- );
- } finally {
- this.props = prevProps;
- this.state = prevState;
- }
-}
-// React may warn about cWM/cWRP/cWU methods being deprecated.
-// Add a flag to suppress these warnings for this special case.
-componentWillMount.__suppressDeprecationWarning = true;
-componentWillReceiveProps.__suppressDeprecationWarning = true;
-componentWillUpdate.__suppressDeprecationWarning = true;
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
-function polyfill(Component) {
- var prototype = Component.prototype;
+var _tabList = __webpack_require__(3758);
- if (!prototype || !prototype.isReactComponent) {
- throw new Error('Can only polyfill class components');
+Object.defineProperty(exports, 'TabList', {
+ enumerable: true,
+ get: function get() {
+ return _interopRequireDefault(_tabList).default;
}
+});
- if (
- typeof Component.getDerivedStateFromProps !== 'function' &&
- typeof prototype.getSnapshotBeforeUpdate !== 'function'
- ) {
- return Component;
- }
+var _tabPanels = __webpack_require__(3760);
- // If new component APIs are defined, "unsafe" lifecycles won't be called.
- // Error if any of these lifecycles are present,
- // Because they would work differently between older and newer (16.3+) versions of React.
- var foundWillMountName = null;
- var foundWillReceivePropsName = null;
- var foundWillUpdateName = null;
- if (typeof prototype.componentWillMount === 'function') {
- foundWillMountName = 'componentWillMount';
- } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {
- foundWillMountName = 'UNSAFE_componentWillMount';
- }
- if (typeof prototype.componentWillReceiveProps === 'function') {
- foundWillReceivePropsName = 'componentWillReceiveProps';
- } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {
- foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
- }
- if (typeof prototype.componentWillUpdate === 'function') {
- foundWillUpdateName = 'componentWillUpdate';
- } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {
- foundWillUpdateName = 'UNSAFE_componentWillUpdate';
+Object.defineProperty(exports, 'TabPanels', {
+ enumerable: true,
+ get: function get() {
+ return _interopRequireDefault(_tabPanels).default;
}
- if (
- foundWillMountName !== null ||
- foundWillReceivePropsName !== null ||
- foundWillUpdateName !== null
- ) {
- var componentName = Component.displayName || Component.name;
- var newApiName =
- typeof Component.getDerivedStateFromProps === 'function'
- ? 'getDerivedStateFromProps()'
- : 'getSnapshotBeforeUpdate()';
+});
- throw Error(
- 'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' +
- componentName +
- ' uses ' +
- newApiName +
- ' but also contains the following legacy lifecycles:' +
- (foundWillMountName !== null ? '\n ' + foundWillMountName : '') +
- (foundWillReceivePropsName !== null
- ? '\n ' + foundWillReceivePropsName
- : '') +
- (foundWillUpdateName !== null ? '\n ' + foundWillUpdateName : '') +
- '\n\nThe above lifecycles should be removed. Learn more about this warning here:\n' +
- 'https://fb.me/react-async-component-lifecycle-hooks'
- );
- }
+var _tab = __webpack_require__(3759);
- // React <= 16.2 does not support static getDerivedStateFromProps.
- // As a workaround, use cWM and cWRP to invoke the new static lifecycle.
- // Newer versions of React will ignore these lifecycles if gDSFP exists.
- if (typeof Component.getDerivedStateFromProps === 'function') {
- prototype.componentWillMount = componentWillMount;
- prototype.componentWillReceiveProps = componentWillReceiveProps;
+Object.defineProperty(exports, 'Tab', {
+ enumerable: true,
+ get: function get() {
+ return _interopRequireDefault(_tab).default;
}
+});
- // React <= 16.2 does not support getSnapshotBeforeUpdate.
- // As a workaround, use cWU to invoke the new lifecycle.
- // Newer versions of React will ignore that lifecycle if gSBU exists.
- if (typeof prototype.getSnapshotBeforeUpdate === 'function') {
- if (typeof prototype.componentDidUpdate !== 'function') {
- throw new Error(
- 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'
- );
- }
+var _tabs = __webpack_require__(3765);
- prototype.componentWillUpdate = componentWillUpdate;
+Object.defineProperty(exports, 'Tabs', {
+ enumerable: true,
+ get: function get() {
+ return _interopRequireDefault(_tabs).default;
+ }
+});
- var componentDidUpdate = prototype.componentDidUpdate;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- prototype.componentDidUpdate = function componentDidUpdatePolyfill(
- prevProps,
- prevState,
- maybeSnapshot
- ) {
- // 16.3+ will not execute our will-update method;
- // It will pass a snapshot value to did-update though.
- // Older versions will require our polyfilled will-update value.
- // We need to handle both cases, but can't just check for the presence of "maybeSnapshot",
- // Because for <= 15.x versions this might be a "prevContext" object.
- // We also can't just check "__reactInternalSnapshot",
- // Because get-snapshot might return a falsy value.
- // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.
- var snapshot = this.__reactInternalSnapshotFlag
- ? this.__reactInternalSnapshot
- : maybeSnapshot;
+/***/ }),
- componentDidUpdate.call(this, prevProps, prevState, snapshot);
- };
- }
+/***/ 3763:
+/***/ (function(module, exports) {
- return Component;
-}
+// removed by extract-text-webpack-plugin
+/***/ }),
+/***/ 3764:
+/***/ (function(module, exports) {
+// removed by extract-text-webpack-plugin
/***/ }),
-/***/ 3784:
+/***/ 3765:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -6470,1228 +6552,1122 @@
value: true
});
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
var _propTypes = __webpack_require__(3642);
var _propTypes2 = _interopRequireDefault(_propTypes);
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-exports.default = _propTypes2.default.object;
+var _react = __webpack_require__(0);
-/***/ }),
+var _react2 = _interopRequireDefault(_react);
-/***/ 3786:
-/***/ (function(module, exports, __webpack_require__) {
+var _uniqueId = __webpack_require__(3766);
-"use strict";
+var _uniqueId2 = _interopRequireDefault(_uniqueId);
+var _tabList = __webpack_require__(3758);
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.formatKeyShortcut = formatKeyShortcut;
+var _tabList2 = _interopRequireDefault(_tabList);
-var _devtoolsServices = __webpack_require__(22);
+var _tabPanels = __webpack_require__(3760);
-var _devtoolsServices2 = _interopRequireDefault(_devtoolsServices);
+var _tabPanels2 = _interopRequireDefault(_tabPanels);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-const { appinfo } = _devtoolsServices2.default; /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-/**
- * Utils for keyboard command strings
- * @module utils/text
- */
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-const isMacOS = appinfo.OS === "Darwin";
+var Tabs = function (_React$Component) {
+ _inherits(Tabs, _React$Component);
-/**
- * Formats key for use in tooltips
- * For macOS we use the following unicode
- *
- * cmd ⌘ = \u2318
- * shift ⇧ – \u21E7
- * option (alt) ⌥ \u2325
- *
- * For Win/Lin this replaces CommandOrControl or CmdOrCtrl with Ctrl
- *
- * @memberof utils/text
- * @static
- */
-function formatKeyShortcut(shortcut) {
- if (isMacOS) {
- return shortcut.replace(/Shift\+/g, "\u21E7").replace(/Command\+|Cmd\+/g, "\u2318").replace(/CommandOrControl\+|CmdOrCtrl\+/g, "\u2318").replace(/Alt\+/g, "\u2325");
- }
- return shortcut.replace(/CommandOrControl\+|CmdOrCtrl\+/g, "Ctrl").replace(/Shift\+/g, "Shift");
-}
+ function Tabs() {
+ _classCallCheck(this, Tabs);
-/***/ }),
+ var _this = _possibleConstructorReturn(this, (Tabs.__proto__ || Object.getPrototypeOf(Tabs)).call(this));
-/***/ 3791:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+ _this.accessibleId = (0, _uniqueId2.default)();
+ return _this;
+ }
-"use strict";
-Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
-/* harmony export (immutable) */ __webpack_exports__["defaultMemoize"] = defaultMemoize;
-/* harmony export (immutable) */ __webpack_exports__["createSelectorCreator"] = createSelectorCreator;
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSelector", function() { return createSelector; });
-/* harmony export (immutable) */ __webpack_exports__["createStructuredSelector"] = createStructuredSelector;
-function defaultEqualityCheck(a, b) {
- return a === b;
-}
+ _createClass(Tabs, [{
+ key: 'render',
+ value: function render() {
+ var _props = this.props,
+ activeIndex = _props.activeIndex,
+ children = _props.children,
+ className = _props.className,
+ onActivateTab = _props.onActivateTab;
-function areArgumentsShallowlyEqual(equalityCheck, prev, next) {
- if (prev === null || next === null || prev.length !== next.length) {
- return false;
- }
+ var accessibleId = this.accessibleId;
- // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.
- var length = prev.length;
- for (var i = 0; i < length; i++) {
- if (!equalityCheck(prev[i], next[i])) {
- return false;
+ return _react2.default.createElement(
+ 'div',
+ { className: className },
+ _react2.default.Children.map(children, function (child) {
+ if (!child) {
+ return child;
+ }
+
+ switch (child.type) {
+ case _tabList2.default:
+ return _react2.default.cloneElement(child, { accessibleId: accessibleId, activeIndex: activeIndex, onActivateTab: onActivateTab });
+ case _tabPanels2.default:
+ return _react2.default.cloneElement(child, { accessibleId: accessibleId, activeIndex: activeIndex });
+ default:
+ return child;
+ }
+ })
+ );
}
- }
+ }]);
- return true;
-}
+ return Tabs;
+}(_react2.default.Component);
-function defaultMemoize(func) {
- var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;
+exports.default = Tabs;
+
+
+Tabs.propTypes = {
+ activeIndex: _propTypes2.default.number.isRequired,
+ children: _propTypes2.default.node,
+ className: _propTypes2.default.string,
+ onActivateTab: _propTypes2.default.func
+};
+
+Tabs.defaultProps = {
+ children: null,
+ className: undefined,
+ onActivateTab: function onActivateTab() {}
+};
+
+/***/ }),
- var lastArgs = null;
- var lastResult = null;
- // we reference arguments instead of spreading them for performance reasons
- return function () {
- if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
- // apply arguments instead of spreading for performance.
- lastResult = func.apply(null, arguments);
- }
+/***/ 3766:
+/***/ (function(module, exports, __webpack_require__) {
- lastArgs = arguments;
- return lastResult;
- };
-}
+"use strict";
-function getDependencies(funcs) {
- var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
- if (!dependencies.every(function (dep) {
- return typeof dep === 'function';
- })) {
- var dependencyTypes = dependencies.map(function (dep) {
- return typeof dep;
- }).join(', ');
- throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = uniqueId;
+var counter = 0;
- return dependencies;
+function uniqueId() {
+ counter += 1;
+ return "$rac$" + counter;
}
-function createSelectorCreator(memoize) {
- for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- memoizeOptions[_key - 1] = arguments[_key];
- }
-
- return function () {
- for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- funcs[_key2] = arguments[_key2];
- }
+/***/ }),
- var recomputations = 0;
- var resultFunc = funcs.pop();
- var dependencies = getDependencies(funcs);
+/***/ 3769:
+/***/ (function(module, exports, __webpack_require__) {
- var memoizedResultFunc = memoize.apply(undefined, [function () {
- recomputations++;
- // apply arguments instead of spreading for performance.
- return resultFunc.apply(null, arguments);
- }].concat(memoizeOptions));
+"use strict";
+/**
+ *
+ * Adapted from https://github.com/mozilla-b2g/gaia/blob/f09993563fb5fec4393eb71816ce76cb00463190/shared/js/async_storage.js
+ * (converted to use Promises instead of callbacks).
+ *
+ * This file defines an asynchronous version of the localStorage API, backed by
+ * an IndexedDB database. It creates a global asyncStorage object that has
+ * methods like the localStorage object.
+ *
+ * To store a value use setItem:
+ *
+ * asyncStorage.setItem("key", "value");
+ *
+ * This returns a promise in case you want confirmation that the value has been stored.
+ *
+ * asyncStorage.setItem("key", "newvalue").then(function() {
+ * console.log("new value stored");
+ * });
+ *
+ * To read a value, call getItem(), but note that you must wait for a promise
+ * resolution for the value to be retrieved.
+ *
+ * asyncStorage.getItem("key").then(function(value) {
+ * console.log("The value of key is:", value);
+ * });
+ *
+ * Note that unlike localStorage, asyncStorage does not allow you to store and
+ * retrieve values by setting and querying properties directly. You cannot just
+ * write asyncStorage.key; you have to explicitly call setItem() or getItem().
+ *
+ * removeItem(), clear(), length(), and key() are like the same-named methods of
+ * localStorage, and all return a promise.
+ *
+ * The asynchronous nature of getItem() makes it tricky to retrieve multiple
+ * values. But unlike localStorage, asyncStorage does not require the values you
+ * store to be strings. So if you need to save multiple values and want to
+ * retrieve them together, in a single asynchronous operation, just group the
+ * values into a single object. The properties of this object may not include
+ * DOM elements, but they may include things like Blobs and typed arrays.
+ *
+ */
- // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.
- var selector = memoize(function () {
- var params = [];
- var length = dependencies.length;
- for (var i = 0; i < length; i++) {
- // apply arguments instead of spreading and mutate a local list of params for performance.
- params.push(dependencies[i].apply(null, arguments));
- }
- // apply arguments instead of spreading for performance.
- return memoizedResultFunc.apply(null, params);
- });
+const DBNAME = "devtools-async-storage";
+const DBVERSION = 1;
+const STORENAME = "keyvaluepairs";
+var db = null;
- selector.resultFunc = resultFunc;
- selector.dependencies = dependencies;
- selector.recomputations = function () {
- return recomputations;
+function withStore(type, onsuccess, onerror) {
+ if (db) {
+ const transaction = db.transaction(STORENAME, type);
+ const store = transaction.objectStore(STORENAME);
+ onsuccess(store);
+ } else {
+ const openreq = indexedDB.open(DBNAME, DBVERSION);
+ openreq.onerror = function withStoreOnError() {
+ onerror();
};
- selector.resetRecomputations = function () {
- return recomputations = 0;
+ openreq.onupgradeneeded = function withStoreOnUpgradeNeeded() {
+ // First time setup: create an empty object store
+ openreq.result.createObjectStore(STORENAME);
};
- return selector;
- };
+ openreq.onsuccess = function withStoreOnSuccess() {
+ db = openreq.result;
+ const transaction = db.transaction(STORENAME, type);
+ const store = transaction.objectStore(STORENAME);
+ onsuccess(store);
+ };
+ }
}
-var createSelector = createSelectorCreator(defaultMemoize);
+function getItem(itemKey) {
+ return new Promise((resolve, reject) => {
+ let req;
+ withStore("readonly", store => {
+ store.transaction.oncomplete = function onComplete() {
+ let value = req.result;
+ if (value === undefined) {
+ value = null;
+ }
+ resolve(value);
+ };
+ req = store.get(itemKey);
+ req.onerror = function getItemOnError() {
+ reject("Error in asyncStorage.getItem(): ", req.error.name);
+ };
+ }, reject);
+ });
+}
-function createStructuredSelector(selectors) {
- var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;
+function setItem(itemKey, value) {
+ return new Promise((resolve, reject) => {
+ withStore("readwrite", store => {
+ store.transaction.oncomplete = resolve;
+ const req = store.put(value, itemKey);
+ req.onerror = function setItemOnError() {
+ reject("Error in asyncStorage.setItem(): ", req.error.name);
+ };
+ }, reject);
+ });
+}
- if (typeof selectors !== 'object') {
- throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));
- }
- var objectKeys = Object.keys(selectors);
- return selectorCreator(objectKeys.map(function (key) {
- return selectors[key];
- }), function () {
- for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
- values[_key3] = arguments[_key3];
+function removeItem(itemKey) {
+ return new Promise((resolve, reject) => {
+ withStore("readwrite", store => {
+ store.transaction.oncomplete = resolve;
+ const req = store.delete(itemKey);
+ req.onerror = function removeItemOnError() {
+ reject("Error in asyncStorage.removeItem(): ", req.error.name);
+ };
+ }, reject);
+ });
+}
+
+function clear() {
+ return new Promise((resolve, reject) => {
+ withStore("readwrite", store => {
+ store.transaction.oncomplete = resolve;
+ const req = store.clear();
+ req.onerror = function clearOnError() {
+ reject("Error in asyncStorage.clear(): ", req.error.name);
+ };
+ }, reject);
+ });
+}
+
+function length() {
+ return new Promise((resolve, reject) => {
+ let req;
+ withStore("readonly", store => {
+ store.transaction.oncomplete = function onComplete() {
+ resolve(req.result);
+ };
+ req = store.count();
+ req.onerror = function lengthOnError() {
+ reject("Error in asyncStorage.length(): ", req.error.name);
+ };
+ }, reject);
+ });
+}
+
+function key(n) {
+ return new Promise((resolve, reject) => {
+ if (n < 0) {
+ resolve(null);
+ return;
}
- return values.reduce(function (composition, value, index) {
- composition[objectKeys[index]] = value;
- return composition;
- }, {});
+ let req;
+ withStore("readonly", store => {
+ store.transaction.oncomplete = function onComplete() {
+ const cursor = req.result;
+ resolve(cursor ? cursor.key : null);
+ };
+ let advanced = false;
+ req = store.openCursor();
+ req.onsuccess = function keyOnSuccess() {
+ const cursor = req.result;
+ if (!cursor) {
+ // this means there weren"t enough keys
+ return;
+ }
+ if (n === 0 || advanced) {
+ // Either 1) we have the first key, return it if that's what they
+ // wanted, or 2) we"ve got the nth key.
+ return;
+ }
+
+ // Otherwise, ask the cursor to skip ahead n records
+ advanced = true;
+ cursor.advance(n);
+ };
+ req.onerror = function keyOnError() {
+ reject("Error in asyncStorage.key(): ", req.error.name);
+ };
+ }, reject);
});
}
-/***/ }),
-
-/***/ 3802:
-/***/ (function(module, exports, __webpack_require__) {
-
-const SplitBox = __webpack_require__(3803);
-
-module.exports = SplitBox;
+exports.getItem = getItem;
+exports.setItem = setItem;
+exports.removeItem = removeItem;
+exports.clear = clear;
+exports.length = length;
+exports.key = key;
/***/ }),
-/***/ 3803:
-/***/ (function(module, exports, __webpack_require__) {
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-
-const React = __webpack_require__(0);
-const ReactDOM = __webpack_require__(4);
-const Draggable = React.createFactory(__webpack_require__(3804));
-const { Component } = React;
-const PropTypes = __webpack_require__(3642);
-const dom = __webpack_require__(3643);
-
-__webpack_require__(3805);
+/***/ 3770:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+"use strict";
+Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyfill", function() { return polyfill; });
/**
- * This component represents a Splitter. The splitter supports vertical
- * as well as horizontal mode.
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
*/
-class SplitBox extends Component {
- static get propTypes() {
- return {
- // Custom class name. You can use more names separated by a space.
- className: PropTypes.string,
- // Initial size of controlled panel.
- initialSize: PropTypes.any,
- // Optional initial width of controlled panel.
- initialWidth: PropTypes.number,
- // Optional initial height of controlled panel.
- initialHeight: PropTypes.number,
- // Left/top panel
- startPanel: PropTypes.any,
- // Left/top panel collapse state.
- startPanelCollapsed: PropTypes.bool,
- // Min panel size.
- minSize: PropTypes.any,
- // Max panel size.
- maxSize: PropTypes.any,
- // Right/bottom panel
- endPanel: PropTypes.any,
- // Right/bottom panel collapse state.
- endPanelCollapsed: PropTypes.bool,
- // True if the right/bottom panel should be controlled.
- endPanelControl: PropTypes.bool,
- // Size of the splitter handle bar.
- splitterSize: PropTypes.number,
- // True if the splitter bar is vertical (default is vertical).
- vert: PropTypes.bool,
- // Optional style properties passed into the splitbox
- style: PropTypes.object,
- // Optional callback when splitbox resize stops
- onResizeEnd: PropTypes.func
- };
- }
-
- static get defaultProps() {
- return {
- splitterSize: 5,
- vert: true,
- endPanelControl: false,
- endPanelCollapsed: false,
- startPanelCollapsed: false
- };
- }
-
- constructor(props) {
- super(props);
- this.state = {
- vert: props.vert,
- // We use integers for these properties
- width: parseInt(props.initialWidth || props.initialSize, 10),
- height: parseInt(props.initialHeight || props.initialSize, 10)
- };
-
- this.onStartMove = this.onStartMove.bind(this);
- this.onStopMove = this.onStopMove.bind(this);
- this.onMove = this.onMove.bind(this);
- this.preparePanelStyles = this.preparePanelStyles.bind(this);
+function componentWillMount() {
+ // Call this.constructor.gDSFP to support sub-classes.
+ var state = this.constructor.getDerivedStateFromProps(this.props, this.state);
+ if (state !== null && state !== undefined) {
+ this.setState(state);
}
+}
- componentWillReceiveProps(nextProps) {
- if (this.props.vert !== nextProps.vert) {
- this.setState({ vert: nextProps.vert });
- }
- if (this.props.initialSize !== nextProps.initialSize || this.props.initialWidth !== nextProps.initialWidth || this.props.initialHeight !== nextProps.initialHeight) {
- this.setState({
- width: parseInt(nextProps.initialWidth || nextProps.initialSize, 10),
- height: parseInt(nextProps.initialHeight || nextProps.initialSize, 10)
- });
- }
+function componentWillReceiveProps(nextProps) {
+ // Call this.constructor.gDSFP to support sub-classes.
+ // Use the setState() updater to ensure state isn't stale in certain edge cases.
+ function updater(prevState) {
+ var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);
+ return state !== null && state !== undefined ? state : null;
}
+ // Binding "this" is important for shallow renderer support.
+ this.setState(updater.bind(this));
+}
- // Dragging Events
-
- /**
- * Set 'resizing' cursor on entire document during splitter dragging.
- * This avoids cursor-flickering that happens when the mouse leaves
- * the splitter bar area (happens frequently).
- */
- onStartMove() {
- const splitBox = ReactDOM.findDOMNode(this);
- const doc = splitBox.ownerDocument;
- const defaultCursor = doc.documentElement.style.cursor;
- doc.documentElement.style.cursor = this.state.vert ? "ew-resize" : "ns-resize";
-
- splitBox.classList.add("dragging");
- document.dispatchEvent(new CustomEvent("drag:start"));
-
- this.setState({
- defaultCursor: defaultCursor
- });
+function componentWillUpdate(nextProps, nextState) {
+ try {
+ var prevProps = this.props;
+ var prevState = this.state;
+ this.props = nextProps;
+ this.state = nextState;
+ this.__reactInternalSnapshotFlag = true;
+ this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(
+ prevProps,
+ prevState
+ );
+ } finally {
+ this.props = prevProps;
+ this.state = prevState;
}
+}
- onStopMove() {
- const splitBox = ReactDOM.findDOMNode(this);
- const doc = splitBox.ownerDocument;
- doc.documentElement.style.cursor = this.state.defaultCursor;
+// React may warn about cWM/cWRP/cWU methods being deprecated.
+// Add a flag to suppress these warnings for this special case.
+componentWillMount.__suppressDeprecationWarning = true;
+componentWillReceiveProps.__suppressDeprecationWarning = true;
+componentWillUpdate.__suppressDeprecationWarning = true;
- splitBox.classList.remove("dragging");
- document.dispatchEvent(new CustomEvent("drag:end"));
+function polyfill(Component) {
+ var prototype = Component.prototype;
- if (this.props.onResizeEnd) {
- this.props.onResizeEnd(this.state.vert ? this.state.width : this.state.height);
- }
+ if (!prototype || !prototype.isReactComponent) {
+ throw new Error('Can only polyfill class components');
}
- /**
- * Adjust size of the controlled panel. Depending on the current
- * orientation we either remember the width or height of
- * the splitter box.
- */
- onMove({ movementX, movementY }) {
- const node = ReactDOM.findDOMNode(this);
- const doc = node.ownerDocument;
-
- if (this.props.endPanelControl) {
- // For the end panel we need to increase the width/height when the
- // movement is towards the left/top.
- movementX = -movementX;
- movementY = -movementY;
- }
-
- if (this.state.vert) {
- const isRtl = doc.dir === "rtl";
- if (isRtl) {
- // In RTL we need to reverse the movement again -- but only for vertical
- // splitters
- movementX = -movementX;
- }
-
- this.setState((state, props) => ({
- width: state.width + movementX
- }));
- } else {
- this.setState((state, props) => ({
- height: state.height + movementY
- }));
- }
+ if (
+ typeof Component.getDerivedStateFromProps !== 'function' &&
+ typeof prototype.getSnapshotBeforeUpdate !== 'function'
+ ) {
+ return Component;
}
- // Rendering
- preparePanelStyles() {
- const vert = this.state.vert;
- const {
- minSize,
- maxSize,
- startPanelCollapsed,
- endPanelControl,
- endPanelCollapsed
- } = this.props;
- let leftPanelStyle, rightPanelStyle;
-
- // Set proper size for panels depending on the current state.
- if (vert) {
- const startWidth = endPanelControl ? null : this.state.width,
- endWidth = endPanelControl ? this.state.width : null;
-
- leftPanelStyle = {
- maxWidth: endPanelControl ? null : maxSize,
- minWidth: endPanelControl ? null : minSize,
- width: startPanelCollapsed ? 0 : startWidth
- };
- rightPanelStyle = {
- maxWidth: endPanelControl ? maxSize : null,
- minWidth: endPanelControl ? minSize : null,
- width: endPanelCollapsed ? 0 : endWidth
- };
- } else {
- const startHeight = endPanelControl ? null : this.state.height,
- endHeight = endPanelControl ? this.state.height : null;
-
- leftPanelStyle = {
- maxHeight: endPanelControl ? null : maxSize,
- minHeight: endPanelControl ? null : minSize,
- height: endPanelCollapsed ? maxSize : startHeight
- };
- rightPanelStyle = {
- maxHeight: endPanelControl ? maxSize : null,
- minHeight: endPanelControl ? minSize : null,
- height: startPanelCollapsed ? maxSize : endHeight
- };
- }
-
- return { leftPanelStyle, rightPanelStyle };
+ // If new component APIs are defined, "unsafe" lifecycles won't be called.
+ // Error if any of these lifecycles are present,
+ // Because they would work differently between older and newer (16.3+) versions of React.
+ var foundWillMountName = null;
+ var foundWillReceivePropsName = null;
+ var foundWillUpdateName = null;
+ if (typeof prototype.componentWillMount === 'function') {
+ foundWillMountName = 'componentWillMount';
+ } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {
+ foundWillMountName = 'UNSAFE_componentWillMount';
+ }
+ if (typeof prototype.componentWillReceiveProps === 'function') {
+ foundWillReceivePropsName = 'componentWillReceiveProps';
+ } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {
+ foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
}
+ if (typeof prototype.componentWillUpdate === 'function') {
+ foundWillUpdateName = 'componentWillUpdate';
+ } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {
+ foundWillUpdateName = 'UNSAFE_componentWillUpdate';
+ }
+ if (
+ foundWillMountName !== null ||
+ foundWillReceivePropsName !== null ||
+ foundWillUpdateName !== null
+ ) {
+ var componentName = Component.displayName || Component.name;
+ var newApiName =
+ typeof Component.getDerivedStateFromProps === 'function'
+ ? 'getDerivedStateFromProps()'
+ : 'getSnapshotBeforeUpdate()';
- render() {
- const vert = this.state.vert;
- const {
- startPanelCollapsed,
- startPanel,
- endPanel,
- endPanelControl,
- splitterSize,
- endPanelCollapsed
- } = this.props;
+ throw Error(
+ 'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' +
+ componentName +
+ ' uses ' +
+ newApiName +
+ ' but also contains the following legacy lifecycles:' +
+ (foundWillMountName !== null ? '\n ' + foundWillMountName : '') +
+ (foundWillReceivePropsName !== null
+ ? '\n ' + foundWillReceivePropsName
+ : '') +
+ (foundWillUpdateName !== null ? '\n ' + foundWillUpdateName : '') +
+ '\n\nThe above lifecycles should be removed. Learn more about this warning here:\n' +
+ 'https://fb.me/react-async-component-lifecycle-hooks'
+ );
+ }
- const style = Object.assign({}, this.props.style);
+ // React <= 16.2 does not support static getDerivedStateFromProps.
+ // As a workaround, use cWM and cWRP to invoke the new static lifecycle.
+ // Newer versions of React will ignore these lifecycles if gDSFP exists.
+ if (typeof Component.getDerivedStateFromProps === 'function') {
+ prototype.componentWillMount = componentWillMount;
+ prototype.componentWillReceiveProps = componentWillReceiveProps;
+ }
- // Calculate class names list.
- let classNames = ["split-box"];
- classNames.push(vert ? "vert" : "horz");
- if (this.props.className) {
- classNames = classNames.concat(this.props.className.split(" "));
+ // React <= 16.2 does not support getSnapshotBeforeUpdate.
+ // As a workaround, use cWU to invoke the new lifecycle.
+ // Newer versions of React will ignore that lifecycle if gSBU exists.
+ if (typeof prototype.getSnapshotBeforeUpdate === 'function') {
+ if (typeof prototype.componentDidUpdate !== 'function') {
+ throw new Error(
+ 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'
+ );
}
- const { leftPanelStyle, rightPanelStyle } = this.preparePanelStyles();
+ prototype.componentWillUpdate = componentWillUpdate;
- // Calculate splitter size
- const splitterStyle = {
- flex: `0 0 ${splitterSize}px`
- };
+ var componentDidUpdate = prototype.componentDidUpdate;
- return dom.div({
- className: classNames.join(" "),
- style: style
- }, !startPanelCollapsed ? dom.div({
- className: endPanelControl ? "uncontrolled" : "controlled",
- style: leftPanelStyle
- }, startPanel) : null, Draggable({
- className: "splitter",
- style: splitterStyle,
- onStart: this.onStartMove,
- onStop: this.onStopMove,
- onMove: this.onMove
- }), !endPanelCollapsed ? dom.div({
- className: endPanelControl ? "controlled" : "uncontrolled",
- style: rightPanelStyle
- }, endPanel) : null);
+ prototype.componentDidUpdate = function componentDidUpdatePolyfill(
+ prevProps,
+ prevState,
+ maybeSnapshot
+ ) {
+ // 16.3+ will not execute our will-update method;
+ // It will pass a snapshot value to did-update though.
+ // Older versions will require our polyfilled will-update value.
+ // We need to handle both cases, but can't just check for the presence of "maybeSnapshot",
+ // Because for <= 15.x versions this might be a "prevContext" object.
+ // We also can't just check "__reactInternalSnapshot",
+ // Because get-snapshot might return a falsy value.
+ // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.
+ var snapshot = this.__reactInternalSnapshotFlag
+ ? this.__reactInternalSnapshot
+ : maybeSnapshot;
+
+ componentDidUpdate.call(this, prevProps, prevState, snapshot);
+ };
}
+
+ return Component;
}
-module.exports = SplitBox;
+
+
/***/ }),
-/***/ 3804:
+/***/ 3784:
/***/ (function(module, exports, __webpack_require__) {
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+"use strict";
-const React = __webpack_require__(0);
-const ReactDOM = __webpack_require__(4);
-const { Component } = React;
-const PropTypes = __webpack_require__(3642);
-const dom = __webpack_require__(3643);
-class Draggable extends Component {
- static get propTypes() {
- return {
- onMove: PropTypes.func.isRequired,
- onStart: PropTypes.func,
- onStop: PropTypes.func,
- style: PropTypes.object,
- className: PropTypes.string
- };
- }
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- constructor(props) {
- super(props);
- this.startDragging = this.startDragging.bind(this);
- this.onMove = this.onMove.bind(this);
- this.onUp = this.onUp.bind(this);
- }
+var _propTypes = __webpack_require__(3642);
- startDragging(ev) {
- ev.preventDefault();
- const doc = ReactDOM.findDOMNode(this).ownerDocument;
- doc.addEventListener("mousemove", this.onMove);
- doc.addEventListener("mouseup", this.onUp);
- this.props.onStart && this.props.onStart();
- }
+var _propTypes2 = _interopRequireDefault(_propTypes);
- onMove(ev) {
- ev.preventDefault();
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // When the target is outside of the document, its tagName is undefined
- if (!ev.target.tagName) {
- return;
- }
+exports.default = _propTypes2.default.object;
- // We pass the whole event because we don't know which properties
- // the callee needs.
- this.props.onMove(ev);
- }
+/***/ }),
- onUp(ev) {
- ev.preventDefault();
- const doc = ReactDOM.findDOMNode(this).ownerDocument;
- doc.removeEventListener("mousemove", this.onMove);
- doc.removeEventListener("mouseup", this.onUp);
- this.props.onStop && this.props.onStop();
- }
+/***/ 3791:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
- render() {
- return dom.div({
- style: this.props.style,
- className: this.props.className,
- onMouseDown: this.startDragging
- });
- }
+"use strict";
+Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
+/* harmony export (immutable) */ __webpack_exports__["defaultMemoize"] = defaultMemoize;
+/* harmony export (immutable) */ __webpack_exports__["createSelectorCreator"] = createSelectorCreator;
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSelector", function() { return createSelector; });
+/* harmony export (immutable) */ __webpack_exports__["createStructuredSelector"] = createStructuredSelector;
+function defaultEqualityCheck(a, b) {
+ return a === b;
}
-module.exports = Draggable;
-
-/***/ }),
+function areArgumentsShallowlyEqual(equalityCheck, prev, next) {
+ if (prev === null || next === null || prev.length !== next.length) {
+ return false;
+ }
-/***/ 3805:
-/***/ (function(module, exports) {
+ // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.
+ var length = prev.length;
+ for (var i = 0; i < length; i++) {
+ if (!equalityCheck(prev[i], next[i])) {
+ return false;
+ }
+ }
-// removed by extract-text-webpack-plugin
+ return true;
+}
-/***/ }),
+function defaultMemoize(func) {
+ var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;
-/***/ 3841:
-/***/ (function(module, exports, __webpack_require__) {
+ var lastArgs = null;
+ var lastResult = null;
+ // we reference arguments instead of spreading them for performance reasons
+ return function () {
+ if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
+ // apply arguments instead of spreading for performance.
+ lastResult = func.apply(null, arguments);
+ }
-"use strict";
+ lastArgs = arguments;
+ return lastResult;
+ };
+}
+function getDependencies(funcs) {
+ var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;
-var _svgInlineReact = __webpack_require__(1763);
+ if (!dependencies.every(function (dep) {
+ return typeof dep === 'function';
+ })) {
+ var dependencyTypes = dependencies.map(function (dep) {
+ return typeof dep;
+ }).join(', ');
+ throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));
+ }
-var _svgInlineReact2 = _interopRequireDefault(_svgInlineReact);
+ return dependencies;
+}
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function createSelectorCreator(memoize) {
+ for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ memoizeOptions[_key - 1] = arguments[_key];
+ }
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ return function () {
+ for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ funcs[_key2] = arguments[_key2];
+ }
-const React = __webpack_require__(0);
+ var recomputations = 0;
+ var resultFunc = funcs.pop();
+ var dependencies = getDependencies(funcs);
+ var memoizedResultFunc = memoize.apply(undefined, [function () {
+ recomputations++;
+ // apply arguments instead of spreading for performance.
+ return resultFunc.apply(null, arguments);
+ }].concat(memoizeOptions));
-const svg = {
- breakpoint: __webpack_require__(3842),
- "column-marker": __webpack_require__(3843),
- "magnifying-glass": __webpack_require__(3844)
-};
+ // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.
+ var selector = memoize(function () {
+ var params = [];
+ var length = dependencies.length;
-function Svg({ name, className, onClick, "aria-label": ariaLabel }) {
- if (!svg[name]) {
- const error = `Unknown SVG: ${name}`;
- console.warn(error);
- return null;
- }
+ for (var i = 0; i < length; i++) {
+ // apply arguments instead of spreading and mutate a local list of params for performance.
+ params.push(dependencies[i].apply(null, arguments));
+ }
- className = `${name} ${className || ""}`;
- if (name === "subSettings") {
- className = "";
- }
+ // apply arguments instead of spreading for performance.
+ return memoizedResultFunc.apply(null, params);
+ });
- const props = {
- className,
- onClick,
- ["aria-label"]: ariaLabel,
- src: svg[name]
+ selector.resultFunc = resultFunc;
+ selector.dependencies = dependencies;
+ selector.recomputations = function () {
+ return recomputations;
+ };
+ selector.resetRecomputations = function () {
+ return recomputations = 0;
+ };
+ return selector;
};
-
- return React.createElement(_svgInlineReact2.default, props);
}
-Svg.displayName = "Svg";
-
-module.exports = Svg;
+var createSelector = createSelectorCreator(defaultMemoize);
-/***/ }),
+function createStructuredSelector(selectors) {
+ var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;
-/***/ 3842:
-/***/ (function(module, exports) {
+ if (typeof selectors !== 'object') {
+ throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));
+ }
+ var objectKeys = Object.keys(selectors);
+ return selectorCreator(objectKeys.map(function (key) {
+ return selectors[key];
+ }), function () {
+ for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ values[_key3] = arguments[_key3];
+ }
-module.exports = " "
+ return values.reduce(function (composition, value, index) {
+ composition[objectKeys[index]] = value;
+ return composition;
+ }, {});
+ });
+}
/***/ }),
-/***/ 3843:
-/***/ (function(module, exports) {
+/***/ 3802:
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = " "
+const SplitBox = __webpack_require__(3803);
+
+module.exports = SplitBox;
/***/ }),
-/***/ 3844:
-/***/ (function(module, exports) {
+/***/ 3803:
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = " "
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
-/***/ }),
+const React = __webpack_require__(0);
+const ReactDOM = __webpack_require__(4);
+const Draggable = React.createFactory(__webpack_require__(3804));
+const { Component } = React;
+const PropTypes = __webpack_require__(3642);
+const dom = __webpack_require__(3643);
-/***/ 4:
-/***/ (function(module, exports) {
+__webpack_require__(3805);
-module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
+/**
+ * This component represents a Splitter. The splitter supports vertical
+ * as well as horizontal mode.
+ */
+class SplitBox extends Component {
+ static get propTypes() {
+ return {
+ // Custom class name. You can use more names separated by a space.
+ className: PropTypes.string,
+ // Initial size of controlled panel.
+ initialSize: PropTypes.any,
+ // Optional initial width of controlled panel.
+ initialWidth: PropTypes.number,
+ // Optional initial height of controlled panel.
+ initialHeight: PropTypes.number,
+ // Left/top panel
+ startPanel: PropTypes.any,
+ // Left/top panel collapse state.
+ startPanelCollapsed: PropTypes.bool,
+ // Min panel size.
+ minSize: PropTypes.any,
+ // Max panel size.
+ maxSize: PropTypes.any,
+ // Right/bottom panel
+ endPanel: PropTypes.any,
+ // Right/bottom panel collapse state.
+ endPanelCollapsed: PropTypes.bool,
+ // True if the right/bottom panel should be controlled.
+ endPanelControl: PropTypes.bool,
+ // Size of the splitter handle bar.
+ splitterSize: PropTypes.number,
+ // True if the splitter bar is vertical (default is vertical).
+ vert: PropTypes.bool,
+ // Optional style properties passed into the splitbox
+ style: PropTypes.object,
+ // Optional callback when splitbox resize stops
+ onResizeEnd: PropTypes.func
+ };
+ }
-/***/ }),
+ static get defaultProps() {
+ return {
+ splitterSize: 5,
+ vert: true,
+ endPanelControl: false,
+ endPanelCollapsed: false,
+ startPanelCollapsed: false
+ };
+ }
-/***/ 52:
-/***/ (function(module, exports) {
+ constructor(props) {
+ super(props);
-module.exports = __WEBPACK_EXTERNAL_MODULE_52__;
+ this.state = {
+ vert: props.vert,
+ // We use integers for these properties
+ width: parseInt(props.initialWidth || props.initialSize, 10),
+ height: parseInt(props.initialHeight || props.initialSize, 10)
+ };
-/***/ }),
+ this.onStartMove = this.onStartMove.bind(this);
+ this.onStopMove = this.onStopMove.bind(this);
+ this.onMove = this.onMove.bind(this);
+ this.preparePanelStyles = this.preparePanelStyles.bind(this);
+ }
-/***/ 792:
-/***/ (function(module, exports) {
+ componentWillReceiveProps(nextProps) {
+ if (this.props.vert !== nextProps.vert) {
+ this.setState({ vert: nextProps.vert });
+ }
+ if (this.props.initialSize !== nextProps.initialSize || this.props.initialWidth !== nextProps.initialWidth || this.props.initialHeight !== nextProps.initialHeight) {
+ this.setState({
+ width: parseInt(nextProps.initialWidth || nextProps.initialSize, 10),
+ height: parseInt(nextProps.initialHeight || nextProps.initialSize, 10)
+ });
+ }
+ }
-var g;
-
-// This works in non-strict mode
-g = (function() {
- return this;
-})();
-
-try {
- // This works if eval is allowed (see CSP)
- g = g || Function("return this")() || (1,eval)("this");
-} catch(e) {
- // This works if the window reference is available
- if(typeof window === "object")
- g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
+ // Dragging Events
+ /**
+ * Set 'resizing' cursor on entire document during splitter dragging.
+ * This avoids cursor-flickering that happens when the mouse leaves
+ * the splitter bar area (happens frequently).
+ */
+ onStartMove() {
+ const splitBox = ReactDOM.findDOMNode(this);
+ const doc = splitBox.ownerDocument;
+ const defaultCursor = doc.documentElement.style.cursor;
+ doc.documentElement.style.cursor = this.state.vert ? "ew-resize" : "ns-resize";
-/***/ }),
+ splitBox.classList.add("dragging");
+ document.dispatchEvent(new CustomEvent("drag:start"));
-/***/ 793:
-/***/ (function(module, exports) {
+ this.setState({
+ defaultCursor: defaultCursor
+ });
+ }
-module.exports = function(module) {
- if(!module.webpackPolyfill) {
- module.deprecate = function() {};
- module.paths = [];
- // module.parent = undefined by default
- if(!module.children) module.children = [];
- Object.defineProperty(module, "loaded", {
- enumerable: true,
- get: function() {
- return module.l;
- }
- });
- Object.defineProperty(module, "id", {
- enumerable: true,
- get: function() {
- return module.i;
- }
- });
- module.webpackPolyfill = 1;
- }
- return module;
-};
+ onStopMove() {
+ const splitBox = ReactDOM.findDOMNode(this);
+ const doc = splitBox.ownerDocument;
+ doc.documentElement.style.cursor = this.state.defaultCursor;
+ splitBox.classList.remove("dragging");
+ document.dispatchEvent(new CustomEvent("drag:end"));
-/***/ }),
+ if (this.props.onResizeEnd) {
+ this.props.onResizeEnd(this.state.vert ? this.state.width : this.state.height);
+ }
+ }
-/***/ 916:
-/***/ (function(module, exports, __webpack_require__) {
+ /**
+ * Adjust size of the controlled panel. Depending on the current
+ * orientation we either remember the width or height of
+ * the splitter box.
+ */
+ onMove({ movementX, movementY }) {
+ const node = ReactDOM.findDOMNode(this);
+ const doc = node.ownerDocument;
-/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */
-;(function(root) {
+ if (this.props.endPanelControl) {
+ // For the end panel we need to increase the width/height when the
+ // movement is towards the left/top.
+ movementX = -movementX;
+ movementY = -movementY;
+ }
- /** Detect free variables */
- var freeExports = typeof exports == 'object' && exports &&
- !exports.nodeType && exports;
- var freeModule = typeof module == 'object' && module &&
- !module.nodeType && module;
- var freeGlobal = typeof global == 'object' && global;
- if (
- freeGlobal.global === freeGlobal ||
- freeGlobal.window === freeGlobal ||
- freeGlobal.self === freeGlobal
- ) {
- root = freeGlobal;
- }
+ if (this.state.vert) {
+ const isRtl = doc.dir === "rtl";
+ if (isRtl) {
+ // In RTL we need to reverse the movement again -- but only for vertical
+ // splitters
+ movementX = -movementX;
+ }
- /**
- * The `punycode` object.
- * @name punycode
- * @type Object
- */
- var punycode,
+ this.setState((state, props) => ({
+ width: state.width + movementX
+ }));
+ } else {
+ this.setState((state, props) => ({
+ height: state.height + movementY
+ }));
+ }
+ }
- /** Highest positive signed 32-bit float value */
- maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
+ // Rendering
+ preparePanelStyles() {
+ const vert = this.state.vert;
+ const {
+ minSize,
+ maxSize,
+ startPanelCollapsed,
+ endPanelControl,
+ endPanelCollapsed
+ } = this.props;
+ let leftPanelStyle, rightPanelStyle;
- /** Bootstring parameters */
- base = 36,
- tMin = 1,
- tMax = 26,
- skew = 38,
- damp = 700,
- initialBias = 72,
- initialN = 128, // 0x80
- delimiter = '-', // '\x2D'
+ // Set proper size for panels depending on the current state.
+ if (vert) {
+ const startWidth = endPanelControl ? null : this.state.width,
+ endWidth = endPanelControl ? this.state.width : null;
- /** Regular expressions */
- regexPunycode = /^xn--/,
- regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
- regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
+ leftPanelStyle = {
+ maxWidth: endPanelControl ? null : maxSize,
+ minWidth: endPanelControl ? null : minSize,
+ width: startPanelCollapsed ? 0 : startWidth
+ };
+ rightPanelStyle = {
+ maxWidth: endPanelControl ? maxSize : null,
+ minWidth: endPanelControl ? minSize : null,
+ width: endPanelCollapsed ? 0 : endWidth
+ };
+ } else {
+ const startHeight = endPanelControl ? null : this.state.height,
+ endHeight = endPanelControl ? this.state.height : null;
- /** Error messages */
- errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
- },
+ leftPanelStyle = {
+ maxHeight: endPanelControl ? null : maxSize,
+ minHeight: endPanelControl ? null : minSize,
+ height: endPanelCollapsed ? maxSize : startHeight
+ };
+ rightPanelStyle = {
+ maxHeight: endPanelControl ? maxSize : null,
+ minHeight: endPanelControl ? minSize : null,
+ height: startPanelCollapsed ? maxSize : endHeight
+ };
+ }
- /** Convenience shortcuts */
- baseMinusTMin = base - tMin,
- floor = Math.floor,
- stringFromCharCode = String.fromCharCode,
+ return { leftPanelStyle, rightPanelStyle };
+ }
- /** Temporary variable */
- key;
+ render() {
+ const vert = this.state.vert;
+ const {
+ startPanelCollapsed,
+ startPanel,
+ endPanel,
+ endPanelControl,
+ splitterSize,
+ endPanelCollapsed
+ } = this.props;
- /*--------------------------------------------------------------------------*/
+ const style = Object.assign({}, this.props.style);
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
+ // Calculate class names list.
+ let classNames = ["split-box"];
+ classNames.push(vert ? "vert" : "horz");
+ if (this.props.className) {
+ classNames = classNames.concat(this.props.className.split(" "));
+ }
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
+ const { leftPanelStyle, rightPanelStyle } = this.preparePanelStyles();
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
+ // Calculate splitter size
+ const splitterStyle = {
+ flex: `0 0 ${splitterSize}px`
+ };
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
+ return dom.div({
+ className: classNames.join(" "),
+ style: style
+ }, !startPanelCollapsed ? dom.div({
+ className: endPanelControl ? "uncontrolled" : "controlled",
+ style: leftPanelStyle
+ }, startPanel) : null, Draggable({
+ className: "splitter",
+ style: splitterStyle,
+ onStart: this.onStartMove,
+ onStop: this.onStopMove,
+ onMove: this.onMove
+ }), !endPanelCollapsed ? dom.div({
+ className: endPanelControl ? "controlled" : "uncontrolled",
+ style: rightPanelStyle
+ }, endPanel) : null);
+ }
+}
- /**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
- function ucs2encode(array) {
- return map(array, function(value) {
- var output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += stringFromCharCode(value);
- return output;
- }).join('');
- }
+module.exports = SplitBox;
- /**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
- function basicToDigit(codePoint) {
- if (codePoint - 48 < 10) {
- return codePoint - 22;
- }
- if (codePoint - 65 < 26) {
- return codePoint - 65;
- }
- if (codePoint - 97 < 26) {
- return codePoint - 97;
- }
- return base;
- }
+/***/ }),
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
+/***/ 3804:
+/***/ (function(module, exports, __webpack_require__) {
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- /**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
- function decode(input) {
- // Don't use UCS-2
- var output = [],
- inputLength = input.length,
- out,
- i = 0,
- n = initialN,
- bias = initialBias,
- basic,
- j,
- index,
- oldi,
- w,
- k,
- digit,
- t,
- /** Cached calculation results */
- baseMinusT;
+const React = __webpack_require__(0);
+const ReactDOM = __webpack_require__(4);
+const { Component } = React;
+const PropTypes = __webpack_require__(3642);
+const dom = __webpack_require__(3643);
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
+class Draggable extends Component {
+ static get propTypes() {
+ return {
+ onMove: PropTypes.func.isRequired,
+ onStart: PropTypes.func,
+ onStop: PropTypes.func,
+ style: PropTypes.object,
+ className: PropTypes.string
+ };
+ }
- basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
+ constructor(props) {
+ super(props);
+ this.startDragging = this.startDragging.bind(this);
+ this.onMove = this.onMove.bind(this);
+ this.onUp = this.onUp.bind(this);
+ }
- for (j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
+ startDragging(ev) {
+ ev.preventDefault();
+ const doc = ReactDOM.findDOMNode(this).ownerDocument;
+ doc.addEventListener("mousemove", this.onMove);
+ doc.addEventListener("mouseup", this.onUp);
+ this.props.onStart && this.props.onStart();
+ }
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
+ onMove(ev) {
+ ev.preventDefault();
- for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+ // When the target is outside of the document, its tagName is undefined
+ if (!ev.target.tagName) {
+ return;
+ }
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
+ // We pass the whole event because we don't know which properties
+ // the callee needs.
+ this.props.onMove(ev);
+ }
- if (index >= inputLength) {
- error('invalid-input');
- }
+ onUp(ev) {
+ ev.preventDefault();
+ const doc = ReactDOM.findDOMNode(this).ownerDocument;
+ doc.removeEventListener("mousemove", this.onMove);
+ doc.removeEventListener("mouseup", this.onUp);
+ this.props.onStop && this.props.onStop();
+ }
- digit = basicToDigit(input.charCodeAt(index++));
+ render() {
+ return dom.div({
+ style: this.props.style,
+ className: this.props.className,
+ onMouseDown: this.startDragging
+ });
+ }
+}
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
+module.exports = Draggable;
- i += digit * w;
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+/***/ }),
- if (digit < t) {
- break;
- }
+/***/ 3805:
+/***/ (function(module, exports) {
- baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
+// removed by extract-text-webpack-plugin
- w *= baseMinusT;
+/***/ }),
- }
+/***/ 3841:
+/***/ (function(module, exports, __webpack_require__) {
- out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
+"use strict";
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
- n += floor(i / out);
- i %= out;
+var _svgInlineReact = __webpack_require__(1763);
- // Insert `n` at position `i` of the output
- output.splice(i++, 0, n);
+var _svgInlineReact2 = _interopRequireDefault(_svgInlineReact);
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- return ucs2encode(output);
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+
+const React = __webpack_require__(0);
+
+
+const svg = {
+ breakpoint: __webpack_require__(3842),
+ "column-marker": __webpack_require__(3843),
+ "magnifying-glass": __webpack_require__(3844)
+};
+
+function Svg({ name, className, onClick, "aria-label": ariaLabel }) {
+ if (!svg[name]) {
+ const error = `Unknown SVG: ${name}`;
+ console.warn(error);
+ return null;
+ }
+
+ className = `${name} ${className || ""}`;
+ if (name === "subSettings") {
+ className = "";
+ }
+
+ const props = {
+ className,
+ onClick,
+ ["aria-label"]: ariaLabel,
+ src: svg[name]
+ };
+
+ return React.createElement(_svgInlineReact2.default, props);
+}
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT;
+Svg.displayName = "Svg";
- // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input);
+module.exports = Svg;
- // Cache the length
- inputLength = input.length;
+/***/ }),
- // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias;
+/***/ 3842:
+/***/ (function(module, exports) {
- // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
+module.exports = " "
- handledCPCount = basicLength = output.length;
+/***/ }),
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
+/***/ 3843:
+/***/ (function(module, exports) {
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- }
+module.exports = " "
- // Main encoding loop:
- while (handledCPCount < inputLength) {
+/***/ }),
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
+/***/ 3844:
+/***/ (function(module, exports) {
- // Increase `delta` enough to advance the decoder's state to ,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
+module.exports = " "
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
+/***/ }),
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
+/***/ 4:
+/***/ (function(module, exports) {
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
+module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (q = delta, k = base; /* no condition */; k += base) {
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
+/***/ }),
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
+/***/ 52:
+/***/ (function(module, exports) {
- ++delta;
- ++n;
+module.exports = __WEBPACK_EXTERNAL_MODULE_52__;
- }
- return output.join('');
- }
+/***/ }),
- /**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
- function toUnicode(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
- }
+/***/ 792:
+/***/ (function(module, exports) {
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
- }
+var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
- /*--------------------------------------------------------------------------*/
- /** Define the public API */
- punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '1.4.1',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
- };
+/***/ }),
- /** Expose `punycode` */
- // Some AMD build optimizers, like r.js, check for specific condition patterns
- // like the following:
- if (
- true
- ) {
- !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
- return punycode;
- }).call(exports, __webpack_require__, exports, module),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else if (freeExports && freeModule) {
- if (module.exports == freeExports) {
- // in Node.js, io.js, or RingoJS v0.8.0+
- freeModule.exports = punycode;
- } else {
- // in Narwhal or RingoJS v0.7.0-
- for (key in punycode) {
- punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
- }
- }
- } else {
- // in Rhino or a web browser
- root.punycode = punycode;
- }
+/***/ 793:
+/***/ (function(module, exports) {
-}(this));
+module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ if(!module.children) module.children = [];
+ Object.defineProperty(module, "loaded", {
+ enumerable: true,
+ get: function() {
+ return module.l;
+ }
+ });
+ Object.defineProperty(module, "id", {
+ enumerable: true,
+ get: function() {
+ return module.i;
+ }
+ });
+ module.webpackPolyfill = 1;
+ }
+ return module;
+};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(793)(module), __webpack_require__(792)))
/***/ })
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/moz.build firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/moz.build
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/moz.build 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/moz.build 2019-02-07 12:50:26.000000000 +0000
@@ -42,6 +42,8 @@
'next.svg',
'nextjs.svg',
'nuxtjs.svg',
+ 'pane-collapse.svg',
+ 'pane-expand.svg',
'pause.svg',
'plus.svg',
'preact.svg',
@@ -58,7 +60,6 @@
'stepOut.svg',
'stepOver.svg',
'tab.svg',
- 'toggle-panes.svg',
'typescript.svg',
'underscore.svg',
'vuejs.svg',
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/pane-collapse.svg firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/pane-collapse.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/pane-collapse.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/pane-collapse.svg 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,7 @@
+
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/pane-expand.svg firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/pane-expand.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/pane-expand.svg 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/pane-expand.svg 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,7 @@
+
+
+
+
+
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/toggle-panes.svg firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/toggle-panes.svg
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/images/toggle-panes.svg 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/images/toggle-panes.svg 1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-
-
-
-
-
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/README.mozilla firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/README.mozilla
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/README.mozilla 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/README.mozilla 2019-02-07 12:50:26.000000000 +0000
@@ -1,9 +1,9 @@
This is the debugger.html project output.
See https://github.com/devtools-html/debugger.html
-Version 122
+Version 123
-Comparison: https://github.com/devtools-html/debugger.html/compare/release-121...release-122
+Comparison: https://github.com/devtools-html/debugger.html/compare/release-122...release-123
Packages:
- babel-plugin-transform-es2015-modules-commonjs @6.26.2
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/ast/setInScopeLines.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/ast/setInScopeLines.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/ast/setInScopeLines.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/ast/setInScopeLines.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,12 +2,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { getOutOfScopeLocations, getSelectedSource } from "../../selectors";
import { getSourceLineCount } from "../../utils/source";
import { range, flatMap, uniq, without } from "lodash";
-function getOutOfScopeLines(outOfScopeLocations: AstLocation[]) {
+import type { ASTLocation } from "../../types";
+import type { ThunkArgs } from "../types";
+
+function getOutOfScopeLines(outOfScopeLocations: ASTLocation[]) {
if (!outOfScopeLocations) {
return null;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/navigation.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/navigation.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/navigation.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/navigation.js 2019-02-07 12:50:26.000000000 +0000
@@ -33,8 +33,8 @@
* @static
*/
export function willNavigate(event: Object) {
- return async function({ dispatch, getState, client, sourceMaps }: ThunkArgs) {
- await sourceMaps.clearSourceMaps();
+ return function({ dispatch, getState, client, sourceMaps }: ThunkArgs) {
+ sourceMaps.clearSourceMaps();
clearWasmStates();
clearDocuments();
clearSymbols();
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/pause/mapFrames.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/pause/mapFrames.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/pause/mapFrames.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/pause/mapFrames.js 2019-02-07 12:50:26.000000000 +0000
@@ -139,6 +139,7 @@
thread: originalFrame.thread,
displayName: originalFrame.displayName,
location: originalFrame.location,
+ source: null,
scope: frame.scope,
this: frame.this,
isOriginal: true,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/pause/tests/pause.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/pause/tests/pause.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/pause/tests/pause.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/pause/tests/pause.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -346,7 +346,9 @@
location: originalLocation,
originalDisplayName: "fooBar",
scope: { bindings: { arguments: [], variables: {} } },
- this: undefined
+ source: null,
+ this: undefined,
+ thread: undefined
},
{
displayName: "barZoo",
@@ -356,7 +358,9 @@
location: originalLocation2,
originalDisplayName: "barZoo",
scope: { bindings: { arguments: [], variables: {} } },
- this: undefined
+ source: null,
+ this: undefined,
+ thread: undefined
}
]);
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/breakpoints.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/breakpoints.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/breakpoints.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/breakpoints.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,10 +2,13 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
-export function mockPendingBreakpoint(overrides = {}) {
+// @flow
+
+export function mockPendingBreakpoint(overrides: Object = {}) {
const { sourceUrl, line, column, condition, disabled, hidden } = overrides;
return {
location: {
+ sourceId: "",
sourceUrl: sourceUrl || "http://localhost:8000/examples/bar.js",
line: line || 5,
column: column || undefined
@@ -28,8 +31,16 @@
};
}
-export function generateBreakpoint(filename, line = 5, column) {
+export function generateBreakpoint(
+ filename: string,
+ line: number = 5,
+ column: number = 0
+) {
return {
+ id: "breakpoint",
+ loading: false,
+ originalText: "",
+ text: "",
location: {
sourceUrl: `http://localhost:8000/examples/${filename}`,
sourceId: `${filename}/originalSource`,
@@ -42,8 +53,9 @@
line,
column
},
+ astLocation: undefined,
options: {
- condition: null,
+ condition: "",
hidden: false
},
disabled: false
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/readFixture.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/readFixture.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/readFixture.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/readFixture.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,10 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import fs from "fs";
import path from "path";
-export default function readFixture(name) {
+export default function readFixture(name: string) {
const text = fs.readFileSync(
path.join(__dirname, `../fixtures/${name}`),
"utf8"
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/threadClient.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/threadClient.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/helpers/threadClient.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/helpers/threadClient.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,7 +2,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
-import { makeBreakpointId } from "../../../utils/breakpoint";
+// @flow
+
+import { makeBreakpointActorId } from "../../../utils/breakpoint";
+
+import type {
+ SourceLocation,
+ SourceActor,
+ SourceActorLocation,
+ BreakpointOptions
+} from "../../../types";
function createSource(name) {
name = name.replace(/\..*$/, "");
@@ -31,16 +40,22 @@
];
export const simpleMockThreadClient = {
- getBreakpointByLocation: jest.fn(),
- setBreakpoint: (location, _condition) =>
+ getBreakpointByLocation: (jest.fn(): any),
+ setBreakpoint: (location: SourceActorLocation, _condition: string) =>
Promise.resolve({ id: "hi", actualLocation: location }),
- removeBreakpoint: _id => Promise.resolve(),
+ removeBreakpoint: (_id: string) => Promise.resolve(),
- setBreakpointOptions: (_id, _location, _options, _noSliding) =>
- Promise.resolve({ sourceId: "a", line: 5 }),
+ setBreakpointOptions: (
+ _id: string,
+ _location: SourceActorLocation,
+ _options: BreakpointOptions,
+ _noSliding: boolean
+ ) => Promise.resolve({ sourceId: "a", line: 5 }),
setPausePoints: () => Promise.resolve({}),
- sourceContents: ({ source }) =>
+ sourceContents: ({
+ source
+ }: SourceActor): Promise<{| source: any, contentType: ?string |}> =>
new Promise((resolve, reject) => {
if (sources.includes(source)) {
resolve(createSource(source));
@@ -53,17 +68,18 @@
// Breakpoint Sliding
function generateCorrectingThreadClient(offset = 0) {
return {
- getBreakpointByLocation: jest.fn(),
- setBreakpoint: (location, condition) => {
+ getBreakpointByLocation: (jest.fn(): any),
+ setBreakpoint: (location: SourceActorLocation, condition: string) => {
const actualLocation = { ...location, line: location.line + offset };
return Promise.resolve({
- id: makeBreakpointId(location),
+ id: makeBreakpointActorId(location),
actualLocation,
condition
});
},
- sourceContents: ({ source }) => Promise.resolve(createSource(source))
+ sourceContents: ({ source }: SourceActor) =>
+ Promise.resolve(createSource(source))
};
}
@@ -72,7 +88,10 @@
* added between functions, or somewhere that doesnt make sense. This function
* simulates that behavior.
* */
-export function simulateCorrectThreadClient(offset, location) {
+export function simulateCorrectThreadClient(
+ offset: number,
+ location: SourceLocation
+) {
const correctedThreadClient = generateCorrectingThreadClient(offset);
const offsetLine = { line: location.line + offset };
const correctedLocation = { ...location, ...offsetLine };
@@ -81,7 +100,9 @@
// sources and tabs
export const sourceThreadClient = {
- sourceContents: function({ source }) {
+ sourceContents: function({
+ source
+ }: SourceActor): Promise<{| source: any, contentType: ?string |}> {
return new Promise((resolve, reject) => {
if (sources.includes(source)) {
resolve(createSource(source));
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/__snapshots__/pending-breakpoints.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/__snapshots__/pending-breakpoints.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/tests/__snapshots__/pending-breakpoints.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/tests/__snapshots__/pending-breakpoints.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -21,6 +21,7 @@
"location": Object {
"column": undefined,
"line": 5,
+ "sourceId": "",
"sourceUrl": "http://localhost:8000/examples/bar.js",
},
},
@@ -33,6 +34,7 @@
"index": 0,
"name": undefined,
"offset": Object {
+ "column": 0,
"line": 7,
"sourceId": "foo.js",
"sourceUrl": "http://localhost:8000/examples/foo.js",
@@ -40,12 +42,12 @@
},
"disabled": false,
"generatedLocation": Object {
- "column": undefined,
+ "column": 0,
"line": 7,
"sourceUrl": "http://localhost:8000/examples/foo.js",
},
"location": Object {
- "column": undefined,
+ "column": 0,
"line": 7,
"sourceUrl": "http://localhost:8000/examples/foo.js",
},
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/utils/middleware/log.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/utils/middleware/log.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/utils/middleware/log.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/utils/middleware/log.js 2019-02-07 12:50:26.000000000 +0000
@@ -3,7 +3,10 @@
* file, You can obtain one at . */
/* global window */
+// @flow
+
import { isTesting } from "devtools-environment";
+import type { ThunkArgs } from "../../types";
const blacklist = [
"SET_POPUP_OBJECT_PROPERTIES",
@@ -18,7 +21,7 @@
"NODE_PROPERTIES_LOADED"
];
-function cloneAction(action) {
+function cloneAction(action: any) {
action = action || {};
action = { ...action };
@@ -79,6 +82,7 @@
return JSON.stringify(action);
} catch (e) {
console.error(e);
+ return "";
}
}
@@ -86,11 +90,12 @@
* A middleware that logs all actions coming through the system
* to the console.
*/
-export function log({ dispatch, getState }) {
- return next => action => {
+export function log({ dispatch, getState }: ThunkArgs) {
+ return (next: any) => (action: any) => {
const asyncMsg = !action.status ? "" : `[${action.status}]`;
if (isTesting()) {
+ // $FlowIgnore
dump(
`[ACTION] ${action.type} ${asyncMsg} - ${serializeAction(action)}\n`
);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/utils/middleware/timing.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/utils/middleware/timing.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/actions/utils/middleware/timing.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/actions/utils/middleware/timing.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/* global window */
/**
@@ -12,15 +14,15 @@
const mark =
window.performance && window.performance.mark
? window.performance.mark.bind(window.performance)
- : () => {};
+ : a => {};
const measure =
window.performance && window.performance.measure
? window.performance.measure.bind(window.performance)
- : () => {};
+ : (a, b, c) => {};
-export function timing(store) {
- return next => action => {
+export function timing(store: any) {
+ return (next: any) => (action: any) => {
mark(`${action.type}_start`);
const result = next(action);
mark(`${action.type}_end`);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/client/firefox/create.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/client/firefox/create.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/client/firefox/create.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/client/firefox/create.js 2019-02-07 12:50:26.000000000 +0000
@@ -46,6 +46,7 @@
location,
generatedLocation: location,
this: frame.this,
+ source: null,
scope: frame.environment
};
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/App.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/App.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/App.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/App.css 2019-02-07 12:50:26.000000000 +0000
@@ -9,6 +9,8 @@
button {
background: transparent;
border: none;
+ font-family: inherit;
+ font-size: inherit;
}
button:hover,
@@ -16,6 +18,11 @@
background-color: var(--theme-toolbar-background-hover);
}
+.theme-dark button:hover,
+.theme-dark button:focus {
+ background-color: var(--theme-toolbar-hover);
+}
+
.debugger {
display: flex;
flex: 1;
@@ -26,15 +33,11 @@
display: flex;
position: relative;
flex: 1;
- background-color: var(--theme-tab-toolbar-background);
- height: calc(100% - 1px);
+ background-color: var(--theme-body-background);
+ height: 100%;
overflow: hidden;
}
-.theme-dark .editor-pane {
- background-color: var(--theme-toolbar-background);
-}
-
.editor-container {
width: 100%;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.css 2019-02-07 12:50:26.000000000 +0000
@@ -5,7 +5,7 @@
.column-breakpoint {
display: inline;
padding: 0;
- margin-inline-end: 4px;
+ padding-inline-end: 4px;
}
.column-breakpoint:hover {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ColumnBreakpoints.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import React, { Component } from "react";
import ColumnBreakpoint from "./ColumnBreakpoint";
@@ -17,13 +19,15 @@
// eslint-disable-next-line max-len
import type { ColumnBreakpoint as ColumnBreakpointType } from "../../selectors/visibleColumnBreakpoints";
-class ColumnBreakpoints extends Component {
- props: {
- editor: Object,
- selectedSource: Source,
- columnBreakpoints: ColumnBreakpointType[],
- breakpointActions: BreakpointItemActions
- };
+type Props = {
+ editor: Object,
+ selectedSource: Source,
+ columnBreakpoints: ColumnBreakpointType[],
+ breakpointActions: BreakpointItemActions
+};
+
+class ColumnBreakpoints extends Component {
+ props: Props;
render() {
const {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ConditionalPanel.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ConditionalPanel.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/ConditionalPanel.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/ConditionalPanel.css 2019-02-07 12:50:26.000000000 +0000
@@ -33,6 +33,10 @@
line-height: 30px;
}
+.conditional-breakpoint-panel input:not(:placeholder-shown) {
+ font-family: var(--monospace-font-family);
+}
+
.conditional-breakpoint-panel input:focus {
outline-width: 0;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Editor.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Editor.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Editor.css 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Editor.css 2019-02-07 12:50:26.000000000 +0000
@@ -5,10 +5,8 @@
.editor-wrapper {
--debug-line-border: rgb(145, 188, 219);
--debug-expression-background: rgba(202, 227, 255, 0.5);
- --editor-searchbar-height: 27px;
--debug-line-error-border: rgb(255, 0, 0);
--debug-expression-error-background: rgba(231, 116, 113, 0.3);
- --editor-header-height: 30px;
--highlight-line-duration: 1500ms;
}
@@ -48,7 +46,6 @@
width: calc(100% - 1px);
top: var(--editor-header-height);
left: 0px;
- --editor-footer-height: 24px;
}
html[dir="rtl"] .editor-mount {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/EditorMenu.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/EditorMenu.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/EditorMenu.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/EditorMenu.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { Component } from "react";
import { connect } from "../../utils/connect";
import { showMenu } from "devtools-contextmenu";
@@ -10,18 +12,25 @@
import { getPrettySource, getIsPaused } from "../../selectors";
import { editorMenuItems, editorItemActions } from "./menus/editor";
-import type { EditorMenuActions } from "./menus/editor";
+
+import type { Source } from "../../types";
+import type { EditorItemActions } from "./menus/editor";
+import type SourceEditor from "../../utils/editor/source-editor";
type Props = {
contextMenu: ?MouseEvent,
- editorActions: EditorMenuActions,
- clearContextMenu: () => {}
+ editorActions: EditorItemActions,
+ clearContextMenu: () => void,
+ editor: SourceEditor,
+ hasPrettySource: boolean,
+ isPaused: boolean,
+ selectedSource: Source
};
-class EditorMenu extends Component {
+class EditorMenu extends Component {
props: Props;
- componentWillUpdate(nextProps) {
+ componentWillUpdate(nextProps: Props) {
this.props.clearContextMenu();
if (nextProps.contextMenu) {
this.showMenu(nextProps);
@@ -41,7 +50,8 @@
const location = getSourceLocationFromMouseEvent(
editor,
selectedSource,
- event
+ // Use a coercion, as contextMenu is optional
+ (event: any)
);
showMenu(
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/EmptyLines.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/EmptyLines.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/EmptyLines.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/EmptyLines.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,20 +2,22 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { connect } from "../../utils/connect";
import { Component } from "react";
import { getSelectedSource, getEmptyLines } from "../../selectors";
import type { Source } from "../../types";
import { toEditorLine } from "../../utils/editor";
-type props = {
+type Props = {
selectedSource: Source,
editor: Object,
emptyLines: Object
};
-class EmptyLines extends Component {
- props: props;
+class EmptyLines extends Component {
+ props: Props;
disableEmptyLines: Function;
@@ -63,6 +65,9 @@
const mapStateToProps = state => {
const selectedSource = getSelectedSource(state);
+ if (!selectedSource) {
+ throw new Error("no selectedSource");
+ }
const foundEmptyLines = getEmptyLines(state, selectedSource.id);
return {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Footer.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Footer.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Footer.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Footer.css 2019-02-07 12:50:26.000000000 +0000
@@ -36,7 +36,7 @@
transition: opacity 200ms;
border: none;
background: transparent;
- padding: 6px;
+ padding: 4px 6px;
}
.source-footer > .commands > .action .img {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Footer.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Footer.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Footer.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Footer.js 2019-02-07 12:50:26.000000000 +0000
@@ -156,9 +156,9 @@
);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -124,7 +124,7 @@
this.state = {
highlightedLineRange: null,
- editor: null,
+ editor: (null: any),
contextMenu: null
};
}
@@ -242,7 +242,7 @@
if (this.state.editor) {
this.state.editor.destroy();
this.state.editor.codeMirror.off("scroll", this.onEditorScroll);
- this.setState({ editor: null });
+ this.setState({ editor: (null: any) });
}
const searchAgainKey = L10N.getStr("sourceSearch.search.again.key2");
@@ -606,7 +606,7 @@
- ;
+
{
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/menus/source.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/menus/source.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/menus/source.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/menus/source.js 2019-02-07 12:50:26.000000000 +0000
@@ -1,3 +1,5 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+
+// @flow
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/SearchBar.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/SearchBar.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/SearchBar.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/SearchBar.css 2019-02-07 12:50:26.000000000 +0000
@@ -5,13 +5,13 @@
.search-bar {
display: flex;
border: 1px solid transparent;
- border-top: 1px solid var(--theme-splitter-color);
+ border-top-color: var(--theme-splitter-color);
height: var(--editor-searchbar-height);
+ transition: border-color 200ms var(--animation-curve);
}
.search-bar.search-bar-focused {
- border: 1px solid var(--blue-50);
- transition: border-color 0.2s ease-in-out;
+ border-color: var(--blue-50);
}
.search-bar .search-field {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Tabs.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Tabs.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Tabs.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Tabs.css 2019-02-07 12:50:26.000000000 +0000
@@ -3,10 +3,11 @@
* file, You can obtain one at . */
.source-header {
- border-bottom: 1px solid var(--theme-splitter-color);
- width: 100%;
- height: 29px;
display: flex;
+ width: 100%;
+ height: var(--editor-header-height);
+ border-bottom: 1px solid var(--theme-splitter-color);
+ background-color: var(--theme-toolbar-background);
}
.source-header * {
@@ -14,24 +15,6 @@
user-select: none;
}
-.source-header .new-tab-btn {
- padding: 4px;
- margin-top: 4px;
- margin-left: 2px;
- fill: var(--theme-comment);
- transition: 0.1s ease;
- align-self: center;
-}
-
-.source-header .new-tab-btn:hover {
- background-color: var(--theme-toolbar-background-hover);
-}
-
-.source-header .new-tab-btn svg {
- width: 12px;
- display: block;
-}
-
.source-tabs {
max-width: calc(100% - 80px);
align-self: flex-start;
@@ -46,9 +29,10 @@
overflow: hidden;
padding: 5px;
cursor: default;
- height: 30px;
+ height: calc(var(--editor-header-height) - 1px);
font-size: 12px;
background-color: transparent;
+ vertical-align: bottom;
}
.source-tab::before {
@@ -58,46 +42,29 @@
left: 0;
width: 100%;
height: 2px;
- background: transparent;
+ background-color: var(--tab-line-color, transparent);
transition: transform 250ms var(--animation-curve), opacity 250ms var(--animation-curve);
opacity: 0;
transform: scaleX(0);
}
-.source-tab:first-child {
- margin-inline-start: 0;
-}
-
-.source-tab:not(.active):hover {
- background: linear-gradient(var(--theme-toolbar-hover) 28px, transparent 1px);
-}
-
-.source-tab:not(.active):hover::before {
- background: var(--tab-line-hover-color);
- opacity: 1;
- transform: scaleX(1);
-}
-
.source-tab.active {
+ --tab-line-color: var(--tab-line-selected-color);
color: var(--theme-toolbar-selected-color);
border-bottom-color: transparent;
}
+.source-tab:not(.active):hover {
+ --tab-line-color: var(--tab-line-hover-color);
+ background-color: var(--theme-toolbar-hover);
+}
+
+.source-tab:hover::before,
.source-tab.active::before {
- background: var(--tab-line-selected-color);
opacity: 1;
transform: scaleX(1);
}
-.theme-dark .source-tab.active {
- color: var(--theme-toolbar-selected-color);
-}
-
-.source-tab.active path,
-.source-tab:hover path {
- fill: var(--theme-body-color);
-}
-
.source-tab .source-icon {
margin-inline-end: 0;
}
@@ -109,10 +76,6 @@
align-self: center;
}
-.source-tab .prettyPrint path {
- fill: var(--theme-textbox-box-shadow);
-}
-
.source-tab .img.react {
mask: url(/images/react.svg) no-repeat;
mask-size: 100%;
@@ -122,14 +85,6 @@
top: 0;
}
-.source-tab .blackBox path {
- fill: var(--theme-textbox-box-shadow);
-}
-
-.theme-dark .source-tab .blackBox circle {
- fill: var(--theme-body-color);
-}
-
.source-tab .filename {
white-space: nowrap;
text-overflow: ellipsis;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Tabs.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Tabs.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/Tabs.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/Tabs.js 2019-02-07 12:50:26.000000000 +0000
@@ -174,8 +174,8 @@
return (
);
}
@@ -189,8 +189,8 @@
return (
);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/tests/Footer.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/tests/Footer.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/tests/Footer.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/tests/Footer.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -28,6 +28,7 @@
on: jest.fn()
}
},
+ endPanelCollapsed: false,
selectedSource: makeSource("foo").source,
...overrides
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/tests/__snapshots__/Footer.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/tests/__snapshots__/Footer.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/Editor/tests/__snapshots__/Footer.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/Editor/tests/__snapshots__/Footer.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -11,7 +11,7 @@
(2, 2)
+
{namedFunctions.map(func => this.renderFunction(func))}
{classes.map(klass => this.renderClassFunctions(klass, classFunctions))}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/PrimaryPanes/Sources.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/PrimaryPanes/Sources.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/PrimaryPanes/Sources.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/PrimaryPanes/Sources.css 2019-02-07 12:50:26.000000000 +0000
@@ -149,58 +149,58 @@
font-size: 12px;
width: 100%;
background: var(--theme-body-background);
- border-top: 1px solid var(--theme-splitter-color);
display: flex;
-moz-user-select: none;
user-select: none;
box-sizing: border-box;
- height: 29px;
+ height: var(--editor-header-height);
margin: 0;
padding: 0;
+ border-bottom: 1px solid var(--theme-splitter-color);
}
.source-outline-tabs .tab {
+ align-items: center;
background-color: var(--theme-toolbar-background);
- border-top: 2px solid transparent;
- border-bottom: 1px solid var(--theme-splitter-color);
color: var(--theme-toolbar-color);
cursor: default;
display: inline-flex;
flex: 1;
justify-content: center;
- margin-bottom: 0px;
- margin-top: -1px;
overflow: hidden;
- padding: 5px 8px 7px 8px;
+ padding: 5px;
position: relative;
transition: all 0.25s ease;
}
-.source-outline-tabs .tab:not(.active):hover {
- background-color: var(--theme-toolbar-hover);
- border-top: 2px solid rgba(0, 0, 0, 0.2);
-}
-
-.theme-dark .source-outline-tabs .tab:hover {
- border-top: 2px solid var(--tab-line-hover-color);
+.source-outline-tabs .tab::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background-color: var(--tab-line-color, transparent);
+ transition: transform 250ms var(--animation-curve), opacity 250ms var(--animation-curve);
+ opacity: 0;
+ transform: scaleX(0);
}
.source-outline-tabs .tab.active {
- border-top: 2px solid var(--tab-line-selected-color);
- color: var(--theme-toolbar-selected-color);
-}
-
-.theme-dark .source-outline-tabs .tab.active {
+ --tab-line-color: var(--tab-line-selected-color);
color: var(--theme-toolbar-selected-color);
+ border-bottom-color: transparent;
}
-.theme-dark .source-outline-tabs .tab.active:hover {
- border-top: 2px solid var(--tab-line-selected-color);
+.source-outline-tabs .tab:not(.active):hover {
+ --tab-line-color: var(--tab-line-hover-color);
+ background-color: var(--theme-toolbar-hover);
}
-.source-outline-tabs .tab.active path,
-.source-outline-tabs .tab:hover path {
- fill: var(--theme-body-color);
+.source-outline-tabs .tab:hover::before,
+.source-outline-tabs .tab.active::before {
+ opacity: 1;
+ transform: scaleX(1);
}
.source-outline-panel {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/ProjectSearch.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/ProjectSearch.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/ProjectSearch.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/ProjectSearch.js 2019-02-07 12:50:26.000000000 +0000
@@ -54,7 +54,8 @@
type State = {
inputValue: string,
- inputFocused: boolean
+ inputFocused: boolean,
+ focusedItem: ?Item
};
type Props = {
@@ -81,23 +82,13 @@
return query.replace(/\\$/, "");
}
-type FileItem = {
- setExpanded: (Result, boolean) => mixed,
- file: Result,
- expanded: boolean
-};
-type MatchItem = {
- expanded: null,
- match: Match
-};
-
export class ProjectSearch extends Component {
- focusedItem: ?(FileItem | MatchItem);
constructor(props: Props) {
super(props);
this.state = {
inputValue: this.props.query || "",
- inputFocused: false
+ inputFocused: false,
+ focusedItem: null
};
}
@@ -173,7 +164,7 @@
if (e.key !== "Enter") {
return;
}
- this.focusedItem = null;
+ this.setState({ focusedItem: null });
const query = sanitizeQuery(this.state.inputValue);
if (query) {
this.doSearch(query);
@@ -185,16 +176,21 @@
};
onEnterPress = () => {
- if (!this.focusedItem || this.state.inputFocused) {
+ if (
+ !this.isProjectSearchEnabled() ||
+ !this.state.focusedItem ||
+ this.state.inputFocused
+ ) {
return;
}
- if (this.focusedItem.expanded !== null) {
- // expanded is not null implies this is a `FileItem`
- const { setExpanded, file, expanded } = this.focusedItem;
- setExpanded(file, !expanded);
- } else {
- const { match } = this.focusedItem;
- this.selectMatchItem(match);
+ if (this.state.focusedItem.type === "MATCH") {
+ this.selectMatchItem(this.state.focusedItem);
+ }
+ };
+
+ onFocus = (item: Item) => {
+ if (this.state.focusedItem !== item) {
+ this.setState({ focusedItem: item });
}
};
@@ -207,16 +203,7 @@
}
};
- renderFile = (
- file: Result,
- focused: boolean,
- expanded: boolean,
- setExpanded: Function
- ) => {
- if (focused) {
- this.focusedItem = { setExpanded, file, expanded };
- }
-
+ renderFile = (file: Result, focused: boolean, expanded: boolean) => {
const matchesLength = file.matches.length;
const matches = ` (${matchesLength} match${matchesLength > 1 ? "es" : ""})`;
@@ -234,9 +221,6 @@
};
renderMatch = (match: Match, focused: boolean) => {
- if (focused) {
- this.focusedItem = { match, expanded: null };
- }
return (
{
if (item.type === "RESULT") {
- return this.renderFile(item, focused, expanded, setExpanded);
+ return this.renderFile(item, focused, expanded);
}
return this.renderMatch(item, focused);
};
@@ -281,6 +264,8 @@
getParent={item => null}
getPath={getFilePath}
renderItem={this.renderItem}
+ focused={this.state.focusedItem}
+ onFocus={this.onFocus}
/>
);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoint.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoint.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoint.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoint.js 2019-02-07 12:50:26.000000000 +0000
@@ -170,14 +170,16 @@
/>
-
{this.getBreakpointLocation()}
+
+ {this.getBreakpointLocation()}
+
this.removeBreakpoint(e)}
tooltip={L10N.getStr("breakpoints.removeBreakpointTooltip")}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoints.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoints.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoints.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/Breakpoints.css 2019-02-07 12:50:26.000000000 +0000
@@ -140,11 +140,6 @@
background-color: var(--search-overlays-semitransparent);
}
-.breakpoints-list .breakpoint .breakpoint-line,
-.breakpoints-list .breakpoint-label {
- font-family: var(--monospace-font-family);
-}
-
.breakpoints-list .breakpoint .breakpoint-line {
font-size: 11px;
color: var(--theme-comment);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/tests/__snapshots__/Breakpoint.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/tests/__snapshots__/Breakpoint.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/tests/__snapshots__/Breakpoint.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Breakpoints/tests/__snapshots__/Breakpoint.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -15,7 +15,7 @@
type="checkbox"
/>
53
@@ -57,7 +57,7 @@
type="checkbox"
/>
53
@@ -99,7 +99,7 @@
type="checkbox"
/>
53
@@ -141,7 +141,7 @@
type="checkbox"
/>
5
@@ -183,7 +183,7 @@
type="checkbox"
/>
53
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/CommandBar.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/CommandBar.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/CommandBar.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/CommandBar.css 2019-02-07 12:50:26.000000000 +0000
@@ -116,7 +116,8 @@
border-bottom: none;
background-color: var(--theme-body-background);
border-top: 1px solid var(--theme-splitter-color);
- flex: 0 0 25px;
+ flex: none;
+ height: var(--editor-footer-height);
}
.command-bar.bottom {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.css 2019-02-07 12:50:26.000000000 +0000
@@ -116,6 +116,6 @@
padding-inline-start: 10px;
}
-.expression-input {
- max-width: 50%;
+.input-expression:not(:placeholder-shown) {
+ font-family: var(--monospace-font-family);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Expressions.js 2019-02-07 12:50:26.000000000 +0000
@@ -71,10 +71,17 @@
}
componentDidMount() {
- const { expressions, evaluateExpressions } = this.props;
+ const { expressions, evaluateExpressions, showInput } = this.props;
+
if (expressions.size > 0) {
evaluateExpressions();
}
+
+ // Ensures that the input is focused when the "+"
+ // is clicked while the panel is collapsed
+ if (showInput && this._input) {
+ this._input.focus();
+ }
}
clear = () => {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameIndent.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameIndent.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameIndent.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameIndent.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import React from "react";
export default function FrameIndent() {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Frame.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Frame.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Frame.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Frame.js 2019-02-07 12:50:26.000000000 +0000
@@ -15,7 +15,6 @@
import FrameIndent from "./FrameIndent";
import type { Frame } from "../../../types";
-import type { LocalFrame } from "./types";
type FrameTitleProps = {
frame: Frame,
@@ -28,7 +27,7 @@
return {displayName} ;
}
-type FrameLocationProps = { frame: LocalFrame, displayFullUrl: boolean };
+type FrameLocationProps = { frame: Frame, displayFullUrl: boolean };
function FrameLocation({ frame, displayFullUrl = false }: FrameLocationProps) {
if (!frame.source) {
@@ -62,8 +61,8 @@
FrameLocation.displayName = "FrameLocation";
type FrameComponentProps = {
- frame: LocalFrame,
- selectedFrame: LocalFrame,
+ frame: Frame,
+ selectedFrame: Frame,
copyStackTrace: Function,
toggleFrameworkGrouping: Function,
selectFrame: Function,
@@ -139,6 +138,10 @@
selected: selectedFrame && selectedFrame.id === frame.id
});
+ if (!frame.source) {
+ throw new Error("no frame source");
+ }
+
const title = getFrameTitle
? getFrameTitle(
`${getFileURL(frame.source, false)}:${frame.location.line}`
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameMenu.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameMenu.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameMenu.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/FrameMenu.js 2019-02-07 12:50:26.000000000 +0000
@@ -5,8 +5,7 @@
// @flow
import { showMenu } from "devtools-contextmenu";
import { copyToTheClipboard } from "../../../utils/clipboard";
-import type { LocalFrame } from "./types";
-import type { ContextMenuItem } from "../../../types";
+import type { ContextMenuItem, Frame } from "../../../types";
import { kebabCase } from "lodash";
const blackboxString = "sourceFooter.blackbox";
@@ -57,7 +56,7 @@
}
export default function FrameMenu(
- frame: LocalFrame,
+ frame: Frame,
frameworkGroupingOn: boolean,
callbacks: Object,
event: SyntheticMouseEvent
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Group.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Group.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Group.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/Group.js 2019-02-07 12:50:26.000000000 +0000
@@ -15,11 +15,11 @@
import "./Group.css";
-import type { LocalFrame } from "./types";
+import type { Frame } from "../../../types";
import Badge from "../../shared/Badge";
import FrameIndent from "./FrameIndent";
-type FrameLocationProps = { frame: LocalFrame, expanded: boolean };
+type FrameLocationProps = { frame: Frame, expanded: boolean };
function FrameLocation({ frame, expanded }: FrameLocationProps) {
const library = frame.library || getLibraryFromUrl(frame);
if (!library) {
@@ -39,8 +39,8 @@
FrameLocation.displayName = "FrameLocation";
type Props = {
- group: LocalFrame[],
- selectedFrame: LocalFrame,
+ group: Frame[],
+ selectedFrame: Frame,
selectFrame: Function,
toggleFrameworkGrouping: Function,
copyStackTrace: Function,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -26,8 +26,6 @@
getPauseReason
} from "../../../selectors";
-import type { LocalFrame } from "./types";
-
import "./Frames.css";
const NUM_FRAMES_SHOWN = 7;
@@ -113,7 +111,7 @@
toggleFrameworkGrouping(!frameworkGroupingOn);
};
- renderFrames(frames: LocalFrame[]) {
+ renderFrames(frames: Frame[]) {
const {
selectFrame,
selectedFrame,
@@ -126,7 +124,7 @@
} = this.props;
const framesOrGroups = this.truncateFrames(this.collapseFrames(frames));
- type FrameOrGroup = LocalFrame | LocalFrame[];
+ type FrameOrGroup = Frame | Frame[];
// We're not using a because it adds new lines before and after when
// the user copies the trace. Needed for the console which has several
@@ -137,7 +135,7 @@
(frameOrGroup: FrameOrGroup) =>
frameOrGroup.id ? (
) : (
({ showMenu: jest.fn() }));
jest.mock("../../../../utils/clipboard", () => ({
copyToTheClipboard: jest.fn()
@@ -22,18 +24,13 @@
describe("FrameMenu", () => {
let mockEvent: any;
let mockFrame;
- let emptyFrame;
+ let emptyFrame: any;
let callbacks;
let frameworkGroupingOn;
let toggleFrameworkGrouping;
beforeEach(() => {
- mockFrame = {
- source: {
- url: "isFake",
- isBlackBoxed: false
- }
- };
+ mockFrame = makeMockFrame(undefined, makeMockSource("isFake"));
mockEvent = {
stopPropagation: jest.fn(),
preventDefault: jest.fn()
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frame.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frame.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frame.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frame.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -7,11 +7,12 @@
import React from "react";
import { shallow, mount } from "enzyme";
import Frame from "../Frame.js";
+import { makeMockFrame, makeMockSource } from "../../../../utils/test-mockup";
import FrameMenu from "../FrameMenu";
jest.mock("../FrameMenu", () => jest.fn());
-function frameProperties(frame, selectedFrame, overrides = {}) {
+function frameProperties(frame, selectedFrame: any, overrides = {}) {
return {
frame,
selectedFrame,
@@ -28,20 +29,9 @@
}
function render(frameToSelect = {}, overrides = {}, propsOverrides = {}) {
- const defaultFrame = {
- id: 1,
- source: {
- url: "foo-view.js",
- isBlackBoxed: false
- },
- displayName: "renderFoo",
- frameworkGroupingOn: false,
- toggleFrameworkGrouping: jest.fn(),
- library: false,
- location: {
- line: 10
- }
- };
+ const source = makeMockSource("foo-view.js");
+ const defaultFrame = makeMockFrame("1", source, undefined, 10, "renderFoo");
+
const frame = { ...defaultFrame, ...overrides };
const selectedFrame = { ...frame, ...frameToSelect };
@@ -57,36 +47,26 @@
});
it("user frame (not selected)", () => {
- const { component } = render({ id: 2 });
+ const { component } = render({ id: "2" });
expect(component).toMatchSnapshot();
});
it("library frame", () => {
+ const source = makeMockSource("backbone.js");
const backboneFrame = {
- id: 3,
- source: { url: "backbone.js" },
- displayName: "updateEvents",
- library: "backbone",
- location: {
- line: 12
- }
+ ...makeMockFrame("3", source, undefined, 12, "updateEvents"),
+ library: "backbone"
};
- const { component } = render({ id: 3 }, backboneFrame);
+ const { component } = render({ id: "3" }, backboneFrame);
expect(component).toMatchSnapshot();
});
- fit("filename only", () => {
- const frame = {
- id: 1,
- source: {
- url: "https://firefox.com/assets/src/js/foo-view.js"
- },
- displayName: "renderFoo",
- location: {
- line: 10
- }
- };
+ it("filename only", () => {
+ const source = makeMockSource(
+ "https://firefox.com/assets/src/js/foo-view.js"
+ );
+ const frame = makeMockFrame("1", source, undefined, 10, "renderFoo");
const props = frameProperties(frame, null);
const component = mount( );
@@ -95,16 +75,8 @@
it("full URL", () => {
const url = `https://${"a".repeat(100)}.com/assets/src/js/foo-view.js`;
- const frame = {
- id: 1,
- source: {
- url
- },
- displayName: "renderFoo",
- location: {
- line: 10
- }
- };
+ const source = makeMockSource(url);
+ const frame = makeMockFrame("1", source, undefined, 10, "renderFoo");
const props = frameProperties(frame, null, { displayFullUrl: true });
const component = mount( );
@@ -113,16 +85,8 @@
it("getFrameTitle", () => {
const url = `https://${"a".repeat(100)}.com/assets/src/js/foo-view.js`;
- const frame = {
- id: 1,
- source: {
- url
- },
- displayName: "renderFoo",
- location: {
- line: 10
- }
- };
+ const source = makeMockSource(url);
+ const frame = makeMockFrame("1", source, undefined, 10, "renderFoo");
const props = frameProperties(frame, null, {
getFrameTitle: x => `Jump to ${x}`
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frames.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frames.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frames.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Frames.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -9,6 +9,7 @@
import Frames from "../index.js";
// eslint-disable-next-line
import { formatCallStackFrames } from "../../../../selectors/getCallStackFrames";
+import { makeMockFrame, makeMockSource } from "../../../../utils/test-mockup";
function render(overrides = {}) {
const defaultProps = {
@@ -191,23 +192,23 @@
describe("Blackboxed Frames", () => {
it("filters blackboxed frames", () => {
+ const source1 = makeMockSource(undefined, "1");
+ const source2 = makeMockSource(undefined, "2");
+ source2.isBlackBoxed = true;
+
const frames = [
- { id: 1, location: { sourceId: "1" } },
- { id: 2, location: { sourceId: "2" } },
- { id: 3, location: { sourceId: "1" } },
- { id: 8, location: { sourceId: "2" } }
+ makeMockFrame("1", source1),
+ makeMockFrame("2", source2),
+ makeMockFrame("3", source1),
+ makeMockFrame("8", source2)
];
const sources = {
- "1": { id: "1" },
- "2": { id: "2", isBlackBoxed: true }
+ "1": source1,
+ "2": source2
};
- const processedFrames = formatCallStackFrames(
- frames,
- sources,
- sources["1"]
- );
+ const processedFrames = formatCallStackFrames(frames, sources, source1);
const selectedFrame = frames[0];
const component = render({
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Group.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Group.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Group.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/Group.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -7,14 +7,16 @@
import React from "react";
import { shallow } from "enzyme";
import Group from "../Group.js";
+import { makeMockFrame, makeMockSource } from "../../../../utils/test-mockup";
import FrameMenu from "../FrameMenu";
jest.mock("../FrameMenu", () => jest.fn());
function render(overrides = {}) {
+ const frame = { ...makeMockFrame(), displayName: "foo", library: "Back" };
const defaultProps = {
- group: [{ displayName: "foo", library: "Back" }],
- selectedFrame: {},
+ group: [frame],
+ selectedFrame: frame,
frameworkGroupingOn: true,
toggleFrameworkGrouping: jest.fn(),
selectFrame: jest.fn(),
@@ -39,39 +41,20 @@
});
it("passes the getFrameTitle prop to the Frame components", () => {
+ const mahscripts = makeMockSource("http://myfile.com/mahscripts.js");
+ const back = makeMockSource("http://myfile.com/back.js");
const group = [
{
- id: 1,
- library: "Back",
- displayName: "renderFoo",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/mahscripts.js"
- }
+ ...makeMockFrame("1", mahscripts, undefined, 55, "renderFoo"),
+ library: "Back"
},
{
- id: 2,
- library: "Back",
- displayName: "a",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/back.js"
- }
+ ...makeMockFrame("2", back, undefined, 55, "a"),
+ library: "Back"
},
{
- id: 3,
- library: "Back",
- displayName: "b",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/back.js"
- }
+ ...makeMockFrame("3", back, undefined, 55, "b"),
+ library: "Back"
}
];
const getFrameTitle = () => {};
@@ -88,39 +71,20 @@
});
it("renders group with anonymous functions", () => {
+ const mahscripts = makeMockSource("http://myfile.com/mahscripts.js");
+ const back = makeMockSource("http://myfile.com/back.js");
const group = [
{
- id: 1,
- library: "Back",
- displayName: "",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/mahscripts.js"
- }
+ ...makeMockFrame("1", mahscripts, undefined, 55),
+ library: "Back"
},
{
- id: 2,
- library: "Back",
- displayName: "",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/back.js"
- }
+ ...makeMockFrame("2", back, undefined, 55),
+ library: "Back"
},
{
- id: 3,
- library: "Back",
- displayName: "",
- location: {
- line: 55
- },
- source: {
- url: "http://myfile.com/back.js"
- }
+ ...makeMockFrame("3", back, undefined, 55),
+ library: "Back"
}
];
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frame.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frame.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frame.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frame.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -16,13 +16,40 @@
frame={
Object {
"displayName": "renderFoo",
- "id": 1,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com/assets/src/js/foo-view.js",
+ "text": "",
"url": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com/assets/src/js/foo-view.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
options={
@@ -41,13 +68,40 @@
frame={
Object {
"displayName": "renderFoo",
- "id": 1,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com/assets/src/js/foo-view.js",
+ "text": "",
"url": "https://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com/assets/src/js/foo-view.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -72,16 +126,41 @@
frame={
Object {
"displayName": "updateEvents",
- "frameworkGroupingOn": false,
- "id": 3,
+ "generatedLocation": Object {
+ "line": 12,
+ "sourceId": "source",
+ },
+ "id": "3",
"library": "backbone",
"location": Object {
"line": 12,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "backbone.js",
+ "text": "",
"url": "backbone.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
options={
@@ -100,16 +179,41 @@
frame={
Object {
"displayName": "updateEvents",
- "frameworkGroupingOn": false,
- "id": 3,
+ "generatedLocation": Object {
+ "line": 12,
+ "sourceId": "source",
+ },
+ "id": "3",
"library": "backbone",
"location": Object {
"line": 12,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "backbone.js",
+ "text": "",
"url": "backbone.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -134,17 +238,40 @@
frame={
Object {
"displayName": "renderFoo",
- "frameworkGroupingOn": false,
- "id": 1,
- "library": false,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
"isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "foo-view.js",
+ "text": "",
"url": "foo-view.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
options={
@@ -163,17 +290,40 @@
frame={
Object {
"displayName": "renderFoo",
- "frameworkGroupingOn": false,
- "id": 1,
- "library": false,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
"isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "foo-view.js",
+ "text": "",
"url": "foo-view.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -198,17 +348,40 @@
frame={
Object {
"displayName": "renderFoo",
- "frameworkGroupingOn": false,
- "id": 1,
- "library": false,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
"isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "foo-view.js",
+ "text": "",
"url": "foo-view.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
options={
@@ -227,17 +400,40 @@
frame={
Object {
"displayName": "renderFoo",
- "frameworkGroupingOn": false,
- "id": 1,
- "library": false,
+ "generatedLocation": Object {
+ "line": 10,
+ "sourceId": "source",
+ },
+ "id": "1",
"location": Object {
"line": 10,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
"isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "foo-view.js",
+ "text": "",
"url": "foo-view.js",
},
- "toggleFrameworkGrouping": [MockFunction],
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frames.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frames.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frames.spec.js.snap 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Frames.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -12,13 +12,41 @@
disableContextMenu={false}
frame={
Object {
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "1",
+ },
+ "id": "1",
"location": Object {
+ "line": 4,
"sourceId": "1",
},
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
"source": Object {
+ "contentType": "text/javascript",
"id": "1",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={false}
@@ -28,10 +56,41 @@
selectable={false}
selectedFrame={
Object {
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "1",
+ },
+ "id": "1",
"location": Object {
+ "line": 4,
"sourceId": "1",
},
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "1",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
}
}
shouldMapDisplayName={true}
@@ -43,13 +102,41 @@
disableContextMenu={false}
frame={
Object {
- "id": 3,
+ "displayName": "display-3",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "1",
+ },
+ "id": "3",
"location": Object {
+ "line": 4,
"sourceId": "1",
},
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
"source": Object {
+ "contentType": "text/javascript",
"id": "1",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={false}
@@ -59,10 +146,41 @@
selectable={false}
selectedFrame={
Object {
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "1",
+ },
+ "id": "1",
"location": Object {
+ "line": 4,
"sourceId": "1",
},
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "1",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
}
}
shouldMapDisplayName={true}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Group.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Group.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Group.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/Frames/tests/__snapshots__/Group.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -7,6 +7,7 @@
>
@@ -53,14 +88,41 @@
frame={
Object {
"displayName": "renderFoo",
- "id": 1,
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "1",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/mahscripts.js",
+ "text": "",
"url": "http://myfile.com/mahscripts.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -84,14 +146,41 @@
frame={
Object {
"displayName": "renderFoo",
- "id": 1,
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "1",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/mahscripts.js",
+ "text": "",
"url": "http://myfile.com/mahscripts.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -100,7 +189,46 @@
key="1"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
@@ -113,14 +241,41 @@
frame={
Object {
"displayName": "a",
- "id": 2,
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "2",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/back.js",
+ "text": "",
"url": "http://myfile.com/back.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -129,7 +284,46 @@
key="2"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
@@ -142,14 +336,41 @@
frame={
Object {
"displayName": "b",
- "id": 3,
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "3",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/back.js",
+ "text": "",
"url": "http://myfile.com/back.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -158,7 +379,46 @@
key="3"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
@@ -185,15 +445,42 @@
expanded={false}
frame={
Object {
- "displayName": "",
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "1",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/mahscripts.js",
+ "text": "",
"url": "http://myfile.com/mahscripts.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -227,15 +514,42 @@
expanded={true}
frame={
Object {
- "displayName": "",
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "1",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/mahscripts.js",
+ "text": "",
"url": "http://myfile.com/mahscripts.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
/>
@@ -258,15 +572,42 @@
displayFullUrl={false}
frame={
Object {
- "displayName": "",
- "id": 1,
+ "displayName": "display-1",
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "1",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/mahscripts.js",
+ "text": "",
"url": "http://myfile.com/mahscripts.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -274,7 +615,46 @@
key="1"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
@@ -286,15 +666,42 @@
displayFullUrl={false}
frame={
Object {
- "displayName": "",
- "id": 2,
+ "displayName": "display-2",
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "2",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/back.js",
+ "text": "",
"url": "http://myfile.com/back.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -302,7 +709,46 @@
key="2"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
@@ -314,15 +760,42 @@
displayFullUrl={false}
frame={
Object {
- "displayName": "",
- "id": 3,
+ "displayName": "display-3",
+ "generatedLocation": Object {
+ "line": 55,
+ "sourceId": "source",
+ },
+ "id": "3",
"library": "Back",
"location": Object {
"line": 55,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
},
"source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "http://myfile.com/back.js",
+ "text": "",
"url": "http://myfile.com/back.js",
},
+ "this": Object {},
+ "thread": "FakeThread",
}
}
frameworkGroupingOn={true}
@@ -330,7 +803,46 @@
key="3"
selectFrame={[MockFunction]}
selectable={true}
- selectedFrame={Object {}}
+ selectedFrame={
+ Object {
+ "displayName": "foo",
+ "generatedLocation": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "id": "frame",
+ "library": "Back",
+ "location": Object {
+ "line": 4,
+ "sourceId": "source",
+ },
+ "scope": Object {
+ "actor": "scope-actor",
+ "bindings": Object {
+ "arguments": Array [],
+ "variables": Object {},
+ },
+ "function": null,
+ "object": null,
+ "parent": null,
+ "type": "block",
+ },
+ "source": Object {
+ "contentType": "text/javascript",
+ "id": "source",
+ "introductionUrl": null,
+ "isBlackBoxed": false,
+ "isPrettyPrinted": false,
+ "isWasm": false,
+ "loadedState": "unloaded",
+ "relativeUrl": "url",
+ "text": "",
+ "url": "url",
+ },
+ "this": Object {},
+ "thread": "FakeThread",
+ }
+ }
shouldMapDisplayName={false}
toggleBlackBox={[MockFunction]}
toggleFrameworkGrouping={[MockFunction]}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/XHRBreakpoints.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/XHRBreakpoints.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/SecondaryPanes/XHRBreakpoints.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/SecondaryPanes/XHRBreakpoints.js 2019-02-07 12:50:26.000000000 +0000
@@ -59,6 +59,16 @@
};
}
+ componentDidMount() {
+ const { showInput } = this.props;
+
+ // Ensures that the input is focused when the "+"
+ // is clicked while the panel is collapsed
+ if (this._input && showInput) {
+ this._input.focus();
+ }
+ }
+
componentDidUpdate(prevProps, prevState) {
const input = this._input;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/AccessibleImage.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/AccessibleImage.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/AccessibleImage.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/AccessibleImage.css 2019-02-07 12:50:26.000000000 +0000
@@ -4,6 +4,6 @@
height: 12px;
/* makes span appear like an image */
display: inline-block;
- background: var(--theme-body-color);
+ background: var(--theme-icon-color);
mask-size: 100%;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import CloseButton from "./CloseButton";
import CommandBarButton, { debugBtn } from "./CommandBarButton";
import PaneToggleButton from "./PaneToggleButton";
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/PaneToggleButton.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/PaneToggleButton.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/PaneToggleButton.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/PaneToggleButton.js 2019-02-07 12:50:26.000000000 +0000
@@ -23,7 +23,7 @@
render() {
const { position, collapsed, horizontal, handleClick } = this.props;
- const title = !collapsed
+ const title = collapsed
? L10N.getStr("expandPanes")
: L10N.getStr("collapsePanes");
@@ -33,10 +33,12 @@
collapsed,
vertical: !horizontal
})}
- onClick={() => handleClick(position, collapsed)}
+ onClick={() => handleClick(position, !collapsed)}
title={title}
>
-
+
);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/styles/CommandBarButton.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/styles/CommandBarButton.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/styles/CommandBarButton.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/styles/CommandBarButton.css 2019-02-07 12:50:26.000000000 +0000
@@ -23,6 +23,10 @@
background: var(--theme-toolbar-background-hover);
}
+.theme-dark .command-bar-button:not(.disabled):hover {
+ background: var(--theme-toolbar-hover);
+}
+
:root.theme-dark .command-bar-button {
color: var(--theme-body-color);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/styles/PaneToggleButton.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/styles/PaneToggleButton.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/styles/PaneToggleButton.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/styles/PaneToggleButton.css 2019-02-07 12:50:26.000000000 +0000
@@ -3,19 +3,11 @@
* file, You can obtain one at . */
.toggle-button {
- transform: translate(0, 0px);
- transition: transform 0.25s ease-in-out;
- padding: 5px;
- height: inherit;
+ padding: 4px 6px;
}
.toggle-button .img {
- fill: var(--theme-comment);
- vertical-align: 0;
-}
-
-:root.theme-dark .toggle-button .img {
- fill: var(--theme-comment-alt);
+ vertical-align: middle;
}
.toggle-button.end {
@@ -27,16 +19,11 @@
margin-inline-start: 0px;
}
-html:not([dir="rtl"]) .toggle-button.end .img,
-html[dir="rtl"] .toggle-button.start .img {
- transform: rotate(180deg);
+html[dir="rtl"] .toggle-button.start .img,
+html[dir="ltr"] .toggle-button.end:not(.vertical) .img {
+ transform: scaleX(-1);
}
-html .toggle-button.end.vertical .img {
+.toggle-button.end.vertical .img {
transform: rotate(-90deg);
}
-
-.toggle-button.start.collapsed,
-.toggle-button.end.collapsed {
- transform: rotate(180deg);
-}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/CloseButton.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/CloseButton.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/CloseButton.spec.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/CloseButton.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -11,7 +11,9 @@
describe("CloseButton", () => {
it("renders with tooltip", () => {
const tooltip = "testTooltip";
- const wrapper = shallow( );
+ const wrapper = shallow(
+ {}} />
+ );
expect(wrapper).toMatchSnapshot();
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/CommandBarButton.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/CommandBarButton.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/CommandBarButton.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/CommandBarButton.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -10,13 +10,17 @@
describe("CommandBarButton", () => {
it("renders", () => {
- const wrapper = shallow( );
+ const wrapper = shallow(
+
+ );
expect(wrapper).toMatchSnapshot();
});
it("renders children", () => {
const children = [1, 2, 3, 4];
- const wrapper = shallow( );
+ const wrapper = shallow(
+
+ );
expect(wrapper.find("button").children()).toHaveLength(4);
});
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/PaneToggleButton.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/PaneToggleButton.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/PaneToggleButton.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/PaneToggleButton.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -10,7 +10,13 @@
describe("PaneToggleButton", () => {
const handleClickSpy = jest.fn();
- const wrapper = shallow( );
+ const wrapper = shallow(
+
+ );
it("renders default", () => {
expect(wrapper.hasClass("vertical")).toBe(true);
@@ -39,9 +45,9 @@
it("handleClick is called", () => {
const position = "testPosition";
- const collapsed = "testCollapsed";
+ const collapsed = false;
wrapper.setProps({ position, collapsed });
wrapper.simulate("click");
- expect(handleClickSpy).toBeCalledWith(position, collapsed);
+ expect(handleClickSpy).toBeCalledWith(position, true);
});
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/__snapshots__/CloseButton.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/__snapshots__/CloseButton.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Button/tests/__snapshots__/CloseButton.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Button/tests/__snapshots__/CloseButton.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -3,6 +3,7 @@
exports[`CloseButton renders with tooltip 1`] = `
`;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/ManagedTree.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/ManagedTree.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/ManagedTree.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/ManagedTree.js 2019-02-07 12:50:26.000000000 +0000
@@ -40,8 +40,7 @@
constructor(props: Props) {
super(props);
this.state = {
- expanded: props.expanded || new Set(),
- focusedItem: null
+ expanded: props.expanded || new Set()
};
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/PreviewFunction.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/PreviewFunction.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/PreviewFunction.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/PreviewFunction.js 2019-02-07 12:50:26.000000000 +0000
@@ -25,7 +25,7 @@
export default class PreviewFunction extends Component {
renderFunctionName(func: FunctionType) {
const { l10n } = this.context;
- const name = formatDisplayName(func, undefined, l10n);
+ const name = formatDisplayName((func: any), undefined, l10n);
return {name} ;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Svg.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Svg.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/shared/Svg.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/shared/Svg.css 2019-02-07 12:50:26.000000000 +0000
@@ -208,8 +208,13 @@
mask-size: 100%;
}
-.img.toggle-panes {
- mask: url(/images/toggle-panes.svg) no-repeat;
+.img.pane-collapse {
+ mask: url(/images/pane-collapse.svg) no-repeat;
+ mask-size: 100%;
+}
+
+.img.pane-expand {
+ mask: url(/images/pane-expand.svg) no-repeat;
mask-size: 100%;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/test/ProjectSearch.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/test/ProjectSearch.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/test/ProjectSearch.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/test/ProjectSearch.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -65,6 +65,7 @@
];
const testMatch = {
+ type: "MATCH",
match: "match1",
value: "some thing match1",
sourceId: "some-target/source42",
@@ -198,7 +199,7 @@
},
true
);
- component.instance().focusedItem = null;
+ component.instance().state.focusedItem = null;
shortcuts.dispatch("Enter");
expect(selectSpecificLocation).not.toHaveBeenCalled();
});
@@ -212,7 +213,7 @@
},
true
);
- component.instance().focusedItem = { match: testMatch, expanded: null };
+ component.instance().state.focusedItem = { ...testMatch };
shortcuts.dispatch("Enter");
expect(selectSpecificLocation).toHaveBeenCalledWith({
sourceId: "some-target/source42",
@@ -221,29 +222,6 @@
});
});
- it("onEnterPress shortcut setExpanded", () => {
- const selectSpecificLocation = jest.fn();
- const component = render(
- {
- results: testResults,
- selectSpecificLocation
- },
- true
- );
- const setExpanded = jest.fn();
- const testFile = {
- filepath: "testFilePath1",
- matches: [testMatch]
- };
- component.instance().focusedItem = {
- setExpanded,
- file: testFile,
- expanded: true
- };
- shortcuts.dispatch("Enter");
- expect(setExpanded).toHaveBeenCalledWith(testFile, false);
- });
-
it("state.inputValue responds to prop.query changes", () => {
const component = render({ query: "foo" });
expect(component.state().inputValue).toEqual("foo");
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/test/__snapshots__/Outline.spec.js.snap firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/test/__snapshots__/Outline.spec.js.snap
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/test/__snapshots__/Outline.spec.js.snap 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/test/__snapshots__/Outline.spec.js.snap 2019-02-07 12:50:26.000000000 +0000
@@ -10,7 +10,7 @@
updateFilter={[Function]}
/>
+
`;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/variables.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/variables.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/variables.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/variables.css 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+:root {
+ /* header height is 28px + 1px for its border */
+ --editor-header-height: 29px;
+ /* footer height is 24px + 1px for its border */
+ --editor-footer-height: 25px;
+ /* searchbar height is 24px + 2px for its top and bottom borders */
+ --editor-searchbar-height: 26px;
+}
+
:root.theme-light,
:root .theme-light {
--search-overlays-semitransparent: rgba(221, 225, 228, 0.66);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/WelcomeBox.css firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/WelcomeBox.css
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/WelcomeBox.css 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/WelcomeBox.css 2019-02-07 12:50:26.000000000 +0000
@@ -3,16 +3,13 @@
* file, You can obtain one at . */
.welcomebox {
- width: calc(100% - 1px);
-
- /* Offsetting it by 30px for the sources-header area */
- height: calc(100% - 30px);
position: absolute;
- top: 30px;
+ top: var(--editor-header-height);
left: 0;
+ bottom: 1px;
+ width: calc(100% - 1px);
padding: 50px 0 0 0;
text-align: center;
- font-size: 1.25em;
background-color: var(--theme-toolbar-background);
font-weight: lighter;
z-index: 10;
@@ -36,6 +33,7 @@
.alignlabel {
display: flex;
white-space: nowrap;
+ font-size: 1.25em;
}
.shortcutKeys {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/WelcomeBox.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/WelcomeBox.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/components/WelcomeBox.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/components/WelcomeBox.js 2019-02-07 12:50:26.000000000 +0000
@@ -35,7 +35,7 @@
return (
@@ -92,8 +92,8 @@
{allShortcutsLabel}
- {this.renderToggleButton()}
+ {this.renderToggleButton()}
);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/async-requests.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/async-requests.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/async-requests.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/async-requests.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* Async request reducer
* @module reducers/async-request
@@ -9,7 +11,7 @@
const initialAsyncRequestState = [];
-function update(state = initialAsyncRequestState, action) {
+function update(state: string[] = initialAsyncRequestState, action: any) {
const { seqId } = action;
if (action.type === "NAVIGATE") {
@@ -19,7 +21,7 @@
if (action.status === "start") {
newState = [...state, seqId];
} else if (action.status === "error" || action.status === "done") {
- newState = state.filter(id => id !== seqId);
+ newState = (state.filter(id => id !== seqId): string[]);
}
return newState;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* Reducer index
* @module reducers/index
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/quick-open.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/quick-open.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/quick-open.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/quick-open.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* Quick Open reducer
* @module reducers/quick-open
@@ -14,13 +16,13 @@
export type QuickOpenType = "sources" | "functions" | "goto" | "gotoSource";
-type QuickOpenState = {
+export type QuickOpenState = {
enabled: boolean,
query: string,
searchType: QuickOpenType
};
-export const createQuickOpenState = makeRecord({
+export const createQuickOpenState: () => Record = makeRecord({
enabled: false,
query: "",
searchType: "sources"
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/tests/quick-open.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/tests/quick-open.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/tests/quick-open.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/tests/quick-open.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -21,7 +21,7 @@
describe("quickOpen reducer", () => {
test("initial state", () => {
- const state = update(undefined, { type: "FAKE" });
+ const state = update(undefined, ({ type: "FAKE" }: any));
expect(getQuickOpenQuery({ quickOpen: state })).toEqual("");
expect(getQuickOpenType({ quickOpen: state })).toEqual("sources");
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/types.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/types.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/reducers/types.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/reducers/types.js 2019-02-07 12:50:26.000000000 +0000
@@ -21,6 +21,7 @@
import type { SourcesState } from "./sources";
import type { TabList } from "./tabs";
import type { UIState } from "./ui";
+import type { QuickOpenState } from "./quick-open";
export type State = {
ast: Record,
@@ -33,7 +34,8 @@
projectTextSearch: ProjectTextSearchState,
sources: SourcesState,
tabs: TabList,
- ui: Record
+ ui: Record,
+ quickOpen: Record
};
export type Selector = State => T;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/breakpointAtLocation.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/breakpointAtLocation.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/breakpointAtLocation.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/breakpointAtLocation.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,10 +2,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { getSelectedSource } from "../reducers/sources";
import { getBreakpointsList } from "../reducers/breakpoints";
import { isGenerated } from "../utils/source";
+import type { Breakpoint } from "../types";
+import type { State } from "../reducers/types";
+
function getColumn(column, selectedSource) {
if (column) {
return column;
@@ -20,10 +25,7 @@
: bp.location;
}
-function getBreakpointsForSource(
- state: OuterState,
- selectedSource: Source
-): Breakpoint[] {
+function getBreakpointsForSource(state: State, selectedSource): Breakpoint[] {
const breakpoints = getBreakpointsList(state);
return breakpoints.filter(bp => {
@@ -32,10 +34,12 @@
});
}
+type LineColumn = { line: number, column: ?number };
+
function findBreakpointAtLocation(
breakpoints,
selectedSource,
- { line, column }
+ { line, column }: LineColumn
) {
return breakpoints.find(breakpoint => {
const location = getLocation(breakpoint, selectedSource);
@@ -59,15 +63,21 @@
* This is useful for finding a breakpoint when the
* user clicks in the gutter or on a token.
*/
-export function getBreakpointAtLocation(state, location) {
+export function getBreakpointAtLocation(state: State, location: LineColumn) {
const selectedSource = getSelectedSource(state);
+ if (!selectedSource) {
+ throw new Error("no selectedSource");
+ }
const breakpoints = getBreakpointsForSource(state, selectedSource);
return findBreakpointAtLocation(breakpoints, selectedSource, location);
}
-export function getBreakpointsAtLine(state: OuterState, line: number) {
+export function getBreakpointsAtLine(state: State, line: number): Breakpoint[] {
const selectedSource = getSelectedSource(state);
+ if (!selectedSource) {
+ throw new Error("no selectedSource");
+ }
const breakpoints = getBreakpointsForSource(state, selectedSource);
return breakpoints.filter(
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/getCallStackFrames.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/getCallStackFrames.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/getCallStackFrames.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/getCallStackFrames.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import {
getSources,
getSelectedSource,
@@ -11,6 +13,7 @@
import { annotateFrames } from "../utils/pause/frames";
import { isOriginal } from "../utils/source";
import { get } from "lodash";
+import type { State } from "../reducers/types";
import type { Frame, Source } from "../types";
import type { SourcesMap } from "../reducers/sources";
import { createSelector } from "reselect";
@@ -21,12 +24,20 @@
: frame.location;
}
-function getSourceForFrame(sources, frame, isGeneratedSource) {
+function getSourceForFrame(
+ sources: SourcesMap,
+ frame: Frame,
+ isGeneratedSource
+) {
const sourceId = getLocation(frame, isGeneratedSource).sourceId;
return getSourceInSources(sources, sourceId);
}
-function appendSource(sources, frame, selectedSource) {
+function appendSource(
+ sources: SourcesMap,
+ frame: Frame,
+ selectedSource: ?Source
+): Frame {
const isGeneratedSource = selectedSource && !isOriginal(selectedSource);
return {
...frame,
@@ -44,7 +55,7 @@
return null;
}
- const formattedFrames = frames
+ const formattedFrames: Frame[] = frames
.filter(frame => getSourceForFrame(sources, frame))
.map(frame => appendSource(sources, frame, selectedSource))
.filter(frame => !get(frame, "source.isBlackBoxed"));
@@ -52,7 +63,7 @@
return annotateFrames(formattedFrames);
}
-export const getCallStackFrames = createSelector(
+export const getCallStackFrames: State => Frame[] = (createSelector: any)(
getFrames,
getSources,
getSelectedSource,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/isSelectedFrameVisible.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/isSelectedFrameVisible.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/isSelectedFrameVisible.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/isSelectedFrameVisible.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,9 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { originalToGeneratedId, isOriginalId } from "devtools-source-map";
import { getSelectedFrame } from "../reducers/pause";
import { getSelectedLocation } from "../reducers/sources";
+import type { State } from "../reducers/types";
function getGeneratedId(sourceId) {
if (isOriginalId(sourceId)) {
@@ -18,7 +21,7 @@
* Checks to if the selected frame's source is currently
* selected.
*/
-export function isSelectedFrameVisible(state) {
+export function isSelectedFrameVisible(state: State) {
const selectedLocation = getSelectedLocation(state);
const selectedFrame = getSelectedFrame(state);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/visiblePausePoints.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/visiblePausePoints.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/selectors/visiblePausePoints.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/selectors/visiblePausePoints.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,10 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { getSelectedSource } from "../reducers/sources";
import { getPausePoints } from "../reducers/ast";
-export function getVisiblePausePoints(state) {
+import type { State } from "../reducers/types";
+
+export function getVisiblePausePoints(state: State) {
const source = getSelectedSource(state);
if (!source) {
return null;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/request-animation-frame.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/request-animation-frame.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/request-animation-frame.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/request-animation-frame.js 2019-02-07 12:50:26.000000000 +0000
@@ -1,6 +1,9 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+
+// @flow
+
global.requestAnimationFrame = function(cb) {
cb();
return null;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/styleMock.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/styleMock.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/styleMock.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/styleMock.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,4 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
module.exports = {};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/svgMock.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/svgMock.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/__mocks__/svgMock.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/__mocks__/svgMock.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,4 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
module.exports = " ";
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/shim.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/shim.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/shim.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/shim.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,4 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
global.requestAnimationFrame = callback => setTimeout(callback, 0);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/tests-setup.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/tests-setup.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/tests-setup.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/tests-setup.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,12 +2,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
+// $FlowIgnore
global.Worker = require("workerjs");
import path from "path";
// import getConfig from "../../bin/getConfig";
import { readFileSync } from "fs";
import Enzyme from "enzyme";
+// $FlowIgnore
import Adapter from "enzyme-adapter-react-16";
import { setupHelper } from "../utils/dbg";
import { prefs } from "../utils/prefs";
@@ -65,7 +69,8 @@
beforeAll(() => {
startSourceMapWorker(
- path.join(rootPath, "node_modules/devtools-source-map/src/worker.js")
+ path.join(rootPath, "node_modules/devtools-source-map/src/worker.js"),
+ ""
);
startPrettyPrintWorker(
path.join(rootPath, "src/workers/pretty-print/worker.js")
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/utils/history.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/utils/history.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/test/utils/history.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/test/utils/history.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,8 +2,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
let logs = [];
-export function getHistory(query: ?string = null) {
+export function getHistory(query: ?string = null): any {
if (!query) {
return logs;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/types.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/types.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/types.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/types.js 2019-02-07 12:50:26.000000000 +0000
@@ -187,13 +187,14 @@
displayName: string,
location: SourceLocation,
generatedLocation: SourceLocation,
- source?: Source,
+ source: ?Source,
scope: Scope,
// FIXME Define this type more clearly
this: Object,
framework?: string,
isOriginal?: boolean,
- originalDisplayName?: string
+ originalDisplayName?: string,
+ library?: string
};
export type ChromeFrame = {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/editor/source-editor.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/editor/source-editor.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/editor/source-editor.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/editor/source-editor.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* CodeMirror source editor utils
* @module utils/source-editor
@@ -9,6 +11,7 @@
const CodeMirror = require("codemirror");
+// $FlowIgnore
require("codemirror/lib/codemirror.css");
require("codemirror/mode/javascript/javascript");
require("codemirror/mode/htmlmixed/htmlmixed");
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/editor/token-events.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/editor/token-events.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/editor/token-events.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/editor/token-events.js 2019-02-07 12:50:26.000000000 +0000
@@ -1,10 +1,12 @@
-import { getTokenLocation } from ".";
-import { isEqual } from "lodash";
-
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
+import { getTokenLocation } from ".";
+import { isEqual } from "lodash";
+
function isInvalidTarget(target: HTMLElement) {
if (!target || !target.innerText) {
return true;
@@ -50,7 +52,7 @@
return false;
}
-export function onMouseOver(codeMirror) {
+export function onMouseOver(codeMirror: any) {
let prevTokenPos = null;
function onMouseLeave(event) {
@@ -69,7 +71,7 @@
});
}
- return enterEvent => {
+ return (enterEvent: any) => {
const { target } = enterEvent;
if (isInvalidTarget(target)) {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/collapseFrames.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/collapseFrames.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/collapseFrames.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/collapseFrames.js 2019-02-07 12:50:26.000000000 +0000
@@ -7,7 +7,7 @@
import { get, findIndex } from "lodash";
// eslint-disable-next-line max-len
-import type { LocalFrame } from "../../../components/SecondaryPanes/Frames/types";
+import type { Frame } from "../../../types";
import { getFrameUrl } from "./getFrameUrl";
function collapseLastFrames(frames) {
@@ -24,10 +24,10 @@
return { newFrames, lastGroup };
}
-type FrameGroup = LocalFrame[];
-type GroupedFrames = Array;
+type FrameGroup = Frame[];
+type GroupedFrames = Array;
-export function collapseFrames(frames: LocalFrame[]): GroupedFrames {
+export function collapseFrames(frames: Frame[]): GroupedFrames {
// We collapse groups of one so that user frames
// are not in a group of one
function addGroupToList(group, list) {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/displayName.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/displayName.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/displayName.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/displayName.js 2019-02-07 12:50:26.000000000 +0000
@@ -5,7 +5,7 @@
// @flow
// eslint-disable-next-line max-len
-import type { LocalFrame } from "../../../components/SecondaryPanes/Frames/types";
+import type { Frame } from "../../../types";
import { getFilename } from "../../source";
// Decodes an anonymous naming scheme that
@@ -73,8 +73,13 @@
);
}
-function getFrameDisplayName(frame: LocalFrame): string {
- const { displayName, originalDisplayName, userDisplayName, name } = frame;
+function getFrameDisplayName(frame: Frame): string {
+ const {
+ displayName,
+ originalDisplayName,
+ userDisplayName,
+ name
+ } = (frame: any);
return originalDisplayName || userDisplayName || displayName || name;
}
@@ -82,7 +87,7 @@
shouldMapDisplayName: boolean
};
export function formatDisplayName(
- frame: LocalFrame,
+ frame: Frame,
{ shouldMapDisplayName = true }: formatDisplayNameParams = {},
l10n: typeof L10N
): string {
@@ -95,8 +100,11 @@
return simplifyDisplayName(displayName) || l10n.getStr("anonymousFunction");
}
-export function formatCopyName(frame: LocalFrame, l10n: typeof L10N): string {
+export function formatCopyName(frame: Frame, l10n: typeof L10N): string {
const displayName = formatDisplayName(frame, undefined, l10n);
+ if (!frame.source) {
+ throw new Error("no frame source");
+ }
const fileName = getFilename(frame.source);
const frameLocation = frame.location.line;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/tests/displayName.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/tests/displayName.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/pause/frames/tests/displayName.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/pause/frames/tests/displayName.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -10,17 +10,12 @@
simplifyDisplayName
} from "../displayName";
+import { makeMockFrame, makeMockSource } from "../../../test-mockup";
+
describe("formatCopyName", () => {
it("simple", () => {
- const frame = {
- displayName: "child",
- location: {
- line: 12
- },
- source: {
- url: "todo-view.js"
- }
- };
+ const source = makeMockSource("todo-view.js");
+ const frame = makeMockFrame(undefined, source, undefined, 12, "child");
expect(formatCopyName(frame, L10N)).toEqual("child (todo-view.js#12)");
});
@@ -28,35 +23,37 @@
describe("formatting display names", () => {
it("uses a library description", () => {
+ const source = makeMockSource("assets/backbone.js");
const frame = {
- library: "Backbone",
- displayName: "extend/child",
- source: {
- url: "assets/backbone.js"
- }
+ ...makeMockFrame(undefined, source, undefined, undefined, "extend/child"),
+ library: "Backbone"
};
expect(formatDisplayName(frame, undefined, L10N)).toEqual("Create Class");
});
it("shortens an anonymous function", () => {
- const frame = {
- displayName: "extend/child/bar/baz",
- source: {
- url: "assets/bar.js"
- }
- };
+ const source = makeMockSource("assets/bar.js");
+ const frame = makeMockFrame(
+ undefined,
+ source,
+ undefined,
+ undefined,
+ "extend/child/bar/baz"
+ );
expect(formatDisplayName(frame, undefined, L10N)).toEqual("baz");
});
it("does not truncates long function names", () => {
- const frame = {
- displayName: "bazbazbazbazbazbazbazbazbazbazbazbazbaz",
- source: {
- url: "assets/bar.js"
- }
- };
+ const source = makeMockSource("extend/child/bar/baz");
+ const frame = makeMockFrame(
+ undefined,
+ source,
+ undefined,
+ undefined,
+ "bazbazbazbazbazbazbazbazbazbazbazbazbaz"
+ );
expect(formatDisplayName(frame, undefined, L10N)).toEqual(
"bazbazbazbazbazbazbazbazbazbazbazbazbaz"
@@ -64,33 +61,28 @@
});
it("returns the original function name when present", () => {
+ const source = makeMockSource("entry.js");
const frame = {
+ ...makeMockFrame(undefined, source),
originalDisplayName: "originalFn",
- displayName: "fn",
- source: {
- url: "entry.js"
- }
+ displayName: "fn"
};
expect(formatDisplayName(frame, undefined, L10N)).toEqual("originalFn");
});
it("returns anonymous when displayName is undefined", () => {
- const frame = {};
+ const frame = { ...makeMockFrame(), displayName: undefined };
expect(formatDisplayName(frame, undefined, L10N)).toEqual("");
});
it("returns anonymous when displayName is null", () => {
- const frame = {
- displayName: null
- };
+ const frame = { ...makeMockFrame(), displayName: (null: any) };
expect(formatDisplayName(frame, undefined, L10N)).toEqual("");
});
it("returns anonymous when displayName is an empty string", () => {
- const frame = {
- displayName: ""
- };
+ const frame = { ...makeMockFrame(), displayName: "" };
expect(formatDisplayName(frame, undefined, L10N)).toEqual("");
});
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/sources-tree/sortTree.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/sources-tree/sortTree.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/sources-tree/sortTree.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/sources-tree/sortTree.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,17 +2,24 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { nodeHasChildren, isExactUrlMatch } from "./utils";
+import type { TreeDirectory } from "./types";
+
/**
* Look at the nodes in the source tree, and determine the index of where to
* insert a new node. The ordering is index -> folder -> file.
* @memberof utils/sources-tree
* @static
*/
-export function sortEntireTree(tree, debuggeeUrl = "") {
+export function sortEntireTree(
+ tree: TreeDirectory,
+ debuggeeUrl: string = ""
+): TreeDirectory {
if (nodeHasChildren(tree)) {
- const contents = sortTree(tree, debuggeeUrl).map(subtree =>
+ const contents = sortTree(tree, debuggeeUrl).map((subtree: any) =>
sortEntireTree(subtree)
);
return { ...tree, contents };
@@ -26,8 +33,8 @@
* @memberof utils/sources-tree
* @static
*/
-export function sortTree(tree, debuggeeUrl = "") {
- return tree.contents.sort((previousNode, currentNode) => {
+export function sortTree(tree: TreeDirectory, debuggeeUrl: string = "") {
+ return (tree.contents: any).sort((previousNode, currentNode) => {
const currentNodeIsDir = nodeHasChildren(currentNode);
const previousNodeIsDir = nodeHasChildren(previousNode);
if (currentNode.name === "(index)") {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/tabs.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/tabs.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/tabs.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/tabs.js 2019-02-07 12:50:26.000000000 +0000
@@ -5,7 +5,7 @@
// @flow
import type { Source } from "../types";
-import type { TabList } from "../reducers";
+import type { TabList } from "../reducers/tabs";
type SourcesList = Source[];
/*
@@ -41,7 +41,7 @@
});
}
-export function getFramework(tabs: TabList[], url: string) {
+export function getFramework(tabs: TabList, url: string) {
const tab = tabs.find(t => t.url === url);
if (tab) {
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/task.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/task.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/task.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/task.js 2019-02-07 12:50:26.000000000 +0000
@@ -4,12 +4,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* This object provides the public module functions.
*/
export const Task = {
// XXX: Not sure if this works in all cases...
- async: function(task) {
+ async: function(task: any) {
return function() {
return Task.spawn(task, this, arguments);
};
@@ -20,7 +22,7 @@
* @param task A generator function
* @return A promise, resolved when the task terminates
*/
- spawn: function(task, scope, args) {
+ spawn: function(task: any, scope: any, args: any): Promise {
return new Promise(function(resolve, reject) {
const iterator = task.apply(scope, args);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/test-mockup.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/test-mockup.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/test-mockup.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/test-mockup.js 2019-02-07 12:50:26.000000000 +0000
@@ -108,13 +108,15 @@
function makeMockFrame(
id: FrameId = "frame",
source: Source = makeMockSource("url"),
- scope: Scope = makeMockScope()
+ scope: Scope = makeMockScope(),
+ line: number = 4,
+ displayName: string = `display-${id}`
): Frame {
- const location = { sourceId: source.id, line: 4 };
+ const location = { sourceId: source.id, line };
return {
id,
thread: "FakeThread",
- displayName: `display-${id}`,
+ displayName,
location,
generatedLocation: location,
source,
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/url.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/url.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/url.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/url.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { memoize } from "lodash";
const defaultUrl = {
@@ -21,10 +23,10 @@
username: ""
};
-export const parse = memoize(function parse(url: string) {
+export const parse = memoize(function parse(url: string): any {
try {
const urlObj = new URL(url);
- urlObj.path = urlObj.pathname + urlObj.search;
+ (urlObj: any).path = urlObj.pathname + urlObj.search;
return urlObj;
} catch (err) {
// If we're given simply a filename...
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/worker.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/worker.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/utils/worker.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/utils/worker.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
export type Message = {
data: {
id: string,
@@ -16,7 +18,7 @@
* @static
*/
function workerTask(worker: any, method: string) {
- return function(...args: any) {
+ return function(...args: any): Promise {
return new Promise((resolve, reject) => {
const id = msgId++;
worker.postMessage({ id, method, args });
@@ -39,7 +41,7 @@
};
}
-function workerHandler(publicInterface) {
+function workerHandler(publicInterface: any) {
return function onTask(msg: Message) {
const { id, method, args } = msg.data;
const response = publicInterface[method].apply(null, args);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/vendors.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/vendors.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/vendors.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/vendors.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
/**
* Vendors.js is a file used to bundle and expose all dependencies needed to run
* the transpiled debugger modules when running in Firefox.
@@ -16,6 +18,7 @@
// Modules imported with destructuring
import * as devtoolsComponents from "devtools-components";
+// $FlowIgnore
import * as devtoolsConfig from "devtools-config";
import * as devtoolsContextmenu from "devtools-contextmenu";
import * as devtoolsEnvironment from "devtools-environment";
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/mapBindings.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/mapBindings.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/mapBindings.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/mapBindings.js 2019-02-07 12:50:26.000000000 +0000
@@ -60,7 +60,7 @@
t.assignmentExpression(
"=",
getAssignmentTarget(declaration.id, bindings),
- declaration.init
+ declaration.init || t.unaryExpression("void", t.numericLiteral(0))
)
)
);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/helpers/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/helpers/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/helpers/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/helpers/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,17 +2,21 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import fs from "fs";
import path from "path";
-export function getFixture(name, type = "js") {
+import { makeMockSource } from "../../../../utils/test-mockup";
+
+export function getFixture(name: string, type: string = "js") {
return fs.readFileSync(
path.join(__dirname, `../fixtures/${name}.${type}`),
"utf8"
);
}
-export function getSource(name, type) {
+export function getSource(name: string, type: string = "js") {
const text = getFixture(name, type);
let contentType = "text/javascript";
if (type === "html") {
@@ -25,14 +29,10 @@
contentType = "text/typescript-jsx";
}
- return {
- id: name,
- text,
- contentType
- };
+ return makeMockSource(undefined, name, contentType, text);
}
-export function getOriginalSource(name, type) {
+export function getOriginalSource(name: string, type: string = "js") {
const source = getSource(name, type);
return { ...source, id: `${name}/originalSource-1` };
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/mapBindings.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/mapBindings.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/mapBindings.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/mapBindings.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -45,6 +45,16 @@
newExpression: "self.a = 2; self.b = 3"
},
{
+ name: "declaration with separate assignment",
+ expression: "let a; a = 2;",
+ newExpression: "self.a = void 0; self.a = 2;"
+ },
+ {
+ name: "multiple declarations with no assignment",
+ expression: "let a = 2, b;",
+ newExpression: "self.a = 2; self.b = void 0;"
+ },
+ {
name: "local bindings become assignments",
bindings: ["a"],
expression: "var a = 2;",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/mapExpression.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/mapExpression.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/mapExpression.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/mapExpression.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -505,6 +505,24 @@
}
},
{
+ name: "await (no bindings, dynamic import)",
+ expression: `
+ var {rainbowLog} = await import("./cool-module.js");
+ rainbowLog("dynamic");`,
+ newExpression: `var rainbowLog;
+
+ (async () => {
+ ({rainbowLog} = await import("./cool-module.js"));
+ return rainbowLog("dynamic");
+ })()`,
+ shouldMapBindings: false,
+ expectedMapped: {
+ await: true,
+ bindings: false,
+ originalExpression: false
+ }
+ },
+ {
name: "simple",
expression: "a",
newExpression: "a",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/pausePoints.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/pausePoints.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/tests/pausePoints.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/tests/pausePoints.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -27,7 +27,7 @@
// The coercion here is needed because getPausePoints and convertToList
// operate on two incompatible definitions of PausePointsMap
const nodes = convertToList((getPausePoints(source.id): any));
- expect(formatPausePoints(source.text, nodes)).toMatchSnapshot();
+ expect(formatPausePoints(source.text || "", nodes)).toMatchSnapshot();
},
[
{ name: "control-flow", file: "control-flow" },
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/utils/ast.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/utils/ast.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/utils/ast.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/utils/ast.js 2019-02-07 12:50:26.000000000 +0000
@@ -101,7 +101,7 @@
export function parseConsoleScript(text: string, opts?: Object): Object | null {
try {
return _parse(text, {
- plugins: ["objectRestSpread"],
+ plugins: ["objectRestSpread", "dynamicImport"],
...opts,
allowAwaitOutsideFunction: true
});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/utils/formatSymbols.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/utils/formatSymbols.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/parser/utils/formatSymbols.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/parser/utils/formatSymbols.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,9 +2,13 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { getSymbols } from "../getSymbols";
import { setSource } from "../sources";
+import type { Source } from "../../../types";
+
function formatLocation(loc) {
if (!loc) {
return "";
@@ -40,7 +44,7 @@
return `${name}: ${symbols[name] ? "true" : "false"}`;
}
-function formatKey(name, symbols) {
+function formatKey(name: string, symbols: any) {
if (bools.includes(name)) {
return formatBool(name, symbols);
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/get-matches.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/get-matches.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/get-matches.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/get-matches.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,14 +2,18 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import assert from "../../utils/assert";
import buildQuery from "../../utils/build-query";
+import type { SearchModifiers } from "../../types";
+
export default function getMatches(
query: string,
text: string,
modifiers: SearchModifiers
-): number {
+): Object[] {
if (!query || !text || !modifiers) {
return [];
}
@@ -22,6 +26,11 @@
let singleMatch;
const line = lines[i];
while ((singleMatch = regexQuery.exec(line)) !== null) {
+ // Flow doesn't understand the test above.
+ if (!singleMatch) {
+ throw new Error("no singleMatch");
+ }
+
matchedLocations.push({ line: i, ch: singleMatch.index });
// When the match is an empty string the regexQuery.lastIndex will not
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/index.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/index.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/index.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/index.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import { workerUtils } from "devtools-utils";
const { WorkerDispatcher } = workerUtils;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/project-search.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/project-search.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/project-search.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/project-search.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,13 +2,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
// Maybe reuse file search's functions?
import getMatches from "./get-matches";
-export function findSourceMatches(source, queryText) {
+import type { Source } from "../../types";
+
+export function findSourceMatches(source: Source, queryText: string): Object[] {
const { id, loadedState, text } = source;
- if (loadedState != "loaded" || !text || queryText == "") {
+ if (loadedState != "loaded" || typeof text != "string" || queryText == "") {
return [];
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/tests/project-search.spec.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/tests/project-search.spec.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/tests/project-search.spec.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/tests/project-search.spec.js 2019-02-07 12:50:26.000000000 +0000
@@ -17,21 +17,21 @@
it("throws on lack of source", () => {
const needle = "test";
- const source = null;
+ const source: any = null;
const matches = () => findSourceMatches(source, needle);
expect(matches).toThrow(TypeError);
});
it("handles empty source object", () => {
const needle = "test";
- const source = {};
+ const source: any = {};
const matches = findSourceMatches(source, needle);
expect(matches).toEqual(emptyResults);
});
it("finds matches", () => {
const needle = "foo";
- const source = {
+ const source: any = {
text,
loadedState: "loaded",
id: "bar.js",
@@ -44,7 +44,7 @@
it("finds no matches in source", () => {
const needle = "test";
- const source = {
+ const source: any = {
text,
loadedState: "loaded",
id: "bar.js",
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/worker.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/worker.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/src/workers/search/worker.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/src/workers/search/worker.js 2019-02-07 12:50:26.000000000 +0000
@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
+// @flow
+
import getMatches from "./get-matches";
import { findSourceMatches } from "./project-search";
import { workerUtils } from "devtools-utils";
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions-focus.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions-focus.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions-focus.js 1970-01-01 00:00:00.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions-focus.js 2019-02-07 12:50:26.000000000 +0000
@@ -0,0 +1,19 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+
+// Ensures the input is displayed and focused when "+" is clicked
+add_task(async function() {
+ const dbg = await initDebugger("doc-script-switching.html");
+ // Close the panel
+ clickElementWithSelector(dbg, ".watch-expressions-pane ._header");
+ // Click + to add the new expression
+ clickElementWithSelector(dbg, ".watch-expressions-pane ._header .plus");
+ // Ensure element gets focused
+ await waitForElementWithSelector(dbg, ".expression-input-container.focused");
+ // Ensure the element is focused
+ is(
+ dbg.win.document.activeElement.classList.contains("input-expression"),
+ true
+ );
+});
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions.js 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser_dbg-expressions.js 2019-02-07 12:50:26.000000000 +0000
@@ -1,5 +1,6 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
/**
* tests the watch expressions component
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser.ini firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser.ini
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/debugger/new/test/mochitest/browser.ini 2019-02-06 08:02:35.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/debugger/new/test/mochitest/browser.ini 2019-02-07 12:50:26.000000000 +0000
@@ -700,6 +700,7 @@
[browser_dbg-ember-quickstart.js]
[browser_dbg-expressions.js]
[browser_dbg-expressions-error.js]
+[browser_dbg-expressions-focus.js]
[browser_dbg-iframes.js]
[browser_dbg-inline-cache.js]
skip-if = ccov && os == 'win' # Bug 1443132
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/dom/.eslintrc.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/dom/.eslintrc.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/dom/.eslintrc.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/dom/.eslintrc.js 2019-02-07 12:50:26.000000000 +0000
@@ -9,9 +9,5 @@
"document": true,
"dispatchEvent": true,
"MessageEvent": true
- },
- "rules": {
- "indent-legacy": "off",
- "padded-blocks": "off",
}
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/inspector/flexbox/components/Header.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/inspector/flexbox/components/Header.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/inspector/flexbox/components/Header.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/inspector/flexbox/components/Header.js 2019-02-07 12:50:26.000000000 +0000
@@ -57,7 +57,7 @@
className: "devtools-checkbox-toggle",
checked: this.props.highlighted,
onChange: this.onFlexboxCheckboxClick,
- title: getStr("flexbox.togglesFlexboxHighlighter"),
+ title: getStr("flexbox.togglesFlexboxHighlighter2"),
type: "checkbox",
})
);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/locales/en-US/layout.properties firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/locales/en-US/layout.properties
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/locales/en-US/layout.properties 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/locales/en-US/layout.properties 2019-02-07 12:50:26.000000000 +0000
@@ -87,9 +87,9 @@
# there might not have been enough space on the flex line for all items to fit.
flexbox.itemSizing.notSetToShrink=Item was not set to shrink.
-# LOCALIZATION NOTE (flexbox.togglesFlexboxHighlighter): The tooltip text for the Flexbox
+# LOCALIZATION NOTE (flexbox.togglesFlexboxHighlighter2): The tooltip text for the Flexbox
# toggle button.
-flexbox.togglesFlexboxHighlighter=Toggles Flexbox Highlighter
+flexbox.togglesFlexboxHighlighter2=Toggle Flexbox Highlighter
# LOCALIZATION NOTE (layout.cannotShowGridOutline, layout.cannotSHowGridOutline.title):
# In the case where the grid outline cannot be effectively displayed.
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/shared/source-map/worker.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/shared/source-map/worker.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/shared/source-map/worker.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/shared/source-map/worker.js 2019-02-07 12:50:26.000000000 +0000
@@ -413,810 +413,858 @@
/***/ }),
-/***/ 3651:
+/***/ 3641:
/***/ (function(module, exports, __webpack_require__) {
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const networkRequest = __webpack_require__(3653);
-const workerUtils = __webpack_require__(3654);
+/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */
+;(function(root) {
-module.exports = {
- networkRequest,
- workerUtils
-};
+ /** Detect free variables */
+ var freeExports = typeof exports == 'object' && exports &&
+ !exports.nodeType && exports;
+ var freeModule = typeof module == 'object' && module &&
+ !module.nodeType && module;
+ var freeGlobal = typeof global == 'object' && global;
+ if (
+ freeGlobal.global === freeGlobal ||
+ freeGlobal.window === freeGlobal ||
+ freeGlobal.self === freeGlobal
+ ) {
+ root = freeGlobal;
+ }
-/***/ }),
+ /**
+ * The `punycode` object.
+ * @name punycode
+ * @type Object
+ */
+ var punycode,
-/***/ 3652:
-/***/ (function(module, exports, __webpack_require__) {
+ /** Highest positive signed 32-bit float value */
+ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
-"use strict";
+ /** Bootstring parameters */
+ base = 36,
+ tMin = 1,
+ tMax = 26,
+ skew = 38,
+ damp = 700,
+ initialBias = 72,
+ initialN = 128, // 0x80
+ delimiter = '-', // '\x2D'
+ /** Regular expressions */
+ regexPunycode = /^xn--/,
+ regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
+ regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ /** Error messages */
+ errors = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+ },
-const md5 = __webpack_require__(248);
+ /** Convenience shortcuts */
+ baseMinusTMin = base - tMin,
+ floor = Math.floor,
+ stringFromCharCode = String.fromCharCode,
-function originalToGeneratedId(originalId) {
- const match = originalId.match(/(.*)\/originalSource/);
- return match ? match[1] : "";
-}
+ /** Temporary variable */
+ key;
-function generatedToOriginalId(generatedId, url) {
- return `${generatedId}/originalSource-${md5(url)}`;
-}
+ /*--------------------------------------------------------------------------*/
-function isOriginalId(id) {
- return (/\/originalSource/.test(id)
- );
-}
+ /**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+ function error(type) {
+ throw new RangeError(errors[type]);
+ }
-function isGeneratedId(id) {
- return !isOriginalId(id);
-}
+ /**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+ function map(array, fn) {
+ var length = array.length;
+ var result = [];
+ while (length--) {
+ result[length] = fn(array[length]);
+ }
+ return result;
+ }
-/**
- * Trims the query part or reference identifier of a URL string, if necessary.
- */
-function trimUrlQuery(url) {
- const length = url.length;
- const q1 = url.indexOf("?");
- const q2 = url.indexOf("&");
- const q3 = url.indexOf("#");
- const q = Math.min(q1 != -1 ? q1 : length, q2 != -1 ? q2 : length, q3 != -1 ? q3 : length);
+ /**
+ * A simple `Array#map`-like wrapper to work with domain name strings or email
+ * addresses.
+ * @private
+ * @param {String} domain The domain name or email address.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {Array} A new string of characters returned by the callback
+ * function.
+ */
+ function mapDomain(string, fn) {
+ var parts = string.split('@');
+ var result = '';
+ if (parts.length > 1) {
+ // In email addresses, only the domain name should be punycoded. Leave
+ // the local part (i.e. everything up to `@`) intact.
+ result = parts[0] + '@';
+ string = parts[1];
+ }
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ string = string.replace(regexSeparators, '\x2E');
+ var labels = string.split('.');
+ var encoded = map(labels, fn).join('.');
+ return result + encoded;
+ }
- return url.slice(0, q);
-}
+ /**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+ function ucs2decode(string) {
+ var output = [],
+ counter = 0,
+ length = string.length,
+ value,
+ extra;
+ while (counter < length) {
+ value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // high surrogate, and there is a next character
+ extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // unmatched surrogate; only append this code unit, in case the next
+ // code unit is the high surrogate of a surrogate pair
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+ }
-// Map suffix to content type.
-const contentMap = {
- js: "text/javascript",
- jsm: "text/javascript",
- mjs: "text/javascript",
- ts: "text/typescript",
- tsx: "text/typescript-jsx",
- jsx: "text/jsx",
- vue: "text/vue",
- coffee: "text/coffeescript",
- elm: "text/elm",
- cljc: "text/x-clojure",
- cljs: "text/x-clojurescript"
-};
+ /**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+ function ucs2encode(array) {
+ return map(array, function(value) {
+ var output = '';
+ if (value > 0xFFFF) {
+ value -= 0x10000;
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+ value = 0xDC00 | value & 0x3FF;
+ }
+ output += stringFromCharCode(value);
+ return output;
+ }).join('');
+ }
-/**
- * Returns the content type for the specified URL. If no specific
- * content type can be determined, "text/plain" is returned.
- *
- * @return String
- * The content type.
- */
-function getContentType(url) {
- url = trimUrlQuery(url);
- const dot = url.lastIndexOf(".");
- if (dot >= 0) {
- const name = url.substring(dot + 1);
- if (name in contentMap) {
- return contentMap[name];
- }
- }
- return "text/plain";
-}
+ /**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+ function basicToDigit(codePoint) {
+ if (codePoint - 48 < 10) {
+ return codePoint - 22;
+ }
+ if (codePoint - 65 < 26) {
+ return codePoint - 65;
+ }
+ if (codePoint - 97 < 26) {
+ return codePoint - 97;
+ }
+ return base;
+ }
-module.exports = {
- originalToGeneratedId,
- generatedToOriginalId,
- isOriginalId,
- isGeneratedId,
- getContentType,
- contentMapForTesting: contentMap
-};
-
-/***/ }),
+ /**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+ function digitToBasic(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+ }
-/***/ 3653:
-/***/ (function(module, exports) {
+ /**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * https://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+ function adapt(delta, numPoints, firstTime) {
+ var k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+ }
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ /**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+ function decode(input) {
+ // Don't use UCS-2
+ var output = [],
+ inputLength = input.length,
+ out,
+ i = 0,
+ n = initialN,
+ bias = initialBias,
+ basic,
+ j,
+ index,
+ oldi,
+ w,
+ k,
+ digit,
+ t,
+ /** Cached calculation results */
+ baseMinusT;
-function networkRequest(url, opts) {
- return fetch(url, {
- cache: opts.loadFromCache ? "default" : "no-cache"
- }).then(res => {
- if (res.status >= 200 && res.status < 300) {
- if (res.headers.get("Content-Type") === "application/wasm") {
- return res.arrayBuffer().then(buffer => ({
- content: buffer,
- isDwarf: true
- }));
- }
- return res.text().then(text => ({ content: text }));
- }
- return Promise.reject(`request failed with status ${res.status}`);
- });
-}
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
-module.exports = networkRequest;
+ basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
-/***/ }),
+ for (j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
-/***/ 3654:
-/***/ (function(module, exports) {
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
-function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
+ for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-function WorkerDispatcher() {
- this.msgId = 1;
- this.worker = null;
-} /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
-WorkerDispatcher.prototype = {
- start(url, win = window) {
- this.worker = new win.Worker(url);
- this.worker.onerror = () => {
- console.error(`Error in worker ${url}`);
- };
- },
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
- stop() {
- if (!this.worker) {
- return;
- }
+ digit = basicToDigit(input.charCodeAt(index++));
- this.worker.terminate();
- this.worker = null;
- },
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
- task(method, { queue = false } = {}) {
- const calls = [];
- const push = args => {
- return new Promise((resolve, reject) => {
- if (queue && calls.length === 0) {
- Promise.resolve().then(flush);
- }
+ i += digit * w;
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- calls.push([args, resolve, reject]);
+ if (digit < t) {
+ break;
+ }
- if (!queue) {
- flush();
- }
- });
- };
+ baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
- const flush = () => {
- const items = calls.slice();
- calls.length = 0;
+ w *= baseMinusT;
- if (!this.worker) {
- return;
- }
+ }
- const id = this.msgId++;
- this.worker.postMessage({
- id,
- method,
- calls: items.map(item => item[0])
- });
+ out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
- const listener = ({ data: result }) => {
- if (result.id !== id) {
- return;
- }
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
- if (!this.worker) {
- return;
- }
+ n += floor(i / out);
+ i %= out;
- this.worker.removeEventListener("message", listener);
+ // Insert `n` at position `i` of the output
+ output.splice(i++, 0, n);
- result.results.forEach((resultData, i) => {
- const [, resolve, reject] = items[i];
+ }
- if (resultData.error) {
- reject(resultData.error);
- } else {
- resolve(resultData.response);
- }
- });
- };
+ return ucs2encode(output);
+ }
- this.worker.addEventListener("message", listener);
- };
+ /**
+ * Converts a string of Unicode symbols (e.g. a domain name label) to a
+ * Punycode string of ASCII-only symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+ function encode(input) {
+ var n,
+ delta,
+ handledCPCount,
+ basicLength,
+ bias,
+ j,
+ m,
+ q,
+ k,
+ t,
+ currentValue,
+ output = [],
+ /** `inputLength` will hold the number of code points in `input`. */
+ inputLength,
+ /** Cached calculation results */
+ handledCPCountPlusOne,
+ baseMinusT,
+ qMinusT;
- return (...args) => push(args);
- },
+ // Convert the input in UCS-2 to Unicode
+ input = ucs2decode(input);
- invoke(method, ...args) {
- return this.task(method)(...args);
- }
-};
+ // Cache the length
+ inputLength = input.length;
-function workerHandler(publicInterface) {
- return function (msg) {
- const { id, method, calls } = msg.data;
+ // Initialize the state
+ n = initialN;
+ delta = 0;
+ bias = initialBias;
- Promise.all(calls.map(args => {
- try {
- const response = publicInterface[method].apply(undefined, args);
- if (response instanceof Promise) {
- return response.then(val => ({ response: val }),
- // Error can't be sent via postMessage, so be sure to
- // convert to string.
- err => ({ error: err.toString() }));
- }
- return { response };
- } catch (error) {
- // Error can't be sent via postMessage, so be sure to convert to
- // string.
- return { error: error.toString() };
- }
- })).then(results => {
- self.postMessage({ id, results });
- });
- };
-}
-
-function streamingWorkerHandler(publicInterface, { timeout = 100 } = {}, worker = self) {
- let streamingWorker = (() => {
- var _ref = _asyncToGenerator(function* (id, tasks) {
- let isWorking = true;
-
- const timeoutId = setTimeout(function () {
- isWorking = false;
- }, timeout);
-
- const results = [];
- while (tasks.length !== 0 && isWorking) {
- const { callback, context, args } = tasks.shift();
- const result = yield callback.call(context, args);
- results.push(result);
- }
- worker.postMessage({ id, status: "pending", data: results });
- clearTimeout(timeoutId);
-
- if (tasks.length !== 0) {
- yield streamingWorker(id, tasks);
- }
- });
-
- return function streamingWorker(_x, _x2) {
- return _ref.apply(this, arguments);
- };
- })();
+ // Handle the basic code points
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
- return (() => {
- var _ref2 = _asyncToGenerator(function* (msg) {
- const { id, method, args } = msg.data;
- const workerMethod = publicInterface[method];
- if (!workerMethod) {
- console.error(`Could not find ${method} defined in worker.`);
- }
- worker.postMessage({ id, status: "start" });
+ handledCPCount = basicLength = output.length;
- try {
- const tasks = workerMethod(args);
- yield streamingWorker(id, tasks);
- worker.postMessage({ id, status: "done" });
- } catch (error) {
- worker.postMessage({ id, status: "error", error });
- }
- });
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
- return function (_x3) {
- return _ref2.apply(this, arguments);
- };
- })();
-}
+ // Finish the basic string - if it is not empty - with a delimiter
+ if (basicLength) {
+ output.push(delimiter);
+ }
-module.exports = {
- WorkerDispatcher,
- workerHandler,
- streamingWorkerHandler
-};
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
-/***/ }),
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ for (m = maxInt, j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
-/***/ 3668:
-/***/ (function(module, exports, __webpack_require__) {
+ // Increase `delta` enough to advance the decoder's state to ,
+ // but guard against overflow
+ handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
-const URL = __webpack_require__(3815);
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
- if (aName in aArgs) {
- return aArgs[aName];
- } else if (arguments.length === 3) {
- return aDefaultValue;
- }
- throw new Error('"' + aName + '" is a required argument.');
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
-}
-exports.getArg = getArg;
+ if (currentValue == n) {
+ // Represent delta as a generalized variable-length integer
+ for (q = delta, k = base; /* no condition */; k += base) {
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ qMinusT = q - t;
+ baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
-const supportsNullProto = (function() {
- const obj = Object.create(null);
- return !("__proto__" in obj);
-}());
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
-function identity(s) {
- return s;
-}
+ ++delta;
+ ++n;
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
- if (isProtoString(aStr)) {
- return "$" + aStr;
- }
+ }
+ return output.join('');
+ }
- return aStr;
-}
-exports.toSetString = supportsNullProto ? identity : toSetString;
+ /**
+ * Converts a Punycode string representing a domain name or an email address
+ * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+ * it doesn't matter if you call it on a string that has already been
+ * converted to Unicode.
+ * @memberOf punycode
+ * @param {String} input The Punycoded domain name or email address to
+ * convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+ function toUnicode(input) {
+ return mapDomain(input, function(string) {
+ return regexPunycode.test(string)
+ ? decode(string.slice(4).toLowerCase())
+ : string;
+ });
+ }
-function fromSetString(aStr) {
- if (isProtoString(aStr)) {
- return aStr.slice(1);
- }
+ /**
+ * Converts a Unicode string representing a domain name or an email address to
+ * Punycode. Only the non-ASCII parts of the domain name will be converted,
+ * i.e. it doesn't matter if you call it with a domain that's already in
+ * ASCII.
+ * @memberOf punycode
+ * @param {String} input The domain name or email address to convert, as a
+ * Unicode string.
+ * @returns {String} The Punycode representation of the given domain name or
+ * email address.
+ */
+ function toASCII(input) {
+ return mapDomain(input, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode(string)
+ : string;
+ });
+ }
- return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
+ /*--------------------------------------------------------------------------*/
-function isProtoString(s) {
- if (!s) {
- return false;
- }
+ /** Define the public API */
+ punycode = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '1.4.1',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode,
+ 'encode': encode,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+ };
- const length = s.length;
+ /** Expose `punycode` */
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ true
+ ) {
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
+ return punycode;
+ }).call(exports, __webpack_require__, exports, module),
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else if (freeExports && freeModule) {
+ if (module.exports == freeExports) {
+ // in Node.js, io.js, or RingoJS v0.8.0+
+ freeModule.exports = punycode;
+ } else {
+ // in Narwhal or RingoJS v0.7.0-
+ for (key in punycode) {
+ punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
+ }
+ }
+ } else {
+ // in Rhino or a web browser
+ root.punycode = punycode;
+ }
- if (length < 9 /* "__proto__".length */) {
- return false;
- }
+}(this));
- /* eslint-disable no-multi-spaces */
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
- return false;
- }
- /* eslint-enable no-multi-spaces */
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(793)(module), __webpack_require__(792)))
- for (let i = length - 10; i >= 0; i--) {
- if (s.charCodeAt(i) !== 36 /* '$' */) {
- return false;
- }
- }
+/***/ }),
- return true;
-}
+/***/ 3651:
+/***/ (function(module, exports, __webpack_require__) {
-function strcmp(aStr1, aStr2) {
- if (aStr1 === aStr2) {
- return 0;
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- if (aStr1 === null) {
- return 1; // aStr2 !== null
- }
+const networkRequest = __webpack_require__(3653);
+const workerUtils = __webpack_require__(3654);
- if (aStr2 === null) {
- return -1; // aStr1 !== null
- }
+module.exports = {
+ networkRequest,
+ workerUtils
+};
- if (aStr1 > aStr2) {
- return 1;
- }
+/***/ }),
- return -1;
-}
+/***/ 3652:
+/***/ (function(module, exports, __webpack_require__) {
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
- let cmp = mappingA.generatedLine - mappingB.generatedLine;
- if (cmp !== 0) {
- return cmp;
- }
+"use strict";
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
- if (cmp !== 0) {
- return cmp;
- }
- cmp = strcmp(mappingA.source, mappingB.source);
- if (cmp !== 0) {
- return cmp;
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- cmp = mappingA.originalLine - mappingB.originalLine;
- if (cmp !== 0) {
- return cmp;
- }
+const md5 = __webpack_require__(248);
- cmp = mappingA.originalColumn - mappingB.originalColumn;
- if (cmp !== 0) {
- return cmp;
- }
+function originalToGeneratedId(originalId) {
+ const match = originalId.match(/(.*)\/originalSource/);
+ return match ? match[1] : "";
+}
- return strcmp(mappingA.name, mappingB.name);
+function generatedToOriginalId(generatedId, url) {
+ return `${generatedId}/originalSource-${md5(url)}`;
}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-/**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
-function parseSourceMapInput(str) {
- return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
+function isOriginalId(id) {
+ return (/\/originalSource/.test(id)
+ );
}
-exports.parseSourceMapInput = parseSourceMapInput;
-// We use 'http' as the base here because we want URLs processed relative
-// to the safe base to be treated as "special" URLs during parsing using
-// the WHATWG URL parsing. This ensures that backslash normalization
-// applies to the path and such.
-const PROTOCOL = "http:";
-const PROTOCOL_AND_HOST = `${PROTOCOL}//host`;
+function isGeneratedId(id) {
+ return !isOriginalId(id);
+}
/**
- * Make it easy to create small utilities that tweak a URL's path.
+ * Trims the query part or reference identifier of a URL string, if necessary.
*/
-function createSafeHandler(cb) {
- return input => {
- const type = getURLType(input);
- const base = buildSafeBase(input);
- const url = new URL(input, base);
+function trimUrlQuery(url) {
+ const length = url.length;
+ const q1 = url.indexOf("?");
+ const q2 = url.indexOf("&");
+ const q3 = url.indexOf("#");
+ const q = Math.min(q1 != -1 ? q1 : length, q2 != -1 ? q2 : length, q3 != -1 ? q3 : length);
- cb(url);
+ return url.slice(0, q);
+}
- const result = url.toString();
+// Map suffix to content type.
+const contentMap = {
+ js: "text/javascript",
+ jsm: "text/javascript",
+ mjs: "text/javascript",
+ ts: "text/typescript",
+ tsx: "text/typescript-jsx",
+ jsx: "text/jsx",
+ vue: "text/vue",
+ coffee: "text/coffeescript",
+ elm: "text/elm",
+ cljc: "text/x-clojure",
+ cljs: "text/x-clojurescript"
+};
- if (type === "absolute") {
- return result;
- } else if (type === "scheme-relative") {
- return result.slice(PROTOCOL.length);
- } else if (type === "path-absolute") {
- return result.slice(PROTOCOL_AND_HOST.length);
+/**
+ * Returns the content type for the specified URL. If no specific
+ * content type can be determined, "text/plain" is returned.
+ *
+ * @return String
+ * The content type.
+ */
+function getContentType(url) {
+ url = trimUrlQuery(url);
+ const dot = url.lastIndexOf(".");
+ if (dot >= 0) {
+ const name = url.substring(dot + 1);
+ if (name in contentMap) {
+ return contentMap[name];
}
-
- // This assumes that the callback will only change
- // the path, search and hash values.
- return computeRelativeURL(base, result);
- };
+ }
+ return "text/plain";
}
-function withBase(url, base) {
- return new URL(url, base).toString();
-}
+module.exports = {
+ originalToGeneratedId,
+ generatedToOriginalId,
+ isOriginalId,
+ isGeneratedId,
+ getContentType,
+ contentMapForTesting: contentMap
+};
-function buildUniqueSegment(prefix, str) {
- let id = 0;
- do {
- const ident = prefix + (id++);
- if (str.indexOf(ident) === -1) return ident;
- } while (true);
-}
+/***/ }),
-function buildSafeBase(str) {
- const maxDotParts = str.split("..").length - 1;
+/***/ 3653:
+/***/ (function(module, exports) {
- // If we used a segment that also existed in `str`, then we would be unable
- // to compute relative paths. For example, if `segment` were just "a":
- //
- // const url = "../../a/"
- // const base = buildSafeBase(url); // http://host/a/a/
- // const joined = "http://host/a/";
- // const result = relative(base, joined);
- //
- // Expected: "../../a/";
- // Actual: "a/"
- //
- const segment = buildUniqueSegment("p", str);
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- let base = `${PROTOCOL_AND_HOST}/`;
- for (let i = 0; i < maxDotParts; i++) {
- base += `${segment}/`;
- }
- return base;
+function networkRequest(url, opts) {
+ return fetch(url, {
+ cache: opts.loadFromCache ? "default" : "no-cache"
+ }).then(res => {
+ if (res.status >= 200 && res.status < 300) {
+ if (res.headers.get("Content-Type") === "application/wasm") {
+ return res.arrayBuffer().then(buffer => ({
+ content: buffer,
+ isDwarf: true
+ }));
+ }
+ return res.text().then(text => ({ content: text }));
+ }
+ return Promise.reject(`request failed with status ${res.status}`);
+ });
}
-const ABSOLUTE_SCHEME = /^[A-Za-z0-9\+\-\.]+:/;
-function getURLType(url) {
- if (url[0] === "/") {
- if (url[1] === "/") return "scheme-relative";
- return "path-absolute";
- }
+module.exports = networkRequest;
- return ABSOLUTE_SCHEME.test(url) ? "absolute" : "path-relative";
-}
+/***/ }),
-/**
- * Given two URLs that are assumed to be on the same
- * protocol/host/user/password build a relative URL from the
- * path, params, and hash values.
- *
- * @param rootURL The root URL that the target will be relative to.
- * @param targetURL The target that the relative URL points to.
- * @return A rootURL-relative, normalized URL value.
- */
-function computeRelativeURL(rootURL, targetURL) {
- if (typeof rootURL === "string") rootURL = new URL(rootURL);
- if (typeof targetURL === "string") targetURL = new URL(targetURL);
+/***/ 3654:
+/***/ (function(module, exports) {
- const targetParts = targetURL.pathname.split("/");
- const rootParts = rootURL.pathname.split("/");
+function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
- // If we've got a URL path ending with a "/", we remove it since we'd
- // otherwise be relative to the wrong location.
- if (rootParts.length > 0 && !rootParts[rootParts.length - 1]) {
- rootParts.pop();
- }
+function WorkerDispatcher() {
+ this.msgId = 1;
+ this.worker = null;
+} /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- while (
- targetParts.length > 0 &&
- rootParts.length > 0 &&
- targetParts[0] === rootParts[0]
- ) {
- targetParts.shift();
- rootParts.shift();
- }
+WorkerDispatcher.prototype = {
+ start(url, win = window) {
+ this.worker = new win.Worker(url);
+ this.worker.onerror = () => {
+ console.error(`Error in worker ${url}`);
+ };
+ },
- const relativePath = rootParts
- .map(() => "..")
- .concat(targetParts)
- .join("/");
+ stop() {
+ if (!this.worker) {
+ return;
+ }
- return relativePath + targetURL.search + targetURL.hash;
-}
+ this.worker.terminate();
+ this.worker = null;
+ },
-/**
- * Given a URL, ensure that it is treated as a directory URL.
- *
- * @param url
- * @return A normalized URL value.
- */
-const ensureDirectory = createSafeHandler(url => {
- url.pathname = url.pathname.replace(/\/?$/, "/");
-});
+ task(method, { queue = false } = {}) {
+ const calls = [];
+ const push = args => {
+ return new Promise((resolve, reject) => {
+ if (queue && calls.length === 0) {
+ Promise.resolve().then(flush);
+ }
-/**
- * Given a URL, strip off any filename if one is present.
- *
- * @param url
- * @return A normalized URL value.
- */
-const trimFilename = createSafeHandler(url => {
- url.href = new URL(".", url.toString()).toString();
-});
+ calls.push([args, resolve, reject]);
-/**
- * Normalize a given URL.
- * * Convert backslashes.
- * * Remove any ".." and "." segments.
- *
- * @param url
- * @return A normalized URL value.
- */
-const normalize = createSafeHandler(url => {});
-exports.normalize = normalize;
+ if (!queue) {
+ flush();
+ }
+ });
+ };
-/**
- * Joins two paths/URLs.
- *
- * All returned URLs will be normalized.
- *
- * @param aRoot The root path or URL. Assumed to reference a directory.
- * @param aPath The path or URL to be joined with the root.
- * @return A joined and normalized URL value.
- */
-function join(aRoot, aPath) {
- const pathType = getURLType(aPath);
- const rootType = getURLType(aRoot);
+ const flush = () => {
+ const items = calls.slice();
+ calls.length = 0;
- aRoot = ensureDirectory(aRoot);
+ if (!this.worker) {
+ return;
+ }
- if (pathType === "absolute") {
- return withBase(aPath, undefined);
- }
- if (rootType === "absolute") {
- return withBase(aPath, aRoot);
- }
+ const id = this.msgId++;
+ this.worker.postMessage({
+ id,
+ method,
+ calls: items.map(item => item[0])
+ });
- if (pathType === "scheme-relative") {
- return normalize(aPath);
- }
- if (rootType === "scheme-relative") {
- return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(PROTOCOL.length);
- }
+ const listener = ({ data: result }) => {
+ if (result.id !== id) {
+ return;
+ }
- if (pathType === "path-absolute") {
- return normalize(aPath);
- }
- if (rootType === "path-absolute") {
- return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(PROTOCOL_AND_HOST.length);
- }
+ if (!this.worker) {
+ return;
+ }
- const base = buildSafeBase(aPath + aRoot);
- const newPath = withBase(aPath, withBase(aRoot, base));
- return computeRelativeURL(base, newPath);
-}
-exports.join = join;
+ this.worker.removeEventListener("message", listener);
-/**
- * Make a path relative to a URL or another path. If returning a
- * relative URL is not possible, the original target will be returned.
- * All returned URLs will be normalized.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- * @return A rootURL-relative (if possible), normalized URL value.
- */
-function relative(rootURL, targetURL) {
- const result = relativeIfPossible(rootURL, targetURL);
+ result.results.forEach((resultData, i) => {
+ const [, resolve, reject] = items[i];
- return typeof result === "string" ? result : normalize(targetURL);
-}
-exports.relative = relative;
+ if (resultData.error) {
+ reject(resultData.error);
+ } else {
+ resolve(resultData.response);
+ }
+ });
+ };
-function relativeIfPossible(rootURL, targetURL) {
- const urlType = getURLType(rootURL);
- if (urlType !== getURLType(targetURL)) {
- return null;
- }
+ this.worker.addEventListener("message", listener);
+ };
- const base = buildSafeBase(rootURL + targetURL);
- const root = new URL(rootURL, base);
- const target = new URL(targetURL, base);
+ return (...args) => push(args);
+ },
- try {
- new URL("", target.toString());
- } catch (err) {
- // Bail if the URL doesn't support things being relative to it,
- // For example, data: and blob: URLs.
- return null;
+ invoke(method, ...args) {
+ return this.task(method)(...args);
}
+};
- if (
- target.protocol !== root.protocol ||
- target.user !== root.user ||
- target.password !== root.password ||
- target.hostname !== root.hostname ||
- target.port !== root.port
- ) {
- return null;
- }
+function workerHandler(publicInterface) {
+ return function (msg) {
+ const { id, method, calls } = msg.data;
- return computeRelativeURL(root, target);
+ Promise.all(calls.map(args => {
+ try {
+ const response = publicInterface[method].apply(undefined, args);
+ if (response instanceof Promise) {
+ return response.then(val => ({ response: val }),
+ // Error can't be sent via postMessage, so be sure to
+ // convert to string.
+ err => ({ error: err.toString() }));
+ }
+ return { response };
+ } catch (error) {
+ // Error can't be sent via postMessage, so be sure to convert to
+ // string.
+ return { error: error.toString() };
+ }
+ })).then(results => {
+ self.postMessage({ id, results });
+ });
+ };
}
-/**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
-function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
- // The source map spec states that "sourceRoot" and "sources" entries are to be appended. While
- // that is a little vague, implementations have generally interpreted that as joining the
- // URLs with a `/` between then, assuming the "sourceRoot" doesn't already end with one.
- // For example,
- //
- // sourceRoot: "some-dir",
- // sources: ["/some-path.js"]
- //
- // and
- //
- // sourceRoot: "some-dir/",
- // sources: ["/some-path.js"]
- //
- // must behave as "some-dir/some-path.js".
- //
- // With this library's the transition to a more URL-focused implementation, that behavior is
- // preserved here. To acheive that, we trim the "/" from absolute-path when a sourceRoot value
- // is present in order to make the sources entries behave as if they are relative to the
- // "sourceRoot", as they would have if the two strings were simply concated.
- if (sourceRoot && getURLType(sourceURL) === "path-absolute") {
- sourceURL = sourceURL.replace(/^\//, "");
- }
-
- let url = normalize(sourceURL || "");
-
- // Parsing URLs can be expensive, so we only perform these joins when needed.
- if (sourceRoot) url = join(sourceRoot, url);
- if (sourceMapURL) url = join(trimFilename(sourceMapURL), url);
- return url;
-}
-exports.computeSourceURL = computeSourceURL;
-
-
-/***/ }),
-
-/***/ 3704:
-/***/ (function(module, exports, __webpack_require__) {
+function streamingWorkerHandler(publicInterface, { timeout = 100 } = {}, worker = self) {
+ let streamingWorker = (() => {
+ var _ref = _asyncToGenerator(function* (id, tasks) {
+ let isWorking = true;
-"use strict";
+ const timeoutId = setTimeout(function () {
+ isWorking = false;
+ }, timeout);
+ const results = [];
+ while (tasks.length !== 0 && isWorking) {
+ const { callback, context, args } = tasks.shift();
+ const result = yield callback.call(context, args);
+ results.push(result);
+ }
+ worker.postMessage({ id, status: "pending", data: results });
+ clearTimeout(timeoutId);
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ if (tasks.length !== 0) {
+ yield streamingWorker(id, tasks);
+ }
+ });
-const sourceMapRequests = new Map();
+ return function streamingWorker(_x, _x2) {
+ return _ref.apply(this, arguments);
+ };
+ })();
-function clearSourceMaps() {
- sourceMapRequests.clear();
-}
+ return (() => {
+ var _ref2 = _asyncToGenerator(function* (msg) {
+ const { id, method, args } = msg.data;
+ const workerMethod = publicInterface[method];
+ if (!workerMethod) {
+ console.error(`Could not find ${method} defined in worker.`);
+ }
+ worker.postMessage({ id, status: "start" });
-function getSourceMap(generatedSourceId) {
- return sourceMapRequests.get(generatedSourceId);
-}
+ try {
+ const tasks = workerMethod(args);
+ yield streamingWorker(id, tasks);
+ worker.postMessage({ id, status: "done" });
+ } catch (error) {
+ worker.postMessage({ id, status: "error", error });
+ }
+ });
-function setSourceMap(generatedId, request) {
- sourceMapRequests.set(generatedId, request);
+ return function (_x3) {
+ return _ref2.apply(this, arguments);
+ };
+ })();
}
module.exports = {
- clearSourceMaps,
- getSourceMap,
- setSourceMap
+ WorkerDispatcher,
+ workerHandler,
+ streamingWorkerHandler
};
/***/ }),
-/***/ 3705:
-/***/ (function(module, exports, __webpack_require__) {
-
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-exports.SourceMapGenerator = __webpack_require__(3706).SourceMapGenerator;
-exports.SourceMapConsumer = __webpack_require__(3713).SourceMapConsumer;
-exports.SourceNode = __webpack_require__(3716).SourceNode;
-
-
-/***/ }),
-
-/***/ 3706:
+/***/ 3668:
/***/ (function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
@@ -1226,642 +1274,442 @@
* http://opensource.org/licenses/BSD-3-Clause
*/
-const base64VLQ = __webpack_require__(3707);
-const util = __webpack_require__(3668);
-const ArraySet = __webpack_require__(3708).ArraySet;
-const MappingList = __webpack_require__(3712).MappingList;
+const URL = __webpack_require__(3815);
/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
+ * This is a helper function for getting values from parameter/options
+ * objects.
*
- * - file: The filename of the generated source.
- * - sourceRoot: A root for all relative URLs in this source map.
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
*/
-class SourceMapGenerator {
- constructor(aArgs) {
- if (!aArgs) {
- aArgs = {};
- }
- this._file = util.getArg(aArgs, "file", null);
- this._sourceRoot = util.getArg(aArgs, "sourceRoot", null);
- this._skipValidation = util.getArg(aArgs, "skipValidation", false);
- this._sources = new ArraySet();
- this._names = new ArraySet();
- this._mappings = new MappingList();
- this._sourcesContents = null;
+function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
}
+ throw new Error('"' + aName + '" is a required argument.');
- /**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
- static fromSourceMap(aSourceMapConsumer) {
- const sourceRoot = aSourceMapConsumer.sourceRoot;
- const generator = new SourceMapGenerator({
- file: aSourceMapConsumer.file,
- sourceRoot
- });
- aSourceMapConsumer.eachMapping(function(mapping) {
- const newMapping = {
- generated: {
- line: mapping.generatedLine,
- column: mapping.generatedColumn
- }
- };
-
- if (mapping.source != null) {
- newMapping.source = mapping.source;
- if (sourceRoot != null) {
- newMapping.source = util.relative(sourceRoot, newMapping.source);
- }
+}
+exports.getArg = getArg;
- newMapping.original = {
- line: mapping.originalLine,
- column: mapping.originalColumn
- };
+const supportsNullProto = (function() {
+ const obj = Object.create(null);
+ return !("__proto__" in obj);
+}());
- if (mapping.name != null) {
- newMapping.name = mapping.name;
- }
- }
+function identity(s) {
+ return s;
+}
- generator.addMapping(newMapping);
- });
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- let sourceRelative = sourceFile;
- if (sourceRoot !== null) {
- sourceRelative = util.relative(sourceRoot, sourceFile);
- }
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return "$" + aStr;
+ }
- if (!generator._sources.has(sourceRelative)) {
- generator._sources.add(sourceRelative);
- }
+ return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
- const content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- generator.setSourceContent(sourceFile, content);
- }
- });
- return generator;
+function fromSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return aStr.slice(1);
}
- /**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- * - generated: An object with the generated line and column positions.
- * - original: An object with the original line and column positions.
- * - source: The original source file (relative to the sourceRoot).
- * - name: An optional original token name for this mapping.
- */
- addMapping(aArgs) {
- const generated = util.getArg(aArgs, "generated");
- const original = util.getArg(aArgs, "original", null);
- let source = util.getArg(aArgs, "source", null);
- let name = util.getArg(aArgs, "name", null);
+ return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
- if (!this._skipValidation) {
- this._validateMapping(generated, original, source, name);
- }
+function isProtoString(s) {
+ if (!s) {
+ return false;
+ }
- if (source != null) {
- source = String(source);
- if (!this._sources.has(source)) {
- this._sources.add(source);
- }
- }
+ const length = s.length;
- if (name != null) {
- name = String(name);
- if (!this._names.has(name)) {
- this._names.add(name);
- }
- }
+ if (length < 9 /* "__proto__".length */) {
+ return false;
+ }
- this._mappings.add({
- generatedLine: generated.line,
- generatedColumn: generated.column,
- originalLine: original != null && original.line,
- originalColumn: original != null && original.column,
- source,
- name
- });
+ /* eslint-disable no-multi-spaces */
+ if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 2) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+ s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+ s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+ s.charCodeAt(length - 8) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 9) !== 95 /* '_' */) {
+ return false;
}
+ /* eslint-enable no-multi-spaces */
- /**
- * Set the source content for a source file.
- */
- setSourceContent(aSourceFile, aSourceContent) {
- let source = aSourceFile;
- if (this._sourceRoot != null) {
- source = util.relative(this._sourceRoot, source);
- }
-
- if (aSourceContent != null) {
- // Add the source content to the _sourcesContents map.
- // Create a new _sourcesContents map if the property is null.
- if (!this._sourcesContents) {
- this._sourcesContents = Object.create(null);
- }
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
- } else if (this._sourcesContents) {
- // Remove the source file from the _sourcesContents map.
- // If the _sourcesContents map is empty, set the property to null.
- delete this._sourcesContents[util.toSetString(source)];
- if (Object.keys(this._sourcesContents).length === 0) {
- this._sourcesContents = null;
- }
+ for (let i = length - 10; i >= 0; i--) {
+ if (s.charCodeAt(i) !== 36 /* '$' */) {
+ return false;
}
}
- /**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- * If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- * to be applied. If relative, it is relative to the SourceMapConsumer.
- * This parameter is needed when the two source maps aren't in the same
- * directory, and the source map to be applied contains relative source
- * paths. If so, those relative source paths need to be rewritten
- * relative to the SourceMapGenerator.
- */
- applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
- let sourceFile = aSourceFile;
- // If aSourceFile is omitted, we will use the file property of the SourceMap
- if (aSourceFile == null) {
- if (aSourceMapConsumer.file == null) {
- throw new Error(
- "SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, " +
- 'or the source map\'s "file" property. Both were omitted.'
- );
- }
- sourceFile = aSourceMapConsumer.file;
- }
- const sourceRoot = this._sourceRoot;
- // Make "sourceFile" relative if an absolute Url is passed.
- if (sourceRoot != null) {
- sourceFile = util.relative(sourceRoot, sourceFile);
- }
- // Applying the SourceMap can add and remove items from the sources and
- // the names array.
- const newSources = this._mappings.toArray().length > 0
- ? new ArraySet()
- : this._sources;
- const newNames = new ArraySet();
-
- // Find mappings for the "sourceFile"
- this._mappings.unsortedForEach(function(mapping) {
- if (mapping.source === sourceFile && mapping.originalLine != null) {
- // Check if it can be mapped by the source map, then update the mapping.
- const original = aSourceMapConsumer.originalPositionFor({
- line: mapping.originalLine,
- column: mapping.originalColumn
- });
- if (original.source != null) {
- // Copy mapping
- mapping.source = original.source;
- if (aSourceMapPath != null) {
- mapping.source = util.join(aSourceMapPath, mapping.source);
- }
- if (sourceRoot != null) {
- mapping.source = util.relative(sourceRoot, mapping.source);
- }
- mapping.originalLine = original.line;
- mapping.originalColumn = original.column;
- if (original.name != null) {
- mapping.name = original.name;
- }
- }
- }
-
- const source = mapping.source;
- if (source != null && !newSources.has(source)) {
- newSources.add(source);
- }
-
- const name = mapping.name;
- if (name != null && !newNames.has(name)) {
- newNames.add(name);
- }
+ return true;
+}
- }, this);
- this._sources = newSources;
- this._names = newNames;
+function strcmp(aStr1, aStr2) {
+ if (aStr1 === aStr2) {
+ return 0;
+ }
- // Copy sourcesContents of applied map.
- aSourceMapConsumer.sources.forEach(function(srcFile) {
- const content = aSourceMapConsumer.sourceContentFor(srcFile);
- if (content != null) {
- if (aSourceMapPath != null) {
- srcFile = util.join(aSourceMapPath, srcFile);
- }
- if (sourceRoot != null) {
- srcFile = util.relative(sourceRoot, srcFile);
- }
- this.setSourceContent(srcFile, content);
- }
- }, this);
+ if (aStr1 === null) {
+ return 1; // aStr2 !== null
}
- /**
- * A mapping can have one of the three levels of data:
- *
- * 1. Just the generated position.
- * 2. The Generated position, original position, and original source.
- * 3. Generated and original position, original source, as well as a name
- * token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
- _validateMapping(aGenerated, aOriginal, aSource, aName) {
- // When aOriginal is truthy but has empty values for .line and .column,
- // it is most likely a programmer error. In this case we throw a very
- // specific error message to try to guide them the right way.
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
- if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
- throw new Error(
- "original.line and original.column are not numbers -- you probably meant to omit " +
- "the original mapping entirely and only map the generated position. If so, pass " +
- "null for the original mapping instead of an object with empty or null values."
- );
- }
+ if (aStr2 === null) {
+ return -1; // aStr1 !== null
+ }
- if (aGenerated && "line" in aGenerated && "column" in aGenerated
- && aGenerated.line > 0 && aGenerated.column >= 0
- && !aOriginal && !aSource && !aName) {
- // Case 1.
+ if (aStr1 > aStr2) {
+ return 1;
+ }
- } else if (aGenerated && "line" in aGenerated && "column" in aGenerated
- && aOriginal && "line" in aOriginal && "column" in aOriginal
- && aGenerated.line > 0 && aGenerated.column >= 0
- && aOriginal.line > 0 && aOriginal.column >= 0
- && aSource) {
- // Cases 2 and 3.
+ return -1;
+}
- } else {
- throw new Error("Invalid mapping: " + JSON.stringify({
- generated: aGenerated,
- source: aSource,
- original: aOriginal,
- name: aName
- }));
- }
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+ let cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
}
- /**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
- _serializeMappings() {
- let previousGeneratedColumn = 0;
- let previousGeneratedLine = 1;
- let previousOriginalColumn = 0;
- let previousOriginalLine = 0;
- let previousName = 0;
- let previousSource = 0;
- let result = "";
- let next;
- let mapping;
- let nameIdx;
- let sourceIdx;
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
- const mappings = this._mappings.toArray();
- for (let i = 0, len = mappings.length; i < len; i++) {
- mapping = mappings[i];
- next = "";
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
- if (mapping.generatedLine !== previousGeneratedLine) {
- previousGeneratedColumn = 0;
- while (mapping.generatedLine !== previousGeneratedLine) {
- next += ";";
- previousGeneratedLine++;
- }
- } else if (i > 0) {
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
- continue;
- }
- next += ",";
- }
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
- next += base64VLQ.encode(mapping.generatedColumn
- - previousGeneratedColumn);
- previousGeneratedColumn = mapping.generatedColumn;
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
- if (mapping.source != null) {
- sourceIdx = this._sources.indexOf(mapping.source);
- next += base64VLQ.encode(sourceIdx - previousSource);
- previousSource = sourceIdx;
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
- // lines are stored 0-based in SourceMap spec version 3
- next += base64VLQ.encode(mapping.originalLine - 1
- - previousOriginalLine);
- previousOriginalLine = mapping.originalLine - 1;
-
- next += base64VLQ.encode(mapping.originalColumn
- - previousOriginalColumn);
- previousOriginalColumn = mapping.originalColumn;
+/**
+ * Strip any JSON XSSI avoidance prefix from the string (as documented
+ * in the source maps specification), and then parse the string as
+ * JSON.
+ */
+function parseSourceMapInput(str) {
+ return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ""));
+}
+exports.parseSourceMapInput = parseSourceMapInput;
- if (mapping.name != null) {
- nameIdx = this._names.indexOf(mapping.name);
- next += base64VLQ.encode(nameIdx - previousName);
- previousName = nameIdx;
- }
- }
+// We use 'http' as the base here because we want URLs processed relative
+// to the safe base to be treated as "special" URLs during parsing using
+// the WHATWG URL parsing. This ensures that backslash normalization
+// applies to the path and such.
+const PROTOCOL = "http:";
+const PROTOCOL_AND_HOST = `${PROTOCOL}//host`;
- result += next;
- }
+/**
+ * Make it easy to create small utilities that tweak a URL's path.
+ */
+function createSafeHandler(cb) {
+ return input => {
+ const type = getURLType(input);
+ const base = buildSafeBase(input);
+ const url = new URL(input, base);
- return result;
- }
+ cb(url);
- _generateSourcesContent(aSources, aSourceRoot) {
- return aSources.map(function(source) {
- if (!this._sourcesContents) {
- return null;
- }
- if (aSourceRoot != null) {
- source = util.relative(aSourceRoot, source);
- }
- const key = util.toSetString(source);
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
- ? this._sourcesContents[key]
- : null;
- }, this);
- }
+ const result = url.toString();
- /**
- * Externalize the source map.
- */
- toJSON() {
- const map = {
- version: this._version,
- sources: this._sources.toArray(),
- names: this._names.toArray(),
- mappings: this._serializeMappings()
- };
- if (this._file != null) {
- map.file = this._file;
- }
- if (this._sourceRoot != null) {
- map.sourceRoot = this._sourceRoot;
- }
- if (this._sourcesContents) {
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ if (type === "absolute") {
+ return result;
+ } else if (type === "scheme-relative") {
+ return result.slice(PROTOCOL.length);
+ } else if (type === "path-absolute") {
+ return result.slice(PROTOCOL_AND_HOST.length);
}
- return map;
- }
+ // This assumes that the callback will only change
+ // the path, search and hash values.
+ return computeRelativeURL(base, result);
+ };
+}
- /**
- * Render the source map being generated to a string.
- */
- toString() {
- return JSON.stringify(this.toJSON());
- }
+function withBase(url, base) {
+ return new URL(url, base).toString();
}
-SourceMapGenerator.prototype._version = 3;
-exports.SourceMapGenerator = SourceMapGenerator;
+function buildUniqueSegment(prefix, str) {
+ let id = 0;
+ do {
+ const ident = prefix + (id++);
+ if (str.indexOf(ident) === -1) return ident;
+ } while (true);
+}
+function buildSafeBase(str) {
+ const maxDotParts = str.split("..").length - 1;
-/***/ }),
+ // If we used a segment that also existed in `str`, then we would be unable
+ // to compute relative paths. For example, if `segment` were just "a":
+ //
+ // const url = "../../a/"
+ // const base = buildSafeBase(url); // http://host/a/a/
+ // const joined = "http://host/a/";
+ // const result = relative(base, joined);
+ //
+ // Expected: "../../a/";
+ // Actual: "a/"
+ //
+ const segment = buildUniqueSegment("p", str);
-/***/ 3707:
-/***/ (function(module, exports, __webpack_require__) {
+ let base = `${PROTOCOL_AND_HOST}/`;
+ for (let i = 0; i < maxDotParts; i++) {
+ base += `${segment}/`;
+ }
+ return base;
+}
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+const ABSOLUTE_SCHEME = /^[A-Za-z0-9\+\-\.]+:/;
+function getURLType(url) {
+ if (url[0] === "/") {
+ if (url[1] === "/") return "scheme-relative";
+ return "path-absolute";
+ }
-const base64 = __webpack_require__(3711);
+ return ABSOLUTE_SCHEME.test(url) ? "absolute" : "path-relative";
+}
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-// Continuation
-// | Sign
-// | |
-// V V
-// 101011
+/**
+ * Given two URLs that are assumed to be on the same
+ * protocol/host/user/password build a relative URL from the
+ * path, params, and hash values.
+ *
+ * @param rootURL The root URL that the target will be relative to.
+ * @param targetURL The target that the relative URL points to.
+ * @return A rootURL-relative, normalized URL value.
+ */
+function computeRelativeURL(rootURL, targetURL) {
+ if (typeof rootURL === "string") rootURL = new URL(rootURL);
+ if (typeof targetURL === "string") targetURL = new URL(targetURL);
-const VLQ_BASE_SHIFT = 5;
+ const targetParts = targetURL.pathname.split("/");
+ const rootParts = rootURL.pathname.split("/");
-// binary: 100000
-const VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+ // If we've got a URL path ending with a "/", we remove it since we'd
+ // otherwise be relative to the wrong location.
+ if (rootParts.length > 0 && !rootParts[rootParts.length - 1]) {
+ rootParts.pop();
+ }
-// binary: 011111
-const VLQ_BASE_MASK = VLQ_BASE - 1;
+ while (
+ targetParts.length > 0 &&
+ rootParts.length > 0 &&
+ targetParts[0] === rootParts[0]
+ ) {
+ targetParts.shift();
+ rootParts.shift();
+ }
-// binary: 100000
-const VLQ_CONTINUATION_BIT = VLQ_BASE;
+ const relativePath = rootParts
+ .map(() => "..")
+ .concat(targetParts)
+ .join("/");
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
- return aValue < 0
- ? ((-aValue) << 1) + 1
- : (aValue << 1) + 0;
+ return relativePath + targetURL.search + targetURL.hash;
}
/**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit. For example, as decimals:
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ * Given a URL, ensure that it is treated as a directory URL.
+ *
+ * @param url
+ * @return A normalized URL value.
*/
-// eslint-disable-next-line no-unused-vars
-function fromVLQSigned(aValue) {
- const isNegative = (aValue & 1) === 1;
- const shifted = aValue >> 1;
- return isNegative
- ? -shifted
- : shifted;
-}
+const ensureDirectory = createSafeHandler(url => {
+ url.pathname = url.pathname.replace(/\/?$/, "/");
+});
/**
- * Returns the base 64 VLQ encoded value.
- */
-exports.encode = function base64VLQ_encode(aValue) {
- let encoded = "";
- let digit;
+ * Given a URL, strip off any filename if one is present.
+ *
+ * @param url
+ * @return A normalized URL value.
+ */
+const trimFilename = createSafeHandler(url => {
+ url.href = new URL(".", url.toString()).toString();
+});
- let vlq = toVLQSigned(aValue);
+/**
+ * Normalize a given URL.
+ * * Convert backslashes.
+ * * Remove any ".." and "." segments.
+ *
+ * @param url
+ * @return A normalized URL value.
+ */
+const normalize = createSafeHandler(url => {});
+exports.normalize = normalize;
- do {
- digit = vlq & VLQ_BASE_MASK;
- vlq >>>= VLQ_BASE_SHIFT;
- if (vlq > 0) {
- // There are still more digits in this value, so we must make sure the
- // continuation bit is marked.
- digit |= VLQ_CONTINUATION_BIT;
- }
- encoded += base64.encode(digit);
- } while (vlq > 0);
+/**
+ * Joins two paths/URLs.
+ *
+ * All returned URLs will be normalized.
+ *
+ * @param aRoot The root path or URL. Assumed to reference a directory.
+ * @param aPath The path or URL to be joined with the root.
+ * @return A joined and normalized URL value.
+ */
+function join(aRoot, aPath) {
+ const pathType = getURLType(aPath);
+ const rootType = getURLType(aRoot);
- return encoded;
-};
+ aRoot = ensureDirectory(aRoot);
+ if (pathType === "absolute") {
+ return withBase(aPath, undefined);
+ }
+ if (rootType === "absolute") {
+ return withBase(aPath, aRoot);
+ }
-/***/ }),
+ if (pathType === "scheme-relative") {
+ return normalize(aPath);
+ }
+ if (rootType === "scheme-relative") {
+ return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(PROTOCOL.length);
+ }
-/***/ 3708:
-/***/ (function(module, exports) {
+ if (pathType === "path-absolute") {
+ return normalize(aPath);
+ }
+ if (rootType === "path-absolute") {
+ return withBase(aPath, withBase(aRoot, PROTOCOL_AND_HOST)).slice(PROTOCOL_AND_HOST.length);
+ }
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+ const base = buildSafeBase(aPath + aRoot);
+ const newPath = withBase(aPath, withBase(aRoot, base));
+ return computeRelativeURL(base, newPath);
+}
+exports.join = join;
/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
+ * Make a path relative to a URL or another path. If returning a
+ * relative URL is not possible, the original target will be returned.
+ * All returned URLs will be normalized.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ * @return A rootURL-relative (if possible), normalized URL value.
*/
-class ArraySet {
- constructor() {
- this._array = [];
- this._set = new Map();
- }
+function relative(rootURL, targetURL) {
+ const result = relativeIfPossible(rootURL, targetURL);
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- static fromArray(aArray, aAllowDuplicates) {
- const set = new ArraySet();
- for (let i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
- }
+ return typeof result === "string" ? result : normalize(targetURL);
+}
+exports.relative = relative;
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- size() {
- return this._set.size;
+function relativeIfPossible(rootURL, targetURL) {
+ const urlType = getURLType(rootURL);
+ if (urlType !== getURLType(targetURL)) {
+ return null;
}
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- add(aStr, aAllowDuplicates) {
- const isDuplicate = this.has(aStr);
- const idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
- this._set.set(aStr, idx);
- }
- }
+ const base = buildSafeBase(rootURL + targetURL);
+ const root = new URL(rootURL, base);
+ const target = new URL(targetURL, base);
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- has(aStr) {
- return this._set.has(aStr);
+ try {
+ new URL("", target.toString());
+ } catch (err) {
+ // Bail if the URL doesn't support things being relative to it,
+ // For example, data: and blob: URLs.
+ return null;
}
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- indexOf(aStr) {
- const idx = this._set.get(aStr);
- if (idx >= 0) {
- return idx;
- }
- throw new Error('"' + aStr + '" is not in the set.');
+ if (
+ target.protocol !== root.protocol ||
+ target.user !== root.user ||
+ target.password !== root.password ||
+ target.hostname !== root.hostname ||
+ target.port !== root.port
+ ) {
+ return null;
}
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
- }
- throw new Error("No element indexed by " + aIdx);
- }
+ return computeRelativeURL(root, target);
+}
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- toArray() {
- return this._array.slice();
+/**
+ * Compute the URL of a source given the the source root, the source's
+ * URL, and the source map's URL.
+ */
+function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+ // The source map spec states that "sourceRoot" and "sources" entries are to be appended. While
+ // that is a little vague, implementations have generally interpreted that as joining the
+ // URLs with a `/` between then, assuming the "sourceRoot" doesn't already end with one.
+ // For example,
+ //
+ // sourceRoot: "some-dir",
+ // sources: ["/some-path.js"]
+ //
+ // and
+ //
+ // sourceRoot: "some-dir/",
+ // sources: ["/some-path.js"]
+ //
+ // must behave as "some-dir/some-path.js".
+ //
+ // With this library's the transition to a more URL-focused implementation, that behavior is
+ // preserved here. To acheive that, we trim the "/" from absolute-path when a sourceRoot value
+ // is present in order to make the sources entries behave as if they are relative to the
+ // "sourceRoot", as they would have if the two strings were simply concated.
+ if (sourceRoot && getURLType(sourceURL) === "path-absolute") {
+ sourceURL = sourceURL.replace(/^\//, "");
}
+
+ let url = normalize(sourceURL || "");
+
+ // Parsing URLs can be expensive, so we only perform these joins when needed.
+ if (sourceRoot) url = join(sourceRoot, url);
+ if (sourceMapURL) url = join(trimFilename(sourceMapURL), url);
+ return url;
}
-exports.ArraySet = ArraySet;
+exports.computeSourceURL = computeSourceURL;
/***/ }),
-/***/ 3709:
+/***/ 3704:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@@ -1870,516 +1718,584 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
-const {
- getOriginalURLs,
- hasOriginalURL,
- getOriginalRanges,
- getGeneratedRanges,
- getGeneratedLocation,
- getAllGeneratedLocations,
- getOriginalLocation,
- getOriginalSourceText,
- getFileGeneratedRange,
- hasMappedSource,
- clearSourceMaps,
- applySourceMap
-} = __webpack_require__(3710);
-const { getOriginalStackFrames } = __webpack_require__(3783);
-const { setAssetRootURL } = __webpack_require__(3794);
+const sourceMapRequests = new Map();
-const {
- workerUtils: { workerHandler }
-} = __webpack_require__(3651);
+function clearSourceMaps() {
+ sourceMapRequests.clear();
+}
-// The interface is implemented in source-map to be
-// easier to unit test.
-self.onmessage = workerHandler({
- setAssetRootURL,
- getOriginalURLs,
- hasOriginalURL,
- getOriginalRanges,
- getGeneratedRanges,
- getGeneratedLocation,
- getAllGeneratedLocations,
- getOriginalLocation,
- getOriginalSourceText,
- getOriginalStackFrames,
- getFileGeneratedRange,
- hasMappedSource,
- applySourceMap,
- clearSourceMaps
-});
+function getSourceMap(generatedSourceId) {
+ return sourceMapRequests.get(generatedSourceId);
+}
+
+function setSourceMap(generatedId, request) {
+ sourceMapRequests.set(generatedId, request);
+}
+
+module.exports = {
+ clearSourceMaps,
+ getSourceMap,
+ setSourceMap
+};
/***/ }),
-/***/ 3710:
+/***/ 3705:
/***/ (function(module, exports, __webpack_require__) {
-"use strict";
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = __webpack_require__(3706).SourceMapGenerator;
+exports.SourceMapConsumer = __webpack_require__(3713).SourceMapConsumer;
+exports.SourceNode = __webpack_require__(3716).SourceNode;
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+/***/ }),
+
+/***/ 3706:
+/***/ (function(module, exports, __webpack_require__) {
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+const base64VLQ = __webpack_require__(3707);
+const util = __webpack_require__(3668);
+const ArraySet = __webpack_require__(3708).ArraySet;
+const MappingList = __webpack_require__(3712).MappingList;
/**
- * Source Map Worker
- * @module utils/source-map-worker
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
*/
+class SourceMapGenerator {
+ constructor(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, "file", null);
+ this._sourceRoot = util.getArg(aArgs, "sourceRoot", null);
+ this._skipValidation = util.getArg(aArgs, "skipValidation", false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+ }
-const { networkRequest } = __webpack_require__(3651);
-const { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(3705);
+ /**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+ static fromSourceMap(aSourceMapConsumer) {
+ const sourceRoot = aSourceMapConsumer.sourceRoot;
+ const generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function(mapping) {
+ const newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
-const { createConsumer } = __webpack_require__(3793);
-const assert = __webpack_require__(3717);
-const {
- fetchSourceMap,
- hasOriginalURL,
- clearOriginalURLs
-} = __webpack_require__(3718);
-const {
- getSourceMap,
- setSourceMap,
- clearSourceMaps: clearSourceMapsRequests
-} = __webpack_require__(3704);
-const {
- originalToGeneratedId,
- generatedToOriginalId,
- isGeneratedId,
- isOriginalId,
- getContentType
-} = __webpack_require__(3652);
-const { clearWasmXScopes } = __webpack_require__(3788);
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
-async function getOriginalURLs(generatedSource) {
- const map = await fetchSourceMap(generatedSource);
- return map && map.sources;
-}
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
-const COMPUTED_SPANS = new WeakSet();
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
-const SOURCE_MAPPINGS = new WeakMap();
-async function getOriginalRanges(sourceId, url) {
- if (!isOriginalId(sourceId)) {
- return [];
- }
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function(sourceFile) {
+ let sourceRelative = sourceFile;
+ if (sourceRoot !== null) {
+ sourceRelative = util.relative(sourceRoot, sourceFile);
+ }
- const generatedSourceId = originalToGeneratedId(sourceId);
- const map = await getSourceMap(generatedSourceId);
- if (!map) {
- return [];
- }
+ if (!generator._sources.has(sourceRelative)) {
+ generator._sources.add(sourceRelative);
+ }
- let mappings = SOURCE_MAPPINGS.get(map);
- if (!mappings) {
- mappings = new Map();
- SOURCE_MAPPINGS.set(map, mappings);
+ const content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
}
- let fileMappings = mappings.get(url);
- if (!fileMappings) {
- fileMappings = [];
- mappings.set(url, fileMappings);
+ /**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+ addMapping(aArgs) {
+ const generated = util.getArg(aArgs, "generated");
+ const original = util.getArg(aArgs, "original", null);
+ let source = util.getArg(aArgs, "source", null);
+ let name = util.getArg(aArgs, "name", null);
- const originalMappings = fileMappings;
- map.eachMapping(mapping => {
- if (mapping.source !== url) {
- return;
- }
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
- const last = originalMappings[originalMappings.length - 1];
+ if (source != null) {
+ source = String(source);
+ if (!this._sources.has(source)) {
+ this._sources.add(source);
+ }
+ }
- if (last && last.line === mapping.originalLine) {
- if (last.columnStart < mapping.originalColumn) {
- last.columnEnd = mapping.originalColumn;
- } else {
- // Skip this duplicate original location,
- return;
- }
+ if (name != null) {
+ name = String(name);
+ if (!this._names.has(name)) {
+ this._names.add(name);
}
+ }
- originalMappings.push({
- line: mapping.originalLine,
- columnStart: mapping.originalColumn,
- columnEnd: Infinity
- });
- }, null, SourceMapConsumer.ORIGINAL_ORDER);
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source,
+ name
+ });
}
- return fileMappings;
-}
+ /**
+ * Set the source content for a source file.
+ */
+ setSourceContent(aSourceFile, aSourceContent) {
+ let source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
-/**
- * Given an original location, find the ranges on the generated file that
- * are mapped from the original range containing the location.
- */
-async function getGeneratedRanges(location, originalSource) {
- if (!isOriginalId(location.sourceId)) {
- return [];
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = Object.create(null);
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
}
- const generatedSourceId = originalToGeneratedId(location.sourceId);
- const map = await getSourceMap(generatedSourceId);
- if (!map) {
- return [];
- }
+ /**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+ applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ let sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ "SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, " +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ const sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ const newSources = this._mappings.toArray().length > 0
+ ? new ArraySet()
+ : this._sources;
+ const newNames = new ArraySet();
- if (!COMPUTED_SPANS.has(map)) {
- COMPUTED_SPANS.add(map);
- map.computeColumnSpans();
- }
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function(mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ const original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source);
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
- // We want to use 'allGeneratedPositionsFor' to get the _first_ generated
- // location, but it hard-codes SourceMapConsumer.LEAST_UPPER_BOUND as the
- // bias, making it search in the wrong direction for this usecase.
- // To work around this, we use 'generatedPositionFor' and then look up the
- // exact original location, making any bias value unnecessary, and then
- // use that location for the call to 'allGeneratedPositionsFor'.
- const genPos = map.generatedPositionFor({
- source: originalSource.url,
- line: location.line,
- column: location.column == null ? 0 : location.column,
- bias: SourceMapConsumer.GREATEST_LOWER_BOUND
- });
- if (genPos.line === null) {
- return [];
- }
+ const source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
- const positions = map.allGeneratedPositionsFor(map.originalPositionFor({
- line: genPos.line,
- column: genPos.column
- }));
+ const name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
- return positions.map(mapping => ({
- line: mapping.line,
- columnStart: mapping.column,
- columnEnd: mapping.lastColumn
- })).sort((a, b) => {
- const line = a.line - b.line;
- return line === 0 ? a.column - b.column : line;
- });
-}
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
-async function getGeneratedLocation(location, originalSource) {
- if (!isOriginalId(location.sourceId)) {
- return location;
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function(srcFile) {
+ const content = aSourceMapConsumer.sourceContentFor(srcFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ srcFile = util.join(aSourceMapPath, srcFile);
+ }
+ if (sourceRoot != null) {
+ srcFile = util.relative(sourceRoot, srcFile);
+ }
+ this.setSourceContent(srcFile, content);
+ }
+ }, this);
}
- const generatedSourceId = originalToGeneratedId(location.sourceId);
- const map = await getSourceMap(generatedSourceId);
- if (!map) {
- return location;
- }
+ /**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+ _validateMapping(aGenerated, aOriginal, aSource, aName) {
+ // When aOriginal is truthy but has empty values for .line and .column,
+ // it is most likely a programmer error. In this case we throw a very
+ // specific error message to try to guide them the right way.
+ // For example: https://github.com/Polymer/polymer-bundler/pull/519
+ if (aOriginal && typeof aOriginal.line !== "number" && typeof aOriginal.column !== "number") {
+ throw new Error(
+ "original.line and original.column are not numbers -- you probably meant to omit " +
+ "the original mapping entirely and only map the generated position. If so, pass " +
+ "null for the original mapping instead of an object with empty or null values."
+ );
+ }
- const positions = map.allGeneratedPositionsFor({
- source: originalSource.url,
- line: location.line,
- column: location.column == null ? 0 : location.column
- });
+ if (aGenerated && "line" in aGenerated && "column" in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
- // Prior to source-map 0.7, the source-map module returned the earliest
- // generated location in the file when there were multiple generated
- // locations. The current comparison fn in 0.7 does not appear to take
- // generated location into account properly.
- let match;
- for (const pos of positions) {
- if (!match || pos.line < match.line || pos.column < match.column) {
- match = pos;
+ } else if (aGenerated && "line" in aGenerated && "column" in aGenerated
+ && aOriginal && "line" in aOriginal && "column" in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+
+ } else {
+ throw new Error("Invalid mapping: " + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
}
}
- if (!match) {
- match = map.generatedPositionFor({
- source: originalSource.url,
- line: location.line,
- column: location.column == null ? 0 : location.column,
- bias: SourceMapConsumer.LEAST_UPPER_BOUND
- });
- }
+ /**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+ _serializeMappings() {
+ let previousGeneratedColumn = 0;
+ let previousGeneratedLine = 1;
+ let previousOriginalColumn = 0;
+ let previousOriginalLine = 0;
+ let previousName = 0;
+ let previousSource = 0;
+ let result = "";
+ let next;
+ let mapping;
+ let nameIdx;
+ let sourceIdx;
- return {
- sourceId: generatedSourceId,
- line: match.line,
- column: match.column
- };
-}
+ const mappings = this._mappings.toArray();
+ for (let i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+ next = "";
-async function getAllGeneratedLocations(location, originalSource) {
- if (!isOriginalId(location.sourceId)) {
- return [];
- }
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ next += ";";
+ previousGeneratedLine++;
+ }
+ } else if (i > 0) {
+ if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+ continue;
+ }
+ next += ",";
+ }
- const generatedSourceId = originalToGeneratedId(location.sourceId);
- const map = await getSourceMap(generatedSourceId);
- if (!map) {
- return [];
- }
+ next += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
- const positions = map.allGeneratedPositionsFor({
- source: originalSource.url,
- line: location.line,
- column: location.column == null ? 0 : location.column
- });
+ if (mapping.source != null) {
+ sourceIdx = this._sources.indexOf(mapping.source);
+ next += base64VLQ.encode(sourceIdx - previousSource);
+ previousSource = sourceIdx;
- return positions.map(({ line, column }) => ({
- sourceId: generatedSourceId,
- line,
- column
- }));
-}
-
-async function getOriginalLocation(location, { search } = {}) {
- if (!isGeneratedId(location.sourceId)) {
- return location;
- }
-
- const map = await getSourceMap(location.sourceId);
- if (!map) {
- return location;
- }
-
- // First check for an exact match
- let match = map.originalPositionFor({
- line: location.line,
- column: location.column == null ? 0 : location.column
- });
+ // lines are stored 0-based in SourceMap spec version 3
+ next += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
- // If there is not an exact match, look for a match with a bias at the
- // current location and then on subsequent lines
- if (search) {
- let line = location.line;
- let column = location.column == null ? 0 : location.column;
+ next += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
- while (match.source === null) {
- match = map.originalPositionFor({
- line,
- column,
- bias: SourceMapConsumer[search]
- });
+ if (mapping.name != null) {
+ nameIdx = this._names.indexOf(mapping.name);
+ next += base64VLQ.encode(nameIdx - previousName);
+ previousName = nameIdx;
+ }
+ }
- line += search == "LEAST_UPPER_BOUND" ? 1 : -1;
- column = search == "LEAST_UPPER_BOUND" ? 0 : Infinity;
+ result += next;
}
- }
-
- const { source: sourceUrl, line, column } = match;
- if (sourceUrl == null) {
- // No url means the location didn't map.
- return location;
- }
-
- return {
- sourceId: generatedToOriginalId(location.sourceId, sourceUrl),
- sourceUrl,
- line,
- column
- };
-}
-
-async function getOriginalSourceText(originalSource) {
- assert(isOriginalId(originalSource.id), "Source is not an original source");
- const generatedSourceId = originalToGeneratedId(originalSource.id);
- const map = await getSourceMap(generatedSourceId);
- if (!map) {
- return null;
+ return result;
}
- let text = map.sourceContentFor(originalSource.url);
- if (!text) {
- text = (await networkRequest(originalSource.url, { loadFromCache: false })).content;
+ _generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function(source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ const key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
}
- return {
- text,
- contentType: getContentType(originalSource.url || "")
- };
-}
-
-async function getFileGeneratedRange(originalSource) {
- assert(isOriginalId(originalSource.id), "Source is not an original source");
+ /**
+ * Externalize the source map.
+ */
+ toJSON() {
+ const map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
- const map = await getSourceMap(originalToGeneratedId(originalSource.id));
- if (!map) {
- return;
+ return map;
}
- const start = map.generatedPositionFor({
- source: originalSource.url,
- line: 1,
- column: 0,
- bias: SourceMapConsumer.LEAST_UPPER_BOUND
- });
-
- const end = map.generatedPositionFor({
- source: originalSource.url,
- line: Number.MAX_SAFE_INTEGER,
- column: Number.MAX_SAFE_INTEGER,
- bias: SourceMapConsumer.GREATEST_LOWER_BOUND
- });
-
- return {
- start,
- end
- };
-}
-
-async function hasMappedSource(location) {
- if (isOriginalId(location.sourceId)) {
- return true;
+ /**
+ * Render the source map being generated to a string.
+ */
+ toString() {
+ return JSON.stringify(this.toJSON());
}
-
- const loc = await getOriginalLocation(location);
- return loc.sourceId !== location.sourceId;
-}
-
-function applySourceMap(generatedId, url, code, mappings) {
- const generator = new SourceMapGenerator({ file: url });
- mappings.forEach(mapping => generator.addMapping(mapping));
- generator.setSourceContent(url, code);
-
- const map = createConsumer(generator.toJSON());
- setSourceMap(generatedId, Promise.resolve(map));
}
-function clearSourceMaps() {
- clearSourceMapsRequests();
- clearWasmXScopes();
- clearOriginalURLs();
-}
+SourceMapGenerator.prototype._version = 3;
+exports.SourceMapGenerator = SourceMapGenerator;
-module.exports = {
- getOriginalURLs,
- hasOriginalURL,
- getOriginalRanges,
- getGeneratedRanges,
- getGeneratedLocation,
- getAllGeneratedLocations,
- getOriginalLocation,
- getOriginalSourceText,
- getFileGeneratedRange,
- applySourceMap,
- clearSourceMaps,
- hasMappedSource
-};
/***/ }),
-/***/ 3711:
-/***/ (function(module, exports) {
+/***/ 3707:
+/***/ (function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
* Copyright 2011 Mozilla Foundation and contributors
* Licensed under the New BSD license. See LICENSE or:
* http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-const intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
-
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-exports.encode = function(number) {
- if (0 <= number && number < intToCharMap.length) {
- return intToCharMap[number];
- }
- throw new TypeError("Must be between 0 and 63: " + number);
-};
+const base64 = __webpack_require__(3711);
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+// Continuation
+// | Sign
+// | |
+// V V
+// 101011
-/***/ }),
+const VLQ_BASE_SHIFT = 5;
-/***/ 3712:
-/***/ (function(module, exports, __webpack_require__) {
+// binary: 100000
+const VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+// binary: 011111
+const VLQ_BASE_MASK = VLQ_BASE - 1;
-const util = __webpack_require__(3668);
+// binary: 100000
+const VLQ_CONTINUATION_BIT = VLQ_BASE;
/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
- // Optimized for most common case
- const lineA = mappingA.generatedLine;
- const lineB = mappingB.generatedLine;
- const columnA = mappingA.generatedColumn;
- const columnB = mappingB.generatedColumn;
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
}
/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a negligible overhead in general
- * case for a large speedup in case of mappings being added in order.
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
*/
-class MappingList {
- constructor() {
- this._array = [];
- this._sorted = true;
- // Serves as infimum
- this._last = {generatedLine: -1, generatedColumn: 0};
- }
+// eslint-disable-next-line no-unused-vars
+function fromVLQSigned(aValue) {
+ const isNegative = (aValue & 1) === 1;
+ const shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+}
- /**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
- unsortedForEach(aCallback, aThisArg) {
- this._array.forEach(aCallback, aThisArg);
- }
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+exports.encode = function base64VLQ_encode(aValue) {
+ let encoded = "";
+ let digit;
- /**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
- add(aMapping) {
- if (generatedPositionAfter(this._last, aMapping)) {
- this._last = aMapping;
- this._array.push(aMapping);
- } else {
- this._sorted = false;
- this._array.push(aMapping);
- }
- }
+ let vlq = toVLQSigned(aValue);
- /**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
- toArray() {
- if (!this._sorted) {
- this._array.sort(util.compareByGeneratedPositionsInflated);
- this._sorted = true;
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
}
- return this._array;
- }
-}
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
-exports.MappingList = MappingList;
+ return encoded;
+};
/***/ }),
-/***/ 3713:
-/***/ (function(module, exports, __webpack_require__) {
+/***/ 3708:
+/***/ (function(module, exports) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
@@ -2388,1021 +2304,622 @@
* http://opensource.org/licenses/BSD-3-Clause
*/
-const util = __webpack_require__(3668);
-const binarySearch = __webpack_require__(3714);
-const ArraySet = __webpack_require__(3708).ArraySet;
-const base64VLQ = __webpack_require__(3707); // eslint-disable-line no-unused-vars
-const readWasm = __webpack_require__(3813);
-const wasm = __webpack_require__(3795);
-
-const INTERNAL = Symbol("smcInternal");
-
-class SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- // If the constructor was called by super(), just return Promise.
- // Yes, this is a hack to retain the pre-existing API of the base-class
- // constructor also being an async factory function.
- if (aSourceMap == INTERNAL) {
- return Promise.resolve(this);
- }
-
- return _factory(aSourceMap, aSourceMapURL);
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+class ArraySet {
+ constructor() {
+ this._array = [];
+ this._set = new Map();
}
- static initialize(opts) {
- readWasm.initialize(opts["lib/mappings.wasm"]);
+ /**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ static fromArray(aArray, aAllowDuplicates) {
+ const set = new ArraySet();
+ for (let i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
}
- static fromSourceMap(aSourceMap, aSourceMapURL) {
- return _factoryBSM(aSourceMap, aSourceMapURL);
+ /**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ size() {
+ return this._set.size;
}
/**
- * Construct a new `SourceMapConsumer` from `rawSourceMap` and `sourceMapUrl`
- * (see the `SourceMapConsumer` constructor for details. Then, invoke the `async
- * function f(SourceMapConsumer) -> T` with the newly constructed consumer, wait
- * for `f` to complete, call `destroy` on the consumer, and return `f`'s return
- * value.
- *
- * You must not use the consumer after `f` completes!
- *
- * By using `with`, you do not have to remember to manually call `destroy` on
- * the consumer, since it will be called automatically once `f` completes.
- *
- * ```js
- * const xSquared = await SourceMapConsumer.with(
- * myRawSourceMap,
- * null,
- * async function (consumer) {
- * // Use `consumer` inside here and don't worry about remembering
- * // to call `destroy`.
- *
- * const x = await whatever(consumer);
- * return x * x;
- * }
- * );
+ * Add the given string to this set.
*
- * // You may not use that `consumer` anymore out here; it has
- * // been destroyed. But you can use `xSquared`.
- * console.log(xSquared);
- * ```
+ * @param String aStr
*/
- static async with(rawSourceMap, sourceMapUrl, f) {
- const consumer = await new SourceMapConsumer(rawSourceMap, sourceMapUrl);
- try {
- return await f(consumer);
- } finally {
- consumer.destroy();
+ add(aStr, aAllowDuplicates) {
+ const isDuplicate = this.has(aStr);
+ const idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ this._set.set(aStr, idx);
}
}
/**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
+ * Is the given string a member of this set?
*
- * @param Function aCallback
- * The function that is called with each mapping.
- * @param Object aContext
- * Optional. If specified, this object will be the value of `this` every
- * time that `aCallback` is called.
- * @param aOrder
- * Either `SourceMapConsumer.GENERATED_ORDER` or
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- * iterate over the mappings sorted by the generated file's line/column
- * order or the original's source/line/column order, respectively. Defaults to
- * `SourceMapConsumer.GENERATED_ORDER`.
+ * @param String aStr
*/
- eachMapping(aCallback, aContext, aOrder) {
- throw new Error("Subclasses must implement eachMapping");
+ has(aStr) {
+ return this._set.has(aStr);
}
/**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number is 1-based.
- * - column: Optional. the column number in the original source.
- * The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
+ * What is the index of the given string in the array?
*
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
+ * @param String aStr
*/
- allGeneratedPositionsFor(aArgs) {
- throw new Error("Subclasses must implement allGeneratedPositionsFor");
+ indexOf(aStr) {
+ const idx = this._set.get(aStr);
+ if (idx >= 0) {
+ return idx;
+ }
+ throw new Error('"' + aStr + '" is not in the set.');
}
- destroy() {
- throw new Error("Subclasses must implement destroy");
+ /**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error("No element indexed by " + aIdx);
}
-}
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer.prototype._version = 3;
-SourceMapConsumer.GENERATED_ORDER = 1;
-SourceMapConsumer.ORIGINAL_ORDER = 2;
+ /**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ toArray() {
+ return this._array.slice();
+ }
+}
+exports.ArraySet = ArraySet;
-SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-exports.SourceMapConsumer = SourceMapConsumer;
+/***/ }),
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - sources: An array of URLs to the original source files.
- * - names: An array of identifiers which can be referenced by individual mappings.
- * - sourceRoot: Optional. The URL root from which all sources are relative.
- * - sourcesContent: Optional. An array of contents of the original source files.
- * - mappings: A string of base64 VLQs which contain the actual mappings.
- * - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- * {
- * version : 3,
- * file: "out.js",
- * sourceRoot : "",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AA,AB;;ABCDE;"
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
-class BasicSourceMapConsumer extends SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- return super(INTERNAL).then(that => {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
+/***/ 3709:
+/***/ (function(module, exports, __webpack_require__) {
- const version = util.getArg(sourceMap, "version");
- const sources = util.getArg(sourceMap, "sources").map(String);
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
- // requires the array) to play nice here.
- const names = util.getArg(sourceMap, "names", []);
- const sourceRoot = util.getArg(sourceMap, "sourceRoot", null);
- const sourcesContent = util.getArg(sourceMap, "sourcesContent", null);
- const mappings = util.getArg(sourceMap, "mappings");
- const file = util.getArg(sourceMap, "file", null);
+"use strict";
- // Once again, Sass deviates from the spec and supplies the version as a
- // string rather than a number, so we use loose equality checking here.
- if (version != that._version) {
- throw new Error("Unsupported version: " + version);
- }
- that._sourceLookupCache = new Map();
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+const {
+ getOriginalURLs,
+ hasOriginalURL,
+ getOriginalRanges,
+ getGeneratedRanges,
+ getGeneratedLocation,
+ getAllGeneratedLocations,
+ getOriginalLocation,
+ getOriginalSourceText,
+ getFileGeneratedRange,
+ hasMappedSource,
+ clearSourceMaps,
+ applySourceMap
+} = __webpack_require__(3710);
- // Pass `true` below to allow duplicate names and sources. While source maps
- // are intended to be compressed and deduplicated, the TypeScript compiler
- // sometimes generates source maps with duplicates in them. See Github issue
- // #72 and bugzil.la/889492.
- that._names = ArraySet.fromArray(names.map(String), true);
- that._sources = ArraySet.fromArray(sources, true);
+const { getOriginalStackFrames } = __webpack_require__(3783);
+const { setAssetRootURL } = __webpack_require__(3794);
- that._absoluteSources = ArraySet.fromArray(that._sources.toArray().map(function(s) {
- return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
- }), true);
+const {
+ workerUtils: { workerHandler }
+} = __webpack_require__(3651);
- that.sourceRoot = sourceRoot;
- that.sourcesContent = sourcesContent;
- that._mappings = mappings;
- that._sourceMapURL = aSourceMapURL;
- that.file = file;
+// The interface is implemented in source-map to be
+// easier to unit test.
+self.onmessage = workerHandler({
+ setAssetRootURL,
+ getOriginalURLs,
+ hasOriginalURL,
+ getOriginalRanges,
+ getGeneratedRanges,
+ getGeneratedLocation,
+ getAllGeneratedLocations,
+ getOriginalLocation,
+ getOriginalSourceText,
+ getOriginalStackFrames,
+ getFileGeneratedRange,
+ hasMappedSource,
+ applySourceMap,
+ clearSourceMaps
+});
- that._computedColumnSpans = false;
- that._mappingsPtr = 0;
- that._wasm = null;
+/***/ }),
- return wasm().then(w => {
- that._wasm = w;
- return that;
- });
- });
- }
+/***/ 3710:
+/***/ (function(module, exports, __webpack_require__) {
- /**
- * Utility function to find the index of a source. Returns -1 if not
- * found.
- */
- _findSourceIndex(aSource) {
- // In the most common usecases, we'll be constantly looking up the index for the same source
- // files, so we cache the index lookup to avoid constantly recomputing the full URLs.
- const cachedIndex = this._sourceLookupCache.get(aSource);
- if (typeof cachedIndex === "number") {
- return cachedIndex;
- }
+"use strict";
- // Treat the source as map-relative overall by default.
- const sourceAsMapRelative = util.computeSourceURL(null, aSource, this._sourceMapURL);
- if (this._absoluteSources.has(sourceAsMapRelative)) {
- const index = this._absoluteSources.indexOf(sourceAsMapRelative);
- this._sourceLookupCache.set(aSource, index);
- return index;
- }
- // Fall back to treating the source as sourceRoot-relative.
- const sourceAsSourceRootRelative = util.computeSourceURL(this.sourceRoot, aSource, this._sourceMapURL);
- if (this._absoluteSources.has(sourceAsSourceRootRelative)) {
- const index = this._absoluteSources.indexOf(sourceAsSourceRootRelative);
- this._sourceLookupCache.set(aSource, index);
- return index;
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- // To avoid this cache growing forever, we do not cache lookup misses.
- return -1;
- }
+/**
+ * Source Map Worker
+ * @module utils/source-map-worker
+ */
- /**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- * The source map that will be consumed.
- * @param String aSourceMapURL
- * The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
- static fromSourceMap(aSourceMap, aSourceMapURL) {
- return new BasicSourceMapConsumer(aSourceMap.toString());
- }
+const { networkRequest } = __webpack_require__(3651);
+const { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(3705);
- get sources() {
- return this._absoluteSources.toArray();
- }
+const { createConsumer } = __webpack_require__(3793);
+const assert = __webpack_require__(3717);
+const {
+ fetchSourceMap,
+ hasOriginalURL,
+ clearOriginalURLs
+} = __webpack_require__(3718);
+const {
+ getSourceMap,
+ setSourceMap,
+ clearSourceMaps: clearSourceMapsRequests
+} = __webpack_require__(3704);
+const {
+ originalToGeneratedId,
+ generatedToOriginalId,
+ isGeneratedId,
+ isOriginalId,
+ getContentType
+} = __webpack_require__(3652);
+const { clearWasmXScopes } = __webpack_require__(3788);
- _getMappingsPtr() {
- if (this._mappingsPtr === 0) {
- this._parseMappings();
- }
+async function getOriginalURLs(generatedSource) {
+ const map = await fetchSourceMap(generatedSource);
+ return map && map.sources;
+}
- return this._mappingsPtr;
- }
+const COMPUTED_SPANS = new WeakSet();
- /**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
- _parseMappings() {
- const aStr = this._mappings;
- const size = aStr.length;
+const SOURCE_MAPPINGS = new WeakMap();
+async function getOriginalRanges(sourceId, url) {
+ if (!isOriginalId(sourceId)) {
+ return [];
+ }
- const mappingsBufPtr = this._wasm.exports.allocate_mappings(size);
- const mappingsBuf = new Uint8Array(this._wasm.exports.memory.buffer, mappingsBufPtr, size);
- for (let i = 0; i < size; i++) {
- mappingsBuf[i] = aStr.charCodeAt(i);
- }
+ const generatedSourceId = originalToGeneratedId(sourceId);
+ const map = await getSourceMap(generatedSourceId);
+ if (!map) {
+ return [];
+ }
- const mappingsPtr = this._wasm.exports.parse_mappings(mappingsBufPtr);
+ let mappings = SOURCE_MAPPINGS.get(map);
+ if (!mappings) {
+ mappings = new Map();
+ SOURCE_MAPPINGS.set(map, mappings);
+ }
- if (!mappingsPtr) {
- const error = this._wasm.exports.get_last_error();
- let msg = `Error parsing mappings (code ${error}): `;
+ let fileMappings = mappings.get(url);
+ if (!fileMappings) {
+ fileMappings = [];
+ mappings.set(url, fileMappings);
- // XXX: keep these error codes in sync with `fitzgen/source-map-mappings`.
- switch (error) {
- case 1:
- msg += "the mappings contained a negative line, column, source index, or name index";
- break;
- case 2:
- msg += "the mappings contained a number larger than 2**32";
- break;
- case 3:
- msg += "reached EOF while in the middle of parsing a VLQ";
- break;
- case 4:
- msg += "invalid base 64 character while parsing a VLQ";
- break;
- default:
- msg += "unknown error code";
- break;
+ const originalMappings = fileMappings;
+ map.eachMapping(mapping => {
+ if (mapping.source !== url) {
+ return;
}
- throw new Error(msg);
- }
+ const last = originalMappings[originalMappings.length - 1];
- this._mappingsPtr = mappingsPtr;
+ if (last && last.line === mapping.originalLine) {
+ if (last.columnStart < mapping.originalColumn) {
+ last.columnEnd = mapping.originalColumn;
+ } else {
+ // Skip this duplicate original location,
+ return;
+ }
+ }
+
+ originalMappings.push({
+ line: mapping.originalLine,
+ columnStart: mapping.originalColumn,
+ columnEnd: Infinity
+ });
+ }, null, SourceMapConsumer.ORIGINAL_ORDER);
}
- eachMapping(aCallback, aContext, aOrder) {
- const context = aContext || null;
- const order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+ return fileMappings;
+}
- this._wasm.withMappingCallback(
- mapping => {
- if (mapping.source !== null) {
- mapping.source = this._absoluteSources.at(mapping.source);
+/**
+ * Given an original location, find the ranges on the generated file that
+ * are mapped from the original range containing the location.
+ */
+async function getGeneratedRanges(location, originalSource) {
+ if (!isOriginalId(location.sourceId)) {
+ return [];
+ }
- if (mapping.name !== null) {
- mapping.name = this._names.at(mapping.name);
- }
- }
- if (this._computedColumnSpans && mapping.lastGeneratedColumn === null) {
- mapping.lastGeneratedColumn = Infinity;
- }
+ const generatedSourceId = originalToGeneratedId(location.sourceId);
+ const map = await getSourceMap(generatedSourceId);
+ if (!map) {
+ return [];
+ }
- aCallback.call(context, mapping);
- },
- () => {
- switch (order) {
- case SourceMapConsumer.GENERATED_ORDER:
- this._wasm.exports.by_generated_location(this._getMappingsPtr());
- break;
- case SourceMapConsumer.ORIGINAL_ORDER:
- this._wasm.exports.by_original_location(this._getMappingsPtr());
- break;
- default:
- throw new Error("Unknown order of iteration.");
- }
- }
- );
+ if (!COMPUTED_SPANS.has(map)) {
+ COMPUTED_SPANS.add(map);
+ map.computeColumnSpans();
}
- allGeneratedPositionsFor(aArgs) {
- let source = util.getArg(aArgs, "source");
- const originalLine = util.getArg(aArgs, "line");
- const originalColumn = aArgs.column || 0;
+ // We want to use 'allGeneratedPositionsFor' to get the _first_ generated
+ // location, but it hard-codes SourceMapConsumer.LEAST_UPPER_BOUND as the
+ // bias, making it search in the wrong direction for this usecase.
+ // To work around this, we use 'generatedPositionFor' and then look up the
+ // exact original location, making any bias value unnecessary, and then
+ // use that location for the call to 'allGeneratedPositionsFor'.
+ const genPos = map.generatedPositionFor({
+ source: originalSource.url,
+ line: location.line,
+ column: location.column == null ? 0 : location.column,
+ bias: SourceMapConsumer.GREATEST_LOWER_BOUND
+ });
+ if (genPos.line === null) {
+ return [];
+ }
- source = this._findSourceIndex(source);
- if (source < 0) {
- return [];
- }
+ const positions = map.allGeneratedPositionsFor(map.originalPositionFor({
+ line: genPos.line,
+ column: genPos.column
+ }));
- if (originalLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
+ return positions.map(mapping => ({
+ line: mapping.line,
+ columnStart: mapping.column,
+ columnEnd: mapping.lastColumn
+ })).sort((a, b) => {
+ const line = a.line - b.line;
+ return line === 0 ? a.column - b.column : line;
+ });
+}
- if (originalColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
+async function getGeneratedLocation(location, originalSource) {
+ if (!isOriginalId(location.sourceId)) {
+ return location;
+ }
- const mappings = [];
+ const generatedSourceId = originalToGeneratedId(location.sourceId);
+ const map = await getSourceMap(generatedSourceId);
+ if (!map) {
+ return location;
+ }
- this._wasm.withMappingCallback(
- m => {
- let lastColumn = m.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- mappings.push({
- line: m.generatedLine,
- column: m.generatedColumn,
- lastColumn,
- });
- }, () => {
- this._wasm.exports.all_generated_locations_for(
- this._getMappingsPtr(),
- source,
- originalLine - 1,
- "column" in aArgs,
- originalColumn
- );
- }
- );
+ const positions = map.allGeneratedPositionsFor({
+ source: originalSource.url,
+ line: location.line,
+ column: location.column == null ? 0 : location.column
+ });
- return mappings;
+ // Prior to source-map 0.7, the source-map module returned the earliest
+ // generated location in the file when there were multiple generated
+ // locations. The current comparison fn in 0.7 does not appear to take
+ // generated location into account properly.
+ let match;
+ for (const pos of positions) {
+ if (!match || pos.line < match.line || pos.column < match.column) {
+ match = pos;
+ }
}
- destroy() {
- if (this._mappingsPtr !== 0) {
- this._wasm.exports.free_mappings(this._mappingsPtr);
- this._mappingsPtr = 0;
- }
+ if (!match) {
+ match = map.generatedPositionFor({
+ source: originalSource.url,
+ line: location.line,
+ column: location.column == null ? 0 : location.column,
+ bias: SourceMapConsumer.LEAST_UPPER_BOUND
+ });
}
- /**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
- computeColumnSpans() {
- if (this._computedColumnSpans) {
- return;
- }
+ return {
+ sourceId: generatedSourceId,
+ line: match.line,
+ column: match.column
+ };
+}
- this._wasm.exports.compute_column_spans(this._getMappingsPtr());
- this._computedColumnSpans = true;
+async function getAllGeneratedLocations(location, originalSource) {
+ if (!isOriginalId(location.sourceId)) {
+ return [];
}
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- originalPositionFor(aArgs) {
- const needle = {
- generatedLine: util.getArg(aArgs, "line"),
- generatedColumn: util.getArg(aArgs, "column")
- };
+ const generatedSourceId = originalToGeneratedId(location.sourceId);
+ const map = await getSourceMap(generatedSourceId);
+ if (!map) {
+ return [];
+ }
- if (needle.generatedLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
+ const positions = map.allGeneratedPositionsFor({
+ source: originalSource.url,
+ line: location.line,
+ column: location.column == null ? 0 : location.column
+ });
- if (needle.generatedColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
-
- let bias = util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
- if (bias == null) {
- bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
- }
+ return positions.map(({ line, column }) => ({
+ sourceId: generatedSourceId,
+ line,
+ column
+ }));
+}
- let mapping;
- this._wasm.withMappingCallback(m => mapping = m, () => {
- this._wasm.exports.original_location_for(
- this._getMappingsPtr(),
- needle.generatedLine - 1,
- needle.generatedColumn,
- bias
- );
- });
+async function getOriginalLocation(location, { search } = {}) {
+ if (!isGeneratedId(location.sourceId)) {
+ return location;
+ }
- if (mapping) {
- if (mapping.generatedLine === needle.generatedLine) {
- let source = util.getArg(mapping, "source", null);
- if (source !== null) {
- source = this._absoluteSources.at(source);
- }
+ const map = await getSourceMap(location.sourceId);
+ if (!map) {
+ return location;
+ }
- let name = util.getArg(mapping, "name", null);
- if (name !== null) {
- name = this._names.at(name);
- }
+ // First check for an exact match
+ let match = map.originalPositionFor({
+ line: location.line,
+ column: location.column == null ? 0 : location.column
+ });
- return {
- source,
- line: util.getArg(mapping, "originalLine", null),
- column: util.getArg(mapping, "originalColumn", null),
- name
- };
- }
- }
+ // If there is not an exact match, look for a match with a bias at the
+ // current location and then on subsequent lines
+ if (search) {
+ let line = location.line;
+ let column = location.column == null ? 0 : location.column;
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
+ while (match.source === null) {
+ match = map.originalPositionFor({
+ line,
+ column,
+ bias: SourceMapConsumer[search]
+ });
- /**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
- hasContentsOfAllSources() {
- if (!this.sourcesContent) {
- return false;
+ line += search == "LEAST_UPPER_BOUND" ? 1 : -1;
+ column = search == "LEAST_UPPER_BOUND" ? 0 : Infinity;
}
- return this.sourcesContent.length >= this._sources.size() &&
- !this.sourcesContent.some(function(sc) { return sc == null; });
}
- /**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
- sourceContentFor(aSource, nullOnMissing) {
- if (!this.sourcesContent) {
- return null;
- }
+ const { source: sourceUrl, line, column } = match;
+ if (sourceUrl == null) {
+ // No url means the location didn't map.
+ return location;
+ }
- const index = this._findSourceIndex(aSource);
- if (index >= 0) {
- return this.sourcesContent[index];
- }
+ return {
+ sourceId: generatedToOriginalId(location.sourceId, sourceUrl),
+ sourceUrl,
+ line,
+ column
+ };
+}
- // This function is used recursively from
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
- // don't want to throw if we can't find the source - we just want to
- // return null, so we provide a flag to exit gracefully.
- if (nullOnMissing) {
- return null;
- }
+async function getOriginalSourceText(originalSource) {
+ assert(isOriginalId(originalSource.id), "Source is not an original source");
- throw new Error('"' + aSource + '" is not in the SourceMap.');
+ const generatedSourceId = originalToGeneratedId(originalSource.id);
+ const map = await getSourceMap(generatedSourceId);
+ if (!map) {
+ return null;
}
- /**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
- */
- generatedPositionFor(aArgs) {
- let source = util.getArg(aArgs, "source");
- source = this._findSourceIndex(source);
- if (source < 0) {
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
+ let text = map.sourceContentFor(originalSource.url);
+ if (!text) {
+ text = (await networkRequest(originalSource.url, { loadFromCache: false })).content;
+ }
- const needle = {
- source,
- originalLine: util.getArg(aArgs, "line"),
- originalColumn: util.getArg(aArgs, "column")
- };
+ return {
+ text,
+ contentType: getContentType(originalSource.url || "")
+ };
+}
- if (needle.originalLine < 1) {
- throw new Error("Line numbers must be >= 1");
- }
+async function getFileGeneratedRange(originalSource) {
+ assert(isOriginalId(originalSource.id), "Source is not an original source");
- if (needle.originalColumn < 0) {
- throw new Error("Column numbers must be >= 0");
- }
+ const map = await getSourceMap(originalToGeneratedId(originalSource.id));
+ if (!map) {
+ return;
+ }
- let bias = util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
- if (bias == null) {
- bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
- }
+ const start = map.generatedPositionFor({
+ source: originalSource.url,
+ line: 1,
+ column: 0,
+ bias: SourceMapConsumer.LEAST_UPPER_BOUND
+ });
- let mapping;
- this._wasm.withMappingCallback(m => mapping = m, () => {
- this._wasm.exports.generated_location_for(
- this._getMappingsPtr(),
- needle.source,
- needle.originalLine - 1,
- needle.originalColumn,
- bias
- );
- });
+ const end = map.generatedPositionFor({
+ source: originalSource.url,
+ line: Number.MAX_SAFE_INTEGER,
+ column: Number.MAX_SAFE_INTEGER,
+ bias: SourceMapConsumer.GREATEST_LOWER_BOUND
+ });
- if (mapping) {
- if (mapping.source === needle.source) {
- let lastColumn = mapping.lastGeneratedColumn;
- if (this._computedColumnSpans && lastColumn === null) {
- lastColumn = Infinity;
- }
- return {
- line: util.getArg(mapping, "generatedLine", null),
- column: util.getArg(mapping, "generatedColumn", null),
- lastColumn,
- };
- }
- }
+ return {
+ start,
+ end
+ };
+}
- return {
- line: null,
- column: null,
- lastColumn: null
- };
+async function hasMappedSource(location) {
+ if (isOriginalId(location.sourceId)) {
+ return true;
}
+
+ const loc = await getOriginalLocation(location);
+ return loc.sourceId !== location.sourceId;
}
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+function applySourceMap(generatedId, url, code, mappings) {
+ const generator = new SourceMapGenerator({ file: url });
+ mappings.forEach(mapping => generator.addMapping(mapping));
+ generator.setSourceContent(url, code);
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- * - version: Which version of the source map spec this map is following.
- * - file: Optional. The generated file this source map is associated with.
- * - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- * - offset: The offset into the original specified at which this section
- * begins to apply, defined as an object with a "line" and "column"
- * field.
- * - map: A source map definition. This source map could also be indexed,
- * but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- * {
- * version : 3,
- * file: "app.js",
- * sections: [{
- * offset: {line:100, column:10},
- * map: {
- * version : 3,
- * file: "section.js",
- * sources: ["foo.js", "bar.js"],
- * names: ["src", "maps", "are", "fun"],
- * mappings: "AAAA,E;;ABCDE;"
- * }
- * }],
- * }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found. This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-class IndexedSourceMapConsumer extends SourceMapConsumer {
- constructor(aSourceMap, aSourceMapURL) {
- return super(INTERNAL).then(that => {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
+ const map = createConsumer(generator.toJSON());
+ setSourceMap(generatedId, Promise.resolve(map));
+}
- const version = util.getArg(sourceMap, "version");
- const sections = util.getArg(sourceMap, "sections");
+function clearSourceMaps() {
+ clearSourceMapsRequests();
+ clearWasmXScopes();
+ clearOriginalURLs();
+}
- if (version != that._version) {
- throw new Error("Unsupported version: " + version);
- }
+module.exports = {
+ getOriginalURLs,
+ hasOriginalURL,
+ getOriginalRanges,
+ getGeneratedRanges,
+ getGeneratedLocation,
+ getAllGeneratedLocations,
+ getOriginalLocation,
+ getOriginalSourceText,
+ getFileGeneratedRange,
+ applySourceMap,
+ clearSourceMaps,
+ hasMappedSource
+};
- let lastOffset = {
- line: -1,
- column: 0
- };
- return Promise.all(sections.map(s => {
- if (s.url) {
- // The url field will require support for asynchronicity.
- // See https://github.com/mozilla/source-map/issues/16
- throw new Error("Support for url field in sections not implemented.");
- }
- const offset = util.getArg(s, "offset");
- const offsetLine = util.getArg(offset, "line");
- const offsetColumn = util.getArg(offset, "column");
+/***/ }),
- if (offsetLine < lastOffset.line ||
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
- throw new Error("Section offsets must be ordered and non-overlapping.");
- }
- lastOffset = offset;
+/***/ 3711:
+/***/ (function(module, exports) {
- const cons = new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL);
- return cons.then(consumer => {
- return {
- generatedOffset: {
- // The offset fields are 0-based, but we use 1-based indices when
- // encoding/decoding from VLQ.
- generatedLine: offsetLine + 1,
- generatedColumn: offsetColumn + 1
- },
- consumer
- };
- });
- })).then(s => {
- that._sections = s;
- return that;
- });
- });
- }
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
- /**
- * The list of original sources.
- */
- get sources() {
- const sources = [];
- for (let i = 0; i < this._sections.length; i++) {
- for (let j = 0; j < this._sections[i].consumer.sources.length; j++) {
- sources.push(this._sections[i].consumer.sources[j]);
- }
- }
- return sources;
+const intToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
+
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+exports.encode = function(number) {
+ if (0 <= number && number < intToCharMap.length) {
+ return intToCharMap[number];
}
+ throw new TypeError("Must be between 0 and 63: " + number);
+};
- /**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- * - line: The line number in the generated source. The line number
- * is 1-based.
- * - column: The column number in the generated source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- * - source: The original source file, or null.
- * - line: The line number in the original source, or null. The
- * line number is 1-based.
- * - column: The column number in the original source, or null. The
- * column number is 0-based.
- * - name: The original identifier, or null.
- */
- originalPositionFor(aArgs) {
- const needle = {
- generatedLine: util.getArg(aArgs, "line"),
- generatedColumn: util.getArg(aArgs, "column")
- };
- // Find the section containing the generated position we're trying to map
- // to an original position.
- const sectionIndex = binarySearch.search(needle, this._sections,
- function(aNeedle, section) {
- const cmp = aNeedle.generatedLine - section.generatedOffset.generatedLine;
- if (cmp) {
- return cmp;
- }
+/***/ }),
- return (aNeedle.generatedColumn -
- section.generatedOffset.generatedColumn);
- });
- const section = this._sections[sectionIndex];
+/***/ 3712:
+/***/ (function(module, exports, __webpack_require__) {
- if (!section) {
- return {
- source: null,
- line: null,
- column: null,
- name: null
- };
- }
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
- return section.consumer.originalPositionFor({
- line: needle.generatedLine -
- (section.generatedOffset.generatedLine - 1),
- column: needle.generatedColumn -
- (section.generatedOffset.generatedLine === needle.generatedLine
- ? section.generatedOffset.generatedColumn - 1
- : 0),
- bias: aArgs.bias
- });
+const util = __webpack_require__(3668);
+
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ const lineA = mappingA.generatedLine;
+ const lineB = mappingB.generatedLine;
+ const columnA = mappingA.generatedColumn;
+ const columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
+
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a negligible overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+class MappingList {
+ constructor() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
}
/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
*/
- hasContentsOfAllSources() {
- return this._sections.every(function(s) {
- return s.consumer.hasContentsOfAllSources();
- });
+ unsortedForEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
}
/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
*/
- sourceContentFor(aSource, nullOnMissing) {
- for (let i = 0; i < this._sections.length; i++) {
- const section = this._sections[i];
-
- const content = section.consumer.sourceContentFor(aSource, true);
- if (content) {
- return content;
- }
+ add(aMapping) {
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
}
- if (nullOnMissing) {
- return null;
- }
- throw new Error('"' + aSource + '" is not in the SourceMap.');
- }
-
- _findSectionIndex(source) {
- for (let i = 0; i < this._sections.length; i++) {
- const { consumer } = this._sections[i];
- if (consumer._findSourceIndex(source) !== -1) {
- return i;
- }
- }
- return -1;
}
/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- * - source: The filename of the original source.
- * - line: The line number in the original source. The line number
- * is 1-based.
- * - column: The column number in the original source. The column
- * number is 0-based.
- *
- * and an object is returned with the following properties:
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
*
- * - line: The line number in the generated source, or null. The
- * line number is 1-based.
- * - column: The column number in the generated source, or null.
- * The column number is 0-based.
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
*/
- generatedPositionFor(aArgs) {
- const index = this._findSectionIndex(util.getArg(aArgs, "source"));
- const section = index >= 0 ? this._sections[index] : null;
- const nextSection =
- index >= 0 && index + 1 < this._sections.length
- ? this._sections[index + 1]
- : null;
-
- const generatedPosition =
- section && section.consumer.generatedPositionFor(aArgs);
- if (generatedPosition && generatedPosition.line !== null) {
- const lineShift = section.generatedOffset.generatedLine - 1;
- const columnShift = section.generatedOffset.generatedColumn - 1;
-
- if (generatedPosition.line === 1) {
- generatedPosition.column += columnShift;
- if (typeof generatedPosition.lastColumn === "number") {
- generatedPosition.lastColumn += columnShift;
- }
- }
-
- if (
- generatedPosition.lastColumn === Infinity &&
- nextSection &&
- generatedPosition.line === nextSection.generatedOffset.generatedLine
- ) {
- generatedPosition.lastColumn =
- nextSection.generatedOffset.generatedColumn - 2;
- }
- generatedPosition.line += lineShift;
-
- return generatedPosition;
- }
-
- return {
- line: null,
- column: null,
- lastColumn: null
- };
- }
-
- allGeneratedPositionsFor(aArgs) {
- const index = this._findSectionIndex(util.getArg(aArgs, "source"));
- const section = index >= 0 ? this._sections[index] : null;
- const nextSection =
- index >= 0 && index + 1 < this._sections.length
- ? this._sections[index + 1]
- : null;
-
- if (!section) return [];
-
- return section.consumer.allGeneratedPositionsFor(aArgs).map(
- generatedPosition => {
- const lineShift = section.generatedOffset.generatedLine - 1;
- const columnShift = section.generatedOffset.generatedColumn - 1;
-
- if (generatedPosition.line === 1) {
- generatedPosition.column += columnShift;
- if (typeof generatedPosition.lastColumn === "number") {
- generatedPosition.lastColumn += columnShift;
- }
- }
-
- if (
- generatedPosition.lastColumn === Infinity &&
- nextSection &&
- generatedPosition.line === nextSection.generatedOffset.generatedLine
- ) {
- generatedPosition.lastColumn =
- nextSection.generatedOffset.generatedColumn - 2;
- }
- generatedPosition.line += lineShift;
-
- return generatedPosition;
- }
- );
- }
-
- eachMapping(aCallback, aContext, aOrder) {
- this._sections.forEach((section, index) => {
- const nextSection =
- index + 1 < this._sections.length
- ? this._sections[index + 1]
- : null;
- const { generatedOffset } = section;
-
- const lineShift = generatedOffset.generatedLine - 1;
- const columnShift = generatedOffset.generatedColumn - 1;
-
- section.consumer.eachMapping(function(mapping) {
- if (mapping.generatedLine === 1) {
- mapping.generatedColumn += columnShift;
-
- if (typeof mapping.lastGeneratedColumn === "number") {
- mapping.lastGeneratedColumn += columnShift;
- }
- }
-
- if (
- mapping.lastGeneratedColumn === Infinity &&
- nextSection &&
- mapping.generatedLine === nextSection.generatedOffset.generatedLine
- ) {
- mapping.lastGeneratedColumn =
- nextSection.generatedOffset.generatedColumn - 2;
- }
- mapping.generatedLine += lineShift;
-
- aCallback.call(this, mapping);
- }, aContext, aOrder);
- });
- }
-
- computeColumnSpans() {
- for (let i = 0; i < this._sections.length; i++) {
- this._sections[i].consumer.computeColumnSpans();
- }
- }
-
- destroy() {
- for (let i = 0; i < this._sections.length; i++) {
- this._sections[i].consumer.destroy();
+ toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositionsInflated);
+ this._sorted = true;
}
+ return this._array;
}
}
-exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-
-/*
- * Cheat to get around inter-twingled classes. `factory()` can be at the end
- * where it has access to non-hoisted classes, but it gets hoisted itself.
- */
-function _factory(aSourceMap, aSourceMapURL) {
- let sourceMap = aSourceMap;
- if (typeof aSourceMap === "string") {
- sourceMap = util.parseSourceMapInput(aSourceMap);
- }
-
- const consumer = sourceMap.sections != null
- ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
- : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
- return Promise.resolve(consumer);
-}
-function _factoryBSM(aSourceMap, aSourceMapURL) {
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
-}
+exports.MappingList = MappingList;
/***/ }),
-/***/ 3714:
-/***/ (function(module, exports) {
+/***/ 3713:
+/***/ (function(module, exports, __webpack_require__) {
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
@@ -3411,10027 +2928,10510 @@
* http://opensource.org/licenses/BSD-3-Clause
*/
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
+const util = __webpack_require__(3668);
+const binarySearch = __webpack_require__(3714);
+const ArraySet = __webpack_require__(3708).ArraySet;
+const base64VLQ = __webpack_require__(3707); // eslint-disable-line no-unused-vars
+const readWasm = __webpack_require__(3813);
+const wasm = __webpack_require__(3795);
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
- // This function terminates when one of the following is true:
- //
- // 1. We find the exact element we are looking for.
- //
- // 2. We did not find the exact element, but we can return the index of
- // the next-closest element.
- //
- // 3. We did not find the exact element, and there is no next-closest
- // element than the one we are searching for, so we return -1.
- const mid = Math.floor((aHigh - aLow) / 2) + aLow;
- const cmp = aCompare(aNeedle, aHaystack[mid], true);
- if (cmp === 0) {
- // Found the element we are looking for.
- return mid;
- } else if (cmp > 0) {
- // Our needle is greater than aHaystack[mid].
- if (aHigh - mid > 1) {
- // The element is in the upper half.
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
- }
+const INTERNAL = Symbol("smcInternal");
- // The exact needle element was not found in this haystack. Determine if
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return aHigh < aHaystack.length ? aHigh : -1;
+class SourceMapConsumer {
+ constructor(aSourceMap, aSourceMapURL) {
+ // If the constructor was called by super(), just return Promise.
+ // Yes, this is a hack to retain the pre-existing API of the base-class
+ // constructor also being an async factory function.
+ if (aSourceMap == INTERNAL) {
+ return Promise.resolve(this);
}
- return mid;
+
+ return _factory(aSourceMap, aSourceMapURL);
}
- // Our needle is less than aHaystack[mid].
- if (mid - aLow > 1) {
- // The element is in the lower half.
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+ static initialize(opts) {
+ readWasm.initialize(opts["lib/mappings.wasm"]);
}
- // we are in termination case (3) or (2) and return the appropriate thing.
- if (aBias == exports.LEAST_UPPER_BOUND) {
- return mid;
+ static fromSourceMap(aSourceMap, aSourceMapURL) {
+ return _factoryBSM(aSourceMap, aSourceMapURL);
}
- return aLow < 0 ? -1 : aLow;
-}
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- * array and returns -1, 0, or 1 depending on whether the needle is less
- * than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- * closest element that is smaller than or greater than the one we are
- * searching for, respectively, if the exact element cannot be found.
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
- if (aHaystack.length === 0) {
- return -1;
+ /**
+ * Construct a new `SourceMapConsumer` from `rawSourceMap` and `sourceMapUrl`
+ * (see the `SourceMapConsumer` constructor for details. Then, invoke the `async
+ * function f(SourceMapConsumer) -> T` with the newly constructed consumer, wait
+ * for `f` to complete, call `destroy` on the consumer, and return `f`'s return
+ * value.
+ *
+ * You must not use the consumer after `f` completes!
+ *
+ * By using `with`, you do not have to remember to manually call `destroy` on
+ * the consumer, since it will be called automatically once `f` completes.
+ *
+ * ```js
+ * const xSquared = await SourceMapConsumer.with(
+ * myRawSourceMap,
+ * null,
+ * async function (consumer) {
+ * // Use `consumer` inside here and don't worry about remembering
+ * // to call `destroy`.
+ *
+ * const x = await whatever(consumer);
+ * return x * x;
+ * }
+ * );
+ *
+ * // You may not use that `consumer` anymore out here; it has
+ * // been destroyed. But you can use `xSquared`.
+ * console.log(xSquared);
+ * ```
+ */
+ static async with(rawSourceMap, sourceMapUrl, f) {
+ const consumer = await new SourceMapConsumer(rawSourceMap, sourceMapUrl);
+ try {
+ return await f(consumer);
+ } finally {
+ consumer.destroy();
+ }
}
- let index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
- if (index < 0) {
- return -1;
+ /**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+ eachMapping(aCallback, aContext, aOrder) {
+ throw new Error("Subclasses must implement eachMapping");
}
- // We have found either the exact element, or the next-closest element than
- // the one we are searching for. However, there may be more than one such
- // element. Make sure we always return the smallest of these.
- while (index - 1 >= 0) {
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
- break;
- }
- --index;
+ /**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number is 1-based.
+ * - column: Optional. the column number in the original source.
+ * The column number is 0-based.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+ allGeneratedPositionsFor(aArgs) {
+ throw new Error("Subclasses must implement allGeneratedPositionsFor");
}
- return index;
-};
+ destroy() {
+ throw new Error("Subclasses must implement destroy");
+ }
+}
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
-/***/ }),
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-/***/ 3716:
-/***/ (function(module, exports, __webpack_require__) {
+exports.SourceMapConsumer = SourceMapConsumer;
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The first parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found. This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
*/
+class BasicSourceMapConsumer extends SourceMapConsumer {
+ constructor(aSourceMap, aSourceMapURL) {
+ return super(INTERNAL).then(that => {
+ let sourceMap = aSourceMap;
+ if (typeof aSourceMap === "string") {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
-const SourceMapGenerator = __webpack_require__(3706).SourceMapGenerator;
-const util = __webpack_require__(3668);
+ const version = util.getArg(sourceMap, "version");
+ const sources = util.getArg(sourceMap, "sources").map(String);
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ const names = util.getArg(sourceMap, "names", []);
+ const sourceRoot = util.getArg(sourceMap, "sourceRoot", null);
+ const sourcesContent = util.getArg(sourceMap, "sourcesContent", null);
+ const mappings = util.getArg(sourceMap, "mappings");
+ const file = util.getArg(sourceMap, "file", null);
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-const REGEX_NEWLINE = /(\r?\n)/;
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != that._version) {
+ throw new Error("Unsupported version: " + version);
+ }
-// Newline character code for charCodeAt() comparisons
-const NEWLINE_CODE = 10;
+ that._sourceLookupCache = new Map();
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-const isSourceNode = "$$$isSourceNode$$$";
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ that._names = ArraySet.fromArray(names.map(String), true);
+ that._sources = ArraySet.fromArray(sources, true);
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- * generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-class SourceNode {
- constructor(aLine, aColumn, aSource, aChunks, aName) {
- this.children = [];
- this.sourceContents = {};
- this.line = aLine == null ? null : aLine;
- this.column = aColumn == null ? null : aColumn;
- this.source = aSource == null ? null : aSource;
- this.name = aName == null ? null : aName;
- this[isSourceNode] = true;
- if (aChunks != null) this.add(aChunks);
+ that._absoluteSources = ArraySet.fromArray(that._sources.toArray().map(function(s) {
+ return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+ }), true);
+
+ that.sourceRoot = sourceRoot;
+ that.sourcesContent = sourcesContent;
+ that._mappings = mappings;
+ that._sourceMapURL = aSourceMapURL;
+ that.file = file;
+
+ that._computedColumnSpans = false;
+ that._mappingsPtr = 0;
+ that._wasm = null;
+
+ return wasm().then(w => {
+ that._wasm = w;
+ return that;
+ });
+ });
}
/**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- * SourceMapConsumer should be relative to.
+ * Utility function to find the index of a source. Returns -1 if not
+ * found.
*/
- static fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
- // The SourceNode we want to fill with the generated code
- // and the SourceMap
- const node = new SourceNode();
-
- // All even indices of this array are one line of the generated code,
- // while all odd indices are the newlines between two adjacent lines
- // (since `REGEX_NEWLINE` captures its match).
- // Processed fragments are accessed by calling `shiftNextLine`.
- const remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
- let remainingLinesIndex = 0;
- const shiftNextLine = function() {
- const lineContents = getNextLine();
- // The last line of a file might not have a newline.
- const newLine = getNextLine() || "";
- return lineContents + newLine;
-
- function getNextLine() {
- return remainingLinesIndex < remainingLines.length ?
- remainingLines[remainingLinesIndex++] : undefined;
- }
- };
-
- // We need to remember the position of "remainingLines"
- let lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
- // The generate SourceNodes we need a code range.
- // To extract it current and last mapping is used.
- // Here we store the last mapping.
- let lastMapping = null;
- let nextLine;
-
- aSourceMapConsumer.eachMapping(function(mapping) {
- if (lastMapping !== null) {
- // We add the code from "lastMapping" to "mapping":
- // First check if there is a new line in between.
- if (lastGeneratedLine < mapping.generatedLine) {
- // Associate first line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- lastGeneratedLine++;
- lastGeneratedColumn = 0;
- // The remaining code is added without mapping
- } else {
- // There is no new line in between.
- // Associate the code between "lastGeneratedColumn" and
- // "mapping.generatedColumn" with "lastMapping"
- nextLine = remainingLines[remainingLinesIndex] || "";
- const code = nextLine.substr(0, mapping.generatedColumn -
- lastGeneratedColumn);
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
- lastGeneratedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- addMappingWithCode(lastMapping, code);
- // No more remaining code, continue
- lastMapping = mapping;
- return;
- }
- }
- // We add the generated code until the first mapping
- // to the SourceNode without any mapping.
- // Each line is added as separate string.
- while (lastGeneratedLine < mapping.generatedLine) {
- node.add(shiftNextLine());
- lastGeneratedLine++;
- }
- if (lastGeneratedColumn < mapping.generatedColumn) {
- nextLine = remainingLines[remainingLinesIndex] || "";
- node.add(nextLine.substr(0, mapping.generatedColumn));
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
- lastGeneratedColumn = mapping.generatedColumn;
- }
- lastMapping = mapping;
- }, this);
- // We have processed all mappings.
- if (remainingLinesIndex < remainingLines.length) {
- if (lastMapping) {
- // Associate the remaining code in the current line with "lastMapping"
- addMappingWithCode(lastMapping, shiftNextLine());
- }
- // and add the remaining lines without any mapping
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
+ _findSourceIndex(aSource) {
+ // In the most common usecases, we'll be constantly looking up the index for the same source
+ // files, so we cache the index lookup to avoid constantly recomputing the full URLs.
+ const cachedIndex = this._sourceLookupCache.get(aSource);
+ if (typeof cachedIndex === "number") {
+ return cachedIndex;
}
- // Copy sourcesContent into SourceNode
- aSourceMapConsumer.sources.forEach(function(sourceFile) {
- const content = aSourceMapConsumer.sourceContentFor(sourceFile);
- if (content != null) {
- if (aRelativePath != null) {
- sourceFile = util.join(aRelativePath, sourceFile);
- }
- node.setSourceContent(sourceFile, content);
- }
- });
-
- return node;
-
- function addMappingWithCode(mapping, code) {
- if (mapping === null || mapping.source === undefined) {
- node.add(code);
- } else {
- const source = aRelativePath
- ? util.join(aRelativePath, mapping.source)
- : mapping.source;
- node.add(new SourceNode(mapping.originalLine,
- mapping.originalColumn,
- source,
- code,
- mapping.name));
- }
+ // Treat the source as map-relative overall by default.
+ const sourceAsMapRelative = util.computeSourceURL(null, aSource, this._sourceMapURL);
+ if (this._absoluteSources.has(sourceAsMapRelative)) {
+ const index = this._absoluteSources.indexOf(sourceAsMapRelative);
+ this._sourceLookupCache.set(aSource, index);
+ return index;
}
- }
- /**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
- */
- add(aChunk) {
- if (Array.isArray(aChunk)) {
- aChunk.forEach(function(chunk) {
- this.add(chunk);
- }, this);
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- if (aChunk) {
- this.children.push(aChunk);
- }
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
+ // Fall back to treating the source as sourceRoot-relative.
+ const sourceAsSourceRootRelative = util.computeSourceURL(this.sourceRoot, aSource, this._sourceMapURL);
+ if (this._absoluteSources.has(sourceAsSourceRootRelative)) {
+ const index = this._absoluteSources.indexOf(sourceAsSourceRootRelative);
+ this._sourceLookupCache.set(aSource, index);
+ return index;
}
- return this;
+
+ // To avoid this cache growing forever, we do not cache lookup misses.
+ return -1;
}
/**
- * Add a chunk of generated JS to the beginning of this source node.
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
*
- * @param aChunk A string snippet of generated JS code, another instance of
- * SourceNode, or an array where each member is one of those things.
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @param String aSourceMapURL
+ * The URL at which the source map can be found (optional)
+ * @returns BasicSourceMapConsumer
*/
- prepend(aChunk) {
- if (Array.isArray(aChunk)) {
- for (let i = aChunk.length - 1; i >= 0; i--) {
- this.prepend(aChunk[i]);
- }
- } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
- this.children.unshift(aChunk);
- } else {
- throw new TypeError(
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
- );
- }
- return this;
+ static fromSourceMap(aSourceMap, aSourceMapURL) {
+ return new BasicSourceMapConsumer(aSourceMap.toString());
}
- /**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
- walk(aFn) {
- let chunk;
- for (let i = 0, len = this.children.length; i < len; i++) {
- chunk = this.children[i];
- if (chunk[isSourceNode]) {
- chunk.walk(aFn);
- } else if (chunk !== "") {
- aFn(chunk, { source: this.source,
- line: this.line,
- column: this.column,
- name: this.name });
- }
- }
+ get sources() {
+ return this._absoluteSources.toArray();
}
- /**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
- join(aSep) {
- let newChildren;
- let i;
- const len = this.children.length;
- if (len > 0) {
- newChildren = [];
- for (i = 0; i < len - 1; i++) {
- newChildren.push(this.children[i]);
- newChildren.push(aSep);
- }
- newChildren.push(this.children[i]);
- this.children = newChildren;
+ _getMappingsPtr() {
+ if (this._mappingsPtr === 0) {
+ this._parseMappings();
}
- return this;
+
+ return this._mappingsPtr;
}
/**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
*/
- replaceRight(aPattern, aReplacement) {
- const lastChild = this.children[this.children.length - 1];
- if (lastChild[isSourceNode]) {
- lastChild.replaceRight(aPattern, aReplacement);
- } else if (typeof lastChild === "string") {
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
- } else {
- this.children.push("".replace(aPattern, aReplacement));
+ _parseMappings() {
+ const aStr = this._mappings;
+ const size = aStr.length;
+
+ const mappingsBufPtr = this._wasm.exports.allocate_mappings(size);
+ const mappingsBuf = new Uint8Array(this._wasm.exports.memory.buffer, mappingsBufPtr, size);
+ for (let i = 0; i < size; i++) {
+ mappingsBuf[i] = aStr.charCodeAt(i);
}
- return this;
- }
- /**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
- setSourceContent(aSourceFile, aSourceContent) {
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
- }
+ const mappingsPtr = this._wasm.exports.parse_mappings(mappingsBufPtr);
- /**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
- walkSourceContents(aFn) {
- for (let i = 0, len = this.children.length; i < len; i++) {
- if (this.children[i][isSourceNode]) {
- this.children[i].walkSourceContents(aFn);
+ if (!mappingsPtr) {
+ const error = this._wasm.exports.get_last_error();
+ let msg = `Error parsing mappings (code ${error}): `;
+
+ // XXX: keep these error codes in sync with `fitzgen/source-map-mappings`.
+ switch (error) {
+ case 1:
+ msg += "the mappings contained a negative line, column, source index, or name index";
+ break;
+ case 2:
+ msg += "the mappings contained a number larger than 2**32";
+ break;
+ case 3:
+ msg += "reached EOF while in the middle of parsing a VLQ";
+ break;
+ case 4:
+ msg += "invalid base 64 character while parsing a VLQ";
+ break;
+ default:
+ msg += "unknown error code";
+ break;
}
- }
- const sources = Object.keys(this.sourceContents);
- for (let i = 0, len = sources.length; i < len; i++) {
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ throw new Error(msg);
}
- }
- /**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
- toString() {
- let str = "";
- this.walk(function(chunk) {
- str += chunk;
- });
- return str;
+ this._mappingsPtr = mappingsPtr;
}
- /**
- * Returns the string representation of this source node along with a source
- * map.
- */
- toStringWithSourceMap(aArgs) {
- const generated = {
- code: "",
- line: 1,
- column: 0
- };
- const map = new SourceMapGenerator(aArgs);
- let sourceMappingActive = false;
- let lastOriginalSource = null;
- let lastOriginalLine = null;
- let lastOriginalColumn = null;
- let lastOriginalName = null;
- this.walk(function(chunk, original) {
- generated.code += chunk;
- if (original.source !== null
- && original.line !== null
- && original.column !== null) {
- if (lastOriginalSource !== original.source
- || lastOriginalLine !== original.line
- || lastOriginalColumn !== original.column
- || lastOriginalName !== original.name) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
- }
- lastOriginalSource = original.source;
- lastOriginalLine = original.line;
- lastOriginalColumn = original.column;
- lastOriginalName = original.name;
- sourceMappingActive = true;
- } else if (sourceMappingActive) {
- map.addMapping({
- generated: {
- line: generated.line,
- column: generated.column
- }
- });
- lastOriginalSource = null;
- sourceMappingActive = false;
- }
- for (let idx = 0, length = chunk.length; idx < length; idx++) {
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
- generated.line++;
- generated.column = 0;
- // Mappings end at eol
- if (idx + 1 === length) {
- lastOriginalSource = null;
- sourceMappingActive = false;
- } else if (sourceMappingActive) {
- map.addMapping({
- source: original.source,
- original: {
- line: original.line,
- column: original.column
- },
- generated: {
- line: generated.line,
- column: generated.column
- },
- name: original.name
- });
+ eachMapping(aCallback, aContext, aOrder) {
+ const context = aContext || null;
+ const order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ this._wasm.withMappingCallback(
+ mapping => {
+ if (mapping.source !== null) {
+ mapping.source = this._absoluteSources.at(mapping.source);
+
+ if (mapping.name !== null) {
+ mapping.name = this._names.at(mapping.name);
}
- } else {
- generated.column++;
}
- }
- });
- this.walkSourceContents(function(sourceFile, sourceContent) {
- map.setSourceContent(sourceFile, sourceContent);
- });
+ if (this._computedColumnSpans && mapping.lastGeneratedColumn === null) {
+ mapping.lastGeneratedColumn = Infinity;
+ }
- return { code: generated.code, map };
+ aCallback.call(context, mapping);
+ },
+ () => {
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ this._wasm.exports.by_generated_location(this._getMappingsPtr());
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ this._wasm.exports.by_original_location(this._getMappingsPtr());
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+ }
+ );
}
-}
-
-exports.SourceNode = SourceNode;
+ allGeneratedPositionsFor(aArgs) {
+ let source = util.getArg(aArgs, "source");
+ const originalLine = util.getArg(aArgs, "line");
+ const originalColumn = aArgs.column || 0;
-/***/ }),
+ source = this._findSourceIndex(source);
+ if (source < 0) {
+ return [];
+ }
-/***/ 3717:
-/***/ (function(module, exports, __webpack_require__) {
+ if (originalLine < 1) {
+ throw new Error("Line numbers must be >= 1");
+ }
-"use strict";
+ if (originalColumn < 0) {
+ throw new Error("Column numbers must be >= 0");
+ }
+ const mappings = [];
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ this._wasm.withMappingCallback(
+ m => {
+ let lastColumn = m.lastGeneratedColumn;
+ if (this._computedColumnSpans && lastColumn === null) {
+ lastColumn = Infinity;
+ }
+ mappings.push({
+ line: m.generatedLine,
+ column: m.generatedColumn,
+ lastColumn,
+ });
+ }, () => {
+ this._wasm.exports.all_generated_locations_for(
+ this._getMappingsPtr(),
+ source,
+ originalLine - 1,
+ "column" in aArgs,
+ originalColumn
+ );
+ }
+ );
-function assert(condition, message) {
- if (!condition) {
- throw new Error(`Assertion failure: ${message}`);
+ return mappings;
}
-}
-
-module.exports = assert;
-
-/***/ }),
-
-/***/ 3718:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-const { networkRequest } = __webpack_require__(3651);
-const { getSourceMap, setSourceMap } = __webpack_require__(3704);
-const { WasmRemap } = __webpack_require__(3719);
-const { SourceMapConsumer } = __webpack_require__(3705);
-const { convertToJSON } = __webpack_require__(3785);
-const { createConsumer } = __webpack_require__(3793);
-
-// URLs which have been seen in a completed source map request.
-const originalURLs = new Set();
+ destroy() {
+ if (this._mappingsPtr !== 0) {
+ this._wasm.exports.free_mappings(this._mappingsPtr);
+ this._mappingsPtr = 0;
+ }
+ }
-function clearOriginalURLs() {
- originalURLs.clear();
-}
+ /**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+ computeColumnSpans() {
+ if (this._computedColumnSpans) {
+ return;
+ }
-function hasOriginalURL(url) {
- return originalURLs.has(url);
-}
+ this._wasm.exports.compute_column_spans(this._getMappingsPtr());
+ this._computedColumnSpans = true;
+ }
-function _resolveSourceMapURL(source) {
- const { url = "", sourceMapURL = "" } = source;
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source. The line number
+ * is 1-based.
+ * - column: The column number in the generated source. The column
+ * number is 0-based.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the original source, or null. The
+ * column number is 0-based.
+ * - name: The original identifier, or null.
+ */
+ originalPositionFor(aArgs) {
+ const needle = {
+ generatedLine: util.getArg(aArgs, "line"),
+ generatedColumn: util.getArg(aArgs, "column")
+ };
- if (!url) {
- // If the source doesn't have a URL, don't resolve anything.
- return { sourceMapURL, baseURL: sourceMapURL };
- }
+ if (needle.generatedLine < 1) {
+ throw new Error("Line numbers must be >= 1");
+ }
- const resolvedURL = new URL(sourceMapURL, url);
- const resolvedString = resolvedURL.toString();
+ if (needle.generatedColumn < 0) {
+ throw new Error("Column numbers must be >= 0");
+ }
- let baseURL = resolvedString;
- // When the sourceMap is a data: URL, fall back to using the
- // source's URL, if possible.
- if (resolvedURL.protocol == "data:") {
- baseURL = url;
- }
+ let bias = util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
+ if (bias == null) {
+ bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
+ }
- return { sourceMapURL: resolvedString, baseURL };
-}
+ let mapping;
+ this._wasm.withMappingCallback(m => mapping = m, () => {
+ this._wasm.exports.original_location_for(
+ this._getMappingsPtr(),
+ needle.generatedLine - 1,
+ needle.generatedColumn,
+ bias
+ );
+ });
-async function _resolveAndFetch(generatedSource) {
- // Fetch the sourcemap over the network and create it.
- const { sourceMapURL, baseURL } = _resolveSourceMapURL(generatedSource);
+ if (mapping) {
+ if (mapping.generatedLine === needle.generatedLine) {
+ let source = util.getArg(mapping, "source", null);
+ if (source !== null) {
+ source = this._absoluteSources.at(source);
+ }
- let fetched = await networkRequest(sourceMapURL, { loadFromCache: false });
+ let name = util.getArg(mapping, "name", null);
+ if (name !== null) {
+ name = this._names.at(name);
+ }
- if (fetched.isDwarf) {
- fetched = { content: await convertToJSON(fetched.content) };
+ return {
+ source,
+ line: util.getArg(mapping, "originalLine", null),
+ column: util.getArg(mapping, "originalColumn", null),
+ name
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
}
- // Create the source map and fix it up.
- let map = await createConsumer(fetched.content, baseURL);
- if (generatedSource.isWasm) {
- map = new WasmRemap(map);
- // Check if experimental scope info exists.
- if (fetched.content.includes("x-scopes")) {
- const parsedJSON = JSON.parse(fetched.content);
- map.xScopes = parsedJSON["x-scopes"];
+ /**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+ hasContentsOfAllSources() {
+ if (!this.sourcesContent) {
+ return false;
}
+ return this.sourcesContent.length >= this._sources.size() &&
+ !this.sourcesContent.some(function(sc) { return sc == null; });
}
- if (map && map.sources) {
- map.sources.forEach(url => originalURLs.add(url));
- }
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
- return map;
-}
+ const index = this._findSourceIndex(aSource);
+ if (index >= 0) {
+ return this.sourcesContent[index];
+ }
-function fetchSourceMap(generatedSource) {
- const existingRequest = getSourceMap(generatedSource.id);
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
- // If it has already been requested, return the request. Make sure
- // to do this even if sourcemapping is turned off, because
- // pretty-printing uses sourcemaps.
- //
- // An important behavior here is that if it's in the middle of
- // requesting it, all subsequent calls will block on the initial
- // request.
- if (existingRequest) {
- return existingRequest;
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
}
- if (!generatedSource.sourceMapURL) {
- return null;
- }
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number
+ * is 1-based.
+ * - column: The column number in the original source. The column
+ * number is 0-based.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+ generatedPositionFor(aArgs) {
+ let source = util.getArg(aArgs, "source");
+ source = this._findSourceIndex(source);
+ if (source < 0) {
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
- // Fire off the request, set it in the cache, and return it.
- const req = _resolveAndFetch(generatedSource);
- // Make sure the cached promise does not reject, because we only
- // want to report the error once.
- setSourceMap(generatedSource.id, req.catch(() => null));
- return req;
-}
+ const needle = {
+ source,
+ originalLine: util.getArg(aArgs, "line"),
+ originalColumn: util.getArg(aArgs, "column")
+ };
-module.exports = { fetchSourceMap, hasOriginalURL, clearOriginalURLs };
+ if (needle.originalLine < 1) {
+ throw new Error("Line numbers must be >= 1");
+ }
-/***/ }),
+ if (needle.originalColumn < 0) {
+ throw new Error("Column numbers must be >= 0");
+ }
-/***/ 3719:
-/***/ (function(module, exports, __webpack_require__) {
+ let bias = util.getArg(aArgs, "bias", SourceMapConsumer.GREATEST_LOWER_BOUND);
+ if (bias == null) {
+ bias = SourceMapConsumer.GREATEST_LOWER_BOUND;
+ }
-"use strict";
+ let mapping;
+ this._wasm.withMappingCallback(m => mapping = m, () => {
+ this._wasm.exports.generated_location_for(
+ this._getMappingsPtr(),
+ needle.source,
+ needle.originalLine - 1,
+ needle.originalColumn,
+ bias
+ );
+ });
+
+ if (mapping) {
+ if (mapping.source === needle.source) {
+ let lastColumn = mapping.lastGeneratedColumn;
+ if (this._computedColumnSpans && lastColumn === null) {
+ lastColumn = Infinity;
+ }
+ return {
+ line: util.getArg(mapping, "generatedLine", null),
+ column: util.getArg(mapping, "generatedColumn", null),
+ lastColumn,
+ };
+ }
+ }
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
+}
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
/**
- * SourceMapConsumer for WebAssembly source maps. It transposes columns with
- * lines, which allows mapping data to be used with SpiderMonkey Debugger API.
- */
-class WasmRemap {
- /**
- * @param map SourceMapConsumer
- */
- constructor(map) {
- this._map = map;
- this.version = map.version;
- this.file = map.file;
- this._computeColumnSpans = false;
- }
-
- get sources() {
- return this._map.sources;
- }
-
- get sourceRoot() {
- return this._map.sourceRoot;
- }
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The first parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found. This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+class IndexedSourceMapConsumer extends SourceMapConsumer {
+ constructor(aSourceMap, aSourceMapURL) {
+ return super(INTERNAL).then(that => {
+ let sourceMap = aSourceMap;
+ if (typeof aSourceMap === "string") {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
- get names() {
- return this._map.names;
- }
+ const version = util.getArg(sourceMap, "version");
+ const sections = util.getArg(sourceMap, "sections");
- get sourcesContent() {
- return this._map.sourcesContent;
- }
+ if (version != that._version) {
+ throw new Error("Unsupported version: " + version);
+ }
- get mappings() {
- throw new Error("not supported");
- }
+ let lastOffset = {
+ line: -1,
+ column: 0
+ };
+ return Promise.all(sections.map(s => {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error("Support for url field in sections not implemented.");
+ }
+ const offset = util.getArg(s, "offset");
+ const offsetLine = util.getArg(offset, "line");
+ const offsetColumn = util.getArg(offset, "column");
- computeColumnSpans() {
- this._computeColumnSpans = true;
- }
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error("Section offsets must be ordered and non-overlapping.");
+ }
+ lastOffset = offset;
- originalPositionFor(generatedPosition) {
- const result = this._map.originalPositionFor({
- line: 1,
- column: generatedPosition.line,
- bias: generatedPosition.bias
+ const cons = new SourceMapConsumer(util.getArg(s, "map"), aSourceMapURL);
+ return cons.then(consumer => {
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer
+ };
+ });
+ })).then(s => {
+ that._sections = s;
+ return that;
+ });
});
- return result;
}
- _remapGeneratedPosition(position) {
- const generatedPosition = {
- line: position.column,
- column: 0
- };
- if (this._computeColumnSpans) {
- generatedPosition.lastColumn = Infinity;
+ /**
+ * The list of original sources.
+ */
+ get sources() {
+ const sources = [];
+ for (let i = 0; i < this._sections.length; i++) {
+ for (let j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
}
- return generatedPosition;
+ return sources;
}
- generatedPositionFor(originalPosition) {
- const position = this._map.generatedPositionFor(originalPosition);
- return this._remapGeneratedPosition(position);
- }
+ /**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source. The line number
+ * is 1-based.
+ * - column: The column number in the generated source. The column
+ * number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the original source, or null. The
+ * column number is 0-based.
+ * - name: The original identifier, or null.
+ */
+ originalPositionFor(aArgs) {
+ const needle = {
+ generatedLine: util.getArg(aArgs, "line"),
+ generatedColumn: util.getArg(aArgs, "column")
+ };
- allGeneratedPositionsFor(originalPosition) {
- const positions = this._map.allGeneratedPositionsFor(originalPosition);
- return positions.map(position => {
- return this._remapGeneratedPosition(position);
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ const sectionIndex = binarySearch.search(needle, this._sections,
+ function(aNeedle, section) {
+ const cmp = aNeedle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (aNeedle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ const section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ bias: aArgs.bias
});
}
+ /**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
hasContentsOfAllSources() {
- return this._map.hasContentsOfAllSources();
+ return this._sections.every(function(s) {
+ return s.consumer.hasContentsOfAllSources();
+ });
}
- sourceContentFor(source, returnNullOnMissing) {
- return this._map.sourceContentFor(source, returnNullOnMissing);
- }
+ /**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+ sourceContentFor(aSource, nullOnMissing) {
+ for (let i = 0; i < this._sections.length; i++) {
+ const section = this._sections[i];
- eachMapping(callback, context, order) {
- this._map.eachMapping(entry => {
- const {
- source,
- generatedColumn,
- originalLine,
- originalColumn,
- name
- } = entry;
- callback({
- source,
- generatedLine: generatedColumn,
- generatedColumn: 0,
- originalLine,
- originalColumn,
- name
- });
- }, context, order);
+ const content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
}
-}
-
-exports.WasmRemap = WasmRemap;
-/***/ }),
-
-/***/ 3726:
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(3709);
+ _findSectionIndex(source) {
+ for (let i = 0; i < this._sections.length; i++) {
+ const { consumer } = this._sections[i];
+ if (consumer._findSourceIndex(source) !== -1) {
+ return i;
+ }
+ }
+ return -1;
+ }
+ /**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number
+ * is 1-based.
+ * - column: The column number in the original source. The column
+ * number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+ generatedPositionFor(aArgs) {
+ const index = this._findSectionIndex(util.getArg(aArgs, "source"));
+ const section = index >= 0 ? this._sections[index] : null;
+ const nextSection =
+ index >= 0 && index + 1 < this._sections.length
+ ? this._sections[index + 1]
+ : null;
-/***/ }),
+ const generatedPosition =
+ section && section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition && generatedPosition.line !== null) {
+ const lineShift = section.generatedOffset.generatedLine - 1;
+ const columnShift = section.generatedOffset.generatedColumn - 1;
-/***/ 3783:
-/***/ (function(module, exports, __webpack_require__) {
+ if (generatedPosition.line === 1) {
+ generatedPosition.column += columnShift;
+ if (typeof generatedPosition.lastColumn === "number") {
+ generatedPosition.lastColumn += columnShift;
+ }
+ }
-"use strict";
+ if (
+ generatedPosition.lastColumn === Infinity &&
+ nextSection &&
+ generatedPosition.line === nextSection.generatedOffset.generatedLine
+ ) {
+ generatedPosition.lastColumn =
+ nextSection.generatedOffset.generatedColumn - 2;
+ }
+ generatedPosition.line += lineShift;
+ return generatedPosition;
+ }
-const { getWasmXScopes } = __webpack_require__(3788);
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
-// Returns expanded stack frames details based on the generated location.
-// The function return null if not information was found.
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ allGeneratedPositionsFor(aArgs) {
+ const index = this._findSectionIndex(util.getArg(aArgs, "source"));
+ const section = index >= 0 ? this._sections[index] : null;
+ const nextSection =
+ index >= 0 && index + 1 < this._sections.length
+ ? this._sections[index + 1]
+ : null;
-async function getOriginalStackFrames(generatedLocation) {
- const wasmXScopes = await getWasmXScopes(generatedLocation.sourceId);
- if (!wasmXScopes) {
- return null;
- }
+ if (!section) return [];
- const scopes = wasmXScopes.search(generatedLocation);
- if (scopes.length === 0) {
- console.warn("Something wrong with debug data: none original frames found");
- return null;
- }
- return scopes;
-}
+ return section.consumer.allGeneratedPositionsFor(aArgs).map(
+ generatedPosition => {
+ const lineShift = section.generatedOffset.generatedLine - 1;
+ const columnShift = section.generatedOffset.generatedColumn - 1;
-module.exports = {
- getOriginalStackFrames
-};
+ if (generatedPosition.line === 1) {
+ generatedPosition.column += columnShift;
+ if (typeof generatedPosition.lastColumn === "number") {
+ generatedPosition.lastColumn += columnShift;
+ }
+ }
-/***/ }),
+ if (
+ generatedPosition.lastColumn === Infinity &&
+ nextSection &&
+ generatedPosition.line === nextSection.generatedOffset.generatedLine
+ ) {
+ generatedPosition.lastColumn =
+ nextSection.generatedOffset.generatedColumn - 2;
+ }
+ generatedPosition.line += lineShift;
-/***/ 3785:
-/***/ (function(module, exports, __webpack_require__) {
+ return generatedPosition;
+ }
+ );
+ }
-"use strict";
+ eachMapping(aCallback, aContext, aOrder) {
+ this._sections.forEach((section, index) => {
+ const nextSection =
+ index + 1 < this._sections.length
+ ? this._sections[index + 1]
+ : null;
+ const { generatedOffset } = section;
+ const lineShift = generatedOffset.generatedLine - 1;
+ const columnShift = generatedOffset.generatedColumn - 1;
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
+ section.consumer.eachMapping(function(mapping) {
+ if (mapping.generatedLine === 1) {
+ mapping.generatedColumn += columnShift;
-/* eslint camelcase: 0*/
+ if (typeof mapping.lastGeneratedColumn === "number") {
+ mapping.lastGeneratedColumn += columnShift;
+ }
+ }
-const { getDwarfToWasmData } = __webpack_require__(3794);
+ if (
+ mapping.lastGeneratedColumn === Infinity &&
+ nextSection &&
+ mapping.generatedLine === nextSection.generatedOffset.generatedLine
+ ) {
+ mapping.lastGeneratedColumn =
+ nextSection.generatedOffset.generatedColumn - 2;
+ }
+ mapping.generatedLine += lineShift;
-let cachedWasmModule;
-let utf8Decoder;
+ aCallback.call(this, mapping);
+ }, aContext, aOrder);
+ });
+ }
-function convertDwarf(wasm, instance) {
- const { memory, alloc_mem, free_mem, convert_dwarf } = instance.exports;
- const wasmPtr = alloc_mem(wasm.byteLength);
- new Uint8Array(memory.buffer, wasmPtr, wasm.byteLength).set(new Uint8Array(wasm));
- const resultPtr = alloc_mem(12);
- const enableXScopes = true;
- const success = convert_dwarf(wasmPtr, wasm.byteLength, resultPtr, resultPtr + 4, enableXScopes);
- free_mem(wasmPtr);
- const resultView = new DataView(memory.buffer, resultPtr, 12);
- const outputPtr = resultView.getUint32(0, true),
- outputLen = resultView.getUint32(4, true);
- free_mem(resultPtr);
- if (!success) {
- throw new Error("Unable to convert from DWARF sections");
+ computeColumnSpans() {
+ for (let i = 0; i < this._sections.length; i++) {
+ this._sections[i].consumer.computeColumnSpans();
+ }
}
- if (!utf8Decoder) {
- utf8Decoder = new TextDecoder("utf-8");
+
+ destroy() {
+ for (let i = 0; i < this._sections.length; i++) {
+ this._sections[i].consumer.destroy();
+ }
}
- const output = utf8Decoder.decode(new Uint8Array(memory.buffer, outputPtr, outputLen));
- free_mem(outputPtr);
- return output;
}
+exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
-async function convertToJSON(buffer) {
- // Note: We don't 'await' here because it could mean that multiple
- // calls to 'convertToJSON' could cause multiple fetches to be started.
- cachedWasmModule = cachedWasmModule || loadConverterModule();
+/*
+ * Cheat to get around inter-twingled classes. `factory()` can be at the end
+ * where it has access to non-hoisted classes, but it gets hoisted itself.
+ */
+function _factory(aSourceMap, aSourceMapURL) {
+ let sourceMap = aSourceMap;
+ if (typeof aSourceMap === "string") {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
- return convertDwarf(buffer, (await cachedWasmModule));
+ const consumer = sourceMap.sections != null
+ ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+ : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+ return Promise.resolve(consumer);
}
-async function loadConverterModule() {
- const wasm = await getDwarfToWasmData();
- const imports = {};
- const { instance } = await WebAssembly.instantiate(wasm, imports);
- return instance;
+function _factoryBSM(aSourceMap, aSourceMapURL) {
+ return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
}
-module.exports = {
- convertToJSON
-};
/***/ }),
-/***/ 3788:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-const { getSourceMap } = __webpack_require__(3704); /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-
-/* eslint camelcase: 0*/
+/***/ 3714:
+/***/ (function(module, exports) {
-const { generatedToOriginalId } = __webpack_require__(3652);
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
-const xScopes = new Map();
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
-function indexLinkingNames(items) {
- const result = new Map();
- let queue = [...items];
- while (queue.length > 0) {
- const item = queue.shift();
- if ("uid" in item) {
- result.set(item.uid, item);
- } else if ("linkage_name" in item) {
- // TODO the linkage_name string value is used for compatibility
- // with old format. Remove in favour of the uid referencing.
- result.set(item.linkage_name, item);
- }
- if ("children" in item) {
- queue = [...queue, ...item.children];
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next-closest element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element than the one we are searching for, so we return -1.
+ const mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ const cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ } else if (cmp > 0) {
+ // Our needle is greater than aHaystack[mid].
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
}
- }
- return result;
-}
-
-function getIndexedItem(index, key) {
- if (typeof key === "object" && key != null) {
- return index.get(key.uid);
- }
- if (typeof key === "string") {
- return index.get(key);
- }
- return null;
-}
-async function getXScopes(sourceId) {
- if (xScopes.has(sourceId)) {
- return xScopes.get(sourceId);
- }
- const map = await getSourceMap(sourceId);
- if (!map || !map.xScopes) {
- xScopes.set(sourceId, null);
- return null;
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return aHigh < aHaystack.length ? aHigh : -1;
+ }
+ return mid;
}
- const { code_section_offset, debug_info } = map.xScopes;
- const xScope = {
- code_section_offset,
- debug_info,
- idIndex: indexLinkingNames(debug_info),
- sources: map.sources
- };
- xScopes.set(sourceId, xScope);
- return xScope;
-}
-function isInRange(item, pc) {
- if ("ranges" in item) {
- return item.ranges.some(r => r[0] <= pc && pc < r[1]);
- }
- if ("high_pc" in item) {
- return item.low_pc <= pc && pc < item.high_pc;
+ // Our needle is less than aHaystack[mid].
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
}
- return false;
-}
-function filterScopes(items, pc, lastItem, index) {
- if (!items) {
- return [];
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return mid;
}
- return items.reduce((result, item) => {
- switch (item.tag) {
- case "compile_unit":
- if (isInRange(item, pc)) {
- result = [...result, ...filterScopes(item.children, pc, lastItem, index)];
- }
- break;
- case "namespace":
- case "structure_type":
- case "union_type":
- result = [...result, ...filterScopes(item.children, pc, lastItem, index)];
- break;
- case "subprogram":
- if (isInRange(item, pc)) {
- const s = {
- id: item.linkage_name,
- name: item.name
- };
- result = [...result, s, ...filterScopes(item.children, pc, s, index)];
- }
- break;
- case "inlined_subroutine":
- if (isInRange(item, pc)) {
- const linkedItem = getIndexedItem(index, item.abstract_origin);
- const s = {
- id: item.abstract_origin,
- name: linkedItem ? linkedItem.name : void 0
- };
- if (lastItem) {
- lastItem.file = item.call_file;
- lastItem.line = item.call_line;
- }
- result = [...result, s, ...filterScopes(item.children, pc, s, index)];
- }
- break;
- }
- return result;
- }, []);
+ return aLow < 0 ? -1 : aLow;
}
-class XScope {
-
- constructor(xScopeData) {
- this.xScope = xScopeData;
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+ if (aHaystack.length === 0) {
+ return -1;
}
- search(generatedLocation) {
- const { code_section_offset, debug_info, sources, idIndex } = this.xScope;
- const pc = generatedLocation.line - (code_section_offset || 0);
- const scopes = filterScopes(debug_info, pc, null, idIndex);
- scopes.reverse();
-
- return scopes.map(i => {
- if (!("file" in i)) {
- return {
- displayName: i.name || ""
- };
- }
- const sourceId = generatedToOriginalId(generatedLocation.sourceId, sources[i.file || 0]);
- return {
- displayName: i.name || "",
- location: {
- line: i.line || 0,
- sourceId
- }
- };
- });
+ let index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+ aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+ if (index < 0) {
+ return -1;
}
-}
-async function getWasmXScopes(sourceId) {
- const xScopeData = await getXScopes(sourceId);
- if (!xScopeData) {
- return null;
+ // We have found either the exact element, or the next-closest element than
+ // the one we are searching for. However, there may be more than one such
+ // element. Make sure we always return the smallest of these.
+ while (index - 1 >= 0) {
+ if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+ break;
+ }
+ --index;
}
- return new XScope(xScopeData);
-}
-
-function clearWasmXScopes() {
- xScopes.clear();
-}
-module.exports = {
- getWasmXScopes,
- clearWasmXScopes
+ return index;
};
-/***/ }),
-
-/***/ 3793:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-
-const { SourceMapConsumer } = __webpack_require__(3705);
-
-async function createConsumer(map, sourceMapUrl) {
- return new SourceMapConsumer(map, sourceMapUrl);
-}
-
-module.exports = {
- createConsumer
-};
/***/ }),
-/***/ 3794:
+/***/ 3716:
/***/ (function(module, exports, __webpack_require__) {
-"use strict";
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+const SourceMapGenerator = __webpack_require__(3706).SourceMapGenerator;
+const util = __webpack_require__(3668);
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at . */
-const { SourceMapConsumer } = __webpack_require__(3705);
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+const REGEX_NEWLINE = /(\r?\n)/;
-let root;
-function setAssetRootURL(assetRoot) {
- // Remove any trailing slash so we don't generate a double-slash below.
- root = assetRoot.replace(/\/$/, "");
+// Newline character code for charCodeAt() comparisons
+const NEWLINE_CODE = 10;
- SourceMapConsumer.initialize({
- "lib/mappings.wasm": `${root}/source-map-mappings.wasm`
- });
-}
-
-async function getDwarfToWasmData(name) {
- if (!root) {
- throw new Error(`No wasm path - Unable to resolve ${name}`);
- }
-
- const response = await fetch(`${root}/dwarf_to_json.wasm`);
-
- return response.arrayBuffer();
-}
-
-module.exports = {
- setAssetRootURL,
- getDwarfToWasmData
-};
-
-/***/ }),
-
-/***/ 3795:
-/***/ (function(module, exports, __webpack_require__) {
-
-const readWasm = __webpack_require__(3813);
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+const isSourceNode = "$$$isSourceNode$$$";
/**
- * Provide the JIT with a nice shape / hidden class.
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
*/
-function Mapping() {
- this.generatedLine = 0;
- this.generatedColumn = 0;
- this.lastGeneratedColumn = null;
- this.source = null;
- this.originalLine = null;
- this.originalColumn = null;
- this.name = null;
-}
-
-let cachedWasm = null;
-
-module.exports = function wasm() {
- if (cachedWasm) {
- return cachedWasm;
+class SourceNode {
+ constructor(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
}
- const callbackStack = [];
-
- cachedWasm = readWasm().then(buffer => {
- return WebAssembly.instantiate(buffer, {
- env: {
- mapping_callback(
- generatedLine,
- generatedColumn,
-
- hasLastGeneratedColumn,
- lastGeneratedColumn,
-
- hasOriginal,
- source,
- originalLine,
- originalColumn,
-
- hasName,
- name
- ) {
- const mapping = new Mapping();
- // JS uses 1-based line numbers, wasm uses 0-based.
- mapping.generatedLine = generatedLine + 1;
- mapping.generatedColumn = generatedColumn;
-
- if (hasLastGeneratedColumn) {
- // JS uses inclusive last generated column, wasm uses exclusive.
- mapping.lastGeneratedColumn = lastGeneratedColumn - 1;
- }
-
- if (hasOriginal) {
- mapping.source = source;
- // JS uses 1-based line numbers, wasm uses 0-based.
- mapping.originalLine = originalLine + 1;
- mapping.originalColumn = originalColumn;
-
- if (hasName) {
- mapping.name = name;
- }
- }
-
- callbackStack[callbackStack.length - 1](mapping);
- },
-
- start_all_generated_locations_for() { console.time("all_generated_locations_for"); },
- end_all_generated_locations_for() { console.timeEnd("all_generated_locations_for"); },
-
- start_compute_column_spans() { console.time("compute_column_spans"); },
- end_compute_column_spans() { console.timeEnd("compute_column_spans"); },
-
- start_generated_location_for() { console.time("generated_location_for"); },
- end_generated_location_for() { console.timeEnd("generated_location_for"); },
-
- start_original_location_for() { console.time("original_location_for"); },
- end_original_location_for() { console.timeEnd("original_location_for"); },
-
- start_parse_mappings() { console.time("parse_mappings"); },
- end_parse_mappings() { console.timeEnd("parse_mappings"); },
+ /**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+ static fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ const node = new SourceNode();
- start_sort_by_generated_location() { console.time("sort_by_generated_location"); },
- end_sort_by_generated_location() { console.timeEnd("sort_by_generated_location"); },
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are accessed by calling `shiftNextLine`.
+ const remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ let remainingLinesIndex = 0;
+ const shiftNextLine = function() {
+ const lineContents = getNextLine();
+ // The last line of a file might not have a newline.
+ const newLine = getNextLine() || "";
+ return lineContents + newLine;
- start_sort_by_original_location() { console.time("sort_by_original_location"); },
- end_sort_by_original_location() { console.timeEnd("sort_by_original_location"); },
- }
- });
- }).then(Wasm => {
- return {
- exports: Wasm.instance.exports,
- withMappingCallback: (mappingCallback, f) => {
- callbackStack.push(mappingCallback);
- try {
- f();
- } finally {
- callbackStack.pop();
- }
+ function getNextLine() {
+ return remainingLinesIndex < remainingLines.length ?
+ remainingLines[remainingLinesIndex++] : undefined;
}
};
- }).then(null, e => {
- cachedWasm = null;
- throw e;
- });
- return cachedWasm;
-};
+ // We need to remember the position of "remainingLines"
+ let lastGeneratedLine = 1, lastGeneratedColumn = 0;
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ let lastMapping = null;
+ let nextLine;
-/***/ }),
+ aSourceMapConsumer.eachMapping(function(mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ nextLine = remainingLines[remainingLinesIndex] || "";
+ const code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ nextLine = remainingLines[remainingLinesIndex] || "";
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLinesIndex < remainingLines.length) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.splice(remainingLinesIndex).join(""));
+ }
-/***/ 3807:
-/***/ (function(module, exports, __webpack_require__) {
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function(sourceFile) {
+ const content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
-"use strict";
-/* WEBPACK VAR INJECTION */(function(Buffer) {
-const punycode = __webpack_require__(916);
-const tr46 = __webpack_require__(3819);
+ return node;
-const infra = __webpack_require__(3811);
-const { percentEncode, percentDecode } = __webpack_require__(3808);
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ const source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ }
-const specialSchemes = {
- ftp: 21,
- file: null,
- gopher: 70,
- http: 80,
- https: 443,
- ws: 80,
- wss: 443
-};
-
-const failure = Symbol("failure");
-
-function countSymbols(str) {
- return punycode.ucs2.decode(str).length;
-}
-
-function at(input, idx) {
- const c = input[idx];
- return isNaN(c) ? undefined : String.fromCodePoint(c);
-}
-
-function isSingleDot(buffer) {
- return buffer === "." || buffer.toLowerCase() === "%2e";
-}
-
-function isDoubleDot(buffer) {
- buffer = buffer.toLowerCase();
- return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
-}
-
-function isWindowsDriveLetterCodePoints(cp1, cp2) {
- return infra.isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
-}
-
-function isWindowsDriveLetterString(string) {
- return string.length === 2 && infra.isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
-}
-
-function isNormalizedWindowsDriveLetterString(string) {
- return string.length === 2 && infra.isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
-}
-
-function containsForbiddenHostCodePoint(string) {
- return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
-}
-
-function containsForbiddenHostCodePointExcludingPercent(string) {
- return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
-}
-
-function isSpecialScheme(scheme) {
- return specialSchemes[scheme] !== undefined;
-}
-
-function isSpecial(url) {
- return isSpecialScheme(url.scheme);
-}
-
-function isNotSpecial(url) {
- return !isSpecialScheme(url.scheme);
-}
-
-function defaultPort(scheme) {
- return specialSchemes[scheme];
-}
-
-function utf8PercentEncode(c) {
- const buf = Buffer.from(c);
-
- let str = "";
-
- for (let i = 0; i < buf.length; ++i) {
- str += percentEncode(buf[i]);
+ /**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function(chunk) {
+ this.add(chunk);
+ }, this);
+ } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ } else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
}
- return str;
-}
-
-function isC0ControlPercentEncode(c) {
- return c <= 0x1F || c > 0x7E;
-}
-
-const extraUserinfoPercentEncodeSet =
- new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
-function isUserinfoPercentEncode(c) {
- return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
-}
-
-const extraFragmentPercentEncodeSet = new Set([32, 34, 60, 62, 96]);
-function isFragmentPercentEncode(c) {
- return isC0ControlPercentEncode(c) || extraFragmentPercentEncodeSet.has(c);
-}
-
-const extraPathPercentEncodeSet = new Set([35, 63, 123, 125]);
-function isPathPercentEncode(c) {
- return isFragmentPercentEncode(c) || extraPathPercentEncodeSet.has(c);
-}
-
-function percentEncodeChar(c, encodeSetPredicate) {
- const cStr = String.fromCodePoint(c);
-
- if (encodeSetPredicate(c)) {
- return utf8PercentEncode(cStr);
+ /**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+ prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (let i = aChunk.length - 1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ } else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ } else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
}
- return cStr;
-}
-
-function parseIPv4Number(input) {
- let R = 10;
-
- if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
- input = input.substring(2);
- R = 16;
- } else if (input.length >= 2 && input.charAt(0) === "0") {
- input = input.substring(1);
- R = 8;
+ /**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+ walk(aFn) {
+ let chunk;
+ for (let i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ } else if (chunk !== "") {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
}
- if (input === "") {
- return 0;
+ /**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+ join(aSep) {
+ let newChildren;
+ let i;
+ const len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len - 1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
}
- let regex = /[^0-7]/;
- if (R === 10) {
- regex = /[^0-9]/;
- }
- if (R === 16) {
- regex = /[^0-9A-Fa-f]/;
+ /**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+ replaceRight(aPattern, aReplacement) {
+ const lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ } else if (typeof lastChild === "string") {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ } else {
+ this.children.push("".replace(aPattern, aReplacement));
+ }
+ return this;
}
- if (regex.test(input)) {
- return failure;
+ /**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+ setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
}
- return parseInt(input, R);
-}
-
-function parseIPv4(input) {
- const parts = input.split(".");
- if (parts[parts.length - 1] === "") {
- if (parts.length > 1) {
- parts.pop();
+ /**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+ walkSourceContents(aFn) {
+ for (let i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
}
- }
- if (parts.length > 4) {
- return input;
+ const sources = Object.keys(this.sourceContents);
+ for (let i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
}
- const numbers = [];
- for (const part of parts) {
- if (part === "") {
- return input;
- }
- const n = parseIPv4Number(part);
- if (n === failure) {
- return input;
- }
-
- numbers.push(n);
- }
-
- for (let i = 0; i < numbers.length - 1; ++i) {
- if (numbers[i] > 255) {
- return failure;
- }
- }
- if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
- return failure;
+ /**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+ toString() {
+ let str = "";
+ this.walk(function(chunk) {
+ str += chunk;
+ });
+ return str;
}
- let ipv4 = numbers.pop();
- let counter = 0;
+ /**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+ toStringWithSourceMap(aArgs) {
+ const generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ const map = new SourceMapGenerator(aArgs);
+ let sourceMappingActive = false;
+ let lastOriginalSource = null;
+ let lastOriginalLine = null;
+ let lastOriginalColumn = null;
+ let lastOriginalName = null;
+ this.walk(function(chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if (lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (let idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function(sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
- for (const n of numbers) {
- ipv4 += n * Math.pow(256, 3 - counter);
- ++counter;
+ return { code: generated.code, map };
}
-
- return ipv4;
}
-function serializeIPv4(address) {
- let output = "";
- let n = address;
+exports.SourceNode = SourceNode;
- for (let i = 1; i <= 4; ++i) {
- output = String(n % 256) + output;
- if (i !== 4) {
- output = "." + output;
- }
- n = Math.floor(n / 256);
- }
- return output;
-}
+/***/ }),
-function parseIPv6(input) {
- const address = [0, 0, 0, 0, 0, 0, 0, 0];
- let pieceIndex = 0;
- let compress = null;
- let pointer = 0;
+/***/ 3717:
+/***/ (function(module, exports, __webpack_require__) {
- input = punycode.ucs2.decode(input);
+"use strict";
- if (input[pointer] === 58) {
- if (input[pointer + 1] !== 58) {
- return failure;
- }
- pointer += 2;
- ++pieceIndex;
- compress = pieceIndex;
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+
+function assert(condition, message) {
+ if (!condition) {
+ throw new Error(`Assertion failure: ${message}`);
}
+}
- while (pointer < input.length) {
- if (pieceIndex === 8) {
- return failure;
- }
+module.exports = assert;
- if (input[pointer] === 58) {
- if (compress !== null) {
- return failure;
- }
- ++pointer;
- ++pieceIndex;
- compress = pieceIndex;
- continue;
- }
+/***/ }),
- let value = 0;
- let length = 0;
+/***/ 3718:
+/***/ (function(module, exports, __webpack_require__) {
- while (length < 4 && infra.isASCIIHex(input[pointer])) {
- value = value * 0x10 + parseInt(at(input, pointer), 16);
- ++pointer;
- ++length;
- }
+"use strict";
- if (input[pointer] === 46) {
- if (length === 0) {
- return failure;
- }
- pointer -= length;
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- if (pieceIndex > 6) {
- return failure;
- }
+const { networkRequest } = __webpack_require__(3651);
+const { getSourceMap, setSourceMap } = __webpack_require__(3704);
+const { WasmRemap } = __webpack_require__(3719);
+const { SourceMapConsumer } = __webpack_require__(3705);
+const { convertToJSON } = __webpack_require__(3785);
+const { createConsumer } = __webpack_require__(3793);
- let numbersSeen = 0;
+// URLs which have been seen in a completed source map request.
+const originalURLs = new Set();
- while (input[pointer] !== undefined) {
- let ipv4Piece = null;
+function clearOriginalURLs() {
+ originalURLs.clear();
+}
- if (numbersSeen > 0) {
- if (input[pointer] === 46 && numbersSeen < 4) {
- ++pointer;
- } else {
- return failure;
- }
- }
+function hasOriginalURL(url) {
+ return originalURLs.has(url);
+}
- if (!infra.isASCIIDigit(input[pointer])) {
- return failure;
- }
+function _resolveSourceMapURL(source) {
+ const { url = "", sourceMapURL = "" } = source;
- while (infra.isASCIIDigit(input[pointer])) {
- const number = parseInt(at(input, pointer));
- if (ipv4Piece === null) {
- ipv4Piece = number;
- } else if (ipv4Piece === 0) {
- return failure;
- } else {
- ipv4Piece = ipv4Piece * 10 + number;
- }
- if (ipv4Piece > 255) {
- return failure;
- }
- ++pointer;
- }
+ if (!url) {
+ // If the source doesn't have a URL, don't resolve anything.
+ return { sourceMapURL, baseURL: sourceMapURL };
+ }
- address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
+ const resolvedURL = new URL(sourceMapURL, url);
+ const resolvedString = resolvedURL.toString();
- ++numbersSeen;
+ let baseURL = resolvedString;
+ // When the sourceMap is a data: URL, fall back to using the
+ // source's URL, if possible.
+ if (resolvedURL.protocol == "data:") {
+ baseURL = url;
+ }
- if (numbersSeen === 2 || numbersSeen === 4) {
- ++pieceIndex;
- }
- }
+ return { sourceMapURL: resolvedString, baseURL };
+}
- if (numbersSeen !== 4) {
- return failure;
- }
+async function _resolveAndFetch(generatedSource) {
+ // Fetch the sourcemap over the network and create it.
+ const { sourceMapURL, baseURL } = _resolveSourceMapURL(generatedSource);
- break;
- } else if (input[pointer] === 58) {
- ++pointer;
- if (input[pointer] === undefined) {
- return failure;
- }
- } else if (input[pointer] !== undefined) {
- return failure;
- }
+ let fetched = await networkRequest(sourceMapURL, { loadFromCache: false });
- address[pieceIndex] = value;
- ++pieceIndex;
+ if (fetched.isDwarf) {
+ fetched = { content: await convertToJSON(fetched.content) };
}
- if (compress !== null) {
- let swaps = pieceIndex - compress;
- pieceIndex = 7;
- while (pieceIndex !== 0 && swaps > 0) {
- const temp = address[compress + swaps - 1];
- address[compress + swaps - 1] = address[pieceIndex];
- address[pieceIndex] = temp;
- --pieceIndex;
- --swaps;
+ // Create the source map and fix it up.
+ let map = await createConsumer(fetched.content, baseURL);
+ if (generatedSource.isWasm) {
+ map = new WasmRemap(map);
+ // Check if experimental scope info exists.
+ if (fetched.content.includes("x-scopes")) {
+ const parsedJSON = JSON.parse(fetched.content);
+ map.xScopes = parsedJSON["x-scopes"];
}
- } else if (compress === null && pieceIndex !== 8) {
- return failure;
}
- return address;
-}
-
-function serializeIPv6(address) {
- let output = "";
- const seqResult = findLongestZeroSequence(address);
- const compress = seqResult.idx;
- let ignore0 = false;
+ if (map && map.sources) {
+ map.sources.forEach(url => originalURLs.add(url));
+ }
- for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
- if (ignore0 && address[pieceIndex] === 0) {
- continue;
- } else if (ignore0) {
- ignore0 = false;
- }
+ return map;
+}
- if (compress === pieceIndex) {
- const separator = pieceIndex === 0 ? "::" : ":";
- output += separator;
- ignore0 = true;
- continue;
- }
+function fetchSourceMap(generatedSource) {
+ const existingRequest = getSourceMap(generatedSource.id);
- output += address[pieceIndex].toString(16);
+ // If it has already been requested, return the request. Make sure
+ // to do this even if sourcemapping is turned off, because
+ // pretty-printing uses sourcemaps.
+ //
+ // An important behavior here is that if it's in the middle of
+ // requesting it, all subsequent calls will block on the initial
+ // request.
+ if (existingRequest) {
+ return existingRequest;
+ }
- if (pieceIndex !== 7) {
- output += ":";
- }
+ if (!generatedSource.sourceMapURL) {
+ return null;
}
- return output;
+ // Fire off the request, set it in the cache, and return it.
+ const req = _resolveAndFetch(generatedSource);
+ // Make sure the cached promise does not reject, because we only
+ // want to report the error once.
+ setSourceMap(generatedSource.id, req.catch(() => null));
+ return req;
}
-function parseHost(input, isNotSpecialArg = false) {
- if (input[0] === "[") {
- if (input[input.length - 1] !== "]") {
- return failure;
- }
+module.exports = { fetchSourceMap, hasOriginalURL, clearOriginalURLs };
- return parseIPv6(input.substring(1, input.length - 1));
- }
+/***/ }),
- if (isNotSpecialArg) {
- return parseOpaqueHost(input);
- }
+/***/ 3719:
+/***/ (function(module, exports, __webpack_require__) {
- const domain = percentDecode(Buffer.from(input)).toString();
- const asciiDomain = domainToASCII(domain);
- if (asciiDomain === failure) {
- return failure;
+"use strict";
+
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+
+/**
+ * SourceMapConsumer for WebAssembly source maps. It transposes columns with
+ * lines, which allows mapping data to be used with SpiderMonkey Debugger API.
+ */
+class WasmRemap {
+ /**
+ * @param map SourceMapConsumer
+ */
+ constructor(map) {
+ this._map = map;
+ this.version = map.version;
+ this.file = map.file;
+ this._computeColumnSpans = false;
}
- if (containsForbiddenHostCodePoint(asciiDomain)) {
- return failure;
+ get sources() {
+ return this._map.sources;
}
- const ipv4Host = parseIPv4(asciiDomain);
- if (typeof ipv4Host === "number" || ipv4Host === failure) {
- return ipv4Host;
+ get sourceRoot() {
+ return this._map.sourceRoot;
}
- return asciiDomain;
-}
+ get names() {
+ return this._map.names;
+ }
-function parseOpaqueHost(input) {
- if (containsForbiddenHostCodePointExcludingPercent(input)) {
- return failure;
+ get sourcesContent() {
+ return this._map.sourcesContent;
}
- let output = "";
- const decoded = punycode.ucs2.decode(input);
- for (let i = 0; i < decoded.length; ++i) {
- output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
+ get mappings() {
+ throw new Error("not supported");
}
- return output;
-}
-function findLongestZeroSequence(arr) {
- let maxIdx = null;
- let maxLen = 1; // only find elements > 1
- let currStart = null;
- let currLen = 0;
+ computeColumnSpans() {
+ this._computeColumnSpans = true;
+ }
- for (let i = 0; i < arr.length; ++i) {
- if (arr[i] !== 0) {
- if (currLen > maxLen) {
- maxIdx = currStart;
- maxLen = currLen;
- }
+ originalPositionFor(generatedPosition) {
+ const result = this._map.originalPositionFor({
+ line: 1,
+ column: generatedPosition.line,
+ bias: generatedPosition.bias
+ });
+ return result;
+ }
- currStart = null;
- currLen = 0;
- } else {
- if (currStart === null) {
- currStart = i;
- }
- ++currLen;
+ _remapGeneratedPosition(position) {
+ const generatedPosition = {
+ line: position.column,
+ column: 0
+ };
+ if (this._computeColumnSpans) {
+ generatedPosition.lastColumn = Infinity;
}
+ return generatedPosition;
}
- // if trailing zeros
- if (currLen > maxLen) {
- maxIdx = currStart;
- maxLen = currLen;
+ generatedPositionFor(originalPosition) {
+ const position = this._map.generatedPositionFor(originalPosition);
+ return this._remapGeneratedPosition(position);
}
- return {
- idx: maxIdx,
- len: maxLen
- };
-}
-
-function serializeHost(host) {
- if (typeof host === "number") {
- return serializeIPv4(host);
+ allGeneratedPositionsFor(originalPosition) {
+ const positions = this._map.allGeneratedPositionsFor(originalPosition);
+ return positions.map(position => {
+ return this._remapGeneratedPosition(position);
+ });
}
- // IPv6 serializer
- if (host instanceof Array) {
- return "[" + serializeIPv6(host) + "]";
+ hasContentsOfAllSources() {
+ return this._map.hasContentsOfAllSources();
}
- return host;
-}
+ sourceContentFor(source, returnNullOnMissing) {
+ return this._map.sourceContentFor(source, returnNullOnMissing);
+ }
-function domainToASCII(domain, beStrict = false) {
- const result = tr46.toASCII(domain, {
- checkBidi: true,
- checkHyphens: false,
- checkJoiners: true,
- useSTD3ASCIIRules: beStrict,
- verifyDNSLength: beStrict
- });
- if (result === null) {
- return failure;
+ eachMapping(callback, context, order) {
+ this._map.eachMapping(entry => {
+ const {
+ source,
+ generatedColumn,
+ originalLine,
+ originalColumn,
+ name
+ } = entry;
+ callback({
+ source,
+ generatedLine: generatedColumn,
+ generatedColumn: 0,
+ originalLine,
+ originalColumn,
+ name
+ });
+ }, context, order);
}
- return result;
}
-function trimControlChars(url) {
- return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
-}
+exports.WasmRemap = WasmRemap;
-function trimTabAndNewline(url) {
- return url.replace(/\u0009|\u000A|\u000D/g, "");
-}
+/***/ }),
-function shortenPath(url) {
- const { path } = url;
- if (path.length === 0) {
- return;
- }
- if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
- return;
- }
+/***/ 3726:
+/***/ (function(module, exports, __webpack_require__) {
- path.pop();
-}
+module.exports = __webpack_require__(3709);
-function includesCredentials(url) {
- return url.username !== "" || url.password !== "";
-}
-function cannotHaveAUsernamePasswordPort(url) {
- return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
-}
+/***/ }),
-function isNormalizedWindowsDriveLetter(string) {
- return /^[A-Za-z]:$/.test(string);
-}
+/***/ 3783:
+/***/ (function(module, exports, __webpack_require__) {
-function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
- this.pointer = 0;
- this.input = input;
- this.base = base || null;
- this.encodingOverride = encodingOverride || "utf-8";
- this.stateOverride = stateOverride;
- this.url = url;
- this.failure = false;
- this.parseError = false;
+"use strict";
- if (!this.url) {
- this.url = {
- scheme: "",
- username: "",
- password: "",
- host: null,
- port: null,
- path: [],
- query: null,
- fragment: null,
- cannotBeABaseURL: false
- };
+const { getWasmXScopes } = __webpack_require__(3788);
- const res = trimControlChars(this.input);
- if (res !== this.input) {
- this.parseError = true;
- }
- this.input = res;
- }
+// Returns expanded stack frames details based on the generated location.
+// The function return null if not information was found.
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- const res = trimTabAndNewline(this.input);
- if (res !== this.input) {
- this.parseError = true;
+async function getOriginalStackFrames(generatedLocation) {
+ const wasmXScopes = await getWasmXScopes(generatedLocation.sourceId);
+ if (!wasmXScopes) {
+ return null;
}
- this.input = res;
- this.state = stateOverride || "scheme start";
+ const scopes = wasmXScopes.search(generatedLocation);
+ if (scopes.length === 0) {
+ console.warn("Something wrong with debug data: none original frames found");
+ return null;
+ }
+ return scopes;
+}
- this.buffer = "";
- this.atFlag = false;
- this.arrFlag = false;
- this.passwordTokenSeenFlag = false;
+module.exports = {
+ getOriginalStackFrames
+};
- this.input = punycode.ucs2.decode(this.input);
+/***/ }),
- for (; this.pointer <= this.input.length; ++this.pointer) {
- const c = this.input[this.pointer];
- const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
+/***/ 3785:
+/***/ (function(module, exports, __webpack_require__) {
- // exec state machine
- const ret = this["parse " + this.state](c, cStr);
- if (!ret) {
- break; // terminate algorithm
- } else if (ret === failure) {
- this.failure = true;
- break;
- }
- }
-}
+"use strict";
-URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
- if (infra.isASCIIAlpha(c)) {
- this.buffer += cStr.toLowerCase();
- this.state = "scheme";
- } else if (!this.stateOverride) {
- this.state = "no scheme";
- --this.pointer;
- } else {
- this.parseError = true;
- return failure;
- }
- return true;
-};
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
-URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
- if (infra.isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
- this.buffer += cStr.toLowerCase();
- } else if (c === 58) {
- if (this.stateOverride) {
- if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
- return false;
- }
+/* eslint camelcase: 0*/
- if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
- return false;
- }
+const { getDwarfToWasmData } = __webpack_require__(3794);
- if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
- return false;
- }
+let cachedWasmModule;
+let utf8Decoder;
- if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
- return false;
- }
- }
- this.url.scheme = this.buffer;
- if (this.stateOverride) {
- if (this.url.port === defaultPort(this.url.scheme)) {
- this.url.port = null;
- }
- return false;
- }
- this.buffer = "";
- if (this.url.scheme === "file") {
- if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
- this.parseError = true;
- }
- this.state = "file";
- } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
- this.state = "special relative or authority";
- } else if (isSpecial(this.url)) {
- this.state = "special authority slashes";
- } else if (this.input[this.pointer + 1] === 47) {
- this.state = "path or authority";
- ++this.pointer;
- } else {
- this.url.cannotBeABaseURL = true;
- this.url.path.push("");
- this.state = "cannot-be-a-base-URL path";
- }
- } else if (!this.stateOverride) {
- this.buffer = "";
- this.state = "no scheme";
- this.pointer = -1;
- } else {
- this.parseError = true;
- return failure;
+function convertDwarf(wasm, instance) {
+ const { memory, alloc_mem, free_mem, convert_dwarf } = instance.exports;
+ const wasmPtr = alloc_mem(wasm.byteLength);
+ new Uint8Array(memory.buffer, wasmPtr, wasm.byteLength).set(new Uint8Array(wasm));
+ const resultPtr = alloc_mem(12);
+ const enableXScopes = true;
+ const success = convert_dwarf(wasmPtr, wasm.byteLength, resultPtr, resultPtr + 4, enableXScopes);
+ free_mem(wasmPtr);
+ const resultView = new DataView(memory.buffer, resultPtr, 12);
+ const outputPtr = resultView.getUint32(0, true),
+ outputLen = resultView.getUint32(4, true);
+ free_mem(resultPtr);
+ if (!success) {
+ throw new Error("Unable to convert from DWARF sections");
+ }
+ if (!utf8Decoder) {
+ utf8Decoder = new TextDecoder("utf-8");
}
+ const output = utf8Decoder.decode(new Uint8Array(memory.buffer, outputPtr, outputLen));
+ free_mem(outputPtr);
+ return output;
+}
- return true;
-};
+async function convertToJSON(buffer) {
+ // Note: We don't 'await' here because it could mean that multiple
+ // calls to 'convertToJSON' could cause multiple fetches to be started.
+ cachedWasmModule = cachedWasmModule || loadConverterModule();
-URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
- if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
- return failure;
- } else if (this.base.cannotBeABaseURL && c === 35) {
- this.url.scheme = this.base.scheme;
- this.url.path = this.base.path.slice();
- this.url.query = this.base.query;
- this.url.fragment = "";
- this.url.cannotBeABaseURL = true;
- this.state = "fragment";
- } else if (this.base.scheme === "file") {
- this.state = "file";
- --this.pointer;
- } else {
- this.state = "relative";
- --this.pointer;
- }
+ return convertDwarf(buffer, (await cachedWasmModule));
+}
- return true;
+async function loadConverterModule() {
+ const wasm = await getDwarfToWasmData();
+ const imports = {};
+ const { instance } = await WebAssembly.instantiate(wasm, imports);
+ return instance;
+}
+
+module.exports = {
+ convertToJSON
};
-URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
- if (c === 47 && this.input[this.pointer + 1] === 47) {
- this.state = "special authority ignore slashes";
- ++this.pointer;
- } else {
- this.parseError = true;
- this.state = "relative";
- --this.pointer;
- }
+/***/ }),
- return true;
-};
+/***/ 3788:
+/***/ (function(module, exports, __webpack_require__) {
-URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
- if (c === 47) {
- this.state = "authority";
- } else {
- this.state = "path";
- --this.pointer;
- }
+"use strict";
- return true;
-};
-URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
- this.url.scheme = this.base.scheme;
- if (isNaN(c)) {
- this.url.username = this.base.username;
- this.url.password = this.base.password;
- this.url.host = this.base.host;
- this.url.port = this.base.port;
- this.url.path = this.base.path.slice();
- this.url.query = this.base.query;
- } else if (c === 47) {
- this.state = "relative slash";
- } else if (c === 63) {
- this.url.username = this.base.username;
- this.url.password = this.base.password;
- this.url.host = this.base.host;
- this.url.port = this.base.port;
- this.url.path = this.base.path.slice();
- this.url.query = "";
- this.state = "query";
- } else if (c === 35) {
- this.url.username = this.base.username;
- this.url.password = this.base.password;
- this.url.host = this.base.host;
- this.url.port = this.base.port;
- this.url.path = this.base.path.slice();
- this.url.query = this.base.query;
- this.url.fragment = "";
- this.state = "fragment";
- } else if (isSpecial(this.url) && c === 92) {
- this.parseError = true;
- this.state = "relative slash";
- } else {
- this.url.username = this.base.username;
- this.url.password = this.base.password;
- this.url.host = this.base.host;
- this.url.port = this.base.port;
- this.url.path = this.base.path.slice(0, this.base.path.length - 1);
+const { getSourceMap } = __webpack_require__(3704); /* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- this.state = "path";
- --this.pointer;
- }
+/* eslint camelcase: 0*/
- return true;
-};
+const { generatedToOriginalId } = __webpack_require__(3652);
-URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
- if (isSpecial(this.url) && (c === 47 || c === 92)) {
- if (c === 92) {
- this.parseError = true;
+const xScopes = new Map();
+
+function indexLinkingNames(items) {
+ const result = new Map();
+ let queue = [...items];
+ while (queue.length > 0) {
+ const item = queue.shift();
+ if ("uid" in item) {
+ result.set(item.uid, item);
+ } else if ("linkage_name" in item) {
+ // TODO the linkage_name string value is used for compatibility
+ // with old format. Remove in favour of the uid referencing.
+ result.set(item.linkage_name, item);
+ }
+ if ("children" in item) {
+ queue = [...queue, ...item.children];
}
- this.state = "special authority ignore slashes";
- } else if (c === 47) {
- this.state = "authority";
- } else {
- this.url.username = this.base.username;
- this.url.password = this.base.password;
- this.url.host = this.base.host;
- this.url.port = this.base.port;
- this.state = "path";
- --this.pointer;
}
+ return result;
+}
- return true;
-};
+function getIndexedItem(index, key) {
+ if (typeof key === "object" && key != null) {
+ return index.get(key.uid);
+ }
+ if (typeof key === "string") {
+ return index.get(key);
+ }
+ return null;
+}
-URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
- if (c === 47 && this.input[this.pointer + 1] === 47) {
- this.state = "special authority ignore slashes";
- ++this.pointer;
- } else {
- this.parseError = true;
- this.state = "special authority ignore slashes";
- --this.pointer;
+async function getXScopes(sourceId) {
+ if (xScopes.has(sourceId)) {
+ return xScopes.get(sourceId);
}
+ const map = await getSourceMap(sourceId);
+ if (!map || !map.xScopes) {
+ xScopes.set(sourceId, null);
+ return null;
+ }
+ const { code_section_offset, debug_info } = map.xScopes;
+ const xScope = {
+ code_section_offset,
+ debug_info,
+ idIndex: indexLinkingNames(debug_info),
+ sources: map.sources
+ };
+ xScopes.set(sourceId, xScope);
+ return xScope;
+}
- return true;
-};
+function isInRange(item, pc) {
+ if ("ranges" in item) {
+ return item.ranges.some(r => r[0] <= pc && pc < r[1]);
+ }
+ if ("high_pc" in item) {
+ return item.low_pc <= pc && pc < item.high_pc;
+ }
+ return false;
+}
-URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
- if (c !== 47 && c !== 92) {
- this.state = "authority";
- --this.pointer;
- } else {
- this.parseError = true;
+function filterScopes(items, pc, lastItem, index) {
+ if (!items) {
+ return [];
}
+ return items.reduce((result, item) => {
+ switch (item.tag) {
+ case "compile_unit":
+ if (isInRange(item, pc)) {
+ result = [...result, ...filterScopes(item.children, pc, lastItem, index)];
+ }
+ break;
+ case "namespace":
+ case "structure_type":
+ case "union_type":
+ result = [...result, ...filterScopes(item.children, pc, lastItem, index)];
+ break;
+ case "subprogram":
+ if (isInRange(item, pc)) {
+ const s = {
+ id: item.linkage_name,
+ name: item.name
+ };
+ result = [...result, s, ...filterScopes(item.children, pc, s, index)];
+ }
+ break;
+ case "inlined_subroutine":
+ if (isInRange(item, pc)) {
+ const linkedItem = getIndexedItem(index, item.abstract_origin);
+ const s = {
+ id: item.abstract_origin,
+ name: linkedItem ? linkedItem.name : void 0
+ };
+ if (lastItem) {
+ lastItem.file = item.call_file;
+ lastItem.line = item.call_line;
+ }
+ result = [...result, s, ...filterScopes(item.children, pc, s, index)];
+ }
+ break;
+ }
+ return result;
+ }, []);
+}
- return true;
-};
+class XScope {
-URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
- if (c === 64) {
- this.parseError = true;
- if (this.atFlag) {
- this.buffer = "%40" + this.buffer;
- }
- this.atFlag = true;
+ constructor(xScopeData) {
+ this.xScope = xScopeData;
+ }
- // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
- const len = countSymbols(this.buffer);
- for (let pointer = 0; pointer < len; ++pointer) {
- const codePoint = this.buffer.codePointAt(pointer);
+ search(generatedLocation) {
+ const { code_section_offset, debug_info, sources, idIndex } = this.xScope;
+ const pc = generatedLocation.line - (code_section_offset || 0);
+ const scopes = filterScopes(debug_info, pc, null, idIndex);
+ scopes.reverse();
- if (codePoint === 58 && !this.passwordTokenSeenFlag) {
- this.passwordTokenSeenFlag = true;
- continue;
- }
- const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
- if (this.passwordTokenSeenFlag) {
- this.url.password += encodedCodePoints;
- } else {
- this.url.username += encodedCodePoints;
+ return scopes.map(i => {
+ if (!("file" in i)) {
+ return {
+ displayName: i.name || ""
+ };
}
- }
- this.buffer = "";
- } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
- (isSpecial(this.url) && c === 92)) {
- if (this.atFlag && this.buffer === "") {
- this.parseError = true;
- return failure;
- }
- this.pointer -= countSymbols(this.buffer) + 1;
- this.buffer = "";
- this.state = "host";
- } else {
- this.buffer += cStr;
+ const sourceId = generatedToOriginalId(generatedLocation.sourceId, sources[i.file || 0]);
+ return {
+ displayName: i.name || "",
+ location: {
+ line: i.line || 0,
+ sourceId
+ }
+ };
+ });
}
+}
- return true;
+async function getWasmXScopes(sourceId) {
+ const xScopeData = await getXScopes(sourceId);
+ if (!xScopeData) {
+ return null;
+ }
+ return new XScope(xScopeData);
+}
+
+function clearWasmXScopes() {
+ xScopes.clear();
+}
+
+module.exports = {
+ getWasmXScopes,
+ clearWasmXScopes
};
-URLStateMachine.prototype["parse hostname"] =
-URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
- if (this.stateOverride && this.url.scheme === "file") {
- --this.pointer;
- this.state = "file host";
- } else if (c === 58 && !this.arrFlag) {
- if (this.buffer === "") {
- this.parseError = true;
- return failure;
- }
+/***/ }),
- const host = parseHost(this.buffer, isNotSpecial(this.url));
- if (host === failure) {
- return failure;
- }
+/***/ 3793:
+/***/ (function(module, exports, __webpack_require__) {
- this.url.host = host;
- this.buffer = "";
- this.state = "port";
- if (this.stateOverride === "hostname") {
- return false;
- }
- } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
- (isSpecial(this.url) && c === 92)) {
- --this.pointer;
- if (isSpecial(this.url) && this.buffer === "") {
- this.parseError = true;
- return failure;
- } else if (this.stateOverride && this.buffer === "" &&
- (includesCredentials(this.url) || this.url.port !== null)) {
- this.parseError = true;
- return false;
- }
+"use strict";
- const host = parseHost(this.buffer, isNotSpecial(this.url));
- if (host === failure) {
- return failure;
- }
- this.url.host = host;
- this.buffer = "";
- this.state = "path start";
- if (this.stateOverride) {
- return false;
- }
- } else {
- if (c === 91) {
- this.arrFlag = true;
- } else if (c === 93) {
- this.arrFlag = false;
- }
- this.buffer += cStr;
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
- return true;
-};
+const { SourceMapConsumer } = __webpack_require__(3705);
-URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
- if (infra.isASCIIDigit(c)) {
- this.buffer += cStr;
- } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
- (isSpecial(this.url) && c === 92) ||
- this.stateOverride) {
- if (this.buffer !== "") {
- const port = parseInt(this.buffer);
- if (port > Math.pow(2, 16) - 1) {
- this.parseError = true;
- return failure;
- }
- this.url.port = port === defaultPort(this.url.scheme) ? null : port;
- this.buffer = "";
- }
- if (this.stateOverride) {
- return false;
- }
- this.state = "path start";
- --this.pointer;
- } else {
- this.parseError = true;
- return failure;
- }
+async function createConsumer(map, sourceMapUrl) {
+ return new SourceMapConsumer(map, sourceMapUrl);
+}
- return true;
+module.exports = {
+ createConsumer
};
-const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
+/***/ }),
-function startsWithWindowsDriveLetter(input, pointer) {
- const length = input.length - pointer;
- return length >= 2 &&
- isWindowsDriveLetterCodePoints(input[pointer], input[pointer + 1]) &&
- (length === 2 || fileOtherwiseCodePoints.has(input[pointer + 2]));
-}
+/***/ 3794:
+/***/ (function(module, exports, __webpack_require__) {
-URLStateMachine.prototype["parse file"] = function parseFile(c) {
- this.url.scheme = "file";
+"use strict";
- if (c === 47 || c === 92) {
- if (c === 92) {
- this.parseError = true;
- }
- this.state = "file slash";
- } else if (this.base !== null && this.base.scheme === "file") {
- if (isNaN(c)) {
- this.url.host = this.base.host;
- this.url.path = this.base.path.slice();
- this.url.query = this.base.query;
- } else if (c === 63) {
- this.url.host = this.base.host;
- this.url.path = this.base.path.slice();
- this.url.query = "";
- this.state = "query";
- } else if (c === 35) {
- this.url.host = this.base.host;
- this.url.path = this.base.path.slice();
- this.url.query = this.base.query;
- this.url.fragment = "";
- this.state = "fragment";
- } else {
- if (!startsWithWindowsDriveLetter(this.input, this.pointer)) {
- this.url.host = this.base.host;
- this.url.path = this.base.path.slice();
- shortenPath(this.url);
- } else {
- this.parseError = true;
- }
- this.state = "path";
- --this.pointer;
- }
- } else {
- this.state = "path";
- --this.pointer;
- }
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at . */
+const { SourceMapConsumer } = __webpack_require__(3705);
- return true;
-};
+let root;
+function setAssetRootURL(assetRoot) {
+ // Remove any trailing slash so we don't generate a double-slash below.
+ root = assetRoot.replace(/\/$/, "");
-URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
- if (c === 47 || c === 92) {
- if (c === 92) {
- this.parseError = true;
- }
- this.state = "file host";
- } else {
- if (this.base !== null && this.base.scheme === "file" &&
- !startsWithWindowsDriveLetter(this.input, this.pointer)) {
- if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
- this.url.path.push(this.base.path[0]);
- } else {
- this.url.host = this.base.host;
- }
- }
- this.state = "path";
- --this.pointer;
+ SourceMapConsumer.initialize({
+ "lib/mappings.wasm": `${root}/source-map-mappings.wasm`
+ });
+}
+
+async function getDwarfToWasmData(name) {
+ if (!root) {
+ throw new Error(`No wasm path - Unable to resolve ${name}`);
}
- return true;
+ const response = await fetch(`${root}/dwarf_to_json.wasm`);
+
+ return response.arrayBuffer();
+}
+
+module.exports = {
+ setAssetRootURL,
+ getDwarfToWasmData
};
-URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
- if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
- --this.pointer;
- if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
- this.parseError = true;
- this.state = "path";
- } else if (this.buffer === "") {
- this.url.host = "";
- if (this.stateOverride) {
- return false;
- }
- this.state = "path start";
- } else {
- let host = parseHost(this.buffer, isNotSpecial(this.url));
- if (host === failure) {
- return failure;
- }
- if (host === "localhost") {
- host = "";
- }
- this.url.host = host;
+/***/ }),
- if (this.stateOverride) {
- return false;
- }
+/***/ 3795:
+/***/ (function(module, exports, __webpack_require__) {
- this.buffer = "";
- this.state = "path start";
- }
- } else {
- this.buffer += cStr;
- }
+const readWasm = __webpack_require__(3813);
- return true;
-};
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+ this.generatedLine = 0;
+ this.generatedColumn = 0;
+ this.lastGeneratedColumn = null;
+ this.source = null;
+ this.originalLine = null;
+ this.originalColumn = null;
+ this.name = null;
+}
-URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
- if (isSpecial(this.url)) {
- if (c === 92) {
- this.parseError = true;
- }
- this.state = "path";
+let cachedWasm = null;
- if (c !== 47 && c !== 92) {
- --this.pointer;
- }
- } else if (!this.stateOverride && c === 63) {
- this.url.query = "";
- this.state = "query";
- } else if (!this.stateOverride && c === 35) {
- this.url.fragment = "";
- this.state = "fragment";
- } else if (c !== undefined) {
- this.state = "path";
- if (c !== 47) {
- --this.pointer;
- }
+module.exports = function wasm() {
+ if (cachedWasm) {
+ return cachedWasm;
}
- return true;
-};
-
-URLStateMachine.prototype["parse path"] = function parsePath(c) {
- if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
- (!this.stateOverride && (c === 63 || c === 35))) {
- if (isSpecial(this.url) && c === 92) {
- this.parseError = true;
- }
+ const callbackStack = [];
- if (isDoubleDot(this.buffer)) {
- shortenPath(this.url);
- if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
- this.url.path.push("");
- }
- } else if (isSingleDot(this.buffer) && c !== 47 &&
- !(isSpecial(this.url) && c === 92)) {
- this.url.path.push("");
- } else if (!isSingleDot(this.buffer)) {
- if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
- if (this.url.host !== "" && this.url.host !== null) {
- this.parseError = true;
- this.url.host = "";
- }
- this.buffer = this.buffer[0] + ":";
- }
- this.url.path.push(this.buffer);
- }
- this.buffer = "";
- if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
- while (this.url.path.length > 1 && this.url.path[0] === "") {
- this.parseError = true;
- this.url.path.shift();
- }
- }
- if (c === 63) {
- this.url.query = "";
- this.state = "query";
- }
- if (c === 35) {
- this.url.fragment = "";
- this.state = "fragment";
- }
- } else {
- // TODO: If c is not a URL code point and not "%", parse error.
+ cachedWasm = readWasm().then(buffer => {
+ return WebAssembly.instantiate(buffer, {
+ env: {
+ mapping_callback(
+ generatedLine,
+ generatedColumn,
- if (c === 37 &&
- (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
- !infra.isASCIIHex(this.input[this.pointer + 2]))) {
- this.parseError = true;
- }
+ hasLastGeneratedColumn,
+ lastGeneratedColumn,
- this.buffer += percentEncodeChar(c, isPathPercentEncode);
- }
+ hasOriginal,
+ source,
+ originalLine,
+ originalColumn,
- return true;
-};
+ hasName,
+ name
+ ) {
+ const mapping = new Mapping();
+ // JS uses 1-based line numbers, wasm uses 0-based.
+ mapping.generatedLine = generatedLine + 1;
+ mapping.generatedColumn = generatedColumn;
-URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
- if (c === 63) {
- this.url.query = "";
- this.state = "query";
- } else if (c === 35) {
- this.url.fragment = "";
- this.state = "fragment";
- } else {
- // TODO: Add: not a URL code point
- if (!isNaN(c) && c !== 37) {
- this.parseError = true;
- }
+ if (hasLastGeneratedColumn) {
+ // JS uses inclusive last generated column, wasm uses exclusive.
+ mapping.lastGeneratedColumn = lastGeneratedColumn - 1;
+ }
- if (c === 37 &&
- (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
- !infra.isASCIIHex(this.input[this.pointer + 2]))) {
- this.parseError = true;
- }
+ if (hasOriginal) {
+ mapping.source = source;
+ // JS uses 1-based line numbers, wasm uses 0-based.
+ mapping.originalLine = originalLine + 1;
+ mapping.originalColumn = originalColumn;
- if (!isNaN(c)) {
- this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
- }
- }
+ if (hasName) {
+ mapping.name = name;
+ }
+ }
- return true;
-};
+ callbackStack[callbackStack.length - 1](mapping);
+ },
-URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
- if (isNaN(c) || (!this.stateOverride && c === 35)) {
- if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
- this.encodingOverride = "utf-8";
- }
+ start_all_generated_locations_for() { console.time("all_generated_locations_for"); },
+ end_all_generated_locations_for() { console.timeEnd("all_generated_locations_for"); },
- const buffer = Buffer.from(this.buffer); // TODO: Use encoding override instead
- for (let i = 0; i < buffer.length; ++i) {
- if (buffer[i] < 0x21 ||
- buffer[i] > 0x7E ||
- buffer[i] === 0x22 || buffer[i] === 0x23 || buffer[i] === 0x3C || buffer[i] === 0x3E ||
- (buffer[i] === 0x27 && isSpecial(this.url))) {
- this.url.query += percentEncode(buffer[i]);
- } else {
- this.url.query += String.fromCodePoint(buffer[i]);
- }
- }
+ start_compute_column_spans() { console.time("compute_column_spans"); },
+ end_compute_column_spans() { console.timeEnd("compute_column_spans"); },
- this.buffer = "";
- if (c === 35) {
- this.url.fragment = "";
- this.state = "fragment";
- }
- } else {
- // TODO: If c is not a URL code point and not "%", parse error.
- if (c === 37 &&
- (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
- !infra.isASCIIHex(this.input[this.pointer + 2]))) {
- this.parseError = true;
- }
+ start_generated_location_for() { console.time("generated_location_for"); },
+ end_generated_location_for() { console.timeEnd("generated_location_for"); },
- this.buffer += cStr;
- }
+ start_original_location_for() { console.time("original_location_for"); },
+ end_original_location_for() { console.timeEnd("original_location_for"); },
- return true;
-};
+ start_parse_mappings() { console.time("parse_mappings"); },
+ end_parse_mappings() { console.timeEnd("parse_mappings"); },
-URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
- if (isNaN(c)) { // do nothing
- } else if (c === 0x0) {
- this.parseError = true;
- } else {
- // TODO: If c is not a URL code point and not "%", parse error.
- if (c === 37 &&
- (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
- !infra.isASCIIHex(this.input[this.pointer + 2]))) {
- this.parseError = true;
- }
+ start_sort_by_generated_location() { console.time("sort_by_generated_location"); },
+ end_sort_by_generated_location() { console.timeEnd("sort_by_generated_location"); },
- this.url.fragment += percentEncodeChar(c, isFragmentPercentEncode);
- }
+ start_sort_by_original_location() { console.time("sort_by_original_location"); },
+ end_sort_by_original_location() { console.timeEnd("sort_by_original_location"); },
+ }
+ });
+ }).then(Wasm => {
+ return {
+ exports: Wasm.instance.exports,
+ withMappingCallback: (mappingCallback, f) => {
+ callbackStack.push(mappingCallback);
+ try {
+ f();
+ } finally {
+ callbackStack.pop();
+ }
+ }
+ };
+ }).then(null, e => {
+ cachedWasm = null;
+ throw e;
+ });
- return true;
+ return cachedWasm;
};
-function serializeURL(url, excludeFragment) {
- let output = url.scheme + ":";
- if (url.host !== null) {
- output += "//";
- if (url.username !== "" || url.password !== "") {
- output += url.username;
- if (url.password !== "") {
- output += ":" + url.password;
- }
- output += "@";
- }
+/***/ }),
- output += serializeHost(url.host);
+/***/ 3807:
+/***/ (function(module, exports, __webpack_require__) {
- if (url.port !== null) {
- output += ":" + url.port;
- }
- } else if (url.host === null && url.scheme === "file") {
- output += "//";
- }
+"use strict";
+/* WEBPACK VAR INJECTION */(function(Buffer) {
+const punycode = __webpack_require__(3641);
+const tr46 = __webpack_require__(3819);
- if (url.cannotBeABaseURL) {
- output += url.path[0];
- } else {
- for (const string of url.path) {
- output += "/" + string;
- }
- }
+const infra = __webpack_require__(3811);
+const { percentEncode, percentDecode } = __webpack_require__(3808);
- if (url.query !== null) {
- output += "?" + url.query;
- }
+const specialSchemes = {
+ ftp: 21,
+ file: null,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443
+};
- if (!excludeFragment && url.fragment !== null) {
- output += "#" + url.fragment;
- }
+const failure = Symbol("failure");
- return output;
+function countSymbols(str) {
+ return punycode.ucs2.decode(str).length;
}
-function serializeOrigin(tuple) {
- let result = tuple.scheme + "://";
- result += serializeHost(tuple.host);
+function at(input, idx) {
+ const c = input[idx];
+ return isNaN(c) ? undefined : String.fromCodePoint(c);
+}
- if (tuple.port !== null) {
- result += ":" + tuple.port;
- }
+function isSingleDot(buffer) {
+ return buffer === "." || buffer.toLowerCase() === "%2e";
+}
- return result;
+function isDoubleDot(buffer) {
+ buffer = buffer.toLowerCase();
+ return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
}
-module.exports.serializeURL = serializeURL;
+function isWindowsDriveLetterCodePoints(cp1, cp2) {
+ return infra.isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
+}
-module.exports.serializeURLOrigin = function (url) {
- // https://url.spec.whatwg.org/#concept-url-origin
- switch (url.scheme) {
- case "blob":
- try {
- return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
- } catch (e) {
- // serializing an opaque origin returns "null"
- return "null";
- }
- case "ftp":
- case "gopher":
- case "http":
- case "https":
- case "ws":
- case "wss":
- return serializeOrigin({
- scheme: url.scheme,
- host: url.host,
- port: url.port
- });
- case "file":
- // The spec says:
- // > Unfortunate as it is, this is left as an exercise to the reader. When in doubt, return a new opaque origin.
- // Browsers tested so far:
- // - Chrome says "file://", but treats file: URLs as cross-origin for most (all?) purposes; see e.g.
- // https://bugs.chromium.org/p/chromium/issues/detail?id=37586
- // - Firefox says "null", but treats file: URLs as same-origin sometimes based on directory stuff; see
- // https://developer.mozilla.org/en-US/docs/Archive/Misc_top_level/Same-origin_policy_for_file:_URIs
- return "null";
- default:
- // serializing an opaque origin returns "null"
- return "null";
- }
-};
+function isWindowsDriveLetterString(string) {
+ return string.length === 2 && infra.isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
+}
-module.exports.basicURLParse = function (input, options) {
- if (options === undefined) {
- options = {};
- }
+function isNormalizedWindowsDriveLetterString(string) {
+ return string.length === 2 && infra.isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
+}
- const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
- if (usm.failure) {
- return null;
- }
+function containsForbiddenHostCodePoint(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
+}
- return usm.url;
-};
+function containsForbiddenHostCodePointExcludingPercent(string) {
+ return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
+}
-module.exports.setTheUsername = function (url, username) {
- url.username = "";
- const decoded = punycode.ucs2.decode(username);
- for (let i = 0; i < decoded.length; ++i) {
- url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
- }
-};
+function isSpecialScheme(scheme) {
+ return specialSchemes[scheme] !== undefined;
+}
-module.exports.setThePassword = function (url, password) {
- url.password = "";
- const decoded = punycode.ucs2.decode(password);
- for (let i = 0; i < decoded.length; ++i) {
- url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
- }
-};
+function isSpecial(url) {
+ return isSpecialScheme(url.scheme);
+}
-module.exports.serializeHost = serializeHost;
+function isNotSpecial(url) {
+ return !isSpecialScheme(url.scheme);
+}
-module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
+function defaultPort(scheme) {
+ return specialSchemes[scheme];
+}
-module.exports.serializeInteger = function (integer) {
- return String(integer);
-};
+function utf8PercentEncode(c) {
+ const buf = Buffer.from(c);
-module.exports.parseURL = function (input, options) {
- if (options === undefined) {
- options = {};
+ let str = "";
+
+ for (let i = 0; i < buf.length; ++i) {
+ str += percentEncode(buf[i]);
}
- // We don't handle blobs, so this just delegates:
- return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
-};
+ return str;
+}
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(794).Buffer))
+function isC0ControlPercentEncode(c) {
+ return c <= 0x1F || c > 0x7E;
+}
-/***/ }),
+const extraUserinfoPercentEncodeSet =
+ new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
+function isUserinfoPercentEncode(c) {
+ return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
+}
-/***/ 3808:
-/***/ (function(module, exports, __webpack_require__) {
+const extraFragmentPercentEncodeSet = new Set([32, 34, 60, 62, 96]);
+function isFragmentPercentEncode(c) {
+ return isC0ControlPercentEncode(c) || extraFragmentPercentEncodeSet.has(c);
+}
-"use strict";
-/* WEBPACK VAR INJECTION */(function(Buffer) {
-const { isASCIIHex } = __webpack_require__(3811);
+const extraPathPercentEncodeSet = new Set([35, 63, 123, 125]);
+function isPathPercentEncode(c) {
+ return isFragmentPercentEncode(c) || extraPathPercentEncodeSet.has(c);
+}
-function strictlySplitByteSequence(buf, cp) {
- const list = [];
- let last = 0;
- let i = buf.indexOf(cp);
- while (i >= 0) {
- list.push(buf.slice(last, i));
- last = i + 1;
- i = buf.indexOf(cp, last);
- }
- if (last !== buf.length) {
- list.push(buf.slice(last));
+function percentEncodeChar(c, encodeSetPredicate) {
+ const cStr = String.fromCodePoint(c);
+
+ if (encodeSetPredicate(c)) {
+ return utf8PercentEncode(cStr);
}
- return list;
+
+ return cStr;
}
-function replaceByteInByteSequence(buf, from, to) {
- let i = buf.indexOf(from);
- while (i >= 0) {
- buf[i] = to;
- i = buf.indexOf(from, i + 1);
+function parseIPv4Number(input) {
+ let R = 10;
+
+ if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
+ input = input.substring(2);
+ R = 16;
+ } else if (input.length >= 2 && input.charAt(0) === "0") {
+ input = input.substring(1);
+ R = 8;
}
- return buf;
-}
-function percentEncode(c) {
- let hex = c.toString(16).toUpperCase();
- if (hex.length === 1) {
- hex = "0" + hex;
+ if (input === "") {
+ return 0;
}
- return "%" + hex;
-}
+ let regex = /[^0-7]/;
+ if (R === 10) {
+ regex = /[^0-9]/;
+ }
+ if (R === 16) {
+ regex = /[^0-9A-Fa-f]/;
+ }
-function percentDecode(input) {
- const output = Buffer.alloc(input.byteLength);
- let ptr = 0;
- for (let i = 0; i < input.length; ++i) {
- if (input[i] !== 37 || !isASCIIHex(input[i + 1]) || !isASCIIHex(input[i + 2])) {
- output[ptr++] = input[i];
- } else {
- output[ptr++] = parseInt(input.slice(i + 1, i + 3).toString(), 16);
- i += 2;
- }
+ if (regex.test(input)) {
+ return failure;
}
- return output.slice(0, ptr);
+
+ return parseInt(input, R);
}
-function parseUrlencoded(input) {
- const sequences = strictlySplitByteSequence(input, 38);
- const output = [];
- for (const bytes of sequences) {
- if (bytes.length === 0) {
- continue;
+function parseIPv4(input) {
+ const parts = input.split(".");
+ if (parts[parts.length - 1] === "") {
+ if (parts.length > 1) {
+ parts.pop();
}
+ }
- let name;
- let value;
- const indexOfEqual = bytes.indexOf(61);
+ if (parts.length > 4) {
+ return input;
+ }
- if (indexOfEqual >= 0) {
- name = bytes.slice(0, indexOfEqual);
- value = bytes.slice(indexOfEqual + 1);
- } else {
- name = bytes;
- value = Buffer.alloc(0);
+ const numbers = [];
+ for (const part of parts) {
+ if (part === "") {
+ return input;
+ }
+ const n = parseIPv4Number(part);
+ if (n === failure) {
+ return input;
}
- name = replaceByteInByteSequence(Buffer.from(name), 43, 32);
- value = replaceByteInByteSequence(Buffer.from(value), 43, 32);
-
- output.push([percentDecode(name).toString(), percentDecode(value).toString()]);
+ numbers.push(n);
}
- return output;
-}
-function serializeUrlencodedByte(input) {
- let output = "";
- for (const byte of input) {
- if (byte === 32) {
- output += "+";
- } else if (byte === 42 ||
- byte === 45 ||
- byte === 46 ||
- (byte >= 48 && byte <= 57) ||
- (byte >= 65 && byte <= 90) ||
- byte === 95 ||
- (byte >= 97 && byte <= 122)) {
- output += String.fromCodePoint(byte);
- } else {
- output += percentEncode(byte);
+ for (let i = 0; i < numbers.length - 1; ++i) {
+ if (numbers[i] > 255) {
+ return failure;
}
}
- return output;
-}
+ if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
+ return failure;
+ }
-function serializeUrlencoded(tuples, encodingOverride = undefined) {
- let encoding = "utf-8";
- if (encodingOverride !== undefined) {
- encoding = encodingOverride;
+ let ipv4 = numbers.pop();
+ let counter = 0;
+
+ for (const n of numbers) {
+ ipv4 += n * Math.pow(256, 3 - counter);
+ ++counter;
}
+ return ipv4;
+}
+
+function serializeIPv4(address) {
let output = "";
- for (const [i, tuple] of tuples.entries()) {
- // TODO: handle encoding override
- const name = serializeUrlencodedByte(Buffer.from(tuple[0]));
- let value = tuple[1];
- if (tuple.length > 2 && tuple[2] !== undefined) {
- if (tuple[2] === "hidden" && name === "_charset_") {
- value = encoding;
- } else if (tuple[2] === "file") {
- // value is a File object
- value = value.name;
- }
- }
- value = serializeUrlencodedByte(Buffer.from(value));
- if (i !== 0) {
- output += "&";
+ let n = address;
+
+ for (let i = 1; i <= 4; ++i) {
+ output = String(n % 256) + output;
+ if (i !== 4) {
+ output = "." + output;
}
- output += `${name}=${value}`;
+ n = Math.floor(n / 256);
}
+
return output;
}
-module.exports = {
- percentEncode,
- percentDecode,
-
- // application/x-www-form-urlencoded string parser
- parseUrlencoded(input) {
- return parseUrlencoded(Buffer.from(input));
- },
-
- // application/x-www-form-urlencoded serializer
- serializeUrlencoded
-};
-
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(794).Buffer))
-
-/***/ }),
-
-/***/ 3809:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-function _(message, opts) {
- return `${opts && opts.context ? opts.context : "Value"} ${message}.`;
-}
+function parseIPv6(input) {
+ const address = [0, 0, 0, 0, 0, 0, 0, 0];
+ let pieceIndex = 0;
+ let compress = null;
+ let pointer = 0;
-function type(V) {
- if (V === null) {
- return "Null";
- }
- switch (typeof V) {
- case "undefined":
- return "Undefined";
- case "boolean":
- return "Boolean";
- case "number":
- return "Number";
- case "string":
- return "String";
- case "symbol":
- return "Symbol";
- case "object":
- // Falls through
- case "function":
- // Falls through
- default:
- // Per ES spec, typeof returns an implemention-defined value that is not any of the existing ones for
- // uncallable non-standard exotic objects. Yet Type() which the Web IDL spec depends on returns Object for
- // such cases. So treat the default case as an object.
- return "Object";
- }
-}
+ input = punycode.ucs2.decode(input);
-// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
-function evenRound(x) {
- // There are four cases for numbers with fractional part being .5:
- //
- // case | x | floor(x) | round(x) | expected | x <> 0 | x % 1 | x & 1 | example
- // 1 | 2n + 0.5 | 2n | 2n + 1 | 2n | > | 0.5 | 0 | 0.5 -> 0
- // 2 | 2n + 1.5 | 2n + 1 | 2n + 2 | 2n + 2 | > | 0.5 | 1 | 1.5 -> 2
- // 3 | -2n - 0.5 | -2n - 1 | -2n | -2n | < | -0.5 | 0 | -0.5 -> 0
- // 4 | -2n - 1.5 | -2n - 2 | -2n - 1 | -2n - 2 | < | -0.5 | 1 | -1.5 -> -2
- // (where n is a non-negative integer)
- //
- // Branch here for cases 1 and 4
- if ((x > 0 && (x % 1) === +0.5 && (x & 1) === 0) ||
- (x < 0 && (x % 1) === -0.5 && (x & 1) === 1)) {
- return censorNegativeZero(Math.floor(x));
+ if (input[pointer] === 58) {
+ if (input[pointer + 1] !== 58) {
+ return failure;
}
- return censorNegativeZero(Math.round(x));
-}
-
-function integerPart(n) {
- return censorNegativeZero(Math.trunc(n));
-}
-
-function sign(x) {
- return x < 0 ? -1 : 1;
-}
+ pointer += 2;
+ ++pieceIndex;
+ compress = pieceIndex;
+ }
-function modulo(x, y) {
- // https://tc39.github.io/ecma262/#eqn-modulo
- // Note that http://stackoverflow.com/a/4467559/3191 does NOT work for large modulos
- const signMightNotMatch = x % y;
- if (sign(y) !== sign(signMightNotMatch)) {
- return signMightNotMatch + y;
+ while (pointer < input.length) {
+ if (pieceIndex === 8) {
+ return failure;
}
- return signMightNotMatch;
-}
-function censorNegativeZero(x) {
- return x === 0 ? 0 : x;
-}
+ if (input[pointer] === 58) {
+ if (compress !== null) {
+ return failure;
+ }
+ ++pointer;
+ ++pieceIndex;
+ compress = pieceIndex;
+ continue;
+ }
-function createIntegerConversion(bitLength, typeOpts) {
- const isSigned = !typeOpts.unsigned;
+ let value = 0;
+ let length = 0;
- let lowerBound;
- let upperBound;
- if (bitLength === 64) {
- upperBound = Math.pow(2, 53) - 1;
- lowerBound = !isSigned ? 0 : -Math.pow(2, 53) + 1;
- } else if (!isSigned) {
- lowerBound = 0;
- upperBound = Math.pow(2, bitLength) - 1;
- } else {
- lowerBound = -Math.pow(2, bitLength - 1);
- upperBound = Math.pow(2, bitLength - 1) - 1;
+ while (length < 4 && infra.isASCIIHex(input[pointer])) {
+ value = value * 0x10 + parseInt(at(input, pointer), 16);
+ ++pointer;
+ ++length;
}
- const twoToTheBitLength = Math.pow(2, bitLength);
- const twoToOneLessThanTheBitLength = Math.pow(2, bitLength - 1);
-
- return (V, opts) => {
- if (opts === undefined) {
- opts = {};
- }
+ if (input[pointer] === 46) {
+ if (length === 0) {
+ return failure;
+ }
- let x = +V;
- x = censorNegativeZero(x); // Spec discussion ongoing: https://github.com/heycam/webidl/issues/306
+ pointer -= length;
- if (opts.enforceRange) {
- if (!Number.isFinite(x)) {
- throw new TypeError(_("is not a finite number", opts));
- }
+ if (pieceIndex > 6) {
+ return failure;
+ }
- x = integerPart(x);
+ let numbersSeen = 0;
- if (x < lowerBound || x > upperBound) {
- throw new TypeError(_(
- `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`, opts));
- }
+ while (input[pointer] !== undefined) {
+ let ipv4Piece = null;
- return x;
+ if (numbersSeen > 0) {
+ if (input[pointer] === 46 && numbersSeen < 4) {
+ ++pointer;
+ } else {
+ return failure;
+ }
}
- if (!Number.isNaN(x) && opts.clamp) {
- x = Math.min(Math.max(x, lowerBound), upperBound);
- x = evenRound(x);
- return x;
+ if (!infra.isASCIIDigit(input[pointer])) {
+ return failure;
}
- if (!Number.isFinite(x) || x === 0) {
- return 0;
+ while (infra.isASCIIDigit(input[pointer])) {
+ const number = parseInt(at(input, pointer));
+ if (ipv4Piece === null) {
+ ipv4Piece = number;
+ } else if (ipv4Piece === 0) {
+ return failure;
+ } else {
+ ipv4Piece = ipv4Piece * 10 + number;
+ }
+ if (ipv4Piece > 255) {
+ return failure;
+ }
+ ++pointer;
}
- x = integerPart(x);
- // Math.pow(2, 64) is not accurately representable in JavaScript, so try to avoid these per-spec operations if
- // possible. Hopefully it's an optimization for the non-64-bitLength cases too.
- if (x >= lowerBound && x <= upperBound) {
- return x;
- }
+ address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
- // These will not work great for bitLength of 64, but oh well. See the README for more details.
- x = modulo(x, twoToTheBitLength);
- if (isSigned && x >= twoToOneLessThanTheBitLength) {
- return x - twoToTheBitLength;
+ ++numbersSeen;
+
+ if (numbersSeen === 2 || numbersSeen === 4) {
+ ++pieceIndex;
}
- return x;
- };
-}
+ }
-exports.any = V => {
- return V;
-};
+ if (numbersSeen !== 4) {
+ return failure;
+ }
-exports.void = function () {
- return undefined;
-};
+ break;
+ } else if (input[pointer] === 58) {
+ ++pointer;
+ if (input[pointer] === undefined) {
+ return failure;
+ }
+ } else if (input[pointer] !== undefined) {
+ return failure;
+ }
-exports.boolean = function (val) {
- return !!val;
-};
-
-exports.byte = createIntegerConversion(8, { unsigned: false });
-exports.octet = createIntegerConversion(8, { unsigned: true });
-
-exports.short = createIntegerConversion(16, { unsigned: false });
-exports["unsigned short"] = createIntegerConversion(16, { unsigned: true });
-
-exports.long = createIntegerConversion(32, { unsigned: false });
-exports["unsigned long"] = createIntegerConversion(32, { unsigned: true });
-
-exports["long long"] = createIntegerConversion(64, { unsigned: false });
-exports["unsigned long long"] = createIntegerConversion(64, { unsigned: true });
-
-exports.double = (V, opts) => {
- const x = +V;
+ address[pieceIndex] = value;
+ ++pieceIndex;
+ }
- if (!Number.isFinite(x)) {
- throw new TypeError(_("is not a finite floating-point value", opts));
+ if (compress !== null) {
+ let swaps = pieceIndex - compress;
+ pieceIndex = 7;
+ while (pieceIndex !== 0 && swaps > 0) {
+ const temp = address[compress + swaps - 1];
+ address[compress + swaps - 1] = address[pieceIndex];
+ address[pieceIndex] = temp;
+ --pieceIndex;
+ --swaps;
}
+ } else if (compress === null && pieceIndex !== 8) {
+ return failure;
+ }
- return x;
-};
-
-exports["unrestricted double"] = V => {
- const x = +V;
-
- return x;
-};
+ return address;
+}
-exports.float = (V, opts) => {
- const x = +V;
+function serializeIPv6(address) {
+ let output = "";
+ const seqResult = findLongestZeroSequence(address);
+ const compress = seqResult.idx;
+ let ignore0 = false;
- if (!Number.isFinite(x)) {
- throw new TypeError(_("is not a finite floating-point value", opts));
+ for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
+ if (ignore0 && address[pieceIndex] === 0) {
+ continue;
+ } else if (ignore0) {
+ ignore0 = false;
}
- if (Object.is(x, -0)) {
- return x;
+ if (compress === pieceIndex) {
+ const separator = pieceIndex === 0 ? "::" : ":";
+ output += separator;
+ ignore0 = true;
+ continue;
}
- const y = Math.fround(x);
+ output += address[pieceIndex].toString(16);
- if (!Number.isFinite(y)) {
- throw new TypeError(_("is outside the range of a single-precision floating-point value", opts));
+ if (pieceIndex !== 7) {
+ output += ":";
}
+ }
- return y;
-};
-
-exports["unrestricted float"] = V => {
- const x = +V;
+ return output;
+}
- if (isNaN(x)) {
- return x;
+function parseHost(input, isNotSpecialArg = false) {
+ if (input[0] === "[") {
+ if (input[input.length - 1] !== "]") {
+ return failure;
}
- if (Object.is(x, -0)) {
- return x;
- }
+ return parseIPv6(input.substring(1, input.length - 1));
+ }
- return Math.fround(x);
-};
+ if (isNotSpecialArg) {
+ return parseOpaqueHost(input);
+ }
-exports.DOMString = function (V, opts) {
- if (opts === undefined) {
- opts = {};
- }
+ const domain = percentDecode(Buffer.from(input)).toString();
+ const asciiDomain = domainToASCII(domain);
+ if (asciiDomain === failure) {
+ return failure;
+ }
- if (opts.treatNullAsEmptyString && V === null) {
- return "";
- }
+ if (containsForbiddenHostCodePoint(asciiDomain)) {
+ return failure;
+ }
- if (typeof V === "symbol") {
- throw new TypeError(_("is a symbol, which cannot be converted to a string", opts));
- }
+ const ipv4Host = parseIPv4(asciiDomain);
+ if (typeof ipv4Host === "number" || ipv4Host === failure) {
+ return ipv4Host;
+ }
- return String(V);
-};
+ return asciiDomain;
+}
-exports.ByteString = (V, opts) => {
- const x = exports.DOMString(V, opts);
- let c;
- for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
- if (c > 255) {
- throw new TypeError(_("is not a valid ByteString", opts));
- }
- }
+function parseOpaqueHost(input) {
+ if (containsForbiddenHostCodePointExcludingPercent(input)) {
+ return failure;
+ }
- return x;
-};
+ let output = "";
+ const decoded = punycode.ucs2.decode(input);
+ for (let i = 0; i < decoded.length; ++i) {
+ output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
+ }
+ return output;
+}
-exports.USVString = (V, opts) => {
- const S = exports.DOMString(V, opts);
- const n = S.length;
- const U = [];
- for (let i = 0; i < n; ++i) {
- const c = S.charCodeAt(i);
- if (c < 0xD800 || c > 0xDFFF) {
- U.push(String.fromCodePoint(c));
- } else if (0xDC00 <= c && c <= 0xDFFF) {
- U.push(String.fromCodePoint(0xFFFD));
- } else if (i === n - 1) {
- U.push(String.fromCodePoint(0xFFFD));
- } else {
- const d = S.charCodeAt(i + 1);
- if (0xDC00 <= d && d <= 0xDFFF) {
- const a = c & 0x3FF;
- const b = d & 0x3FF;
- U.push(String.fromCodePoint((2 << 15) + ((2 << 9) * a) + b));
- ++i;
- } else {
- U.push(String.fromCodePoint(0xFFFD));
- }
- }
- }
+function findLongestZeroSequence(arr) {
+ let maxIdx = null;
+ let maxLen = 1; // only find elements > 1
+ let currStart = null;
+ let currLen = 0;
- return U.join("");
-};
+ for (let i = 0; i < arr.length; ++i) {
+ if (arr[i] !== 0) {
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
-exports.object = (V, opts) => {
- if (type(V) !== "Object") {
- throw new TypeError(_("is not an object", opts));
+ currStart = null;
+ currLen = 0;
+ } else {
+ if (currStart === null) {
+ currStart = i;
+ }
+ ++currLen;
}
+ }
- return V;
-};
-
-// Not exported, but used in Function and VoidFunction.
+ // if trailing zeros
+ if (currLen > maxLen) {
+ maxIdx = currStart;
+ maxLen = currLen;
+ }
-// Neither Function nor VoidFunction is defined with [TreatNonObjectAsNull], so
-// handling for that is omitted.
-function convertCallbackFunction(V, opts) {
- if (typeof V !== "function") {
- throw new TypeError(_("is not a function", opts));
- }
- return V;
+ return {
+ idx: maxIdx,
+ len: maxLen
+ };
}
-[
- Error,
- ArrayBuffer, // The IsDetachedBuffer abstract operation is not exposed in JS
- DataView, Int8Array, Int16Array, Int32Array, Uint8Array,
- Uint16Array, Uint32Array, Uint8ClampedArray, Float32Array, Float64Array
-].forEach(func => {
- const name = func.name;
- const article = /^[AEIOU]/.test(name) ? "an" : "a";
- exports[name] = (V, opts) => {
- if (!(V instanceof func)) {
- throw new TypeError(_(`is not ${article} ${name} object`, opts));
- }
-
- return V;
- };
-});
+function serializeHost(host) {
+ if (typeof host === "number") {
+ return serializeIPv4(host);
+ }
-// Common definitions
+ // IPv6 serializer
+ if (host instanceof Array) {
+ return "[" + serializeIPv6(host) + "]";
+ }
-exports.ArrayBufferView = (V, opts) => {
- if (!ArrayBuffer.isView(V)) {
- throw new TypeError(_("is not a view on an ArrayBuffer object", opts));
- }
+ return host;
+}
- return V;
-};
+function domainToASCII(domain, beStrict = false) {
+ const result = tr46.toASCII(domain, {
+ checkBidi: true,
+ checkHyphens: false,
+ checkJoiners: true,
+ useSTD3ASCIIRules: beStrict,
+ verifyDNSLength: beStrict
+ });
+ if (result === null) {
+ return failure;
+ }
+ return result;
+}
-exports.BufferSource = (V, opts) => {
- if (!(ArrayBuffer.isView(V) || V instanceof ArrayBuffer)) {
- throw new TypeError(_("is not an ArrayBuffer object or a view on one", opts));
- }
-
- return V;
-};
-
-exports.DOMTimeStamp = exports["unsigned long long"];
-
-exports.Function = convertCallbackFunction;
-
-exports.VoidFunction = convertCallbackFunction;
-
-
-/***/ }),
-
-/***/ 3810:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-// Returns "Type(value) is Object" in ES terminology.
-function isObject(value) {
- return typeof value === "object" && value !== null || typeof value === "function";
+function trimControlChars(url) {
+ return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
}
-function hasOwn(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
+function trimTabAndNewline(url) {
+ return url.replace(/\u0009|\u000A|\u000D/g, "");
}
-const getOwnPropertyDescriptors = typeof Object.getOwnPropertyDescriptors === "function" ?
- Object.getOwnPropertyDescriptors :
- // Polyfill exists until we require Node.js v8.x
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
- obj => {
- if (obj === undefined || obj === null) {
- throw new TypeError("Cannot convert undefined or null to object");
- }
- obj = Object(obj);
- const ownKeys = Reflect.ownKeys(obj);
- const descriptors = {};
- for (const key of ownKeys) {
- const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
- if (descriptor !== undefined) {
- Reflect.defineProperty(descriptors, key, {
- value: descriptor,
- writable: true,
- enumerable: true,
- configurable: true
- });
- }
- }
- return descriptors;
- };
-
-const wrapperSymbol = Symbol("wrapper");
-const implSymbol = Symbol("impl");
-const sameObjectCaches = Symbol("SameObject caches");
-
-function getSameObject(wrapper, prop, creator) {
- if (!wrapper[sameObjectCaches]) {
- wrapper[sameObjectCaches] = Object.create(null);
+function shortenPath(url) {
+ const { path } = url;
+ if (path.length === 0) {
+ return;
}
-
- if (prop in wrapper[sameObjectCaches]) {
- return wrapper[sameObjectCaches][prop];
+ if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
+ return;
}
- wrapper[sameObjectCaches][prop] = creator();
- return wrapper[sameObjectCaches][prop];
-}
-
-function wrapperForImpl(impl) {
- return impl ? impl[wrapperSymbol] : null;
-}
-
-function implForWrapper(wrapper) {
- return wrapper ? wrapper[implSymbol] : null;
+ path.pop();
}
-function tryWrapperForImpl(impl) {
- const wrapper = wrapperForImpl(impl);
- return wrapper ? wrapper : impl;
+function includesCredentials(url) {
+ return url.username !== "" || url.password !== "";
}
-function tryImplForWrapper(wrapper) {
- const impl = implForWrapper(wrapper);
- return impl ? impl : wrapper;
+function cannotHaveAUsernamePasswordPort(url) {
+ return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
}
-const iterInternalSymbol = Symbol("internal");
-const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
-
-function isArrayIndexPropName(P) {
- if (typeof P !== "string") {
- return false;
- }
- const i = P >>> 0;
- if (i === Math.pow(2, 32) - 1) {
- return false;
- }
- const s = `${i}`;
- if (P !== s) {
- return false;
- }
- return true;
+function isNormalizedWindowsDriveLetter(string) {
+ return /^[A-Za-z]:$/.test(string);
}
-const supportsPropertyIndex = Symbol("supports property index");
-const supportedPropertyIndices = Symbol("supported property indices");
-const supportsPropertyName = Symbol("supports property name");
-const supportedPropertyNames = Symbol("supported property names");
-const indexedGet = Symbol("indexed property get");
-const indexedSetNew = Symbol("indexed property set new");
-const indexedSetExisting = Symbol("indexed property set existing");
-const namedGet = Symbol("named property get");
-const namedSetNew = Symbol("named property set new");
-const namedSetExisting = Symbol("named property set existing");
-const namedDelete = Symbol("named property delete");
+function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
+ this.pointer = 0;
+ this.input = input;
+ this.base = base || null;
+ this.encodingOverride = encodingOverride || "utf-8";
+ this.stateOverride = stateOverride;
+ this.url = url;
+ this.failure = false;
+ this.parseError = false;
-module.exports = exports = {
- isObject,
- hasOwn,
- getOwnPropertyDescriptors,
- wrapperSymbol,
- implSymbol,
- getSameObject,
- wrapperForImpl,
- implForWrapper,
- tryWrapperForImpl,
- tryImplForWrapper,
- iterInternalSymbol,
- IteratorPrototype,
- isArrayIndexPropName,
- supportsPropertyIndex,
- supportedPropertyIndices,
- supportsPropertyName,
- supportedPropertyNames,
- indexedGet,
- indexedSetNew,
- indexedSetExisting,
- namedGet,
- namedSetNew,
- namedSetExisting,
- namedDelete
-};
+ if (!this.url) {
+ this.url = {
+ scheme: "",
+ username: "",
+ password: "",
+ host: null,
+ port: null,
+ path: [],
+ query: null,
+ fragment: null,
+ cannotBeABaseURL: false
+ };
-/***/ }),
+ const res = trimControlChars(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
+ }
-/***/ 3811:
-/***/ (function(module, exports, __webpack_require__) {
+ const res = trimTabAndNewline(this.input);
+ if (res !== this.input) {
+ this.parseError = true;
+ }
+ this.input = res;
-"use strict";
+ this.state = stateOverride || "scheme start";
+ this.buffer = "";
+ this.atFlag = false;
+ this.arrFlag = false;
+ this.passwordTokenSeenFlag = false;
-function isASCIIDigit(c) {
- return c >= 0x30 && c <= 0x39;
-}
+ this.input = punycode.ucs2.decode(this.input);
-function isASCIIAlpha(c) {
- return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
-}
+ for (; this.pointer <= this.input.length; ++this.pointer) {
+ const c = this.input[this.pointer];
+ const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
-function isASCIIAlphanumeric(c) {
- return isASCIIAlpha(c) || isASCIIDigit(c);
+ // exec state machine
+ const ret = this["parse " + this.state](c, cStr);
+ if (!ret) {
+ break; // terminate algorithm
+ } else if (ret === failure) {
+ this.failure = true;
+ break;
+ }
+ }
}
-function isASCIIHex(c) {
- return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
-}
+URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
+ if (infra.isASCIIAlpha(c)) {
+ this.buffer += cStr.toLowerCase();
+ this.state = "scheme";
+ } else if (!this.stateOverride) {
+ this.state = "no scheme";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
-module.exports = {
- isASCIIDigit,
- isASCIIAlpha,
- isASCIIAlphanumeric,
- isASCIIHex
+ return true;
};
+URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
+ if (infra.isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
+ this.buffer += cStr.toLowerCase();
+ } else if (c === 58) {
+ if (this.stateOverride) {
+ if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
+ return false;
+ }
-/***/ }),
-
-/***/ 3812:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-const conversions = __webpack_require__(3809);
-const utils = __webpack_require__(3810);
+ if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
+ return false;
+ }
-const impl = utils.implSymbol;
+ if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
+ return false;
+ }
-const IteratorPrototype = Object.create(utils.IteratorPrototype, {
- next: {
- value: function next() {
- const internal = this[utils.iterInternalSymbol];
- const { target, kind, index } = internal;
- const values = Array.from(target[impl]);
- const len = values.length;
- if (index >= len) {
- return { value: undefined, done: true };
+ if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
+ return false;
}
-
- const pair = values[index];
- internal.index = index + 1;
- const [key, value] = pair.map(utils.tryWrapperForImpl);
-
- let result;
- switch (kind) {
- case "key":
- result = key;
- break;
- case "value":
- result = value;
- break;
- case "key+value":
- result = [key, value];
- break;
+ }
+ this.url.scheme = this.buffer;
+ if (this.stateOverride) {
+ if (this.url.port === defaultPort(this.url.scheme)) {
+ this.url.port = null;
}
- return { value: result, done: false };
- },
- writable: true,
- enumerable: true,
- configurable: true
- },
- [Symbol.toStringTag]: {
- value: "URLSearchParams Iterator",
- configurable: true
- }
-});
-class URLSearchParams {
- constructor() {
- const args = [];
- {
- let curArg = arguments[0];
- if (curArg !== undefined) {
- if (utils.isObject(curArg)) {
- if (curArg[Symbol.iterator] !== undefined) {
- if (!utils.isObject(curArg)) {
- throw new TypeError(
- "Failed to construct 'URLSearchParams': parameter 1" + " sequence" + " is not an iterable object."
- );
- } else {
- const V = [];
- const tmp = curArg;
- for (let nextItem of tmp) {
- if (!utils.isObject(nextItem)) {
- throw new TypeError(
- "Failed to construct 'URLSearchParams': parameter 1" +
- " sequence" +
- "'s element" +
- " is not an iterable object."
- );
- } else {
- const V = [];
- const tmp = nextItem;
- for (let nextItem of tmp) {
- nextItem = conversions["USVString"](nextItem, {
- context:
- "Failed to construct 'URLSearchParams': parameter 1" + " sequence" + "'s element" + "'s element"
- });
-
- V.push(nextItem);
- }
- nextItem = V;
- }
-
- V.push(nextItem);
- }
- curArg = V;
- }
- } else {
- if (!utils.isObject(curArg)) {
- throw new TypeError(
- "Failed to construct 'URLSearchParams': parameter 1" + " record" + " is not an object."
- );
- } else {
- const result = Object.create(null);
- for (const key of Reflect.ownKeys(curArg)) {
- const desc = Object.getOwnPropertyDescriptor(curArg, key);
- if (desc && desc.enumerable) {
- let typedKey = key;
- let typedValue = curArg[key];
-
- typedKey = conversions["USVString"](typedKey, {
- context: "Failed to construct 'URLSearchParams': parameter 1" + " record" + "'s key"
- });
-
- typedValue = conversions["USVString"](typedValue, {
- context: "Failed to construct 'URLSearchParams': parameter 1" + " record" + "'s value"
- });
-
- result[typedKey] = typedValue;
- }
- }
- curArg = result;
- }
- }
- } else {
- curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URLSearchParams': parameter 1" });
- }
- } else {
- curArg = "";
+ return false;
+ }
+ this.buffer = "";
+ if (this.url.scheme === "file") {
+ if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
+ this.parseError = true;
}
- args.push(curArg);
+ this.state = "file";
+ } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
+ this.state = "special relative or authority";
+ } else if (isSpecial(this.url)) {
+ this.state = "special authority slashes";
+ } else if (this.input[this.pointer + 1] === 47) {
+ this.state = "path or authority";
+ ++this.pointer;
+ } else {
+ this.url.cannotBeABaseURL = true;
+ this.url.path.push("");
+ this.state = "cannot-be-a-base-URL path";
}
- return iface.setup(Object.create(new.target.prototype), args);
+ } else if (!this.stateOverride) {
+ this.buffer = "";
+ this.state = "no scheme";
+ this.pointer = -1;
+ } else {
+ this.parseError = true;
+ return failure;
}
- append(name, value) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 2) {
- throw new TypeError(
- "Failed to execute 'append' on 'URLSearchParams': 2 arguments required, but only " +
- arguments.length +
- " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'append' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
- }
- {
- let curArg = arguments[1];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'append' on 'URLSearchParams': parameter 2"
- });
- args.push(curArg);
- }
- return this[impl].append(...args);
+URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
+ if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
+ return failure;
+ } else if (this.base.cannotBeABaseURL && c === 35) {
+ this.url.scheme = this.base.scheme;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.url.cannotBeABaseURL = true;
+ this.state = "fragment";
+ } else if (this.base.scheme === "file") {
+ this.state = "file";
+ --this.pointer;
+ } else {
+ this.state = "relative";
+ --this.pointer;
}
- delete(name) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 1) {
- throw new TypeError(
- "Failed to execute 'delete' on 'URLSearchParams': 1 argument required, but only " +
- arguments.length +
- " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'delete' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
- }
- return this[impl].delete(...args);
+URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "relative";
+ --this.pointer;
}
- get(name) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 1) {
- throw new TypeError(
- "Failed to execute 'get' on 'URLSearchParams': 1 argument required, but only " + arguments.length + " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'get' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
- }
- return this[impl].get(...args);
+URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
+ if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.state = "path";
+ --this.pointer;
}
- getAll(name) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 1) {
- throw new TypeError(
- "Failed to execute 'getAll' on 'URLSearchParams': 1 argument required, but only " +
- arguments.length +
- " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'getAll' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
- }
- return utils.tryWrapperForImpl(this[impl].getAll(...args));
+URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
+ this.url.scheme = this.base.scheme;
+ if (isNaN(c)) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 47) {
+ this.state = "relative slash";
+ } else if (c === 63) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ this.state = "relative slash";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.url.path = this.base.path.slice(0, this.base.path.length - 1);
+
+ this.state = "path";
+ --this.pointer;
}
- has(name) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 1) {
- throw new TypeError(
- "Failed to execute 'has' on 'URLSearchParams': 1 argument required, but only " + arguments.length + " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'has' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
+URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
+ if (isSpecial(this.url) && (c === 47 || c === 92)) {
+ if (c === 92) {
+ this.parseError = true;
}
- return this[impl].has(...args);
+ this.state = "special authority ignore slashes";
+ } else if (c === 47) {
+ this.state = "authority";
+ } else {
+ this.url.username = this.base.username;
+ this.url.password = this.base.password;
+ this.url.host = this.base.host;
+ this.url.port = this.base.port;
+ this.state = "path";
+ --this.pointer;
}
- set(name, value) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- if (arguments.length < 2) {
- throw new TypeError(
- "Failed to execute 'set' on 'URLSearchParams': 2 arguments required, but only " + arguments.length + " present."
- );
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'set' on 'URLSearchParams': parameter 1"
- });
- args.push(curArg);
- }
- {
- let curArg = arguments[1];
- curArg = conversions["USVString"](curArg, {
- context: "Failed to execute 'set' on 'URLSearchParams': parameter 2"
- });
- args.push(curArg);
- }
- return this[impl].set(...args);
+URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
+ if (c === 47 && this.input[this.pointer + 1] === 47) {
+ this.state = "special authority ignore slashes";
+ ++this.pointer;
+ } else {
+ this.parseError = true;
+ this.state = "special authority ignore slashes";
+ --this.pointer;
}
- sort() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- return this[impl].sort();
+URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
+ if (c !== 47 && c !== 92) {
+ this.state = "authority";
+ --this.pointer;
+ } else {
+ this.parseError = true;
}
- toString() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ return true;
+};
+
+URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
+ if (c === 64) {
+ this.parseError = true;
+ if (this.atFlag) {
+ this.buffer = "%40" + this.buffer;
}
+ this.atFlag = true;
- return this[impl].toString();
- }
+ // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
+ const len = countSymbols(this.buffer);
+ for (let pointer = 0; pointer < len; ++pointer) {
+ const codePoint = this.buffer.codePointAt(pointer);
- keys() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ if (codePoint === 58 && !this.passwordTokenSeenFlag) {
+ this.passwordTokenSeenFlag = true;
+ continue;
+ }
+ const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
+ if (this.passwordTokenSeenFlag) {
+ this.url.password += encodedCodePoints;
+ } else {
+ this.url.username += encodedCodePoints;
+ }
}
- return module.exports.createDefaultIterator(this, "key");
+ this.buffer = "";
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ if (this.atFlag && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ }
+ this.pointer -= countSymbols(this.buffer) + 1;
+ this.buffer = "";
+ this.state = "host";
+ } else {
+ this.buffer += cStr;
}
- values() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ return true;
+};
+
+URLStateMachine.prototype["parse hostname"] =
+URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
+ if (this.stateOverride && this.url.scheme === "file") {
+ --this.pointer;
+ this.state = "file host";
+ } else if (c === 58 && !this.arrFlag) {
+ if (this.buffer === "") {
+ this.parseError = true;
+ return failure;
}
- return module.exports.createDefaultIterator(this, "value");
- }
- entries() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ const host = parseHost(this.buffer, isNotSpecial(this.url));
+ if (host === failure) {
+ return failure;
}
- return module.exports.createDefaultIterator(this, "key+value");
- }
- forEach(callback) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "port";
+ if (this.stateOverride === "hostname") {
+ return false;
}
- if (arguments.length < 1) {
- throw new TypeError("Failed to execute 'forEach' on 'iterable': 1 argument required, " + "but only 0 present.");
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92)) {
+ --this.pointer;
+ if (isSpecial(this.url) && this.buffer === "") {
+ this.parseError = true;
+ return failure;
+ } else if (this.stateOverride && this.buffer === "" &&
+ (includesCredentials(this.url) || this.url.port !== null)) {
+ this.parseError = true;
+ return false;
}
- if (typeof callback !== "function") {
- throw new TypeError(
- "Failed to execute 'forEach' on 'iterable': The callback provided " + "as parameter 1 is not a function."
- );
+
+ const host = parseHost(this.buffer, isNotSpecial(this.url));
+ if (host === failure) {
+ return failure;
}
- const thisArg = arguments[1];
- let pairs = Array.from(this[impl]);
- let i = 0;
- while (i < pairs.length) {
- const [key, value] = pairs[i].map(utils.tryWrapperForImpl);
- callback.call(thisArg, value, key, this);
- pairs = Array.from(this[impl]);
- i++;
+
+ this.url.host = host;
+ this.buffer = "";
+ this.state = "path start";
+ if (this.stateOverride) {
+ return false;
+ }
+ } else {
+ if (c === 91) {
+ this.arrFlag = true;
+ } else if (c === 93) {
+ this.arrFlag = false;
}
+ this.buffer += cStr;
}
-}
-Object.defineProperties(URLSearchParams.prototype, {
- append: { enumerable: true },
- delete: { enumerable: true },
- get: { enumerable: true },
- getAll: { enumerable: true },
- has: { enumerable: true },
- set: { enumerable: true },
- sort: { enumerable: true },
- toString: { enumerable: true },
- keys: { enumerable: true },
- values: { enumerable: true },
- entries: { enumerable: true },
- forEach: { enumerable: true },
- [Symbol.toStringTag]: { value: "URLSearchParams", configurable: true },
- [Symbol.iterator]: { value: URLSearchParams.prototype.entries, configurable: true, writable: true }
-});
-const iface = {
- // When an interface-module that implements this interface as a mixin is loaded, it will append its own `.is()`
- // method into this array. It allows objects that directly implements *those* interfaces to be recognized as
- // implementing this mixin interface.
- _mixedIntoPredicates: [],
- is(obj) {
- if (obj) {
- if (utils.hasOwn(obj, impl) && obj[impl] instanceof Impl.implementation) {
- return true;
- }
- for (const isMixedInto of module.exports._mixedIntoPredicates) {
- if (isMixedInto(obj)) {
- return true;
- }
- }
- }
- return false;
- },
- isImpl(obj) {
- if (obj) {
- if (obj instanceof Impl.implementation) {
- return true;
- }
- const wrapper = utils.wrapperForImpl(obj);
- for (const isMixedInto of module.exports._mixedIntoPredicates) {
- if (isMixedInto(wrapper)) {
- return true;
- }
+ return true;
+};
+
+URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
+ if (infra.isASCIIDigit(c)) {
+ this.buffer += cStr;
+ } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
+ (isSpecial(this.url) && c === 92) ||
+ this.stateOverride) {
+ if (this.buffer !== "") {
+ const port = parseInt(this.buffer);
+ if (port > Math.pow(2, 16) - 1) {
+ this.parseError = true;
+ return failure;
}
+ this.url.port = port === defaultPort(this.url.scheme) ? null : port;
+ this.buffer = "";
}
- return false;
- },
- convert(obj, { context = "The provided value" } = {}) {
- if (module.exports.is(obj)) {
- return utils.implForWrapper(obj);
+ if (this.stateOverride) {
+ return false;
}
- throw new TypeError(`${context} is not of type 'URLSearchParams'.`);
- },
+ this.state = "path start";
+ --this.pointer;
+ } else {
+ this.parseError = true;
+ return failure;
+ }
- createDefaultIterator(target, kind) {
- const iterator = Object.create(IteratorPrototype);
- Object.defineProperty(iterator, utils.iterInternalSymbol, {
- value: { target, kind, index: 0 },
- configurable: true
- });
- return iterator;
- },
+ return true;
+};
- create(constructorArgs, privateData) {
- let obj = Object.create(URLSearchParams.prototype);
- obj = this.setup(obj, constructorArgs, privateData);
- return obj;
- },
- createImpl(constructorArgs, privateData) {
- let obj = Object.create(URLSearchParams.prototype);
- obj = this.setup(obj, constructorArgs, privateData);
- return utils.implForWrapper(obj);
- },
- _internalSetup(obj) {},
- setup(obj, constructorArgs, privateData) {
- if (!privateData) privateData = {};
+const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
- privateData.wrapper = obj;
+function startsWithWindowsDriveLetter(input, pointer) {
+ const length = input.length - pointer;
+ return length >= 2 &&
+ isWindowsDriveLetterCodePoints(input[pointer], input[pointer + 1]) &&
+ (length === 2 || fileOtherwiseCodePoints.has(input[pointer + 2]));
+}
- this._internalSetup(obj);
- Object.defineProperty(obj, impl, {
- value: new Impl.implementation(constructorArgs, privateData),
- configurable: true
- });
+URLStateMachine.prototype["parse file"] = function parseFile(c) {
+ this.url.scheme = "file";
- obj[impl][utils.wrapperSymbol] = obj;
- if (Impl.init) {
- Impl.init(obj[impl], privateData);
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
}
- return obj;
- },
- interface: URLSearchParams,
- expose: {
- Window: { URLSearchParams },
- Worker: { URLSearchParams }
- }
-}; // iface
-module.exports = iface;
-
-const Impl = __webpack_require__(3822);
+ this.state = "file slash";
+ } else if (this.base !== null && this.base.scheme === "file") {
+ if (isNaN(c)) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ } else if (c === 63) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ this.url.query = this.base.query;
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ if (!startsWithWindowsDriveLetter(this.input, this.pointer)) {
+ this.url.host = this.base.host;
+ this.url.path = this.base.path.slice();
+ shortenPath(this.url);
+ } else {
+ this.parseError = true;
+ }
+ this.state = "path";
+ --this.pointer;
+ }
+ } else {
+ this.state = "path";
+ --this.pointer;
+ }
-/***/ }),
+ return true;
+};
-/***/ 3813:
-/***/ (function(module, exports, __webpack_require__) {
+URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
+ if (c === 47 || c === 92) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "file host";
+ } else {
+ if (this.base !== null && this.base.scheme === "file" &&
+ !startsWithWindowsDriveLetter(this.input, this.pointer)) {
+ if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
+ this.url.path.push(this.base.path[0]);
+ } else {
+ this.url.host = this.base.host;
+ }
+ }
+ this.state = "path";
+ --this.pointer;
+ }
-"use strict";
+ return true;
+};
+URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
+ if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
+ --this.pointer;
+ if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
+ this.parseError = true;
+ this.state = "path";
+ } else if (this.buffer === "") {
+ this.url.host = "";
+ if (this.stateOverride) {
+ return false;
+ }
+ this.state = "path start";
+ } else {
+ let host = parseHost(this.buffer, isNotSpecial(this.url));
+ if (host === failure) {
+ return failure;
+ }
+ if (host === "localhost") {
+ host = "";
+ }
+ this.url.host = host;
-let mappingsWasm = null;
+ if (this.stateOverride) {
+ return false;
+ }
-module.exports = function readWasm() {
- if (typeof mappingsWasm === "string") {
- return fetch(mappingsWasm)
- .then(response => response.arrayBuffer());
- }
- if (mappingsWasm instanceof ArrayBuffer) {
- return Promise.resolve(mappingsWasm);
+ this.buffer = "";
+ this.state = "path start";
+ }
+ } else {
+ this.buffer += cStr;
}
- throw new Error("You must provide the string URL or ArrayBuffer contents " +
- "of lib/mappings.wasm by calling " +
- "SourceMapConsumer.initialize({ 'lib/mappings.wasm': ... }) " +
- "before using SourceMapConsumer");
-};
-
-module.exports.initialize = input => {
- mappingsWasm = input;
+ return true;
};
+URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
+ if (isSpecial(this.url)) {
+ if (c === 92) {
+ this.parseError = true;
+ }
+ this.state = "path";
-/***/ }),
+ if (c !== 47 && c !== 92) {
+ --this.pointer;
+ }
+ } else if (!this.stateOverride && c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (!this.stateOverride && c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else if (c !== undefined) {
+ this.state = "path";
+ if (c !== 47) {
+ --this.pointer;
+ }
+ }
-/***/ 3815:
-/***/ (function(module, exports, __webpack_require__) {
+ return true;
+};
-"use strict";
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-
-/**
- * Browser 'URL' implementations have been found to handle non-standard URL
- * schemes poorly, and schemes like
- *
- * webpack:///src/folder/file.js
- *
- * are very common in source maps. For the time being we use a JS
- * implementation in these contexts instead. See
- *
- * * https://bugzilla.mozilla.org/show_bug.cgi?id=1374505
- * * https://bugs.chromium.org/p/chromium/issues/detail?id=734880
- */
-module.exports = __webpack_require__(3816).URL;
-
-
-/***/ }),
-
-/***/ 3816:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-exports.URL = __webpack_require__(3817).interface;
-exports.URLSearchParams = __webpack_require__(3812).interface;
-
-exports.parseURL = __webpack_require__(3807).parseURL;
-exports.basicURLParse = __webpack_require__(3807).basicURLParse;
-exports.serializeURL = __webpack_require__(3807).serializeURL;
-exports.serializeHost = __webpack_require__(3807).serializeHost;
-exports.serializeInteger = __webpack_require__(3807).serializeInteger;
-exports.serializeURLOrigin = __webpack_require__(3807).serializeURLOrigin;
-exports.setTheUsername = __webpack_require__(3807).setTheUsername;
-exports.setThePassword = __webpack_require__(3807).setThePassword;
-exports.cannotHaveAUsernamePasswordPort = __webpack_require__(3807).cannotHaveAUsernamePasswordPort;
+URLStateMachine.prototype["parse path"] = function parsePath(c) {
+ if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
+ (!this.stateOverride && (c === 63 || c === 35))) {
+ if (isSpecial(this.url) && c === 92) {
+ this.parseError = true;
+ }
-exports.percentDecode = __webpack_require__(3808).percentDecode;
+ if (isDoubleDot(this.buffer)) {
+ shortenPath(this.url);
+ if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ }
+ } else if (isSingleDot(this.buffer) && c !== 47 &&
+ !(isSpecial(this.url) && c === 92)) {
+ this.url.path.push("");
+ } else if (!isSingleDot(this.buffer)) {
+ if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
+ if (this.url.host !== "" && this.url.host !== null) {
+ this.parseError = true;
+ this.url.host = "";
+ }
+ this.buffer = this.buffer[0] + ":";
+ }
+ this.url.path.push(this.buffer);
+ }
+ this.buffer = "";
+ if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
+ while (this.url.path.length > 1 && this.url.path[0] === "") {
+ this.parseError = true;
+ this.url.path.shift();
+ }
+ }
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ }
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
+ !infra.isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
-/***/ }),
+ this.buffer += percentEncodeChar(c, isPathPercentEncode);
+ }
-/***/ 3817:
-/***/ (function(module, exports, __webpack_require__) {
+ return true;
+};
-"use strict";
+URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
+ if (c === 63) {
+ this.url.query = "";
+ this.state = "query";
+ } else if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ } else {
+ // TODO: Add: not a URL code point
+ if (!isNaN(c) && c !== 37) {
+ this.parseError = true;
+ }
+ if (c === 37 &&
+ (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
+ !infra.isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
+ }
-const conversions = __webpack_require__(3809);
-const utils = __webpack_require__(3810);
+ if (!isNaN(c)) {
+ this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
+ }
+ }
-const impl = utils.implSymbol;
+ return true;
+};
-class URL {
- constructor(url) {
- if (arguments.length < 1) {
- throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
- }
- const args = [];
- {
- let curArg = arguments[0];
- curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URL': parameter 1" });
- args.push(curArg);
+URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
+ if (isNaN(c) || (!this.stateOverride && c === 35)) {
+ if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
+ this.encodingOverride = "utf-8";
}
- {
- let curArg = arguments[1];
- if (curArg !== undefined) {
- curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URL': parameter 2" });
+
+ const buffer = Buffer.from(this.buffer); // TODO: Use encoding override instead
+ for (let i = 0; i < buffer.length; ++i) {
+ if (buffer[i] < 0x21 ||
+ buffer[i] > 0x7E ||
+ buffer[i] === 0x22 || buffer[i] === 0x23 || buffer[i] === 0x3C || buffer[i] === 0x3E ||
+ (buffer[i] === 0x27 && isSpecial(this.url))) {
+ this.url.query += percentEncode(buffer[i]);
+ } else {
+ this.url.query += String.fromCodePoint(buffer[i]);
}
- args.push(curArg);
}
- return iface.setup(Object.create(new.target.prototype), args);
- }
- toJSON() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ this.buffer = "";
+ if (c === 35) {
+ this.url.fragment = "";
+ this.state = "fragment";
+ }
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
+ !infra.isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
}
- return this[impl].toJSON();
+ this.buffer += cStr;
}
- get href() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ return true;
+};
+
+URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
+ if (isNaN(c)) { // do nothing
+ } else if (c === 0x0) {
+ this.parseError = true;
+ } else {
+ // TODO: If c is not a URL code point and not "%", parse error.
+ if (c === 37 &&
+ (!infra.isASCIIHex(this.input[this.pointer + 1]) ||
+ !infra.isASCIIHex(this.input[this.pointer + 2]))) {
+ this.parseError = true;
}
- return this[impl]["href"];
+ this.url.fragment += percentEncodeChar(c, isFragmentPercentEncode);
}
- set href(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return true;
+};
- V = conversions["USVString"](V, { context: "Failed to set the 'href' property on 'URL': The provided value" });
+function serializeURL(url, excludeFragment) {
+ let output = url.scheme + ":";
+ if (url.host !== null) {
+ output += "//";
- this[impl]["href"] = V;
- }
+ if (url.username !== "" || url.password !== "") {
+ output += url.username;
+ if (url.password !== "") {
+ output += ":" + url.password;
+ }
+ output += "@";
+ }
- toString() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ output += serializeHost(url.host);
+
+ if (url.port !== null) {
+ output += ":" + url.port;
}
- return this[impl]["href"];
+ } else if (url.host === null && url.scheme === "file") {
+ output += "//";
}
- get origin() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ if (url.cannotBeABaseURL) {
+ output += url.path[0];
+ } else {
+ for (const string of url.path) {
+ output += "/" + string;
}
-
- return this[impl]["origin"];
}
- get protocol() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ if (url.query !== null) {
+ output += "?" + url.query;
+ }
- return this[impl]["protocol"];
+ if (!excludeFragment && url.fragment !== null) {
+ output += "#" + url.fragment;
}
- set protocol(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return output;
+}
- V = conversions["USVString"](V, { context: "Failed to set the 'protocol' property on 'URL': The provided value" });
+function serializeOrigin(tuple) {
+ let result = tuple.scheme + "://";
+ result += serializeHost(tuple.host);
- this[impl]["protocol"] = V;
+ if (tuple.port !== null) {
+ result += ":" + tuple.port;
}
- get username() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return result;
+}
- return this[impl]["username"];
- }
-
- set username(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- V = conversions["USVString"](V, { context: "Failed to set the 'username' property on 'URL': The provided value" });
+module.exports.serializeURL = serializeURL;
- this[impl]["username"] = V;
+module.exports.serializeURLOrigin = function (url) {
+ // https://url.spec.whatwg.org/#concept-url-origin
+ switch (url.scheme) {
+ case "blob":
+ try {
+ return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
+ } catch (e) {
+ // serializing an opaque origin returns "null"
+ return "null";
+ }
+ case "ftp":
+ case "gopher":
+ case "http":
+ case "https":
+ case "ws":
+ case "wss":
+ return serializeOrigin({
+ scheme: url.scheme,
+ host: url.host,
+ port: url.port
+ });
+ case "file":
+ // The spec says:
+ // > Unfortunate as it is, this is left as an exercise to the reader. When in doubt, return a new opaque origin.
+ // Browsers tested so far:
+ // - Chrome says "file://", but treats file: URLs as cross-origin for most (all?) purposes; see e.g.
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=37586
+ // - Firefox says "null", but treats file: URLs as same-origin sometimes based on directory stuff; see
+ // https://developer.mozilla.org/en-US/docs/Archive/Misc_top_level/Same-origin_policy_for_file:_URIs
+ return "null";
+ default:
+ // serializing an opaque origin returns "null"
+ return "null";
}
+};
- get password() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- return this[impl]["password"];
+module.exports.basicURLParse = function (input, options) {
+ if (options === undefined) {
+ options = {};
}
- set password(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- V = conversions["USVString"](V, { context: "Failed to set the 'password' property on 'URL': The provided value" });
-
- this[impl]["password"] = V;
+ const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
+ if (usm.failure) {
+ return null;
}
- get host() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ return usm.url;
+};
- return this[impl]["host"];
+module.exports.setTheUsername = function (url, username) {
+ url.username = "";
+ const decoded = punycode.ucs2.decode(username);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
+};
- set host(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- V = conversions["USVString"](V, { context: "Failed to set the 'host' property on 'URL': The provided value" });
-
- this[impl]["host"] = V;
+module.exports.setThePassword = function (url, password) {
+ url.password = "";
+ const decoded = punycode.ucs2.decode(password);
+ for (let i = 0; i < decoded.length; ++i) {
+ url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
+};
- get hostname() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- return this[impl]["hostname"];
- }
+module.exports.serializeHost = serializeHost;
- set hostname(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
- V = conversions["USVString"](V, { context: "Failed to set the 'hostname' property on 'URL': The provided value" });
+module.exports.serializeInteger = function (integer) {
+ return String(integer);
+};
- this[impl]["hostname"] = V;
+module.exports.parseURL = function (input, options) {
+ if (options === undefined) {
+ options = {};
}
- get port() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+ // We don't handle blobs, so this just delegates:
+ return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
+};
- return this[impl]["port"];
- }
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(794).Buffer))
- set port(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+/***/ }),
- V = conversions["USVString"](V, { context: "Failed to set the 'port' property on 'URL': The provided value" });
+/***/ 3808:
+/***/ (function(module, exports, __webpack_require__) {
- this[impl]["port"] = V;
- }
+"use strict";
+/* WEBPACK VAR INJECTION */(function(Buffer) {
+const { isASCIIHex } = __webpack_require__(3811);
- get pathname() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+function strictlySplitByteSequence(buf, cp) {
+ const list = [];
+ let last = 0;
+ let i = buf.indexOf(cp);
+ while (i >= 0) {
+ list.push(buf.slice(last, i));
+ last = i + 1;
+ i = buf.indexOf(cp, last);
+ }
+ if (last !== buf.length) {
+ list.push(buf.slice(last));
+ }
+ return list;
+}
- return this[impl]["pathname"];
+function replaceByteInByteSequence(buf, from, to) {
+ let i = buf.indexOf(from);
+ while (i >= 0) {
+ buf[i] = to;
+ i = buf.indexOf(from, i + 1);
}
+ return buf;
+}
- set pathname(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
+function percentEncode(c) {
+ let hex = c.toString(16).toUpperCase();
+ if (hex.length === 1) {
+ hex = "0" + hex;
+ }
- V = conversions["USVString"](V, { context: "Failed to set the 'pathname' property on 'URL': The provided value" });
+ return "%" + hex;
+}
- this[impl]["pathname"] = V;
+function percentDecode(input) {
+ const output = Buffer.alloc(input.byteLength);
+ let ptr = 0;
+ for (let i = 0; i < input.length; ++i) {
+ if (input[i] !== 37 || !isASCIIHex(input[i + 1]) || !isASCIIHex(input[i + 2])) {
+ output[ptr++] = input[i];
+ } else {
+ output[ptr++] = parseInt(input.slice(i + 1, i + 3).toString(), 16);
+ i += 2;
+ }
}
+ return output.slice(0, ptr);
+}
- get search() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+function parseUrlencoded(input) {
+ const sequences = strictlySplitByteSequence(input, 38);
+ const output = [];
+ for (const bytes of sequences) {
+ if (bytes.length === 0) {
+ continue;
}
- return this[impl]["search"];
- }
+ let name;
+ let value;
+ const indexOfEqual = bytes.indexOf(61);
- set search(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+ if (indexOfEqual >= 0) {
+ name = bytes.slice(0, indexOfEqual);
+ value = bytes.slice(indexOfEqual + 1);
+ } else {
+ name = bytes;
+ value = Buffer.alloc(0);
}
- V = conversions["USVString"](V, { context: "Failed to set the 'search' property on 'URL': The provided value" });
+ name = replaceByteInByteSequence(Buffer.from(name), 43, 32);
+ value = replaceByteInByteSequence(Buffer.from(value), 43, 32);
- this[impl]["search"] = V;
+ output.push([percentDecode(name).toString(), percentDecode(value).toString()]);
}
+ return output;
+}
- get searchParams() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
+function serializeUrlencodedByte(input) {
+ let output = "";
+ for (const byte of input) {
+ if (byte === 32) {
+ output += "+";
+ } else if (byte === 42 ||
+ byte === 45 ||
+ byte === 46 ||
+ (byte >= 48 && byte <= 57) ||
+ (byte >= 65 && byte <= 90) ||
+ byte === 95 ||
+ (byte >= 97 && byte <= 122)) {
+ output += String.fromCodePoint(byte);
+ } else {
+ output += percentEncode(byte);
}
-
- return utils.getSameObject(this, "searchParams", () => {
- return utils.tryWrapperForImpl(this[impl]["searchParams"]);
- });
}
+ return output;
+}
- get hash() {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- return this[impl]["hash"];
+function serializeUrlencoded(tuples, encodingOverride = undefined) {
+ let encoding = "utf-8";
+ if (encodingOverride !== undefined) {
+ encoding = encodingOverride;
}
- set hash(V) {
- if (!this || !module.exports.is(this)) {
- throw new TypeError("Illegal invocation");
- }
-
- V = conversions["USVString"](V, { context: "Failed to set the 'hash' property on 'URL': The provided value" });
-
- this[impl]["hash"] = V;
- }
-}
-Object.defineProperties(URL.prototype, {
- toJSON: { enumerable: true },
- href: { enumerable: true },
- toString: { enumerable: true },
- origin: { enumerable: true },
- protocol: { enumerable: true },
- username: { enumerable: true },
- password: { enumerable: true },
- host: { enumerable: true },
- hostname: { enumerable: true },
- port: { enumerable: true },
- pathname: { enumerable: true },
- search: { enumerable: true },
- searchParams: { enumerable: true },
- hash: { enumerable: true },
- [Symbol.toStringTag]: { value: "URL", configurable: true }
-});
-const iface = {
- // When an interface-module that implements this interface as a mixin is loaded, it will append its own `.is()`
- // method into this array. It allows objects that directly implements *those* interfaces to be recognized as
- // implementing this mixin interface.
- _mixedIntoPredicates: [],
- is(obj) {
- if (obj) {
- if (utils.hasOwn(obj, impl) && obj[impl] instanceof Impl.implementation) {
- return true;
- }
- for (const isMixedInto of module.exports._mixedIntoPredicates) {
- if (isMixedInto(obj)) {
- return true;
- }
- }
- }
- return false;
- },
- isImpl(obj) {
- if (obj) {
- if (obj instanceof Impl.implementation) {
- return true;
- }
-
- const wrapper = utils.wrapperForImpl(obj);
- for (const isMixedInto of module.exports._mixedIntoPredicates) {
- if (isMixedInto(wrapper)) {
- return true;
- }
+ let output = "";
+ for (const [i, tuple] of tuples.entries()) {
+ // TODO: handle encoding override
+ const name = serializeUrlencodedByte(Buffer.from(tuple[0]));
+ let value = tuple[1];
+ if (tuple.length > 2 && tuple[2] !== undefined) {
+ if (tuple[2] === "hidden" && name === "_charset_") {
+ value = encoding;
+ } else if (tuple[2] === "file") {
+ // value is a File object
+ value = value.name;
}
}
- return false;
- },
- convert(obj, { context = "The provided value" } = {}) {
- if (module.exports.is(obj)) {
- return utils.implForWrapper(obj);
+ value = serializeUrlencodedByte(Buffer.from(value));
+ if (i !== 0) {
+ output += "&";
}
- throw new TypeError(`${context} is not of type 'URL'.`);
- },
-
- create(constructorArgs, privateData) {
- let obj = Object.create(URL.prototype);
- obj = this.setup(obj, constructorArgs, privateData);
- return obj;
- },
- createImpl(constructorArgs, privateData) {
- let obj = Object.create(URL.prototype);
- obj = this.setup(obj, constructorArgs, privateData);
- return utils.implForWrapper(obj);
- },
- _internalSetup(obj) {},
- setup(obj, constructorArgs, privateData) {
- if (!privateData) privateData = {};
-
- privateData.wrapper = obj;
+ output += `${name}=${value}`;
+ }
+ return output;
+}
- this._internalSetup(obj);
- Object.defineProperty(obj, impl, {
- value: new Impl.implementation(constructorArgs, privateData),
- configurable: true
- });
+module.exports = {
+ percentEncode,
+ percentDecode,
- obj[impl][utils.wrapperSymbol] = obj;
- if (Impl.init) {
- Impl.init(obj[impl], privateData);
- }
- return obj;
+ // application/x-www-form-urlencoded string parser
+ parseUrlencoded(input) {
+ return parseUrlencoded(Buffer.from(input));
},
- interface: URL,
- expose: {
- Window: { URL },
- Worker: { URL }
- }
-}; // iface
-module.exports = iface;
-const Impl = __webpack_require__(3818);
+ // application/x-www-form-urlencoded serializer
+ serializeUrlencoded
+};
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(794).Buffer))
/***/ }),
-/***/ 3818:
+/***/ 3809:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-const usm = __webpack_require__(3807);
-const urlencoded = __webpack_require__(3808);
-const URLSearchParams = __webpack_require__(3812);
-exports.implementation = class URLImpl {
- constructor(constructorArgs) {
- const url = constructorArgs[0];
- const base = constructorArgs[1];
+function _(message, opts) {
+ return `${opts && opts.context ? opts.context : "Value"} ${message}.`;
+}
- let parsedBase = null;
- if (base !== undefined) {
- parsedBase = usm.basicURLParse(base);
- if (parsedBase === null) {
- throw new TypeError(`Invalid base URL: ${base}`);
- }
+function type(V) {
+ if (V === null) {
+ return "Null";
}
-
- const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
- if (parsedURL === null) {
- throw new TypeError(`Invalid URL: ${url}`);
+ switch (typeof V) {
+ case "undefined":
+ return "Undefined";
+ case "boolean":
+ return "Boolean";
+ case "number":
+ return "Number";
+ case "string":
+ return "String";
+ case "symbol":
+ return "Symbol";
+ case "object":
+ // Falls through
+ case "function":
+ // Falls through
+ default:
+ // Per ES spec, typeof returns an implemention-defined value that is not any of the existing ones for
+ // uncallable non-standard exotic objects. Yet Type() which the Web IDL spec depends on returns Object for
+ // such cases. So treat the default case as an object.
+ return "Object";
}
+}
- const query = parsedURL.query !== null ? parsedURL.query : "";
+// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
+function evenRound(x) {
+ // There are four cases for numbers with fractional part being .5:
+ //
+ // case | x | floor(x) | round(x) | expected | x <> 0 | x % 1 | x & 1 | example
+ // 1 | 2n + 0.5 | 2n | 2n + 1 | 2n | > | 0.5 | 0 | 0.5 -> 0
+ // 2 | 2n + 1.5 | 2n + 1 | 2n + 2 | 2n + 2 | > | 0.5 | 1 | 1.5 -> 2
+ // 3 | -2n - 0.5 | -2n - 1 | -2n | -2n | < | -0.5 | 0 | -0.5 -> 0
+ // 4 | -2n - 1.5 | -2n - 2 | -2n - 1 | -2n - 2 | < | -0.5 | 1 | -1.5 -> -2
+ // (where n is a non-negative integer)
+ //
+ // Branch here for cases 1 and 4
+ if ((x > 0 && (x % 1) === +0.5 && (x & 1) === 0) ||
+ (x < 0 && (x % 1) === -0.5 && (x & 1) === 1)) {
+ return censorNegativeZero(Math.floor(x));
+ }
- this._url = parsedURL;
+ return censorNegativeZero(Math.round(x));
+}
- // We cannot invoke the "new URLSearchParams object" algorithm without going through the constructor, which strips
- // question mark by default. Therefore the doNotStripQMark hack is used.
- this._query = URLSearchParams.createImpl([query], { doNotStripQMark: true });
- this._query._url = this;
- }
+function integerPart(n) {
+ return censorNegativeZero(Math.trunc(n));
+}
- get href() {
- return usm.serializeURL(this._url);
- }
+function sign(x) {
+ return x < 0 ? -1 : 1;
+}
- set href(v) {
- const parsedURL = usm.basicURLParse(v);
- if (parsedURL === null) {
- throw new TypeError(`Invalid URL: ${v}`);
+function modulo(x, y) {
+ // https://tc39.github.io/ecma262/#eqn-modulo
+ // Note that http://stackoverflow.com/a/4467559/3191 does NOT work for large modulos
+ const signMightNotMatch = x % y;
+ if (sign(y) !== sign(signMightNotMatch)) {
+ return signMightNotMatch + y;
}
+ return signMightNotMatch;
+}
- this._url = parsedURL;
+function censorNegativeZero(x) {
+ return x === 0 ? 0 : x;
+}
- this._query._list.splice(0);
- const { query } = parsedURL;
- if (query !== null) {
- this._query._list = urlencoded.parseUrlencoded(query);
- }
- }
+function createIntegerConversion(bitLength, typeOpts) {
+ const isSigned = !typeOpts.unsigned;
- get origin() {
- return usm.serializeURLOrigin(this._url);
- }
+ let lowerBound;
+ let upperBound;
+ if (bitLength === 64) {
+ upperBound = Math.pow(2, 53) - 1;
+ lowerBound = !isSigned ? 0 : -Math.pow(2, 53) + 1;
+ } else if (!isSigned) {
+ lowerBound = 0;
+ upperBound = Math.pow(2, bitLength) - 1;
+ } else {
+ lowerBound = -Math.pow(2, bitLength - 1);
+ upperBound = Math.pow(2, bitLength - 1) - 1;
+ }
- get protocol() {
- return this._url.scheme + ":";
- }
+ const twoToTheBitLength = Math.pow(2, bitLength);
+ const twoToOneLessThanTheBitLength = Math.pow(2, bitLength - 1);
- set protocol(v) {
- usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
- }
+ return (V, opts) => {
+ if (opts === undefined) {
+ opts = {};
+ }
- get username() {
- return this._url.username;
- }
+ let x = +V;
+ x = censorNegativeZero(x); // Spec discussion ongoing: https://github.com/heycam/webidl/issues/306
- set username(v) {
- if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
- return;
- }
+ if (opts.enforceRange) {
+ if (!Number.isFinite(x)) {
+ throw new TypeError(_("is not a finite number", opts));
+ }
- usm.setTheUsername(this._url, v);
- }
+ x = integerPart(x);
- get password() {
- return this._url.password;
- }
+ if (x < lowerBound || x > upperBound) {
+ throw new TypeError(_(
+ `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`, opts));
+ }
- set password(v) {
- if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
- return;
- }
+ return x;
+ }
- usm.setThePassword(this._url, v);
- }
+ if (!Number.isNaN(x) && opts.clamp) {
+ x = Math.min(Math.max(x, lowerBound), upperBound);
+ x = evenRound(x);
+ return x;
+ }
- get host() {
- const url = this._url;
+ if (!Number.isFinite(x) || x === 0) {
+ return 0;
+ }
+ x = integerPart(x);
- if (url.host === null) {
- return "";
- }
+ // Math.pow(2, 64) is not accurately representable in JavaScript, so try to avoid these per-spec operations if
+ // possible. Hopefully it's an optimization for the non-64-bitLength cases too.
+ if (x >= lowerBound && x <= upperBound) {
+ return x;
+ }
- if (url.port === null) {
- return usm.serializeHost(url.host);
- }
+ // These will not work great for bitLength of 64, but oh well. See the README for more details.
+ x = modulo(x, twoToTheBitLength);
+ if (isSigned && x >= twoToOneLessThanTheBitLength) {
+ return x - twoToTheBitLength;
+ }
+ return x;
+ };
+}
- return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
- }
+exports.any = V => {
+ return V;
+};
- set host(v) {
- if (this._url.cannotBeABaseURL) {
- return;
- }
+exports.void = function () {
+ return undefined;
+};
- usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
- }
+exports.boolean = function (val) {
+ return !!val;
+};
- get hostname() {
- if (this._url.host === null) {
- return "";
- }
+exports.byte = createIntegerConversion(8, { unsigned: false });
+exports.octet = createIntegerConversion(8, { unsigned: true });
- return usm.serializeHost(this._url.host);
- }
+exports.short = createIntegerConversion(16, { unsigned: false });
+exports["unsigned short"] = createIntegerConversion(16, { unsigned: true });
- set hostname(v) {
- if (this._url.cannotBeABaseURL) {
- return;
- }
+exports.long = createIntegerConversion(32, { unsigned: false });
+exports["unsigned long"] = createIntegerConversion(32, { unsigned: true });
- usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
- }
+exports["long long"] = createIntegerConversion(64, { unsigned: false });
+exports["unsigned long long"] = createIntegerConversion(64, { unsigned: true });
- get port() {
- if (this._url.port === null) {
- return "";
+exports.double = (V, opts) => {
+ const x = +V;
+
+ if (!Number.isFinite(x)) {
+ throw new TypeError(_("is not a finite floating-point value", opts));
}
- return usm.serializeInteger(this._url.port);
- }
+ return x;
+};
- set port(v) {
- if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
- return;
- }
+exports["unrestricted double"] = V => {
+ const x = +V;
- if (v === "") {
- this._url.port = null;
- } else {
- usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
- }
- }
+ return x;
+};
- get pathname() {
- if (this._url.cannotBeABaseURL) {
- return this._url.path[0];
- }
+exports.float = (V, opts) => {
+ const x = +V;
- if (this._url.path.length === 0) {
- return "";
+ if (!Number.isFinite(x)) {
+ throw new TypeError(_("is not a finite floating-point value", opts));
}
- return "/" + this._url.path.join("/");
- }
-
- set pathname(v) {
- if (this._url.cannotBeABaseURL) {
- return;
+ if (Object.is(x, -0)) {
+ return x;
}
- this._url.path = [];
- usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
- }
+ const y = Math.fround(x);
- get search() {
- if (this._url.query === null || this._url.query === "") {
- return "";
+ if (!Number.isFinite(y)) {
+ throw new TypeError(_("is outside the range of a single-precision floating-point value", opts));
}
- return "?" + this._url.query;
- }
+ return y;
+};
- set search(v) {
- const url = this._url;
+exports["unrestricted float"] = V => {
+ const x = +V;
- if (v === "") {
- url.query = null;
- this._query._list = [];
- return;
+ if (isNaN(x)) {
+ return x;
}
- const input = v[0] === "?" ? v.substring(1) : v;
- url.query = "";
- usm.basicURLParse(input, { url, stateOverride: "query" });
- this._query._list = urlencoded.parseUrlencoded(input);
- }
+ if (Object.is(x, -0)) {
+ return x;
+ }
- get searchParams() {
- return this._query;
- }
+ return Math.fround(x);
+};
- get hash() {
- if (this._url.fragment === null || this._url.fragment === "") {
- return "";
+exports.DOMString = function (V, opts) {
+ if (opts === undefined) {
+ opts = {};
}
- return "#" + this._url.fragment;
- }
-
- set hash(v) {
- if (v === "") {
- this._url.fragment = null;
- return;
+ if (opts.treatNullAsEmptyString && V === null) {
+ return "";
}
- const input = v[0] === "#" ? v.substring(1) : v;
- this._url.fragment = "";
- usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
- }
+ if (typeof V === "symbol") {
+ throw new TypeError(_("is a symbol, which cannot be converted to a string", opts));
+ }
- toJSON() {
- return this.href;
- }
+ return String(V);
};
+exports.ByteString = (V, opts) => {
+ const x = exports.DOMString(V, opts);
+ let c;
+ for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
+ if (c > 255) {
+ throw new TypeError(_("is not a valid ByteString", opts));
+ }
+ }
-/***/ }),
-
-/***/ 3819:
-/***/ (function(module, exports, __webpack_require__) {
+ return x;
+};
-"use strict";
+exports.USVString = (V, opts) => {
+ const S = exports.DOMString(V, opts);
+ const n = S.length;
+ const U = [];
+ for (let i = 0; i < n; ++i) {
+ const c = S.charCodeAt(i);
+ if (c < 0xD800 || c > 0xDFFF) {
+ U.push(String.fromCodePoint(c));
+ } else if (0xDC00 <= c && c <= 0xDFFF) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else if (i === n - 1) {
+ U.push(String.fromCodePoint(0xFFFD));
+ } else {
+ const d = S.charCodeAt(i + 1);
+ if (0xDC00 <= d && d <= 0xDFFF) {
+ const a = c & 0x3FF;
+ const b = d & 0x3FF;
+ U.push(String.fromCodePoint((2 << 15) + ((2 << 9) * a) + b));
+ ++i;
+ } else {
+ U.push(String.fromCodePoint(0xFFFD));
+ }
+ }
+ }
+ return U.join("");
+};
-const punycode = __webpack_require__(916);
-const regexes = __webpack_require__(3820);
-const mappingTable = __webpack_require__(3821);
+exports.object = (V, opts) => {
+ if (type(V) !== "Object") {
+ throw new TypeError(_("is not an object", opts));
+ }
-function containsNonASCII(str) {
- return /[^\x00-\x7F]/.test(str);
-}
+ return V;
+};
-function findStatus(val, { useSTD3ASCIIRules }) {
- let start = 0;
- let end = mappingTable.length - 1;
+// Not exported, but used in Function and VoidFunction.
- while (start <= end) {
- const mid = Math.floor((start + end) / 2);
-
- const target = mappingTable[mid];
- if (target[0][0] <= val && target[0][1] >= val) {
- if (target[1].startsWith("disallowed_STD3_")) {
- const newStatus = useSTD3ASCIIRules ? "disallowed" : target[1].slice(16);
- return [newStatus, ...target.slice(2)];
- }
- return target.slice(1);
- } else if (target[0][0] > val) {
- end = mid - 1;
- } else {
- start = mid + 1;
+// Neither Function nor VoidFunction is defined with [TreatNonObjectAsNull], so
+// handling for that is omitted.
+function convertCallbackFunction(V, opts) {
+ if (typeof V !== "function") {
+ throw new TypeError(_("is not a function", opts));
}
- }
-
- return null;
+ return V;
}
-function mapChars(domainName, { useSTD3ASCIIRules, processingOption }) {
- let hasError = false;
- let processed = "";
-
- for (const ch of domainName) {
- const [status, mapping] = findStatus(ch.codePointAt(0), { useSTD3ASCIIRules });
-
- switch (status) {
- case "disallowed":
- hasError = true;
- processed += ch;
- break;
- case "ignored":
- break;
- case "mapped":
- processed += mapping;
- break;
- case "deviation":
- if (processingOption === "transitional") {
- processed += mapping;
- } else {
- processed += ch;
+[
+ Error,
+ ArrayBuffer, // The IsDetachedBuffer abstract operation is not exposed in JS
+ DataView, Int8Array, Int16Array, Int32Array, Uint8Array,
+ Uint16Array, Uint32Array, Uint8ClampedArray, Float32Array, Float64Array
+].forEach(func => {
+ const name = func.name;
+ const article = /^[AEIOU]/.test(name) ? "an" : "a";
+ exports[name] = (V, opts) => {
+ if (!(V instanceof func)) {
+ throw new TypeError(_(`is not ${article} ${name} object`, opts));
}
- break;
- case "valid":
- processed += ch;
- break;
- }
- }
-
- return {
- string: processed,
- error: hasError
- };
-}
-function validateLabel(label, { checkHyphens, checkBidi, checkJoiners, processingOption, useSTD3ASCIIRules }) {
- if (label.normalize("NFC") !== label) {
- return false;
- }
+ return V;
+ };
+});
- const codePoints = Array.from(label);
+// Common definitions
- if (checkHyphens) {
- if ((codePoints[2] === "-" && codePoints[3] === "-") ||
- (label.startsWith("-") || label.endsWith("-"))) {
- return false;
+exports.ArrayBufferView = (V, opts) => {
+ if (!ArrayBuffer.isView(V)) {
+ throw new TypeError(_("is not a view on an ArrayBuffer object", opts));
}
- }
- if (label.includes(".") ||
- (codePoints.length > 0 && regexes.combiningMarks.test(codePoints[0]))) {
- return false;
- }
+ return V;
+};
- for (const ch of codePoints) {
- const [status] = findStatus(ch.codePointAt(0), { useSTD3ASCIIRules });
- if ((processingOption === "transitional" && status !== "valid") ||
- (processingOption === "nontransitional" &&
- status !== "valid" && status !== "deviation")) {
- return false;
+exports.BufferSource = (V, opts) => {
+ if (!(ArrayBuffer.isView(V) || V instanceof ArrayBuffer)) {
+ throw new TypeError(_("is not an ArrayBuffer object or a view on one", opts));
}
- }
- // https://tools.ietf.org/html/rfc5892#appendix-A
- if (checkJoiners) {
- let last = 0;
- for (const [i, ch] of codePoints.entries()) {
- if (ch === "\u200C" || ch === "\u200D") {
- if (i > 0) {
- if (regexes.combiningClassVirama.test(codePoints[i - 1])) {
- continue;
- }
- if (ch === "\u200C") {
- // TODO: make this more efficient
- const next = codePoints.indexOf("\u200C", i + 1);
- const test = next < 0 ? codePoints.slice(last) : codePoints.slice(last, next);
- if (regexes.validZWNJ.test(test.join(""))) {
- last = i + 1;
- continue;
- }
- }
- }
- return false;
- }
- }
- }
+ return V;
+};
- // https://tools.ietf.org/html/rfc5893#section-2
- if (checkBidi) {
- let rtl;
+exports.DOMTimeStamp = exports["unsigned long long"];
- // 1
- if (regexes.bidiS1LTR.test(codePoints[0])) {
- rtl = false;
- } else if (regexes.bidiS1RTL.test(codePoints[0])) {
- rtl = true;
- } else {
- return false;
- }
+exports.Function = convertCallbackFunction;
- if (rtl) {
- // 2-4
- if (!regexes.bidiS2.test(label) ||
- !regexes.bidiS3.test(label) ||
- (regexes.bidiS4EN.test(label) && regexes.bidiS4AN.test(label))) {
- return false;
- }
- } else if (!regexes.bidiS5.test(label) ||
- !regexes.bidiS6.test(label)) { // 5-6
- return false;
- }
- }
+exports.VoidFunction = convertCallbackFunction;
- return true;
-}
-function isBidiDomain(labels) {
- const domain = labels.map(label => {
- if (label.startsWith("xn--")) {
- try {
- return punycode.decode(label.substring(4));
- } catch (err) {
- return "";
- }
- }
- return label;
- }).join(".");
- return regexes.bidiDomain.test(domain);
-}
+/***/ }),
-function processing(domainName, options) {
- const { processingOption } = options;
+/***/ 3810:
+/***/ (function(module, exports, __webpack_require__) {
- // 1. Map.
- let { string, error } = mapChars(domainName, options);
+"use strict";
- // 2. Normalize.
- string = string.normalize("NFC");
- // 3. Break.
- const labels = string.split(".");
- const isBidi = isBidiDomain(labels);
+// Returns "Type(value) is Object" in ES terminology.
+function isObject(value) {
+ return typeof value === "object" && value !== null || typeof value === "function";
+}
- // 4. Convert/Validate.
- for (const [i, origLabel] of labels.entries()) {
- let label = origLabel;
- let curProcessing = processingOption;
- if (label.startsWith("xn--")) {
- try {
- label = punycode.decode(label.substring(4));
- labels[i] = label;
- } catch (err) {
- error = true;
- continue;
- }
- curProcessing = "nontransitional";
- }
+function hasOwn(obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+}
- // No need to validate if we already know there is an error.
- if (error) {
- continue;
+const getOwnPropertyDescriptors = typeof Object.getOwnPropertyDescriptors === "function" ?
+ Object.getOwnPropertyDescriptors :
+ // Polyfill exists until we require Node.js v8.x
+ // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
+ obj => {
+ if (obj === undefined || obj === null) {
+ throw new TypeError("Cannot convert undefined or null to object");
}
- const validation = validateLabel(label, Object.assign({}, options, {
- processingOption: curProcessing,
- checkBidi: options.checkBidi && isBidi
- }));
- if (!validation) {
- error = true;
+ obj = Object(obj);
+ const ownKeys = Reflect.ownKeys(obj);
+ const descriptors = {};
+ for (const key of ownKeys) {
+ const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
+ if (descriptor !== undefined) {
+ Reflect.defineProperty(descriptors, key, {
+ value: descriptor,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+ }
}
- }
-
- return {
- string: labels.join("."),
- error
+ return descriptors;
};
-}
-function toASCII(domainName, {
- checkHyphens = false,
- checkBidi = false,
- checkJoiners = false,
- useSTD3ASCIIRules = false,
- processingOption = "nontransitional",
- verifyDNSLength = false
-} = {}) {
- if (processingOption !== "transitional" && processingOption !== "nontransitional") {
- throw new RangeError("processingOption must be either transitional or nontransitional");
+const wrapperSymbol = Symbol("wrapper");
+const implSymbol = Symbol("impl");
+const sameObjectCaches = Symbol("SameObject caches");
+
+function getSameObject(wrapper, prop, creator) {
+ if (!wrapper[sameObjectCaches]) {
+ wrapper[sameObjectCaches] = Object.create(null);
}
- const result = processing(domainName, {
- processingOption,
- checkHyphens,
- checkBidi,
- checkJoiners,
- useSTD3ASCIIRules
- });
- let labels = result.string.split(".");
- labels = labels.map(l => {
- if (containsNonASCII(l)) {
- try {
- return "xn--" + punycode.encode(l);
- } catch (e) {
- result.error = true;
- }
- }
- return l;
- });
+ if (prop in wrapper[sameObjectCaches]) {
+ return wrapper[sameObjectCaches][prop];
+ }
- if (verifyDNSLength) {
- const total = labels.join(".").length;
- if (total > 253 || total === 0) {
- result.error = true;
- }
+ wrapper[sameObjectCaches][prop] = creator();
+ return wrapper[sameObjectCaches][prop];
+}
- for (let i = 0; i < labels.length; ++i) {
- if (labels[i].length > 63 || labels[i].length === 0) {
- result.error = true;
- break;
- }
- }
- }
+function wrapperForImpl(impl) {
+ return impl ? impl[wrapperSymbol] : null;
+}
- if (result.error) {
- return null;
- }
- return labels.join(".");
+function implForWrapper(wrapper) {
+ return wrapper ? wrapper[implSymbol] : null;
}
-function toUnicode(domainName, {
- checkHyphens = false,
- checkBidi = false,
- checkJoiners = false,
- useSTD3ASCIIRules = false
-} = {}) {
- const result = processing(domainName, {
- processingOption: "nontransitional",
- checkHyphens,
- checkBidi,
- checkJoiners,
- useSTD3ASCIIRules
- });
+function tryWrapperForImpl(impl) {
+ const wrapper = wrapperForImpl(impl);
+ return wrapper ? wrapper : impl;
+}
- return {
- domain: result.string,
- error: result.error
- };
+function tryImplForWrapper(wrapper) {
+ const impl = implForWrapper(wrapper);
+ return impl ? impl : wrapper;
}
-module.exports = {
- toASCII,
- toUnicode
+const iterInternalSymbol = Symbol("internal");
+const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
+
+function isArrayIndexPropName(P) {
+ if (typeof P !== "string") {
+ return false;
+ }
+ const i = P >>> 0;
+ if (i === Math.pow(2, 32) - 1) {
+ return false;
+ }
+ const s = `${i}`;
+ if (P !== s) {
+ return false;
+ }
+ return true;
+}
+
+const supportsPropertyIndex = Symbol("supports property index");
+const supportedPropertyIndices = Symbol("supported property indices");
+const supportsPropertyName = Symbol("supports property name");
+const supportedPropertyNames = Symbol("supported property names");
+const indexedGet = Symbol("indexed property get");
+const indexedSetNew = Symbol("indexed property set new");
+const indexedSetExisting = Symbol("indexed property set existing");
+const namedGet = Symbol("named property get");
+const namedSetNew = Symbol("named property set new");
+const namedSetExisting = Symbol("named property set existing");
+const namedDelete = Symbol("named property delete");
+
+module.exports = exports = {
+ isObject,
+ hasOwn,
+ getOwnPropertyDescriptors,
+ wrapperSymbol,
+ implSymbol,
+ getSameObject,
+ wrapperForImpl,
+ implForWrapper,
+ tryWrapperForImpl,
+ tryImplForWrapper,
+ iterInternalSymbol,
+ IteratorPrototype,
+ isArrayIndexPropName,
+ supportsPropertyIndex,
+ supportedPropertyIndices,
+ supportsPropertyName,
+ supportedPropertyNames,
+ indexedGet,
+ indexedSetNew,
+ indexedSetExisting,
+ namedGet,
+ namedSetNew,
+ namedSetExisting,
+ namedDelete
};
/***/ }),
-/***/ 3820:
+/***/ 3811:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-const combiningMarks = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11000}-\u{11002}\u{11038}-\u{11046}\u{1107F}-\u{11082}\u{110B0}-\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{11134}\u{11173}\u{11180}-\u{11182}\u{111B3}-\u{111C0}\u{111CA}-\u{111CC}\u{1122C}-\u{11237}\u{1123E}\u{112DF}-\u{112EA}\u{11300}-\u{11303}\u{1133C}\u{1133E}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11357}\u{11362}\u{11363}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11435}-\u{11446}\u{114B0}-\u{114C3}\u{115AF}-\u{115B5}\u{115B8}-\u{115C0}\u{115DC}\u{115DD}\u{11630}-\u{11640}\u{116AB}-\u{116B7}\u{1171D}-\u{1172B}\u{11A01}-\u{11A0A}\u{11A33}-\u{11A39}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A5B}\u{11A8A}-\u{11A99}\u{11C2F}-\u{11C36}\u{11C38}-\u{11C3F}\u{11C92}-\u{11CA7}\u{11CA9}-\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F51}-\u{16F7E}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D165}-\u{1D169}\u{1D16D}-\u{1D172}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]/u;
-const combiningClassVirama = /[\u094D\u09CD\u0A4D\u0ACD\u0B4D\u0BCD\u0C4D\u0CCD\u0D3B\u0D3C\u0D4D\u0DCA\u0E3A\u0F84\u1039\u103A\u1714\u1734\u17D2\u1A60\u1B44\u1BAA\u1BAB\u1BF2\u1BF3\u2D7F\uA806\uA8C4\uA953\uA9C0\uAAF6\uABED\u{10A3F}\u{11046}\u{1107F}\u{110B9}\u{11133}\u{11134}\u{111C0}\u{11235}\u{112EA}\u{1134D}\u{11442}\u{114C2}\u{115BF}\u{1163F}\u{116B6}\u{1172B}\u{11A34}\u{11A47}\u{11A99}\u{11C3F}\u{11D44}\u{11D45}]/u;
-const validZWNJ = /[\u0620\u0626\u0628\u062A-\u062E\u0633-\u063F\u0641-\u0647\u0649\u064A\u066E\u066F\u0678-\u0687\u069A-\u06BF\u06C1\u06C2\u06CC\u06CE\u06D0\u06D1\u06FA-\u06FC\u06FF\u0712-\u0714\u071A-\u071D\u071F-\u0727\u0729\u072B\u072D\u072E\u074E-\u0758\u075C-\u076A\u076D-\u0770\u0772\u0775-\u0777\u077A-\u077F\u07CA-\u07EA\u0841-\u0845\u0848\u084A-\u0853\u0855\u0860\u0862-\u0865\u0868\u08A0-\u08A9\u08AF\u08B0\u08B3\u08B4\u08B6-\u08B8\u08BA-\u08BD\u1807\u1820-\u1877\u1887-\u18A8\u18AA\uA840-\uA872\u{10AC0}-\u{10AC4}\u{10ACD}\u{10AD3}-\u{10ADC}\u{10ADE}-\u{10AE0}\u{10AEB}-\u{10AEE}\u{10B80}\u{10B82}\u{10B86}-\u{10B88}\u{10B8A}\u{10B8B}\u{10B8D}\u{10B90}\u{10BAD}\u{10BAE}\u{1E900}-\u{1E943}][\xAD\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u061C\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200B\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFEFF\uFFF9-\uFFFB\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{110BD}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C3F}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*\u200C[\xAD\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u061C\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200B\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFEFF\uFFF9-\uFFFB\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{110BD}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C3F}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*[\u0620\u0622-\u063F\u0641-\u064A\u066E\u066F\u0671-\u0673\u0675-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u077F\u07CA-\u07EA\u0840-\u0855\u0860\u0862-\u0865\u0867-\u086A\u08A0-\u08AC\u08AE-\u08B4\u08B6-\u08BD\u1807\u1820-\u1877\u1887-\u18A8\u18AA\uA840-\uA871\u{10AC0}-\u{10AC5}\u{10AC7}\u{10AC9}\u{10ACA}\u{10ACE}-\u{10AD6}\u{10AD8}-\u{10AE1}\u{10AE4}\u{10AEB}-\u{10AEF}\u{10B80}-\u{10B91}\u{10BA9}-\u{10BAE}\u{1E900}-\u{1E943}]/u;
-const bidiDomain = /[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0600-\u0605\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u0660-\u0669\u066B-\u066F\u0671-\u06D5\u06DD\u06E5\u06E6\u06EE\u06EF\u06FA-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08E2\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}]/u;
-const bidiS1LTR = /[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02BB-\u02C1\u02D0\u02D1\u02E0-\u02E4\u02EE\u0370-\u0373\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0482\u048A-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u0903-\u0939\u093B\u093D-\u0940\u0949-\u094C\u094E-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C0\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09FA\u09FC\u09FD\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A40\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC0\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0\u0AE1\u0AE6-\u0AF0\u0AF9\u0B02\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0BE6-\u0BF2\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C41-\u0C44\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C7F\u0C80\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D4F\u0D54-\u0D61\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E4F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F17\u0F1A-\u0F34\u0F36\u0F38\u0F3E-\u0F47\u0F49-\u0F6C\u0F7F\u0F85\u0F88-\u0F8C\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE-\u0FDA\u1000-\u102C\u1031\u1038\u103B\u103C\u103F-\u1057\u105A-\u105D\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108C\u108E-\u109C\u109E-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1360-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u167F\u1681-\u169A\u16A0-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17B6\u17BE-\u17C5\u17C7\u17C8\u17D4-\u17DA\u17DC\u17E0-\u17E9\u1810-\u1819\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A19\u1A1A\u1A1E-\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1A80-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1B04-\u1B33\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B4B\u1B50-\u1B6A\u1B74-\u1B7C\u1B82-\u1BA1\u1BA6\u1BA7\u1BAA\u1BAE-\u1BE5\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1BFC-\u1C2B\u1C34\u1C35\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200E\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u214F\u2160-\u2188\u2336-\u237A\u2395\u249C-\u24E9\u26AC\u2800-\u28FF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u302E\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31F0-\u321C\u3220-\u324F\u3260-\u327B\u327F-\u32B0\u32C0-\u32CB\u32D0-\u32FE\u3300-\u3376\u337B-\u33DD\u33E0-\u33FE\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA60C\uA610-\uA62B\uA640-\uA66E\uA680-\uA69D\uA6A0-\uA6EF\uA6F2-\uA6F7\uA722-\uA787\uA789-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA824\uA827\uA830-\uA837\uA840-\uA873\uA880-\uA8C3\uA8CE-\uA8D9\uA8F2-\uA8FD\uA900-\uA925\uA92E-\uA946\uA952\uA953\uA95F-\uA97C\uA983-\uA9B2\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA2F\uAA30\uAA33\uAA34\uAA40-\uAA42\uAA44-\uAA4B\uAA4D\uAA50-\uAA59\uAA5C-\uAA7B\uAA7D-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAAEB\uAAEE-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABE4\uABE6\uABE7\uABE9-\uABEC\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1013F}\u{1018D}\u{1018E}\u{101D0}-\u{101FC}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{11000}\u{11002}-\u{11037}\u{11047}-\u{1104D}\u{11066}-\u{1106F}\u{11082}-\u{110B2}\u{110B7}\u{110B8}\u{110BB}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11103}-\u{11126}\u{1112C}\u{11136}-\u{11143}\u{11150}-\u{11172}\u{11174}-\u{11176}\u{11182}-\u{111B5}\u{111BF}-\u{111C9}\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1122E}\u{11232}\u{11233}\u{11235}\u{11238}-\u{1123D}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112DE}\u{112E0}-\u{112E2}\u{112F0}-\u{112F9}\u{11302}\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}-\u{1133F}\u{11341}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11400}-\u{11437}\u{11440}\u{11441}\u{11445}\u{11447}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114B2}\u{114B9}\u{114BB}-\u{114BE}\u{114C1}\u{114C4}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B1}\u{115B8}-\u{115BB}\u{115BE}\u{115C1}-\u{115DB}\u{11600}-\u{11632}\u{1163B}\u{1163C}\u{1163E}\u{11641}-\u{11644}\u{11650}-\u{11659}\u{11680}-\u{116AA}\u{116AC}\u{116AE}\u{116AF}\u{116B6}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{11720}\u{11721}\u{11726}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}\u{11A07}\u{11A08}\u{11A0B}-\u{11A32}\u{11A39}\u{11A3A}\u{11A3F}-\u{11A46}\u{11A50}\u{11A57}\u{11A58}\u{11A5C}-\u{11A83}\u{11A86}-\u{11A89}\u{11A97}\u{11A9A}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2F}\u{11C3E}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11CA9}\u{11CB1}\u{11CB4}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF5}\u{16B00}-\u{16B2F}\u{16B37}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}\u{1BC9F}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D166}\u{1D16A}-\u{1D172}\u{1D183}\u{1D184}\u{1D18C}-\u{1D1A9}\u{1D1AE}-\u{1D1E8}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6DA}\u{1D6DC}-\u{1D714}\u{1D716}-\u{1D74E}\u{1D750}-\u{1D788}\u{1D78A}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1D800}-\u{1D9FF}\u{1DA37}-\u{1DA3A}\u{1DA6D}-\u{1DA74}\u{1DA76}-\u{1DA83}\u{1DA85}-\u{1DA8B}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F169}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]/u;
-const bidiS1RTL = /[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}]/u;
-const bidiS2 = /^[\0-\x08\x0E-\x1B!-@\[-`\{-\x84\x86-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02B9\u02BA\u02C2-\u02CF\u02D2-\u02DF\u02E5-\u02ED\u02EF-\u036F\u0374\u0375\u037E\u0384\u0385\u0387\u03F6\u0483-\u0489\u058A\u058D-\u058F\u0591-\u05C7\u05D0-\u05EA\u05F0-\u05F4\u0600-\u061C\u061E-\u070D\u070F-\u074A\u074D-\u07B1\u07C0-\u07FA\u0800-\u082D\u0830-\u083E\u0840-\u085B\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09F2\u09F3\u09FB\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AF1\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0BF3-\u0BFA\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C78-\u0C7E\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E3F\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39-\u0F3D\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1390-\u1399\u1400\u169B\u169C\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DB\u17DD\u17F0-\u17F9\u1800-\u180E\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1940\u1944\u1945\u19DE-\u19FF\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u200B-\u200D\u200F-\u2027\u202F-\u205E\u2060-\u2064\u206A-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BF\u20D0-\u20F0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u2150-\u215F\u2189-\u218B\u2190-\u2335\u237B-\u2394\u2396-\u2426\u2440-\u244A\u2460-\u249B\u24EA-\u26AB\u26AD-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD2\u2BEC-\u2BEF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF9-\u2CFF\u2D7F\u2DE0-\u2E49\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u3004\u3008-\u3020\u302A-\u302D\u3030\u3036\u3037\u303D-\u303F\u3099-\u309C\u30A0\u30FB\u31C0-\u31E3\u321D\u321E\u3250-\u325F\u327C-\u327E\u32B1-\u32BF\u32CC-\u32CF\u3377-\u337A\u33DE\u33DF\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA60D-\uA60F\uA66F-\uA67F\uA69E\uA69F\uA6F0\uA6F1\uA700-\uA721\uA788\uA802\uA806\uA80B\uA825\uA826\uA828-\uA82B\uA838\uA839\uA874-\uA877\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3F\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE00-\uFE19\uFE20-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFE70-\uFE74\uFE76-\uFEFC\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD\u{10101}\u{10140}-\u{1018C}\u{10190}-\u{1019B}\u{101A0}\u{101FD}\u{102E0}-\u{102FB}\u{10376}-\u{1037A}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{1091F}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A38}-\u{10A3A}\u{10A3F}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE6}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B39}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{11001}\u{11038}-\u{11046}\u{11052}-\u{11065}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{11660}-\u{1166C}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D200}-\u{1D245}\u{1D300}-\u{1D356}\u{1D6DB}\u{1D715}\u{1D74F}\u{1D789}\u{1D7C3}\u{1D7CE}-\u{1D7FF}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8D6}\u{1E900}-\u{1E94A}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1EEF0}\u{1EEF1}\u{1F000}-\u{1F02B}\u{1F030}-\u{1F093}\u{1F0A0}-\u{1F0AE}\u{1F0B1}-\u{1F0BF}\u{1F0C1}-\u{1F0CF}\u{1F0D1}-\u{1F0F5}\u{1F100}-\u{1F10C}\u{1F16A}\u{1F16B}\u{1F260}-\u{1F265}\u{1F300}-\u{1F6D4}\u{1F6E0}-\u{1F6EC}\u{1F6F0}-\u{1F6F8}\u{1F700}-\u{1F773}\u{1F780}-\u{1F7D4}\u{1F800}-\u{1F80B}\u{1F810}-\u{1F847}\u{1F850}-\u{1F859}\u{1F860}-\u{1F887}\u{1F890}-\u{1F8AD}\u{1F900}-\u{1F90B}\u{1F910}-\u{1F93E}\u{1F940}-\u{1F94C}\u{1F950}-\u{1F96B}\u{1F980}-\u{1F997}\u{1F9C0}\u{1F9D0}-\u{1F9E6}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*$/u;
-const bidiS3 = /[0-9\xB2\xB3\xB9\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0600-\u0605\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u0660-\u0669\u066B-\u066F\u0671-\u06D5\u06DD\u06E5\u06E6\u06EE-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08E2\u200F\u2070\u2074-\u2079\u2080-\u2089\u2488-\u249B\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\u{102E1}-\u{102FB}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{1D7CE}-\u{1D7FF}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1F100}-\u{1F10A}][\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D167}-\u{1D169}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]*$/u;
-const bidiS4EN = /[0-9\xB2\xB3\xB9\u06F0-\u06F9\u2070\u2074-\u2079\u2080-\u2089\u2488-\u249B\uFF10-\uFF19\u{102E1}-\u{102FB}\u{1D7CE}-\u{1D7FF}\u{1F100}-\u{1F10A}]/u;
-const bidiS4AN = /[\u0600-\u0605\u0660-\u0669\u066B\u066C\u06DD\u08E2\u{10E60}-\u{10E7E}]/u;
-const bidiS5 = /^[\0-\x08\x0E-\x1B!-\x84\x86-\u0377\u037A-\u037F\u0384-\u038A\u038C\u038E-\u03A1\u03A3-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u058A\u058D-\u058F\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0606\u0607\u0609\u060A\u060C\u060E-\u061A\u064B-\u065F\u066A\u0670\u06D6-\u06DC\u06DE-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07F6-\u07F9\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FD\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E3A\u0E3F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FDA\u1000-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u13A0-\u13F5\u13F8-\u13FD\u1400-\u167F\u1681-\u169C\u16A0-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1736\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u1800-\u180E\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE-\u1A1B\u1A1E-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1AB0-\u1ABE\u1B00-\u1B4B\u1B50-\u1B7C\u1B80-\u1BF3\u1BFC-\u1C37\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD0-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u200B-\u200E\u2010-\u2027\u202F-\u205E\u2060-\u2064\u206A-\u2071\u2074-\u208E\u2090-\u209C\u20A0-\u20BF\u20D0-\u20F0\u2100-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD2\u2BEC-\u2BEF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CF3\u2CF9-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2E49\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303F\u3041-\u3096\u3099-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u32FE\u3300-\u4DB5\u4DC0-\u9FEA\uA000-\uA48C\uA490-\uA4C6\uA4D0-\uA62B\uA640-\uA6F7\uA700-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA82B\uA830-\uA839\uA840-\uA877\uA880-\uA8C5\uA8CE-\uA8D9\uA8E0-\uA8FD\uA900-\uA953\uA95F-\uA97C\uA980-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAAC2\uAADB-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1E\uFB29\uFD3E\uFD3F\uFDFD\uFE00-\uFE19\uFE20-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}-\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1018E}\u{10190}-\u{1019B}\u{101A0}\u{101D0}-\u{101FD}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{102E0}-\u{102FB}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{1037A}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{1091F}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{10B39}-\u{10B3F}\u{11000}-\u{1104D}\u{11052}-\u{1106F}\u{1107F}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11100}-\u{11134}\u{11136}-\u{11143}\u{11150}-\u{11176}\u{11180}-\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1123E}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112EA}\u{112F0}-\u{112F9}\u{11300}-\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133C}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11400}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B5}\u{115B8}-\u{115DD}\u{11600}-\u{11644}\u{11650}-\u{11659}\u{11660}-\u{1166C}\u{11680}-\u{116B7}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{1171D}-\u{1172B}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}-\u{11A47}\u{11A50}-\u{11A83}\u{11A86}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C36}\u{11C38}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11C92}-\u{11CA7}\u{11CA9}-\u{11CB6}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D47}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF0}-\u{16AF5}\u{16B00}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F8F}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}-\u{1BCA3}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D1E8}\u{1D200}-\u{1D245}\u{1D300}-\u{1D356}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D7CB}\u{1D7CE}-\u{1DA8B}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{1EEF0}\u{1EEF1}\u{1F000}-\u{1F02B}\u{1F030}-\u{1F093}\u{1F0A0}-\u{1F0AE}\u{1F0B1}-\u{1F0BF}\u{1F0C1}-\u{1F0CF}\u{1F0D1}-\u{1F0F5}\u{1F100}-\u{1F10C}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F16B}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{1F260}-\u{1F265}\u{1F300}-\u{1F6D4}\u{1F6E0}-\u{1F6EC}\u{1F6F0}-\u{1F6F8}\u{1F700}-\u{1F773}\u{1F780}-\u{1F7D4}\u{1F800}-\u{1F80B}\u{1F810}-\u{1F847}\u{1F850}-\u{1F859}\u{1F860}-\u{1F887}\u{1F890}-\u{1F8AD}\u{1F900}-\u{1F90B}\u{1F910}-\u{1F93E}\u{1F940}-\u{1F94C}\u{1F950}-\u{1F96B}\u{1F980}-\u{1F997}\u{1F9C0}\u{1F9D0}-\u{1F9E6}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]*$/u;
-const bidiS6 = /[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02BB-\u02C1\u02D0\u02D1\u02E0-\u02E4\u02EE\u0370-\u0373\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0482\u048A-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u06F0-\u06F9\u0903-\u0939\u093B\u093D-\u0940\u0949-\u094C\u094E-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C0\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09FA\u09FC\u09FD\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A40\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC0\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0\u0AE1\u0AE6-\u0AF0\u0AF9\u0B02\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0BE6-\u0BF2\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C41-\u0C44\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C7F\u0C80\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D4F\u0D54-\u0D61\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E4F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F17\u0F1A-\u0F34\u0F36\u0F38\u0F3E-\u0F47\u0F49-\u0F6C\u0F7F\u0F85\u0F88-\u0F8C\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE-\u0FDA\u1000-\u102C\u1031\u1038\u103B\u103C\u103F-\u1057\u105A-\u105D\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108C\u108E-\u109C\u109E-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1360-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u167F\u1681-\u169A\u16A0-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17B6\u17BE-\u17C5\u17C7\u17C8\u17D4-\u17DA\u17DC\u17E0-\u17E9\u1810-\u1819\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A19\u1A1A\u1A1E-\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1A80-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1B04-\u1B33\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B4B\u1B50-\u1B6A\u1B74-\u1B7C\u1B82-\u1BA1\u1BA6\u1BA7\u1BAA\u1BAE-\u1BE5\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1BFC-\u1C2B\u1C34\u1C35\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200E\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u214F\u2160-\u2188\u2336-\u237A\u2395\u2488-\u24E9\u26AC\u2800-\u28FF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u302E\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31F0-\u321C\u3220-\u324F\u3260-\u327B\u327F-\u32B0\u32C0-\u32CB\u32D0-\u32FE\u3300-\u3376\u337B-\u33DD\u33E0-\u33FE\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA60C\uA610-\uA62B\uA640-\uA66E\uA680-\uA69D\uA6A0-\uA6EF\uA6F2-\uA6F7\uA722-\uA787\uA789-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA824\uA827\uA830-\uA837\uA840-\uA873\uA880-\uA8C3\uA8CE-\uA8D9\uA8F2-\uA8FD\uA900-\uA925\uA92E-\uA946\uA952\uA953\uA95F-\uA97C\uA983-\uA9B2\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA2F\uAA30\uAA33\uAA34\uAA40-\uAA42\uAA44-\uAA4B\uAA4D\uAA50-\uAA59\uAA5C-\uAA7B\uAA7D-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAAEB\uAAEE-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABE4\uABE6\uABE7\uABE9-\uABEC\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1013F}\u{1018D}\u{1018E}\u{101D0}-\u{101FC}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{102E1}-\u{102FB}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{11000}\u{11002}-\u{11037}\u{11047}-\u{1104D}\u{11066}-\u{1106F}\u{11082}-\u{110B2}\u{110B7}\u{110B8}\u{110BB}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11103}-\u{11126}\u{1112C}\u{11136}-\u{11143}\u{11150}-\u{11172}\u{11174}-\u{11176}\u{11182}-\u{111B5}\u{111BF}-\u{111C9}\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1122E}\u{11232}\u{11233}\u{11235}\u{11238}-\u{1123D}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112DE}\u{112E0}-\u{112E2}\u{112F0}-\u{112F9}\u{11302}\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}-\u{1133F}\u{11341}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11400}-\u{11437}\u{11440}\u{11441}\u{11445}\u{11447}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114B2}\u{114B9}\u{114BB}-\u{114BE}\u{114C1}\u{114C4}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B1}\u{115B8}-\u{115BB}\u{115BE}\u{115C1}-\u{115DB}\u{11600}-\u{11632}\u{1163B}\u{1163C}\u{1163E}\u{11641}-\u{11644}\u{11650}-\u{11659}\u{11680}-\u{116AA}\u{116AC}\u{116AE}\u{116AF}\u{116B6}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{11720}\u{11721}\u{11726}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}\u{11A07}\u{11A08}\u{11A0B}-\u{11A32}\u{11A39}\u{11A3A}\u{11A3F}-\u{11A46}\u{11A50}\u{11A57}\u{11A58}\u{11A5C}-\u{11A83}\u{11A86}-\u{11A89}\u{11A97}\u{11A9A}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2F}\u{11C3E}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11CA9}\u{11CB1}\u{11CB4}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF5}\u{16B00}-\u{16B2F}\u{16B37}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}\u{1BC9F}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D166}\u{1D16A}-\u{1D172}\u{1D183}\u{1D184}\u{1D18C}-\u{1D1A9}\u{1D1AE}-\u{1D1E8}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6DA}\u{1D6DC}-\u{1D714}\u{1D716}-\u{1D74E}\u{1D750}-\u{1D788}\u{1D78A}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1D7CE}-\u{1D9FF}\u{1DA37}-\u{1DA3A}\u{1DA6D}-\u{1DA74}\u{1DA76}-\u{1DA83}\u{1DA85}-\u{1DA8B}\u{1F100}-\u{1F10A}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F169}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}][\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D167}-\u{1D169}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]*$/u;
+function isASCIIDigit(c) {
+ return c >= 0x30 && c <= 0x39;
+}
-module.exports = {
- combiningMarks,
- combiningClassVirama,
- validZWNJ,
- bidiDomain,
- bidiS1LTR,
- bidiS1RTL,
- bidiS2,
- bidiS3,
- bidiS4EN,
- bidiS4AN,
- bidiS5,
- bidiS6
-};
+function isASCIIAlpha(c) {
+ return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
+}
+function isASCIIAlphanumeric(c) {
+ return isASCIIAlpha(c) || isASCIIDigit(c);
+}
-/***/ }),
+function isASCIIHex(c) {
+ return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
+}
-/***/ 3821:
-/***/ (function(module, exports) {
+module.exports = {
+ isASCIIDigit,
+ isASCIIAlpha,
+ isASCIIAlphanumeric,
+ isASCIIHex
+};
-module.exports = [[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped","a"],[[66,66],"mapped","b"],[[67,67],"mapped","c"],[[68,68],"mapped","d"],[[69,69],"mapped","e"],[[70,70],"mapped","f"],[[71,71],"mapped","g"],[[72,72],"mapped","h"],[[73,73],"mapped","i"],[[74,74],"mapped","j"],[[75,75],"mapped","k"],[[76,76],"mapped","l"],[[77,77],"mapped","m"],[[78,78],"mapped","n"],[[79,79],"mapped","o"],[[80,80],"mapped","p"],[[81,81],"mapped","q"],[[82,82],"mapped","r"],[[83,83],"mapped","s"],[[84,84],"mapped","t"],[[85,85],"mapped","u"],[[86,86],"mapped","v"],[[87,87],"mapped","w"],[[88,88],"mapped","x"],[[89,89],"mapped","y"],[[90,90],"mapped","z"],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped"," "],[[161,167],"valid","","NV8"],[[168,168],"disallowed_STD3_mapped"," ̈"],[[169,169],"valid","","NV8"],[[170,170],"mapped","a"],[[171,172],"valid","","NV8"],[[173,173],"ignored"],[[174,174],"valid","","NV8"],[[175,175],"disallowed_STD3_mapped"," ̄"],[[176,177],"valid","","NV8"],[[178,178],"mapped","2"],[[179,179],"mapped","3"],[[180,180],"disallowed_STD3_mapped"," ́"],[[181,181],"mapped","μ"],[[182,182],"valid","","NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped"," ̧"],[[185,185],"mapped","1"],[[186,186],"mapped","o"],[[187,187],"valid","","NV8"],[[188,188],"mapped","1⁄4"],[[189,189],"mapped","1⁄2"],[[190,190],"mapped","3⁄4"],[[191,191],"valid","","NV8"],[[192,192],"mapped","à"],[[193,193],"mapped","á"],[[194,194],"mapped","â"],[[195,195],"mapped","ã"],[[196,196],"mapped","ä"],[[197,197],"mapped","å"],[[198,198],"mapped","æ"],[[199,199],"mapped","ç"],[[200,200],"mapped","è"],[[201,201],"mapped","é"],[[202,202],"mapped","ê"],[[203,203],"mapped","ë"],[[204,204],"mapped","ì"],[[205,205],"mapped","í"],[[206,206],"mapped","î"],[[207,207],"mapped","ï"],[[208,208],"mapped","ð"],[[209,209],"mapped","ñ"],[[210,210],"mapped","ò"],[[211,211],"mapped","ó"],[[212,212],"mapped","ô"],[[213,213],"mapped","õ"],[[214,214],"mapped","ö"],[[215,215],"valid","","NV8"],[[216,216],"mapped","ø"],[[217,217],"mapped","ù"],[[218,218],"mapped","ú"],[[219,219],"mapped","û"],[[220,220],"mapped","ü"],[[221,221],"mapped","ý"],[[222,222],"mapped","þ"],[[223,223],"deviation","ss"],[[224,246],"valid"],[[247,247],"valid","","NV8"],[[248,255],"valid"],[[256,256],"mapped","ā"],[[257,257],"valid"],[[258,258],"mapped","ă"],[[259,259],"valid"],[[260,260],"mapped","ą"],[[261,261],"valid"],[[262,262],"mapped","ć"],[[263,263],"valid"],[[264,264],"mapped","ĉ"],[[265,265],"valid"],[[266,266],"mapped","ċ"],[[267,267],"valid"],[[268,268],"mapped","č"],[[269,269],"valid"],[[270,270],"mapped","ď"],[[271,271],"valid"],[[272,272],"mapped","đ"],[[273,273],"valid"],[[274,274],"mapped","ē"],[[275,275],"valid"],[[276,276],"mapped","ĕ"],[[277,277],"valid"],[[278,278],"mapped","ė"],[[279,279],"valid"],[[280,280],"mapped","ę"],[[281,281],"valid"],[[282,282],"mapped","ě"],[[283,283],"valid"],[[284,284],"mapped","ĝ"],[[285,285],"valid"],[[286,286],"mapped","ğ"],[[287,287],"valid"],[[288,288],"mapped","ġ"],[[289,289],"valid"],[[290,290],"mapped","ģ"],[[291,291],"valid"],[[292,292],"mapped","ĥ"],[[293,293],"valid"],[[294,294],"mapped","ħ"],[[295,295],"valid"],[[296,296],"mapped","ĩ"],[[297,297],"valid"],[[298,298],"mapped","ī"],[[299,299],"valid"],[[300,300],"mapped","ĭ"],[[301,301],"valid"],[[302,302],"mapped","į"],[[303,303],"valid"],[[304,304],"mapped","i̇"],[[305,305],"valid"],[[306,307],"mapped","ij"],[[308,308],"mapped","ĵ"],[[309,309],"valid"],[[310,310],"mapped","ķ"],[[311,312],"valid"],[[313,313],"mapped","ĺ"],[[314,314],"valid"],[[315,315],"mapped","ļ"],[[316,316],"valid"],[[317,317],"mapped","ľ"],[[318,318],"valid"],[[319,320],"mapped","l·"],[[321,321],"mapped","ł"],[[322,322],"valid"],[[323,323],"mapped","ń"],[[324,324],"valid"],[[325,325],"mapped","ņ"],[[326,326],"valid"],[[327,327],"mapped","ň"],[[328,328],"valid"],[[329,329],"mapped","ʼn"],[[330,330],"mapped","ŋ"],[[331,331],"valid"],[[332,332],"mapped","ō"],[[333,333],"valid"],[[334,334],"mapped","ŏ"],[[335,335],"valid"],[[336,336],"mapped","ő"],[[337,337],"valid"],[[338,338],"mapped","œ"],[[339,339],"valid"],[[340,340],"mapped","ŕ"],[[341,341],"valid"],[[342,342],"mapped","ŗ"],[[343,343],"valid"],[[344,344],"mapped","ř"],[[345,345],"valid"],[[346,346],"mapped","ś"],[[347,347],"valid"],[[348,348],"mapped","ŝ"],[[349,349],"valid"],[[350,350],"mapped","ş"],[[351,351],"valid"],[[352,352],"mapped","š"],[[353,353],"valid"],[[354,354],"mapped","ţ"],[[355,355],"valid"],[[356,356],"mapped","ť"],[[357,357],"valid"],[[358,358],"mapped","ŧ"],[[359,359],"valid"],[[360,360],"mapped","ũ"],[[361,361],"valid"],[[362,362],"mapped","ū"],[[363,363],"valid"],[[364,364],"mapped","ŭ"],[[365,365],"valid"],[[366,366],"mapped","ů"],[[367,367],"valid"],[[368,368],"mapped","ű"],[[369,369],"valid"],[[370,370],"mapped","ų"],[[371,371],"valid"],[[372,372],"mapped","ŵ"],[[373,373],"valid"],[[374,374],"mapped","ŷ"],[[375,375],"valid"],[[376,376],"mapped","ÿ"],[[377,377],"mapped","ź"],[[378,378],"valid"],[[379,379],"mapped","ż"],[[380,380],"valid"],[[381,381],"mapped","ž"],[[382,382],"valid"],[[383,383],"mapped","s"],[[384,384],"valid"],[[385,385],"mapped","ɓ"],[[386,386],"mapped","ƃ"],[[387,387],"valid"],[[388,388],"mapped","ƅ"],[[389,389],"valid"],[[390,390],"mapped","ɔ"],[[391,391],"mapped","ƈ"],[[392,392],"valid"],[[393,393],"mapped","ɖ"],[[394,394],"mapped","ɗ"],[[395,395],"mapped","ƌ"],[[396,397],"valid"],[[398,398],"mapped","ǝ"],[[399,399],"mapped","ə"],[[400,400],"mapped","ɛ"],[[401,401],"mapped","ƒ"],[[402,402],"valid"],[[403,403],"mapped","ɠ"],[[404,404],"mapped","ɣ"],[[405,405],"valid"],[[406,406],"mapped","ɩ"],[[407,407],"mapped","ɨ"],[[408,408],"mapped","ƙ"],[[409,411],"valid"],[[412,412],"mapped","ɯ"],[[413,413],"mapped","ɲ"],[[414,414],"valid"],[[415,415],"mapped","ɵ"],[[416,416],"mapped","ơ"],[[417,417],"valid"],[[418,418],"mapped","ƣ"],[[419,419],"valid"],[[420,420],"mapped","ƥ"],[[421,421],"valid"],[[422,422],"mapped","ʀ"],[[423,423],"mapped","ƨ"],[[424,424],"valid"],[[425,425],"mapped","ʃ"],[[426,427],"valid"],[[428,428],"mapped","ƭ"],[[429,429],"valid"],[[430,430],"mapped","ʈ"],[[431,431],"mapped","ư"],[[432,432],"valid"],[[433,433],"mapped","ʊ"],[[434,434],"mapped","ʋ"],[[435,435],"mapped","ƴ"],[[436,436],"valid"],[[437,437],"mapped","ƶ"],[[438,438],"valid"],[[439,439],"mapped","ʒ"],[[440,440],"mapped","ƹ"],[[441,443],"valid"],[[444,444],"mapped","ƽ"],[[445,451],"valid"],[[452,454],"mapped","dž"],[[455,457],"mapped","lj"],[[458,460],"mapped","nj"],[[461,461],"mapped","ǎ"],[[462,462],"valid"],[[463,463],"mapped","ǐ"],[[464,464],"valid"],[[465,465],"mapped","ǒ"],[[466,466],"valid"],[[467,467],"mapped","ǔ"],[[468,468],"valid"],[[469,469],"mapped","ǖ"],[[470,470],"valid"],[[471,471],"mapped","ǘ"],[[472,472],"valid"],[[473,473],"mapped","ǚ"],[[474,474],"valid"],[[475,475],"mapped","ǜ"],[[476,477],"valid"],[[478,478],"mapped","ǟ"],[[479,479],"valid"],[[480,480],"mapped","ǡ"],[[481,481],"valid"],[[482,482],"mapped","ǣ"],[[483,483],"valid"],[[484,484],"mapped","ǥ"],[[485,485],"valid"],[[486,486],"mapped","ǧ"],[[487,487],"valid"],[[488,488],"mapped","ǩ"],[[489,489],"valid"],[[490,490],"mapped","ǫ"],[[491,491],"valid"],[[492,492],"mapped","ǭ"],[[493,493],"valid"],[[494,494],"mapped","ǯ"],[[495,496],"valid"],[[497,499],"mapped","dz"],[[500,500],"mapped","ǵ"],[[501,501],"valid"],[[502,502],"mapped","ƕ"],[[503,503],"mapped","ƿ"],[[504,504],"mapped","ǹ"],[[505,505],"valid"],[[506,506],"mapped","ǻ"],[[507,507],"valid"],[[508,508],"mapped","ǽ"],[[509,509],"valid"],[[510,510],"mapped","ǿ"],[[511,511],"valid"],[[512,512],"mapped","ȁ"],[[513,513],"valid"],[[514,514],"mapped","ȃ"],[[515,515],"valid"],[[516,516],"mapped","ȅ"],[[517,517],"valid"],[[518,518],"mapped","ȇ"],[[519,519],"valid"],[[520,520],"mapped","ȉ"],[[521,521],"valid"],[[522,522],"mapped","ȋ"],[[523,523],"valid"],[[524,524],"mapped","ȍ"],[[525,525],"valid"],[[526,526],"mapped","ȏ"],[[527,527],"valid"],[[528,528],"mapped","ȑ"],[[529,529],"valid"],[[530,530],"mapped","ȓ"],[[531,531],"valid"],[[532,532],"mapped","ȕ"],[[533,533],"valid"],[[534,534],"mapped","ȗ"],[[535,535],"valid"],[[536,536],"mapped","ș"],[[537,537],"valid"],[[538,538],"mapped","ț"],[[539,539],"valid"],[[540,540],"mapped","ȝ"],[[541,541],"valid"],[[542,542],"mapped","ȟ"],[[543,543],"valid"],[[544,544],"mapped","ƞ"],[[545,545],"valid"],[[546,546],"mapped","ȣ"],[[547,547],"valid"],[[548,548],"mapped","ȥ"],[[549,549],"valid"],[[550,550],"mapped","ȧ"],[[551,551],"valid"],[[552,552],"mapped","ȩ"],[[553,553],"valid"],[[554,554],"mapped","ȫ"],[[555,555],"valid"],[[556,556],"mapped","ȭ"],[[557,557],"valid"],[[558,558],"mapped","ȯ"],[[559,559],"valid"],[[560,560],"mapped","ȱ"],[[561,561],"valid"],[[562,562],"mapped","ȳ"],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped","ⱥ"],[[571,571],"mapped","ȼ"],[[572,572],"valid"],[[573,573],"mapped","ƚ"],[[574,574],"mapped","ⱦ"],[[575,576],"valid"],[[577,577],"mapped","ɂ"],[[578,578],"valid"],[[579,579],"mapped","ƀ"],[[580,580],"mapped","ʉ"],[[581,581],"mapped","ʌ"],[[582,582],"mapped","ɇ"],[[583,583],"valid"],[[584,584],"mapped","ɉ"],[[585,585],"valid"],[[586,586],"mapped","ɋ"],[[587,587],"valid"],[[588,588],"mapped","ɍ"],[[589,589],"valid"],[[590,590],"mapped","ɏ"],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped","h"],[[689,689],"mapped","ɦ"],[[690,690],"mapped","j"],[[691,691],"mapped","r"],[[692,692],"mapped","ɹ"],[[693,693],"mapped","ɻ"],[[694,694],"mapped","ʁ"],[[695,695],"mapped","w"],[[696,696],"mapped","y"],[[697,705],"valid"],[[706,709],"valid","","NV8"],[[710,721],"valid"],[[722,727],"valid","","NV8"],[[728,728],"disallowed_STD3_mapped"," ̆"],[[729,729],"disallowed_STD3_mapped"," ̇"],[[730,730],"disallowed_STD3_mapped"," ̊"],[[731,731],"disallowed_STD3_mapped"," ̨"],[[732,732],"disallowed_STD3_mapped"," ̃"],[[733,733],"disallowed_STD3_mapped"," ̋"],[[734,734],"valid","","NV8"],[[735,735],"valid","","NV8"],[[736,736],"mapped","ɣ"],[[737,737],"mapped","l"],[[738,738],"mapped","s"],[[739,739],"mapped","x"],[[740,740],"mapped","ʕ"],[[741,745],"valid","","NV8"],[[746,747],"valid","","NV8"],[[748,748],"valid"],[[749,749],"valid","","NV8"],[[750,750],"valid"],[[751,767],"valid","","NV8"],[[768,831],"valid"],[[832,832],"mapped","̀"],[[833,833],"mapped","́"],[[834,834],"valid"],[[835,835],"mapped","̓"],[[836,836],"mapped","̈́"],[[837,837],"mapped","ι"],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped","ͱ"],[[881,881],"valid"],[[882,882],"mapped","ͳ"],[[883,883],"valid"],[[884,884],"mapped","ʹ"],[[885,885],"valid"],[[886,886],"mapped","ͷ"],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped"," ι"],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",";"],[[895,895],"mapped","ϳ"],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped"," ́"],[[901,901],"disallowed_STD3_mapped"," ̈́"],[[902,902],"mapped","ά"],[[903,903],"mapped","·"],[[904,904],"mapped","έ"],[[905,905],"mapped","ή"],[[906,906],"mapped","ί"],[[907,907],"disallowed"],[[908,908],"mapped","ό"],[[909,909],"disallowed"],[[910,910],"mapped","ύ"],[[911,911],"mapped","ώ"],[[912,912],"valid"],[[913,913],"mapped","α"],[[914,914],"mapped","β"],[[915,915],"mapped","γ"],[[916,916],"mapped","δ"],[[917,917],"mapped","ε"],[[918,918],"mapped","ζ"],[[919,919],"mapped","η"],[[920,920],"mapped","θ"],[[921,921],"mapped","ι"],[[922,922],"mapped","κ"],[[923,923],"mapped","λ"],[[924,924],"mapped","μ"],[[925,925],"mapped","ν"],[[926,926],"mapped","ξ"],[[927,927],"mapped","ο"],[[928,928],"mapped","π"],[[929,929],"mapped","ρ"],[[930,930],"disallowed"],[[931,931],"mapped","σ"],[[932,932],"mapped","τ"],[[933,933],"mapped","υ"],[[934,934],"mapped","φ"],[[935,935],"mapped","χ"],[[936,936],"mapped","ψ"],[[937,937],"mapped","ω"],[[938,938],"mapped","ϊ"],[[939,939],"mapped","ϋ"],[[940,961],"valid"],[[962,962],"deviation","σ"],[[963,974],"valid"],[[975,975],"mapped","ϗ"],[[976,976],"mapped","β"],[[977,977],"mapped","θ"],[[978,978],"mapped","υ"],[[979,979],"mapped","ύ"],[[980,980],"mapped","ϋ"],[[981,981],"mapped","φ"],[[982,982],"mapped","π"],[[983,983],"valid"],[[984,984],"mapped","ϙ"],[[985,985],"valid"],[[986,986],"mapped","ϛ"],[[987,987],"valid"],[[988,988],"mapped","ϝ"],[[989,989],"valid"],[[990,990],"mapped","ϟ"],[[991,991],"valid"],[[992,992],"mapped","ϡ"],[[993,993],"valid"],[[994,994],"mapped","ϣ"],[[995,995],"valid"],[[996,996],"mapped","ϥ"],[[997,997],"valid"],[[998,998],"mapped","ϧ"],[[999,999],"valid"],[[1000,1000],"mapped","ϩ"],[[1001,1001],"valid"],[[1002,1002],"mapped","ϫ"],[[1003,1003],"valid"],[[1004,1004],"mapped","ϭ"],[[1005,1005],"valid"],[[1006,1006],"mapped","ϯ"],[[1007,1007],"valid"],[[1008,1008],"mapped","κ"],[[1009,1009],"mapped","ρ"],[[1010,1010],"mapped","σ"],[[1011,1011],"valid"],[[1012,1012],"mapped","θ"],[[1013,1013],"mapped","ε"],[[1014,1014],"valid","","NV8"],[[1015,1015],"mapped","ϸ"],[[1016,1016],"valid"],[[1017,1017],"mapped","σ"],[[1018,1018],"mapped","ϻ"],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped","ͻ"],[[1022,1022],"mapped","ͼ"],[[1023,1023],"mapped","ͽ"],[[1024,1024],"mapped","ѐ"],[[1025,1025],"mapped","ё"],[[1026,1026],"mapped","ђ"],[[1027,1027],"mapped","ѓ"],[[1028,1028],"mapped","є"],[[1029,1029],"mapped","ѕ"],[[1030,1030],"mapped","і"],[[1031,1031],"mapped","ї"],[[1032,1032],"mapped","ј"],[[1033,1033],"mapped","љ"],[[1034,1034],"mapped","њ"],[[1035,1035],"mapped","ћ"],[[1036,1036],"mapped","ќ"],[[1037,1037],"mapped","ѝ"],[[1038,1038],"mapped","ў"],[[1039,1039],"mapped","џ"],[[1040,1040],"mapped","а"],[[1041,1041],"mapped","б"],[[1042,1042],"mapped","в"],[[1043,1043],"mapped","г"],[[1044,1044],"mapped","д"],[[1045,1045],"mapped","е"],[[1046,1046],"mapped","ж"],[[1047,1047],"mapped","з"],[[1048,1048],"mapped","и"],[[1049,1049],"mapped","й"],[[1050,1050],"mapped","к"],[[1051,1051],"mapped","л"],[[1052,1052],"mapped","м"],[[1053,1053],"mapped","н"],[[1054,1054],"mapped","о"],[[1055,1055],"mapped","п"],[[1056,1056],"mapped","р"],[[1057,1057],"mapped","с"],[[1058,1058],"mapped","т"],[[1059,1059],"mapped","у"],[[1060,1060],"mapped","ф"],[[1061,1061],"mapped","х"],[[1062,1062],"mapped","ц"],[[1063,1063],"mapped","ч"],[[1064,1064],"mapped","ш"],[[1065,1065],"mapped","щ"],[[1066,1066],"mapped","ъ"],[[1067,1067],"mapped","ы"],[[1068,1068],"mapped","ь"],[[1069,1069],"mapped","э"],[[1070,1070],"mapped","ю"],[[1071,1071],"mapped","я"],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped","ѡ"],[[1121,1121],"valid"],[[1122,1122],"mapped","ѣ"],[[1123,1123],"valid"],[[1124,1124],"mapped","ѥ"],[[1125,1125],"valid"],[[1126,1126],"mapped","ѧ"],[[1127,1127],"valid"],[[1128,1128],"mapped","ѩ"],[[1129,1129],"valid"],[[1130,1130],"mapped","ѫ"],[[1131,1131],"valid"],[[1132,1132],"mapped","ѭ"],[[1133,1133],"valid"],[[1134,1134],"mapped","ѯ"],[[1135,1135],"valid"],[[1136,1136],"mapped","ѱ"],[[1137,1137],"valid"],[[1138,1138],"mapped","ѳ"],[[1139,1139],"valid"],[[1140,1140],"mapped","ѵ"],[[1141,1141],"valid"],[[1142,1142],"mapped","ѷ"],[[1143,1143],"valid"],[[1144,1144],"mapped","ѹ"],[[1145,1145],"valid"],[[1146,1146],"mapped","ѻ"],[[1147,1147],"valid"],[[1148,1148],"mapped","ѽ"],[[1149,1149],"valid"],[[1150,1150],"mapped","ѿ"],[[1151,1151],"valid"],[[1152,1152],"mapped","ҁ"],[[1153,1153],"valid"],[[1154,1154],"valid","","NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid","","NV8"],[[1162,1162],"mapped","ҋ"],[[1163,1163],"valid"],[[1164,1164],"mapped","ҍ"],[[1165,1165],"valid"],[[1166,1166],"mapped","ҏ"],[[1167,1167],"valid"],[[1168,1168],"mapped","ґ"],[[1169,1169],"valid"],[[1170,1170],"mapped","ғ"],[[1171,1171],"valid"],[[1172,1172],"mapped","ҕ"],[[1173,1173],"valid"],[[1174,1174],"mapped","җ"],[[1175,1175],"valid"],[[1176,1176],"mapped","ҙ"],[[1177,1177],"valid"],[[1178,1178],"mapped","қ"],[[1179,1179],"valid"],[[1180,1180],"mapped","ҝ"],[[1181,1181],"valid"],[[1182,1182],"mapped","ҟ"],[[1183,1183],"valid"],[[1184,1184],"mapped","ҡ"],[[1185,1185],"valid"],[[1186,1186],"mapped","ң"],[[1187,1187],"valid"],[[1188,1188],"mapped","ҥ"],[[1189,1189],"valid"],[[1190,1190],"mapped","ҧ"],[[1191,1191],"valid"],[[1192,1192],"mapped","ҩ"],[[1193,1193],"valid"],[[1194,1194],"mapped","ҫ"],[[1195,1195],"valid"],[[1196,1196],"mapped","ҭ"],[[1197,1197],"valid"],[[1198,1198],"mapped","ү"],[[1199,1199],"valid"],[[1200,1200],"mapped","ұ"],[[1201,1201],"valid"],[[1202,1202],"mapped","ҳ"],[[1203,1203],"valid"],[[1204,1204],"mapped","ҵ"],[[1205,1205],"valid"],[[1206,1206],"mapped","ҷ"],[[1207,1207],"valid"],[[1208,1208],"mapped","ҹ"],[[1209,1209],"valid"],[[1210,1210],"mapped","һ"],[[1211,1211],"valid"],[[1212,1212],"mapped","ҽ"],[[1213,1213],"valid"],[[1214,1214],"mapped","ҿ"],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped","ӂ"],[[1218,1218],"valid"],[[1219,1219],"mapped","ӄ"],[[1220,1220],"valid"],[[1221,1221],"mapped","ӆ"],[[1222,1222],"valid"],[[1223,1223],"mapped","ӈ"],[[1224,1224],"valid"],[[1225,1225],"mapped","ӊ"],[[1226,1226],"valid"],[[1227,1227],"mapped","ӌ"],[[1228,1228],"valid"],[[1229,1229],"mapped","ӎ"],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped","ӑ"],[[1233,1233],"valid"],[[1234,1234],"mapped","ӓ"],[[1235,1235],"valid"],[[1236,1236],"mapped","ӕ"],[[1237,1237],"valid"],[[1238,1238],"mapped","ӗ"],[[1239,1239],"valid"],[[1240,1240],"mapped","ә"],[[1241,1241],"valid"],[[1242,1242],"mapped","ӛ"],[[1243,1243],"valid"],[[1244,1244],"mapped","ӝ"],[[1245,1245],"valid"],[[1246,1246],"mapped","ӟ"],[[1247,1247],"valid"],[[1248,1248],"mapped","ӡ"],[[1249,1249],"valid"],[[1250,1250],"mapped","ӣ"],[[1251,1251],"valid"],[[1252,1252],"mapped","ӥ"],[[1253,1253],"valid"],[[1254,1254],"mapped","ӧ"],[[1255,1255],"valid"],[[1256,1256],"mapped","ө"],[[1257,1257],"valid"],[[1258,1258],"mapped","ӫ"],[[1259,1259],"valid"],[[1260,1260],"mapped","ӭ"],[[1261,1261],"valid"],[[1262,1262],"mapped","ӯ"],[[1263,1263],"valid"],[[1264,1264],"mapped","ӱ"],[[1265,1265],"valid"],[[1266,1266],"mapped","ӳ"],[[1267,1267],"valid"],[[1268,1268],"mapped","ӵ"],[[1269,1269],"valid"],[[1270,1270],"mapped","ӷ"],[[1271,1271],"valid"],[[1272,1272],"mapped","ӹ"],[[1273,1273],"valid"],[[1274,1274],"mapped","ӻ"],[[1275,1275],"valid"],[[1276,1276],"mapped","ӽ"],[[1277,1277],"valid"],[[1278,1278],"mapped","ӿ"],[[1279,1279],"valid"],[[1280,1280],"mapped","ԁ"],[[1281,1281],"valid"],[[1282,1282],"mapped","ԃ"],[[1283,1283],"valid"],[[1284,1284],"mapped","ԅ"],[[1285,1285],"valid"],[[1286,1286],"mapped","ԇ"],[[1287,1287],"valid"],[[1288,1288],"mapped","ԉ"],[[1289,1289],"valid"],[[1290,1290],"mapped","ԋ"],[[1291,1291],"valid"],[[1292,1292],"mapped","ԍ"],[[1293,1293],"valid"],[[1294,1294],"mapped","ԏ"],[[1295,1295],"valid"],[[1296,1296],"mapped","ԑ"],[[1297,1297],"valid"],[[1298,1298],"mapped","ԓ"],[[1299,1299],"valid"],[[1300,1300],"mapped","ԕ"],[[1301,1301],"valid"],[[1302,1302],"mapped","ԗ"],[[1303,1303],"valid"],[[1304,1304],"mapped","ԙ"],[[1305,1305],"valid"],[[1306,1306],"mapped","ԛ"],[[1307,1307],"valid"],[[1308,1308],"mapped","ԝ"],[[1309,1309],"valid"],[[1310,1310],"mapped","ԟ"],[[1311,1311],"valid"],[[1312,1312],"mapped","ԡ"],[[1313,1313],"valid"],[[1314,1314],"mapped","ԣ"],[[1315,1315],"valid"],[[1316,1316],"mapped","ԥ"],[[1317,1317],"valid"],[[1318,1318],"mapped","ԧ"],[[1319,1319],"valid"],[[1320,1320],"mapped","ԩ"],[[1321,1321],"valid"],[[1322,1322],"mapped","ԫ"],[[1323,1323],"valid"],[[1324,1324],"mapped","ԭ"],[[1325,1325],"valid"],[[1326,1326],"mapped","ԯ"],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped","ա"],[[1330,1330],"mapped","բ"],[[1331,1331],"mapped","գ"],[[1332,1332],"mapped","դ"],[[1333,1333],"mapped","ե"],[[1334,1334],"mapped","զ"],[[1335,1335],"mapped","է"],[[1336,1336],"mapped","ը"],[[1337,1337],"mapped","թ"],[[1338,1338],"mapped","ժ"],[[1339,1339],"mapped","ի"],[[1340,1340],"mapped","լ"],[[1341,1341],"mapped","խ"],[[1342,1342],"mapped","ծ"],[[1343,1343],"mapped","կ"],[[1344,1344],"mapped","հ"],[[1345,1345],"mapped","ձ"],[[1346,1346],"mapped","ղ"],[[1347,1347],"mapped","ճ"],[[1348,1348],"mapped","մ"],[[1349,1349],"mapped","յ"],[[1350,1350],"mapped","ն"],[[1351,1351],"mapped","շ"],[[1352,1352],"mapped","ո"],[[1353,1353],"mapped","չ"],[[1354,1354],"mapped","պ"],[[1355,1355],"mapped","ջ"],[[1356,1356],"mapped","ռ"],[[1357,1357],"mapped","ս"],[[1358,1358],"mapped","վ"],[[1359,1359],"mapped","տ"],[[1360,1360],"mapped","ր"],[[1361,1361],"mapped","ց"],[[1362,1362],"mapped","ւ"],[[1363,1363],"mapped","փ"],[[1364,1364],"mapped","ք"],[[1365,1365],"mapped","օ"],[[1366,1366],"mapped","ֆ"],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid","","NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped","եւ"],[[1416,1416],"disallowed"],[[1417,1417],"valid","","NV8"],[[1418,1418],"valid","","NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid","","NV8"],[[1423,1423],"valid","","NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid","","NV8"],[[1471,1471],"valid"],[[1472,1472],"valid","","NV8"],[[1473,1474],"valid"],[[1475,1475],"valid","","NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid","","NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid","","NV8"],[[1547,1547],"valid","","NV8"],[[1548,1548],"valid","","NV8"],[[1549,1551],"valid","","NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid","","NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid","","NV8"],[[1567,1567],"valid","","NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid","","NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid","","NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped","اٴ"],[[1654,1654],"mapped","وٴ"],[[1655,1655],"mapped","ۇٴ"],[[1656,1656],"mapped","يٴ"],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid","","NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid","","NV8"],[[1759,1768],"valid"],[[1769,1769],"valid","","NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid","","NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid","","NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid","","NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid","","NV8"],[[2143,2143],"disallowed"],[[2144,2154],"valid"],[[2155,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2229],"disallowed"],[[2230,2237],"valid"],[[2238,2259],"disallowed"],[[2260,2273],"valid"],[[2274,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped","क़"],[[2393,2393],"mapped","ख़"],[[2394,2394],"mapped","ग़"],[[2395,2395],"mapped","ज़"],[[2396,2396],"mapped","ड़"],[[2397,2397],"mapped","ढ़"],[[2398,2398],"mapped","फ़"],[[2399,2399],"mapped","य़"],[[2400,2403],"valid"],[[2404,2405],"valid","","NV8"],[[2406,2415],"valid"],[[2416,2416],"valid","","NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped","ড়"],[[2525,2525],"mapped","ঢ়"],[[2526,2526],"disallowed"],[[2527,2527],"mapped","য়"],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid","","NV8"],[[2555,2555],"valid","","NV8"],[[2556,2556],"valid"],[[2557,2557],"valid","","NV8"],[[2558,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped","ਲ਼"],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped","ਸ਼"],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped","ਖ਼"],[[2650,2650],"mapped","ਗ਼"],[[2651,2651],"mapped","ਜ਼"],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped","ਫ਼"],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid","","NV8"],[[2801,2801],"valid","","NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2815],"valid"],[[2816,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped","ଡ଼"],[[2909,2909],"mapped","ଢ଼"],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid","","NV8"],[[2929,2929],"valid"],[[2930,2935],"valid","","NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid","","NV8"],[[3059,3066],"valid","","NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid","","NV8"],[[3200,3200],"valid"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3327],"disallowed"],[[3328,3328],"valid"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"valid"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3407],"valid","","NV8"],[[3408,3411],"disallowed"],[[3412,3414],"valid"],[[3415,3415],"valid"],[[3416,3422],"valid","","NV8"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid","","NV8"],[[3446,3448],"valid","","NV8"],[[3449,3449],"valid","","NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid","","NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped","ํา"],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid","","NV8"],[[3648,3662],"valid"],[[3663,3663],"valid","","NV8"],[[3664,3673],"valid"],[[3674,3675],"valid","","NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped","ໍາ"],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped","ຫນ"],[[3805,3805],"mapped","ຫມ"],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid","","NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped","་"],[[3853,3863],"valid","","NV8"],[[3864,3865],"valid"],[[3866,3871],"valid","","NV8"],[[3872,3881],"valid"],[[3882,3892],"valid","","NV8"],[[3893,3893],"valid"],[[3894,3894],"valid","","NV8"],[[3895,3895],"valid"],[[3896,3896],"valid","","NV8"],[[3897,3897],"valid"],[[3898,3901],"valid","","NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped","གྷ"],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped","ཌྷ"],[[3918,3921],"valid"],[[3922,3922],"mapped","དྷ"],[[3923,3926],"valid"],[[3927,3927],"mapped","བྷ"],[[3928,3931],"valid"],[[3932,3932],"mapped","ཛྷ"],[[3933,3944],"valid"],[[3945,3945],"mapped","ཀྵ"],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped","ཱི"],[[3956,3956],"valid"],[[3957,3957],"mapped","ཱུ"],[[3958,3958],"mapped","ྲྀ"],[[3959,3959],"mapped","ྲཱྀ"],[[3960,3960],"mapped","ླྀ"],[[3961,3961],"mapped","ླཱྀ"],[[3962,3968],"valid"],[[3969,3969],"mapped","ཱྀ"],[[3970,3972],"valid"],[[3973,3973],"valid","","NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped","ྒྷ"],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped","ྜྷ"],[[3998,4001],"valid"],[[4002,4002],"mapped","ྡྷ"],[[4003,4006],"valid"],[[4007,4007],"mapped","ྦྷ"],[[4008,4011],"valid"],[[4012,4012],"mapped","ྫྷ"],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped","ྐྵ"],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid","","NV8"],[[4038,4038],"valid"],[[4039,4044],"valid","","NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid","","NV8"],[[4047,4047],"valid","","NV8"],[[4048,4049],"valid","","NV8"],[[4050,4052],"valid","","NV8"],[[4053,4056],"valid","","NV8"],[[4057,4058],"valid","","NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid","","NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid","","NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped","ⴧ"],[[4296,4300],"disallowed"],[[4301,4301],"mapped","ⴭ"],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid","","NV8"],[[4348,4348],"mapped","ნ"],[[4349,4351],"valid"],[[4352,4441],"valid","","NV8"],[[4442,4446],"valid","","NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid","","NV8"],[[4515,4519],"valid","","NV8"],[[4520,4601],"valid","","NV8"],[[4602,4607],"valid","","NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid","","NV8"],[[4961,4988],"valid","","NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid","","NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped","Ᏸ"],[[5113,5113],"mapped","Ᏹ"],[[5114,5114],"mapped","Ᏺ"],[[5115,5115],"mapped","Ᏻ"],[[5116,5116],"mapped","Ᏼ"],[[5117,5117],"mapped","Ᏽ"],[[5118,5119],"disallowed"],[[5120,5120],"valid","","NV8"],[[5121,5740],"valid"],[[5741,5742],"valid","","NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid","","NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid","","NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid","","NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid","","NV8"],[[6103,6103],"valid"],[[6104,6107],"valid","","NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid","","NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid","","NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid","","NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid","","NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid","","NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid","","XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid","","NV8"],[[6624,6655],"valid","","NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid","","NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid","","NV8"],[[6823,6823],"valid"],[[6824,6829],"valid","","NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid","","NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid","","NV8"],[[7019,7027],"valid"],[[7028,7036],"valid","","NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid","","NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid","","NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid","","NV8"],[[7296,7296],"mapped","в"],[[7297,7297],"mapped","д"],[[7298,7298],"mapped","о"],[[7299,7299],"mapped","с"],[[7300,7301],"mapped","т"],[[7302,7302],"mapped","ъ"],[[7303,7303],"mapped","ѣ"],[[7304,7304],"mapped","ꙋ"],[[7305,7359],"disallowed"],[[7360,7367],"valid","","NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid","","NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"valid"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped","a"],[[7469,7469],"mapped","æ"],[[7470,7470],"mapped","b"],[[7471,7471],"valid"],[[7472,7472],"mapped","d"],[[7473,7473],"mapped","e"],[[7474,7474],"mapped","ǝ"],[[7475,7475],"mapped","g"],[[7476,7476],"mapped","h"],[[7477,7477],"mapped","i"],[[7478,7478],"mapped","j"],[[7479,7479],"mapped","k"],[[7480,7480],"mapped","l"],[[7481,7481],"mapped","m"],[[7482,7482],"mapped","n"],[[7483,7483],"valid"],[[7484,7484],"mapped","o"],[[7485,7485],"mapped","ȣ"],[[7486,7486],"mapped","p"],[[7487,7487],"mapped","r"],[[7488,7488],"mapped","t"],[[7489,7489],"mapped","u"],[[7490,7490],"mapped","w"],[[7491,7491],"mapped","a"],[[7492,7492],"mapped","ɐ"],[[7493,7493],"mapped","ɑ"],[[7494,7494],"mapped","ᴂ"],[[7495,7495],"mapped","b"],[[7496,7496],"mapped","d"],[[7497,7497],"mapped","e"],[[7498,7498],"mapped","ə"],[[7499,7499],"mapped","ɛ"],[[7500,7500],"mapped","ɜ"],[[7501,7501],"mapped","g"],[[7502,7502],"valid"],[[7503,7503],"mapped","k"],[[7504,7504],"mapped","m"],[[7505,7505],"mapped","ŋ"],[[7506,7506],"mapped","o"],[[7507,7507],"mapped","ɔ"],[[7508,7508],"mapped","ᴖ"],[[7509,7509],"mapped","ᴗ"],[[7510,7510],"mapped","p"],[[7511,7511],"mapped","t"],[[7512,7512],"mapped","u"],[[7513,7513],"mapped","ᴝ"],[[7514,7514],"mapped","ɯ"],[[7515,7515],"mapped","v"],[[7516,7516],"mapped","ᴥ"],[[7517,7517],"mapped","β"],[[7518,7518],"mapped","γ"],[[7519,7519],"mapped","δ"],[[7520,7520],"mapped","φ"],[[7521,7521],"mapped","χ"],[[7522,7522],"mapped","i"],[[7523,7523],"mapped","r"],[[7524,7524],"mapped","u"],[[7525,7525],"mapped","v"],[[7526,7526],"mapped","β"],[[7527,7527],"mapped","γ"],[[7528,7528],"mapped","ρ"],[[7529,7529],"mapped","φ"],[[7530,7530],"mapped","χ"],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped","н"],[[7545,7578],"valid"],[[7579,7579],"mapped","ɒ"],[[7580,7580],"mapped","c"],[[7581,7581],"mapped","ɕ"],[[7582,7582],"mapped","ð"],[[7583,7583],"mapped","ɜ"],[[7584,7584],"mapped","f"],[[7585,7585],"mapped","ɟ"],[[7586,7586],"mapped","ɡ"],[[7587,7587],"mapped","ɥ"],[[7588,7588],"mapped","ɨ"],[[7589,7589],"mapped","ɩ"],[[7590,7590],"mapped","ɪ"],[[7591,7591],"mapped","ᵻ"],[[7592,7592],"mapped","ʝ"],[[7593,7593],"mapped","ɭ"],[[7594,7594],"mapped","ᶅ"],[[7595,7595],"mapped","ʟ"],[[7596,7596],"mapped","ɱ"],[[7597,7597],"mapped","ɰ"],[[7598,7598],"mapped","ɲ"],[[7599,7599],"mapped","ɳ"],[[7600,7600],"mapped","ɴ"],[[7601,7601],"mapped","ɵ"],[[7602,7602],"mapped","ɸ"],[[7603,7603],"mapped","ʂ"],[[7604,7604],"mapped","ʃ"],[[7605,7605],"mapped","ƫ"],[[7606,7606],"mapped","ʉ"],[[7607,7607],"mapped","ʊ"],[[7608,7608],"mapped","ᴜ"],[[7609,7609],"mapped","ʋ"],[[7610,7610],"mapped","ʌ"],[[7611,7611],"mapped","z"],[[7612,7612],"mapped","ʐ"],[[7613,7613],"mapped","ʑ"],[[7614,7614],"mapped","ʒ"],[[7615,7615],"mapped","θ"],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7673],"valid"],[[7674,7674],"disallowed"],[[7675,7675],"valid"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped","ḁ"],[[7681,7681],"valid"],[[7682,7682],"mapped","ḃ"],[[7683,7683],"valid"],[[7684,7684],"mapped","ḅ"],[[7685,7685],"valid"],[[7686,7686],"mapped","ḇ"],[[7687,7687],"valid"],[[7688,7688],"mapped","ḉ"],[[7689,7689],"valid"],[[7690,7690],"mapped","ḋ"],[[7691,7691],"valid"],[[7692,7692],"mapped","ḍ"],[[7693,7693],"valid"],[[7694,7694],"mapped","ḏ"],[[7695,7695],"valid"],[[7696,7696],"mapped","ḑ"],[[7697,7697],"valid"],[[7698,7698],"mapped","ḓ"],[[7699,7699],"valid"],[[7700,7700],"mapped","ḕ"],[[7701,7701],"valid"],[[7702,7702],"mapped","ḗ"],[[7703,7703],"valid"],[[7704,7704],"mapped","ḙ"],[[7705,7705],"valid"],[[7706,7706],"mapped","ḛ"],[[7707,7707],"valid"],[[7708,7708],"mapped","ḝ"],[[7709,7709],"valid"],[[7710,7710],"mapped","ḟ"],[[7711,7711],"valid"],[[7712,7712],"mapped","ḡ"],[[7713,7713],"valid"],[[7714,7714],"mapped","ḣ"],[[7715,7715],"valid"],[[7716,7716],"mapped","ḥ"],[[7717,7717],"valid"],[[7718,7718],"mapped","ḧ"],[[7719,7719],"valid"],[[7720,7720],"mapped","ḩ"],[[7721,7721],"valid"],[[7722,7722],"mapped","ḫ"],[[7723,7723],"valid"],[[7724,7724],"mapped","ḭ"],[[7725,7725],"valid"],[[7726,7726],"mapped","ḯ"],[[7727,7727],"valid"],[[7728,7728],"mapped","ḱ"],[[7729,7729],"valid"],[[7730,7730],"mapped","ḳ"],[[7731,7731],"valid"],[[7732,7732],"mapped","ḵ"],[[7733,7733],"valid"],[[7734,7734],"mapped","ḷ"],[[7735,7735],"valid"],[[7736,7736],"mapped","ḹ"],[[7737,7737],"valid"],[[7738,7738],"mapped","ḻ"],[[7739,7739],"valid"],[[7740,7740],"mapped","ḽ"],[[7741,7741],"valid"],[[7742,7742],"mapped","ḿ"],[[7743,7743],"valid"],[[7744,7744],"mapped","ṁ"],[[7745,7745],"valid"],[[7746,7746],"mapped","ṃ"],[[7747,7747],"valid"],[[7748,7748],"mapped","ṅ"],[[7749,7749],"valid"],[[7750,7750],"mapped","ṇ"],[[7751,7751],"valid"],[[7752,7752],"mapped","ṉ"],[[7753,7753],"valid"],[[7754,7754],"mapped","ṋ"],[[7755,7755],"valid"],[[7756,7756],"mapped","ṍ"],[[7757,7757],"valid"],[[7758,7758],"mapped","ṏ"],[[7759,7759],"valid"],[[7760,7760],"mapped","ṑ"],[[7761,7761],"valid"],[[7762,7762],"mapped","ṓ"],[[7763,7763],"valid"],[[7764,7764],"mapped","ṕ"],[[7765,7765],"valid"],[[7766,7766],"mapped","ṗ"],[[7767,7767],"valid"],[[7768,7768],"mapped","ṙ"],[[7769,7769],"valid"],[[7770,7770],"mapped","ṛ"],[[7771,7771],"valid"],[[7772,7772],"mapped","ṝ"],[[7773,7773],"valid"],[[7774,7774],"mapped","ṟ"],[[7775,7775],"valid"],[[7776,7776],"mapped","ṡ"],[[7777,7777],"valid"],[[7778,7778],"mapped","ṣ"],[[7779,7779],"valid"],[[7780,7780],"mapped","ṥ"],[[7781,7781],"valid"],[[7782,7782],"mapped","ṧ"],[[7783,7783],"valid"],[[7784,7784],"mapped","ṩ"],[[7785,7785],"valid"],[[7786,7786],"mapped","ṫ"],[[7787,7787],"valid"],[[7788,7788],"mapped","ṭ"],[[7789,7789],"valid"],[[7790,7790],"mapped","ṯ"],[[7791,7791],"valid"],[[7792,7792],"mapped","ṱ"],[[7793,7793],"valid"],[[7794,7794],"mapped","ṳ"],[[7795,7795],"valid"],[[7796,7796],"mapped","ṵ"],[[7797,7797],"valid"],[[7798,7798],"mapped","ṷ"],[[7799,7799],"valid"],[[7800,7800],"mapped","ṹ"],[[7801,7801],"valid"],[[7802,7802],"mapped","ṻ"],[[7803,7803],"valid"],[[7804,7804],"mapped","ṽ"],[[7805,7805],"valid"],[[7806,7806],"mapped","ṿ"],[[7807,7807],"valid"],[[7808,7808],"mapped","ẁ"],[[7809,7809],"valid"],[[7810,7810],"mapped","ẃ"],[[7811,7811],"valid"],[[7812,7812],"mapped","ẅ"],[[7813,7813],"valid"],[[7814,7814],"mapped","ẇ"],[[7815,7815],"valid"],[[7816,7816],"mapped","ẉ"],[[7817,7817],"valid"],[[7818,7818],"mapped","ẋ"],[[7819,7819],"valid"],[[7820,7820],"mapped","ẍ"],[[7821,7821],"valid"],[[7822,7822],"mapped","ẏ"],[[7823,7823],"valid"],[[7824,7824],"mapped","ẑ"],[[7825,7825],"valid"],[[7826,7826],"mapped","ẓ"],[[7827,7827],"valid"],[[7828,7828],"mapped","ẕ"],[[7829,7833],"valid"],[[7834,7834],"mapped","aʾ"],[[7835,7835],"mapped","ṡ"],[[7836,7837],"valid"],[[7838,7838],"mapped","ss"],[[7839,7839],"valid"],[[7840,7840],"mapped","ạ"],[[7841,7841],"valid"],[[7842,7842],"mapped","ả"],[[7843,7843],"valid"],[[7844,7844],"mapped","ấ"],[[7845,7845],"valid"],[[7846,7846],"mapped","ầ"],[[7847,7847],"valid"],[[7848,7848],"mapped","ẩ"],[[7849,7849],"valid"],[[7850,7850],"mapped","ẫ"],[[7851,7851],"valid"],[[7852,7852],"mapped","ậ"],[[7853,7853],"valid"],[[7854,7854],"mapped","ắ"],[[7855,7855],"valid"],[[7856,7856],"mapped","ằ"],[[7857,7857],"valid"],[[7858,7858],"mapped","ẳ"],[[7859,7859],"valid"],[[7860,7860],"mapped","ẵ"],[[7861,7861],"valid"],[[7862,7862],"mapped","ặ"],[[7863,7863],"valid"],[[7864,7864],"mapped","ẹ"],[[7865,7865],"valid"],[[7866,7866],"mapped","ẻ"],[[7867,7867],"valid"],[[7868,7868],"mapped","ẽ"],[[7869,7869],"valid"],[[7870,7870],"mapped","ế"],[[7871,7871],"valid"],[[7872,7872],"mapped","ề"],[[7873,7873],"valid"],[[7874,7874],"mapped","ể"],[[7875,7875],"valid"],[[7876,7876],"mapped","ễ"],[[7877,7877],"valid"],[[7878,7878],"mapped","ệ"],[[7879,7879],"valid"],[[7880,7880],"mapped","ỉ"],[[7881,7881],"valid"],[[7882,7882],"mapped","ị"],[[7883,7883],"valid"],[[7884,7884],"mapped","ọ"],[[7885,7885],"valid"],[[7886,7886],"mapped","ỏ"],[[7887,7887],"valid"],[[7888,7888],"mapped","ố"],[[7889,7889],"valid"],[[7890,7890],"mapped","ồ"],[[7891,7891],"valid"],[[7892,7892],"mapped","ổ"],[[7893,7893],"valid"],[[7894,7894],"mapped","ỗ"],[[7895,7895],"valid"],[[7896,7896],"mapped","ộ"],[[7897,7897],"valid"],[[7898,7898],"mapped","ớ"],[[7899,7899],"valid"],[[7900,7900],"mapped","ờ"],[[7901,7901],"valid"],[[7902,7902],"mapped","ở"],[[7903,7903],"valid"],[[7904,7904],"mapped","ỡ"],[[7905,7905],"valid"],[[7906,7906],"mapped","ợ"],[[7907,7907],"valid"],[[7908,7908],"mapped","ụ"],[[7909,7909],"valid"],[[7910,7910],"mapped","ủ"],[[7911,7911],"valid"],[[7912,7912],"mapped","ứ"],[[7913,7913],"valid"],[[7914,7914],"mapped","ừ"],[[7915,7915],"valid"],[[7916,7916],"mapped","ử"],[[7917,7917],"valid"],[[7918,7918],"mapped","ữ"],[[7919,7919],"valid"],[[7920,7920],"mapped","ự"],[[7921,7921],"valid"],[[7922,7922],"mapped","ỳ"],[[7923,7923],"valid"],[[7924,7924],"mapped","ỵ"],[[7925,7925],"valid"],[[7926,7926],"mapped","ỷ"],[[7927,7927],"valid"],[[7928,7928],"mapped","ỹ"],[[7929,7929],"valid"],[[7930,7930],"mapped","ỻ"],[[7931,7931],"valid"],[[7932,7932],"mapped","ỽ"],[[7933,7933],"valid"],[[7934,7934],"mapped","ỿ"],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped","ἀ"],[[7945,7945],"mapped","ἁ"],[[7946,7946],"mapped","ἂ"],[[7947,7947],"mapped","ἃ"],[[7948,7948],"mapped","ἄ"],[[7949,7949],"mapped","ἅ"],[[7950,7950],"mapped","ἆ"],[[7951,7951],"mapped","ἇ"],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped","ἐ"],[[7961,7961],"mapped","ἑ"],[[7962,7962],"mapped","ἒ"],[[7963,7963],"mapped","ἓ"],[[7964,7964],"mapped","ἔ"],[[7965,7965],"mapped","ἕ"],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped","ἠ"],[[7977,7977],"mapped","ἡ"],[[7978,7978],"mapped","ἢ"],[[7979,7979],"mapped","ἣ"],[[7980,7980],"mapped","ἤ"],[[7981,7981],"mapped","ἥ"],[[7982,7982],"mapped","ἦ"],[[7983,7983],"mapped","ἧ"],[[7984,7991],"valid"],[[7992,7992],"mapped","ἰ"],[[7993,7993],"mapped","ἱ"],[[7994,7994],"mapped","ἲ"],[[7995,7995],"mapped","ἳ"],[[7996,7996],"mapped","ἴ"],[[7997,7997],"mapped","ἵ"],[[7998,7998],"mapped","ἶ"],[[7999,7999],"mapped","ἷ"],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped","ὀ"],[[8009,8009],"mapped","ὁ"],[[8010,8010],"mapped","ὂ"],[[8011,8011],"mapped","ὃ"],[[8012,8012],"mapped","ὄ"],[[8013,8013],"mapped","ὅ"],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped","ὑ"],[[8026,8026],"disallowed"],[[8027,8027],"mapped","ὓ"],[[8028,8028],"disallowed"],[[8029,8029],"mapped","ὕ"],[[8030,8030],"disallowed"],[[8031,8031],"mapped","ὗ"],[[8032,8039],"valid"],[[8040,8040],"mapped","ὠ"],[[8041,8041],"mapped","ὡ"],[[8042,8042],"mapped","ὢ"],[[8043,8043],"mapped","ὣ"],[[8044,8044],"mapped","ὤ"],[[8045,8045],"mapped","ὥ"],[[8046,8046],"mapped","ὦ"],[[8047,8047],"mapped","ὧ"],[[8048,8048],"valid"],[[8049,8049],"mapped","ά"],[[8050,8050],"valid"],[[8051,8051],"mapped","έ"],[[8052,8052],"valid"],[[8053,8053],"mapped","ή"],[[8054,8054],"valid"],[[8055,8055],"mapped","ί"],[[8056,8056],"valid"],[[8057,8057],"mapped","ό"],[[8058,8058],"valid"],[[8059,8059],"mapped","ύ"],[[8060,8060],"valid"],[[8061,8061],"mapped","ώ"],[[8062,8063],"disallowed"],[[8064,8064],"mapped","ἀι"],[[8065,8065],"mapped","ἁι"],[[8066,8066],"mapped","ἂι"],[[8067,8067],"mapped","ἃι"],[[8068,8068],"mapped","ἄι"],[[8069,8069],"mapped","ἅι"],[[8070,8070],"mapped","ἆι"],[[8071,8071],"mapped","ἇι"],[[8072,8072],"mapped","ἀι"],[[8073,8073],"mapped","ἁι"],[[8074,8074],"mapped","ἂι"],[[8075,8075],"mapped","ἃι"],[[8076,8076],"mapped","ἄι"],[[8077,8077],"mapped","ἅι"],[[8078,8078],"mapped","ἆι"],[[8079,8079],"mapped","ἇι"],[[8080,8080],"mapped","ἠι"],[[8081,8081],"mapped","ἡι"],[[8082,8082],"mapped","ἢι"],[[8083,8083],"mapped","ἣι"],[[8084,8084],"mapped","ἤι"],[[8085,8085],"mapped","ἥι"],[[8086,8086],"mapped","ἦι"],[[8087,8087],"mapped","ἧι"],[[8088,8088],"mapped","ἠι"],[[8089,8089],"mapped","ἡι"],[[8090,8090],"mapped","ἢι"],[[8091,8091],"mapped","ἣι"],[[8092,8092],"mapped","ἤι"],[[8093,8093],"mapped","ἥι"],[[8094,8094],"mapped","ἦι"],[[8095,8095],"mapped","ἧι"],[[8096,8096],"mapped","ὠι"],[[8097,8097],"mapped","ὡι"],[[8098,8098],"mapped","ὢι"],[[8099,8099],"mapped","ὣι"],[[8100,8100],"mapped","ὤι"],[[8101,8101],"mapped","ὥι"],[[8102,8102],"mapped","ὦι"],[[8103,8103],"mapped","ὧι"],[[8104,8104],"mapped","ὠι"],[[8105,8105],"mapped","ὡι"],[[8106,8106],"mapped","ὢι"],[[8107,8107],"mapped","ὣι"],[[8108,8108],"mapped","ὤι"],[[8109,8109],"mapped","ὥι"],[[8110,8110],"mapped","ὦι"],[[8111,8111],"mapped","ὧι"],[[8112,8113],"valid"],[[8114,8114],"mapped","ὰι"],[[8115,8115],"mapped","αι"],[[8116,8116],"mapped","άι"],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped","ᾶι"],[[8120,8120],"mapped","ᾰ"],[[8121,8121],"mapped","ᾱ"],[[8122,8122],"mapped","ὰ"],[[8123,8123],"mapped","ά"],[[8124,8124],"mapped","αι"],[[8125,8125],"disallowed_STD3_mapped"," ̓"],[[8126,8126],"mapped","ι"],[[8127,8127],"disallowed_STD3_mapped"," ̓"],[[8128,8128],"disallowed_STD3_mapped"," ͂"],[[8129,8129],"disallowed_STD3_mapped"," ̈͂"],[[8130,8130],"mapped","ὴι"],[[8131,8131],"mapped","ηι"],[[8132,8132],"mapped","ήι"],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped","ῆι"],[[8136,8136],"mapped","ὲ"],[[8137,8137],"mapped","έ"],[[8138,8138],"mapped","ὴ"],[[8139,8139],"mapped","ή"],[[8140,8140],"mapped","ηι"],[[8141,8141],"disallowed_STD3_mapped"," ̓̀"],[[8142,8142],"disallowed_STD3_mapped"," ̓́"],[[8143,8143],"disallowed_STD3_mapped"," ̓͂"],[[8144,8146],"valid"],[[8147,8147],"mapped","ΐ"],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped","ῐ"],[[8153,8153],"mapped","ῑ"],[[8154,8154],"mapped","ὶ"],[[8155,8155],"mapped","ί"],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped"," ̔̀"],[[8158,8158],"disallowed_STD3_mapped"," ̔́"],[[8159,8159],"disallowed_STD3_mapped"," ̔͂"],[[8160,8162],"valid"],[[8163,8163],"mapped","ΰ"],[[8164,8167],"valid"],[[8168,8168],"mapped","ῠ"],[[8169,8169],"mapped","ῡ"],[[8170,8170],"mapped","ὺ"],[[8171,8171],"mapped","ύ"],[[8172,8172],"mapped","ῥ"],[[8173,8173],"disallowed_STD3_mapped"," ̈̀"],[[8174,8174],"disallowed_STD3_mapped"," ̈́"],[[8175,8175],"disallowed_STD3_mapped","`"],[[8176,8177],"disallowed"],[[8178,8178],"mapped","ὼι"],[[8179,8179],"mapped","ωι"],[[8180,8180],"mapped","ώι"],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped","ῶι"],[[8184,8184],"mapped","ὸ"],[[8185,8185],"mapped","ό"],[[8186,8186],"mapped","ὼ"],[[8187,8187],"mapped","ώ"],[[8188,8188],"mapped","ωι"],[[8189,8189],"disallowed_STD3_mapped"," ́"],[[8190,8190],"disallowed_STD3_mapped"," ̔"],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped"," "],[[8203,8203],"ignored"],[[8204,8205],"deviation",""],[[8206,8207],"disallowed"],[[8208,8208],"valid","","NV8"],[[8209,8209],"mapped","‐"],[[8210,8214],"valid","","NV8"],[[8215,8215],"disallowed_STD3_mapped"," ̳"],[[8216,8227],"valid","","NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid","","NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped"," "],[[8240,8242],"valid","","NV8"],[[8243,8243],"mapped","′′"],[[8244,8244],"mapped","′′′"],[[8245,8245],"valid","","NV8"],[[8246,8246],"mapped","‵‵"],[[8247,8247],"mapped","‵‵‵"],[[8248,8251],"valid","","NV8"],[[8252,8252],"disallowed_STD3_mapped","!!"],[[8253,8253],"valid","","NV8"],[[8254,8254],"disallowed_STD3_mapped"," ̅"],[[8255,8262],"valid","","NV8"],[[8263,8263],"disallowed_STD3_mapped","??"],[[8264,8264],"disallowed_STD3_mapped","?!"],[[8265,8265],"disallowed_STD3_mapped","!?"],[[8266,8269],"valid","","NV8"],[[8270,8274],"valid","","NV8"],[[8275,8276],"valid","","NV8"],[[8277,8278],"valid","","NV8"],[[8279,8279],"mapped","′′′′"],[[8280,8286],"valid","","NV8"],[[8287,8287],"disallowed_STD3_mapped"," "],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped","0"],[[8305,8305],"mapped","i"],[[8306,8307],"disallowed"],[[8308,8308],"mapped","4"],[[8309,8309],"mapped","5"],[[8310,8310],"mapped","6"],[[8311,8311],"mapped","7"],[[8312,8312],"mapped","8"],[[8313,8313],"mapped","9"],[[8314,8314],"disallowed_STD3_mapped","+"],[[8315,8315],"mapped","−"],[[8316,8316],"disallowed_STD3_mapped","="],[[8317,8317],"disallowed_STD3_mapped","("],[[8318,8318],"disallowed_STD3_mapped",")"],[[8319,8319],"mapped","n"],[[8320,8320],"mapped","0"],[[8321,8321],"mapped","1"],[[8322,8322],"mapped","2"],[[8323,8323],"mapped","3"],[[8324,8324],"mapped","4"],[[8325,8325],"mapped","5"],[[8326,8326],"mapped","6"],[[8327,8327],"mapped","7"],[[8328,8328],"mapped","8"],[[8329,8329],"mapped","9"],[[8330,8330],"disallowed_STD3_mapped","+"],[[8331,8331],"mapped","−"],[[8332,8332],"disallowed_STD3_mapped","="],[[8333,8333],"disallowed_STD3_mapped","("],[[8334,8334],"disallowed_STD3_mapped",")"],[[8335,8335],"disallowed"],[[8336,8336],"mapped","a"],[[8337,8337],"mapped","e"],[[8338,8338],"mapped","o"],[[8339,8339],"mapped","x"],[[8340,8340],"mapped","ə"],[[8341,8341],"mapped","h"],[[8342,8342],"mapped","k"],[[8343,8343],"mapped","l"],[[8344,8344],"mapped","m"],[[8345,8345],"mapped","n"],[[8346,8346],"mapped","p"],[[8347,8347],"mapped","s"],[[8348,8348],"mapped","t"],[[8349,8351],"disallowed"],[[8352,8359],"valid","","NV8"],[[8360,8360],"mapped","rs"],[[8361,8362],"valid","","NV8"],[[8363,8363],"valid","","NV8"],[[8364,8364],"valid","","NV8"],[[8365,8367],"valid","","NV8"],[[8368,8369],"valid","","NV8"],[[8370,8373],"valid","","NV8"],[[8374,8376],"valid","","NV8"],[[8377,8377],"valid","","NV8"],[[8378,8378],"valid","","NV8"],[[8379,8381],"valid","","NV8"],[[8382,8382],"valid","","NV8"],[[8383,8383],"valid","","NV8"],[[8384,8399],"disallowed"],[[8400,8417],"valid","","NV8"],[[8418,8419],"valid","","NV8"],[[8420,8426],"valid","","NV8"],[[8427,8427],"valid","","NV8"],[[8428,8431],"valid","","NV8"],[[8432,8432],"valid","","NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped","a/c"],[[8449,8449],"disallowed_STD3_mapped","a/s"],[[8450,8450],"mapped","c"],[[8451,8451],"mapped","°c"],[[8452,8452],"valid","","NV8"],[[8453,8453],"disallowed_STD3_mapped","c/o"],[[8454,8454],"disallowed_STD3_mapped","c/u"],[[8455,8455],"mapped","ɛ"],[[8456,8456],"valid","","NV8"],[[8457,8457],"mapped","°f"],[[8458,8458],"mapped","g"],[[8459,8462],"mapped","h"],[[8463,8463],"mapped","ħ"],[[8464,8465],"mapped","i"],[[8466,8467],"mapped","l"],[[8468,8468],"valid","","NV8"],[[8469,8469],"mapped","n"],[[8470,8470],"mapped","no"],[[8471,8472],"valid","","NV8"],[[8473,8473],"mapped","p"],[[8474,8474],"mapped","q"],[[8475,8477],"mapped","r"],[[8478,8479],"valid","","NV8"],[[8480,8480],"mapped","sm"],[[8481,8481],"mapped","tel"],[[8482,8482],"mapped","tm"],[[8483,8483],"valid","","NV8"],[[8484,8484],"mapped","z"],[[8485,8485],"valid","","NV8"],[[8486,8486],"mapped","ω"],[[8487,8487],"valid","","NV8"],[[8488,8488],"mapped","z"],[[8489,8489],"valid","","NV8"],[[8490,8490],"mapped","k"],[[8491,8491],"mapped","å"],[[8492,8492],"mapped","b"],[[8493,8493],"mapped","c"],[[8494,8494],"valid","","NV8"],[[8495,8496],"mapped","e"],[[8497,8497],"mapped","f"],[[8498,8498],"disallowed"],[[8499,8499],"mapped","m"],[[8500,8500],"mapped","o"],[[8501,8501],"mapped","א"],[[8502,8502],"mapped","ב"],[[8503,8503],"mapped","ג"],[[8504,8504],"mapped","ד"],[[8505,8505],"mapped","i"],[[8506,8506],"valid","","NV8"],[[8507,8507],"mapped","fax"],[[8508,8508],"mapped","π"],[[8509,8510],"mapped","γ"],[[8511,8511],"mapped","π"],[[8512,8512],"mapped","∑"],[[8513,8516],"valid","","NV8"],[[8517,8518],"mapped","d"],[[8519,8519],"mapped","e"],[[8520,8520],"mapped","i"],[[8521,8521],"mapped","j"],[[8522,8523],"valid","","NV8"],[[8524,8524],"valid","","NV8"],[[8525,8525],"valid","","NV8"],[[8526,8526],"valid"],[[8527,8527],"valid","","NV8"],[[8528,8528],"mapped","1⁄7"],[[8529,8529],"mapped","1⁄9"],[[8530,8530],"mapped","1⁄10"],[[8531,8531],"mapped","1⁄3"],[[8532,8532],"mapped","2⁄3"],[[8533,8533],"mapped","1⁄5"],[[8534,8534],"mapped","2⁄5"],[[8535,8535],"mapped","3⁄5"],[[8536,8536],"mapped","4⁄5"],[[8537,8537],"mapped","1⁄6"],[[8538,8538],"mapped","5⁄6"],[[8539,8539],"mapped","1⁄8"],[[8540,8540],"mapped","3⁄8"],[[8541,8541],"mapped","5⁄8"],[[8542,8542],"mapped","7⁄8"],[[8543,8543],"mapped","1⁄"],[[8544,8544],"mapped","i"],[[8545,8545],"mapped","ii"],[[8546,8546],"mapped","iii"],[[8547,8547],"mapped","iv"],[[8548,8548],"mapped","v"],[[8549,8549],"mapped","vi"],[[8550,8550],"mapped","vii"],[[8551,8551],"mapped","viii"],[[8552,8552],"mapped","ix"],[[8553,8553],"mapped","x"],[[8554,8554],"mapped","xi"],[[8555,8555],"mapped","xii"],[[8556,8556],"mapped","l"],[[8557,8557],"mapped","c"],[[8558,8558],"mapped","d"],[[8559,8559],"mapped","m"],[[8560,8560],"mapped","i"],[[8561,8561],"mapped","ii"],[[8562,8562],"mapped","iii"],[[8563,8563],"mapped","iv"],[[8564,8564],"mapped","v"],[[8565,8565],"mapped","vi"],[[8566,8566],"mapped","vii"],[[8567,8567],"mapped","viii"],[[8568,8568],"mapped","ix"],[[8569,8569],"mapped","x"],[[8570,8570],"mapped","xi"],[[8571,8571],"mapped","xii"],[[8572,8572],"mapped","l"],[[8573,8573],"mapped","c"],[[8574,8574],"mapped","d"],[[8575,8575],"mapped","m"],[[8576,8578],"valid","","NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid","","NV8"],[[8585,8585],"mapped","0⁄3"],[[8586,8587],"valid","","NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid","","NV8"],[[8683,8691],"valid","","NV8"],[[8692,8703],"valid","","NV8"],[[8704,8747],"valid","","NV8"],[[8748,8748],"mapped","∫∫"],[[8749,8749],"mapped","∫∫∫"],[[8750,8750],"valid","","NV8"],[[8751,8751],"mapped","∮∮"],[[8752,8752],"mapped","∮∮∮"],[[8753,8799],"valid","","NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid","","NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid","","NV8"],[[8946,8959],"valid","","NV8"],[[8960,8960],"valid","","NV8"],[[8961,8961],"valid","","NV8"],[[8962,9000],"valid","","NV8"],[[9001,9001],"mapped","〈"],[[9002,9002],"mapped","〉"],[[9003,9082],"valid","","NV8"],[[9083,9083],"valid","","NV8"],[[9084,9084],"valid","","NV8"],[[9085,9114],"valid","","NV8"],[[9115,9166],"valid","","NV8"],[[9167,9168],"valid","","NV8"],[[9169,9179],"valid","","NV8"],[[9180,9191],"valid","","NV8"],[[9192,9192],"valid","","NV8"],[[9193,9203],"valid","","NV8"],[[9204,9210],"valid","","NV8"],[[9211,9214],"valid","","NV8"],[[9215,9215],"valid","","NV8"],[[9216,9252],"valid","","NV8"],[[9253,9254],"valid","","NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid","","NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped","1"],[[9313,9313],"mapped","2"],[[9314,9314],"mapped","3"],[[9315,9315],"mapped","4"],[[9316,9316],"mapped","5"],[[9317,9317],"mapped","6"],[[9318,9318],"mapped","7"],[[9319,9319],"mapped","8"],[[9320,9320],"mapped","9"],[[9321,9321],"mapped","10"],[[9322,9322],"mapped","11"],[[9323,9323],"mapped","12"],[[9324,9324],"mapped","13"],[[9325,9325],"mapped","14"],[[9326,9326],"mapped","15"],[[9327,9327],"mapped","16"],[[9328,9328],"mapped","17"],[[9329,9329],"mapped","18"],[[9330,9330],"mapped","19"],[[9331,9331],"mapped","20"],[[9332,9332],"disallowed_STD3_mapped","(1)"],[[9333,9333],"disallowed_STD3_mapped","(2)"],[[9334,9334],"disallowed_STD3_mapped","(3)"],[[9335,9335],"disallowed_STD3_mapped","(4)"],[[9336,9336],"disallowed_STD3_mapped","(5)"],[[9337,9337],"disallowed_STD3_mapped","(6)"],[[9338,9338],"disallowed_STD3_mapped","(7)"],[[9339,9339],"disallowed_STD3_mapped","(8)"],[[9340,9340],"disallowed_STD3_mapped","(9)"],[[9341,9341],"disallowed_STD3_mapped","(10)"],[[9342,9342],"disallowed_STD3_mapped","(11)"],[[9343,9343],"disallowed_STD3_mapped","(12)"],[[9344,9344],"disallowed_STD3_mapped","(13)"],[[9345,9345],"disallowed_STD3_mapped","(14)"],[[9346,9346],"disallowed_STD3_mapped","(15)"],[[9347,9347],"disallowed_STD3_mapped","(16)"],[[9348,9348],"disallowed_STD3_mapped","(17)"],[[9349,9349],"disallowed_STD3_mapped","(18)"],[[9350,9350],"disallowed_STD3_mapped","(19)"],[[9351,9351],"disallowed_STD3_mapped","(20)"],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped","(a)"],[[9373,9373],"disallowed_STD3_mapped","(b)"],[[9374,9374],"disallowed_STD3_mapped","(c)"],[[9375,9375],"disallowed_STD3_mapped","(d)"],[[9376,9376],"disallowed_STD3_mapped","(e)"],[[9377,9377],"disallowed_STD3_mapped","(f)"],[[9378,9378],"disallowed_STD3_mapped","(g)"],[[9379,9379],"disallowed_STD3_mapped","(h)"],[[9380,9380],"disallowed_STD3_mapped","(i)"],[[9381,9381],"disallowed_STD3_mapped","(j)"],[[9382,9382],"disallowed_STD3_mapped","(k)"],[[9383,9383],"disallowed_STD3_mapped","(l)"],[[9384,9384],"disallowed_STD3_mapped","(m)"],[[9385,9385],"disallowed_STD3_mapped","(n)"],[[9386,9386],"disallowed_STD3_mapped","(o)"],[[9387,9387],"disallowed_STD3_mapped","(p)"],[[9388,9388],"disallowed_STD3_mapped","(q)"],[[9389,9389],"disallowed_STD3_mapped","(r)"],[[9390,9390],"disallowed_STD3_mapped","(s)"],[[9391,9391],"disallowed_STD3_mapped","(t)"],[[9392,9392],"disallowed_STD3_mapped","(u)"],[[9393,9393],"disallowed_STD3_mapped","(v)"],[[9394,9394],"disallowed_STD3_mapped","(w)"],[[9395,9395],"disallowed_STD3_mapped","(x)"],[[9396,9396],"disallowed_STD3_mapped","(y)"],[[9397,9397],"disallowed_STD3_mapped","(z)"],[[9398,9398],"mapped","a"],[[9399,9399],"mapped","b"],[[9400,9400],"mapped","c"],[[9401,9401],"mapped","d"],[[9402,9402],"mapped","e"],[[9403,9403],"mapped","f"],[[9404,9404],"mapped","g"],[[9405,9405],"mapped","h"],[[9406,9406],"mapped","i"],[[9407,9407],"mapped","j"],[[9408,9408],"mapped","k"],[[9409,9409],"mapped","l"],[[9410,9410],"mapped","m"],[[9411,9411],"mapped","n"],[[9412,9412],"mapped","o"],[[9413,9413],"mapped","p"],[[9414,9414],"mapped","q"],[[9415,9415],"mapped","r"],[[9416,9416],"mapped","s"],[[9417,9417],"mapped","t"],[[9418,9418],"mapped","u"],[[9419,9419],"mapped","v"],[[9420,9420],"mapped","w"],[[9421,9421],"mapped","x"],[[9422,9422],"mapped","y"],[[9423,9423],"mapped","z"],[[9424,9424],"mapped","a"],[[9425,9425],"mapped","b"],[[9426,9426],"mapped","c"],[[9427,9427],"mapped","d"],[[9428,9428],"mapped","e"],[[9429,9429],"mapped","f"],[[9430,9430],"mapped","g"],[[9431,9431],"mapped","h"],[[9432,9432],"mapped","i"],[[9433,9433],"mapped","j"],[[9434,9434],"mapped","k"],[[9435,9435],"mapped","l"],[[9436,9436],"mapped","m"],[[9437,9437],"mapped","n"],[[9438,9438],"mapped","o"],[[9439,9439],"mapped","p"],[[9440,9440],"mapped","q"],[[9441,9441],"mapped","r"],[[9442,9442],"mapped","s"],[[9443,9443],"mapped","t"],[[9444,9444],"mapped","u"],[[9445,9445],"mapped","v"],[[9446,9446],"mapped","w"],[[9447,9447],"mapped","x"],[[9448,9448],"mapped","y"],[[9449,9449],"mapped","z"],[[9450,9450],"mapped","0"],[[9451,9470],"valid","","NV8"],[[9471,9471],"valid","","NV8"],[[9472,9621],"valid","","NV8"],[[9622,9631],"valid","","NV8"],[[9632,9711],"valid","","NV8"],[[9712,9719],"valid","","NV8"],[[9720,9727],"valid","","NV8"],[[9728,9747],"valid","","NV8"],[[9748,9749],"valid","","NV8"],[[9750,9751],"valid","","NV8"],[[9752,9752],"valid","","NV8"],[[9753,9753],"valid","","NV8"],[[9754,9839],"valid","","NV8"],[[9840,9841],"valid","","NV8"],[[9842,9853],"valid","","NV8"],[[9854,9855],"valid","","NV8"],[[9856,9865],"valid","","NV8"],[[9866,9873],"valid","","NV8"],[[9874,9884],"valid","","NV8"],[[9885,9885],"valid","","NV8"],[[9886,9887],"valid","","NV8"],[[9888,9889],"valid","","NV8"],[[9890,9905],"valid","","NV8"],[[9906,9906],"valid","","NV8"],[[9907,9916],"valid","","NV8"],[[9917,9919],"valid","","NV8"],[[9920,9923],"valid","","NV8"],[[9924,9933],"valid","","NV8"],[[9934,9934],"valid","","NV8"],[[9935,9953],"valid","","NV8"],[[9954,9954],"valid","","NV8"],[[9955,9955],"valid","","NV8"],[[9956,9959],"valid","","NV8"],[[9960,9983],"valid","","NV8"],[[9984,9984],"valid","","NV8"],[[9985,9988],"valid","","NV8"],[[9989,9989],"valid","","NV8"],[[9990,9993],"valid","","NV8"],[[9994,9995],"valid","","NV8"],[[9996,10023],"valid","","NV8"],[[10024,10024],"valid","","NV8"],[[10025,10059],"valid","","NV8"],[[10060,10060],"valid","","NV8"],[[10061,10061],"valid","","NV8"],[[10062,10062],"valid","","NV8"],[[10063,10066],"valid","","NV8"],[[10067,10069],"valid","","NV8"],[[10070,10070],"valid","","NV8"],[[10071,10071],"valid","","NV8"],[[10072,10078],"valid","","NV8"],[[10079,10080],"valid","","NV8"],[[10081,10087],"valid","","NV8"],[[10088,10101],"valid","","NV8"],[[10102,10132],"valid","","NV8"],[[10133,10135],"valid","","NV8"],[[10136,10159],"valid","","NV8"],[[10160,10160],"valid","","NV8"],[[10161,10174],"valid","","NV8"],[[10175,10175],"valid","","NV8"],[[10176,10182],"valid","","NV8"],[[10183,10186],"valid","","NV8"],[[10187,10187],"valid","","NV8"],[[10188,10188],"valid","","NV8"],[[10189,10189],"valid","","NV8"],[[10190,10191],"valid","","NV8"],[[10192,10219],"valid","","NV8"],[[10220,10223],"valid","","NV8"],[[10224,10239],"valid","","NV8"],[[10240,10495],"valid","","NV8"],[[10496,10763],"valid","","NV8"],[[10764,10764],"mapped","∫∫∫∫"],[[10765,10867],"valid","","NV8"],[[10868,10868],"disallowed_STD3_mapped","::="],[[10869,10869],"disallowed_STD3_mapped","=="],[[10870,10870],"disallowed_STD3_mapped","==="],[[10871,10971],"valid","","NV8"],[[10972,10972],"mapped","⫝̸"],[[10973,11007],"valid","","NV8"],[[11008,11021],"valid","","NV8"],[[11022,11027],"valid","","NV8"],[[11028,11034],"valid","","NV8"],[[11035,11039],"valid","","NV8"],[[11040,11043],"valid","","NV8"],[[11044,11084],"valid","","NV8"],[[11085,11087],"valid","","NV8"],[[11088,11092],"valid","","NV8"],[[11093,11097],"valid","","NV8"],[[11098,11123],"valid","","NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid","","NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid","","NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid","","NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid","","NV8"],[[11218,11218],"valid","","NV8"],[[11219,11243],"disallowed"],[[11244,11247],"valid","","NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped","ⰰ"],[[11265,11265],"mapped","ⰱ"],[[11266,11266],"mapped","ⰲ"],[[11267,11267],"mapped","ⰳ"],[[11268,11268],"mapped","ⰴ"],[[11269,11269],"mapped","ⰵ"],[[11270,11270],"mapped","ⰶ"],[[11271,11271],"mapped","ⰷ"],[[11272,11272],"mapped","ⰸ"],[[11273,11273],"mapped","ⰹ"],[[11274,11274],"mapped","ⰺ"],[[11275,11275],"mapped","ⰻ"],[[11276,11276],"mapped","ⰼ"],[[11277,11277],"mapped","ⰽ"],[[11278,11278],"mapped","ⰾ"],[[11279,11279],"mapped","ⰿ"],[[11280,11280],"mapped","ⱀ"],[[11281,11281],"mapped","ⱁ"],[[11282,11282],"mapped","ⱂ"],[[11283,11283],"mapped","ⱃ"],[[11284,11284],"mapped","ⱄ"],[[11285,11285],"mapped","ⱅ"],[[11286,11286],"mapped","ⱆ"],[[11287,11287],"mapped","ⱇ"],[[11288,11288],"mapped","ⱈ"],[[11289,11289],"mapped","ⱉ"],[[11290,11290],"mapped","ⱊ"],[[11291,11291],"mapped","ⱋ"],[[11292,11292],"mapped","ⱌ"],[[11293,11293],"mapped","ⱍ"],[[11294,11294],"mapped","ⱎ"],[[11295,11295],"mapped","ⱏ"],[[11296,11296],"mapped","ⱐ"],[[11297,11297],"mapped","ⱑ"],[[11298,11298],"mapped","ⱒ"],[[11299,11299],"mapped","ⱓ"],[[11300,11300],"mapped","ⱔ"],[[11301,11301],"mapped","ⱕ"],[[11302,11302],"mapped","ⱖ"],[[11303,11303],"mapped","ⱗ"],[[11304,11304],"mapped","ⱘ"],[[11305,11305],"mapped","ⱙ"],[[11306,11306],"mapped","ⱚ"],[[11307,11307],"mapped","ⱛ"],[[11308,11308],"mapped","ⱜ"],[[11309,11309],"mapped","ⱝ"],[[11310,11310],"mapped","ⱞ"],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped","ⱡ"],[[11361,11361],"valid"],[[11362,11362],"mapped","ɫ"],[[11363,11363],"mapped","ᵽ"],[[11364,11364],"mapped","ɽ"],[[11365,11366],"valid"],[[11367,11367],"mapped","ⱨ"],[[11368,11368],"valid"],[[11369,11369],"mapped","ⱪ"],[[11370,11370],"valid"],[[11371,11371],"mapped","ⱬ"],[[11372,11372],"valid"],[[11373,11373],"mapped","ɑ"],[[11374,11374],"mapped","ɱ"],[[11375,11375],"mapped","ɐ"],[[11376,11376],"mapped","ɒ"],[[11377,11377],"valid"],[[11378,11378],"mapped","ⱳ"],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped","ⱶ"],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped","j"],[[11389,11389],"mapped","v"],[[11390,11390],"mapped","ȿ"],[[11391,11391],"mapped","ɀ"],[[11392,11392],"mapped","ⲁ"],[[11393,11393],"valid"],[[11394,11394],"mapped","ⲃ"],[[11395,11395],"valid"],[[11396,11396],"mapped","ⲅ"],[[11397,11397],"valid"],[[11398,11398],"mapped","ⲇ"],[[11399,11399],"valid"],[[11400,11400],"mapped","ⲉ"],[[11401,11401],"valid"],[[11402,11402],"mapped","ⲋ"],[[11403,11403],"valid"],[[11404,11404],"mapped","ⲍ"],[[11405,11405],"valid"],[[11406,11406],"mapped","ⲏ"],[[11407,11407],"valid"],[[11408,11408],"mapped","ⲑ"],[[11409,11409],"valid"],[[11410,11410],"mapped","ⲓ"],[[11411,11411],"valid"],[[11412,11412],"mapped","ⲕ"],[[11413,11413],"valid"],[[11414,11414],"mapped","ⲗ"],[[11415,11415],"valid"],[[11416,11416],"mapped","ⲙ"],[[11417,11417],"valid"],[[11418,11418],"mapped","ⲛ"],[[11419,11419],"valid"],[[11420,11420],"mapped","ⲝ"],[[11421,11421],"valid"],[[11422,11422],"mapped","ⲟ"],[[11423,11423],"valid"],[[11424,11424],"mapped","ⲡ"],[[11425,11425],"valid"],[[11426,11426],"mapped","ⲣ"],[[11427,11427],"valid"],[[11428,11428],"mapped","ⲥ"],[[11429,11429],"valid"],[[11430,11430],"mapped","ⲧ"],[[11431,11431],"valid"],[[11432,11432],"mapped","ⲩ"],[[11433,11433],"valid"],[[11434,11434],"mapped","ⲫ"],[[11435,11435],"valid"],[[11436,11436],"mapped","ⲭ"],[[11437,11437],"valid"],[[11438,11438],"mapped","ⲯ"],[[11439,11439],"valid"],[[11440,11440],"mapped","ⲱ"],[[11441,11441],"valid"],[[11442,11442],"mapped","ⲳ"],[[11443,11443],"valid"],[[11444,11444],"mapped","ⲵ"],[[11445,11445],"valid"],[[11446,11446],"mapped","ⲷ"],[[11447,11447],"valid"],[[11448,11448],"mapped","ⲹ"],[[11449,11449],"valid"],[[11450,11450],"mapped","ⲻ"],[[11451,11451],"valid"],[[11452,11452],"mapped","ⲽ"],[[11453,11453],"valid"],[[11454,11454],"mapped","ⲿ"],[[11455,11455],"valid"],[[11456,11456],"mapped","ⳁ"],[[11457,11457],"valid"],[[11458,11458],"mapped","ⳃ"],[[11459,11459],"valid"],[[11460,11460],"mapped","ⳅ"],[[11461,11461],"valid"],[[11462,11462],"mapped","ⳇ"],[[11463,11463],"valid"],[[11464,11464],"mapped","ⳉ"],[[11465,11465],"valid"],[[11466,11466],"mapped","ⳋ"],[[11467,11467],"valid"],[[11468,11468],"mapped","ⳍ"],[[11469,11469],"valid"],[[11470,11470],"mapped","ⳏ"],[[11471,11471],"valid"],[[11472,11472],"mapped","ⳑ"],[[11473,11473],"valid"],[[11474,11474],"mapped","ⳓ"],[[11475,11475],"valid"],[[11476,11476],"mapped","ⳕ"],[[11477,11477],"valid"],[[11478,11478],"mapped","ⳗ"],[[11479,11479],"valid"],[[11480,11480],"mapped","ⳙ"],[[11481,11481],"valid"],[[11482,11482],"mapped","ⳛ"],[[11483,11483],"valid"],[[11484,11484],"mapped","ⳝ"],[[11485,11485],"valid"],[[11486,11486],"mapped","ⳟ"],[[11487,11487],"valid"],[[11488,11488],"mapped","ⳡ"],[[11489,11489],"valid"],[[11490,11490],"mapped","ⳣ"],[[11491,11492],"valid"],[[11493,11498],"valid","","NV8"],[[11499,11499],"mapped","ⳬ"],[[11500,11500],"valid"],[[11501,11501],"mapped","ⳮ"],[[11502,11505],"valid"],[[11506,11506],"mapped","ⳳ"],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid","","NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped","ⵡ"],[[11632,11632],"valid","","NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid","","NV8"],[[11800,11803],"valid","","NV8"],[[11804,11805],"valid","","NV8"],[[11806,11822],"valid","","NV8"],[[11823,11823],"valid"],[[11824,11824],"valid","","NV8"],[[11825,11825],"valid","","NV8"],[[11826,11835],"valid","","NV8"],[[11836,11842],"valid","","NV8"],[[11843,11844],"valid","","NV8"],[[11845,11849],"valid","","NV8"],[[11850,11903],"disallowed"],[[11904,11929],"valid","","NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid","","NV8"],[[11935,11935],"mapped","母"],[[11936,12018],"valid","","NV8"],[[12019,12019],"mapped","龟"],[[12020,12031],"disallowed"],[[12032,12032],"mapped","一"],[[12033,12033],"mapped","丨"],[[12034,12034],"mapped","丶"],[[12035,12035],"mapped","丿"],[[12036,12036],"mapped","乙"],[[12037,12037],"mapped","亅"],[[12038,12038],"mapped","二"],[[12039,12039],"mapped","亠"],[[12040,12040],"mapped","人"],[[12041,12041],"mapped","儿"],[[12042,12042],"mapped","入"],[[12043,12043],"mapped","八"],[[12044,12044],"mapped","冂"],[[12045,12045],"mapped","冖"],[[12046,12046],"mapped","冫"],[[12047,12047],"mapped","几"],[[12048,12048],"mapped","凵"],[[12049,12049],"mapped","刀"],[[12050,12050],"mapped","力"],[[12051,12051],"mapped","勹"],[[12052,12052],"mapped","匕"],[[12053,12053],"mapped","匚"],[[12054,12054],"mapped","匸"],[[12055,12055],"mapped","十"],[[12056,12056],"mapped","卜"],[[12057,12057],"mapped","卩"],[[12058,12058],"mapped","厂"],[[12059,12059],"mapped","厶"],[[12060,12060],"mapped","又"],[[12061,12061],"mapped","口"],[[12062,12062],"mapped","囗"],[[12063,12063],"mapped","土"],[[12064,12064],"mapped","士"],[[12065,12065],"mapped","夂"],[[12066,12066],"mapped","夊"],[[12067,12067],"mapped","夕"],[[12068,12068],"mapped","大"],[[12069,12069],"mapped","女"],[[12070,12070],"mapped","子"],[[12071,12071],"mapped","宀"],[[12072,12072],"mapped","寸"],[[12073,12073],"mapped","小"],[[12074,12074],"mapped","尢"],[[12075,12075],"mapped","尸"],[[12076,12076],"mapped","屮"],[[12077,12077],"mapped","山"],[[12078,12078],"mapped","巛"],[[12079,12079],"mapped","工"],[[12080,12080],"mapped","己"],[[12081,12081],"mapped","巾"],[[12082,12082],"mapped","干"],[[12083,12083],"mapped","幺"],[[12084,12084],"mapped","广"],[[12085,12085],"mapped","廴"],[[12086,12086],"mapped","廾"],[[12087,12087],"mapped","弋"],[[12088,12088],"mapped","弓"],[[12089,12089],"mapped","彐"],[[12090,12090],"mapped","彡"],[[12091,12091],"mapped","彳"],[[12092,12092],"mapped","心"],[[12093,12093],"mapped","戈"],[[12094,12094],"mapped","戶"],[[12095,12095],"mapped","手"],[[12096,12096],"mapped","支"],[[12097,12097],"mapped","攴"],[[12098,12098],"mapped","文"],[[12099,12099],"mapped","斗"],[[12100,12100],"mapped","斤"],[[12101,12101],"mapped","方"],[[12102,12102],"mapped","无"],[[12103,12103],"mapped","日"],[[12104,12104],"mapped","曰"],[[12105,12105],"mapped","月"],[[12106,12106],"mapped","木"],[[12107,12107],"mapped","欠"],[[12108,12108],"mapped","止"],[[12109,12109],"mapped","歹"],[[12110,12110],"mapped","殳"],[[12111,12111],"mapped","毋"],[[12112,12112],"mapped","比"],[[12113,12113],"mapped","毛"],[[12114,12114],"mapped","氏"],[[12115,12115],"mapped","气"],[[12116,12116],"mapped","水"],[[12117,12117],"mapped","火"],[[12118,12118],"mapped","爪"],[[12119,12119],"mapped","父"],[[12120,12120],"mapped","爻"],[[12121,12121],"mapped","爿"],[[12122,12122],"mapped","片"],[[12123,12123],"mapped","牙"],[[12124,12124],"mapped","牛"],[[12125,12125],"mapped","犬"],[[12126,12126],"mapped","玄"],[[12127,12127],"mapped","玉"],[[12128,12128],"mapped","瓜"],[[12129,12129],"mapped","瓦"],[[12130,12130],"mapped","甘"],[[12131,12131],"mapped","生"],[[12132,12132],"mapped","用"],[[12133,12133],"mapped","田"],[[12134,12134],"mapped","疋"],[[12135,12135],"mapped","疒"],[[12136,12136],"mapped","癶"],[[12137,12137],"mapped","白"],[[12138,12138],"mapped","皮"],[[12139,12139],"mapped","皿"],[[12140,12140],"mapped","目"],[[12141,12141],"mapped","矛"],[[12142,12142],"mapped","矢"],[[12143,12143],"mapped","石"],[[12144,12144],"mapped","示"],[[12145,12145],"mapped","禸"],[[12146,12146],"mapped","禾"],[[12147,12147],"mapped","穴"],[[12148,12148],"mapped","立"],[[12149,12149],"mapped","竹"],[[12150,12150],"mapped","米"],[[12151,12151],"mapped","糸"],[[12152,12152],"mapped","缶"],[[12153,12153],"mapped","网"],[[12154,12154],"mapped","羊"],[[12155,12155],"mapped","羽"],[[12156,12156],"mapped","老"],[[12157,12157],"mapped","而"],[[12158,12158],"mapped","耒"],[[12159,12159],"mapped","耳"],[[12160,12160],"mapped","聿"],[[12161,12161],"mapped","肉"],[[12162,12162],"mapped","臣"],[[12163,12163],"mapped","自"],[[12164,12164],"mapped","至"],[[12165,12165],"mapped","臼"],[[12166,12166],"mapped","舌"],[[12167,12167],"mapped","舛"],[[12168,12168],"mapped","舟"],[[12169,12169],"mapped","艮"],[[12170,12170],"mapped","色"],[[12171,12171],"mapped","艸"],[[12172,12172],"mapped","虍"],[[12173,12173],"mapped","虫"],[[12174,12174],"mapped","血"],[[12175,12175],"mapped","行"],[[12176,12176],"mapped","衣"],[[12177,12177],"mapped","襾"],[[12178,12178],"mapped","見"],[[12179,12179],"mapped","角"],[[12180,12180],"mapped","言"],[[12181,12181],"mapped","谷"],[[12182,12182],"mapped","豆"],[[12183,12183],"mapped","豕"],[[12184,12184],"mapped","豸"],[[12185,12185],"mapped","貝"],[[12186,12186],"mapped","赤"],[[12187,12187],"mapped","走"],[[12188,12188],"mapped","足"],[[12189,12189],"mapped","身"],[[12190,12190],"mapped","車"],[[12191,12191],"mapped","辛"],[[12192,12192],"mapped","辰"],[[12193,12193],"mapped","辵"],[[12194,12194],"mapped","邑"],[[12195,12195],"mapped","酉"],[[12196,12196],"mapped","釆"],[[12197,12197],"mapped","里"],[[12198,12198],"mapped","金"],[[12199,12199],"mapped","長"],[[12200,12200],"mapped","門"],[[12201,12201],"mapped","阜"],[[12202,12202],"mapped","隶"],[[12203,12203],"mapped","隹"],[[12204,12204],"mapped","雨"],[[12205,12205],"mapped","靑"],[[12206,12206],"mapped","非"],[[12207,12207],"mapped","面"],[[12208,12208],"mapped","革"],[[12209,12209],"mapped","韋"],[[12210,12210],"mapped","韭"],[[12211,12211],"mapped","音"],[[12212,12212],"mapped","頁"],[[12213,12213],"mapped","風"],[[12214,12214],"mapped","飛"],[[12215,12215],"mapped","食"],[[12216,12216],"mapped","首"],[[12217,12217],"mapped","香"],[[12218,12218],"mapped","馬"],[[12219,12219],"mapped","骨"],[[12220,12220],"mapped","高"],[[12221,12221],"mapped","髟"],[[12222,12222],"mapped","鬥"],[[12223,12223],"mapped","鬯"],[[12224,12224],"mapped","鬲"],[[12225,12225],"mapped","鬼"],[[12226,12226],"mapped","魚"],[[12227,12227],"mapped","鳥"],[[12228,12228],"mapped","鹵"],[[12229,12229],"mapped","鹿"],[[12230,12230],"mapped","麥"],[[12231,12231],"mapped","麻"],[[12232,12232],"mapped","黃"],[[12233,12233],"mapped","黍"],[[12234,12234],"mapped","黑"],[[12235,12235],"mapped","黹"],[[12236,12236],"mapped","黽"],[[12237,12237],"mapped","鼎"],[[12238,12238],"mapped","鼓"],[[12239,12239],"mapped","鼠"],[[12240,12240],"mapped","鼻"],[[12241,12241],"mapped","齊"],[[12242,12242],"mapped","齒"],[[12243,12243],"mapped","龍"],[[12244,12244],"mapped","龜"],[[12245,12245],"mapped","龠"],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped"," "],[[12289,12289],"valid","","NV8"],[[12290,12290],"mapped","."],[[12291,12292],"valid","","NV8"],[[12293,12295],"valid"],[[12296,12329],"valid","","NV8"],[[12330,12333],"valid"],[[12334,12341],"valid","","NV8"],[[12342,12342],"mapped","〒"],[[12343,12343],"valid","","NV8"],[[12344,12344],"mapped","十"],[[12345,12345],"mapped","卄"],[[12346,12346],"mapped","卅"],[[12347,12347],"valid","","NV8"],[[12348,12348],"valid"],[[12349,12349],"valid","","NV8"],[[12350,12350],"valid","","NV8"],[[12351,12351],"valid","","NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped"," ゙"],[[12444,12444],"disallowed_STD3_mapped"," ゚"],[[12445,12446],"valid"],[[12447,12447],"mapped","より"],[[12448,12448],"valid","","NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped","コト"],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12590],"valid"],[[12591,12592],"disallowed"],[[12593,12593],"mapped","ᄀ"],[[12594,12594],"mapped","ᄁ"],[[12595,12595],"mapped","ᆪ"],[[12596,12596],"mapped","ᄂ"],[[12597,12597],"mapped","ᆬ"],[[12598,12598],"mapped","ᆭ"],[[12599,12599],"mapped","ᄃ"],[[12600,12600],"mapped","ᄄ"],[[12601,12601],"mapped","ᄅ"],[[12602,12602],"mapped","ᆰ"],[[12603,12603],"mapped","ᆱ"],[[12604,12604],"mapped","ᆲ"],[[12605,12605],"mapped","ᆳ"],[[12606,12606],"mapped","ᆴ"],[[12607,12607],"mapped","ᆵ"],[[12608,12608],"mapped","ᄚ"],[[12609,12609],"mapped","ᄆ"],[[12610,12610],"mapped","ᄇ"],[[12611,12611],"mapped","ᄈ"],[[12612,12612],"mapped","ᄡ"],[[12613,12613],"mapped","ᄉ"],[[12614,12614],"mapped","ᄊ"],[[12615,12615],"mapped","ᄋ"],[[12616,12616],"mapped","ᄌ"],[[12617,12617],"mapped","ᄍ"],[[12618,12618],"mapped","ᄎ"],[[12619,12619],"mapped","ᄏ"],[[12620,12620],"mapped","ᄐ"],[[12621,12621],"mapped","ᄑ"],[[12622,12622],"mapped","ᄒ"],[[12623,12623],"mapped","ᅡ"],[[12624,12624],"mapped","ᅢ"],[[12625,12625],"mapped","ᅣ"],[[12626,12626],"mapped","ᅤ"],[[12627,12627],"mapped","ᅥ"],[[12628,12628],"mapped","ᅦ"],[[12629,12629],"mapped","ᅧ"],[[12630,12630],"mapped","ᅨ"],[[12631,12631],"mapped","ᅩ"],[[12632,12632],"mapped","ᅪ"],[[12633,12633],"mapped","ᅫ"],[[12634,12634],"mapped","ᅬ"],[[12635,12635],"mapped","ᅭ"],[[12636,12636],"mapped","ᅮ"],[[12637,12637],"mapped","ᅯ"],[[12638,12638],"mapped","ᅰ"],[[12639,12639],"mapped","ᅱ"],[[12640,12640],"mapped","ᅲ"],[[12641,12641],"mapped","ᅳ"],[[12642,12642],"mapped","ᅴ"],[[12643,12643],"mapped","ᅵ"],[[12644,12644],"disallowed"],[[12645,12645],"mapped","ᄔ"],[[12646,12646],"mapped","ᄕ"],[[12647,12647],"mapped","ᇇ"],[[12648,12648],"mapped","ᇈ"],[[12649,12649],"mapped","ᇌ"],[[12650,12650],"mapped","ᇎ"],[[12651,12651],"mapped","ᇓ"],[[12652,12652],"mapped","ᇗ"],[[12653,12653],"mapped","ᇙ"],[[12654,12654],"mapped","ᄜ"],[[12655,12655],"mapped","ᇝ"],[[12656,12656],"mapped","ᇟ"],[[12657,12657],"mapped","ᄝ"],[[12658,12658],"mapped","ᄞ"],[[12659,12659],"mapped","ᄠ"],[[12660,12660],"mapped","ᄢ"],[[12661,12661],"mapped","ᄣ"],[[12662,12662],"mapped","ᄧ"],[[12663,12663],"mapped","ᄩ"],[[12664,12664],"mapped","ᄫ"],[[12665,12665],"mapped","ᄬ"],[[12666,12666],"mapped","ᄭ"],[[12667,12667],"mapped","ᄮ"],[[12668,12668],"mapped","ᄯ"],[[12669,12669],"mapped","ᄲ"],[[12670,12670],"mapped","ᄶ"],[[12671,12671],"mapped","ᅀ"],[[12672,12672],"mapped","ᅇ"],[[12673,12673],"mapped","ᅌ"],[[12674,12674],"mapped","ᇱ"],[[12675,12675],"mapped","ᇲ"],[[12676,12676],"mapped","ᅗ"],[[12677,12677],"mapped","ᅘ"],[[12678,12678],"mapped","ᅙ"],[[12679,12679],"mapped","ᆄ"],[[12680,12680],"mapped","ᆅ"],[[12681,12681],"mapped","ᆈ"],[[12682,12682],"mapped","ᆑ"],[[12683,12683],"mapped","ᆒ"],[[12684,12684],"mapped","ᆔ"],[[12685,12685],"mapped","ᆞ"],[[12686,12686],"mapped","ᆡ"],[[12687,12687],"disallowed"],[[12688,12689],"valid","","NV8"],[[12690,12690],"mapped","一"],[[12691,12691],"mapped","二"],[[12692,12692],"mapped","三"],[[12693,12693],"mapped","四"],[[12694,12694],"mapped","上"],[[12695,12695],"mapped","中"],[[12696,12696],"mapped","下"],[[12697,12697],"mapped","甲"],[[12698,12698],"mapped","乙"],[[12699,12699],"mapped","丙"],[[12700,12700],"mapped","丁"],[[12701,12701],"mapped","天"],[[12702,12702],"mapped","地"],[[12703,12703],"mapped","人"],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid","","NV8"],[[12752,12771],"valid","","NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped","(ᄀ)"],[[12801,12801],"disallowed_STD3_mapped","(ᄂ)"],[[12802,12802],"disallowed_STD3_mapped","(ᄃ)"],[[12803,12803],"disallowed_STD3_mapped","(ᄅ)"],[[12804,12804],"disallowed_STD3_mapped","(ᄆ)"],[[12805,12805],"disallowed_STD3_mapped","(ᄇ)"],[[12806,12806],"disallowed_STD3_mapped","(ᄉ)"],[[12807,12807],"disallowed_STD3_mapped","(ᄋ)"],[[12808,12808],"disallowed_STD3_mapped","(ᄌ)"],[[12809,12809],"disallowed_STD3_mapped","(ᄎ)"],[[12810,12810],"disallowed_STD3_mapped","(ᄏ)"],[[12811,12811],"disallowed_STD3_mapped","(ᄐ)"],[[12812,12812],"disallowed_STD3_mapped","(ᄑ)"],[[12813,12813],"disallowed_STD3_mapped","(ᄒ)"],[[12814,12814],"disallowed_STD3_mapped","(가)"],[[12815,12815],"disallowed_STD3_mapped","(나)"],[[12816,12816],"disallowed_STD3_mapped","(다)"],[[12817,12817],"disallowed_STD3_mapped","(라)"],[[12818,12818],"disallowed_STD3_mapped","(마)"],[[12819,12819],"disallowed_STD3_mapped","(바)"],[[12820,12820],"disallowed_STD3_mapped","(사)"],[[12821,12821],"disallowed_STD3_mapped","(아)"],[[12822,12822],"disallowed_STD3_mapped","(자)"],[[12823,12823],"disallowed_STD3_mapped","(차)"],[[12824,12824],"disallowed_STD3_mapped","(카)"],[[12825,12825],"disallowed_STD3_mapped","(타)"],[[12826,12826],"disallowed_STD3_mapped","(파)"],[[12827,12827],"disallowed_STD3_mapped","(하)"],[[12828,12828],"disallowed_STD3_mapped","(주)"],[[12829,12829],"disallowed_STD3_mapped","(오전)"],[[12830,12830],"disallowed_STD3_mapped","(오후)"],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped","(一)"],[[12833,12833],"disallowed_STD3_mapped","(二)"],[[12834,12834],"disallowed_STD3_mapped","(三)"],[[12835,12835],"disallowed_STD3_mapped","(四)"],[[12836,12836],"disallowed_STD3_mapped","(五)"],[[12837,12837],"disallowed_STD3_mapped","(六)"],[[12838,12838],"disallowed_STD3_mapped","(七)"],[[12839,12839],"disallowed_STD3_mapped","(八)"],[[12840,12840],"disallowed_STD3_mapped","(九)"],[[12841,12841],"disallowed_STD3_mapped","(十)"],[[12842,12842],"disallowed_STD3_mapped","(月)"],[[12843,12843],"disallowed_STD3_mapped","(火)"],[[12844,12844],"disallowed_STD3_mapped","(水)"],[[12845,12845],"disallowed_STD3_mapped","(木)"],[[12846,12846],"disallowed_STD3_mapped","(金)"],[[12847,12847],"disallowed_STD3_mapped","(土)"],[[12848,12848],"disallowed_STD3_mapped","(日)"],[[12849,12849],"disallowed_STD3_mapped","(株)"],[[12850,12850],"disallowed_STD3_mapped","(有)"],[[12851,12851],"disallowed_STD3_mapped","(社)"],[[12852,12852],"disallowed_STD3_mapped","(名)"],[[12853,12853],"disallowed_STD3_mapped","(特)"],[[12854,12854],"disallowed_STD3_mapped","(財)"],[[12855,12855],"disallowed_STD3_mapped","(祝)"],[[12856,12856],"disallowed_STD3_mapped","(労)"],[[12857,12857],"disallowed_STD3_mapped","(代)"],[[12858,12858],"disallowed_STD3_mapped","(呼)"],[[12859,12859],"disallowed_STD3_mapped","(学)"],[[12860,12860],"disallowed_STD3_mapped","(監)"],[[12861,12861],"disallowed_STD3_mapped","(企)"],[[12862,12862],"disallowed_STD3_mapped","(資)"],[[12863,12863],"disallowed_STD3_mapped","(協)"],[[12864,12864],"disallowed_STD3_mapped","(祭)"],[[12865,12865],"disallowed_STD3_mapped","(休)"],[[12866,12866],"disallowed_STD3_mapped","(自)"],[[12867,12867],"disallowed_STD3_mapped","(至)"],[[12868,12868],"mapped","問"],[[12869,12869],"mapped","幼"],[[12870,12870],"mapped","文"],[[12871,12871],"mapped","箏"],[[12872,12879],"valid","","NV8"],[[12880,12880],"mapped","pte"],[[12881,12881],"mapped","21"],[[12882,12882],"mapped","22"],[[12883,12883],"mapped","23"],[[12884,12884],"mapped","24"],[[12885,12885],"mapped","25"],[[12886,12886],"mapped","26"],[[12887,12887],"mapped","27"],[[12888,12888],"mapped","28"],[[12889,12889],"mapped","29"],[[12890,12890],"mapped","30"],[[12891,12891],"mapped","31"],[[12892,12892],"mapped","32"],[[12893,12893],"mapped","33"],[[12894,12894],"mapped","34"],[[12895,12895],"mapped","35"],[[12896,12896],"mapped","ᄀ"],[[12897,12897],"mapped","ᄂ"],[[12898,12898],"mapped","ᄃ"],[[12899,12899],"mapped","ᄅ"],[[12900,12900],"mapped","ᄆ"],[[12901,12901],"mapped","ᄇ"],[[12902,12902],"mapped","ᄉ"],[[12903,12903],"mapped","ᄋ"],[[12904,12904],"mapped","ᄌ"],[[12905,12905],"mapped","ᄎ"],[[12906,12906],"mapped","ᄏ"],[[12907,12907],"mapped","ᄐ"],[[12908,12908],"mapped","ᄑ"],[[12909,12909],"mapped","ᄒ"],[[12910,12910],"mapped","가"],[[12911,12911],"mapped","나"],[[12912,12912],"mapped","다"],[[12913,12913],"mapped","라"],[[12914,12914],"mapped","마"],[[12915,12915],"mapped","바"],[[12916,12916],"mapped","사"],[[12917,12917],"mapped","아"],[[12918,12918],"mapped","자"],[[12919,12919],"mapped","차"],[[12920,12920],"mapped","카"],[[12921,12921],"mapped","타"],[[12922,12922],"mapped","파"],[[12923,12923],"mapped","하"],[[12924,12924],"mapped","참고"],[[12925,12925],"mapped","주의"],[[12926,12926],"mapped","우"],[[12927,12927],"valid","","NV8"],[[12928,12928],"mapped","一"],[[12929,12929],"mapped","二"],[[12930,12930],"mapped","三"],[[12931,12931],"mapped","四"],[[12932,12932],"mapped","五"],[[12933,12933],"mapped","六"],[[12934,12934],"mapped","七"],[[12935,12935],"mapped","八"],[[12936,12936],"mapped","九"],[[12937,12937],"mapped","十"],[[12938,12938],"mapped","月"],[[12939,12939],"mapped","火"],[[12940,12940],"mapped","水"],[[12941,12941],"mapped","木"],[[12942,12942],"mapped","金"],[[12943,12943],"mapped","土"],[[12944,12944],"mapped","日"],[[12945,12945],"mapped","株"],[[12946,12946],"mapped","有"],[[12947,12947],"mapped","社"],[[12948,12948],"mapped","名"],[[12949,12949],"mapped","特"],[[12950,12950],"mapped","財"],[[12951,12951],"mapped","祝"],[[12952,12952],"mapped","労"],[[12953,12953],"mapped","秘"],[[12954,12954],"mapped","男"],[[12955,12955],"mapped","女"],[[12956,12956],"mapped","適"],[[12957,12957],"mapped","優"],[[12958,12958],"mapped","印"],[[12959,12959],"mapped","注"],[[12960,12960],"mapped","項"],[[12961,12961],"mapped","休"],[[12962,12962],"mapped","写"],[[12963,12963],"mapped","正"],[[12964,12964],"mapped","上"],[[12965,12965],"mapped","中"],[[12966,12966],"mapped","下"],[[12967,12967],"mapped","左"],[[12968,12968],"mapped","右"],[[12969,12969],"mapped","医"],[[12970,12970],"mapped","宗"],[[12971,12971],"mapped","学"],[[12972,12972],"mapped","監"],[[12973,12973],"mapped","企"],[[12974,12974],"mapped","資"],[[12975,12975],"mapped","協"],[[12976,12976],"mapped","夜"],[[12977,12977],"mapped","36"],[[12978,12978],"mapped","37"],[[12979,12979],"mapped","38"],[[12980,12980],"mapped","39"],[[12981,12981],"mapped","40"],[[12982,12982],"mapped","41"],[[12983,12983],"mapped","42"],[[12984,12984],"mapped","43"],[[12985,12985],"mapped","44"],[[12986,12986],"mapped","45"],[[12987,12987],"mapped","46"],[[12988,12988],"mapped","47"],[[12989,12989],"mapped","48"],[[12990,12990],"mapped","49"],[[12991,12991],"mapped","50"],[[12992,12992],"mapped","1月"],[[12993,12993],"mapped","2月"],[[12994,12994],"mapped","3月"],[[12995,12995],"mapped","4月"],[[12996,12996],"mapped","5月"],[[12997,12997],"mapped","6月"],[[12998,12998],"mapped","7月"],[[12999,12999],"mapped","8月"],[[13000,13000],"mapped","9月"],[[13001,13001],"mapped","10月"],[[13002,13002],"mapped","11月"],[[13003,13003],"mapped","12月"],[[13004,13004],"mapped","hg"],[[13005,13005],"mapped","erg"],[[13006,13006],"mapped","ev"],[[13007,13007],"mapped","ltd"],[[13008,13008],"mapped","ア"],[[13009,13009],"mapped","イ"],[[13010,13010],"mapped","ウ"],[[13011,13011],"mapped","エ"],[[13012,13012],"mapped","オ"],[[13013,13013],"mapped","カ"],[[13014,13014],"mapped","キ"],[[13015,13015],"mapped","ク"],[[13016,13016],"mapped","ケ"],[[13017,13017],"mapped","コ"],[[13018,13018],"mapped","サ"],[[13019,13019],"mapped","シ"],[[13020,13020],"mapped","ス"],[[13021,13021],"mapped","セ"],[[13022,13022],"mapped","ソ"],[[13023,13023],"mapped","タ"],[[13024,13024],"mapped","チ"],[[13025,13025],"mapped","ツ"],[[13026,13026],"mapped","テ"],[[13027,13027],"mapped","ト"],[[13028,13028],"mapped","ナ"],[[13029,13029],"mapped","ニ"],[[13030,13030],"mapped","ヌ"],[[13031,13031],"mapped","ネ"],[[13032,13032],"mapped","ノ"],[[13033,13033],"mapped","ハ"],[[13034,13034],"mapped","ヒ"],[[13035,13035],"mapped","フ"],[[13036,13036],"mapped","ヘ"],[[13037,13037],"mapped","ホ"],[[13038,13038],"mapped","マ"],[[13039,13039],"mapped","ミ"],[[13040,13040],"mapped","ム"],[[13041,13041],"mapped","メ"],[[13042,13042],"mapped","モ"],[[13043,13043],"mapped","ヤ"],[[13044,13044],"mapped","ユ"],[[13045,13045],"mapped","ヨ"],[[13046,13046],"mapped","ラ"],[[13047,13047],"mapped","リ"],[[13048,13048],"mapped","ル"],[[13049,13049],"mapped","レ"],[[13050,13050],"mapped","ロ"],[[13051,13051],"mapped","ワ"],[[13052,13052],"mapped","ヰ"],[[13053,13053],"mapped","ヱ"],[[13054,13054],"mapped","ヲ"],[[13055,13055],"disallowed"],[[13056,13056],"mapped","アパート"],[[13057,13057],"mapped","アルファ"],[[13058,13058],"mapped","アンペア"],[[13059,13059],"mapped","アール"],[[13060,13060],"mapped","イニング"],[[13061,13061],"mapped","インチ"],[[13062,13062],"mapped","ウォン"],[[13063,13063],"mapped","エスクード"],[[13064,13064],"mapped","エーカー"],[[13065,13065],"mapped","オンス"],[[13066,13066],"mapped","オーム"],[[13067,13067],"mapped","カイリ"],[[13068,13068],"mapped","カラット"],[[13069,13069],"mapped","カロリー"],[[13070,13070],"mapped","ガロン"],[[13071,13071],"mapped","ガンマ"],[[13072,13072],"mapped","ギガ"],[[13073,13073],"mapped","ギニー"],[[13074,13074],"mapped","キュリー"],[[13075,13075],"mapped","ギルダー"],[[13076,13076],"mapped","キロ"],[[13077,13077],"mapped","キログラム"],[[13078,13078],"mapped","キロメートル"],[[13079,13079],"mapped","キロワット"],[[13080,13080],"mapped","グラム"],[[13081,13081],"mapped","グラムトン"],[[13082,13082],"mapped","クルゼイロ"],[[13083,13083],"mapped","クローネ"],[[13084,13084],"mapped","ケース"],[[13085,13085],"mapped","コルナ"],[[13086,13086],"mapped","コーポ"],[[13087,13087],"mapped","サイクル"],[[13088,13088],"mapped","サンチーム"],[[13089,13089],"mapped","シリング"],[[13090,13090],"mapped","センチ"],[[13091,13091],"mapped","セント"],[[13092,13092],"mapped","ダース"],[[13093,13093],"mapped","デシ"],[[13094,13094],"mapped","ドル"],[[13095,13095],"mapped","トン"],[[13096,13096],"mapped","ナノ"],[[13097,13097],"mapped","ノット"],[[13098,13098],"mapped","ハイツ"],[[13099,13099],"mapped","パーセント"],[[13100,13100],"mapped","パーツ"],[[13101,13101],"mapped","バーレル"],[[13102,13102],"mapped","ピアストル"],[[13103,13103],"mapped","ピクル"],[[13104,13104],"mapped","ピコ"],[[13105,13105],"mapped","ビル"],[[13106,13106],"mapped","ファラッド"],[[13107,13107],"mapped","フィート"],[[13108,13108],"mapped","ブッシェル"],[[13109,13109],"mapped","フラン"],[[13110,13110],"mapped","ヘクタール"],[[13111,13111],"mapped","ペソ"],[[13112,13112],"mapped","ペニヒ"],[[13113,13113],"mapped","ヘルツ"],[[13114,13114],"mapped","ペンス"],[[13115,13115],"mapped","ページ"],[[13116,13116],"mapped","ベータ"],[[13117,13117],"mapped","ポイント"],[[13118,13118],"mapped","ボルト"],[[13119,13119],"mapped","ホン"],[[13120,13120],"mapped","ポンド"],[[13121,13121],"mapped","ホール"],[[13122,13122],"mapped","ホーン"],[[13123,13123],"mapped","マイクロ"],[[13124,13124],"mapped","マイル"],[[13125,13125],"mapped","マッハ"],[[13126,13126],"mapped","マルク"],[[13127,13127],"mapped","マンション"],[[13128,13128],"mapped","ミクロン"],[[13129,13129],"mapped","ミリ"],[[13130,13130],"mapped","ミリバール"],[[13131,13131],"mapped","メガ"],[[13132,13132],"mapped","メガトン"],[[13133,13133],"mapped","メートル"],[[13134,13134],"mapped","ヤード"],[[13135,13135],"mapped","ヤール"],[[13136,13136],"mapped","ユアン"],[[13137,13137],"mapped","リットル"],[[13138,13138],"mapped","リラ"],[[13139,13139],"mapped","ルピー"],[[13140,13140],"mapped","ルーブル"],[[13141,13141],"mapped","レム"],[[13142,13142],"mapped","レントゲン"],[[13143,13143],"mapped","ワット"],[[13144,13144],"mapped","0点"],[[13145,13145],"mapped","1点"],[[13146,13146],"mapped","2点"],[[13147,13147],"mapped","3点"],[[13148,13148],"mapped","4点"],[[13149,13149],"mapped","5点"],[[13150,13150],"mapped","6点"],[[13151,13151],"mapped","7点"],[[13152,13152],"mapped","8点"],[[13153,13153],"mapped","9点"],[[13154,13154],"mapped","10点"],[[13155,13155],"mapped","11点"],[[13156,13156],"mapped","12点"],[[13157,13157],"mapped","13点"],[[13158,13158],"mapped","14点"],[[13159,13159],"mapped","15点"],[[13160,13160],"mapped","16点"],[[13161,13161],"mapped","17点"],[[13162,13162],"mapped","18点"],[[13163,13163],"mapped","19点"],[[13164,13164],"mapped","20点"],[[13165,13165],"mapped","21点"],[[13166,13166],"mapped","22点"],[[13167,13167],"mapped","23点"],[[13168,13168],"mapped","24点"],[[13169,13169],"mapped","hpa"],[[13170,13170],"mapped","da"],[[13171,13171],"mapped","au"],[[13172,13172],"mapped","bar"],[[13173,13173],"mapped","ov"],[[13174,13174],"mapped","pc"],[[13175,13175],"mapped","dm"],[[13176,13176],"mapped","dm2"],[[13177,13177],"mapped","dm3"],[[13178,13178],"mapped","iu"],[[13179,13179],"mapped","平成"],[[13180,13180],"mapped","昭和"],[[13181,13181],"mapped","大正"],[[13182,13182],"mapped","明治"],[[13183,13183],"mapped","株式会社"],[[13184,13184],"mapped","pa"],[[13185,13185],"mapped","na"],[[13186,13186],"mapped","μa"],[[13187,13187],"mapped","ma"],[[13188,13188],"mapped","ka"],[[13189,13189],"mapped","kb"],[[13190,13190],"mapped","mb"],[[13191,13191],"mapped","gb"],[[13192,13192],"mapped","cal"],[[13193,13193],"mapped","kcal"],[[13194,13194],"mapped","pf"],[[13195,13195],"mapped","nf"],[[13196,13196],"mapped","μf"],[[13197,13197],"mapped","μg"],[[13198,13198],"mapped","mg"],[[13199,13199],"mapped","kg"],[[13200,13200],"mapped","hz"],[[13201,13201],"mapped","khz"],[[13202,13202],"mapped","mhz"],[[13203,13203],"mapped","ghz"],[[13204,13204],"mapped","thz"],[[13205,13205],"mapped","μl"],[[13206,13206],"mapped","ml"],[[13207,13207],"mapped","dl"],[[13208,13208],"mapped","kl"],[[13209,13209],"mapped","fm"],[[13210,13210],"mapped","nm"],[[13211,13211],"mapped","μm"],[[13212,13212],"mapped","mm"],[[13213,13213],"mapped","cm"],[[13214,13214],"mapped","km"],[[13215,13215],"mapped","mm2"],[[13216,13216],"mapped","cm2"],[[13217,13217],"mapped","m2"],[[13218,13218],"mapped","km2"],[[13219,13219],"mapped","mm3"],[[13220,13220],"mapped","cm3"],[[13221,13221],"mapped","m3"],[[13222,13222],"mapped","km3"],[[13223,13223],"mapped","m∕s"],[[13224,13224],"mapped","m∕s2"],[[13225,13225],"mapped","pa"],[[13226,13226],"mapped","kpa"],[[13227,13227],"mapped","mpa"],[[13228,13228],"mapped","gpa"],[[13229,13229],"mapped","rad"],[[13230,13230],"mapped","rad∕s"],[[13231,13231],"mapped","rad∕s2"],[[13232,13232],"mapped","ps"],[[13233,13233],"mapped","ns"],[[13234,13234],"mapped","μs"],[[13235,13235],"mapped","ms"],[[13236,13236],"mapped","pv"],[[13237,13237],"mapped","nv"],[[13238,13238],"mapped","μv"],[[13239,13239],"mapped","mv"],[[13240,13240],"mapped","kv"],[[13241,13241],"mapped","mv"],[[13242,13242],"mapped","pw"],[[13243,13243],"mapped","nw"],[[13244,13244],"mapped","μw"],[[13245,13245],"mapped","mw"],[[13246,13246],"mapped","kw"],[[13247,13247],"mapped","mw"],[[13248,13248],"mapped","kω"],[[13249,13249],"mapped","mω"],[[13250,13250],"disallowed"],[[13251,13251],"mapped","bq"],[[13252,13252],"mapped","cc"],[[13253,13253],"mapped","cd"],[[13254,13254],"mapped","c∕kg"],[[13255,13255],"disallowed"],[[13256,13256],"mapped","db"],[[13257,13257],"mapped","gy"],[[13258,13258],"mapped","ha"],[[13259,13259],"mapped","hp"],[[13260,13260],"mapped","in"],[[13261,13261],"mapped","kk"],[[13262,13262],"mapped","km"],[[13263,13263],"mapped","kt"],[[13264,13264],"mapped","lm"],[[13265,13265],"mapped","ln"],[[13266,13266],"mapped","log"],[[13267,13267],"mapped","lx"],[[13268,13268],"mapped","mb"],[[13269,13269],"mapped","mil"],[[13270,13270],"mapped","mol"],[[13271,13271],"mapped","ph"],[[13272,13272],"disallowed"],[[13273,13273],"mapped","ppm"],[[13274,13274],"mapped","pr"],[[13275,13275],"mapped","sr"],[[13276,13276],"mapped","sv"],[[13277,13277],"mapped","wb"],[[13278,13278],"mapped","v∕m"],[[13279,13279],"mapped","a∕m"],[[13280,13280],"mapped","1日"],[[13281,13281],"mapped","2日"],[[13282,13282],"mapped","3日"],[[13283,13283],"mapped","4日"],[[13284,13284],"mapped","5日"],[[13285,13285],"mapped","6日"],[[13286,13286],"mapped","7日"],[[13287,13287],"mapped","8日"],[[13288,13288],"mapped","9日"],[[13289,13289],"mapped","10日"],[[13290,13290],"mapped","11日"],[[13291,13291],"mapped","12日"],[[13292,13292],"mapped","13日"],[[13293,13293],"mapped","14日"],[[13294,13294],"mapped","15日"],[[13295,13295],"mapped","16日"],[[13296,13296],"mapped","17日"],[[13297,13297],"mapped","18日"],[[13298,13298],"mapped","19日"],[[13299,13299],"mapped","20日"],[[13300,13300],"mapped","21日"],[[13301,13301],"mapped","22日"],[[13302,13302],"mapped","23日"],[[13303,13303],"mapped","24日"],[[13304,13304],"mapped","25日"],[[13305,13305],"mapped","26日"],[[13306,13306],"mapped","27日"],[[13307,13307],"mapped","28日"],[[13308,13308],"mapped","29日"],[[13309,13309],"mapped","30日"],[[13310,13310],"mapped","31日"],[[13311,13311],"mapped","gal"],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid","","NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40938],"valid"],[[40939,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid","","NV8"],[[42146,42147],"valid","","NV8"],[[42148,42163],"valid","","NV8"],[[42164,42164],"valid","","NV8"],[[42165,42176],"valid","","NV8"],[[42177,42177],"valid","","NV8"],[[42178,42180],"valid","","NV8"],[[42181,42181],"valid","","NV8"],[[42182,42182],"valid","","NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid","","NV8"],[[42240,42508],"valid"],[[42509,42511],"valid","","NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped","ꙁ"],[[42561,42561],"valid"],[[42562,42562],"mapped","ꙃ"],[[42563,42563],"valid"],[[42564,42564],"mapped","ꙅ"],[[42565,42565],"valid"],[[42566,42566],"mapped","ꙇ"],[[42567,42567],"valid"],[[42568,42568],"mapped","ꙉ"],[[42569,42569],"valid"],[[42570,42570],"mapped","ꙋ"],[[42571,42571],"valid"],[[42572,42572],"mapped","ꙍ"],[[42573,42573],"valid"],[[42574,42574],"mapped","ꙏ"],[[42575,42575],"valid"],[[42576,42576],"mapped","ꙑ"],[[42577,42577],"valid"],[[42578,42578],"mapped","ꙓ"],[[42579,42579],"valid"],[[42580,42580],"mapped","ꙕ"],[[42581,42581],"valid"],[[42582,42582],"mapped","ꙗ"],[[42583,42583],"valid"],[[42584,42584],"mapped","ꙙ"],[[42585,42585],"valid"],[[42586,42586],"mapped","ꙛ"],[[42587,42587],"valid"],[[42588,42588],"mapped","ꙝ"],[[42589,42589],"valid"],[[42590,42590],"mapped","ꙟ"],[[42591,42591],"valid"],[[42592,42592],"mapped","ꙡ"],[[42593,42593],"valid"],[[42594,42594],"mapped","ꙣ"],[[42595,42595],"valid"],[[42596,42596],"mapped","ꙥ"],[[42597,42597],"valid"],[[42598,42598],"mapped","ꙧ"],[[42599,42599],"valid"],[[42600,42600],"mapped","ꙩ"],[[42601,42601],"valid"],[[42602,42602],"mapped","ꙫ"],[[42603,42603],"valid"],[[42604,42604],"mapped","ꙭ"],[[42605,42607],"valid"],[[42608,42611],"valid","","NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid","","NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped","ꚁ"],[[42625,42625],"valid"],[[42626,42626],"mapped","ꚃ"],[[42627,42627],"valid"],[[42628,42628],"mapped","ꚅ"],[[42629,42629],"valid"],[[42630,42630],"mapped","ꚇ"],[[42631,42631],"valid"],[[42632,42632],"mapped","ꚉ"],[[42633,42633],"valid"],[[42634,42634],"mapped","ꚋ"],[[42635,42635],"valid"],[[42636,42636],"mapped","ꚍ"],[[42637,42637],"valid"],[[42638,42638],"mapped","ꚏ"],[[42639,42639],"valid"],[[42640,42640],"mapped","ꚑ"],[[42641,42641],"valid"],[[42642,42642],"mapped","ꚓ"],[[42643,42643],"valid"],[[42644,42644],"mapped","ꚕ"],[[42645,42645],"valid"],[[42646,42646],"mapped","ꚗ"],[[42647,42647],"valid"],[[42648,42648],"mapped","ꚙ"],[[42649,42649],"valid"],[[42650,42650],"mapped","ꚛ"],[[42651,42651],"valid"],[[42652,42652],"mapped","ъ"],[[42653,42653],"mapped","ь"],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid","","NV8"],[[42736,42737],"valid"],[[42738,42743],"valid","","NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid","","NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid","","NV8"],[[42786,42786],"mapped","ꜣ"],[[42787,42787],"valid"],[[42788,42788],"mapped","ꜥ"],[[42789,42789],"valid"],[[42790,42790],"mapped","ꜧ"],[[42791,42791],"valid"],[[42792,42792],"mapped","ꜩ"],[[42793,42793],"valid"],[[42794,42794],"mapped","ꜫ"],[[42795,42795],"valid"],[[42796,42796],"mapped","ꜭ"],[[42797,42797],"valid"],[[42798,42798],"mapped","ꜯ"],[[42799,42801],"valid"],[[42802,42802],"mapped","ꜳ"],[[42803,42803],"valid"],[[42804,42804],"mapped","ꜵ"],[[42805,42805],"valid"],[[42806,42806],"mapped","ꜷ"],[[42807,42807],"valid"],[[42808,42808],"mapped","ꜹ"],[[42809,42809],"valid"],[[42810,42810],"mapped","ꜻ"],[[42811,42811],"valid"],[[42812,42812],"mapped","ꜽ"],[[42813,42813],"valid"],[[42814,42814],"mapped","ꜿ"],[[42815,42815],"valid"],[[42816,42816],"mapped","ꝁ"],[[42817,42817],"valid"],[[42818,42818],"mapped","ꝃ"],[[42819,42819],"valid"],[[42820,42820],"mapped","ꝅ"],[[42821,42821],"valid"],[[42822,42822],"mapped","ꝇ"],[[42823,42823],"valid"],[[42824,42824],"mapped","ꝉ"],[[42825,42825],"valid"],[[42826,42826],"mapped","ꝋ"],[[42827,42827],"valid"],[[42828,42828],"mapped","ꝍ"],[[42829,42829],"valid"],[[42830,42830],"mapped","ꝏ"],[[42831,42831],"valid"],[[42832,42832],"mapped","ꝑ"],[[42833,42833],"valid"],[[42834,42834],"mapped","ꝓ"],[[42835,42835],"valid"],[[42836,42836],"mapped","ꝕ"],[[42837,42837],"valid"],[[42838,42838],"mapped","ꝗ"],[[42839,42839],"valid"],[[42840,42840],"mapped","ꝙ"],[[42841,42841],"valid"],[[42842,42842],"mapped","ꝛ"],[[42843,42843],"valid"],[[42844,42844],"mapped","ꝝ"],[[42845,42845],"valid"],[[42846,42846],"mapped","ꝟ"],[[42847,42847],"valid"],[[42848,42848],"mapped","ꝡ"],[[42849,42849],"valid"],[[42850,42850],"mapped","ꝣ"],[[42851,42851],"valid"],[[42852,42852],"mapped","ꝥ"],[[42853,42853],"valid"],[[42854,42854],"mapped","ꝧ"],[[42855,42855],"valid"],[[42856,42856],"mapped","ꝩ"],[[42857,42857],"valid"],[[42858,42858],"mapped","ꝫ"],[[42859,42859],"valid"],[[42860,42860],"mapped","ꝭ"],[[42861,42861],"valid"],[[42862,42862],"mapped","ꝯ"],[[42863,42863],"valid"],[[42864,42864],"mapped","ꝯ"],[[42865,42872],"valid"],[[42873,42873],"mapped","ꝺ"],[[42874,42874],"valid"],[[42875,42875],"mapped","ꝼ"],[[42876,42876],"valid"],[[42877,42877],"mapped","ᵹ"],[[42878,42878],"mapped","ꝿ"],[[42879,42879],"valid"],[[42880,42880],"mapped","ꞁ"],[[42881,42881],"valid"],[[42882,42882],"mapped","ꞃ"],[[42883,42883],"valid"],[[42884,42884],"mapped","ꞅ"],[[42885,42885],"valid"],[[42886,42886],"mapped","ꞇ"],[[42887,42888],"valid"],[[42889,42890],"valid","","NV8"],[[42891,42891],"mapped","ꞌ"],[[42892,42892],"valid"],[[42893,42893],"mapped","ɥ"],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped","ꞑ"],[[42897,42897],"valid"],[[42898,42898],"mapped","ꞓ"],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped","ꞗ"],[[42903,42903],"valid"],[[42904,42904],"mapped","ꞙ"],[[42905,42905],"valid"],[[42906,42906],"mapped","ꞛ"],[[42907,42907],"valid"],[[42908,42908],"mapped","ꞝ"],[[42909,42909],"valid"],[[42910,42910],"mapped","ꞟ"],[[42911,42911],"valid"],[[42912,42912],"mapped","ꞡ"],[[42913,42913],"valid"],[[42914,42914],"mapped","ꞣ"],[[42915,42915],"valid"],[[42916,42916],"mapped","ꞥ"],[[42917,42917],"valid"],[[42918,42918],"mapped","ꞧ"],[[42919,42919],"valid"],[[42920,42920],"mapped","ꞩ"],[[42921,42921],"valid"],[[42922,42922],"mapped","ɦ"],[[42923,42923],"mapped","ɜ"],[[42924,42924],"mapped","ɡ"],[[42925,42925],"mapped","ɬ"],[[42926,42926],"mapped","ɪ"],[[42927,42927],"disallowed"],[[42928,42928],"mapped","ʞ"],[[42929,42929],"mapped","ʇ"],[[42930,42930],"mapped","ʝ"],[[42931,42931],"mapped","ꭓ"],[[42932,42932],"mapped","ꞵ"],[[42933,42933],"valid"],[[42934,42934],"mapped","ꞷ"],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped","ħ"],[[43001,43001],"mapped","œ"],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid","","NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid","","NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid","","NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43205],"valid"],[[43206,43213],"disallowed"],[[43214,43215],"valid","","NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid","","NV8"],[[43259,43259],"valid"],[[43260,43260],"valid","","NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid","","NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid","","NV8"],[[43360,43388],"valid","","NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid","","NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid","","NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid","","NV8"],[[43616,43638],"valid"],[[43639,43641],"valid","","NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid","","NV8"],[[43744,43759],"valid"],[[43760,43761],"valid","","NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid","","NV8"],[[43868,43868],"mapped","ꜧ"],[[43869,43869],"mapped","ꬷ"],[[43870,43870],"mapped","ɫ"],[[43871,43871],"mapped","ꭒ"],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped","Ꭰ"],[[43889,43889],"mapped","Ꭱ"],[[43890,43890],"mapped","Ꭲ"],[[43891,43891],"mapped","Ꭳ"],[[43892,43892],"mapped","Ꭴ"],[[43893,43893],"mapped","Ꭵ"],[[43894,43894],"mapped","Ꭶ"],[[43895,43895],"mapped","Ꭷ"],[[43896,43896],"mapped","Ꭸ"],[[43897,43897],"mapped","Ꭹ"],[[43898,43898],"mapped","Ꭺ"],[[43899,43899],"mapped","Ꭻ"],[[43900,43900],"mapped","Ꭼ"],[[43901,43901],"mapped","Ꭽ"],[[43902,43902],"mapped","Ꭾ"],[[43903,43903],"mapped","Ꭿ"],[[43904,43904],"mapped","Ꮀ"],[[43905,43905],"mapped","Ꮁ"],[[43906,43906],"mapped","Ꮂ"],[[43907,43907],"mapped","Ꮃ"],[[43908,43908],"mapped","Ꮄ"],[[43909,43909],"mapped","Ꮅ"],[[43910,43910],"mapped","Ꮆ"],[[43911,43911],"mapped","Ꮇ"],[[43912,43912],"mapped","Ꮈ"],[[43913,43913],"mapped","Ꮉ"],[[43914,43914],"mapped","Ꮊ"],[[43915,43915],"mapped","Ꮋ"],[[43916,43916],"mapped","Ꮌ"],[[43917,43917],"mapped","Ꮍ"],[[43918,43918],"mapped","Ꮎ"],[[43919,43919],"mapped","Ꮏ"],[[43920,43920],"mapped","Ꮐ"],[[43921,43921],"mapped","Ꮑ"],[[43922,43922],"mapped","Ꮒ"],[[43923,43923],"mapped","Ꮓ"],[[43924,43924],"mapped","Ꮔ"],[[43925,43925],"mapped","Ꮕ"],[[43926,43926],"mapped","Ꮖ"],[[43927,43927],"mapped","Ꮗ"],[[43928,43928],"mapped","Ꮘ"],[[43929,43929],"mapped","Ꮙ"],[[43930,43930],"mapped","Ꮚ"],[[43931,43931],"mapped","Ꮛ"],[[43932,43932],"mapped","Ꮜ"],[[43933,43933],"mapped","Ꮝ"],[[43934,43934],"mapped","Ꮞ"],[[43935,43935],"mapped","Ꮟ"],[[43936,43936],"mapped","Ꮠ"],[[43937,43937],"mapped","Ꮡ"],[[43938,43938],"mapped","Ꮢ"],[[43939,43939],"mapped","Ꮣ"],[[43940,43940],"mapped","Ꮤ"],[[43941,43941],"mapped","Ꮥ"],[[43942,43942],"mapped","Ꮦ"],[[43943,43943],"mapped","Ꮧ"],[[43944,43944],"mapped","Ꮨ"],[[43945,43945],"mapped","Ꮩ"],[[43946,43946],"mapped","Ꮪ"],[[43947,43947],"mapped","Ꮫ"],[[43948,43948],"mapped","Ꮬ"],[[43949,43949],"mapped","Ꮭ"],[[43950,43950],"mapped","Ꮮ"],[[43951,43951],"mapped","Ꮯ"],[[43952,43952],"mapped","Ꮰ"],[[43953,43953],"mapped","Ꮱ"],[[43954,43954],"mapped","Ꮲ"],[[43955,43955],"mapped","Ꮳ"],[[43956,43956],"mapped","Ꮴ"],[[43957,43957],"mapped","Ꮵ"],[[43958,43958],"mapped","Ꮶ"],[[43959,43959],"mapped","Ꮷ"],[[43960,43960],"mapped","Ꮸ"],[[43961,43961],"mapped","Ꮹ"],[[43962,43962],"mapped","Ꮺ"],[[43963,43963],"mapped","Ꮻ"],[[43964,43964],"mapped","Ꮼ"],[[43965,43965],"mapped","Ꮽ"],[[43966,43966],"mapped","Ꮾ"],[[43967,43967],"mapped","Ꮿ"],[[43968,44010],"valid"],[[44011,44011],"valid","","NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid","","NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid","","NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped","豈"],[[63745,63745],"mapped","更"],[[63746,63746],"mapped","車"],[[63747,63747],"mapped","賈"],[[63748,63748],"mapped","滑"],[[63749,63749],"mapped","串"],[[63750,63750],"mapped","句"],[[63751,63752],"mapped","龜"],[[63753,63753],"mapped","契"],[[63754,63754],"mapped","金"],[[63755,63755],"mapped","喇"],[[63756,63756],"mapped","奈"],[[63757,63757],"mapped","懶"],[[63758,63758],"mapped","癩"],[[63759,63759],"mapped","羅"],[[63760,63760],"mapped","蘿"],[[63761,63761],"mapped","螺"],[[63762,63762],"mapped","裸"],[[63763,63763],"mapped","邏"],[[63764,63764],"mapped","樂"],[[63765,63765],"mapped","洛"],[[63766,63766],"mapped","烙"],[[63767,63767],"mapped","珞"],[[63768,63768],"mapped","落"],[[63769,63769],"mapped","酪"],[[63770,63770],"mapped","駱"],[[63771,63771],"mapped","亂"],[[63772,63772],"mapped","卵"],[[63773,63773],"mapped","欄"],[[63774,63774],"mapped","爛"],[[63775,63775],"mapped","蘭"],[[63776,63776],"mapped","鸞"],[[63777,63777],"mapped","嵐"],[[63778,63778],"mapped","濫"],[[63779,63779],"mapped","藍"],[[63780,63780],"mapped","襤"],[[63781,63781],"mapped","拉"],[[63782,63782],"mapped","臘"],[[63783,63783],"mapped","蠟"],[[63784,63784],"mapped","廊"],[[63785,63785],"mapped","朗"],[[63786,63786],"mapped","浪"],[[63787,63787],"mapped","狼"],[[63788,63788],"mapped","郎"],[[63789,63789],"mapped","來"],[[63790,63790],"mapped","冷"],[[63791,63791],"mapped","勞"],[[63792,63792],"mapped","擄"],[[63793,63793],"mapped","櫓"],[[63794,63794],"mapped","爐"],[[63795,63795],"mapped","盧"],[[63796,63796],"mapped","老"],[[63797,63797],"mapped","蘆"],[[63798,63798],"mapped","虜"],[[63799,63799],"mapped","路"],[[63800,63800],"mapped","露"],[[63801,63801],"mapped","魯"],[[63802,63802],"mapped","鷺"],[[63803,63803],"mapped","碌"],[[63804,63804],"mapped","祿"],[[63805,63805],"mapped","綠"],[[63806,63806],"mapped","菉"],[[63807,63807],"mapped","錄"],[[63808,63808],"mapped","鹿"],[[63809,63809],"mapped","論"],[[63810,63810],"mapped","壟"],[[63811,63811],"mapped","弄"],[[63812,63812],"mapped","籠"],[[63813,63813],"mapped","聾"],[[63814,63814],"mapped","牢"],[[63815,63815],"mapped","磊"],[[63816,63816],"mapped","賂"],[[63817,63817],"mapped","雷"],[[63818,63818],"mapped","壘"],[[63819,63819],"mapped","屢"],[[63820,63820],"mapped","樓"],[[63821,63821],"mapped","淚"],[[63822,63822],"mapped","漏"],[[63823,63823],"mapped","累"],[[63824,63824],"mapped","縷"],[[63825,63825],"mapped","陋"],[[63826,63826],"mapped","勒"],[[63827,63827],"mapped","肋"],[[63828,63828],"mapped","凜"],[[63829,63829],"mapped","凌"],[[63830,63830],"mapped","稜"],[[63831,63831],"mapped","綾"],[[63832,63832],"mapped","菱"],[[63833,63833],"mapped","陵"],[[63834,63834],"mapped","讀"],[[63835,63835],"mapped","拏"],[[63836,63836],"mapped","樂"],[[63837,63837],"mapped","諾"],[[63838,63838],"mapped","丹"],[[63839,63839],"mapped","寧"],[[63840,63840],"mapped","怒"],[[63841,63841],"mapped","率"],[[63842,63842],"mapped","異"],[[63843,63843],"mapped","北"],[[63844,63844],"mapped","磻"],[[63845,63845],"mapped","便"],[[63846,63846],"mapped","復"],[[63847,63847],"mapped","不"],[[63848,63848],"mapped","泌"],[[63849,63849],"mapped","數"],[[63850,63850],"mapped","索"],[[63851,63851],"mapped","參"],[[63852,63852],"mapped","塞"],[[63853,63853],"mapped","省"],[[63854,63854],"mapped","葉"],[[63855,63855],"mapped","說"],[[63856,63856],"mapped","殺"],[[63857,63857],"mapped","辰"],[[63858,63858],"mapped","沈"],[[63859,63859],"mapped","拾"],[[63860,63860],"mapped","若"],[[63861,63861],"mapped","掠"],[[63862,63862],"mapped","略"],[[63863,63863],"mapped","亮"],[[63864,63864],"mapped","兩"],[[63865,63865],"mapped","凉"],[[63866,63866],"mapped","梁"],[[63867,63867],"mapped","糧"],[[63868,63868],"mapped","良"],[[63869,63869],"mapped","諒"],[[63870,63870],"mapped","量"],[[63871,63871],"mapped","勵"],[[63872,63872],"mapped","呂"],[[63873,63873],"mapped","女"],[[63874,63874],"mapped","廬"],[[63875,63875],"mapped","旅"],[[63876,63876],"mapped","濾"],[[63877,63877],"mapped","礪"],[[63878,63878],"mapped","閭"],[[63879,63879],"mapped","驪"],[[63880,63880],"mapped","麗"],[[63881,63881],"mapped","黎"],[[63882,63882],"mapped","力"],[[63883,63883],"mapped","曆"],[[63884,63884],"mapped","歷"],[[63885,63885],"mapped","轢"],[[63886,63886],"mapped","年"],[[63887,63887],"mapped","憐"],[[63888,63888],"mapped","戀"],[[63889,63889],"mapped","撚"],[[63890,63890],"mapped","漣"],[[63891,63891],"mapped","煉"],[[63892,63892],"mapped","璉"],[[63893,63893],"mapped","秊"],[[63894,63894],"mapped","練"],[[63895,63895],"mapped","聯"],[[63896,63896],"mapped","輦"],[[63897,63897],"mapped","蓮"],[[63898,63898],"mapped","連"],[[63899,63899],"mapped","鍊"],[[63900,63900],"mapped","列"],[[63901,63901],"mapped","劣"],[[63902,63902],"mapped","咽"],[[63903,63903],"mapped","烈"],[[63904,63904],"mapped","裂"],[[63905,63905],"mapped","說"],[[63906,63906],"mapped","廉"],[[63907,63907],"mapped","念"],[[63908,63908],"mapped","捻"],[[63909,63909],"mapped","殮"],[[63910,63910],"mapped","簾"],[[63911,63911],"mapped","獵"],[[63912,63912],"mapped","令"],[[63913,63913],"mapped","囹"],[[63914,63914],"mapped","寧"],[[63915,63915],"mapped","嶺"],[[63916,63916],"mapped","怜"],[[63917,63917],"mapped","玲"],[[63918,63918],"mapped","瑩"],[[63919,63919],"mapped","羚"],[[63920,63920],"mapped","聆"],[[63921,63921],"mapped","鈴"],[[63922,63922],"mapped","零"],[[63923,63923],"mapped","靈"],[[63924,63924],"mapped","領"],[[63925,63925],"mapped","例"],[[63926,63926],"mapped","禮"],[[63927,63927],"mapped","醴"],[[63928,63928],"mapped","隸"],[[63929,63929],"mapped","惡"],[[63930,63930],"mapped","了"],[[63931,63931],"mapped","僚"],[[63932,63932],"mapped","寮"],[[63933,63933],"mapped","尿"],[[63934,63934],"mapped","料"],[[63935,63935],"mapped","樂"],[[63936,63936],"mapped","燎"],[[63937,63937],"mapped","療"],[[63938,63938],"mapped","蓼"],[[63939,63939],"mapped","遼"],[[63940,63940],"mapped","龍"],[[63941,63941],"mapped","暈"],[[63942,63942],"mapped","阮"],[[63943,63943],"mapped","劉"],[[63944,63944],"mapped","杻"],[[63945,63945],"mapped","柳"],[[63946,63946],"mapped","流"],[[63947,63947],"mapped","溜"],[[63948,63948],"mapped","琉"],[[63949,63949],"mapped","留"],[[63950,63950],"mapped","硫"],[[63951,63951],"mapped","紐"],[[63952,63952],"mapped","類"],[[63953,63953],"mapped","六"],[[63954,63954],"mapped","戮"],[[63955,63955],"mapped","陸"],[[63956,63956],"mapped","倫"],[[63957,63957],"mapped","崙"],[[63958,63958],"mapped","淪"],[[63959,63959],"mapped","輪"],[[63960,63960],"mapped","律"],[[63961,63961],"mapped","慄"],[[63962,63962],"mapped","栗"],[[63963,63963],"mapped","率"],[[63964,63964],"mapped","隆"],[[63965,63965],"mapped","利"],[[63966,63966],"mapped","吏"],[[63967,63967],"mapped","履"],[[63968,63968],"mapped","易"],[[63969,63969],"mapped","李"],[[63970,63970],"mapped","梨"],[[63971,63971],"mapped","泥"],[[63972,63972],"mapped","理"],[[63973,63973],"mapped","痢"],[[63974,63974],"mapped","罹"],[[63975,63975],"mapped","裏"],[[63976,63976],"mapped","裡"],[[63977,63977],"mapped","里"],[[63978,63978],"mapped","離"],[[63979,63979],"mapped","匿"],[[63980,63980],"mapped","溺"],[[63981,63981],"mapped","吝"],[[63982,63982],"mapped","燐"],[[63983,63983],"mapped","璘"],[[63984,63984],"mapped","藺"],[[63985,63985],"mapped","隣"],[[63986,63986],"mapped","鱗"],[[63987,63987],"mapped","麟"],[[63988,63988],"mapped","林"],[[63989,63989],"mapped","淋"],[[63990,63990],"mapped","臨"],[[63991,63991],"mapped","立"],[[63992,63992],"mapped","笠"],[[63993,63993],"mapped","粒"],[[63994,63994],"mapped","狀"],[[63995,63995],"mapped","炙"],[[63996,63996],"mapped","識"],[[63997,63997],"mapped","什"],[[63998,63998],"mapped","茶"],[[63999,63999],"mapped","刺"],[[64000,64000],"mapped","切"],[[64001,64001],"mapped","度"],[[64002,64002],"mapped","拓"],[[64003,64003],"mapped","糖"],[[64004,64004],"mapped","宅"],[[64005,64005],"mapped","洞"],[[64006,64006],"mapped","暴"],[[64007,64007],"mapped","輻"],[[64008,64008],"mapped","行"],[[64009,64009],"mapped","降"],[[64010,64010],"mapped","見"],[[64011,64011],"mapped","廓"],[[64012,64012],"mapped","兀"],[[64013,64013],"mapped","嗀"],[[64014,64015],"valid"],[[64016,64016],"mapped","塚"],[[64017,64017],"valid"],[[64018,64018],"mapped","晴"],[[64019,64020],"valid"],[[64021,64021],"mapped","凞"],[[64022,64022],"mapped","猪"],[[64023,64023],"mapped","益"],[[64024,64024],"mapped","礼"],[[64025,64025],"mapped","神"],[[64026,64026],"mapped","祥"],[[64027,64027],"mapped","福"],[[64028,64028],"mapped","靖"],[[64029,64029],"mapped","精"],[[64030,64030],"mapped","羽"],[[64031,64031],"valid"],[[64032,64032],"mapped","蘒"],[[64033,64033],"valid"],[[64034,64034],"mapped","諸"],[[64035,64036],"valid"],[[64037,64037],"mapped","逸"],[[64038,64038],"mapped","都"],[[64039,64041],"valid"],[[64042,64042],"mapped","飯"],[[64043,64043],"mapped","飼"],[[64044,64044],"mapped","館"],[[64045,64045],"mapped","鶴"],[[64046,64046],"mapped","郞"],[[64047,64047],"mapped","隷"],[[64048,64048],"mapped","侮"],[[64049,64049],"mapped","僧"],[[64050,64050],"mapped","免"],[[64051,64051],"mapped","勉"],[[64052,64052],"mapped","勤"],[[64053,64053],"mapped","卑"],[[64054,64054],"mapped","喝"],[[64055,64055],"mapped","嘆"],[[64056,64056],"mapped","器"],[[64057,64057],"mapped","塀"],[[64058,64058],"mapped","墨"],[[64059,64059],"mapped","層"],[[64060,64060],"mapped","屮"],[[64061,64061],"mapped","悔"],[[64062,64062],"mapped","慨"],[[64063,64063],"mapped","憎"],[[64064,64064],"mapped","懲"],[[64065,64065],"mapped","敏"],[[64066,64066],"mapped","既"],[[64067,64067],"mapped","暑"],[[64068,64068],"mapped","梅"],[[64069,64069],"mapped","海"],[[64070,64070],"mapped","渚"],[[64071,64071],"mapped","漢"],[[64072,64072],"mapped","煮"],[[64073,64073],"mapped","爫"],[[64074,64074],"mapped","琢"],[[64075,64075],"mapped","碑"],[[64076,64076],"mapped","社"],[[64077,64077],"mapped","祉"],[[64078,64078],"mapped","祈"],[[64079,64079],"mapped","祐"],[[64080,64080],"mapped","祖"],[[64081,64081],"mapped","祝"],[[64082,64082],"mapped","禍"],[[64083,64083],"mapped","禎"],[[64084,64084],"mapped","穀"],[[64085,64085],"mapped","突"],[[64086,64086],"mapped","節"],[[64087,64087],"mapped","練"],[[64088,64088],"mapped","縉"],[[64089,64089],"mapped","繁"],[[64090,64090],"mapped","署"],[[64091,64091],"mapped","者"],[[64092,64092],"mapped","臭"],[[64093,64094],"mapped","艹"],[[64095,64095],"mapped","著"],[[64096,64096],"mapped","褐"],[[64097,64097],"mapped","視"],[[64098,64098],"mapped","謁"],[[64099,64099],"mapped","謹"],[[64100,64100],"mapped","賓"],[[64101,64101],"mapped","贈"],[[64102,64102],"mapped","辶"],[[64103,64103],"mapped","逸"],[[64104,64104],"mapped","難"],[[64105,64105],"mapped","響"],[[64106,64106],"mapped","頻"],[[64107,64107],"mapped","恵"],[[64108,64108],"mapped","𤋮"],[[64109,64109],"mapped","舘"],[[64110,64111],"disallowed"],[[64112,64112],"mapped","並"],[[64113,64113],"mapped","况"],[[64114,64114],"mapped","全"],[[64115,64115],"mapped","侀"],[[64116,64116],"mapped","充"],[[64117,64117],"mapped","冀"],[[64118,64118],"mapped","勇"],[[64119,64119],"mapped","勺"],[[64120,64120],"mapped","喝"],[[64121,64121],"mapped","啕"],[[64122,64122],"mapped","喙"],[[64123,64123],"mapped","嗢"],[[64124,64124],"mapped","塚"],[[64125,64125],"mapped","墳"],[[64126,64126],"mapped","奄"],[[64127,64127],"mapped","奔"],[[64128,64128],"mapped","婢"],[[64129,64129],"mapped","嬨"],[[64130,64130],"mapped","廒"],[[64131,64131],"mapped","廙"],[[64132,64132],"mapped","彩"],[[64133,64133],"mapped","徭"],[[64134,64134],"mapped","惘"],[[64135,64135],"mapped","慎"],[[64136,64136],"mapped","愈"],[[64137,64137],"mapped","憎"],[[64138,64138],"mapped","慠"],[[64139,64139],"mapped","懲"],[[64140,64140],"mapped","戴"],[[64141,64141],"mapped","揄"],[[64142,64142],"mapped","搜"],[[64143,64143],"mapped","摒"],[[64144,64144],"mapped","敖"],[[64145,64145],"mapped","晴"],[[64146,64146],"mapped","朗"],[[64147,64147],"mapped","望"],[[64148,64148],"mapped","杖"],[[64149,64149],"mapped","歹"],[[64150,64150],"mapped","殺"],[[64151,64151],"mapped","流"],[[64152,64152],"mapped","滛"],[[64153,64153],"mapped","滋"],[[64154,64154],"mapped","漢"],[[64155,64155],"mapped","瀞"],[[64156,64156],"mapped","煮"],[[64157,64157],"mapped","瞧"],[[64158,64158],"mapped","爵"],[[64159,64159],"mapped","犯"],[[64160,64160],"mapped","猪"],[[64161,64161],"mapped","瑱"],[[64162,64162],"mapped","甆"],[[64163,64163],"mapped","画"],[[64164,64164],"mapped","瘝"],[[64165,64165],"mapped","瘟"],[[64166,64166],"mapped","益"],[[64167,64167],"mapped","盛"],[[64168,64168],"mapped","直"],[[64169,64169],"mapped","睊"],[[64170,64170],"mapped","着"],[[64171,64171],"mapped","磌"],[[64172,64172],"mapped","窱"],[[64173,64173],"mapped","節"],[[64174,64174],"mapped","类"],[[64175,64175],"mapped","絛"],[[64176,64176],"mapped","練"],[[64177,64177],"mapped","缾"],[[64178,64178],"mapped","者"],[[64179,64179],"mapped","荒"],[[64180,64180],"mapped","華"],[[64181,64181],"mapped","蝹"],[[64182,64182],"mapped","襁"],[[64183,64183],"mapped","覆"],[[64184,64184],"mapped","視"],[[64185,64185],"mapped","調"],[[64186,64186],"mapped","諸"],[[64187,64187],"mapped","請"],[[64188,64188],"mapped","謁"],[[64189,64189],"mapped","諾"],[[64190,64190],"mapped","諭"],[[64191,64191],"mapped","謹"],[[64192,64192],"mapped","變"],[[64193,64193],"mapped","贈"],[[64194,64194],"mapped","輸"],[[64195,64195],"mapped","遲"],[[64196,64196],"mapped","醙"],[[64197,64197],"mapped","鉶"],[[64198,64198],"mapped","陼"],[[64199,64199],"mapped","難"],[[64200,64200],"mapped","靖"],[[64201,64201],"mapped","韛"],[[64202,64202],"mapped","響"],[[64203,64203],"mapped","頋"],[[64204,64204],"mapped","頻"],[[64205,64205],"mapped","鬒"],[[64206,64206],"mapped","龜"],[[64207,64207],"mapped","𢡊"],[[64208,64208],"mapped","𢡄"],[[64209,64209],"mapped","𣏕"],[[64210,64210],"mapped","㮝"],[[64211,64211],"mapped","䀘"],[[64212,64212],"mapped","䀹"],[[64213,64213],"mapped","𥉉"],[[64214,64214],"mapped","𥳐"],[[64215,64215],"mapped","𧻓"],[[64216,64216],"mapped","齃"],[[64217,64217],"mapped","龎"],[[64218,64255],"disallowed"],[[64256,64256],"mapped","ff"],[[64257,64257],"mapped","fi"],[[64258,64258],"mapped","fl"],[[64259,64259],"mapped","ffi"],[[64260,64260],"mapped","ffl"],[[64261,64262],"mapped","st"],[[64263,64274],"disallowed"],[[64275,64275],"mapped","մն"],[[64276,64276],"mapped","մե"],[[64277,64277],"mapped","մի"],[[64278,64278],"mapped","վն"],[[64279,64279],"mapped","մխ"],[[64280,64284],"disallowed"],[[64285,64285],"mapped","יִ"],[[64286,64286],"valid"],[[64287,64287],"mapped","ײַ"],[[64288,64288],"mapped","ע"],[[64289,64289],"mapped","א"],[[64290,64290],"mapped","ד"],[[64291,64291],"mapped","ה"],[[64292,64292],"mapped","כ"],[[64293,64293],"mapped","ל"],[[64294,64294],"mapped","ם"],[[64295,64295],"mapped","ר"],[[64296,64296],"mapped","ת"],[[64297,64297],"disallowed_STD3_mapped","+"],[[64298,64298],"mapped","שׁ"],[[64299,64299],"mapped","שׂ"],[[64300,64300],"mapped","שּׁ"],[[64301,64301],"mapped","שּׂ"],[[64302,64302],"mapped","אַ"],[[64303,64303],"mapped","אָ"],[[64304,64304],"mapped","אּ"],[[64305,64305],"mapped","בּ"],[[64306,64306],"mapped","גּ"],[[64307,64307],"mapped","דּ"],[[64308,64308],"mapped","הּ"],[[64309,64309],"mapped","וּ"],[[64310,64310],"mapped","זּ"],[[64311,64311],"disallowed"],[[64312,64312],"mapped","טּ"],[[64313,64313],"mapped","יּ"],[[64314,64314],"mapped","ךּ"],[[64315,64315],"mapped","כּ"],[[64316,64316],"mapped","לּ"],[[64317,64317],"disallowed"],[[64318,64318],"mapped","מּ"],[[64319,64319],"disallowed"],[[64320,64320],"mapped","נּ"],[[64321,64321],"mapped","סּ"],[[64322,64322],"disallowed"],[[64323,64323],"mapped","ףּ"],[[64324,64324],"mapped","פּ"],[[64325,64325],"disallowed"],[[64326,64326],"mapped","צּ"],[[64327,64327],"mapped","קּ"],[[64328,64328],"mapped","רּ"],[[64329,64329],"mapped","שּ"],[[64330,64330],"mapped","תּ"],[[64331,64331],"mapped","וֹ"],[[64332,64332],"mapped","בֿ"],[[64333,64333],"mapped","כֿ"],[[64334,64334],"mapped","פֿ"],[[64335,64335],"mapped","אל"],[[64336,64337],"mapped","ٱ"],[[64338,64341],"mapped","ٻ"],[[64342,64345],"mapped","پ"],[[64346,64349],"mapped","ڀ"],[[64350,64353],"mapped","ٺ"],[[64354,64357],"mapped","ٿ"],[[64358,64361],"mapped","ٹ"],[[64362,64365],"mapped","ڤ"],[[64366,64369],"mapped","ڦ"],[[64370,64373],"mapped","ڄ"],[[64374,64377],"mapped","ڃ"],[[64378,64381],"mapped","چ"],[[64382,64385],"mapped","ڇ"],[[64386,64387],"mapped","ڍ"],[[64388,64389],"mapped","ڌ"],[[64390,64391],"mapped","ڎ"],[[64392,64393],"mapped","ڈ"],[[64394,64395],"mapped","ژ"],[[64396,64397],"mapped","ڑ"],[[64398,64401],"mapped","ک"],[[64402,64405],"mapped","گ"],[[64406,64409],"mapped","ڳ"],[[64410,64413],"mapped","ڱ"],[[64414,64415],"mapped","ں"],[[64416,64419],"mapped","ڻ"],[[64420,64421],"mapped","ۀ"],[[64422,64425],"mapped","ہ"],[[64426,64429],"mapped","ھ"],[[64430,64431],"mapped","ے"],[[64432,64433],"mapped","ۓ"],[[64434,64449],"valid","","NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped","ڭ"],[[64471,64472],"mapped","ۇ"],[[64473,64474],"mapped","ۆ"],[[64475,64476],"mapped","ۈ"],[[64477,64477],"mapped","ۇٴ"],[[64478,64479],"mapped","ۋ"],[[64480,64481],"mapped","ۅ"],[[64482,64483],"mapped","ۉ"],[[64484,64487],"mapped","ې"],[[64488,64489],"mapped","ى"],[[64490,64491],"mapped","ئا"],[[64492,64493],"mapped","ئە"],[[64494,64495],"mapped","ئو"],[[64496,64497],"mapped","ئۇ"],[[64498,64499],"mapped","ئۆ"],[[64500,64501],"mapped","ئۈ"],[[64502,64504],"mapped","ئې"],[[64505,64507],"mapped","ئى"],[[64508,64511],"mapped","ی"],[[64512,64512],"mapped","ئج"],[[64513,64513],"mapped","ئح"],[[64514,64514],"mapped","ئم"],[[64515,64515],"mapped","ئى"],[[64516,64516],"mapped","ئي"],[[64517,64517],"mapped","بج"],[[64518,64518],"mapped","بح"],[[64519,64519],"mapped","بخ"],[[64520,64520],"mapped","بم"],[[64521,64521],"mapped","بى"],[[64522,64522],"mapped","بي"],[[64523,64523],"mapped","تج"],[[64524,64524],"mapped","تح"],[[64525,64525],"mapped","تخ"],[[64526,64526],"mapped","تم"],[[64527,64527],"mapped","تى"],[[64528,64528],"mapped","تي"],[[64529,64529],"mapped","ثج"],[[64530,64530],"mapped","ثم"],[[64531,64531],"mapped","ثى"],[[64532,64532],"mapped","ثي"],[[64533,64533],"mapped","جح"],[[64534,64534],"mapped","جم"],[[64535,64535],"mapped","حج"],[[64536,64536],"mapped","حم"],[[64537,64537],"mapped","خج"],[[64538,64538],"mapped","خح"],[[64539,64539],"mapped","خم"],[[64540,64540],"mapped","سج"],[[64541,64541],"mapped","سح"],[[64542,64542],"mapped","سخ"],[[64543,64543],"mapped","سم"],[[64544,64544],"mapped","صح"],[[64545,64545],"mapped","صم"],[[64546,64546],"mapped","ضج"],[[64547,64547],"mapped","ضح"],[[64548,64548],"mapped","ضخ"],[[64549,64549],"mapped","ضم"],[[64550,64550],"mapped","طح"],[[64551,64551],"mapped","طم"],[[64552,64552],"mapped","ظم"],[[64553,64553],"mapped","عج"],[[64554,64554],"mapped","عم"],[[64555,64555],"mapped","غج"],[[64556,64556],"mapped","غم"],[[64557,64557],"mapped","فج"],[[64558,64558],"mapped","فح"],[[64559,64559],"mapped","فخ"],[[64560,64560],"mapped","فم"],[[64561,64561],"mapped","فى"],[[64562,64562],"mapped","في"],[[64563,64563],"mapped","قح"],[[64564,64564],"mapped","قم"],[[64565,64565],"mapped","قى"],[[64566,64566],"mapped","قي"],[[64567,64567],"mapped","كا"],[[64568,64568],"mapped","كج"],[[64569,64569],"mapped","كح"],[[64570,64570],"mapped","كخ"],[[64571,64571],"mapped","كل"],[[64572,64572],"mapped","كم"],[[64573,64573],"mapped","كى"],[[64574,64574],"mapped","كي"],[[64575,64575],"mapped","لج"],[[64576,64576],"mapped","لح"],[[64577,64577],"mapped","لخ"],[[64578,64578],"mapped","لم"],[[64579,64579],"mapped","لى"],[[64580,64580],"mapped","لي"],[[64581,64581],"mapped","مج"],[[64582,64582],"mapped","مح"],[[64583,64583],"mapped","مخ"],[[64584,64584],"mapped","مم"],[[64585,64585],"mapped","مى"],[[64586,64586],"mapped","مي"],[[64587,64587],"mapped","نج"],[[64588,64588],"mapped","نح"],[[64589,64589],"mapped","نخ"],[[64590,64590],"mapped","نم"],[[64591,64591],"mapped","نى"],[[64592,64592],"mapped","ني"],[[64593,64593],"mapped","هج"],[[64594,64594],"mapped","هم"],[[64595,64595],"mapped","هى"],[[64596,64596],"mapped","هي"],[[64597,64597],"mapped","يج"],[[64598,64598],"mapped","يح"],[[64599,64599],"mapped","يخ"],[[64600,64600],"mapped","يم"],[[64601,64601],"mapped","يى"],[[64602,64602],"mapped","يي"],[[64603,64603],"mapped","ذٰ"],[[64604,64604],"mapped","رٰ"],[[64605,64605],"mapped","ىٰ"],[[64606,64606],"disallowed_STD3_mapped"," ٌّ"],[[64607,64607],"disallowed_STD3_mapped"," ٍّ"],[[64608,64608],"disallowed_STD3_mapped"," َّ"],[[64609,64609],"disallowed_STD3_mapped"," ُّ"],[[64610,64610],"disallowed_STD3_mapped"," ِّ"],[[64611,64611],"disallowed_STD3_mapped"," ّٰ"],[[64612,64612],"mapped","ئر"],[[64613,64613],"mapped","ئز"],[[64614,64614],"mapped","ئم"],[[64615,64615],"mapped","ئن"],[[64616,64616],"mapped","ئى"],[[64617,64617],"mapped","ئي"],[[64618,64618],"mapped","بر"],[[64619,64619],"mapped","بز"],[[64620,64620],"mapped","بم"],[[64621,64621],"mapped","بن"],[[64622,64622],"mapped","بى"],[[64623,64623],"mapped","بي"],[[64624,64624],"mapped","تر"],[[64625,64625],"mapped","تز"],[[64626,64626],"mapped","تم"],[[64627,64627],"mapped","تن"],[[64628,64628],"mapped","تى"],[[64629,64629],"mapped","تي"],[[64630,64630],"mapped","ثر"],[[64631,64631],"mapped","ثز"],[[64632,64632],"mapped","ثم"],[[64633,64633],"mapped","ثن"],[[64634,64634],"mapped","ثى"],[[64635,64635],"mapped","ثي"],[[64636,64636],"mapped","فى"],[[64637,64637],"mapped","في"],[[64638,64638],"mapped","قى"],[[64639,64639],"mapped","قي"],[[64640,64640],"mapped","كا"],[[64641,64641],"mapped","كل"],[[64642,64642],"mapped","كم"],[[64643,64643],"mapped","كى"],[[64644,64644],"mapped","كي"],[[64645,64645],"mapped","لم"],[[64646,64646],"mapped","لى"],[[64647,64647],"mapped","لي"],[[64648,64648],"mapped","ما"],[[64649,64649],"mapped","مم"],[[64650,64650],"mapped","نر"],[[64651,64651],"mapped","نز"],[[64652,64652],"mapped","نم"],[[64653,64653],"mapped","نن"],[[64654,64654],"mapped","نى"],[[64655,64655],"mapped","ني"],[[64656,64656],"mapped","ىٰ"],[[64657,64657],"mapped","ير"],[[64658,64658],"mapped","يز"],[[64659,64659],"mapped","يم"],[[64660,64660],"mapped","ين"],[[64661,64661],"mapped","يى"],[[64662,64662],"mapped","يي"],[[64663,64663],"mapped","ئج"],[[64664,64664],"mapped","ئح"],[[64665,64665],"mapped","ئخ"],[[64666,64666],"mapped","ئم"],[[64667,64667],"mapped","ئه"],[[64668,64668],"mapped","بج"],[[64669,64669],"mapped","بح"],[[64670,64670],"mapped","بخ"],[[64671,64671],"mapped","بم"],[[64672,64672],"mapped","به"],[[64673,64673],"mapped","تج"],[[64674,64674],"mapped","تح"],[[64675,64675],"mapped","تخ"],[[64676,64676],"mapped","تم"],[[64677,64677],"mapped","ته"],[[64678,64678],"mapped","ثم"],[[64679,64679],"mapped","جح"],[[64680,64680],"mapped","جم"],[[64681,64681],"mapped","حج"],[[64682,64682],"mapped","حم"],[[64683,64683],"mapped","خج"],[[64684,64684],"mapped","خم"],[[64685,64685],"mapped","سج"],[[64686,64686],"mapped","سح"],[[64687,64687],"mapped","سخ"],[[64688,64688],"mapped","سم"],[[64689,64689],"mapped","صح"],[[64690,64690],"mapped","صخ"],[[64691,64691],"mapped","صم"],[[64692,64692],"mapped","ضج"],[[64693,64693],"mapped","ضح"],[[64694,64694],"mapped","ضخ"],[[64695,64695],"mapped","ضم"],[[64696,64696],"mapped","طح"],[[64697,64697],"mapped","ظم"],[[64698,64698],"mapped","عج"],[[64699,64699],"mapped","عم"],[[64700,64700],"mapped","غج"],[[64701,64701],"mapped","غم"],[[64702,64702],"mapped","فج"],[[64703,64703],"mapped","فح"],[[64704,64704],"mapped","فخ"],[[64705,64705],"mapped","فم"],[[64706,64706],"mapped","قح"],[[64707,64707],"mapped","قم"],[[64708,64708],"mapped","كج"],[[64709,64709],"mapped","كح"],[[64710,64710],"mapped","كخ"],[[64711,64711],"mapped","كل"],[[64712,64712],"mapped","كم"],[[64713,64713],"mapped","لج"],[[64714,64714],"mapped","لح"],[[64715,64715],"mapped","لخ"],[[64716,64716],"mapped","لم"],[[64717,64717],"mapped","له"],[[64718,64718],"mapped","مج"],[[64719,64719],"mapped","مح"],[[64720,64720],"mapped","مخ"],[[64721,64721],"mapped","مم"],[[64722,64722],"mapped","نج"],[[64723,64723],"mapped","نح"],[[64724,64724],"mapped","نخ"],[[64725,64725],"mapped","نم"],[[64726,64726],"mapped","نه"],[[64727,64727],"mapped","هج"],[[64728,64728],"mapped","هم"],[[64729,64729],"mapped","هٰ"],[[64730,64730],"mapped","يج"],[[64731,64731],"mapped","يح"],[[64732,64732],"mapped","يخ"],[[64733,64733],"mapped","يم"],[[64734,64734],"mapped","يه"],[[64735,64735],"mapped","ئم"],[[64736,64736],"mapped","ئه"],[[64737,64737],"mapped","بم"],[[64738,64738],"mapped","به"],[[64739,64739],"mapped","تم"],[[64740,64740],"mapped","ته"],[[64741,64741],"mapped","ثم"],[[64742,64742],"mapped","ثه"],[[64743,64743],"mapped","سم"],[[64744,64744],"mapped","سه"],[[64745,64745],"mapped","شم"],[[64746,64746],"mapped","شه"],[[64747,64747],"mapped","كل"],[[64748,64748],"mapped","كم"],[[64749,64749],"mapped","لم"],[[64750,64750],"mapped","نم"],[[64751,64751],"mapped","نه"],[[64752,64752],"mapped","يم"],[[64753,64753],"mapped","يه"],[[64754,64754],"mapped","ـَّ"],[[64755,64755],"mapped","ـُّ"],[[64756,64756],"mapped","ـِّ"],[[64757,64757],"mapped","طى"],[[64758,64758],"mapped","طي"],[[64759,64759],"mapped","عى"],[[64760,64760],"mapped","عي"],[[64761,64761],"mapped","غى"],[[64762,64762],"mapped","غي"],[[64763,64763],"mapped","سى"],[[64764,64764],"mapped","سي"],[[64765,64765],"mapped","شى"],[[64766,64766],"mapped","شي"],[[64767,64767],"mapped","حى"],[[64768,64768],"mapped","حي"],[[64769,64769],"mapped","جى"],[[64770,64770],"mapped","جي"],[[64771,64771],"mapped","خى"],[[64772,64772],"mapped","خي"],[[64773,64773],"mapped","صى"],[[64774,64774],"mapped","صي"],[[64775,64775],"mapped","ضى"],[[64776,64776],"mapped","ضي"],[[64777,64777],"mapped","شج"],[[64778,64778],"mapped","شح"],[[64779,64779],"mapped","شخ"],[[64780,64780],"mapped","شم"],[[64781,64781],"mapped","شر"],[[64782,64782],"mapped","سر"],[[64783,64783],"mapped","صر"],[[64784,64784],"mapped","ضر"],[[64785,64785],"mapped","طى"],[[64786,64786],"mapped","طي"],[[64787,64787],"mapped","عى"],[[64788,64788],"mapped","عي"],[[64789,64789],"mapped","غى"],[[64790,64790],"mapped","غي"],[[64791,64791],"mapped","سى"],[[64792,64792],"mapped","سي"],[[64793,64793],"mapped","شى"],[[64794,64794],"mapped","شي"],[[64795,64795],"mapped","حى"],[[64796,64796],"mapped","حي"],[[64797,64797],"mapped","جى"],[[64798,64798],"mapped","جي"],[[64799,64799],"mapped","خى"],[[64800,64800],"mapped","خي"],[[64801,64801],"mapped","صى"],[[64802,64802],"mapped","صي"],[[64803,64803],"mapped","ضى"],[[64804,64804],"mapped","ضي"],[[64805,64805],"mapped","شج"],[[64806,64806],"mapped","شح"],[[64807,64807],"mapped","شخ"],[[64808,64808],"mapped","شم"],[[64809,64809],"mapped","شر"],[[64810,64810],"mapped","سر"],[[64811,64811],"mapped","صر"],[[64812,64812],"mapped","ضر"],[[64813,64813],"mapped","شج"],[[64814,64814],"mapped","شح"],[[64815,64815],"mapped","شخ"],[[64816,64816],"mapped","شم"],[[64817,64817],"mapped","سه"],[[64818,64818],"mapped","شه"],[[64819,64819],"mapped","طم"],[[64820,64820],"mapped","سج"],[[64821,64821],"mapped","سح"],[[64822,64822],"mapped","سخ"],[[64823,64823],"mapped","شج"],[[64824,64824],"mapped","شح"],[[64825,64825],"mapped","شخ"],[[64826,64826],"mapped","طم"],[[64827,64827],"mapped","ظم"],[[64828,64829],"mapped","اً"],[[64830,64831],"valid","","NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped","تجم"],[[64849,64850],"mapped","تحج"],[[64851,64851],"mapped","تحم"],[[64852,64852],"mapped","تخم"],[[64853,64853],"mapped","تمج"],[[64854,64854],"mapped","تمح"],[[64855,64855],"mapped","تمخ"],[[64856,64857],"mapped","جمح"],[[64858,64858],"mapped","حمي"],[[64859,64859],"mapped","حمى"],[[64860,64860],"mapped","سحج"],[[64861,64861],"mapped","سجح"],[[64862,64862],"mapped","سجى"],[[64863,64864],"mapped","سمح"],[[64865,64865],"mapped","سمج"],[[64866,64867],"mapped","سمم"],[[64868,64869],"mapped","صحح"],[[64870,64870],"mapped","صمم"],[[64871,64872],"mapped","شحم"],[[64873,64873],"mapped","شجي"],[[64874,64875],"mapped","شمخ"],[[64876,64877],"mapped","شمم"],[[64878,64878],"mapped","ضحى"],[[64879,64880],"mapped","ضخم"],[[64881,64882],"mapped","طمح"],[[64883,64883],"mapped","طمم"],[[64884,64884],"mapped","طمي"],[[64885,64885],"mapped","عجم"],[[64886,64887],"mapped","عمم"],[[64888,64888],"mapped","عمى"],[[64889,64889],"mapped","غمم"],[[64890,64890],"mapped","غمي"],[[64891,64891],"mapped","غمى"],[[64892,64893],"mapped","فخم"],[[64894,64894],"mapped","قمح"],[[64895,64895],"mapped","قمم"],[[64896,64896],"mapped","لحم"],[[64897,64897],"mapped","لحي"],[[64898,64898],"mapped","لحى"],[[64899,64900],"mapped","لجج"],[[64901,64902],"mapped","لخم"],[[64903,64904],"mapped","لمح"],[[64905,64905],"mapped","محج"],[[64906,64906],"mapped","محم"],[[64907,64907],"mapped","محي"],[[64908,64908],"mapped","مجح"],[[64909,64909],"mapped","مجم"],[[64910,64910],"mapped","مخج"],[[64911,64911],"mapped","مخم"],[[64912,64913],"disallowed"],[[64914,64914],"mapped","مجخ"],[[64915,64915],"mapped","همج"],[[64916,64916],"mapped","همم"],[[64917,64917],"mapped","نحم"],[[64918,64918],"mapped","نحى"],[[64919,64920],"mapped","نجم"],[[64921,64921],"mapped","نجى"],[[64922,64922],"mapped","نمي"],[[64923,64923],"mapped","نمى"],[[64924,64925],"mapped","يمم"],[[64926,64926],"mapped","بخي"],[[64927,64927],"mapped","تجي"],[[64928,64928],"mapped","تجى"],[[64929,64929],"mapped","تخي"],[[64930,64930],"mapped","تخى"],[[64931,64931],"mapped","تمي"],[[64932,64932],"mapped","تمى"],[[64933,64933],"mapped","جمي"],[[64934,64934],"mapped","جحى"],[[64935,64935],"mapped","جمى"],[[64936,64936],"mapped","سخى"],[[64937,64937],"mapped","صحي"],[[64938,64938],"mapped","شحي"],[[64939,64939],"mapped","ضحي"],[[64940,64940],"mapped","لجي"],[[64941,64941],"mapped","لمي"],[[64942,64942],"mapped","يحي"],[[64943,64943],"mapped","يجي"],[[64944,64944],"mapped","يمي"],[[64945,64945],"mapped","ممي"],[[64946,64946],"mapped","قمي"],[[64947,64947],"mapped","نحي"],[[64948,64948],"mapped","قمح"],[[64949,64949],"mapped","لحم"],[[64950,64950],"mapped","عمي"],[[64951,64951],"mapped","كمي"],[[64952,64952],"mapped","نجح"],[[64953,64953],"mapped","مخي"],[[64954,64954],"mapped","لجم"],[[64955,64955],"mapped","كمم"],[[64956,64956],"mapped","لجم"],[[64957,64957],"mapped","نجح"],[[64958,64958],"mapped","جحي"],[[64959,64959],"mapped","حجي"],[[64960,64960],"mapped","مجي"],[[64961,64961],"mapped","فمي"],[[64962,64962],"mapped","بحي"],[[64963,64963],"mapped","كمم"],[[64964,64964],"mapped","عجم"],[[64965,64965],"mapped","صمم"],[[64966,64966],"mapped","سخي"],[[64967,64967],"mapped","نجي"],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped","صلے"],[[65009,65009],"mapped","قلے"],[[65010,65010],"mapped","الله"],[[65011,65011],"mapped","اكبر"],[[65012,65012],"mapped","محمد"],[[65013,65013],"mapped","صلعم"],[[65014,65014],"mapped","رسول"],[[65015,65015],"mapped","عليه"],[[65016,65016],"mapped","وسلم"],[[65017,65017],"mapped","صلى"],[[65018,65018],"disallowed_STD3_mapped","صلى الله عليه وسلم"],[[65019,65019],"disallowed_STD3_mapped","جل جلاله"],[[65020,65020],"mapped","ریال"],[[65021,65021],"valid","","NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",","],[[65041,65041],"mapped","、"],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",":"],[[65044,65044],"disallowed_STD3_mapped",";"],[[65045,65045],"disallowed_STD3_mapped","!"],[[65046,65046],"disallowed_STD3_mapped","?"],[[65047,65047],"mapped","〖"],[[65048,65048],"mapped","〗"],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped","—"],[[65074,65074],"mapped","–"],[[65075,65076],"disallowed_STD3_mapped","_"],[[65077,65077],"disallowed_STD3_mapped","("],[[65078,65078],"disallowed_STD3_mapped",")"],[[65079,65079],"disallowed_STD3_mapped","{"],[[65080,65080],"disallowed_STD3_mapped","}"],[[65081,65081],"mapped","〔"],[[65082,65082],"mapped","〕"],[[65083,65083],"mapped","【"],[[65084,65084],"mapped","】"],[[65085,65085],"mapped","《"],[[65086,65086],"mapped","》"],[[65087,65087],"mapped","〈"],[[65088,65088],"mapped","〉"],[[65089,65089],"mapped","「"],[[65090,65090],"mapped","」"],[[65091,65091],"mapped","『"],[[65092,65092],"mapped","』"],[[65093,65094],"valid","","NV8"],[[65095,65095],"disallowed_STD3_mapped","["],[[65096,65096],"disallowed_STD3_mapped","]"],[[65097,65100],"disallowed_STD3_mapped"," ̅"],[[65101,65103],"disallowed_STD3_mapped","_"],[[65104,65104],"disallowed_STD3_mapped",","],[[65105,65105],"mapped","、"],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",";"],[[65109,65109],"disallowed_STD3_mapped",":"],[[65110,65110],"disallowed_STD3_mapped","?"],[[65111,65111],"disallowed_STD3_mapped","!"],[[65112,65112],"mapped","—"],[[65113,65113],"disallowed_STD3_mapped","("],[[65114,65114],"disallowed_STD3_mapped",")"],[[65115,65115],"disallowed_STD3_mapped","{"],[[65116,65116],"disallowed_STD3_mapped","}"],[[65117,65117],"mapped","〔"],[[65118,65118],"mapped","〕"],[[65119,65119],"disallowed_STD3_mapped","#"],[[65120,65120],"disallowed_STD3_mapped","&"],[[65121,65121],"disallowed_STD3_mapped","*"],[[65122,65122],"disallowed_STD3_mapped","+"],[[65123,65123],"mapped","-"],[[65124,65124],"disallowed_STD3_mapped","<"],[[65125,65125],"disallowed_STD3_mapped",">"],[[65126,65126],"disallowed_STD3_mapped","="],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped","\\"],[[65129,65129],"disallowed_STD3_mapped","$"],[[65130,65130],"disallowed_STD3_mapped","%"],[[65131,65131],"disallowed_STD3_mapped","@"],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped"," ً"],[[65137,65137],"mapped","ـً"],[[65138,65138],"disallowed_STD3_mapped"," ٌ"],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped"," ٍ"],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped"," َ"],[[65143,65143],"mapped","ـَ"],[[65144,65144],"disallowed_STD3_mapped"," ُ"],[[65145,65145],"mapped","ـُ"],[[65146,65146],"disallowed_STD3_mapped"," ِ"],[[65147,65147],"mapped","ـِ"],[[65148,65148],"disallowed_STD3_mapped"," ّ"],[[65149,65149],"mapped","ـّ"],[[65150,65150],"disallowed_STD3_mapped"," ْ"],[[65151,65151],"mapped","ـْ"],[[65152,65152],"mapped","ء"],[[65153,65154],"mapped","آ"],[[65155,65156],"mapped","أ"],[[65157,65158],"mapped","ؤ"],[[65159,65160],"mapped","إ"],[[65161,65164],"mapped","ئ"],[[65165,65166],"mapped","ا"],[[65167,65170],"mapped","ب"],[[65171,65172],"mapped","ة"],[[65173,65176],"mapped","ت"],[[65177,65180],"mapped","ث"],[[65181,65184],"mapped","ج"],[[65185,65188],"mapped","ح"],[[65189,65192],"mapped","خ"],[[65193,65194],"mapped","د"],[[65195,65196],"mapped","ذ"],[[65197,65198],"mapped","ر"],[[65199,65200],"mapped","ز"],[[65201,65204],"mapped","س"],[[65205,65208],"mapped","ش"],[[65209,65212],"mapped","ص"],[[65213,65216],"mapped","ض"],[[65217,65220],"mapped","ط"],[[65221,65224],"mapped","ظ"],[[65225,65228],"mapped","ع"],[[65229,65232],"mapped","غ"],[[65233,65236],"mapped","ف"],[[65237,65240],"mapped","ق"],[[65241,65244],"mapped","ك"],[[65245,65248],"mapped","ل"],[[65249,65252],"mapped","م"],[[65253,65256],"mapped","ن"],[[65257,65260],"mapped","ه"],[[65261,65262],"mapped","و"],[[65263,65264],"mapped","ى"],[[65265,65268],"mapped","ي"],[[65269,65270],"mapped","لآ"],[[65271,65272],"mapped","لأ"],[[65273,65274],"mapped","لإ"],[[65275,65276],"mapped","لا"],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped","!"],[[65282,65282],"disallowed_STD3_mapped","\""],[[65283,65283],"disallowed_STD3_mapped","#"],[[65284,65284],"disallowed_STD3_mapped","$"],[[65285,65285],"disallowed_STD3_mapped","%"],[[65286,65286],"disallowed_STD3_mapped","&"],[[65287,65287],"disallowed_STD3_mapped","'"],[[65288,65288],"disallowed_STD3_mapped","("],[[65289,65289],"disallowed_STD3_mapped",")"],[[65290,65290],"disallowed_STD3_mapped","*"],[[65291,65291],"disallowed_STD3_mapped","+"],[[65292,65292],"disallowed_STD3_mapped",","],[[65293,65293],"mapped","-"],[[65294,65294],"mapped","."],[[65295,65295],"disallowed_STD3_mapped","/"],[[65296,65296],"mapped","0"],[[65297,65297],"mapped","1"],[[65298,65298],"mapped","2"],[[65299,65299],"mapped","3"],[[65300,65300],"mapped","4"],[[65301,65301],"mapped","5"],[[65302,65302],"mapped","6"],[[65303,65303],"mapped","7"],[[65304,65304],"mapped","8"],[[65305,65305],"mapped","9"],[[65306,65306],"disallowed_STD3_mapped",":"],[[65307,65307],"disallowed_STD3_mapped",";"],[[65308,65308],"disallowed_STD3_mapped","<"],[[65309,65309],"disallowed_STD3_mapped","="],[[65310,65310],"disallowed_STD3_mapped",">"],[[65311,65311],"disallowed_STD3_mapped","?"],[[65312,65312],"disallowed_STD3_mapped","@"],[[65313,65313],"mapped","a"],[[65314,65314],"mapped","b"],[[65315,65315],"mapped","c"],[[65316,65316],"mapped","d"],[[65317,65317],"mapped","e"],[[65318,65318],"mapped","f"],[[65319,65319],"mapped","g"],[[65320,65320],"mapped","h"],[[65321,65321],"mapped","i"],[[65322,65322],"mapped","j"],[[65323,65323],"mapped","k"],[[65324,65324],"mapped","l"],[[65325,65325],"mapped","m"],[[65326,65326],"mapped","n"],[[65327,65327],"mapped","o"],[[65328,65328],"mapped","p"],[[65329,65329],"mapped","q"],[[65330,65330],"mapped","r"],[[65331,65331],"mapped","s"],[[65332,65332],"mapped","t"],[[65333,65333],"mapped","u"],[[65334,65334],"mapped","v"],[[65335,65335],"mapped","w"],[[65336,65336],"mapped","x"],[[65337,65337],"mapped","y"],[[65338,65338],"mapped","z"],[[65339,65339],"disallowed_STD3_mapped","["],[[65340,65340],"disallowed_STD3_mapped","\\"],[[65341,65341],"disallowed_STD3_mapped","]"],[[65342,65342],"disallowed_STD3_mapped","^"],[[65343,65343],"disallowed_STD3_mapped","_"],[[65344,65344],"disallowed_STD3_mapped","`"],[[65345,65345],"mapped","a"],[[65346,65346],"mapped","b"],[[65347,65347],"mapped","c"],[[65348,65348],"mapped","d"],[[65349,65349],"mapped","e"],[[65350,65350],"mapped","f"],[[65351,65351],"mapped","g"],[[65352,65352],"mapped","h"],[[65353,65353],"mapped","i"],[[65354,65354],"mapped","j"],[[65355,65355],"mapped","k"],[[65356,65356],"mapped","l"],[[65357,65357],"mapped","m"],[[65358,65358],"mapped","n"],[[65359,65359],"mapped","o"],[[65360,65360],"mapped","p"],[[65361,65361],"mapped","q"],[[65362,65362],"mapped","r"],[[65363,65363],"mapped","s"],[[65364,65364],"mapped","t"],[[65365,65365],"mapped","u"],[[65366,65366],"mapped","v"],[[65367,65367],"mapped","w"],[[65368,65368],"mapped","x"],[[65369,65369],"mapped","y"],[[65370,65370],"mapped","z"],[[65371,65371],"disallowed_STD3_mapped","{"],[[65372,65372],"disallowed_STD3_mapped","|"],[[65373,65373],"disallowed_STD3_mapped","}"],[[65374,65374],"disallowed_STD3_mapped","~"],[[65375,65375],"mapped","⦅"],[[65376,65376],"mapped","⦆"],[[65377,65377],"mapped","."],[[65378,65378],"mapped","「"],[[65379,65379],"mapped","」"],[[65380,65380],"mapped","、"],[[65381,65381],"mapped","・"],[[65382,65382],"mapped","ヲ"],[[65383,65383],"mapped","ァ"],[[65384,65384],"mapped","ィ"],[[65385,65385],"mapped","ゥ"],[[65386,65386],"mapped","ェ"],[[65387,65387],"mapped","ォ"],[[65388,65388],"mapped","ャ"],[[65389,65389],"mapped","ュ"],[[65390,65390],"mapped","ョ"],[[65391,65391],"mapped","ッ"],[[65392,65392],"mapped","ー"],[[65393,65393],"mapped","ア"],[[65394,65394],"mapped","イ"],[[65395,65395],"mapped","ウ"],[[65396,65396],"mapped","エ"],[[65397,65397],"mapped","オ"],[[65398,65398],"mapped","カ"],[[65399,65399],"mapped","キ"],[[65400,65400],"mapped","ク"],[[65401,65401],"mapped","ケ"],[[65402,65402],"mapped","コ"],[[65403,65403],"mapped","サ"],[[65404,65404],"mapped","シ"],[[65405,65405],"mapped","ス"],[[65406,65406],"mapped","セ"],[[65407,65407],"mapped","ソ"],[[65408,65408],"mapped","タ"],[[65409,65409],"mapped","チ"],[[65410,65410],"mapped","ツ"],[[65411,65411],"mapped","テ"],[[65412,65412],"mapped","ト"],[[65413,65413],"mapped","ナ"],[[65414,65414],"mapped","ニ"],[[65415,65415],"mapped","ヌ"],[[65416,65416],"mapped","ネ"],[[65417,65417],"mapped","ノ"],[[65418,65418],"mapped","ハ"],[[65419,65419],"mapped","ヒ"],[[65420,65420],"mapped","フ"],[[65421,65421],"mapped","ヘ"],[[65422,65422],"mapped","ホ"],[[65423,65423],"mapped","マ"],[[65424,65424],"mapped","ミ"],[[65425,65425],"mapped","ム"],[[65426,65426],"mapped","メ"],[[65427,65427],"mapped","モ"],[[65428,65428],"mapped","ヤ"],[[65429,65429],"mapped","ユ"],[[65430,65430],"mapped","ヨ"],[[65431,65431],"mapped","ラ"],[[65432,65432],"mapped","リ"],[[65433,65433],"mapped","ル"],[[65434,65434],"mapped","レ"],[[65435,65435],"mapped","ロ"],[[65436,65436],"mapped","ワ"],[[65437,65437],"mapped","ン"],[[65438,65438],"mapped","゙"],[[65439,65439],"mapped","゚"],[[65440,65440],"disallowed"],[[65441,65441],"mapped","ᄀ"],[[65442,65442],"mapped","ᄁ"],[[65443,65443],"mapped","ᆪ"],[[65444,65444],"mapped","ᄂ"],[[65445,65445],"mapped","ᆬ"],[[65446,65446],"mapped","ᆭ"],[[65447,65447],"mapped","ᄃ"],[[65448,65448],"mapped","ᄄ"],[[65449,65449],"mapped","ᄅ"],[[65450,65450],"mapped","ᆰ"],[[65451,65451],"mapped","ᆱ"],[[65452,65452],"mapped","ᆲ"],[[65453,65453],"mapped","ᆳ"],[[65454,65454],"mapped","ᆴ"],[[65455,65455],"mapped","ᆵ"],[[65456,65456],"mapped","ᄚ"],[[65457,65457],"mapped","ᄆ"],[[65458,65458],"mapped","ᄇ"],[[65459,65459],"mapped","ᄈ"],[[65460,65460],"mapped","ᄡ"],[[65461,65461],"mapped","ᄉ"],[[65462,65462],"mapped","ᄊ"],[[65463,65463],"mapped","ᄋ"],[[65464,65464],"mapped","ᄌ"],[[65465,65465],"mapped","ᄍ"],[[65466,65466],"mapped","ᄎ"],[[65467,65467],"mapped","ᄏ"],[[65468,65468],"mapped","ᄐ"],[[65469,65469],"mapped","ᄑ"],[[65470,65470],"mapped","ᄒ"],[[65471,65473],"disallowed"],[[65474,65474],"mapped","ᅡ"],[[65475,65475],"mapped","ᅢ"],[[65476,65476],"mapped","ᅣ"],[[65477,65477],"mapped","ᅤ"],[[65478,65478],"mapped","ᅥ"],[[65479,65479],"mapped","ᅦ"],[[65480,65481],"disallowed"],[[65482,65482],"mapped","ᅧ"],[[65483,65483],"mapped","ᅨ"],[[65484,65484],"mapped","ᅩ"],[[65485,65485],"mapped","ᅪ"],[[65486,65486],"mapped","ᅫ"],[[65487,65487],"mapped","ᅬ"],[[65488,65489],"disallowed"],[[65490,65490],"mapped","ᅭ"],[[65491,65491],"mapped","ᅮ"],[[65492,65492],"mapped","ᅯ"],[[65493,65493],"mapped","ᅰ"],[[65494,65494],"mapped","ᅱ"],[[65495,65495],"mapped","ᅲ"],[[65496,65497],"disallowed"],[[65498,65498],"mapped","ᅳ"],[[65499,65499],"mapped","ᅴ"],[[65500,65500],"mapped","ᅵ"],[[65501,65503],"disallowed"],[[65504,65504],"mapped","¢"],[[65505,65505],"mapped","£"],[[65506,65506],"mapped","¬"],[[65507,65507],"disallowed_STD3_mapped"," ̄"],[[65508,65508],"mapped","¦"],[[65509,65509],"mapped","¥"],[[65510,65510],"mapped","₩"],[[65511,65511],"disallowed"],[[65512,65512],"mapped","│"],[[65513,65513],"mapped","←"],[[65514,65514],"mapped","↑"],[[65515,65515],"mapped","→"],[[65516,65516],"mapped","↓"],[[65517,65517],"mapped","■"],[[65518,65518],"mapped","○"],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid","","NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid","","NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid","","NV8"],[[65856,65930],"valid","","NV8"],[[65931,65932],"valid","","NV8"],[[65933,65934],"valid","","NV8"],[[65935,65935],"disallowed"],[[65936,65947],"valid","","NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid","","NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid","","NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid","","NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid","","NV8"],[[66340,66348],"disallowed"],[[66349,66351],"valid"],[[66352,66368],"valid"],[[66369,66369],"valid","","NV8"],[[66370,66377],"valid"],[[66378,66378],"valid","","NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid","","NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid","","NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped","𐐨"],[[66561,66561],"mapped","𐐩"],[[66562,66562],"mapped","𐐪"],[[66563,66563],"mapped","𐐫"],[[66564,66564],"mapped","𐐬"],[[66565,66565],"mapped","𐐭"],[[66566,66566],"mapped","𐐮"],[[66567,66567],"mapped","𐐯"],[[66568,66568],"mapped","𐐰"],[[66569,66569],"mapped","𐐱"],[[66570,66570],"mapped","𐐲"],[[66571,66571],"mapped","𐐳"],[[66572,66572],"mapped","𐐴"],[[66573,66573],"mapped","𐐵"],[[66574,66574],"mapped","𐐶"],[[66575,66575],"mapped","𐐷"],[[66576,66576],"mapped","𐐸"],[[66577,66577],"mapped","𐐹"],[[66578,66578],"mapped","𐐺"],[[66579,66579],"mapped","𐐻"],[[66580,66580],"mapped","𐐼"],[[66581,66581],"mapped","𐐽"],[[66582,66582],"mapped","𐐾"],[[66583,66583],"mapped","𐐿"],[[66584,66584],"mapped","𐑀"],[[66585,66585],"mapped","𐑁"],[[66586,66586],"mapped","𐑂"],[[66587,66587],"mapped","𐑃"],[[66588,66588],"mapped","𐑄"],[[66589,66589],"mapped","𐑅"],[[66590,66590],"mapped","𐑆"],[[66591,66591],"mapped","𐑇"],[[66592,66592],"mapped","𐑈"],[[66593,66593],"mapped","𐑉"],[[66594,66594],"mapped","𐑊"],[[66595,66595],"mapped","𐑋"],[[66596,66596],"mapped","𐑌"],[[66597,66597],"mapped","𐑍"],[[66598,66598],"mapped","𐑎"],[[66599,66599],"mapped","𐑏"],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66735],"disallowed"],[[66736,66736],"mapped","𐓘"],[[66737,66737],"mapped","𐓙"],[[66738,66738],"mapped","𐓚"],[[66739,66739],"mapped","𐓛"],[[66740,66740],"mapped","𐓜"],[[66741,66741],"mapped","𐓝"],[[66742,66742],"mapped","𐓞"],[[66743,66743],"mapped","𐓟"],[[66744,66744],"mapped","𐓠"],[[66745,66745],"mapped","𐓡"],[[66746,66746],"mapped","𐓢"],[[66747,66747],"mapped","𐓣"],[[66748,66748],"mapped","𐓤"],[[66749,66749],"mapped","𐓥"],[[66750,66750],"mapped","𐓦"],[[66751,66751],"mapped","𐓧"],[[66752,66752],"mapped","𐓨"],[[66753,66753],"mapped","𐓩"],[[66754,66754],"mapped","𐓪"],[[66755,66755],"mapped","𐓫"],[[66756,66756],"mapped","𐓬"],[[66757,66757],"mapped","𐓭"],[[66758,66758],"mapped","𐓮"],[[66759,66759],"mapped","𐓯"],[[66760,66760],"mapped","𐓰"],[[66761,66761],"mapped","𐓱"],[[66762,66762],"mapped","𐓲"],[[66763,66763],"mapped","𐓳"],[[66764,66764],"mapped","𐓴"],[[66765,66765],"mapped","𐓵"],[[66766,66766],"mapped","𐓶"],[[66767,66767],"mapped","𐓷"],[[66768,66768],"mapped","𐓸"],[[66769,66769],"mapped","𐓹"],[[66770,66770],"mapped","𐓺"],[[66771,66771],"mapped","𐓻"],[[66772,66775],"disallowed"],[[66776,66811],"valid"],[[66812,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid","","NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid","","NV8"],[[67680,67702],"valid"],[[67703,67711],"valid","","NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid","","NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid","","NV8"],[[67840,67861],"valid"],[[67862,67865],"valid","","NV8"],[[67866,67867],"valid","","NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid","","NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid","","NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid","","NV8"],[[68030,68031],"valid"],[[68032,68047],"valid","","NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid","","NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid","","NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid","","NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid","","NV8"],[[68224,68252],"valid"],[[68253,68255],"valid","","NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid","","NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid","","NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid","","NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid","","NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid","","NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid","","NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid","","NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped","𐳀"],[[68737,68737],"mapped","𐳁"],[[68738,68738],"mapped","𐳂"],[[68739,68739],"mapped","𐳃"],[[68740,68740],"mapped","𐳄"],[[68741,68741],"mapped","𐳅"],[[68742,68742],"mapped","𐳆"],[[68743,68743],"mapped","𐳇"],[[68744,68744],"mapped","𐳈"],[[68745,68745],"mapped","𐳉"],[[68746,68746],"mapped","𐳊"],[[68747,68747],"mapped","𐳋"],[[68748,68748],"mapped","𐳌"],[[68749,68749],"mapped","𐳍"],[[68750,68750],"mapped","𐳎"],[[68751,68751],"mapped","𐳏"],[[68752,68752],"mapped","𐳐"],[[68753,68753],"mapped","𐳑"],[[68754,68754],"mapped","𐳒"],[[68755,68755],"mapped","𐳓"],[[68756,68756],"mapped","𐳔"],[[68757,68757],"mapped","𐳕"],[[68758,68758],"mapped","𐳖"],[[68759,68759],"mapped","𐳗"],[[68760,68760],"mapped","𐳘"],[[68761,68761],"mapped","𐳙"],[[68762,68762],"mapped","𐳚"],[[68763,68763],"mapped","𐳛"],[[68764,68764],"mapped","𐳜"],[[68765,68765],"mapped","𐳝"],[[68766,68766],"mapped","𐳞"],[[68767,68767],"mapped","𐳟"],[[68768,68768],"mapped","𐳠"],[[68769,68769],"mapped","𐳡"],[[68770,68770],"mapped","𐳢"],[[68771,68771],"mapped","𐳣"],[[68772,68772],"mapped","𐳤"],[[68773,68773],"mapped","𐳥"],[[68774,68774],"mapped","𐳦"],[[68775,68775],"mapped","𐳧"],[[68776,68776],"mapped","𐳨"],[[68777,68777],"mapped","𐳩"],[[68778,68778],"mapped","𐳪"],[[68779,68779],"mapped","𐳫"],[[68780,68780],"mapped","𐳬"],[[68781,68781],"mapped","𐳭"],[[68782,68782],"mapped","𐳮"],[[68783,68783],"mapped","𐳯"],[[68784,68784],"mapped","𐳰"],[[68785,68785],"mapped","𐳱"],[[68786,68786],"mapped","𐳲"],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid","","NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid","","NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid","","NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid","","NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid","","NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid","","NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid","","NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid","","NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid","","NV8"],[[70089,70089],"valid","","NV8"],[[70090,70092],"valid"],[[70093,70093],"valid","","NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid","","NV8"],[[70108,70108],"valid"],[[70109,70111],"valid","","NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid","","NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid","","NV8"],[[70206,70206],"valid"],[[70207,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid","","NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70655],"disallowed"],[[70656,70730],"valid"],[[70731,70735],"valid","","NV8"],[[70736,70745],"valid"],[[70746,70746],"disallowed"],[[70747,70747],"valid","","NV8"],[[70748,70748],"disallowed"],[[70749,70749],"valid","","NV8"],[[70750,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid","","NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid","","NV8"],[[71114,71127],"valid","","NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid","","NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71263],"disallowed"],[[71264,71276],"valid","","NV8"],[[71277,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid","","NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped","𑣀"],[[71841,71841],"mapped","𑣁"],[[71842,71842],"mapped","𑣂"],[[71843,71843],"mapped","𑣃"],[[71844,71844],"mapped","𑣄"],[[71845,71845],"mapped","𑣅"],[[71846,71846],"mapped","𑣆"],[[71847,71847],"mapped","𑣇"],[[71848,71848],"mapped","𑣈"],[[71849,71849],"mapped","𑣉"],[[71850,71850],"mapped","𑣊"],[[71851,71851],"mapped","𑣋"],[[71852,71852],"mapped","𑣌"],[[71853,71853],"mapped","𑣍"],[[71854,71854],"mapped","𑣎"],[[71855,71855],"mapped","𑣏"],[[71856,71856],"mapped","𑣐"],[[71857,71857],"mapped","𑣑"],[[71858,71858],"mapped","𑣒"],[[71859,71859],"mapped","𑣓"],[[71860,71860],"mapped","𑣔"],[[71861,71861],"mapped","𑣕"],[[71862,71862],"mapped","𑣖"],[[71863,71863],"mapped","𑣗"],[[71864,71864],"mapped","𑣘"],[[71865,71865],"mapped","𑣙"],[[71866,71866],"mapped","𑣚"],[[71867,71867],"mapped","𑣛"],[[71868,71868],"mapped","𑣜"],[[71869,71869],"mapped","𑣝"],[[71870,71870],"mapped","𑣞"],[[71871,71871],"mapped","𑣟"],[[71872,71913],"valid"],[[71914,71922],"valid","","NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72191],"disallowed"],[[72192,72254],"valid"],[[72255,72262],"valid","","NV8"],[[72263,72263],"valid"],[[72264,72271],"disallowed"],[[72272,72323],"valid"],[[72324,72325],"disallowed"],[[72326,72345],"valid"],[[72346,72348],"valid","","NV8"],[[72349,72349],"disallowed"],[[72350,72354],"valid","","NV8"],[[72355,72383],"disallowed"],[[72384,72440],"valid"],[[72441,72703],"disallowed"],[[72704,72712],"valid"],[[72713,72713],"disallowed"],[[72714,72758],"valid"],[[72759,72759],"disallowed"],[[72760,72768],"valid"],[[72769,72773],"valid","","NV8"],[[72774,72783],"disallowed"],[[72784,72793],"valid"],[[72794,72812],"valid","","NV8"],[[72813,72815],"disallowed"],[[72816,72817],"valid","","NV8"],[[72818,72847],"valid"],[[72848,72849],"disallowed"],[[72850,72871],"valid"],[[72872,72872],"disallowed"],[[72873,72886],"valid"],[[72887,72959],"disallowed"],[[72960,72966],"valid"],[[72967,72967],"disallowed"],[[72968,72969],"valid"],[[72970,72970],"disallowed"],[[72971,73014],"valid"],[[73015,73017],"disallowed"],[[73018,73018],"valid"],[[73019,73019],"disallowed"],[[73020,73021],"valid"],[[73022,73022],"disallowed"],[[73023,73031],"valid"],[[73032,73039],"disallowed"],[[73040,73049],"valid"],[[73050,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid","","NV8"],[[74851,74862],"valid","","NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid","","NV8"],[[74868,74868],"valid","","NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid","","NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid","","NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid","","NV8"],[[92992,92995],"valid"],[[92996,92997],"valid","","NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid","","NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,94175],"disallowed"],[[94176,94176],"valid"],[[94177,94177],"valid"],[[94178,94207],"disallowed"],[[94208,100332],"valid"],[[100333,100351],"disallowed"],[[100352,101106],"valid"],[[101107,110591],"disallowed"],[[110592,110593],"valid"],[[110594,110878],"valid"],[[110879,110959],"disallowed"],[[110960,111355],"valid"],[[111356,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid","","NV8"],[[113821,113822],"valid"],[[113823,113823],"valid","","NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid","","NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid","","NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid","","NV8"],[[119082,119133],"valid","","NV8"],[[119134,119134],"mapped","𝅗𝅥"],[[119135,119135],"mapped","𝅘𝅥"],[[119136,119136],"mapped","𝅘𝅥𝅮"],[[119137,119137],"mapped","𝅘𝅥𝅯"],[[119138,119138],"mapped","𝅘𝅥𝅰"],[[119139,119139],"mapped","𝅘𝅥𝅱"],[[119140,119140],"mapped","𝅘𝅥𝅲"],[[119141,119154],"valid","","NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid","","NV8"],[[119227,119227],"mapped","𝆹𝅥"],[[119228,119228],"mapped","𝆺𝅥"],[[119229,119229],"mapped","𝆹𝅥𝅮"],[[119230,119230],"mapped","𝆺𝅥𝅮"],[[119231,119231],"mapped","𝆹𝅥𝅯"],[[119232,119232],"mapped","𝆺𝅥𝅯"],[[119233,119261],"valid","","NV8"],[[119262,119272],"valid","","NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid","","NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid","","NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid","","NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped","a"],[[119809,119809],"mapped","b"],[[119810,119810],"mapped","c"],[[119811,119811],"mapped","d"],[[119812,119812],"mapped","e"],[[119813,119813],"mapped","f"],[[119814,119814],"mapped","g"],[[119815,119815],"mapped","h"],[[119816,119816],"mapped","i"],[[119817,119817],"mapped","j"],[[119818,119818],"mapped","k"],[[119819,119819],"mapped","l"],[[119820,119820],"mapped","m"],[[119821,119821],"mapped","n"],[[119822,119822],"mapped","o"],[[119823,119823],"mapped","p"],[[119824,119824],"mapped","q"],[[119825,119825],"mapped","r"],[[119826,119826],"mapped","s"],[[119827,119827],"mapped","t"],[[119828,119828],"mapped","u"],[[119829,119829],"mapped","v"],[[119830,119830],"mapped","w"],[[119831,119831],"mapped","x"],[[119832,119832],"mapped","y"],[[119833,119833],"mapped","z"],[[119834,119834],"mapped","a"],[[119835,119835],"mapped","b"],[[119836,119836],"mapped","c"],[[119837,119837],"mapped","d"],[[119838,119838],"mapped","e"],[[119839,119839],"mapped","f"],[[119840,119840],"mapped","g"],[[119841,119841],"mapped","h"],[[119842,119842],"mapped","i"],[[119843,119843],"mapped","j"],[[119844,119844],"mapped","k"],[[119845,119845],"mapped","l"],[[119846,119846],"mapped","m"],[[119847,119847],"mapped","n"],[[119848,119848],"mapped","o"],[[119849,119849],"mapped","p"],[[119850,119850],"mapped","q"],[[119851,119851],"mapped","r"],[[119852,119852],"mapped","s"],[[119853,119853],"mapped","t"],[[119854,119854],"mapped","u"],[[119855,119855],"mapped","v"],[[119856,119856],"mapped","w"],[[119857,119857],"mapped","x"],[[119858,119858],"mapped","y"],[[119859,119859],"mapped","z"],[[119860,119860],"mapped","a"],[[119861,119861],"mapped","b"],[[119862,119862],"mapped","c"],[[119863,119863],"mapped","d"],[[119864,119864],"mapped","e"],[[119865,119865],"mapped","f"],[[119866,119866],"mapped","g"],[[119867,119867],"mapped","h"],[[119868,119868],"mapped","i"],[[119869,119869],"mapped","j"],[[119870,119870],"mapped","k"],[[119871,119871],"mapped","l"],[[119872,119872],"mapped","m"],[[119873,119873],"mapped","n"],[[119874,119874],"mapped","o"],[[119875,119875],"mapped","p"],[[119876,119876],"mapped","q"],[[119877,119877],"mapped","r"],[[119878,119878],"mapped","s"],[[119879,119879],"mapped","t"],[[119880,119880],"mapped","u"],[[119881,119881],"mapped","v"],[[119882,119882],"mapped","w"],[[119883,119883],"mapped","x"],[[119884,119884],"mapped","y"],[[119885,119885],"mapped","z"],[[119886,119886],"mapped","a"],[[119887,119887],"mapped","b"],[[119888,119888],"mapped","c"],[[119889,119889],"mapped","d"],[[119890,119890],"mapped","e"],[[119891,119891],"mapped","f"],[[119892,119892],"mapped","g"],[[119893,119893],"disallowed"],[[119894,119894],"mapped","i"],[[119895,119895],"mapped","j"],[[119896,119896],"mapped","k"],[[119897,119897],"mapped","l"],[[119898,119898],"mapped","m"],[[119899,119899],"mapped","n"],[[119900,119900],"mapped","o"],[[119901,119901],"mapped","p"],[[119902,119902],"mapped","q"],[[119903,119903],"mapped","r"],[[119904,119904],"mapped","s"],[[119905,119905],"mapped","t"],[[119906,119906],"mapped","u"],[[119907,119907],"mapped","v"],[[119908,119908],"mapped","w"],[[119909,119909],"mapped","x"],[[119910,119910],"mapped","y"],[[119911,119911],"mapped","z"],[[119912,119912],"mapped","a"],[[119913,119913],"mapped","b"],[[119914,119914],"mapped","c"],[[119915,119915],"mapped","d"],[[119916,119916],"mapped","e"],[[119917,119917],"mapped","f"],[[119918,119918],"mapped","g"],[[119919,119919],"mapped","h"],[[119920,119920],"mapped","i"],[[119921,119921],"mapped","j"],[[119922,119922],"mapped","k"],[[119923,119923],"mapped","l"],[[119924,119924],"mapped","m"],[[119925,119925],"mapped","n"],[[119926,119926],"mapped","o"],[[119927,119927],"mapped","p"],[[119928,119928],"mapped","q"],[[119929,119929],"mapped","r"],[[119930,119930],"mapped","s"],[[119931,119931],"mapped","t"],[[119932,119932],"mapped","u"],[[119933,119933],"mapped","v"],[[119934,119934],"mapped","w"],[[119935,119935],"mapped","x"],[[119936,119936],"mapped","y"],[[119937,119937],"mapped","z"],[[119938,119938],"mapped","a"],[[119939,119939],"mapped","b"],[[119940,119940],"mapped","c"],[[119941,119941],"mapped","d"],[[119942,119942],"mapped","e"],[[119943,119943],"mapped","f"],[[119944,119944],"mapped","g"],[[119945,119945],"mapped","h"],[[119946,119946],"mapped","i"],[[119947,119947],"mapped","j"],[[119948,119948],"mapped","k"],[[119949,119949],"mapped","l"],[[119950,119950],"mapped","m"],[[119951,119951],"mapped","n"],[[119952,119952],"mapped","o"],[[119953,119953],"mapped","p"],[[119954,119954],"mapped","q"],[[119955,119955],"mapped","r"],[[119956,119956],"mapped","s"],[[119957,119957],"mapped","t"],[[119958,119958],"mapped","u"],[[119959,119959],"mapped","v"],[[119960,119960],"mapped","w"],[[119961,119961],"mapped","x"],[[119962,119962],"mapped","y"],[[119963,119963],"mapped","z"],[[119964,119964],"mapped","a"],[[119965,119965],"disallowed"],[[119966,119966],"mapped","c"],[[119967,119967],"mapped","d"],[[119968,119969],"disallowed"],[[119970,119970],"mapped","g"],[[119971,119972],"disallowed"],[[119973,119973],"mapped","j"],[[119974,119974],"mapped","k"],[[119975,119976],"disallowed"],[[119977,119977],"mapped","n"],[[119978,119978],"mapped","o"],[[119979,119979],"mapped","p"],[[119980,119980],"mapped","q"],[[119981,119981],"disallowed"],[[119982,119982],"mapped","s"],[[119983,119983],"mapped","t"],[[119984,119984],"mapped","u"],[[119985,119985],"mapped","v"],[[119986,119986],"mapped","w"],[[119987,119987],"mapped","x"],[[119988,119988],"mapped","y"],[[119989,119989],"mapped","z"],[[119990,119990],"mapped","a"],[[119991,119991],"mapped","b"],[[119992,119992],"mapped","c"],[[119993,119993],"mapped","d"],[[119994,119994],"disallowed"],[[119995,119995],"mapped","f"],[[119996,119996],"disallowed"],[[119997,119997],"mapped","h"],[[119998,119998],"mapped","i"],[[119999,119999],"mapped","j"],[[120000,120000],"mapped","k"],[[120001,120001],"mapped","l"],[[120002,120002],"mapped","m"],[[120003,120003],"mapped","n"],[[120004,120004],"disallowed"],[[120005,120005],"mapped","p"],[[120006,120006],"mapped","q"],[[120007,120007],"mapped","r"],[[120008,120008],"mapped","s"],[[120009,120009],"mapped","t"],[[120010,120010],"mapped","u"],[[120011,120011],"mapped","v"],[[120012,120012],"mapped","w"],[[120013,120013],"mapped","x"],[[120014,120014],"mapped","y"],[[120015,120015],"mapped","z"],[[120016,120016],"mapped","a"],[[120017,120017],"mapped","b"],[[120018,120018],"mapped","c"],[[120019,120019],"mapped","d"],[[120020,120020],"mapped","e"],[[120021,120021],"mapped","f"],[[120022,120022],"mapped","g"],[[120023,120023],"mapped","h"],[[120024,120024],"mapped","i"],[[120025,120025],"mapped","j"],[[120026,120026],"mapped","k"],[[120027,120027],"mapped","l"],[[120028,120028],"mapped","m"],[[120029,120029],"mapped","n"],[[120030,120030],"mapped","o"],[[120031,120031],"mapped","p"],[[120032,120032],"mapped","q"],[[120033,120033],"mapped","r"],[[120034,120034],"mapped","s"],[[120035,120035],"mapped","t"],[[120036,120036],"mapped","u"],[[120037,120037],"mapped","v"],[[120038,120038],"mapped","w"],[[120039,120039],"mapped","x"],[[120040,120040],"mapped","y"],[[120041,120041],"mapped","z"],[[120042,120042],"mapped","a"],[[120043,120043],"mapped","b"],[[120044,120044],"mapped","c"],[[120045,120045],"mapped","d"],[[120046,120046],"mapped","e"],[[120047,120047],"mapped","f"],[[120048,120048],"mapped","g"],[[120049,120049],"mapped","h"],[[120050,120050],"mapped","i"],[[120051,120051],"mapped","j"],[[120052,120052],"mapped","k"],[[120053,120053],"mapped","l"],[[120054,120054],"mapped","m"],[[120055,120055],"mapped","n"],[[120056,120056],"mapped","o"],[[120057,120057],"mapped","p"],[[120058,120058],"mapped","q"],[[120059,120059],"mapped","r"],[[120060,120060],"mapped","s"],[[120061,120061],"mapped","t"],[[120062,120062],"mapped","u"],[[120063,120063],"mapped","v"],[[120064,120064],"mapped","w"],[[120065,120065],"mapped","x"],[[120066,120066],"mapped","y"],[[120067,120067],"mapped","z"],[[120068,120068],"mapped","a"],[[120069,120069],"mapped","b"],[[120070,120070],"disallowed"],[[120071,120071],"mapped","d"],[[120072,120072],"mapped","e"],[[120073,120073],"mapped","f"],[[120074,120074],"mapped","g"],[[120075,120076],"disallowed"],[[120077,120077],"mapped","j"],[[120078,120078],"mapped","k"],[[120079,120079],"mapped","l"],[[120080,120080],"mapped","m"],[[120081,120081],"mapped","n"],[[120082,120082],"mapped","o"],[[120083,120083],"mapped","p"],[[120084,120084],"mapped","q"],[[120085,120085],"disallowed"],[[120086,120086],"mapped","s"],[[120087,120087],"mapped","t"],[[120088,120088],"mapped","u"],[[120089,120089],"mapped","v"],[[120090,120090],"mapped","w"],[[120091,120091],"mapped","x"],[[120092,120092],"mapped","y"],[[120093,120093],"disallowed"],[[120094,120094],"mapped","a"],[[120095,120095],"mapped","b"],[[120096,120096],"mapped","c"],[[120097,120097],"mapped","d"],[[120098,120098],"mapped","e"],[[120099,120099],"mapped","f"],[[120100,120100],"mapped","g"],[[120101,120101],"mapped","h"],[[120102,120102],"mapped","i"],[[120103,120103],"mapped","j"],[[120104,120104],"mapped","k"],[[120105,120105],"mapped","l"],[[120106,120106],"mapped","m"],[[120107,120107],"mapped","n"],[[120108,120108],"mapped","o"],[[120109,120109],"mapped","p"],[[120110,120110],"mapped","q"],[[120111,120111],"mapped","r"],[[120112,120112],"mapped","s"],[[120113,120113],"mapped","t"],[[120114,120114],"mapped","u"],[[120115,120115],"mapped","v"],[[120116,120116],"mapped","w"],[[120117,120117],"mapped","x"],[[120118,120118],"mapped","y"],[[120119,120119],"mapped","z"],[[120120,120120],"mapped","a"],[[120121,120121],"mapped","b"],[[120122,120122],"disallowed"],[[120123,120123],"mapped","d"],[[120124,120124],"mapped","e"],[[120125,120125],"mapped","f"],[[120126,120126],"mapped","g"],[[120127,120127],"disallowed"],[[120128,120128],"mapped","i"],[[120129,120129],"mapped","j"],[[120130,120130],"mapped","k"],[[120131,120131],"mapped","l"],[[120132,120132],"mapped","m"],[[120133,120133],"disallowed"],[[120134,120134],"mapped","o"],[[120135,120137],"disallowed"],[[120138,120138],"mapped","s"],[[120139,120139],"mapped","t"],[[120140,120140],"mapped","u"],[[120141,120141],"mapped","v"],[[120142,120142],"mapped","w"],[[120143,120143],"mapped","x"],[[120144,120144],"mapped","y"],[[120145,120145],"disallowed"],[[120146,120146],"mapped","a"],[[120147,120147],"mapped","b"],[[120148,120148],"mapped","c"],[[120149,120149],"mapped","d"],[[120150,120150],"mapped","e"],[[120151,120151],"mapped","f"],[[120152,120152],"mapped","g"],[[120153,120153],"mapped","h"],[[120154,120154],"mapped","i"],[[120155,120155],"mapped","j"],[[120156,120156],"mapped","k"],[[120157,120157],"mapped","l"],[[120158,120158],"mapped","m"],[[120159,120159],"mapped","n"],[[120160,120160],"mapped","o"],[[120161,120161],"mapped","p"],[[120162,120162],"mapped","q"],[[120163,120163],"mapped","r"],[[120164,120164],"mapped","s"],[[120165,120165],"mapped","t"],[[120166,120166],"mapped","u"],[[120167,120167],"mapped","v"],[[120168,120168],"mapped","w"],[[120169,120169],"mapped","x"],[[120170,120170],"mapped","y"],[[120171,120171],"mapped","z"],[[120172,120172],"mapped","a"],[[120173,120173],"mapped","b"],[[120174,120174],"mapped","c"],[[120175,120175],"mapped","d"],[[120176,120176],"mapped","e"],[[120177,120177],"mapped","f"],[[120178,120178],"mapped","g"],[[120179,120179],"mapped","h"],[[120180,120180],"mapped","i"],[[120181,120181],"mapped","j"],[[120182,120182],"mapped","k"],[[120183,120183],"mapped","l"],[[120184,120184],"mapped","m"],[[120185,120185],"mapped","n"],[[120186,120186],"mapped","o"],[[120187,120187],"mapped","p"],[[120188,120188],"mapped","q"],[[120189,120189],"mapped","r"],[[120190,120190],"mapped","s"],[[120191,120191],"mapped","t"],[[120192,120192],"mapped","u"],[[120193,120193],"mapped","v"],[[120194,120194],"mapped","w"],[[120195,120195],"mapped","x"],[[120196,120196],"mapped","y"],[[120197,120197],"mapped","z"],[[120198,120198],"mapped","a"],[[120199,120199],"mapped","b"],[[120200,120200],"mapped","c"],[[120201,120201],"mapped","d"],[[120202,120202],"mapped","e"],[[120203,120203],"mapped","f"],[[120204,120204],"mapped","g"],[[120205,120205],"mapped","h"],[[120206,120206],"mapped","i"],[[120207,120207],"mapped","j"],[[120208,120208],"mapped","k"],[[120209,120209],"mapped","l"],[[120210,120210],"mapped","m"],[[120211,120211],"mapped","n"],[[120212,120212],"mapped","o"],[[120213,120213],"mapped","p"],[[120214,120214],"mapped","q"],[[120215,120215],"mapped","r"],[[120216,120216],"mapped","s"],[[120217,120217],"mapped","t"],[[120218,120218],"mapped","u"],[[120219,120219],"mapped","v"],[[120220,120220],"mapped","w"],[[120221,120221],"mapped","x"],[[120222,120222],"mapped","y"],[[120223,120223],"mapped","z"],[[120224,120224],"mapped","a"],[[120225,120225],"mapped","b"],[[120226,120226],"mapped","c"],[[120227,120227],"mapped","d"],[[120228,120228],"mapped","e"],[[120229,120229],"mapped","f"],[[120230,120230],"mapped","g"],[[120231,120231],"mapped","h"],[[120232,120232],"mapped","i"],[[120233,120233],"mapped","j"],[[120234,120234],"mapped","k"],[[120235,120235],"mapped","l"],[[120236,120236],"mapped","m"],[[120237,120237],"mapped","n"],[[120238,120238],"mapped","o"],[[120239,120239],"mapped","p"],[[120240,120240],"mapped","q"],[[120241,120241],"mapped","r"],[[120242,120242],"mapped","s"],[[120243,120243],"mapped","t"],[[120244,120244],"mapped","u"],[[120245,120245],"mapped","v"],[[120246,120246],"mapped","w"],[[120247,120247],"mapped","x"],[[120248,120248],"mapped","y"],[[120249,120249],"mapped","z"],[[120250,120250],"mapped","a"],[[120251,120251],"mapped","b"],[[120252,120252],"mapped","c"],[[120253,120253],"mapped","d"],[[120254,120254],"mapped","e"],[[120255,120255],"mapped","f"],[[120256,120256],"mapped","g"],[[120257,120257],"mapped","h"],[[120258,120258],"mapped","i"],[[120259,120259],"mapped","j"],[[120260,120260],"mapped","k"],[[120261,120261],"mapped","l"],[[120262,120262],"mapped","m"],[[120263,120263],"mapped","n"],[[120264,120264],"mapped","o"],[[120265,120265],"mapped","p"],[[120266,120266],"mapped","q"],[[120267,120267],"mapped","r"],[[120268,120268],"mapped","s"],[[120269,120269],"mapped","t"],[[120270,120270],"mapped","u"],[[120271,120271],"mapped","v"],[[120272,120272],"mapped","w"],[[120273,120273],"mapped","x"],[[120274,120274],"mapped","y"],[[120275,120275],"mapped","z"],[[120276,120276],"mapped","a"],[[120277,120277],"mapped","b"],[[120278,120278],"mapped","c"],[[120279,120279],"mapped","d"],[[120280,120280],"mapped","e"],[[120281,120281],"mapped","f"],[[120282,120282],"mapped","g"],[[120283,120283],"mapped","h"],[[120284,120284],"mapped","i"],[[120285,120285],"mapped","j"],[[120286,120286],"mapped","k"],[[120287,120287],"mapped","l"],[[120288,120288],"mapped","m"],[[120289,120289],"mapped","n"],[[120290,120290],"mapped","o"],[[120291,120291],"mapped","p"],[[120292,120292],"mapped","q"],[[120293,120293],"mapped","r"],[[120294,120294],"mapped","s"],[[120295,120295],"mapped","t"],[[120296,120296],"mapped","u"],[[120297,120297],"mapped","v"],[[120298,120298],"mapped","w"],[[120299,120299],"mapped","x"],[[120300,120300],"mapped","y"],[[120301,120301],"mapped","z"],[[120302,120302],"mapped","a"],[[120303,120303],"mapped","b"],[[120304,120304],"mapped","c"],[[120305,120305],"mapped","d"],[[120306,120306],"mapped","e"],[[120307,120307],"mapped","f"],[[120308,120308],"mapped","g"],[[120309,120309],"mapped","h"],[[120310,120310],"mapped","i"],[[120311,120311],"mapped","j"],[[120312,120312],"mapped","k"],[[120313,120313],"mapped","l"],[[120314,120314],"mapped","m"],[[120315,120315],"mapped","n"],[[120316,120316],"mapped","o"],[[120317,120317],"mapped","p"],[[120318,120318],"mapped","q"],[[120319,120319],"mapped","r"],[[120320,120320],"mapped","s"],[[120321,120321],"mapped","t"],[[120322,120322],"mapped","u"],[[120323,120323],"mapped","v"],[[120324,120324],"mapped","w"],[[120325,120325],"mapped","x"],[[120326,120326],"mapped","y"],[[120327,120327],"mapped","z"],[[120328,120328],"mapped","a"],[[120329,120329],"mapped","b"],[[120330,120330],"mapped","c"],[[120331,120331],"mapped","d"],[[120332,120332],"mapped","e"],[[120333,120333],"mapped","f"],[[120334,120334],"mapped","g"],[[120335,120335],"mapped","h"],[[120336,120336],"mapped","i"],[[120337,120337],"mapped","j"],[[120338,120338],"mapped","k"],[[120339,120339],"mapped","l"],[[120340,120340],"mapped","m"],[[120341,120341],"mapped","n"],[[120342,120342],"mapped","o"],[[120343,120343],"mapped","p"],[[120344,120344],"mapped","q"],[[120345,120345],"mapped","r"],[[120346,120346],"mapped","s"],[[120347,120347],"mapped","t"],[[120348,120348],"mapped","u"],[[120349,120349],"mapped","v"],[[120350,120350],"mapped","w"],[[120351,120351],"mapped","x"],[[120352,120352],"mapped","y"],[[120353,120353],"mapped","z"],[[120354,120354],"mapped","a"],[[120355,120355],"mapped","b"],[[120356,120356],"mapped","c"],[[120357,120357],"mapped","d"],[[120358,120358],"mapped","e"],[[120359,120359],"mapped","f"],[[120360,120360],"mapped","g"],[[120361,120361],"mapped","h"],[[120362,120362],"mapped","i"],[[120363,120363],"mapped","j"],[[120364,120364],"mapped","k"],[[120365,120365],"mapped","l"],[[120366,120366],"mapped","m"],[[120367,120367],"mapped","n"],[[120368,120368],"mapped","o"],[[120369,120369],"mapped","p"],[[120370,120370],"mapped","q"],[[120371,120371],"mapped","r"],[[120372,120372],"mapped","s"],[[120373,120373],"mapped","t"],[[120374,120374],"mapped","u"],[[120375,120375],"mapped","v"],[[120376,120376],"mapped","w"],[[120377,120377],"mapped","x"],[[120378,120378],"mapped","y"],[[120379,120379],"mapped","z"],[[120380,120380],"mapped","a"],[[120381,120381],"mapped","b"],[[120382,120382],"mapped","c"],[[120383,120383],"mapped","d"],[[120384,120384],"mapped","e"],[[120385,120385],"mapped","f"],[[120386,120386],"mapped","g"],[[120387,120387],"mapped","h"],[[120388,120388],"mapped","i"],[[120389,120389],"mapped","j"],[[120390,120390],"mapped","k"],[[120391,120391],"mapped","l"],[[120392,120392],"mapped","m"],[[120393,120393],"mapped","n"],[[120394,120394],"mapped","o"],[[120395,120395],"mapped","p"],[[120396,120396],"mapped","q"],[[120397,120397],"mapped","r"],[[120398,120398],"mapped","s"],[[120399,120399],"mapped","t"],[[120400,120400],"mapped","u"],[[120401,120401],"mapped","v"],[[120402,120402],"mapped","w"],[[120403,120403],"mapped","x"],[[120404,120404],"mapped","y"],[[120405,120405],"mapped","z"],[[120406,120406],"mapped","a"],[[120407,120407],"mapped","b"],[[120408,120408],"mapped","c"],[[120409,120409],"mapped","d"],[[120410,120410],"mapped","e"],[[120411,120411],"mapped","f"],[[120412,120412],"mapped","g"],[[120413,120413],"mapped","h"],[[120414,120414],"mapped","i"],[[120415,120415],"mapped","j"],[[120416,120416],"mapped","k"],[[120417,120417],"mapped","l"],[[120418,120418],"mapped","m"],[[120419,120419],"mapped","n"],[[120420,120420],"mapped","o"],[[120421,120421],"mapped","p"],[[120422,120422],"mapped","q"],[[120423,120423],"mapped","r"],[[120424,120424],"mapped","s"],[[120425,120425],"mapped","t"],[[120426,120426],"mapped","u"],[[120427,120427],"mapped","v"],[[120428,120428],"mapped","w"],[[120429,120429],"mapped","x"],[[120430,120430],"mapped","y"],[[120431,120431],"mapped","z"],[[120432,120432],"mapped","a"],[[120433,120433],"mapped","b"],[[120434,120434],"mapped","c"],[[120435,120435],"mapped","d"],[[120436,120436],"mapped","e"],[[120437,120437],"mapped","f"],[[120438,120438],"mapped","g"],[[120439,120439],"mapped","h"],[[120440,120440],"mapped","i"],[[120441,120441],"mapped","j"],[[120442,120442],"mapped","k"],[[120443,120443],"mapped","l"],[[120444,120444],"mapped","m"],[[120445,120445],"mapped","n"],[[120446,120446],"mapped","o"],[[120447,120447],"mapped","p"],[[120448,120448],"mapped","q"],[[120449,120449],"mapped","r"],[[120450,120450],"mapped","s"],[[120451,120451],"mapped","t"],[[120452,120452],"mapped","u"],[[120453,120453],"mapped","v"],[[120454,120454],"mapped","w"],[[120455,120455],"mapped","x"],[[120456,120456],"mapped","y"],[[120457,120457],"mapped","z"],[[120458,120458],"mapped","a"],[[120459,120459],"mapped","b"],[[120460,120460],"mapped","c"],[[120461,120461],"mapped","d"],[[120462,120462],"mapped","e"],[[120463,120463],"mapped","f"],[[120464,120464],"mapped","g"],[[120465,120465],"mapped","h"],[[120466,120466],"mapped","i"],[[120467,120467],"mapped","j"],[[120468,120468],"mapped","k"],[[120469,120469],"mapped","l"],[[120470,120470],"mapped","m"],[[120471,120471],"mapped","n"],[[120472,120472],"mapped","o"],[[120473,120473],"mapped","p"],[[120474,120474],"mapped","q"],[[120475,120475],"mapped","r"],[[120476,120476],"mapped","s"],[[120477,120477],"mapped","t"],[[120478,120478],"mapped","u"],[[120479,120479],"mapped","v"],[[120480,120480],"mapped","w"],[[120481,120481],"mapped","x"],[[120482,120482],"mapped","y"],[[120483,120483],"mapped","z"],[[120484,120484],"mapped","ı"],[[120485,120485],"mapped","ȷ"],[[120486,120487],"disallowed"],[[120488,120488],"mapped","α"],[[120489,120489],"mapped","β"],[[120490,120490],"mapped","γ"],[[120491,120491],"mapped","δ"],[[120492,120492],"mapped","ε"],[[120493,120493],"mapped","ζ"],[[120494,120494],"mapped","η"],[[120495,120495],"mapped","θ"],[[120496,120496],"mapped","ι"],[[120497,120497],"mapped","κ"],[[120498,120498],"mapped","λ"],[[120499,120499],"mapped","μ"],[[120500,120500],"mapped","ν"],[[120501,120501],"mapped","ξ"],[[120502,120502],"mapped","ο"],[[120503,120503],"mapped","π"],[[120504,120504],"mapped","ρ"],[[120505,120505],"mapped","θ"],[[120506,120506],"mapped","σ"],[[120507,120507],"mapped","τ"],[[120508,120508],"mapped","υ"],[[120509,120509],"mapped","φ"],[[120510,120510],"mapped","χ"],[[120511,120511],"mapped","ψ"],[[120512,120512],"mapped","ω"],[[120513,120513],"mapped","∇"],[[120514,120514],"mapped","α"],[[120515,120515],"mapped","β"],[[120516,120516],"mapped","γ"],[[120517,120517],"mapped","δ"],[[120518,120518],"mapped","ε"],[[120519,120519],"mapped","ζ"],[[120520,120520],"mapped","η"],[[120521,120521],"mapped","θ"],[[120522,120522],"mapped","ι"],[[120523,120523],"mapped","κ"],[[120524,120524],"mapped","λ"],[[120525,120525],"mapped","μ"],[[120526,120526],"mapped","ν"],[[120527,120527],"mapped","ξ"],[[120528,120528],"mapped","ο"],[[120529,120529],"mapped","π"],[[120530,120530],"mapped","ρ"],[[120531,120532],"mapped","σ"],[[120533,120533],"mapped","τ"],[[120534,120534],"mapped","υ"],[[120535,120535],"mapped","φ"],[[120536,120536],"mapped","χ"],[[120537,120537],"mapped","ψ"],[[120538,120538],"mapped","ω"],[[120539,120539],"mapped","∂"],[[120540,120540],"mapped","ε"],[[120541,120541],"mapped","θ"],[[120542,120542],"mapped","κ"],[[120543,120543],"mapped","φ"],[[120544,120544],"mapped","ρ"],[[120545,120545],"mapped","π"],[[120546,120546],"mapped","α"],[[120547,120547],"mapped","β"],[[120548,120548],"mapped","γ"],[[120549,120549],"mapped","δ"],[[120550,120550],"mapped","ε"],[[120551,120551],"mapped","ζ"],[[120552,120552],"mapped","η"],[[120553,120553],"mapped","θ"],[[120554,120554],"mapped","ι"],[[120555,120555],"mapped","κ"],[[120556,120556],"mapped","λ"],[[120557,120557],"mapped","μ"],[[120558,120558],"mapped","ν"],[[120559,120559],"mapped","ξ"],[[120560,120560],"mapped","ο"],[[120561,120561],"mapped","π"],[[120562,120562],"mapped","ρ"],[[120563,120563],"mapped","θ"],[[120564,120564],"mapped","σ"],[[120565,120565],"mapped","τ"],[[120566,120566],"mapped","υ"],[[120567,120567],"mapped","φ"],[[120568,120568],"mapped","χ"],[[120569,120569],"mapped","ψ"],[[120570,120570],"mapped","ω"],[[120571,120571],"mapped","∇"],[[120572,120572],"mapped","α"],[[120573,120573],"mapped","β"],[[120574,120574],"mapped","γ"],[[120575,120575],"mapped","δ"],[[120576,120576],"mapped","ε"],[[120577,120577],"mapped","ζ"],[[120578,120578],"mapped","η"],[[120579,120579],"mapped","θ"],[[120580,120580],"mapped","ι"],[[120581,120581],"mapped","κ"],[[120582,120582],"mapped","λ"],[[120583,120583],"mapped","μ"],[[120584,120584],"mapped","ν"],[[120585,120585],"mapped","ξ"],[[120586,120586],"mapped","ο"],[[120587,120587],"mapped","π"],[[120588,120588],"mapped","ρ"],[[120589,120590],"mapped","σ"],[[120591,120591],"mapped","τ"],[[120592,120592],"mapped","υ"],[[120593,120593],"mapped","φ"],[[120594,120594],"mapped","χ"],[[120595,120595],"mapped","ψ"],[[120596,120596],"mapped","ω"],[[120597,120597],"mapped","∂"],[[120598,120598],"mapped","ε"],[[120599,120599],"mapped","θ"],[[120600,120600],"mapped","κ"],[[120601,120601],"mapped","φ"],[[120602,120602],"mapped","ρ"],[[120603,120603],"mapped","π"],[[120604,120604],"mapped","α"],[[120605,120605],"mapped","β"],[[120606,120606],"mapped","γ"],[[120607,120607],"mapped","δ"],[[120608,120608],"mapped","ε"],[[120609,120609],"mapped","ζ"],[[120610,120610],"mapped","η"],[[120611,120611],"mapped","θ"],[[120612,120612],"mapped","ι"],[[120613,120613],"mapped","κ"],[[120614,120614],"mapped","λ"],[[120615,120615],"mapped","μ"],[[120616,120616],"mapped","ν"],[[120617,120617],"mapped","ξ"],[[120618,120618],"mapped","ο"],[[120619,120619],"mapped","π"],[[120620,120620],"mapped","ρ"],[[120621,120621],"mapped","θ"],[[120622,120622],"mapped","σ"],[[120623,120623],"mapped","τ"],[[120624,120624],"mapped","υ"],[[120625,120625],"mapped","φ"],[[120626,120626],"mapped","χ"],[[120627,120627],"mapped","ψ"],[[120628,120628],"mapped","ω"],[[120629,120629],"mapped","∇"],[[120630,120630],"mapped","α"],[[120631,120631],"mapped","β"],[[120632,120632],"mapped","γ"],[[120633,120633],"mapped","δ"],[[120634,120634],"mapped","ε"],[[120635,120635],"mapped","ζ"],[[120636,120636],"mapped","η"],[[120637,120637],"mapped","θ"],[[120638,120638],"mapped","ι"],[[120639,120639],"mapped","κ"],[[120640,120640],"mapped","λ"],[[120641,120641],"mapped","μ"],[[120642,120642],"mapped","ν"],[[120643,120643],"mapped","ξ"],[[120644,120644],"mapped","ο"],[[120645,120645],"mapped","π"],[[120646,120646],"mapped","ρ"],[[120647,120648],"mapped","σ"],[[120649,120649],"mapped","τ"],[[120650,120650],"mapped","υ"],[[120651,120651],"mapped","φ"],[[120652,120652],"mapped","χ"],[[120653,120653],"mapped","ψ"],[[120654,120654],"mapped","ω"],[[120655,120655],"mapped","∂"],[[120656,120656],"mapped","ε"],[[120657,120657],"mapped","θ"],[[120658,120658],"mapped","κ"],[[120659,120659],"mapped","φ"],[[120660,120660],"mapped","ρ"],[[120661,120661],"mapped","π"],[[120662,120662],"mapped","α"],[[120663,120663],"mapped","β"],[[120664,120664],"mapped","γ"],[[120665,120665],"mapped","δ"],[[120666,120666],"mapped","ε"],[[120667,120667],"mapped","ζ"],[[120668,120668],"mapped","η"],[[120669,120669],"mapped","θ"],[[120670,120670],"mapped","ι"],[[120671,120671],"mapped","κ"],[[120672,120672],"mapped","λ"],[[120673,120673],"mapped","μ"],[[120674,120674],"mapped","ν"],[[120675,120675],"mapped","ξ"],[[120676,120676],"mapped","ο"],[[120677,120677],"mapped","π"],[[120678,120678],"mapped","ρ"],[[120679,120679],"mapped","θ"],[[120680,120680],"mapped","σ"],[[120681,120681],"mapped","τ"],[[120682,120682],"mapped","υ"],[[120683,120683],"mapped","φ"],[[120684,120684],"mapped","χ"],[[120685,120685],"mapped","ψ"],[[120686,120686],"mapped","ω"],[[120687,120687],"mapped","∇"],[[120688,120688],"mapped","α"],[[120689,120689],"mapped","β"],[[120690,120690],"mapped","γ"],[[120691,120691],"mapped","δ"],[[120692,120692],"mapped","ε"],[[120693,120693],"mapped","ζ"],[[120694,120694],"mapped","η"],[[120695,120695],"mapped","θ"],[[120696,120696],"mapped","ι"],[[120697,120697],"mapped","κ"],[[120698,120698],"mapped","λ"],[[120699,120699],"mapped","μ"],[[120700,120700],"mapped","ν"],[[120701,120701],"mapped","ξ"],[[120702,120702],"mapped","ο"],[[120703,120703],"mapped","π"],[[120704,120704],"mapped","ρ"],[[120705,120706],"mapped","σ"],[[120707,120707],"mapped","τ"],[[120708,120708],"mapped","υ"],[[120709,120709],"mapped","φ"],[[120710,120710],"mapped","χ"],[[120711,120711],"mapped","ψ"],[[120712,120712],"mapped","ω"],[[120713,120713],"mapped","∂"],[[120714,120714],"mapped","ε"],[[120715,120715],"mapped","θ"],[[120716,120716],"mapped","κ"],[[120717,120717],"mapped","φ"],[[120718,120718],"mapped","ρ"],[[120719,120719],"mapped","π"],[[120720,120720],"mapped","α"],[[120721,120721],"mapped","β"],[[120722,120722],"mapped","γ"],[[120723,120723],"mapped","δ"],[[120724,120724],"mapped","ε"],[[120725,120725],"mapped","ζ"],[[120726,120726],"mapped","η"],[[120727,120727],"mapped","θ"],[[120728,120728],"mapped","ι"],[[120729,120729],"mapped","κ"],[[120730,120730],"mapped","λ"],[[120731,120731],"mapped","μ"],[[120732,120732],"mapped","ν"],[[120733,120733],"mapped","ξ"],[[120734,120734],"mapped","ο"],[[120735,120735],"mapped","π"],[[120736,120736],"mapped","ρ"],[[120737,120737],"mapped","θ"],[[120738,120738],"mapped","σ"],[[120739,120739],"mapped","τ"],[[120740,120740],"mapped","υ"],[[120741,120741],"mapped","φ"],[[120742,120742],"mapped","χ"],[[120743,120743],"mapped","ψ"],[[120744,120744],"mapped","ω"],[[120745,120745],"mapped","∇"],[[120746,120746],"mapped","α"],[[120747,120747],"mapped","β"],[[120748,120748],"mapped","γ"],[[120749,120749],"mapped","δ"],[[120750,120750],"mapped","ε"],[[120751,120751],"mapped","ζ"],[[120752,120752],"mapped","η"],[[120753,120753],"mapped","θ"],[[120754,120754],"mapped","ι"],[[120755,120755],"mapped","κ"],[[120756,120756],"mapped","λ"],[[120757,120757],"mapped","μ"],[[120758,120758],"mapped","ν"],[[120759,120759],"mapped","ξ"],[[120760,120760],"mapped","ο"],[[120761,120761],"mapped","π"],[[120762,120762],"mapped","ρ"],[[120763,120764],"mapped","σ"],[[120765,120765],"mapped","τ"],[[120766,120766],"mapped","υ"],[[120767,120767],"mapped","φ"],[[120768,120768],"mapped","χ"],[[120769,120769],"mapped","ψ"],[[120770,120770],"mapped","ω"],[[120771,120771],"mapped","∂"],[[120772,120772],"mapped","ε"],[[120773,120773],"mapped","θ"],[[120774,120774],"mapped","κ"],[[120775,120775],"mapped","φ"],[[120776,120776],"mapped","ρ"],[[120777,120777],"mapped","π"],[[120778,120779],"mapped","ϝ"],[[120780,120781],"disallowed"],[[120782,120782],"mapped","0"],[[120783,120783],"mapped","1"],[[120784,120784],"mapped","2"],[[120785,120785],"mapped","3"],[[120786,120786],"mapped","4"],[[120787,120787],"mapped","5"],[[120788,120788],"mapped","6"],[[120789,120789],"mapped","7"],[[120790,120790],"mapped","8"],[[120791,120791],"mapped","9"],[[120792,120792],"mapped","0"],[[120793,120793],"mapped","1"],[[120794,120794],"mapped","2"],[[120795,120795],"mapped","3"],[[120796,120796],"mapped","4"],[[120797,120797],"mapped","5"],[[120798,120798],"mapped","6"],[[120799,120799],"mapped","7"],[[120800,120800],"mapped","8"],[[120801,120801],"mapped","9"],[[120802,120802],"mapped","0"],[[120803,120803],"mapped","1"],[[120804,120804],"mapped","2"],[[120805,120805],"mapped","3"],[[120806,120806],"mapped","4"],[[120807,120807],"mapped","5"],[[120808,120808],"mapped","6"],[[120809,120809],"mapped","7"],[[120810,120810],"mapped","8"],[[120811,120811],"mapped","9"],[[120812,120812],"mapped","0"],[[120813,120813],"mapped","1"],[[120814,120814],"mapped","2"],[[120815,120815],"mapped","3"],[[120816,120816],"mapped","4"],[[120817,120817],"mapped","5"],[[120818,120818],"mapped","6"],[[120819,120819],"mapped","7"],[[120820,120820],"mapped","8"],[[120821,120821],"mapped","9"],[[120822,120822],"mapped","0"],[[120823,120823],"mapped","1"],[[120824,120824],"mapped","2"],[[120825,120825],"mapped","3"],[[120826,120826],"mapped","4"],[[120827,120827],"mapped","5"],[[120828,120828],"mapped","6"],[[120829,120829],"mapped","7"],[[120830,120830],"mapped","8"],[[120831,120831],"mapped","9"],[[120832,121343],"valid","","NV8"],[[121344,121398],"valid"],[[121399,121402],"valid","","NV8"],[[121403,121452],"valid"],[[121453,121460],"valid","","NV8"],[[121461,121461],"valid"],[[121462,121475],"valid","","NV8"],[[121476,121476],"valid"],[[121477,121483],"valid","","NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,122879],"disallowed"],[[122880,122886],"valid"],[[122887,122887],"disallowed"],[[122888,122904],"valid"],[[122905,122906],"disallowed"],[[122907,122913],"valid"],[[122914,122914],"disallowed"],[[122915,122916],"valid"],[[122917,122917],"disallowed"],[[122918,122922],"valid"],[[122923,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid","","NV8"],[[125136,125142],"valid"],[[125143,125183],"disallowed"],[[125184,125184],"mapped","𞤢"],[[125185,125185],"mapped","𞤣"],[[125186,125186],"mapped","𞤤"],[[125187,125187],"mapped","𞤥"],[[125188,125188],"mapped","𞤦"],[[125189,125189],"mapped","𞤧"],[[125190,125190],"mapped","𞤨"],[[125191,125191],"mapped","𞤩"],[[125192,125192],"mapped","𞤪"],[[125193,125193],"mapped","𞤫"],[[125194,125194],"mapped","𞤬"],[[125195,125195],"mapped","𞤭"],[[125196,125196],"mapped","𞤮"],[[125197,125197],"mapped","𞤯"],[[125198,125198],"mapped","𞤰"],[[125199,125199],"mapped","𞤱"],[[125200,125200],"mapped","𞤲"],[[125201,125201],"mapped","𞤳"],[[125202,125202],"mapped","𞤴"],[[125203,125203],"mapped","𞤵"],[[125204,125204],"mapped","𞤶"],[[125205,125205],"mapped","𞤷"],[[125206,125206],"mapped","𞤸"],[[125207,125207],"mapped","𞤹"],[[125208,125208],"mapped","𞤺"],[[125209,125209],"mapped","𞤻"],[[125210,125210],"mapped","𞤼"],[[125211,125211],"mapped","𞤽"],[[125212,125212],"mapped","𞤾"],[[125213,125213],"mapped","𞤿"],[[125214,125214],"mapped","𞥀"],[[125215,125215],"mapped","𞥁"],[[125216,125216],"mapped","𞥂"],[[125217,125217],"mapped","𞥃"],[[125218,125258],"valid"],[[125259,125263],"disallowed"],[[125264,125273],"valid"],[[125274,125277],"disallowed"],[[125278,125279],"valid","","NV8"],[[125280,126463],"disallowed"],[[126464,126464],"mapped","ا"],[[126465,126465],"mapped","ب"],[[126466,126466],"mapped","ج"],[[126467,126467],"mapped","د"],[[126468,126468],"disallowed"],[[126469,126469],"mapped","و"],[[126470,126470],"mapped","ز"],[[126471,126471],"mapped","ح"],[[126472,126472],"mapped","ط"],[[126473,126473],"mapped","ي"],[[126474,126474],"mapped","ك"],[[126475,126475],"mapped","ل"],[[126476,126476],"mapped","م"],[[126477,126477],"mapped","ن"],[[126478,126478],"mapped","س"],[[126479,126479],"mapped","ع"],[[126480,126480],"mapped","ف"],[[126481,126481],"mapped","ص"],[[126482,126482],"mapped","ق"],[[126483,126483],"mapped","ر"],[[126484,126484],"mapped","ش"],[[126485,126485],"mapped","ت"],[[126486,126486],"mapped","ث"],[[126487,126487],"mapped","خ"],[[126488,126488],"mapped","ذ"],[[126489,126489],"mapped","ض"],[[126490,126490],"mapped","ظ"],[[126491,126491],"mapped","غ"],[[126492,126492],"mapped","ٮ"],[[126493,126493],"mapped","ں"],[[126494,126494],"mapped","ڡ"],[[126495,126495],"mapped","ٯ"],[[126496,126496],"disallowed"],[[126497,126497],"mapped","ب"],[[126498,126498],"mapped","ج"],[[126499,126499],"disallowed"],[[126500,126500],"mapped","ه"],[[126501,126502],"disallowed"],[[126503,126503],"mapped","ح"],[[126504,126504],"disallowed"],[[126505,126505],"mapped","ي"],[[126506,126506],"mapped","ك"],[[126507,126507],"mapped","ل"],[[126508,126508],"mapped","م"],[[126509,126509],"mapped","ن"],[[126510,126510],"mapped","س"],[[126511,126511],"mapped","ع"],[[126512,126512],"mapped","ف"],[[126513,126513],"mapped","ص"],[[126514,126514],"mapped","ق"],[[126515,126515],"disallowed"],[[126516,126516],"mapped","ش"],[[126517,126517],"mapped","ت"],[[126518,126518],"mapped","ث"],[[126519,126519],"mapped","خ"],[[126520,126520],"disallowed"],[[126521,126521],"mapped","ض"],[[126522,126522],"disallowed"],[[126523,126523],"mapped","غ"],[[126524,126529],"disallowed"],[[126530,126530],"mapped","ج"],[[126531,126534],"disallowed"],[[126535,126535],"mapped","ح"],[[126536,126536],"disallowed"],[[126537,126537],"mapped","ي"],[[126538,126538],"disallowed"],[[126539,126539],"mapped","ل"],[[126540,126540],"disallowed"],[[126541,126541],"mapped","ن"],[[126542,126542],"mapped","س"],[[126543,126543],"mapped","ع"],[[126544,126544],"disallowed"],[[126545,126545],"mapped","ص"],[[126546,126546],"mapped","ق"],[[126547,126547],"disallowed"],[[126548,126548],"mapped","ش"],[[126549,126550],"disallowed"],[[126551,126551],"mapped","خ"],[[126552,126552],"disallowed"],[[126553,126553],"mapped","ض"],[[126554,126554],"disallowed"],[[126555,126555],"mapped","غ"],[[126556,126556],"disallowed"],[[126557,126557],"mapped","ں"],[[126558,126558],"disallowed"],[[126559,126559],"mapped","ٯ"],[[126560,126560],"disallowed"],[[126561,126561],"mapped","ب"],[[126562,126562],"mapped","ج"],[[126563,126563],"disallowed"],[[126564,126564],"mapped","ه"],[[126565,126566],"disallowed"],[[126567,126567],"mapped","ح"],[[126568,126568],"mapped","ط"],[[126569,126569],"mapped","ي"],[[126570,126570],"mapped","ك"],[[126571,126571],"disallowed"],[[126572,126572],"mapped","م"],[[126573,126573],"mapped","ن"],[[126574,126574],"mapped","س"],[[126575,126575],"mapped","ع"],[[126576,126576],"mapped","ف"],[[126577,126577],"mapped","ص"],[[126578,126578],"mapped","ق"],[[126579,126579],"disallowed"],[[126580,126580],"mapped","ش"],[[126581,126581],"mapped","ت"],[[126582,126582],"mapped","ث"],[[126583,126583],"mapped","خ"],[[126584,126584],"disallowed"],[[126585,126585],"mapped","ض"],[[126586,126586],"mapped","ظ"],[[126587,126587],"mapped","غ"],[[126588,126588],"mapped","ٮ"],[[126589,126589],"disallowed"],[[126590,126590],"mapped","ڡ"],[[126591,126591],"disallowed"],[[126592,126592],"mapped","ا"],[[126593,126593],"mapped","ب"],[[126594,126594],"mapped","ج"],[[126595,126595],"mapped","د"],[[126596,126596],"mapped","ه"],[[126597,126597],"mapped","و"],[[126598,126598],"mapped","ز"],[[126599,126599],"mapped","ح"],[[126600,126600],"mapped","ط"],[[126601,126601],"mapped","ي"],[[126602,126602],"disallowed"],[[126603,126603],"mapped","ل"],[[126604,126604],"mapped","م"],[[126605,126605],"mapped","ن"],[[126606,126606],"mapped","س"],[[126607,126607],"mapped","ع"],[[126608,126608],"mapped","ف"],[[126609,126609],"mapped","ص"],[[126610,126610],"mapped","ق"],[[126611,126611],"mapped","ر"],[[126612,126612],"mapped","ش"],[[126613,126613],"mapped","ت"],[[126614,126614],"mapped","ث"],[[126615,126615],"mapped","خ"],[[126616,126616],"mapped","ذ"],[[126617,126617],"mapped","ض"],[[126618,126618],"mapped","ظ"],[[126619,126619],"mapped","غ"],[[126620,126624],"disallowed"],[[126625,126625],"mapped","ب"],[[126626,126626],"mapped","ج"],[[126627,126627],"mapped","د"],[[126628,126628],"disallowed"],[[126629,126629],"mapped","و"],[[126630,126630],"mapped","ز"],[[126631,126631],"mapped","ح"],[[126632,126632],"mapped","ط"],[[126633,126633],"mapped","ي"],[[126634,126634],"disallowed"],[[126635,126635],"mapped","ل"],[[126636,126636],"mapped","م"],[[126637,126637],"mapped","ن"],[[126638,126638],"mapped","س"],[[126639,126639],"mapped","ع"],[[126640,126640],"mapped","ف"],[[126641,126641],"mapped","ص"],[[126642,126642],"mapped","ق"],[[126643,126643],"mapped","ر"],[[126644,126644],"mapped","ش"],[[126645,126645],"mapped","ت"],[[126646,126646],"mapped","ث"],[[126647,126647],"mapped","خ"],[[126648,126648],"mapped","ذ"],[[126649,126649],"mapped","ض"],[[126650,126650],"mapped","ظ"],[[126651,126651],"mapped","غ"],[[126652,126703],"disallowed"],[[126704,126705],"valid","","NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid","","NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid","","NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid","","NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid","","NV8"],[[127167,127167],"valid","","NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid","","NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid","","NV8"],[[127200,127221],"valid","","NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped","0,"],[[127234,127234],"disallowed_STD3_mapped","1,"],[[127235,127235],"disallowed_STD3_mapped","2,"],[[127236,127236],"disallowed_STD3_mapped","3,"],[[127237,127237],"disallowed_STD3_mapped","4,"],[[127238,127238],"disallowed_STD3_mapped","5,"],[[127239,127239],"disallowed_STD3_mapped","6,"],[[127240,127240],"disallowed_STD3_mapped","7,"],[[127241,127241],"disallowed_STD3_mapped","8,"],[[127242,127242],"disallowed_STD3_mapped","9,"],[[127243,127244],"valid","","NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped","(a)"],[[127249,127249],"disallowed_STD3_mapped","(b)"],[[127250,127250],"disallowed_STD3_mapped","(c)"],[[127251,127251],"disallowed_STD3_mapped","(d)"],[[127252,127252],"disallowed_STD3_mapped","(e)"],[[127253,127253],"disallowed_STD3_mapped","(f)"],[[127254,127254],"disallowed_STD3_mapped","(g)"],[[127255,127255],"disallowed_STD3_mapped","(h)"],[[127256,127256],"disallowed_STD3_mapped","(i)"],[[127257,127257],"disallowed_STD3_mapped","(j)"],[[127258,127258],"disallowed_STD3_mapped","(k)"],[[127259,127259],"disallowed_STD3_mapped","(l)"],[[127260,127260],"disallowed_STD3_mapped","(m)"],[[127261,127261],"disallowed_STD3_mapped","(n)"],[[127262,127262],"disallowed_STD3_mapped","(o)"],[[127263,127263],"disallowed_STD3_mapped","(p)"],[[127264,127264],"disallowed_STD3_mapped","(q)"],[[127265,127265],"disallowed_STD3_mapped","(r)"],[[127266,127266],"disallowed_STD3_mapped","(s)"],[[127267,127267],"disallowed_STD3_mapped","(t)"],[[127268,127268],"disallowed_STD3_mapped","(u)"],[[127269,127269],"disallowed_STD3_mapped","(v)"],[[127270,127270],"disallowed_STD3_mapped","(w)"],[[127271,127271],"disallowed_STD3_mapped","(x)"],[[127272,127272],"disallowed_STD3_mapped","(y)"],[[127273,127273],"disallowed_STD3_mapped","(z)"],[[127274,127274],"mapped","〔s〕"],[[127275,127275],"mapped","c"],[[127276,127276],"mapped","r"],[[127277,127277],"mapped","cd"],[[127278,127278],"mapped","wz"],[[127279,127279],"disallowed"],[[127280,127280],"mapped","a"],[[127281,127281],"mapped","b"],[[127282,127282],"mapped","c"],[[127283,127283],"mapped","d"],[[127284,127284],"mapped","e"],[[127285,127285],"mapped","f"],[[127286,127286],"mapped","g"],[[127287,127287],"mapped","h"],[[127288,127288],"mapped","i"],[[127289,127289],"mapped","j"],[[127290,127290],"mapped","k"],[[127291,127291],"mapped","l"],[[127292,127292],"mapped","m"],[[127293,127293],"mapped","n"],[[127294,127294],"mapped","o"],[[127295,127295],"mapped","p"],[[127296,127296],"mapped","q"],[[127297,127297],"mapped","r"],[[127298,127298],"mapped","s"],[[127299,127299],"mapped","t"],[[127300,127300],"mapped","u"],[[127301,127301],"mapped","v"],[[127302,127302],"mapped","w"],[[127303,127303],"mapped","x"],[[127304,127304],"mapped","y"],[[127305,127305],"mapped","z"],[[127306,127306],"mapped","hv"],[[127307,127307],"mapped","mv"],[[127308,127308],"mapped","sd"],[[127309,127309],"mapped","ss"],[[127310,127310],"mapped","ppv"],[[127311,127311],"mapped","wc"],[[127312,127318],"valid","","NV8"],[[127319,127319],"valid","","NV8"],[[127320,127326],"valid","","NV8"],[[127327,127327],"valid","","NV8"],[[127328,127337],"valid","","NV8"],[[127338,127338],"mapped","mc"],[[127339,127339],"mapped","md"],[[127340,127343],"disallowed"],[[127344,127352],"valid","","NV8"],[[127353,127353],"valid","","NV8"],[[127354,127354],"valid","","NV8"],[[127355,127356],"valid","","NV8"],[[127357,127358],"valid","","NV8"],[[127359,127359],"valid","","NV8"],[[127360,127369],"valid","","NV8"],[[127370,127373],"valid","","NV8"],[[127374,127375],"valid","","NV8"],[[127376,127376],"mapped","dj"],[[127377,127386],"valid","","NV8"],[[127387,127404],"valid","","NV8"],[[127405,127461],"disallowed"],[[127462,127487],"valid","","NV8"],[[127488,127488],"mapped","ほか"],[[127489,127489],"mapped","ココ"],[[127490,127490],"mapped","サ"],[[127491,127503],"disallowed"],[[127504,127504],"mapped","手"],[[127505,127505],"mapped","字"],[[127506,127506],"mapped","双"],[[127507,127507],"mapped","デ"],[[127508,127508],"mapped","二"],[[127509,127509],"mapped","多"],[[127510,127510],"mapped","解"],[[127511,127511],"mapped","天"],[[127512,127512],"mapped","交"],[[127513,127513],"mapped","映"],[[127514,127514],"mapped","無"],[[127515,127515],"mapped","料"],[[127516,127516],"mapped","前"],[[127517,127517],"mapped","後"],[[127518,127518],"mapped","再"],[[127519,127519],"mapped","新"],[[127520,127520],"mapped","初"],[[127521,127521],"mapped","終"],[[127522,127522],"mapped","生"],[[127523,127523],"mapped","販"],[[127524,127524],"mapped","声"],[[127525,127525],"mapped","吹"],[[127526,127526],"mapped","演"],[[127527,127527],"mapped","投"],[[127528,127528],"mapped","捕"],[[127529,127529],"mapped","一"],[[127530,127530],"mapped","三"],[[127531,127531],"mapped","遊"],[[127532,127532],"mapped","左"],[[127533,127533],"mapped","中"],[[127534,127534],"mapped","右"],[[127535,127535],"mapped","指"],[[127536,127536],"mapped","走"],[[127537,127537],"mapped","打"],[[127538,127538],"mapped","禁"],[[127539,127539],"mapped","空"],[[127540,127540],"mapped","合"],[[127541,127541],"mapped","満"],[[127542,127542],"mapped","有"],[[127543,127543],"mapped","月"],[[127544,127544],"mapped","申"],[[127545,127545],"mapped","割"],[[127546,127546],"mapped","営"],[[127547,127547],"mapped","配"],[[127548,127551],"disallowed"],[[127552,127552],"mapped","〔本〕"],[[127553,127553],"mapped","〔三〕"],[[127554,127554],"mapped","〔二〕"],[[127555,127555],"mapped","〔安〕"],[[127556,127556],"mapped","〔点〕"],[[127557,127557],"mapped","〔打〕"],[[127558,127558],"mapped","〔盗〕"],[[127559,127559],"mapped","〔勝〕"],[[127560,127560],"mapped","〔敗〕"],[[127561,127567],"disallowed"],[[127568,127568],"mapped","得"],[[127569,127569],"mapped","可"],[[127570,127583],"disallowed"],[[127584,127589],"valid","","NV8"],[[127590,127743],"disallowed"],[[127744,127776],"valid","","NV8"],[[127777,127788],"valid","","NV8"],[[127789,127791],"valid","","NV8"],[[127792,127797],"valid","","NV8"],[[127798,127798],"valid","","NV8"],[[127799,127868],"valid","","NV8"],[[127869,127869],"valid","","NV8"],[[127870,127871],"valid","","NV8"],[[127872,127891],"valid","","NV8"],[[127892,127903],"valid","","NV8"],[[127904,127940],"valid","","NV8"],[[127941,127941],"valid","","NV8"],[[127942,127946],"valid","","NV8"],[[127947,127950],"valid","","NV8"],[[127951,127955],"valid","","NV8"],[[127956,127967],"valid","","NV8"],[[127968,127984],"valid","","NV8"],[[127985,127991],"valid","","NV8"],[[127992,127999],"valid","","NV8"],[[128000,128062],"valid","","NV8"],[[128063,128063],"valid","","NV8"],[[128064,128064],"valid","","NV8"],[[128065,128065],"valid","","NV8"],[[128066,128247],"valid","","NV8"],[[128248,128248],"valid","","NV8"],[[128249,128252],"valid","","NV8"],[[128253,128254],"valid","","NV8"],[[128255,128255],"valid","","NV8"],[[128256,128317],"valid","","NV8"],[[128318,128319],"valid","","NV8"],[[128320,128323],"valid","","NV8"],[[128324,128330],"valid","","NV8"],[[128331,128335],"valid","","NV8"],[[128336,128359],"valid","","NV8"],[[128360,128377],"valid","","NV8"],[[128378,128378],"valid","","NV8"],[[128379,128419],"valid","","NV8"],[[128420,128420],"valid","","NV8"],[[128421,128506],"valid","","NV8"],[[128507,128511],"valid","","NV8"],[[128512,128512],"valid","","NV8"],[[128513,128528],"valid","","NV8"],[[128529,128529],"valid","","NV8"],[[128530,128532],"valid","","NV8"],[[128533,128533],"valid","","NV8"],[[128534,128534],"valid","","NV8"],[[128535,128535],"valid","","NV8"],[[128536,128536],"valid","","NV8"],[[128537,128537],"valid","","NV8"],[[128538,128538],"valid","","NV8"],[[128539,128539],"valid","","NV8"],[[128540,128542],"valid","","NV8"],[[128543,128543],"valid","","NV8"],[[128544,128549],"valid","","NV8"],[[128550,128551],"valid","","NV8"],[[128552,128555],"valid","","NV8"],[[128556,128556],"valid","","NV8"],[[128557,128557],"valid","","NV8"],[[128558,128559],"valid","","NV8"],[[128560,128563],"valid","","NV8"],[[128564,128564],"valid","","NV8"],[[128565,128576],"valid","","NV8"],[[128577,128578],"valid","","NV8"],[[128579,128580],"valid","","NV8"],[[128581,128591],"valid","","NV8"],[[128592,128639],"valid","","NV8"],[[128640,128709],"valid","","NV8"],[[128710,128719],"valid","","NV8"],[[128720,128720],"valid","","NV8"],[[128721,128722],"valid","","NV8"],[[128723,128724],"valid","","NV8"],[[128725,128735],"disallowed"],[[128736,128748],"valid","","NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid","","NV8"],[[128756,128758],"valid","","NV8"],[[128759,128760],"valid","","NV8"],[[128761,128767],"disallowed"],[[128768,128883],"valid","","NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid","","NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid","","NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid","","NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid","","NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid","","NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid","","NV8"],[[129198,129279],"disallowed"],[[129280,129291],"valid","","NV8"],[[129292,129295],"disallowed"],[[129296,129304],"valid","","NV8"],[[129305,129310],"valid","","NV8"],[[129311,129311],"valid","","NV8"],[[129312,129319],"valid","","NV8"],[[129320,129327],"valid","","NV8"],[[129328,129328],"valid","","NV8"],[[129329,129330],"valid","","NV8"],[[129331,129342],"valid","","NV8"],[[129343,129343],"disallowed"],[[129344,129355],"valid","","NV8"],[[129356,129356],"valid","","NV8"],[[129357,129359],"disallowed"],[[129360,129374],"valid","","NV8"],[[129375,129387],"valid","","NV8"],[[129388,129407],"disallowed"],[[129408,129412],"valid","","NV8"],[[129413,129425],"valid","","NV8"],[[129426,129431],"valid","","NV8"],[[129432,129471],"disallowed"],[[129472,129472],"valid","","NV8"],[[129473,129487],"disallowed"],[[129488,129510],"valid","","NV8"],[[129511,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,183983],"disallowed"],[[183984,191456],"valid"],[[191457,194559],"disallowed"],[[194560,194560],"mapped","丽"],[[194561,194561],"mapped","丸"],[[194562,194562],"mapped","乁"],[[194563,194563],"mapped","𠄢"],[[194564,194564],"mapped","你"],[[194565,194565],"mapped","侮"],[[194566,194566],"mapped","侻"],[[194567,194567],"mapped","倂"],[[194568,194568],"mapped","偺"],[[194569,194569],"mapped","備"],[[194570,194570],"mapped","僧"],[[194571,194571],"mapped","像"],[[194572,194572],"mapped","㒞"],[[194573,194573],"mapped","𠘺"],[[194574,194574],"mapped","免"],[[194575,194575],"mapped","兔"],[[194576,194576],"mapped","兤"],[[194577,194577],"mapped","具"],[[194578,194578],"mapped","𠔜"],[[194579,194579],"mapped","㒹"],[[194580,194580],"mapped","內"],[[194581,194581],"mapped","再"],[[194582,194582],"mapped","𠕋"],[[194583,194583],"mapped","冗"],[[194584,194584],"mapped","冤"],[[194585,194585],"mapped","仌"],[[194586,194586],"mapped","冬"],[[194587,194587],"mapped","况"],[[194588,194588],"mapped","𩇟"],[[194589,194589],"mapped","凵"],[[194590,194590],"mapped","刃"],[[194591,194591],"mapped","㓟"],[[194592,194592],"mapped","刻"],[[194593,194593],"mapped","剆"],[[194594,194594],"mapped","割"],[[194595,194595],"mapped","剷"],[[194596,194596],"mapped","㔕"],[[194597,194597],"mapped","勇"],[[194598,194598],"mapped","勉"],[[194599,194599],"mapped","勤"],[[194600,194600],"mapped","勺"],[[194601,194601],"mapped","包"],[[194602,194602],"mapped","匆"],[[194603,194603],"mapped","北"],[[194604,194604],"mapped","卉"],[[194605,194605],"mapped","卑"],[[194606,194606],"mapped","博"],[[194607,194607],"mapped","即"],[[194608,194608],"mapped","卽"],[[194609,194611],"mapped","卿"],[[194612,194612],"mapped","𠨬"],[[194613,194613],"mapped","灰"],[[194614,194614],"mapped","及"],[[194615,194615],"mapped","叟"],[[194616,194616],"mapped","𠭣"],[[194617,194617],"mapped","叫"],[[194618,194618],"mapped","叱"],[[194619,194619],"mapped","吆"],[[194620,194620],"mapped","咞"],[[194621,194621],"mapped","吸"],[[194622,194622],"mapped","呈"],[[194623,194623],"mapped","周"],[[194624,194624],"mapped","咢"],[[194625,194625],"mapped","哶"],[[194626,194626],"mapped","唐"],[[194627,194627],"mapped","啓"],[[194628,194628],"mapped","啣"],[[194629,194630],"mapped","善"],[[194631,194631],"mapped","喙"],[[194632,194632],"mapped","喫"],[[194633,194633],"mapped","喳"],[[194634,194634],"mapped","嗂"],[[194635,194635],"mapped","圖"],[[194636,194636],"mapped","嘆"],[[194637,194637],"mapped","圗"],[[194638,194638],"mapped","噑"],[[194639,194639],"mapped","噴"],[[194640,194640],"mapped","切"],[[194641,194641],"mapped","壮"],[[194642,194642],"mapped","城"],[[194643,194643],"mapped","埴"],[[194644,194644],"mapped","堍"],[[194645,194645],"mapped","型"],[[194646,194646],"mapped","堲"],[[194647,194647],"mapped","報"],[[194648,194648],"mapped","墬"],[[194649,194649],"mapped","𡓤"],[[194650,194650],"mapped","売"],[[194651,194651],"mapped","壷"],[[194652,194652],"mapped","夆"],[[194653,194653],"mapped","多"],[[194654,194654],"mapped","夢"],[[194655,194655],"mapped","奢"],[[194656,194656],"mapped","𡚨"],[[194657,194657],"mapped","𡛪"],[[194658,194658],"mapped","姬"],[[194659,194659],"mapped","娛"],[[194660,194660],"mapped","娧"],[[194661,194661],"mapped","姘"],[[194662,194662],"mapped","婦"],[[194663,194663],"mapped","㛮"],[[194664,194664],"disallowed"],[[194665,194665],"mapped","嬈"],[[194666,194667],"mapped","嬾"],[[194668,194668],"mapped","𡧈"],[[194669,194669],"mapped","寃"],[[194670,194670],"mapped","寘"],[[194671,194671],"mapped","寧"],[[194672,194672],"mapped","寳"],[[194673,194673],"mapped","𡬘"],[[194674,194674],"mapped","寿"],[[194675,194675],"mapped","将"],[[194676,194676],"disallowed"],[[194677,194677],"mapped","尢"],[[194678,194678],"mapped","㞁"],[[194679,194679],"mapped","屠"],[[194680,194680],"mapped","屮"],[[194681,194681],"mapped","峀"],[[194682,194682],"mapped","岍"],[[194683,194683],"mapped","𡷤"],[[194684,194684],"mapped","嵃"],[[194685,194685],"mapped","𡷦"],[[194686,194686],"mapped","嵮"],[[194687,194687],"mapped","嵫"],[[194688,194688],"mapped","嵼"],[[194689,194689],"mapped","巡"],[[194690,194690],"mapped","巢"],[[194691,194691],"mapped","㠯"],[[194692,194692],"mapped","巽"],[[194693,194693],"mapped","帨"],[[194694,194694],"mapped","帽"],[[194695,194695],"mapped","幩"],[[194696,194696],"mapped","㡢"],[[194697,194697],"mapped","𢆃"],[[194698,194698],"mapped","㡼"],[[194699,194699],"mapped","庰"],[[194700,194700],"mapped","庳"],[[194701,194701],"mapped","庶"],[[194702,194702],"mapped","廊"],[[194703,194703],"mapped","𪎒"],[[194704,194704],"mapped","廾"],[[194705,194706],"mapped","𢌱"],[[194707,194707],"mapped","舁"],[[194708,194709],"mapped","弢"],[[194710,194710],"mapped","㣇"],[[194711,194711],"mapped","𣊸"],[[194712,194712],"mapped","𦇚"],[[194713,194713],"mapped","形"],[[194714,194714],"mapped","彫"],[[194715,194715],"mapped","㣣"],[[194716,194716],"mapped","徚"],[[194717,194717],"mapped","忍"],[[194718,194718],"mapped","志"],[[194719,194719],"mapped","忹"],[[194720,194720],"mapped","悁"],[[194721,194721],"mapped","㤺"],[[194722,194722],"mapped","㤜"],[[194723,194723],"mapped","悔"],[[194724,194724],"mapped","𢛔"],[[194725,194725],"mapped","惇"],[[194726,194726],"mapped","慈"],[[194727,194727],"mapped","慌"],[[194728,194728],"mapped","慎"],[[194729,194729],"mapped","慌"],[[194730,194730],"mapped","慺"],[[194731,194731],"mapped","憎"],[[194732,194732],"mapped","憲"],[[194733,194733],"mapped","憤"],[[194734,194734],"mapped","憯"],[[194735,194735],"mapped","懞"],[[194736,194736],"mapped","懲"],[[194737,194737],"mapped","懶"],[[194738,194738],"mapped","成"],[[194739,194739],"mapped","戛"],[[194740,194740],"mapped","扝"],[[194741,194741],"mapped","抱"],[[194742,194742],"mapped","拔"],[[194743,194743],"mapped","捐"],[[194744,194744],"mapped","𢬌"],[[194745,194745],"mapped","挽"],[[194746,194746],"mapped","拼"],[[194747,194747],"mapped","捨"],[[194748,194748],"mapped","掃"],[[194749,194749],"mapped","揤"],[[194750,194750],"mapped","𢯱"],[[194751,194751],"mapped","搢"],[[194752,194752],"mapped","揅"],[[194753,194753],"mapped","掩"],[[194754,194754],"mapped","㨮"],[[194755,194755],"mapped","摩"],[[194756,194756],"mapped","摾"],[[194757,194757],"mapped","撝"],[[194758,194758],"mapped","摷"],[[194759,194759],"mapped","㩬"],[[194760,194760],"mapped","敏"],[[194761,194761],"mapped","敬"],[[194762,194762],"mapped","𣀊"],[[194763,194763],"mapped","旣"],[[194764,194764],"mapped","書"],[[194765,194765],"mapped","晉"],[[194766,194766],"mapped","㬙"],[[194767,194767],"mapped","暑"],[[194768,194768],"mapped","㬈"],[[194769,194769],"mapped","㫤"],[[194770,194770],"mapped","冒"],[[194771,194771],"mapped","冕"],[[194772,194772],"mapped","最"],[[194773,194773],"mapped","暜"],[[194774,194774],"mapped","肭"],[[194775,194775],"mapped","䏙"],[[194776,194776],"mapped","朗"],[[194777,194777],"mapped","望"],[[194778,194778],"mapped","朡"],[[194779,194779],"mapped","杞"],[[194780,194780],"mapped","杓"],[[194781,194781],"mapped","𣏃"],[[194782,194782],"mapped","㭉"],[[194783,194783],"mapped","柺"],[[194784,194784],"mapped","枅"],[[194785,194785],"mapped","桒"],[[194786,194786],"mapped","梅"],[[194787,194787],"mapped","𣑭"],[[194788,194788],"mapped","梎"],[[194789,194789],"mapped","栟"],[[194790,194790],"mapped","椔"],[[194791,194791],"mapped","㮝"],[[194792,194792],"mapped","楂"],[[194793,194793],"mapped","榣"],[[194794,194794],"mapped","槪"],[[194795,194795],"mapped","檨"],[[194796,194796],"mapped","𣚣"],[[194797,194797],"mapped","櫛"],[[194798,194798],"mapped","㰘"],[[194799,194799],"mapped","次"],[[194800,194800],"mapped","𣢧"],[[194801,194801],"mapped","歔"],[[194802,194802],"mapped","㱎"],[[194803,194803],"mapped","歲"],[[194804,194804],"mapped","殟"],[[194805,194805],"mapped","殺"],[[194806,194806],"mapped","殻"],[[194807,194807],"mapped","𣪍"],[[194808,194808],"mapped","𡴋"],[[194809,194809],"mapped","𣫺"],[[194810,194810],"mapped","汎"],[[194811,194811],"mapped","𣲼"],[[194812,194812],"mapped","沿"],[[194813,194813],"mapped","泍"],[[194814,194814],"mapped","汧"],[[194815,194815],"mapped","洖"],[[194816,194816],"mapped","派"],[[194817,194817],"mapped","海"],[[194818,194818],"mapped","流"],[[194819,194819],"mapped","浩"],[[194820,194820],"mapped","浸"],[[194821,194821],"mapped","涅"],[[194822,194822],"mapped","𣴞"],[[194823,194823],"mapped","洴"],[[194824,194824],"mapped","港"],[[194825,194825],"mapped","湮"],[[194826,194826],"mapped","㴳"],[[194827,194827],"mapped","滋"],[[194828,194828],"mapped","滇"],[[194829,194829],"mapped","𣻑"],[[194830,194830],"mapped","淹"],[[194831,194831],"mapped","潮"],[[194832,194832],"mapped","𣽞"],[[194833,194833],"mapped","𣾎"],[[194834,194834],"mapped","濆"],[[194835,194835],"mapped","瀹"],[[194836,194836],"mapped","瀞"],[[194837,194837],"mapped","瀛"],[[194838,194838],"mapped","㶖"],[[194839,194839],"mapped","灊"],[[194840,194840],"mapped","災"],[[194841,194841],"mapped","灷"],[[194842,194842],"mapped","炭"],[[194843,194843],"mapped","𠔥"],[[194844,194844],"mapped","煅"],[[194845,194845],"mapped","𤉣"],[[194846,194846],"mapped","熜"],[[194847,194847],"disallowed"],[[194848,194848],"mapped","爨"],[[194849,194849],"mapped","爵"],[[194850,194850],"mapped","牐"],[[194851,194851],"mapped","𤘈"],[[194852,194852],"mapped","犀"],[[194853,194853],"mapped","犕"],[[194854,194854],"mapped","𤜵"],[[194855,194855],"mapped","𤠔"],[[194856,194856],"mapped","獺"],[[194857,194857],"mapped","王"],[[194858,194858],"mapped","㺬"],[[194859,194859],"mapped","玥"],[[194860,194861],"mapped","㺸"],[[194862,194862],"mapped","瑇"],[[194863,194863],"mapped","瑜"],[[194864,194864],"mapped","瑱"],[[194865,194865],"mapped","璅"],[[194866,194866],"mapped","瓊"],[[194867,194867],"mapped","㼛"],[[194868,194868],"mapped","甤"],[[194869,194869],"mapped","𤰶"],[[194870,194870],"mapped","甾"],[[194871,194871],"mapped","𤲒"],[[194872,194872],"mapped","異"],[[194873,194873],"mapped","𢆟"],[[194874,194874],"mapped","瘐"],[[194875,194875],"mapped","𤾡"],[[194876,194876],"mapped","𤾸"],[[194877,194877],"mapped","𥁄"],[[194878,194878],"mapped","㿼"],[[194879,194879],"mapped","䀈"],[[194880,194880],"mapped","直"],[[194881,194881],"mapped","𥃳"],[[194882,194882],"mapped","𥃲"],[[194883,194883],"mapped","𥄙"],[[194884,194884],"mapped","𥄳"],[[194885,194885],"mapped","眞"],[[194886,194887],"mapped","真"],[[194888,194888],"mapped","睊"],[[194889,194889],"mapped","䀹"],[[194890,194890],"mapped","瞋"],[[194891,194891],"mapped","䁆"],[[194892,194892],"mapped","䂖"],[[194893,194893],"mapped","𥐝"],[[194894,194894],"mapped","硎"],[[194895,194895],"mapped","碌"],[[194896,194896],"mapped","磌"],[[194897,194897],"mapped","䃣"],[[194898,194898],"mapped","𥘦"],[[194899,194899],"mapped","祖"],[[194900,194900],"mapped","𥚚"],[[194901,194901],"mapped","𥛅"],[[194902,194902],"mapped","福"],[[194903,194903],"mapped","秫"],[[194904,194904],"mapped","䄯"],[[194905,194905],"mapped","穀"],[[194906,194906],"mapped","穊"],[[194907,194907],"mapped","穏"],[[194908,194908],"mapped","𥥼"],[[194909,194910],"mapped","𥪧"],[[194911,194911],"disallowed"],[[194912,194912],"mapped","䈂"],[[194913,194913],"mapped","𥮫"],[[194914,194914],"mapped","篆"],[[194915,194915],"mapped","築"],[[194916,194916],"mapped","䈧"],[[194917,194917],"mapped","𥲀"],[[194918,194918],"mapped","糒"],[[194919,194919],"mapped","䊠"],[[194920,194920],"mapped","糨"],[[194921,194921],"mapped","糣"],[[194922,194922],"mapped","紀"],[[194923,194923],"mapped","𥾆"],[[194924,194924],"mapped","絣"],[[194925,194925],"mapped","䌁"],[[194926,194926],"mapped","緇"],[[194927,194927],"mapped","縂"],[[194928,194928],"mapped","繅"],[[194929,194929],"mapped","䌴"],[[194930,194930],"mapped","𦈨"],[[194931,194931],"mapped","𦉇"],[[194932,194932],"mapped","䍙"],[[194933,194933],"mapped","𦋙"],[[194934,194934],"mapped","罺"],[[194935,194935],"mapped","𦌾"],[[194936,194936],"mapped","羕"],[[194937,194937],"mapped","翺"],[[194938,194938],"mapped","者"],[[194939,194939],"mapped","𦓚"],[[194940,194940],"mapped","𦔣"],[[194941,194941],"mapped","聠"],[[194942,194942],"mapped","𦖨"],[[194943,194943],"mapped","聰"],[[194944,194944],"mapped","𣍟"],[[194945,194945],"mapped","䏕"],[[194946,194946],"mapped","育"],[[194947,194947],"mapped","脃"],[[194948,194948],"mapped","䐋"],[[194949,194949],"mapped","脾"],[[194950,194950],"mapped","媵"],[[194951,194951],"mapped","𦞧"],[[194952,194952],"mapped","𦞵"],[[194953,194953],"mapped","𣎓"],[[194954,194954],"mapped","𣎜"],[[194955,194955],"mapped","舁"],[[194956,194956],"mapped","舄"],[[194957,194957],"mapped","辞"],[[194958,194958],"mapped","䑫"],[[194959,194959],"mapped","芑"],[[194960,194960],"mapped","芋"],[[194961,194961],"mapped","芝"],[[194962,194962],"mapped","劳"],[[194963,194963],"mapped","花"],[[194964,194964],"mapped","芳"],[[194965,194965],"mapped","芽"],[[194966,194966],"mapped","苦"],[[194967,194967],"mapped","𦬼"],[[194968,194968],"mapped","若"],[[194969,194969],"mapped","茝"],[[194970,194970],"mapped","荣"],[[194971,194971],"mapped","莭"],[[194972,194972],"mapped","茣"],[[194973,194973],"mapped","莽"],[[194974,194974],"mapped","菧"],[[194975,194975],"mapped","著"],[[194976,194976],"mapped","荓"],[[194977,194977],"mapped","菊"],[[194978,194978],"mapped","菌"],[[194979,194979],"mapped","菜"],[[194980,194980],"mapped","𦰶"],[[194981,194981],"mapped","𦵫"],[[194982,194982],"mapped","𦳕"],[[194983,194983],"mapped","䔫"],[[194984,194984],"mapped","蓱"],[[194985,194985],"mapped","蓳"],[[194986,194986],"mapped","蔖"],[[194987,194987],"mapped","𧏊"],[[194988,194988],"mapped","蕤"],[[194989,194989],"mapped","𦼬"],[[194990,194990],"mapped","䕝"],[[194991,194991],"mapped","䕡"],[[194992,194992],"mapped","𦾱"],[[194993,194993],"mapped","𧃒"],[[194994,194994],"mapped","䕫"],[[194995,194995],"mapped","虐"],[[194996,194996],"mapped","虜"],[[194997,194997],"mapped","虧"],[[194998,194998],"mapped","虩"],[[194999,194999],"mapped","蚩"],[[195000,195000],"mapped","蚈"],[[195001,195001],"mapped","蜎"],[[195002,195002],"mapped","蛢"],[[195003,195003],"mapped","蝹"],[[195004,195004],"mapped","蜨"],[[195005,195005],"mapped","蝫"],[[195006,195006],"mapped","螆"],[[195007,195007],"disallowed"],[[195008,195008],"mapped","蟡"],[[195009,195009],"mapped","蠁"],[[195010,195010],"mapped","䗹"],[[195011,195011],"mapped","衠"],[[195012,195012],"mapped","衣"],[[195013,195013],"mapped","𧙧"],[[195014,195014],"mapped","裗"],[[195015,195015],"mapped","裞"],[[195016,195016],"mapped","䘵"],[[195017,195017],"mapped","裺"],[[195018,195018],"mapped","㒻"],[[195019,195019],"mapped","𧢮"],[[195020,195020],"mapped","𧥦"],[[195021,195021],"mapped","䚾"],[[195022,195022],"mapped","䛇"],[[195023,195023],"mapped","誠"],[[195024,195024],"mapped","諭"],[[195025,195025],"mapped","變"],[[195026,195026],"mapped","豕"],[[195027,195027],"mapped","𧲨"],[[195028,195028],"mapped","貫"],[[195029,195029],"mapped","賁"],[[195030,195030],"mapped","贛"],[[195031,195031],"mapped","起"],[[195032,195032],"mapped","𧼯"],[[195033,195033],"mapped","𠠄"],[[195034,195034],"mapped","跋"],[[195035,195035],"mapped","趼"],[[195036,195036],"mapped","跰"],[[195037,195037],"mapped","𠣞"],[[195038,195038],"mapped","軔"],[[195039,195039],"mapped","輸"],[[195040,195040],"mapped","𨗒"],[[195041,195041],"mapped","𨗭"],[[195042,195042],"mapped","邔"],[[195043,195043],"mapped","郱"],[[195044,195044],"mapped","鄑"],[[195045,195045],"mapped","𨜮"],[[195046,195046],"mapped","鄛"],[[195047,195047],"mapped","鈸"],[[195048,195048],"mapped","鋗"],[[195049,195049],"mapped","鋘"],[[195050,195050],"mapped","鉼"],[[195051,195051],"mapped","鏹"],[[195052,195052],"mapped","鐕"],[[195053,195053],"mapped","𨯺"],[[195054,195054],"mapped","開"],[[195055,195055],"mapped","䦕"],[[195056,195056],"mapped","閷"],[[195057,195057],"mapped","𨵷"],[[195058,195058],"mapped","䧦"],[[195059,195059],"mapped","雃"],[[195060,195060],"mapped","嶲"],[[195061,195061],"mapped","霣"],[[195062,195062],"mapped","𩅅"],[[195063,195063],"mapped","𩈚"],[[195064,195064],"mapped","䩮"],[[195065,195065],"mapped","䩶"],[[195066,195066],"mapped","韠"],[[195067,195067],"mapped","𩐊"],[[195068,195068],"mapped","䪲"],[[195069,195069],"mapped","𩒖"],[[195070,195071],"mapped","頋"],[[195072,195072],"mapped","頩"],[[195073,195073],"mapped","𩖶"],[[195074,195074],"mapped","飢"],[[195075,195075],"mapped","䬳"],[[195076,195076],"mapped","餩"],[[195077,195077],"mapped","馧"],[[195078,195078],"mapped","駂"],[[195079,195079],"mapped","駾"],[[195080,195080],"mapped","䯎"],[[195081,195081],"mapped","𩬰"],[[195082,195082],"mapped","鬒"],[[195083,195083],"mapped","鱀"],[[195084,195084],"mapped","鳽"],[[195085,195085],"mapped","䳎"],[[195086,195086],"mapped","䳭"],[[195087,195087],"mapped","鵧"],[[195088,195088],"mapped","𪃎"],[[195089,195089],"mapped","䳸"],[[195090,195090],"mapped","𪄅"],[[195091,195091],"mapped","𪈎"],[[195092,195092],"mapped","𪊑"],[[195093,195093],"mapped","麻"],[[195094,195094],"mapped","䵖"],[[195095,195095],"mapped","黹"],[[195096,195096],"mapped","黾"],[[195097,195097],"mapped","鼅"],[[195098,195098],"mapped","鼏"],[[195099,195099],"mapped","鼖"],[[195100,195100],"mapped","鼻"],[[195101,195101],"mapped","𪘀"],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]
/***/ }),
-/***/ 3822:
+/***/ 3812:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-const stableSortBy = __webpack_require__(3823);
-const urlencoded = __webpack_require__(3808);
-
-exports.implementation = class URLSearchParamsImpl {
- constructor(constructorArgs, { doNotStripQMark = false }) {
- let init = constructorArgs[0];
- this._list = [];
- this._url = null;
- if (!doNotStripQMark && typeof init === "string" && init[0] === "?") {
- init = init.slice(1);
- }
+const conversions = __webpack_require__(3809);
+const utils = __webpack_require__(3810);
- if (Array.isArray(init)) {
- for (const pair of init) {
- if (pair.length !== 2) {
- throw new TypeError("Failed to construct 'URLSearchParams': parameter 1 sequence's element does not " +
- "contain exactly two elements.");
- }
- this._list.push([pair[0], pair[1]]);
- }
- } else if (typeof init === "object" && Object.getPrototypeOf(init) === null) {
- for (const name of Object.keys(init)) {
- const value = init[name];
- this._list.push([name, value]);
- }
- } else {
- this._list = urlencoded.parseUrlencoded(init);
- }
- }
+const impl = utils.implSymbol;
- _updateSteps() {
- if (this._url !== null) {
- let query = urlencoded.serializeUrlencoded(this._list);
- if (query === "") {
- query = null;
+const IteratorPrototype = Object.create(utils.IteratorPrototype, {
+ next: {
+ value: function next() {
+ const internal = this[utils.iterInternalSymbol];
+ const { target, kind, index } = internal;
+ const values = Array.from(target[impl]);
+ const len = values.length;
+ if (index >= len) {
+ return { value: undefined, done: true };
}
- this._url._url.query = query;
- }
- }
- append(name, value) {
- this._list.push([name, value]);
- this._updateSteps();
- }
+ const pair = values[index];
+ internal.index = index + 1;
+ const [key, value] = pair.map(utils.tryWrapperForImpl);
- delete(name) {
- let i = 0;
- while (i < this._list.length) {
- if (this._list[i][0] === name) {
- this._list.splice(i, 1);
- } else {
- i++;
+ let result;
+ switch (kind) {
+ case "key":
+ result = key;
+ break;
+ case "value":
+ result = value;
+ break;
+ case "key+value":
+ result = [key, value];
+ break;
}
- }
- this._updateSteps();
- }
-
- get(name) {
- for (const tuple of this._list) {
- if (tuple[0] === name) {
- return tuple[1];
- }
- }
- return null;
+ return { value: result, done: false };
+ },
+ writable: true,
+ enumerable: true,
+ configurable: true
+ },
+ [Symbol.toStringTag]: {
+ value: "URLSearchParams Iterator",
+ configurable: true
}
+});
+class URLSearchParams {
+ constructor() {
+ const args = [];
+ {
+ let curArg = arguments[0];
+ if (curArg !== undefined) {
+ if (utils.isObject(curArg)) {
+ if (curArg[Symbol.iterator] !== undefined) {
+ if (!utils.isObject(curArg)) {
+ throw new TypeError(
+ "Failed to construct 'URLSearchParams': parameter 1" + " sequence" + " is not an iterable object."
+ );
+ } else {
+ const V = [];
+ const tmp = curArg;
+ for (let nextItem of tmp) {
+ if (!utils.isObject(nextItem)) {
+ throw new TypeError(
+ "Failed to construct 'URLSearchParams': parameter 1" +
+ " sequence" +
+ "'s element" +
+ " is not an iterable object."
+ );
+ } else {
+ const V = [];
+ const tmp = nextItem;
+ for (let nextItem of tmp) {
+ nextItem = conversions["USVString"](nextItem, {
+ context:
+ "Failed to construct 'URLSearchParams': parameter 1" + " sequence" + "'s element" + "'s element"
+ });
- getAll(name) {
- const output = [];
- for (const tuple of this._list) {
- if (tuple[0] === name) {
- output.push(tuple[1]);
- }
- }
- return output;
- }
+ V.push(nextItem);
+ }
+ nextItem = V;
+ }
- has(name) {
- for (const tuple of this._list) {
- if (tuple[0] === name) {
- return true;
- }
- }
- return false;
- }
+ V.push(nextItem);
+ }
+ curArg = V;
+ }
+ } else {
+ if (!utils.isObject(curArg)) {
+ throw new TypeError(
+ "Failed to construct 'URLSearchParams': parameter 1" + " record" + " is not an object."
+ );
+ } else {
+ const result = Object.create(null);
+ for (const key of Reflect.ownKeys(curArg)) {
+ const desc = Object.getOwnPropertyDescriptor(curArg, key);
+ if (desc && desc.enumerable) {
+ let typedKey = key;
+ let typedValue = curArg[key];
- set(name, value) {
- let found = false;
- let i = 0;
- while (i < this._list.length) {
- if (this._list[i][0] === name) {
- if (found) {
- this._list.splice(i, 1);
+ typedKey = conversions["USVString"](typedKey, {
+ context: "Failed to construct 'URLSearchParams': parameter 1" + " record" + "'s key"
+ });
+
+ typedValue = conversions["USVString"](typedValue, {
+ context: "Failed to construct 'URLSearchParams': parameter 1" + " record" + "'s value"
+ });
+
+ result[typedKey] = typedValue;
+ }
+ }
+ curArg = result;
+ }
+ }
} else {
- found = true;
- this._list[i][1] = value;
- i++;
+ curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URLSearchParams': parameter 1" });
}
} else {
- i++;
+ curArg = "";
}
+ args.push(curArg);
}
- if (!found) {
- this._list.push([name, value]);
- }
- this._updateSteps();
+ return iface.setup(Object.create(new.target.prototype), args);
}
- sort() {
- this._list = stableSortBy(this._list, [0]);
- this._updateSteps();
- }
+ append(name, value) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- [Symbol.iterator]() {
- return this._list[Symbol.iterator]();
+ if (arguments.length < 2) {
+ throw new TypeError(
+ "Failed to execute 'append' on 'URLSearchParams': 2 arguments required, but only " +
+ arguments.length +
+ " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'append' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ {
+ let curArg = arguments[1];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'append' on 'URLSearchParams': parameter 2"
+ });
+ args.push(curArg);
+ }
+ return this[impl].append(...args);
}
- toString() {
- return urlencoded.serializeUrlencoded(this._list);
- }
-};
+ delete(name) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ if (arguments.length < 1) {
+ throw new TypeError(
+ "Failed to execute 'delete' on 'URLSearchParams': 1 argument required, but only " +
+ arguments.length +
+ " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'delete' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ return this[impl].delete(...args);
+ }
-/***/ }),
+ get(name) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/***/ 3823:
-/***/ (function(module, exports, __webpack_require__) {
+ if (arguments.length < 1) {
+ throw new TypeError(
+ "Failed to execute 'get' on 'URLSearchParams': 1 argument required, but only " + arguments.length + " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'get' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ return this[impl].get(...args);
+ }
-/* WEBPACK VAR INJECTION */(function(global, module) {/**
- * lodash (Custom Build)
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors
- * Released under MIT license
- * Based on Underscore.js 1.8.3
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
+ getAll(name) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
+ if (arguments.length < 1) {
+ throw new TypeError(
+ "Failed to execute 'getAll' on 'URLSearchParams': 1 argument required, but only " +
+ arguments.length +
+ " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'getAll' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ return utils.tryWrapperForImpl(this[impl].getAll(...args));
+ }
-/** Used as the `TypeError` message for "Functions" methods. */
-var FUNC_ERROR_TEXT = 'Expected a function';
+ has(name) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
+ if (arguments.length < 1) {
+ throw new TypeError(
+ "Failed to execute 'has' on 'URLSearchParams': 1 argument required, but only " + arguments.length + " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'has' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ return this[impl].has(...args);
+ }
-/** Used to compose bitmasks for comparison styles. */
-var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ set(name, value) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0,
- MAX_SAFE_INTEGER = 9007199254740991;
+ if (arguments.length < 2) {
+ throw new TypeError(
+ "Failed to execute 'set' on 'URLSearchParams': 2 arguments required, but only " + arguments.length + " present."
+ );
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'set' on 'URLSearchParams': parameter 1"
+ });
+ args.push(curArg);
+ }
+ {
+ let curArg = arguments[1];
+ curArg = conversions["USVString"](curArg, {
+ context: "Failed to execute 'set' on 'URLSearchParams': parameter 2"
+ });
+ args.push(curArg);
+ }
+ return this[impl].set(...args);
+ }
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
- arrayTag = '[object Array]',
- boolTag = '[object Boolean]',
- dateTag = '[object Date]',
- errorTag = '[object Error]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- mapTag = '[object Map]',
- numberTag = '[object Number]',
- objectTag = '[object Object]',
- promiseTag = '[object Promise]',
- regexpTag = '[object RegExp]',
- setTag = '[object Set]',
- stringTag = '[object String]',
- symbolTag = '[object Symbol]',
- weakMapTag = '[object WeakMap]';
+ sort() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-var arrayBufferTag = '[object ArrayBuffer]',
- dataViewTag = '[object DataView]',
- float32Tag = '[object Float32Array]',
- float64Tag = '[object Float64Array]',
- int8Tag = '[object Int8Array]',
- int16Tag = '[object Int16Array]',
- int32Tag = '[object Int32Array]',
- uint8Tag = '[object Uint8Array]',
- uint8ClampedTag = '[object Uint8ClampedArray]',
- uint16Tag = '[object Uint16Array]',
- uint32Tag = '[object Uint32Array]';
+ return this[impl].sort();
+ }
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
- reIsPlainProp = /^\w*$/,
- reLeadingDot = /^\./,
- rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+ toString() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+ return this[impl].toString();
+ }
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
+ keys() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return module.exports.createDefaultIterator(this, "key");
+ }
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
+ values() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return module.exports.createDefaultIterator(this, "value");
+ }
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
+ entries() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return module.exports.createDefaultIterator(this, "key+value");
+ }
-/** Used to identify `toStringTag` values of typed arrays. */
-var typedArrayTags = {};
-typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
-typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
-typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
-typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
-typedArrayTags[uint32Tag] = true;
-typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
-typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
-typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
-typedArrayTags[errorTag] = typedArrayTags[funcTag] =
-typedArrayTags[mapTag] = typedArrayTags[numberTag] =
-typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
-typedArrayTags[setTag] = typedArrayTags[stringTag] =
-typedArrayTags[weakMapTag] = false;
+ forEach(callback) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ if (arguments.length < 1) {
+ throw new TypeError("Failed to execute 'forEach' on 'iterable': 1 argument required, " + "but only 0 present.");
+ }
+ if (typeof callback !== "function") {
+ throw new TypeError(
+ "Failed to execute 'forEach' on 'iterable': The callback provided " + "as parameter 1 is not a function."
+ );
+ }
+ const thisArg = arguments[1];
+ let pairs = Array.from(this[impl]);
+ let i = 0;
+ while (i < pairs.length) {
+ const [key, value] = pairs[i].map(utils.tryWrapperForImpl);
+ callback.call(thisArg, value, key, this);
+ pairs = Array.from(this[impl]);
+ i++;
+ }
+ }
+}
+Object.defineProperties(URLSearchParams.prototype, {
+ append: { enumerable: true },
+ delete: { enumerable: true },
+ get: { enumerable: true },
+ getAll: { enumerable: true },
+ has: { enumerable: true },
+ set: { enumerable: true },
+ sort: { enumerable: true },
+ toString: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true },
+ forEach: { enumerable: true },
+ [Symbol.toStringTag]: { value: "URLSearchParams", configurable: true },
+ [Symbol.iterator]: { value: URLSearchParams.prototype.entries, configurable: true, writable: true }
+});
+const iface = {
+ // When an interface-module that implements this interface as a mixin is loaded, it will append its own `.is()`
+ // method into this array. It allows objects that directly implements *those* interfaces to be recognized as
+ // implementing this mixin interface.
+ _mixedIntoPredicates: [],
+ is(obj) {
+ if (obj) {
+ if (utils.hasOwn(obj, impl) && obj[impl] instanceof Impl.implementation) {
+ return true;
+ }
+ for (const isMixedInto of module.exports._mixedIntoPredicates) {
+ if (isMixedInto(obj)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ isImpl(obj) {
+ if (obj) {
+ if (obj instanceof Impl.implementation) {
+ return true;
+ }
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+ const wrapper = utils.wrapperForImpl(obj);
+ for (const isMixedInto of module.exports._mixedIntoPredicates) {
+ if (isMixedInto(wrapper)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ convert(obj, { context = "The provided value" } = {}) {
+ if (module.exports.is(obj)) {
+ return utils.implForWrapper(obj);
+ }
+ throw new TypeError(`${context} is not of type 'URLSearchParams'.`);
+ },
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+ createDefaultIterator(target, kind) {
+ const iterator = Object.create(IteratorPrototype);
+ Object.defineProperty(iterator, utils.iterInternalSymbol, {
+ value: { target, kind, index: 0 },
+ configurable: true
+ });
+ return iterator;
+ },
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
+ create(constructorArgs, privateData) {
+ let obj = Object.create(URLSearchParams.prototype);
+ obj = this.setup(obj, constructorArgs, privateData);
+ return obj;
+ },
+ createImpl(constructorArgs, privateData) {
+ let obj = Object.create(URLSearchParams.prototype);
+ obj = this.setup(obj, constructorArgs, privateData);
+ return utils.implForWrapper(obj);
+ },
+ _internalSetup(obj) {},
+ setup(obj, constructorArgs, privateData) {
+ if (!privateData) privateData = {};
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+ privateData.wrapper = obj;
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+ this._internalSetup(obj);
+ Object.defineProperty(obj, impl, {
+ value: new Impl.implementation(constructorArgs, privateData),
+ configurable: true
+ });
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
+ obj[impl][utils.wrapperSymbol] = obj;
+ if (Impl.init) {
+ Impl.init(obj[impl], privateData);
+ }
+ return obj;
+ },
+ interface: URLSearchParams,
+ expose: {
+ Window: { URLSearchParams },
+ Worker: { URLSearchParams }
+ }
+}; // iface
+module.exports = iface;
-/** Detect free variable `process` from Node.js. */
-var freeProcess = moduleExports && freeGlobal.process;
+const Impl = __webpack_require__(3822);
-/** Used to access faster Node.js helpers. */
-var nodeUtil = (function() {
- try {
- return freeProcess && freeProcess.binding('util');
- } catch (e) {}
-}());
-/* Node.js helper references. */
-var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+/***/ }),
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
- switch (args.length) {
- case 0: return func.call(thisArg);
- case 1: return func.call(thisArg, args[0]);
- case 2: return func.call(thisArg, args[0], args[1]);
- case 3: return func.call(thisArg, args[0], args[1], args[2]);
- }
- return func.apply(thisArg, args);
-}
+/***/ 3813:
+/***/ (function(module, exports, __webpack_require__) {
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
- var index = -1,
- length = array ? array.length : 0,
- result = Array(length);
+"use strict";
- while (++index < length) {
- result[index] = iteratee(array[index], index, array);
- }
- return result;
-}
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
- var index = -1,
- length = values.length,
- offset = array.length;
+let mappingsWasm = null;
- while (++index < length) {
- array[offset + index] = values[index];
+module.exports = function readWasm() {
+ if (typeof mappingsWasm === "string") {
+ return fetch(mappingsWasm)
+ .then(response => response.arrayBuffer());
}
- return array;
-}
-
-/**
- * A specialized version of `_.some` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- * else `false`.
- */
-function arraySome(array, predicate) {
- var index = -1,
- length = array ? array.length : 0;
-
- while (++index < length) {
- if (predicate(array[index], index, array)) {
- return true;
- }
+ if (mappingsWasm instanceof ArrayBuffer) {
+ return Promise.resolve(mappingsWasm);
}
- return false;
-}
-/**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function baseProperty(key) {
- return function(object) {
- return object == null ? undefined : object[key];
- };
-}
+ throw new Error("You must provide the string URL or ArrayBuffer contents " +
+ "of lib/mappings.wasm by calling " +
+ "SourceMapConsumer.initialize({ 'lib/mappings.wasm': ... }) " +
+ "before using SourceMapConsumer");
+};
-/**
- * The base implementation of `_.sortBy` which uses `comparer` to define the
- * sort order of `array` and replaces criteria objects with their corresponding
- * values.
- *
- * @private
- * @param {Array} array The array to sort.
- * @param {Function} comparer The function to define sort order.
- * @returns {Array} Returns `array`.
- */
-function baseSortBy(array, comparer) {
- var length = array.length;
+module.exports.initialize = input => {
+ mappingsWasm = input;
+};
- array.sort(comparer);
- while (length--) {
- array[length] = array[length].value;
- }
- return array;
-}
-/**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
-function baseTimes(n, iteratee) {
- var index = -1,
- result = Array(n);
+/***/ }),
- while (++index < n) {
- result[index] = iteratee(index);
- }
- return result;
-}
+/***/ 3815:
+/***/ (function(module, exports, __webpack_require__) {
-/**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
+"use strict";
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
*/
-function baseUnary(func) {
- return function(value) {
- return func(value);
- };
-}
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
- return object == null ? undefined : object[key];
-}
/**
- * Checks if `value` is a host object in IE < 9.
+ * Browser 'URL' implementations have been found to handle non-standard URL
+ * schemes poorly, and schemes like
*
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
- */
-function isHostObject(value) {
- // Many host objects are `Object` objects that can coerce to strings
- // despite having improperly defined `toString` methods.
- var result = false;
- if (value != null && typeof value.toString != 'function') {
- try {
- result = !!(value + '');
- } catch (e) {}
- }
- return result;
-}
-
-/**
- * Converts `map` to its key-value pairs.
+ * webpack:///src/folder/file.js
*
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
-function mapToArray(map) {
- var index = -1,
- result = Array(map.size);
-
- map.forEach(function(value, key) {
- result[++index] = [key, value];
- });
- return result;
-}
-
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
+ * are very common in source maps. For the time being we use a JS
+ * implementation in these contexts instead. See
*
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
+ * * https://bugzilla.mozilla.org/show_bug.cgi?id=1374505
+ * * https://bugs.chromium.org/p/chromium/issues/detail?id=734880
*/
-function overArg(func, transform) {
- return function(arg) {
- return func(transform(arg));
- };
-}
+module.exports = __webpack_require__(3816).URL;
-/**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
-function setToArray(set) {
- var index = -1,
- result = Array(set.size);
- set.forEach(function(value) {
- result[++index] = value;
- });
- return result;
-}
+/***/ }),
-/** Used for built-in method references. */
-var arrayProto = Array.prototype,
- funcProto = Function.prototype,
- objectProto = Object.prototype;
+/***/ 3816:
+/***/ (function(module, exports, __webpack_require__) {
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
+"use strict";
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
+exports.URL = __webpack_require__(3817).interface;
+exports.URLSearchParams = __webpack_require__(3812).interface;
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
+exports.parseURL = __webpack_require__(3807).parseURL;
+exports.basicURLParse = __webpack_require__(3807).basicURLParse;
+exports.serializeURL = __webpack_require__(3807).serializeURL;
+exports.serializeHost = __webpack_require__(3807).serializeHost;
+exports.serializeInteger = __webpack_require__(3807).serializeInteger;
+exports.serializeURLOrigin = __webpack_require__(3807).serializeURLOrigin;
+exports.setTheUsername = __webpack_require__(3807).setTheUsername;
+exports.setThePassword = __webpack_require__(3807).setThePassword;
+exports.cannotHaveAUsernamePasswordPort = __webpack_require__(3807).cannotHaveAUsernamePasswordPort;
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objectToString = objectProto.toString;
+exports.percentDecode = __webpack_require__(3808).percentDecode;
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
- funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-/** Built-in value references. */
-var Symbol = root.Symbol,
- Uint8Array = root.Uint8Array,
- propertyIsEnumerable = objectProto.propertyIsEnumerable,
- splice = arrayProto.splice,
- spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
+/***/ }),
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeKeys = overArg(Object.keys, Object),
- nativeMax = Math.max;
+/***/ 3817:
+/***/ (function(module, exports, __webpack_require__) {
-/* Built-in method references that are verified to be native. */
-var DataView = getNative(root, 'DataView'),
- Map = getNative(root, 'Map'),
- Promise = getNative(root, 'Promise'),
- Set = getNative(root, 'Set'),
- WeakMap = getNative(root, 'WeakMap'),
- nativeCreate = getNative(Object, 'create');
+"use strict";
-/** Used to detect maps, sets, and weakmaps. */
-var dataViewCtorString = toSource(DataView),
- mapCtorString = toSource(Map),
- promiseCtorString = toSource(Promise),
- setCtorString = toSource(Set),
- weakMapCtorString = toSource(WeakMap);
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
- symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
+const conversions = __webpack_require__(3809);
+const utils = __webpack_require__(3810);
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
+const impl = utils.implSymbol;
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
+class URL {
+ constructor(url) {
+ if (arguments.length < 1) {
+ throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
+ }
+ const args = [];
+ {
+ let curArg = arguments[0];
+ curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URL': parameter 1" });
+ args.push(curArg);
+ }
+ {
+ let curArg = arguments[1];
+ if (curArg !== undefined) {
+ curArg = conversions["USVString"](curArg, { context: "Failed to construct 'URL': parameter 2" });
+ }
+ args.push(curArg);
+ }
+ return iface.setup(Object.create(new.target.prototype), args);
}
-}
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
-}
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
- return this.has(key) && delete this.__data__[key];
-}
+ toJSON() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
+ return this[impl].toJSON();
}
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
-}
+ get href() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
- var data = this.__data__;
- data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
- return this;
-}
+ return this[impl]["href"];
+ }
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
+ set href(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
+ V = conversions["USVString"](V, { context: "Failed to set the 'href' property on 'URL': The provided value" });
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
+ this[impl]["href"] = V;
}
-}
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
- this.__data__ = [];
-}
+ toString() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+ return this[impl]["href"];
+ }
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
+ get origin() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
+ return this[impl]["origin"];
}
- return true;
-}
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
+ get protocol() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- return index < 0 ? undefined : data[index][1];
-}
+ return this[impl]["protocol"];
+ }
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
-}
+ set protocol(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
+ V = conversions["USVString"](V, { context: "Failed to set the 'protocol' property on 'URL': The provided value" });
- if (index < 0) {
- data.push([key, value]);
- } else {
- data[index][1] = value;
+ this[impl]["protocol"] = V;
}
- return this;
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
- var index = -1,
- length = entries ? entries.length : 0;
+ get username() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
+ return this[impl]["username"];
}
-}
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
- this.__data__ = {
- 'hash': new Hash,
- 'map': new (Map || ListCache),
- 'string': new Hash
- };
-}
+ set username(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
- return getMapData(this, key)['delete'](key);
-}
+ V = conversions["USVString"](V, { context: "Failed to set the 'username' property on 'URL': The provided value" });
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
- return getMapData(this, key).get(key);
-}
+ this[impl]["username"] = V;
+ }
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
- return getMapData(this, key).has(key);
-}
+ get password() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
- getMapData(this, key).set(key, value);
- return this;
-}
+ return this[impl]["password"];
+ }
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
+ set password(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
-function SetCache(values) {
- var index = -1,
- length = values ? values.length : 0;
+ V = conversions["USVString"](V, { context: "Failed to set the 'password' property on 'URL': The provided value" });
- this.__data__ = new MapCache;
- while (++index < length) {
- this.add(values[index]);
+ this[impl]["password"] = V;
}
-}
-/**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
-function setCacheAdd(value) {
- this.__data__.set(value, HASH_UNDEFINED);
- return this;
-}
+ get host() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
-function setCacheHas(value) {
- return this.__data__.has(value);
-}
+ return this[impl]["host"];
+ }
-// Add methods to `SetCache`.
-SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
-SetCache.prototype.has = setCacheHas;
+ set host(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Stack(entries) {
- this.__data__ = new ListCache(entries);
-}
+ V = conversions["USVString"](V, { context: "Failed to set the 'host' property on 'URL': The provided value" });
-/**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
-function stackClear() {
- this.__data__ = new ListCache;
-}
+ this[impl]["host"] = V;
+ }
-/**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function stackDelete(key) {
- return this.__data__['delete'](key);
-}
+ get hostname() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function stackGet(key) {
- return this.__data__.get(key);
-}
-
-/**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function stackHas(key) {
- return this.__data__.has(key);
-}
-
-/**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
-function stackSet(key, value) {
- var cache = this.__data__;
- if (cache instanceof ListCache) {
- var pairs = cache.__data__;
- if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
- pairs.push([key, value]);
- return this;
- }
- cache = this.__data__ = new MapCache(pairs);
+ return this[impl]["hostname"];
}
- cache.set(key, value);
- return this;
-}
-
-// Add methods to `Stack`.
-Stack.prototype.clear = stackClear;
-Stack.prototype['delete'] = stackDelete;
-Stack.prototype.get = stackGet;
-Stack.prototype.has = stackHas;
-Stack.prototype.set = stackSet;
-/**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
-function arrayLikeKeys(value, inherited) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- // Safari 9 makes `arguments.length` enumerable in strict mode.
- var result = (isArray(value) || isArguments(value))
- ? baseTimes(value.length, String)
- : [];
+ set hostname(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- var length = result.length,
- skipIndexes = !!length;
+ V = conversions["USVString"](V, { context: "Failed to set the 'hostname' property on 'URL': The provided value" });
- for (var key in value) {
- if ((inherited || hasOwnProperty.call(value, key)) &&
- !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
- result.push(key);
- }
+ this[impl]["hostname"] = V;
}
- return result;
-}
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
+ get port() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
}
+
+ return this[impl]["port"];
}
- return -1;
-}
-/**
- * The base implementation of `_.forEach` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- */
-var baseEach = createBaseEach(baseForOwn);
+ set port(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * The base implementation of `_.flatten` with support for restricting flattening.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {number} depth The maximum recursion depth.
- * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
- * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
- * @param {Array} [result=[]] The initial result value.
- * @returns {Array} Returns the new flattened array.
- */
-function baseFlatten(array, depth, predicate, isStrict, result) {
- var index = -1,
- length = array.length;
+ V = conversions["USVString"](V, { context: "Failed to set the 'port' property on 'URL': The provided value" });
- predicate || (predicate = isFlattenable);
- result || (result = []);
+ this[impl]["port"] = V;
+ }
- while (++index < length) {
- var value = array[index];
- if (depth > 0 && predicate(value)) {
- if (depth > 1) {
- // Recursively flatten arrays (susceptible to call stack limits).
- baseFlatten(value, depth - 1, predicate, isStrict, result);
- } else {
- arrayPush(result, value);
- }
- } else if (!isStrict) {
- result[result.length] = value;
+ get pathname() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
}
+
+ return this[impl]["pathname"];
}
- return result;
-}
-/**
- * The base implementation of `baseForOwn` which iterates over `object`
- * properties returned by `keysFunc` and invokes `iteratee` for each property.
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @returns {Object} Returns `object`.
- */
-var baseFor = createBaseFor();
+ set pathname(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * The base implementation of `_.forOwn` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Object} Returns `object`.
- */
-function baseForOwn(object, iteratee) {
- return object && baseFor(object, iteratee, keys);
-}
+ V = conversions["USVString"](V, { context: "Failed to set the 'pathname' property on 'URL': The provided value" });
-/**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path) {
- path = isKey(path, object) ? [path] : castPath(path);
+ this[impl]["pathname"] = V;
+ }
- var index = 0,
- length = path.length;
+ get search() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- while (object != null && index < length) {
- object = object[toKey(path[index++])];
+ return this[impl]["search"];
}
- return (index && index == length) ? object : undefined;
-}
-/**
- * The base implementation of `getTag`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
- return objectToString.call(value);
-}
+ set search(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
-/**
- * The base implementation of `_.hasIn` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
-function baseHasIn(object, key) {
- return object != null && key in Object(object);
-}
+ V = conversions["USVString"](V, { context: "Failed to set the 'search' property on 'URL': The provided value" });
-/**
- * The base implementation of `_.isEqual` which supports partial comparisons
- * and tracks traversed objects.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {boolean} [bitmask] The bitmask of comparison flags.
- * The bitmask may be composed of the following flags:
- * 1 - Unordered comparison
- * 2 - Partial comparison
- * @param {Object} [stack] Tracks traversed `value` and `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(value, other, customizer, bitmask, stack) {
- if (value === other) {
- return true;
+ this[impl]["search"] = V;
}
- if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
- return value !== value && other !== other;
+
+ get searchParams() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
+
+ return utils.getSameObject(this, "searchParams", () => {
+ return utils.tryWrapperForImpl(this[impl]["searchParams"]);
+ });
}
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
-}
-/**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} [stack] Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
- var objIsArr = isArray(object),
- othIsArr = isArray(other),
- objTag = arrayTag,
- othTag = arrayTag;
+ get hash() {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- if (!objIsArr) {
- objTag = getTag(object);
- objTag = objTag == argsTag ? objectTag : objTag;
- }
- if (!othIsArr) {
- othTag = getTag(other);
- othTag = othTag == argsTag ? objectTag : othTag;
+ return this[impl]["hash"];
}
- var objIsObj = objTag == objectTag && !isHostObject(object),
- othIsObj = othTag == objectTag && !isHostObject(other),
- isSameTag = objTag == othTag;
- if (isSameTag && !objIsObj) {
- stack || (stack = new Stack);
- return (objIsArr || isTypedArray(object))
- ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
- : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
- }
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
- var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+ set hash(V) {
+ if (!this || !module.exports.is(this)) {
+ throw new TypeError("Illegal invocation");
+ }
- if (objIsWrapped || othIsWrapped) {
- var objUnwrapped = objIsWrapped ? object.value() : object,
- othUnwrapped = othIsWrapped ? other.value() : other;
+ V = conversions["USVString"](V, { context: "Failed to set the 'hash' property on 'URL': The provided value" });
- stack || (stack = new Stack);
- return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
- }
- }
- if (!isSameTag) {
- return false;
+ this[impl]["hash"] = V;
}
- stack || (stack = new Stack);
- return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
}
+Object.defineProperties(URL.prototype, {
+ toJSON: { enumerable: true },
+ href: { enumerable: true },
+ toString: { enumerable: true },
+ origin: { enumerable: true },
+ protocol: { enumerable: true },
+ username: { enumerable: true },
+ password: { enumerable: true },
+ host: { enumerable: true },
+ hostname: { enumerable: true },
+ port: { enumerable: true },
+ pathname: { enumerable: true },
+ search: { enumerable: true },
+ searchParams: { enumerable: true },
+ hash: { enumerable: true },
+ [Symbol.toStringTag]: { value: "URL", configurable: true }
+});
+const iface = {
+ // When an interface-module that implements this interface as a mixin is loaded, it will append its own `.is()`
+ // method into this array. It allows objects that directly implements *those* interfaces to be recognized as
+ // implementing this mixin interface.
+ _mixedIntoPredicates: [],
+ is(obj) {
+ if (obj) {
+ if (utils.hasOwn(obj, impl) && obj[impl] instanceof Impl.implementation) {
+ return true;
+ }
+ for (const isMixedInto of module.exports._mixedIntoPredicates) {
+ if (isMixedInto(obj)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ isImpl(obj) {
+ if (obj) {
+ if (obj instanceof Impl.implementation) {
+ return true;
+ }
-/**
- * The base implementation of `_.isMatch` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to inspect.
- * @param {Object} source The object of property values to match.
- * @param {Array} matchData The property names, values, and compare flags to match.
- * @param {Function} [customizer] The function to customize comparisons.
- * @returns {boolean} Returns `true` if `object` is a match, else `false`.
- */
-function baseIsMatch(object, source, matchData, customizer) {
- var index = matchData.length,
- length = index,
- noCustomizer = !customizer;
+ const wrapper = utils.wrapperForImpl(obj);
+ for (const isMixedInto of module.exports._mixedIntoPredicates) {
+ if (isMixedInto(wrapper)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+ convert(obj, { context = "The provided value" } = {}) {
+ if (module.exports.is(obj)) {
+ return utils.implForWrapper(obj);
+ }
+ throw new TypeError(`${context} is not of type 'URL'.`);
+ },
- if (object == null) {
- return !length;
- }
- object = Object(object);
- while (index--) {
- var data = matchData[index];
- if ((noCustomizer && data[2])
- ? data[1] !== object[data[0]]
- : !(data[0] in object)
- ) {
- return false;
+ create(constructorArgs, privateData) {
+ let obj = Object.create(URL.prototype);
+ obj = this.setup(obj, constructorArgs, privateData);
+ return obj;
+ },
+ createImpl(constructorArgs, privateData) {
+ let obj = Object.create(URL.prototype);
+ obj = this.setup(obj, constructorArgs, privateData);
+ return utils.implForWrapper(obj);
+ },
+ _internalSetup(obj) {},
+ setup(obj, constructorArgs, privateData) {
+ if (!privateData) privateData = {};
+
+ privateData.wrapper = obj;
+
+ this._internalSetup(obj);
+ Object.defineProperty(obj, impl, {
+ value: new Impl.implementation(constructorArgs, privateData),
+ configurable: true
+ });
+
+ obj[impl][utils.wrapperSymbol] = obj;
+ if (Impl.init) {
+ Impl.init(obj[impl], privateData);
}
+ return obj;
+ },
+ interface: URL,
+ expose: {
+ Window: { URL },
+ Worker: { URL }
}
- while (++index < length) {
- data = matchData[index];
- var key = data[0],
- objValue = object[key],
- srcValue = data[1];
+}; // iface
+module.exports = iface;
- if (noCustomizer && data[2]) {
- if (objValue === undefined && !(key in object)) {
- return false;
- }
- } else {
- var stack = new Stack;
- if (customizer) {
- var result = customizer(objValue, srcValue, key, object, source, stack);
- }
- if (!(result === undefined
- ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
- : result
- )) {
- return false;
+const Impl = __webpack_require__(3818);
+
+
+/***/ }),
+
+/***/ 3818:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+const usm = __webpack_require__(3807);
+const urlencoded = __webpack_require__(3808);
+const URLSearchParams = __webpack_require__(3812);
+
+exports.implementation = class URLImpl {
+ constructor(constructorArgs) {
+ const url = constructorArgs[0];
+ const base = constructorArgs[1];
+
+ let parsedBase = null;
+ if (base !== undefined) {
+ parsedBase = usm.basicURLParse(base);
+ if (parsedBase === null) {
+ throw new TypeError(`Invalid base URL: ${base}`);
}
}
+
+ const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
+ if (parsedURL === null) {
+ throw new TypeError(`Invalid URL: ${url}`);
+ }
+
+ const query = parsedURL.query !== null ? parsedURL.query : "";
+
+ this._url = parsedURL;
+
+ // We cannot invoke the "new URLSearchParams object" algorithm without going through the constructor, which strips
+ // question mark by default. Therefore the doNotStripQMark hack is used.
+ this._query = URLSearchParams.createImpl([query], { doNotStripQMark: true });
+ this._query._url = this;
}
- return true;
-}
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
-function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
+ get href() {
+ return usm.serializeURL(this._url);
}
- var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
-}
-/**
- * The base implementation of `_.isTypedArray` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- */
-function baseIsTypedArray(value) {
- return isObjectLike(value) &&
- isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
-}
+ set href(v) {
+ const parsedURL = usm.basicURLParse(v);
+ if (parsedURL === null) {
+ throw new TypeError(`Invalid URL: ${v}`);
+ }
-/**
- * The base implementation of `_.iteratee`.
- *
- * @private
- * @param {*} [value=_.identity] The value to convert to an iteratee.
- * @returns {Function} Returns the iteratee.
- */
-function baseIteratee(value) {
- // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
- // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
- if (typeof value == 'function') {
- return value;
+ this._url = parsedURL;
+
+ this._query._list.splice(0);
+ const { query } = parsedURL;
+ if (query !== null) {
+ this._query._list = urlencoded.parseUrlencoded(query);
+ }
}
- if (value == null) {
- return identity;
+
+ get origin() {
+ return usm.serializeURLOrigin(this._url);
}
- if (typeof value == 'object') {
- return isArray(value)
- ? baseMatchesProperty(value[0], value[1])
- : baseMatches(value);
+
+ get protocol() {
+ return this._url.scheme + ":";
}
- return property(value);
-}
-/**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeys(object) {
- if (!isPrototype(object)) {
- return nativeKeys(object);
+ set protocol(v) {
+ usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
}
- var result = [];
- for (var key in Object(object)) {
- if (hasOwnProperty.call(object, key) && key != 'constructor') {
- result.push(key);
- }
+
+ get username() {
+ return this._url.username;
}
- return result;
-}
-/**
- * The base implementation of `_.map` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function baseMap(collection, iteratee) {
- var index = -1,
- result = isArrayLike(collection) ? Array(collection.length) : [];
+ set username(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
- baseEach(collection, function(value, key, collection) {
- result[++index] = iteratee(value, key, collection);
- });
- return result;
-}
+ usm.setTheUsername(this._url, v);
+ }
-/**
- * The base implementation of `_.matches` which doesn't clone `source`.
- *
- * @private
- * @param {Object} source The object of property values to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatches(source) {
- var matchData = getMatchData(source);
- if (matchData.length == 1 && matchData[0][2]) {
- return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ get password() {
+ return this._url.password;
}
- return function(object) {
- return object === source || baseIsMatch(object, source, matchData);
- };
-}
-/**
- * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
- *
- * @private
- * @param {string} path The path of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatchesProperty(path, srcValue) {
- if (isKey(path) && isStrictComparable(srcValue)) {
- return matchesStrictComparable(toKey(path), srcValue);
+ set password(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
+
+ usm.setThePassword(this._url, v);
}
- return function(object) {
- var objValue = get(object, path);
- return (objValue === undefined && objValue === srcValue)
- ? hasIn(object, path)
- : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
- };
-}
-/**
- * The base implementation of `_.orderBy` without param guards.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
- * @param {string[]} orders The sort orders of `iteratees`.
- * @returns {Array} Returns the new sorted array.
- */
-function baseOrderBy(collection, iteratees, orders) {
- var index = -1;
- iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));
+ get host() {
+ const url = this._url;
- var result = baseMap(collection, function(value, key, collection) {
- var criteria = arrayMap(iteratees, function(iteratee) {
- return iteratee(value);
- });
- return { 'criteria': criteria, 'index': ++index, 'value': value };
- });
+ if (url.host === null) {
+ return "";
+ }
- return baseSortBy(result, function(object, other) {
- return compareMultiple(object, other, orders);
- });
-}
+ if (url.port === null) {
+ return usm.serializeHost(url.host);
+ }
-/**
- * A specialized version of `baseProperty` which supports deep paths.
- *
- * @private
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function basePropertyDeep(path) {
- return function(object) {
- return baseGet(object, path);
- };
-}
+ return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
+ }
-/**
- * The base implementation of `_.rest` which doesn't validate or coerce arguments.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @returns {Function} Returns the new function.
- */
-function baseRest(func, start) {
- start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
- return function() {
- var args = arguments,
- index = -1,
- length = nativeMax(args.length - start, 0),
- array = Array(length);
+ set host(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
+ }
- while (++index < length) {
- array[index] = args[start + index];
+ usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
+ }
+
+ get hostname() {
+ if (this._url.host === null) {
+ return "";
}
- index = -1;
- var otherArgs = Array(start + 1);
- while (++index < start) {
- otherArgs[index] = args[index];
+
+ return usm.serializeHost(this._url.host);
+ }
+
+ set hostname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
}
- otherArgs[start] = array;
- return apply(func, this, otherArgs);
- };
-}
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
+ usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
}
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
+
+ get port() {
+ if (this._url.port === null) {
+ return "";
+ }
+
+ return usm.serializeInteger(this._url.port);
}
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-/**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {Array} Returns the cast property path array.
- */
-function castPath(value) {
- return isArray(value) ? value : stringToPath(value);
-}
+ set port(v) {
+ if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
+ return;
+ }
-/**
- * Compares values to sort them in ascending order.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {number} Returns the sort order indicator for `value`.
- */
-function compareAscending(value, other) {
- if (value !== other) {
- var valIsDefined = value !== undefined,
- valIsNull = value === null,
- valIsReflexive = value === value,
- valIsSymbol = isSymbol(value);
-
- var othIsDefined = other !== undefined,
- othIsNull = other === null,
- othIsReflexive = other === other,
- othIsSymbol = isSymbol(other);
-
- if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
- (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
- (valIsNull && othIsDefined && othIsReflexive) ||
- (!valIsDefined && othIsReflexive) ||
- !valIsReflexive) {
- return 1;
- }
- if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
- (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
- (othIsNull && valIsDefined && valIsReflexive) ||
- (!othIsDefined && valIsReflexive) ||
- !othIsReflexive) {
- return -1;
+ if (v === "") {
+ this._url.port = null;
+ } else {
+ usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
}
}
- return 0;
-}
-/**
- * Used by `_.orderBy` to compare multiple properties of a value to another
- * and stable sort them.
- *
- * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
- * specify an order of "desc" for descending or "asc" for ascending sort order
- * of corresponding values.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {boolean[]|string[]} orders The order to sort by for each property.
- * @returns {number} Returns the sort order indicator for `object`.
- */
-function compareMultiple(object, other, orders) {
- var index = -1,
- objCriteria = object.criteria,
- othCriteria = other.criteria,
- length = objCriteria.length,
- ordersLength = orders.length;
+ get pathname() {
+ if (this._url.cannotBeABaseURL) {
+ return this._url.path[0];
+ }
- while (++index < length) {
- var result = compareAscending(objCriteria[index], othCriteria[index]);
- if (result) {
- if (index >= ordersLength) {
- return result;
- }
- var order = orders[index];
- return result * (order == 'desc' ? -1 : 1);
+ if (this._url.path.length === 0) {
+ return "";
}
+
+ return "/" + this._url.path.join("/");
}
- // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
- // that causes it, under certain circumstances, to provide the same value for
- // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
- // for more details.
- //
- // This also ensures a stable sort in V8 and other engines.
- // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
- return object.index - other.index;
-}
-/**
- * Creates a `baseEach` or `baseEachRight` function.
- *
- * @private
- * @param {Function} eachFunc The function to iterate over a collection.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseEach(eachFunc, fromRight) {
- return function(collection, iteratee) {
- if (collection == null) {
- return collection;
- }
- if (!isArrayLike(collection)) {
- return eachFunc(collection, iteratee);
+ set pathname(v) {
+ if (this._url.cannotBeABaseURL) {
+ return;
}
- var length = collection.length,
- index = fromRight ? length : -1,
- iterable = Object(collection);
- while ((fromRight ? index-- : ++index < length)) {
- if (iteratee(iterable[index], index, iterable) === false) {
- break;
- }
+ this._url.path = [];
+ usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
+ }
+
+ get search() {
+ if (this._url.query === null || this._url.query === "") {
+ return "";
}
- return collection;
- };
-}
-/**
- * Creates a base function for methods like `_.forIn` and `_.forOwn`.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseFor(fromRight) {
- return function(object, iteratee, keysFunc) {
- var index = -1,
- iterable = Object(object),
- props = keysFunc(object),
- length = props.length;
+ return "?" + this._url.query;
+ }
- while (length--) {
- var key = props[fromRight ? length : ++index];
- if (iteratee(iterable[key], key, iterable) === false) {
- break;
- }
- }
- return object;
- };
-}
+ set search(v) {
+ const url = this._url;
-/**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `array` and `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
-function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
- arrLength = array.length,
- othLength = other.length;
+ if (v === "") {
+ url.query = null;
+ this._query._list = [];
+ return;
+ }
- if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
- return false;
+ const input = v[0] === "?" ? v.substring(1) : v;
+ url.query = "";
+ usm.basicURLParse(input, { url, stateOverride: "query" });
+ this._query._list = urlencoded.parseUrlencoded(input);
}
- // Assume cyclic values are equal.
- var stacked = stack.get(array);
- if (stacked && stack.get(other)) {
- return stacked == other;
+
+ get searchParams() {
+ return this._query;
}
- var index = -1,
- result = true,
- seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
- stack.set(array, other);
- stack.set(other, array);
+ get hash() {
+ if (this._url.fragment === null || this._url.fragment === "") {
+ return "";
+ }
- // Ignore non-index properties.
- while (++index < arrLength) {
- var arrValue = array[index],
- othValue = other[index];
+ return "#" + this._url.fragment;
+ }
- if (customizer) {
- var compared = isPartial
- ? customizer(othValue, arrValue, index, other, array, stack)
- : customizer(arrValue, othValue, index, array, other, stack);
- }
- if (compared !== undefined) {
- if (compared) {
- continue;
- }
- result = false;
- break;
- }
- // Recursively compare arrays (susceptible to call stack limits).
- if (seen) {
- if (!arraySome(other, function(othValue, othIndex) {
- if (!seen.has(othIndex) &&
- (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
- return seen.add(othIndex);
- }
- })) {
- result = false;
- break;
- }
- } else if (!(
- arrValue === othValue ||
- equalFunc(arrValue, othValue, customizer, bitmask, stack)
- )) {
- result = false;
- break;
+ set hash(v) {
+ if (v === "") {
+ this._url.fragment = null;
+ return;
}
+
+ const input = v[0] === "#" ? v.substring(1) : v;
+ this._url.fragment = "";
+ usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
}
- stack['delete'](array);
- stack['delete'](other);
- return result;
+
+ toJSON() {
+ return this.href;
+ }
+};
+
+
+/***/ }),
+
+/***/ 3819:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+const punycode = __webpack_require__(3641);
+const regexes = __webpack_require__(3820);
+const mappingTable = __webpack_require__(3821);
+
+function containsNonASCII(str) {
+ return /[^\x00-\x7F]/.test(str);
}
-/**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
- switch (tag) {
- case dataViewTag:
- if ((object.byteLength != other.byteLength) ||
- (object.byteOffset != other.byteOffset)) {
- return false;
- }
- object = object.buffer;
- other = other.buffer;
+function findStatus(val, { useSTD3ASCIIRules }) {
+ let start = 0;
+ let end = mappingTable.length - 1;
- case arrayBufferTag:
- if ((object.byteLength != other.byteLength) ||
- !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
- return false;
+ while (start <= end) {
+ const mid = Math.floor((start + end) / 2);
+
+ const target = mappingTable[mid];
+ if (target[0][0] <= val && target[0][1] >= val) {
+ if (target[1].startsWith("disallowed_STD3_")) {
+ const newStatus = useSTD3ASCIIRules ? "disallowed" : target[1].slice(16);
+ return [newStatus, ...target.slice(2)];
}
- return true;
+ return target.slice(1);
+ } else if (target[0][0] > val) {
+ end = mid - 1;
+ } else {
+ start = mid + 1;
+ }
+ }
- case boolTag:
- case dateTag:
- case numberTag:
- // Coerce booleans to `1` or `0` and dates to milliseconds.
- // Invalid dates are coerced to `NaN`.
- return eq(+object, +other);
+ return null;
+}
- case errorTag:
- return object.name == other.name && object.message == other.message;
+function mapChars(domainName, { useSTD3ASCIIRules, processingOption }) {
+ let hasError = false;
+ let processed = "";
- case regexpTag:
- case stringTag:
- // Coerce regexes to strings and treat strings, primitives and objects,
- // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
- // for more details.
- return object == (other + '');
+ for (const ch of domainName) {
+ const [status, mapping] = findStatus(ch.codePointAt(0), { useSTD3ASCIIRules });
- case mapTag:
- var convert = mapToArray;
+ switch (status) {
+ case "disallowed":
+ hasError = true;
+ processed += ch;
+ break;
+ case "ignored":
+ break;
+ case "mapped":
+ processed += mapping;
+ break;
+ case "deviation":
+ if (processingOption === "transitional") {
+ processed += mapping;
+ } else {
+ processed += ch;
+ }
+ break;
+ case "valid":
+ processed += ch;
+ break;
+ }
+ }
- case setTag:
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
- convert || (convert = setToArray);
+ return {
+ string: processed,
+ error: hasError
+ };
+}
- if (object.size != other.size && !isPartial) {
- return false;
- }
- // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked) {
- return stacked == other;
- }
- bitmask |= UNORDERED_COMPARE_FLAG;
+function validateLabel(label, { checkHyphens, checkBidi, checkJoiners, processingOption, useSTD3ASCIIRules }) {
+ if (label.normalize("NFC") !== label) {
+ return false;
+ }
- // Recursively compare objects (susceptible to call stack limits).
- stack.set(object, other);
- var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
- stack['delete'](object);
- return result;
+ const codePoints = Array.from(label);
- case symbolTag:
- if (symbolValueOf) {
- return symbolValueOf.call(object) == symbolValueOf.call(other);
- }
+ if (checkHyphens) {
+ if ((codePoints[2] === "-" && codePoints[3] === "-") ||
+ (label.startsWith("-") || label.endsWith("-"))) {
+ return false;
+ }
}
- return false;
-}
-
-/**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
- objProps = keys(object),
- objLength = objProps.length,
- othProps = keys(other),
- othLength = othProps.length;
- if (objLength != othLength && !isPartial) {
+ if (label.includes(".") ||
+ (codePoints.length > 0 && regexes.combiningMarks.test(codePoints[0]))) {
return false;
}
- var index = objLength;
- while (index--) {
- var key = objProps[index];
- if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+
+ for (const ch of codePoints) {
+ const [status] = findStatus(ch.codePointAt(0), { useSTD3ASCIIRules });
+ if ((processingOption === "transitional" && status !== "valid") ||
+ (processingOption === "nontransitional" &&
+ status !== "valid" && status !== "deviation")) {
return false;
}
}
- // Assume cyclic values are equal.
- var stacked = stack.get(object);
- if (stacked && stack.get(other)) {
- return stacked == other;
+
+ // https://tools.ietf.org/html/rfc5892#appendix-A
+ if (checkJoiners) {
+ let last = 0;
+ for (const [i, ch] of codePoints.entries()) {
+ if (ch === "\u200C" || ch === "\u200D") {
+ if (i > 0) {
+ if (regexes.combiningClassVirama.test(codePoints[i - 1])) {
+ continue;
+ }
+ if (ch === "\u200C") {
+ // TODO: make this more efficient
+ const next = codePoints.indexOf("\u200C", i + 1);
+ const test = next < 0 ? codePoints.slice(last) : codePoints.slice(last, next);
+ if (regexes.validZWNJ.test(test.join(""))) {
+ last = i + 1;
+ continue;
+ }
+ }
+ }
+ return false;
+ }
+ }
}
- var result = true;
- stack.set(object, other);
- stack.set(other, object);
- var skipCtor = isPartial;
- while (++index < objLength) {
- key = objProps[index];
- var objValue = object[key],
- othValue = other[key];
+ // https://tools.ietf.org/html/rfc5893#section-2
+ if (checkBidi) {
+ let rtl;
- if (customizer) {
- var compared = isPartial
- ? customizer(othValue, objValue, key, other, object, stack)
- : customizer(objValue, othValue, key, object, other, stack);
- }
- // Recursively compare objects (susceptible to call stack limits).
- if (!(compared === undefined
- ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
- : compared
- )) {
- result = false;
- break;
+ // 1
+ if (regexes.bidiS1LTR.test(codePoints[0])) {
+ rtl = false;
+ } else if (regexes.bidiS1RTL.test(codePoints[0])) {
+ rtl = true;
+ } else {
+ return false;
}
- skipCtor || (skipCtor = key == 'constructor');
- }
- if (result && !skipCtor) {
- var objCtor = object.constructor,
- othCtor = other.constructor;
- // Non `Object` object instances with different constructors are not equal.
- if (objCtor != othCtor &&
- ('constructor' in object && 'constructor' in other) &&
- !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
- typeof othCtor == 'function' && othCtor instanceof othCtor)) {
- result = false;
+ if (rtl) {
+ // 2-4
+ if (!regexes.bidiS2.test(label) ||
+ !regexes.bidiS3.test(label) ||
+ (regexes.bidiS4EN.test(label) && regexes.bidiS4AN.test(label))) {
+ return false;
+ }
+ } else if (!regexes.bidiS5.test(label) ||
+ !regexes.bidiS6.test(label)) { // 5-6
+ return false;
}
}
- stack['delete'](object);
- stack['delete'](other);
- return result;
+
+ return true;
}
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key)
- ? data[typeof key == 'string' ? 'string' : 'hash']
- : data.map;
+function isBidiDomain(labels) {
+ const domain = labels.map(label => {
+ if (label.startsWith("xn--")) {
+ try {
+ return punycode.decode(label.substring(4));
+ } catch (err) {
+ return "";
+ }
+ }
+ return label;
+ }).join(".");
+ return regexes.bidiDomain.test(domain);
}
-/**
- * Gets the property names, values, and compare flags of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the match data of `object`.
- */
-function getMatchData(object) {
- var result = keys(object),
- length = result.length;
-
- while (length--) {
- var key = result[length],
- value = object[key];
-
- result[length] = [key, value, isStrictComparable(value)];
- }
- return result;
-}
+function processing(domainName, options) {
+ const { processingOption } = options;
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
-}
+ // 1. Map.
+ let { string, error } = mapChars(domainName, options);
-/**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-var getTag = baseGetTag;
+ // 2. Normalize.
+ string = string.normalize("NFC");
-// Fallback for data views, maps, sets, and weak maps in IE 11,
-// for data views in Edge < 14, and promises in Node.js.
-if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
- (Map && getTag(new Map) != mapTag) ||
- (Promise && getTag(Promise.resolve()) != promiseTag) ||
- (Set && getTag(new Set) != setTag) ||
- (WeakMap && getTag(new WeakMap) != weakMapTag)) {
- getTag = function(value) {
- var result = objectToString.call(value),
- Ctor = result == objectTag ? value.constructor : undefined,
- ctorString = Ctor ? toSource(Ctor) : undefined;
+ // 3. Break.
+ const labels = string.split(".");
+ const isBidi = isBidiDomain(labels);
- if (ctorString) {
- switch (ctorString) {
- case dataViewCtorString: return dataViewTag;
- case mapCtorString: return mapTag;
- case promiseCtorString: return promiseTag;
- case setCtorString: return setTag;
- case weakMapCtorString: return weakMapTag;
+ // 4. Convert/Validate.
+ for (const [i, origLabel] of labels.entries()) {
+ let label = origLabel;
+ let curProcessing = processingOption;
+ if (label.startsWith("xn--")) {
+ try {
+ label = punycode.decode(label.substring(4));
+ labels[i] = label;
+ } catch (err) {
+ error = true;
+ continue;
}
+ curProcessing = "nontransitional";
}
- return result;
+
+ // No need to validate if we already know there is an error.
+ if (error) {
+ continue;
+ }
+ const validation = validateLabel(label, Object.assign({}, options, {
+ processingOption: curProcessing,
+ checkBidi: options.checkBidi && isBidi
+ }));
+ if (!validation) {
+ error = true;
+ }
+ }
+
+ return {
+ string: labels.join("."),
+ error
};
}
-/**
- * Checks if `path` exists on `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @param {Function} hasFunc The function to check properties.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- */
-function hasPath(object, path, hasFunc) {
- path = isKey(path, object) ? [path] : castPath(path);
+function toASCII(domainName, {
+ checkHyphens = false,
+ checkBidi = false,
+ checkJoiners = false,
+ useSTD3ASCIIRules = false,
+ processingOption = "nontransitional",
+ verifyDNSLength = false
+} = {}) {
+ if (processingOption !== "transitional" && processingOption !== "nontransitional") {
+ throw new RangeError("processingOption must be either transitional or nontransitional");
+ }
- var result,
- index = -1,
- length = path.length;
+ const result = processing(domainName, {
+ processingOption,
+ checkHyphens,
+ checkBidi,
+ checkJoiners,
+ useSTD3ASCIIRules
+ });
+ let labels = result.string.split(".");
+ labels = labels.map(l => {
+ if (containsNonASCII(l)) {
+ try {
+ return "xn--" + punycode.encode(l);
+ } catch (e) {
+ result.error = true;
+ }
+ }
+ return l;
+ });
- while (++index < length) {
- var key = toKey(path[index]);
- if (!(result = object != null && hasFunc(object, key))) {
- break;
+ if (verifyDNSLength) {
+ const total = labels.join(".").length;
+ if (total > 253 || total === 0) {
+ result.error = true;
+ }
+
+ for (let i = 0; i < labels.length; ++i) {
+ if (labels[i].length > 63 || labels[i].length === 0) {
+ result.error = true;
+ break;
+ }
}
- object = object[key];
}
- if (result) {
- return result;
+
+ if (result.error) {
+ return null;
}
- var length = object ? object.length : 0;
- return !!length && isLength(length) && isIndex(key, length) &&
- (isArray(object) || isArguments(object));
+ return labels.join(".");
}
-/**
- * Checks if `value` is a flattenable `arguments` object or array.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
- */
-function isFlattenable(value) {
- return isArray(value) || isArguments(value) ||
- !!(spreadableSymbol && value && value[spreadableSymbol]);
-}
+function toUnicode(domainName, {
+ checkHyphens = false,
+ checkBidi = false,
+ checkJoiners = false,
+ useSTD3ASCIIRules = false
+} = {}) {
+ const result = processing(domainName, {
+ processingOption: "nontransitional",
+ checkHyphens,
+ checkBidi,
+ checkJoiners,
+ useSTD3ASCIIRules
+ });
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
- length = length == null ? MAX_SAFE_INTEGER : length;
- return !!length &&
- (typeof value == 'number' || reIsUint.test(value)) &&
- (value > -1 && value % 1 == 0 && value < length);
+ return {
+ domain: result.string,
+ error: result.error
+ };
}
-/**
- * Checks if the given arguments are from an iteratee call.
- *
- * @private
- * @param {*} value The potential iteratee value argument.
- * @param {*} index The potential iteratee index or key argument.
- * @param {*} object The potential iteratee object argument.
- * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
- * else `false`.
- */
-function isIterateeCall(value, index, object) {
- if (!isObject(object)) {
- return false;
- }
- var type = typeof index;
- if (type == 'number'
- ? (isArrayLike(object) && isIndex(index, object.length))
- : (type == 'string' && index in object)
- ) {
- return eq(object[index], value);
- }
- return false;
-}
+module.exports = {
+ toASCII,
+ toUnicode
+};
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
- if (isArray(value)) {
- return false;
- }
- var type = typeof value;
- if (type == 'number' || type == 'symbol' || type == 'boolean' ||
- value == null || isSymbol(value)) {
- return true;
- }
- return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
- (object != null && value in Object(object));
-}
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
- var type = typeof value;
- return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
- ? (value !== '__proto__')
- : (value === null);
-}
+/***/ }),
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
- return !!maskSrcKey && (maskSrcKey in func);
-}
+/***/ 3820:
+/***/ (function(module, exports, __webpack_require__) {
-/**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
-function isPrototype(value) {
- var Ctor = value && value.constructor,
- proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+"use strict";
- return value === proto;
-}
-/**
- * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` if suitable for strict
- * equality comparisons, else `false`.
- */
-function isStrictComparable(value) {
- return value === value && !isObject(value);
-}
+const combiningMarks = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11000}-\u{11002}\u{11038}-\u{11046}\u{1107F}-\u{11082}\u{110B0}-\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{11134}\u{11173}\u{11180}-\u{11182}\u{111B3}-\u{111C0}\u{111CA}-\u{111CC}\u{1122C}-\u{11237}\u{1123E}\u{112DF}-\u{112EA}\u{11300}-\u{11303}\u{1133C}\u{1133E}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11357}\u{11362}\u{11363}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11435}-\u{11446}\u{114B0}-\u{114C3}\u{115AF}-\u{115B5}\u{115B8}-\u{115C0}\u{115DC}\u{115DD}\u{11630}-\u{11640}\u{116AB}-\u{116B7}\u{1171D}-\u{1172B}\u{11A01}-\u{11A0A}\u{11A33}-\u{11A39}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A5B}\u{11A8A}-\u{11A99}\u{11C2F}-\u{11C36}\u{11C38}-\u{11C3F}\u{11C92}-\u{11CA7}\u{11CA9}-\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F51}-\u{16F7E}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D165}-\u{1D169}\u{1D16D}-\u{1D172}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]/u;
+const combiningClassVirama = /[\u094D\u09CD\u0A4D\u0ACD\u0B4D\u0BCD\u0C4D\u0CCD\u0D3B\u0D3C\u0D4D\u0DCA\u0E3A\u0F84\u1039\u103A\u1714\u1734\u17D2\u1A60\u1B44\u1BAA\u1BAB\u1BF2\u1BF3\u2D7F\uA806\uA8C4\uA953\uA9C0\uAAF6\uABED\u{10A3F}\u{11046}\u{1107F}\u{110B9}\u{11133}\u{11134}\u{111C0}\u{11235}\u{112EA}\u{1134D}\u{11442}\u{114C2}\u{115BF}\u{1163F}\u{116B6}\u{1172B}\u{11A34}\u{11A47}\u{11A99}\u{11C3F}\u{11D44}\u{11D45}]/u;
+const validZWNJ = /[\u0620\u0626\u0628\u062A-\u062E\u0633-\u063F\u0641-\u0647\u0649\u064A\u066E\u066F\u0678-\u0687\u069A-\u06BF\u06C1\u06C2\u06CC\u06CE\u06D0\u06D1\u06FA-\u06FC\u06FF\u0712-\u0714\u071A-\u071D\u071F-\u0727\u0729\u072B\u072D\u072E\u074E-\u0758\u075C-\u076A\u076D-\u0770\u0772\u0775-\u0777\u077A-\u077F\u07CA-\u07EA\u0841-\u0845\u0848\u084A-\u0853\u0855\u0860\u0862-\u0865\u0868\u08A0-\u08A9\u08AF\u08B0\u08B3\u08B4\u08B6-\u08B8\u08BA-\u08BD\u1807\u1820-\u1877\u1887-\u18A8\u18AA\uA840-\uA872\u{10AC0}-\u{10AC4}\u{10ACD}\u{10AD3}-\u{10ADC}\u{10ADE}-\u{10AE0}\u{10AEB}-\u{10AEE}\u{10B80}\u{10B82}\u{10B86}-\u{10B88}\u{10B8A}\u{10B8B}\u{10B8D}\u{10B90}\u{10BAD}\u{10BAE}\u{1E900}-\u{1E943}][\xAD\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u061C\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200B\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFEFF\uFFF9-\uFFFB\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{110BD}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C3F}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*\u200C[\xAD\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u061C\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200B\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFEFF\uFFF9-\uFFFB\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{110BD}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C3F}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*[\u0620\u0622-\u063F\u0641-\u064A\u066E\u066F\u0671-\u0673\u0675-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u077F\u07CA-\u07EA\u0840-\u0855\u0860\u0862-\u0865\u0867-\u086A\u08A0-\u08AC\u08AE-\u08B4\u08B6-\u08BD\u1807\u1820-\u1877\u1887-\u18A8\u18AA\uA840-\uA871\u{10AC0}-\u{10AC5}\u{10AC7}\u{10AC9}\u{10ACA}\u{10ACE}-\u{10AD6}\u{10AD8}-\u{10AE1}\u{10AE4}\u{10AEB}-\u{10AEF}\u{10B80}-\u{10B91}\u{10BA9}-\u{10BAE}\u{1E900}-\u{1E943}]/u;
+const bidiDomain = /[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0600-\u0605\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u0660-\u0669\u066B-\u066F\u0671-\u06D5\u06DD\u06E5\u06E6\u06EE\u06EF\u06FA-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08E2\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}]/u;
+const bidiS1LTR = /[A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02BB-\u02C1\u02D0\u02D1\u02E0-\u02E4\u02EE\u0370-\u0373\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0482\u048A-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u0903-\u0939\u093B\u093D-\u0940\u0949-\u094C\u094E-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C0\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09FA\u09FC\u09FD\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A40\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC0\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0\u0AE1\u0AE6-\u0AF0\u0AF9\u0B02\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0BE6-\u0BF2\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C41-\u0C44\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C7F\u0C80\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D4F\u0D54-\u0D61\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E4F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F17\u0F1A-\u0F34\u0F36\u0F38\u0F3E-\u0F47\u0F49-\u0F6C\u0F7F\u0F85\u0F88-\u0F8C\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE-\u0FDA\u1000-\u102C\u1031\u1038\u103B\u103C\u103F-\u1057\u105A-\u105D\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108C\u108E-\u109C\u109E-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1360-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u167F\u1681-\u169A\u16A0-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17B6\u17BE-\u17C5\u17C7\u17C8\u17D4-\u17DA\u17DC\u17E0-\u17E9\u1810-\u1819\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A19\u1A1A\u1A1E-\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1A80-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1B04-\u1B33\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B4B\u1B50-\u1B6A\u1B74-\u1B7C\u1B82-\u1BA1\u1BA6\u1BA7\u1BAA\u1BAE-\u1BE5\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1BFC-\u1C2B\u1C34\u1C35\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200E\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u214F\u2160-\u2188\u2336-\u237A\u2395\u249C-\u24E9\u26AC\u2800-\u28FF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u302E\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31F0-\u321C\u3220-\u324F\u3260-\u327B\u327F-\u32B0\u32C0-\u32CB\u32D0-\u32FE\u3300-\u3376\u337B-\u33DD\u33E0-\u33FE\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA60C\uA610-\uA62B\uA640-\uA66E\uA680-\uA69D\uA6A0-\uA6EF\uA6F2-\uA6F7\uA722-\uA787\uA789-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA824\uA827\uA830-\uA837\uA840-\uA873\uA880-\uA8C3\uA8CE-\uA8D9\uA8F2-\uA8FD\uA900-\uA925\uA92E-\uA946\uA952\uA953\uA95F-\uA97C\uA983-\uA9B2\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA2F\uAA30\uAA33\uAA34\uAA40-\uAA42\uAA44-\uAA4B\uAA4D\uAA50-\uAA59\uAA5C-\uAA7B\uAA7D-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAAEB\uAAEE-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABE4\uABE6\uABE7\uABE9-\uABEC\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1013F}\u{1018D}\u{1018E}\u{101D0}-\u{101FC}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{11000}\u{11002}-\u{11037}\u{11047}-\u{1104D}\u{11066}-\u{1106F}\u{11082}-\u{110B2}\u{110B7}\u{110B8}\u{110BB}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11103}-\u{11126}\u{1112C}\u{11136}-\u{11143}\u{11150}-\u{11172}\u{11174}-\u{11176}\u{11182}-\u{111B5}\u{111BF}-\u{111C9}\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1122E}\u{11232}\u{11233}\u{11235}\u{11238}-\u{1123D}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112DE}\u{112E0}-\u{112E2}\u{112F0}-\u{112F9}\u{11302}\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}-\u{1133F}\u{11341}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11400}-\u{11437}\u{11440}\u{11441}\u{11445}\u{11447}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114B2}\u{114B9}\u{114BB}-\u{114BE}\u{114C1}\u{114C4}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B1}\u{115B8}-\u{115BB}\u{115BE}\u{115C1}-\u{115DB}\u{11600}-\u{11632}\u{1163B}\u{1163C}\u{1163E}\u{11641}-\u{11644}\u{11650}-\u{11659}\u{11680}-\u{116AA}\u{116AC}\u{116AE}\u{116AF}\u{116B6}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{11720}\u{11721}\u{11726}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}\u{11A07}\u{11A08}\u{11A0B}-\u{11A32}\u{11A39}\u{11A3A}\u{11A3F}-\u{11A46}\u{11A50}\u{11A57}\u{11A58}\u{11A5C}-\u{11A83}\u{11A86}-\u{11A89}\u{11A97}\u{11A9A}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2F}\u{11C3E}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11CA9}\u{11CB1}\u{11CB4}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF5}\u{16B00}-\u{16B2F}\u{16B37}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}\u{1BC9F}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D166}\u{1D16A}-\u{1D172}\u{1D183}\u{1D184}\u{1D18C}-\u{1D1A9}\u{1D1AE}-\u{1D1E8}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6DA}\u{1D6DC}-\u{1D714}\u{1D716}-\u{1D74E}\u{1D750}-\u{1D788}\u{1D78A}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1D800}-\u{1D9FF}\u{1DA37}-\u{1DA3A}\u{1DA6D}-\u{1DA74}\u{1DA76}-\u{1DA83}\u{1DA85}-\u{1DA8B}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F169}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]/u;
+const bidiS1RTL = /[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}]/u;
+const bidiS2 = /^[\0-\x08\x0E-\x1B!-@\[-`\{-\x84\x86-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02B9\u02BA\u02C2-\u02CF\u02D2-\u02DF\u02E5-\u02ED\u02EF-\u036F\u0374\u0375\u037E\u0384\u0385\u0387\u03F6\u0483-\u0489\u058A\u058D-\u058F\u0591-\u05C7\u05D0-\u05EA\u05F0-\u05F4\u0600-\u061C\u061E-\u070D\u070F-\u074A\u074D-\u07B1\u07C0-\u07FA\u0800-\u082D\u0830-\u083E\u0840-\u085B\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09F2\u09F3\u09FB\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AF1\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0BF3-\u0BFA\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C78-\u0C7E\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E3F\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39-\u0F3D\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1390-\u1399\u1400\u169B\u169C\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DB\u17DD\u17F0-\u17F9\u1800-\u180E\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1940\u1944\u1945\u19DE-\u19FF\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u200B-\u200D\u200F-\u2027\u202F-\u205E\u2060-\u2064\u206A-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BF\u20D0-\u20F0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u2150-\u215F\u2189-\u218B\u2190-\u2335\u237B-\u2394\u2396-\u2426\u2440-\u244A\u2460-\u249B\u24EA-\u26AB\u26AD-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD2\u2BEC-\u2BEF\u2CE5-\u2CEA\u2CEF-\u2CF1\u2CF9-\u2CFF\u2D7F\u2DE0-\u2E49\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u3004\u3008-\u3020\u302A-\u302D\u3030\u3036\u3037\u303D-\u303F\u3099-\u309C\u30A0\u30FB\u31C0-\u31E3\u321D\u321E\u3250-\u325F\u327C-\u327E\u32B1-\u32BF\u32CC-\u32CF\u3377-\u337A\u33DE\u33DF\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA60D-\uA60F\uA66F-\uA67F\uA69E\uA69F\uA6F0\uA6F1\uA700-\uA721\uA788\uA802\uA806\uA80B\uA825\uA826\uA828-\uA82B\uA838\uA839\uA874-\uA877\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3F\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE00-\uFE19\uFE20-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFE70-\uFE74\uFE76-\uFEFC\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD\u{10101}\u{10140}-\u{1018C}\u{10190}-\u{1019B}\u{101A0}\u{101FD}\u{102E0}-\u{102FB}\u{10376}-\u{1037A}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{1091F}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A38}-\u{10A3A}\u{10A3F}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE6}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B39}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{11001}\u{11038}-\u{11046}\u{11052}-\u{11065}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{11660}-\u{1166C}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1BCA0}-\u{1BCA3}\u{1D167}-\u{1D169}\u{1D173}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D200}-\u{1D245}\u{1D300}-\u{1D356}\u{1D6DB}\u{1D715}\u{1D74F}\u{1D789}\u{1D7C3}\u{1D7CE}-\u{1D7FF}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8D6}\u{1E900}-\u{1E94A}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1EEF0}\u{1EEF1}\u{1F000}-\u{1F02B}\u{1F030}-\u{1F093}\u{1F0A0}-\u{1F0AE}\u{1F0B1}-\u{1F0BF}\u{1F0C1}-\u{1F0CF}\u{1F0D1}-\u{1F0F5}\u{1F100}-\u{1F10C}\u{1F16A}\u{1F16B}\u{1F260}-\u{1F265}\u{1F300}-\u{1F6D4}\u{1F6E0}-\u{1F6EC}\u{1F6F0}-\u{1F6F8}\u{1F700}-\u{1F773}\u{1F780}-\u{1F7D4}\u{1F800}-\u{1F80B}\u{1F810}-\u{1F847}\u{1F850}-\u{1F859}\u{1F860}-\u{1F887}\u{1F890}-\u{1F8AD}\u{1F900}-\u{1F90B}\u{1F910}-\u{1F93E}\u{1F940}-\u{1F94C}\u{1F950}-\u{1F96B}\u{1F980}-\u{1F997}\u{1F9C0}\u{1F9D0}-\u{1F9E6}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]*$/u;
+const bidiS3 = /[0-9\xB2\xB3\xB9\u05BE\u05C0\u05C3\u05C6\u05D0-\u05EA\u05F0-\u05F4\u0600-\u0605\u0608\u060B\u060D\u061B\u061C\u061E-\u064A\u0660-\u0669\u066B-\u066F\u0671-\u06D5\u06DD\u06E5\u06E6\u06EE-\u070D\u070F\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0830-\u083E\u0840-\u0858\u085E\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08E2\u200F\u2070\u2074-\u2079\u2080-\u2089\u2488-\u249B\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFC\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\u{102E1}-\u{102FB}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10857}-\u{1089E}\u{108A7}-\u{108AF}\u{108E0}-\u{108F2}\u{108F4}\u{108F5}\u{108FB}-\u{1091B}\u{10920}-\u{10939}\u{1093F}\u{10980}-\u{109B7}\u{109BC}-\u{109CF}\u{109D2}-\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A33}\u{10A40}-\u{10A47}\u{10A50}-\u{10A58}\u{10A60}-\u{10A9F}\u{10AC0}-\u{10AE4}\u{10AEB}-\u{10AF6}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B58}-\u{10B72}\u{10B78}-\u{10B91}\u{10B99}-\u{10B9C}\u{10BA9}-\u{10BAF}\u{10C00}-\u{10C48}\u{10C80}-\u{10CB2}\u{10CC0}-\u{10CF2}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{1D7CE}-\u{1D7FF}\u{1E800}-\u{1E8C4}\u{1E8C7}-\u{1E8CF}\u{1E900}-\u{1E943}\u{1E950}-\u{1E959}\u{1E95E}\u{1E95F}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{1F100}-\u{1F10A}][\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D167}-\u{1D169}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]*$/u;
+const bidiS4EN = /[0-9\xB2\xB3\xB9\u06F0-\u06F9\u2070\u2074-\u2079\u2080-\u2089\u2488-\u249B\uFF10-\uFF19\u{102E1}-\u{102FB}\u{1D7CE}-\u{1D7FF}\u{1F100}-\u{1F10A}]/u;
+const bidiS4AN = /[\u0600-\u0605\u0660-\u0669\u066B\u066C\u06DD\u08E2\u{10E60}-\u{10E7E}]/u;
+const bidiS5 = /^[\0-\x08\x0E-\x1B!-\x84\x86-\u0377\u037A-\u037F\u0384-\u038A\u038C\u038E-\u03A1\u03A3-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u058A\u058D-\u058F\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0606\u0607\u0609\u060A\u060C\u060E-\u061A\u064B-\u065F\u066A\u0670\u06D6-\u06DC\u06DE-\u06E4\u06E7-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07F6-\u07F9\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FD\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E3A\u0E3F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FDA\u1000-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u13A0-\u13F5\u13F8-\u13FD\u1400-\u167F\u1681-\u169C\u16A0-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1736\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u1800-\u180E\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE-\u1A1B\u1A1E-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1AB0-\u1ABE\u1B00-\u1B4B\u1B50-\u1B7C\u1B80-\u1BF3\u1BFC-\u1C37\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD0-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u200B-\u200E\u2010-\u2027\u202F-\u205E\u2060-\u2064\u206A-\u2071\u2074-\u208E\u2090-\u209C\u20A0-\u20BF\u20D0-\u20F0\u2100-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u2B73\u2B76-\u2B95\u2B98-\u2BB9\u2BBD-\u2BC8\u2BCA-\u2BD2\u2BEC-\u2BEF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CF3\u2CF9-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2E49\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303F\u3041-\u3096\u3099-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u32FE\u3300-\u4DB5\u4DC0-\u9FEA\uA000-\uA48C\uA490-\uA4C6\uA4D0-\uA62B\uA640-\uA6F7\uA700-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA82B\uA830-\uA839\uA840-\uA877\uA880-\uA8C5\uA8CE-\uA8D9\uA8E0-\uA8FD\uA900-\uA953\uA95F-\uA97C\uA980-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAAC2\uAADB-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1E\uFB29\uFD3E\uFD3F\uFDFD\uFE00-\uFE19\uFE20-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}-\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1018E}\u{10190}-\u{1019B}\u{101A0}\u{101D0}-\u{101FD}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{102E0}-\u{102FB}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{1037A}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{1091F}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{10B39}-\u{10B3F}\u{11000}-\u{1104D}\u{11052}-\u{1106F}\u{1107F}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11100}-\u{11134}\u{11136}-\u{11143}\u{11150}-\u{11176}\u{11180}-\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1123E}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112EA}\u{112F0}-\u{112F9}\u{11300}-\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133C}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11400}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B5}\u{115B8}-\u{115DD}\u{11600}-\u{11644}\u{11650}-\u{11659}\u{11660}-\u{1166C}\u{11680}-\u{116B7}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{1171D}-\u{1172B}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}-\u{11A47}\u{11A50}-\u{11A83}\u{11A86}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C36}\u{11C38}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11C92}-\u{11CA7}\u{11CA9}-\u{11CB6}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D47}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF0}-\u{16AF5}\u{16B00}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F8F}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}-\u{1BCA3}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D1E8}\u{1D200}-\u{1D245}\u{1D300}-\u{1D356}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D7CB}\u{1D7CE}-\u{1DA8B}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{1EEF0}\u{1EEF1}\u{1F000}-\u{1F02B}\u{1F030}-\u{1F093}\u{1F0A0}-\u{1F0AE}\u{1F0B1}-\u{1F0BF}\u{1F0C1}-\u{1F0CF}\u{1F0D1}-\u{1F0F5}\u{1F100}-\u{1F10C}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F16B}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{1F260}-\u{1F265}\u{1F300}-\u{1F6D4}\u{1F6E0}-\u{1F6EC}\u{1F6F0}-\u{1F6F8}\u{1F700}-\u{1F773}\u{1F780}-\u{1F7D4}\u{1F800}-\u{1F80B}\u{1F810}-\u{1F847}\u{1F850}-\u{1F859}\u{1F860}-\u{1F887}\u{1F890}-\u{1F8AD}\u{1F900}-\u{1F90B}\u{1F910}-\u{1F93E}\u{1F940}-\u{1F94C}\u{1F950}-\u{1F96B}\u{1F980}-\u{1F997}\u{1F9C0}\u{1F9D0}-\u{1F9E6}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{E0001}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]*$/u;
+const bidiS6 = /[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02BB-\u02C1\u02D0\u02D1\u02E0-\u02E4\u02EE\u0370-\u0373\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0482\u048A-\u052F\u0531-\u0556\u0559-\u055F\u0561-\u0587\u0589\u06F0-\u06F9\u0903-\u0939\u093B\u093D-\u0940\u0949-\u094C\u094E-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C0\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09FA\u09FC\u09FD\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A40\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC0\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0\u0AE1\u0AE6-\u0AF0\u0AF9\u0B02\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0BE6-\u0BF2\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C41-\u0C44\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C7F\u0C80\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D4F\u0D54-\u0D61\u0D66-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E4F-\u0E5B\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00-\u0F17\u0F1A-\u0F34\u0F36\u0F38\u0F3E-\u0F47\u0F49-\u0F6C\u0F7F\u0F85\u0F88-\u0F8C\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE-\u0FDA\u1000-\u102C\u1031\u1038\u103B\u103C\u103F-\u1057\u105A-\u105D\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108C\u108E-\u109C\u109E-\u10C5\u10C7\u10CD\u10D0-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1360-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u167F\u1681-\u169A\u16A0-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17B6\u17BE-\u17C5\u17C7\u17C8\u17D4-\u17DA\u17DC\u17E0-\u17E9\u1810-\u1819\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A19\u1A1A\u1A1E-\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1A80-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD\u1B04-\u1B33\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B4B\u1B50-\u1B6A\u1B74-\u1B7C\u1B82-\u1BA1\u1BA6\u1BA7\u1BAA\u1BAE-\u1BE5\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1BFC-\u1C2B\u1C34\u1C35\u1C3B-\u1C49\u1C4D-\u1C88\u1CC0-\u1CC7\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200E\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u214F\u2160-\u2188\u2336-\u237A\u2395\u2488-\u24E9\u26AC\u2800-\u28FF\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D70\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u302E\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u3190-\u31BA\u31F0-\u321C\u3220-\u324F\u3260-\u327B\u327F-\u32B0\u32C0-\u32CB\u32D0-\u32FE\u3300-\u3376\u337B-\u33DD\u33E0-\u33FE\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA60C\uA610-\uA62B\uA640-\uA66E\uA680-\uA69D\uA6A0-\uA6EF\uA6F2-\uA6F7\uA722-\uA787\uA789-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA824\uA827\uA830-\uA837\uA840-\uA873\uA880-\uA8C3\uA8CE-\uA8D9\uA8F2-\uA8FD\uA900-\uA925\uA92E-\uA946\uA952\uA953\uA95F-\uA97C\uA983-\uA9B2\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9CD\uA9CF-\uA9D9\uA9DE-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA2F\uAA30\uAA33\uAA34\uAA40-\uAA42\uAA44-\uAA4B\uAA4D\uAA50-\uAA59\uAA5C-\uAA7B\uAA7D-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAAEB\uAAEE-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB65\uAB70-\uABE4\uABE6\uABE7\uABE9-\uABEC\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uD800-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10100}\u{10102}\u{10107}-\u{10133}\u{10137}-\u{1013F}\u{1018D}\u{1018E}\u{101D0}-\u{101FC}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{102E1}-\u{102FB}\u{10300}-\u{10323}\u{1032D}-\u{1034A}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{1039F}-\u{103C3}\u{103C8}-\u{103D5}\u{10400}-\u{1049D}\u{104A0}-\u{104A9}\u{104B0}-\u{104D3}\u{104D8}-\u{104FB}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{1056F}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{11000}\u{11002}-\u{11037}\u{11047}-\u{1104D}\u{11066}-\u{1106F}\u{11082}-\u{110B2}\u{110B7}\u{110B8}\u{110BB}-\u{110C1}\u{110D0}-\u{110E8}\u{110F0}-\u{110F9}\u{11103}-\u{11126}\u{1112C}\u{11136}-\u{11143}\u{11150}-\u{11172}\u{11174}-\u{11176}\u{11182}-\u{111B5}\u{111BF}-\u{111C9}\u{111CD}\u{111D0}-\u{111DF}\u{111E1}-\u{111F4}\u{11200}-\u{11211}\u{11213}-\u{1122E}\u{11232}\u{11233}\u{11235}\u{11238}-\u{1123D}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A9}\u{112B0}-\u{112DE}\u{112E0}-\u{112E2}\u{112F0}-\u{112F9}\u{11302}\u{11303}\u{11305}-\u{1130C}\u{1130F}\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}\u{11333}\u{11335}-\u{11339}\u{1133D}-\u{1133F}\u{11341}-\u{11344}\u{11347}\u{11348}\u{1134B}-\u{1134D}\u{11350}\u{11357}\u{1135D}-\u{11363}\u{11400}-\u{11437}\u{11440}\u{11441}\u{11445}\u{11447}-\u{11459}\u{1145B}\u{1145D}\u{11480}-\u{114B2}\u{114B9}\u{114BB}-\u{114BE}\u{114C1}\u{114C4}-\u{114C7}\u{114D0}-\u{114D9}\u{11580}-\u{115B1}\u{115B8}-\u{115BB}\u{115BE}\u{115C1}-\u{115DB}\u{11600}-\u{11632}\u{1163B}\u{1163C}\u{1163E}\u{11641}-\u{11644}\u{11650}-\u{11659}\u{11680}-\u{116AA}\u{116AC}\u{116AE}\u{116AF}\u{116B6}\u{116C0}-\u{116C9}\u{11700}-\u{11719}\u{11720}\u{11721}\u{11726}\u{11730}-\u{1173F}\u{118A0}-\u{118F2}\u{118FF}\u{11A00}\u{11A07}\u{11A08}\u{11A0B}-\u{11A32}\u{11A39}\u{11A3A}\u{11A3F}-\u{11A46}\u{11A50}\u{11A57}\u{11A58}\u{11A5C}-\u{11A83}\u{11A86}-\u{11A89}\u{11A97}\u{11A9A}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2F}\u{11C3E}-\u{11C45}\u{11C50}-\u{11C6C}\u{11C70}-\u{11C8F}\u{11CA9}\u{11CB1}\u{11CB4}\u{11D00}-\u{11D06}\u{11D08}\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D50}-\u{11D59}\u{12000}-\u{12399}\u{12400}-\u{1246E}\u{12470}-\u{12474}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16A60}-\u{16A69}\u{16A6E}\u{16A6F}\u{16AD0}-\u{16AED}\u{16AF5}\u{16B00}-\u{16B2F}\u{16B37}-\u{16B45}\u{16B50}-\u{16B59}\u{16B5B}-\u{16B61}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F44}\u{16F50}-\u{16F7E}\u{16F93}-\u{16F9F}\u{16FE0}\u{16FE1}\u{17000}-\u{187EC}\u{18800}-\u{18AF2}\u{1B000}-\u{1B11E}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1BC9C}\u{1BC9F}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D166}\u{1D16A}-\u{1D172}\u{1D183}\u{1D184}\u{1D18C}-\u{1D1A9}\u{1D1AE}-\u{1D1E8}\u{1D360}-\u{1D371}\u{1D400}-\u{1D454}\u{1D456}-\u{1D49C}\u{1D49E}\u{1D49F}\u{1D4A2}\u{1D4A5}\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D51E}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D552}-\u{1D6A5}\u{1D6A8}-\u{1D6DA}\u{1D6DC}-\u{1D714}\u{1D716}-\u{1D74E}\u{1D750}-\u{1D788}\u{1D78A}-\u{1D7C2}\u{1D7C4}-\u{1D7CB}\u{1D7CE}-\u{1D9FF}\u{1DA37}-\u{1DA3A}\u{1DA6D}-\u{1DA74}\u{1DA76}-\u{1DA83}\u{1DA85}-\u{1DA8B}\u{1F100}-\u{1F10A}\u{1F110}-\u{1F12E}\u{1F130}-\u{1F169}\u{1F170}-\u{1F1AC}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}\u{1F251}\u{20000}-\u{2A6D6}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{2F800}-\u{2FA1D}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}][\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}\u{10AE6}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}\u{11181}\u{111B6}-\u{111BE}\u{111CA}-\u{111CC}\u{1122F}-\u{11231}\u{11234}\u{11236}\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}\u{11301}\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}\u{114C0}\u{114C2}\u{114C3}\u{115B2}-\u{115B5}\u{115BC}\u{115BD}\u{115BF}\u{115C0}\u{115DC}\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{11A01}-\u{11A06}\u{11A09}\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}\u{11CB3}\u{11CB5}\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F8F}-\u{16F92}\u{1BC9D}\u{1BC9E}\u{1D167}-\u{1D169}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}\u{1E024}\u{1E026}-\u{1E02A}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}]*$/u;
-/**
- * A specialized version of `matchesProperty` for source values suitable
- * for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function matchesStrictComparable(key, srcValue) {
- return function(object) {
- if (object == null) {
- return false;
- }
- return object[key] === srcValue &&
- (srcValue !== undefined || (key in Object(object)));
- };
-}
+module.exports = {
+ combiningMarks,
+ combiningClassVirama,
+ validZWNJ,
+ bidiDomain,
+ bidiS1LTR,
+ bidiS1RTL,
+ bidiS2,
+ bidiS3,
+ bidiS4EN,
+ bidiS4AN,
+ bidiS5,
+ bidiS6
+};
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = memoize(function(string) {
- string = toString(string);
- var result = [];
- if (reLeadingDot.test(string)) {
- result.push('');
- }
- string.replace(rePropName, function(match, number, quote, string) {
- result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
- });
- return result;
-});
+/***/ }),
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
- if (typeof value == 'string' || isSymbol(value)) {
- return value;
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
+/***/ 3821:
+/***/ (function(module, exports) {
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to process.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return (func + '');
- } catch (e) {}
+module.exports = [[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped","a"],[[66,66],"mapped","b"],[[67,67],"mapped","c"],[[68,68],"mapped","d"],[[69,69],"mapped","e"],[[70,70],"mapped","f"],[[71,71],"mapped","g"],[[72,72],"mapped","h"],[[73,73],"mapped","i"],[[74,74],"mapped","j"],[[75,75],"mapped","k"],[[76,76],"mapped","l"],[[77,77],"mapped","m"],[[78,78],"mapped","n"],[[79,79],"mapped","o"],[[80,80],"mapped","p"],[[81,81],"mapped","q"],[[82,82],"mapped","r"],[[83,83],"mapped","s"],[[84,84],"mapped","t"],[[85,85],"mapped","u"],[[86,86],"mapped","v"],[[87,87],"mapped","w"],[[88,88],"mapped","x"],[[89,89],"mapped","y"],[[90,90],"mapped","z"],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped"," "],[[161,167],"valid","","NV8"],[[168,168],"disallowed_STD3_mapped"," ̈"],[[169,169],"valid","","NV8"],[[170,170],"mapped","a"],[[171,172],"valid","","NV8"],[[173,173],"ignored"],[[174,174],"valid","","NV8"],[[175,175],"disallowed_STD3_mapped"," ̄"],[[176,177],"valid","","NV8"],[[178,178],"mapped","2"],[[179,179],"mapped","3"],[[180,180],"disallowed_STD3_mapped"," ́"],[[181,181],"mapped","μ"],[[182,182],"valid","","NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped"," ̧"],[[185,185],"mapped","1"],[[186,186],"mapped","o"],[[187,187],"valid","","NV8"],[[188,188],"mapped","1⁄4"],[[189,189],"mapped","1⁄2"],[[190,190],"mapped","3⁄4"],[[191,191],"valid","","NV8"],[[192,192],"mapped","à"],[[193,193],"mapped","á"],[[194,194],"mapped","â"],[[195,195],"mapped","ã"],[[196,196],"mapped","ä"],[[197,197],"mapped","å"],[[198,198],"mapped","æ"],[[199,199],"mapped","ç"],[[200,200],"mapped","è"],[[201,201],"mapped","é"],[[202,202],"mapped","ê"],[[203,203],"mapped","ë"],[[204,204],"mapped","ì"],[[205,205],"mapped","í"],[[206,206],"mapped","î"],[[207,207],"mapped","ï"],[[208,208],"mapped","ð"],[[209,209],"mapped","ñ"],[[210,210],"mapped","ò"],[[211,211],"mapped","ó"],[[212,212],"mapped","ô"],[[213,213],"mapped","õ"],[[214,214],"mapped","ö"],[[215,215],"valid","","NV8"],[[216,216],"mapped","ø"],[[217,217],"mapped","ù"],[[218,218],"mapped","ú"],[[219,219],"mapped","û"],[[220,220],"mapped","ü"],[[221,221],"mapped","ý"],[[222,222],"mapped","þ"],[[223,223],"deviation","ss"],[[224,246],"valid"],[[247,247],"valid","","NV8"],[[248,255],"valid"],[[256,256],"mapped","ā"],[[257,257],"valid"],[[258,258],"mapped","ă"],[[259,259],"valid"],[[260,260],"mapped","ą"],[[261,261],"valid"],[[262,262],"mapped","ć"],[[263,263],"valid"],[[264,264],"mapped","ĉ"],[[265,265],"valid"],[[266,266],"mapped","ċ"],[[267,267],"valid"],[[268,268],"mapped","č"],[[269,269],"valid"],[[270,270],"mapped","ď"],[[271,271],"valid"],[[272,272],"mapped","đ"],[[273,273],"valid"],[[274,274],"mapped","ē"],[[275,275],"valid"],[[276,276],"mapped","ĕ"],[[277,277],"valid"],[[278,278],"mapped","ė"],[[279,279],"valid"],[[280,280],"mapped","ę"],[[281,281],"valid"],[[282,282],"mapped","ě"],[[283,283],"valid"],[[284,284],"mapped","ĝ"],[[285,285],"valid"],[[286,286],"mapped","ğ"],[[287,287],"valid"],[[288,288],"mapped","ġ"],[[289,289],"valid"],[[290,290],"mapped","ģ"],[[291,291],"valid"],[[292,292],"mapped","ĥ"],[[293,293],"valid"],[[294,294],"mapped","ħ"],[[295,295],"valid"],[[296,296],"mapped","ĩ"],[[297,297],"valid"],[[298,298],"mapped","ī"],[[299,299],"valid"],[[300,300],"mapped","ĭ"],[[301,301],"valid"],[[302,302],"mapped","į"],[[303,303],"valid"],[[304,304],"mapped","i̇"],[[305,305],"valid"],[[306,307],"mapped","ij"],[[308,308],"mapped","ĵ"],[[309,309],"valid"],[[310,310],"mapped","ķ"],[[311,312],"valid"],[[313,313],"mapped","ĺ"],[[314,314],"valid"],[[315,315],"mapped","ļ"],[[316,316],"valid"],[[317,317],"mapped","ľ"],[[318,318],"valid"],[[319,320],"mapped","l·"],[[321,321],"mapped","ł"],[[322,322],"valid"],[[323,323],"mapped","ń"],[[324,324],"valid"],[[325,325],"mapped","ņ"],[[326,326],"valid"],[[327,327],"mapped","ň"],[[328,328],"valid"],[[329,329],"mapped","ʼn"],[[330,330],"mapped","ŋ"],[[331,331],"valid"],[[332,332],"mapped","ō"],[[333,333],"valid"],[[334,334],"mapped","ŏ"],[[335,335],"valid"],[[336,336],"mapped","ő"],[[337,337],"valid"],[[338,338],"mapped","œ"],[[339,339],"valid"],[[340,340],"mapped","ŕ"],[[341,341],"valid"],[[342,342],"mapped","ŗ"],[[343,343],"valid"],[[344,344],"mapped","ř"],[[345,345],"valid"],[[346,346],"mapped","ś"],[[347,347],"valid"],[[348,348],"mapped","ŝ"],[[349,349],"valid"],[[350,350],"mapped","ş"],[[351,351],"valid"],[[352,352],"mapped","š"],[[353,353],"valid"],[[354,354],"mapped","ţ"],[[355,355],"valid"],[[356,356],"mapped","ť"],[[357,357],"valid"],[[358,358],"mapped","ŧ"],[[359,359],"valid"],[[360,360],"mapped","ũ"],[[361,361],"valid"],[[362,362],"mapped","ū"],[[363,363],"valid"],[[364,364],"mapped","ŭ"],[[365,365],"valid"],[[366,366],"mapped","ů"],[[367,367],"valid"],[[368,368],"mapped","ű"],[[369,369],"valid"],[[370,370],"mapped","ų"],[[371,371],"valid"],[[372,372],"mapped","ŵ"],[[373,373],"valid"],[[374,374],"mapped","ŷ"],[[375,375],"valid"],[[376,376],"mapped","ÿ"],[[377,377],"mapped","ź"],[[378,378],"valid"],[[379,379],"mapped","ż"],[[380,380],"valid"],[[381,381],"mapped","ž"],[[382,382],"valid"],[[383,383],"mapped","s"],[[384,384],"valid"],[[385,385],"mapped","ɓ"],[[386,386],"mapped","ƃ"],[[387,387],"valid"],[[388,388],"mapped","ƅ"],[[389,389],"valid"],[[390,390],"mapped","ɔ"],[[391,391],"mapped","ƈ"],[[392,392],"valid"],[[393,393],"mapped","ɖ"],[[394,394],"mapped","ɗ"],[[395,395],"mapped","ƌ"],[[396,397],"valid"],[[398,398],"mapped","ǝ"],[[399,399],"mapped","ə"],[[400,400],"mapped","ɛ"],[[401,401],"mapped","ƒ"],[[402,402],"valid"],[[403,403],"mapped","ɠ"],[[404,404],"mapped","ɣ"],[[405,405],"valid"],[[406,406],"mapped","ɩ"],[[407,407],"mapped","ɨ"],[[408,408],"mapped","ƙ"],[[409,411],"valid"],[[412,412],"mapped","ɯ"],[[413,413],"mapped","ɲ"],[[414,414],"valid"],[[415,415],"mapped","ɵ"],[[416,416],"mapped","ơ"],[[417,417],"valid"],[[418,418],"mapped","ƣ"],[[419,419],"valid"],[[420,420],"mapped","ƥ"],[[421,421],"valid"],[[422,422],"mapped","ʀ"],[[423,423],"mapped","ƨ"],[[424,424],"valid"],[[425,425],"mapped","ʃ"],[[426,427],"valid"],[[428,428],"mapped","ƭ"],[[429,429],"valid"],[[430,430],"mapped","ʈ"],[[431,431],"mapped","ư"],[[432,432],"valid"],[[433,433],"mapped","ʊ"],[[434,434],"mapped","ʋ"],[[435,435],"mapped","ƴ"],[[436,436],"valid"],[[437,437],"mapped","ƶ"],[[438,438],"valid"],[[439,439],"mapped","ʒ"],[[440,440],"mapped","ƹ"],[[441,443],"valid"],[[444,444],"mapped","ƽ"],[[445,451],"valid"],[[452,454],"mapped","dž"],[[455,457],"mapped","lj"],[[458,460],"mapped","nj"],[[461,461],"mapped","ǎ"],[[462,462],"valid"],[[463,463],"mapped","ǐ"],[[464,464],"valid"],[[465,465],"mapped","ǒ"],[[466,466],"valid"],[[467,467],"mapped","ǔ"],[[468,468],"valid"],[[469,469],"mapped","ǖ"],[[470,470],"valid"],[[471,471],"mapped","ǘ"],[[472,472],"valid"],[[473,473],"mapped","ǚ"],[[474,474],"valid"],[[475,475],"mapped","ǜ"],[[476,477],"valid"],[[478,478],"mapped","ǟ"],[[479,479],"valid"],[[480,480],"mapped","ǡ"],[[481,481],"valid"],[[482,482],"mapped","ǣ"],[[483,483],"valid"],[[484,484],"mapped","ǥ"],[[485,485],"valid"],[[486,486],"mapped","ǧ"],[[487,487],"valid"],[[488,488],"mapped","ǩ"],[[489,489],"valid"],[[490,490],"mapped","ǫ"],[[491,491],"valid"],[[492,492],"mapped","ǭ"],[[493,493],"valid"],[[494,494],"mapped","ǯ"],[[495,496],"valid"],[[497,499],"mapped","dz"],[[500,500],"mapped","ǵ"],[[501,501],"valid"],[[502,502],"mapped","ƕ"],[[503,503],"mapped","ƿ"],[[504,504],"mapped","ǹ"],[[505,505],"valid"],[[506,506],"mapped","ǻ"],[[507,507],"valid"],[[508,508],"mapped","ǽ"],[[509,509],"valid"],[[510,510],"mapped","ǿ"],[[511,511],"valid"],[[512,512],"mapped","ȁ"],[[513,513],"valid"],[[514,514],"mapped","ȃ"],[[515,515],"valid"],[[516,516],"mapped","ȅ"],[[517,517],"valid"],[[518,518],"mapped","ȇ"],[[519,519],"valid"],[[520,520],"mapped","ȉ"],[[521,521],"valid"],[[522,522],"mapped","ȋ"],[[523,523],"valid"],[[524,524],"mapped","ȍ"],[[525,525],"valid"],[[526,526],"mapped","ȏ"],[[527,527],"valid"],[[528,528],"mapped","ȑ"],[[529,529],"valid"],[[530,530],"mapped","ȓ"],[[531,531],"valid"],[[532,532],"mapped","ȕ"],[[533,533],"valid"],[[534,534],"mapped","ȗ"],[[535,535],"valid"],[[536,536],"mapped","ș"],[[537,537],"valid"],[[538,538],"mapped","ț"],[[539,539],"valid"],[[540,540],"mapped","ȝ"],[[541,541],"valid"],[[542,542],"mapped","ȟ"],[[543,543],"valid"],[[544,544],"mapped","ƞ"],[[545,545],"valid"],[[546,546],"mapped","ȣ"],[[547,547],"valid"],[[548,548],"mapped","ȥ"],[[549,549],"valid"],[[550,550],"mapped","ȧ"],[[551,551],"valid"],[[552,552],"mapped","ȩ"],[[553,553],"valid"],[[554,554],"mapped","ȫ"],[[555,555],"valid"],[[556,556],"mapped","ȭ"],[[557,557],"valid"],[[558,558],"mapped","ȯ"],[[559,559],"valid"],[[560,560],"mapped","ȱ"],[[561,561],"valid"],[[562,562],"mapped","ȳ"],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped","ⱥ"],[[571,571],"mapped","ȼ"],[[572,572],"valid"],[[573,573],"mapped","ƚ"],[[574,574],"mapped","ⱦ"],[[575,576],"valid"],[[577,577],"mapped","ɂ"],[[578,578],"valid"],[[579,579],"mapped","ƀ"],[[580,580],"mapped","ʉ"],[[581,581],"mapped","ʌ"],[[582,582],"mapped","ɇ"],[[583,583],"valid"],[[584,584],"mapped","ɉ"],[[585,585],"valid"],[[586,586],"mapped","ɋ"],[[587,587],"valid"],[[588,588],"mapped","ɍ"],[[589,589],"valid"],[[590,590],"mapped","ɏ"],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped","h"],[[689,689],"mapped","ɦ"],[[690,690],"mapped","j"],[[691,691],"mapped","r"],[[692,692],"mapped","ɹ"],[[693,693],"mapped","ɻ"],[[694,694],"mapped","ʁ"],[[695,695],"mapped","w"],[[696,696],"mapped","y"],[[697,705],"valid"],[[706,709],"valid","","NV8"],[[710,721],"valid"],[[722,727],"valid","","NV8"],[[728,728],"disallowed_STD3_mapped"," ̆"],[[729,729],"disallowed_STD3_mapped"," ̇"],[[730,730],"disallowed_STD3_mapped"," ̊"],[[731,731],"disallowed_STD3_mapped"," ̨"],[[732,732],"disallowed_STD3_mapped"," ̃"],[[733,733],"disallowed_STD3_mapped"," ̋"],[[734,734],"valid","","NV8"],[[735,735],"valid","","NV8"],[[736,736],"mapped","ɣ"],[[737,737],"mapped","l"],[[738,738],"mapped","s"],[[739,739],"mapped","x"],[[740,740],"mapped","ʕ"],[[741,745],"valid","","NV8"],[[746,747],"valid","","NV8"],[[748,748],"valid"],[[749,749],"valid","","NV8"],[[750,750],"valid"],[[751,767],"valid","","NV8"],[[768,831],"valid"],[[832,832],"mapped","̀"],[[833,833],"mapped","́"],[[834,834],"valid"],[[835,835],"mapped","̓"],[[836,836],"mapped","̈́"],[[837,837],"mapped","ι"],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped","ͱ"],[[881,881],"valid"],[[882,882],"mapped","ͳ"],[[883,883],"valid"],[[884,884],"mapped","ʹ"],[[885,885],"valid"],[[886,886],"mapped","ͷ"],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped"," ι"],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",";"],[[895,895],"mapped","ϳ"],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped"," ́"],[[901,901],"disallowed_STD3_mapped"," ̈́"],[[902,902],"mapped","ά"],[[903,903],"mapped","·"],[[904,904],"mapped","έ"],[[905,905],"mapped","ή"],[[906,906],"mapped","ί"],[[907,907],"disallowed"],[[908,908],"mapped","ό"],[[909,909],"disallowed"],[[910,910],"mapped","ύ"],[[911,911],"mapped","ώ"],[[912,912],"valid"],[[913,913],"mapped","α"],[[914,914],"mapped","β"],[[915,915],"mapped","γ"],[[916,916],"mapped","δ"],[[917,917],"mapped","ε"],[[918,918],"mapped","ζ"],[[919,919],"mapped","η"],[[920,920],"mapped","θ"],[[921,921],"mapped","ι"],[[922,922],"mapped","κ"],[[923,923],"mapped","λ"],[[924,924],"mapped","μ"],[[925,925],"mapped","ν"],[[926,926],"mapped","ξ"],[[927,927],"mapped","ο"],[[928,928],"mapped","π"],[[929,929],"mapped","ρ"],[[930,930],"disallowed"],[[931,931],"mapped","σ"],[[932,932],"mapped","τ"],[[933,933],"mapped","υ"],[[934,934],"mapped","φ"],[[935,935],"mapped","χ"],[[936,936],"mapped","ψ"],[[937,937],"mapped","ω"],[[938,938],"mapped","ϊ"],[[939,939],"mapped","ϋ"],[[940,961],"valid"],[[962,962],"deviation","σ"],[[963,974],"valid"],[[975,975],"mapped","ϗ"],[[976,976],"mapped","β"],[[977,977],"mapped","θ"],[[978,978],"mapped","υ"],[[979,979],"mapped","ύ"],[[980,980],"mapped","ϋ"],[[981,981],"mapped","φ"],[[982,982],"mapped","π"],[[983,983],"valid"],[[984,984],"mapped","ϙ"],[[985,985],"valid"],[[986,986],"mapped","ϛ"],[[987,987],"valid"],[[988,988],"mapped","ϝ"],[[989,989],"valid"],[[990,990],"mapped","ϟ"],[[991,991],"valid"],[[992,992],"mapped","ϡ"],[[993,993],"valid"],[[994,994],"mapped","ϣ"],[[995,995],"valid"],[[996,996],"mapped","ϥ"],[[997,997],"valid"],[[998,998],"mapped","ϧ"],[[999,999],"valid"],[[1000,1000],"mapped","ϩ"],[[1001,1001],"valid"],[[1002,1002],"mapped","ϫ"],[[1003,1003],"valid"],[[1004,1004],"mapped","ϭ"],[[1005,1005],"valid"],[[1006,1006],"mapped","ϯ"],[[1007,1007],"valid"],[[1008,1008],"mapped","κ"],[[1009,1009],"mapped","ρ"],[[1010,1010],"mapped","σ"],[[1011,1011],"valid"],[[1012,1012],"mapped","θ"],[[1013,1013],"mapped","ε"],[[1014,1014],"valid","","NV8"],[[1015,1015],"mapped","ϸ"],[[1016,1016],"valid"],[[1017,1017],"mapped","σ"],[[1018,1018],"mapped","ϻ"],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped","ͻ"],[[1022,1022],"mapped","ͼ"],[[1023,1023],"mapped","ͽ"],[[1024,1024],"mapped","ѐ"],[[1025,1025],"mapped","ё"],[[1026,1026],"mapped","ђ"],[[1027,1027],"mapped","ѓ"],[[1028,1028],"mapped","є"],[[1029,1029],"mapped","ѕ"],[[1030,1030],"mapped","і"],[[1031,1031],"mapped","ї"],[[1032,1032],"mapped","ј"],[[1033,1033],"mapped","љ"],[[1034,1034],"mapped","њ"],[[1035,1035],"mapped","ћ"],[[1036,1036],"mapped","ќ"],[[1037,1037],"mapped","ѝ"],[[1038,1038],"mapped","ў"],[[1039,1039],"mapped","џ"],[[1040,1040],"mapped","а"],[[1041,1041],"mapped","б"],[[1042,1042],"mapped","в"],[[1043,1043],"mapped","г"],[[1044,1044],"mapped","д"],[[1045,1045],"mapped","е"],[[1046,1046],"mapped","ж"],[[1047,1047],"mapped","з"],[[1048,1048],"mapped","и"],[[1049,1049],"mapped","й"],[[1050,1050],"mapped","к"],[[1051,1051],"mapped","л"],[[1052,1052],"mapped","м"],[[1053,1053],"mapped","н"],[[1054,1054],"mapped","о"],[[1055,1055],"mapped","п"],[[1056,1056],"mapped","р"],[[1057,1057],"mapped","с"],[[1058,1058],"mapped","т"],[[1059,1059],"mapped","у"],[[1060,1060],"mapped","ф"],[[1061,1061],"mapped","х"],[[1062,1062],"mapped","ц"],[[1063,1063],"mapped","ч"],[[1064,1064],"mapped","ш"],[[1065,1065],"mapped","щ"],[[1066,1066],"mapped","ъ"],[[1067,1067],"mapped","ы"],[[1068,1068],"mapped","ь"],[[1069,1069],"mapped","э"],[[1070,1070],"mapped","ю"],[[1071,1071],"mapped","я"],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped","ѡ"],[[1121,1121],"valid"],[[1122,1122],"mapped","ѣ"],[[1123,1123],"valid"],[[1124,1124],"mapped","ѥ"],[[1125,1125],"valid"],[[1126,1126],"mapped","ѧ"],[[1127,1127],"valid"],[[1128,1128],"mapped","ѩ"],[[1129,1129],"valid"],[[1130,1130],"mapped","ѫ"],[[1131,1131],"valid"],[[1132,1132],"mapped","ѭ"],[[1133,1133],"valid"],[[1134,1134],"mapped","ѯ"],[[1135,1135],"valid"],[[1136,1136],"mapped","ѱ"],[[1137,1137],"valid"],[[1138,1138],"mapped","ѳ"],[[1139,1139],"valid"],[[1140,1140],"mapped","ѵ"],[[1141,1141],"valid"],[[1142,1142],"mapped","ѷ"],[[1143,1143],"valid"],[[1144,1144],"mapped","ѹ"],[[1145,1145],"valid"],[[1146,1146],"mapped","ѻ"],[[1147,1147],"valid"],[[1148,1148],"mapped","ѽ"],[[1149,1149],"valid"],[[1150,1150],"mapped","ѿ"],[[1151,1151],"valid"],[[1152,1152],"mapped","ҁ"],[[1153,1153],"valid"],[[1154,1154],"valid","","NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid","","NV8"],[[1162,1162],"mapped","ҋ"],[[1163,1163],"valid"],[[1164,1164],"mapped","ҍ"],[[1165,1165],"valid"],[[1166,1166],"mapped","ҏ"],[[1167,1167],"valid"],[[1168,1168],"mapped","ґ"],[[1169,1169],"valid"],[[1170,1170],"mapped","ғ"],[[1171,1171],"valid"],[[1172,1172],"mapped","ҕ"],[[1173,1173],"valid"],[[1174,1174],"mapped","җ"],[[1175,1175],"valid"],[[1176,1176],"mapped","ҙ"],[[1177,1177],"valid"],[[1178,1178],"mapped","қ"],[[1179,1179],"valid"],[[1180,1180],"mapped","ҝ"],[[1181,1181],"valid"],[[1182,1182],"mapped","ҟ"],[[1183,1183],"valid"],[[1184,1184],"mapped","ҡ"],[[1185,1185],"valid"],[[1186,1186],"mapped","ң"],[[1187,1187],"valid"],[[1188,1188],"mapped","ҥ"],[[1189,1189],"valid"],[[1190,1190],"mapped","ҧ"],[[1191,1191],"valid"],[[1192,1192],"mapped","ҩ"],[[1193,1193],"valid"],[[1194,1194],"mapped","ҫ"],[[1195,1195],"valid"],[[1196,1196],"mapped","ҭ"],[[1197,1197],"valid"],[[1198,1198],"mapped","ү"],[[1199,1199],"valid"],[[1200,1200],"mapped","ұ"],[[1201,1201],"valid"],[[1202,1202],"mapped","ҳ"],[[1203,1203],"valid"],[[1204,1204],"mapped","ҵ"],[[1205,1205],"valid"],[[1206,1206],"mapped","ҷ"],[[1207,1207],"valid"],[[1208,1208],"mapped","ҹ"],[[1209,1209],"valid"],[[1210,1210],"mapped","һ"],[[1211,1211],"valid"],[[1212,1212],"mapped","ҽ"],[[1213,1213],"valid"],[[1214,1214],"mapped","ҿ"],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped","ӂ"],[[1218,1218],"valid"],[[1219,1219],"mapped","ӄ"],[[1220,1220],"valid"],[[1221,1221],"mapped","ӆ"],[[1222,1222],"valid"],[[1223,1223],"mapped","ӈ"],[[1224,1224],"valid"],[[1225,1225],"mapped","ӊ"],[[1226,1226],"valid"],[[1227,1227],"mapped","ӌ"],[[1228,1228],"valid"],[[1229,1229],"mapped","ӎ"],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped","ӑ"],[[1233,1233],"valid"],[[1234,1234],"mapped","ӓ"],[[1235,1235],"valid"],[[1236,1236],"mapped","ӕ"],[[1237,1237],"valid"],[[1238,1238],"mapped","ӗ"],[[1239,1239],"valid"],[[1240,1240],"mapped","ә"],[[1241,1241],"valid"],[[1242,1242],"mapped","ӛ"],[[1243,1243],"valid"],[[1244,1244],"mapped","ӝ"],[[1245,1245],"valid"],[[1246,1246],"mapped","ӟ"],[[1247,1247],"valid"],[[1248,1248],"mapped","ӡ"],[[1249,1249],"valid"],[[1250,1250],"mapped","ӣ"],[[1251,1251],"valid"],[[1252,1252],"mapped","ӥ"],[[1253,1253],"valid"],[[1254,1254],"mapped","ӧ"],[[1255,1255],"valid"],[[1256,1256],"mapped","ө"],[[1257,1257],"valid"],[[1258,1258],"mapped","ӫ"],[[1259,1259],"valid"],[[1260,1260],"mapped","ӭ"],[[1261,1261],"valid"],[[1262,1262],"mapped","ӯ"],[[1263,1263],"valid"],[[1264,1264],"mapped","ӱ"],[[1265,1265],"valid"],[[1266,1266],"mapped","ӳ"],[[1267,1267],"valid"],[[1268,1268],"mapped","ӵ"],[[1269,1269],"valid"],[[1270,1270],"mapped","ӷ"],[[1271,1271],"valid"],[[1272,1272],"mapped","ӹ"],[[1273,1273],"valid"],[[1274,1274],"mapped","ӻ"],[[1275,1275],"valid"],[[1276,1276],"mapped","ӽ"],[[1277,1277],"valid"],[[1278,1278],"mapped","ӿ"],[[1279,1279],"valid"],[[1280,1280],"mapped","ԁ"],[[1281,1281],"valid"],[[1282,1282],"mapped","ԃ"],[[1283,1283],"valid"],[[1284,1284],"mapped","ԅ"],[[1285,1285],"valid"],[[1286,1286],"mapped","ԇ"],[[1287,1287],"valid"],[[1288,1288],"mapped","ԉ"],[[1289,1289],"valid"],[[1290,1290],"mapped","ԋ"],[[1291,1291],"valid"],[[1292,1292],"mapped","ԍ"],[[1293,1293],"valid"],[[1294,1294],"mapped","ԏ"],[[1295,1295],"valid"],[[1296,1296],"mapped","ԑ"],[[1297,1297],"valid"],[[1298,1298],"mapped","ԓ"],[[1299,1299],"valid"],[[1300,1300],"mapped","ԕ"],[[1301,1301],"valid"],[[1302,1302],"mapped","ԗ"],[[1303,1303],"valid"],[[1304,1304],"mapped","ԙ"],[[1305,1305],"valid"],[[1306,1306],"mapped","ԛ"],[[1307,1307],"valid"],[[1308,1308],"mapped","ԝ"],[[1309,1309],"valid"],[[1310,1310],"mapped","ԟ"],[[1311,1311],"valid"],[[1312,1312],"mapped","ԡ"],[[1313,1313],"valid"],[[1314,1314],"mapped","ԣ"],[[1315,1315],"valid"],[[1316,1316],"mapped","ԥ"],[[1317,1317],"valid"],[[1318,1318],"mapped","ԧ"],[[1319,1319],"valid"],[[1320,1320],"mapped","ԩ"],[[1321,1321],"valid"],[[1322,1322],"mapped","ԫ"],[[1323,1323],"valid"],[[1324,1324],"mapped","ԭ"],[[1325,1325],"valid"],[[1326,1326],"mapped","ԯ"],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped","ա"],[[1330,1330],"mapped","բ"],[[1331,1331],"mapped","գ"],[[1332,1332],"mapped","դ"],[[1333,1333],"mapped","ե"],[[1334,1334],"mapped","զ"],[[1335,1335],"mapped","է"],[[1336,1336],"mapped","ը"],[[1337,1337],"mapped","թ"],[[1338,1338],"mapped","ժ"],[[1339,1339],"mapped","ի"],[[1340,1340],"mapped","լ"],[[1341,1341],"mapped","խ"],[[1342,1342],"mapped","ծ"],[[1343,1343],"mapped","կ"],[[1344,1344],"mapped","հ"],[[1345,1345],"mapped","ձ"],[[1346,1346],"mapped","ղ"],[[1347,1347],"mapped","ճ"],[[1348,1348],"mapped","մ"],[[1349,1349],"mapped","յ"],[[1350,1350],"mapped","ն"],[[1351,1351],"mapped","շ"],[[1352,1352],"mapped","ո"],[[1353,1353],"mapped","չ"],[[1354,1354],"mapped","պ"],[[1355,1355],"mapped","ջ"],[[1356,1356],"mapped","ռ"],[[1357,1357],"mapped","ս"],[[1358,1358],"mapped","վ"],[[1359,1359],"mapped","տ"],[[1360,1360],"mapped","ր"],[[1361,1361],"mapped","ց"],[[1362,1362],"mapped","ւ"],[[1363,1363],"mapped","փ"],[[1364,1364],"mapped","ք"],[[1365,1365],"mapped","օ"],[[1366,1366],"mapped","ֆ"],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid","","NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped","եւ"],[[1416,1416],"disallowed"],[[1417,1417],"valid","","NV8"],[[1418,1418],"valid","","NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid","","NV8"],[[1423,1423],"valid","","NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid","","NV8"],[[1471,1471],"valid"],[[1472,1472],"valid","","NV8"],[[1473,1474],"valid"],[[1475,1475],"valid","","NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid","","NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid","","NV8"],[[1547,1547],"valid","","NV8"],[[1548,1548],"valid","","NV8"],[[1549,1551],"valid","","NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid","","NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid","","NV8"],[[1567,1567],"valid","","NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid","","NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid","","NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped","اٴ"],[[1654,1654],"mapped","وٴ"],[[1655,1655],"mapped","ۇٴ"],[[1656,1656],"mapped","يٴ"],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid","","NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid","","NV8"],[[1759,1768],"valid"],[[1769,1769],"valid","","NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid","","NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid","","NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid","","NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid","","NV8"],[[2143,2143],"disallowed"],[[2144,2154],"valid"],[[2155,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2229],"disallowed"],[[2230,2237],"valid"],[[2238,2259],"disallowed"],[[2260,2273],"valid"],[[2274,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped","क़"],[[2393,2393],"mapped","ख़"],[[2394,2394],"mapped","ग़"],[[2395,2395],"mapped","ज़"],[[2396,2396],"mapped","ड़"],[[2397,2397],"mapped","ढ़"],[[2398,2398],"mapped","फ़"],[[2399,2399],"mapped","य़"],[[2400,2403],"valid"],[[2404,2405],"valid","","NV8"],[[2406,2415],"valid"],[[2416,2416],"valid","","NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped","ড়"],[[2525,2525],"mapped","ঢ়"],[[2526,2526],"disallowed"],[[2527,2527],"mapped","য়"],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid","","NV8"],[[2555,2555],"valid","","NV8"],[[2556,2556],"valid"],[[2557,2557],"valid","","NV8"],[[2558,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped","ਲ਼"],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped","ਸ਼"],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped","ਖ਼"],[[2650,2650],"mapped","ਗ਼"],[[2651,2651],"mapped","ਜ਼"],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped","ਫ਼"],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid","","NV8"],[[2801,2801],"valid","","NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2815],"valid"],[[2816,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped","ଡ଼"],[[2909,2909],"mapped","ଢ଼"],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid","","NV8"],[[2929,2929],"valid"],[[2930,2935],"valid","","NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid","","NV8"],[[3059,3066],"valid","","NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid","","NV8"],[[3200,3200],"valid"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3327],"disallowed"],[[3328,3328],"valid"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"valid"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3407],"valid","","NV8"],[[3408,3411],"disallowed"],[[3412,3414],"valid"],[[3415,3415],"valid"],[[3416,3422],"valid","","NV8"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid","","NV8"],[[3446,3448],"valid","","NV8"],[[3449,3449],"valid","","NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid","","NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped","ํา"],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid","","NV8"],[[3648,3662],"valid"],[[3663,3663],"valid","","NV8"],[[3664,3673],"valid"],[[3674,3675],"valid","","NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped","ໍາ"],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped","ຫນ"],[[3805,3805],"mapped","ຫມ"],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid","","NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped","་"],[[3853,3863],"valid","","NV8"],[[3864,3865],"valid"],[[3866,3871],"valid","","NV8"],[[3872,3881],"valid"],[[3882,3892],"valid","","NV8"],[[3893,3893],"valid"],[[3894,3894],"valid","","NV8"],[[3895,3895],"valid"],[[3896,3896],"valid","","NV8"],[[3897,3897],"valid"],[[3898,3901],"valid","","NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped","གྷ"],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped","ཌྷ"],[[3918,3921],"valid"],[[3922,3922],"mapped","དྷ"],[[3923,3926],"valid"],[[3927,3927],"mapped","བྷ"],[[3928,3931],"valid"],[[3932,3932],"mapped","ཛྷ"],[[3933,3944],"valid"],[[3945,3945],"mapped","ཀྵ"],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped","ཱི"],[[3956,3956],"valid"],[[3957,3957],"mapped","ཱུ"],[[3958,3958],"mapped","ྲྀ"],[[3959,3959],"mapped","ྲཱྀ"],[[3960,3960],"mapped","ླྀ"],[[3961,3961],"mapped","ླཱྀ"],[[3962,3968],"valid"],[[3969,3969],"mapped","ཱྀ"],[[3970,3972],"valid"],[[3973,3973],"valid","","NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped","ྒྷ"],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped","ྜྷ"],[[3998,4001],"valid"],[[4002,4002],"mapped","ྡྷ"],[[4003,4006],"valid"],[[4007,4007],"mapped","ྦྷ"],[[4008,4011],"valid"],[[4012,4012],"mapped","ྫྷ"],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped","ྐྵ"],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid","","NV8"],[[4038,4038],"valid"],[[4039,4044],"valid","","NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid","","NV8"],[[4047,4047],"valid","","NV8"],[[4048,4049],"valid","","NV8"],[[4050,4052],"valid","","NV8"],[[4053,4056],"valid","","NV8"],[[4057,4058],"valid","","NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid","","NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid","","NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped","ⴧ"],[[4296,4300],"disallowed"],[[4301,4301],"mapped","ⴭ"],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid","","NV8"],[[4348,4348],"mapped","ნ"],[[4349,4351],"valid"],[[4352,4441],"valid","","NV8"],[[4442,4446],"valid","","NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid","","NV8"],[[4515,4519],"valid","","NV8"],[[4520,4601],"valid","","NV8"],[[4602,4607],"valid","","NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid","","NV8"],[[4961,4988],"valid","","NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid","","NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped","Ᏸ"],[[5113,5113],"mapped","Ᏹ"],[[5114,5114],"mapped","Ᏺ"],[[5115,5115],"mapped","Ᏻ"],[[5116,5116],"mapped","Ᏼ"],[[5117,5117],"mapped","Ᏽ"],[[5118,5119],"disallowed"],[[5120,5120],"valid","","NV8"],[[5121,5740],"valid"],[[5741,5742],"valid","","NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid","","NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid","","NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid","","NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid","","NV8"],[[6103,6103],"valid"],[[6104,6107],"valid","","NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid","","NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid","","NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid","","NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid","","NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid","","NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid","","XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid","","NV8"],[[6624,6655],"valid","","NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid","","NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid","","NV8"],[[6823,6823],"valid"],[[6824,6829],"valid","","NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid","","NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid","","NV8"],[[7019,7027],"valid"],[[7028,7036],"valid","","NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid","","NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid","","NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid","","NV8"],[[7296,7296],"mapped","в"],[[7297,7297],"mapped","д"],[[7298,7298],"mapped","о"],[[7299,7299],"mapped","с"],[[7300,7301],"mapped","т"],[[7302,7302],"mapped","ъ"],[[7303,7303],"mapped","ѣ"],[[7304,7304],"mapped","ꙋ"],[[7305,7359],"disallowed"],[[7360,7367],"valid","","NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid","","NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"valid"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped","a"],[[7469,7469],"mapped","æ"],[[7470,7470],"mapped","b"],[[7471,7471],"valid"],[[7472,7472],"mapped","d"],[[7473,7473],"mapped","e"],[[7474,7474],"mapped","ǝ"],[[7475,7475],"mapped","g"],[[7476,7476],"mapped","h"],[[7477,7477],"mapped","i"],[[7478,7478],"mapped","j"],[[7479,7479],"mapped","k"],[[7480,7480],"mapped","l"],[[7481,7481],"mapped","m"],[[7482,7482],"mapped","n"],[[7483,7483],"valid"],[[7484,7484],"mapped","o"],[[7485,7485],"mapped","ȣ"],[[7486,7486],"mapped","p"],[[7487,7487],"mapped","r"],[[7488,7488],"mapped","t"],[[7489,7489],"mapped","u"],[[7490,7490],"mapped","w"],[[7491,7491],"mapped","a"],[[7492,7492],"mapped","ɐ"],[[7493,7493],"mapped","ɑ"],[[7494,7494],"mapped","ᴂ"],[[7495,7495],"mapped","b"],[[7496,7496],"mapped","d"],[[7497,7497],"mapped","e"],[[7498,7498],"mapped","ə"],[[7499,7499],"mapped","ɛ"],[[7500,7500],"mapped","ɜ"],[[7501,7501],"mapped","g"],[[7502,7502],"valid"],[[7503,7503],"mapped","k"],[[7504,7504],"mapped","m"],[[7505,7505],"mapped","ŋ"],[[7506,7506],"mapped","o"],[[7507,7507],"mapped","ɔ"],[[7508,7508],"mapped","ᴖ"],[[7509,7509],"mapped","ᴗ"],[[7510,7510],"mapped","p"],[[7511,7511],"mapped","t"],[[7512,7512],"mapped","u"],[[7513,7513],"mapped","ᴝ"],[[7514,7514],"mapped","ɯ"],[[7515,7515],"mapped","v"],[[7516,7516],"mapped","ᴥ"],[[7517,7517],"mapped","β"],[[7518,7518],"mapped","γ"],[[7519,7519],"mapped","δ"],[[7520,7520],"mapped","φ"],[[7521,7521],"mapped","χ"],[[7522,7522],"mapped","i"],[[7523,7523],"mapped","r"],[[7524,7524],"mapped","u"],[[7525,7525],"mapped","v"],[[7526,7526],"mapped","β"],[[7527,7527],"mapped","γ"],[[7528,7528],"mapped","ρ"],[[7529,7529],"mapped","φ"],[[7530,7530],"mapped","χ"],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped","н"],[[7545,7578],"valid"],[[7579,7579],"mapped","ɒ"],[[7580,7580],"mapped","c"],[[7581,7581],"mapped","ɕ"],[[7582,7582],"mapped","ð"],[[7583,7583],"mapped","ɜ"],[[7584,7584],"mapped","f"],[[7585,7585],"mapped","ɟ"],[[7586,7586],"mapped","ɡ"],[[7587,7587],"mapped","ɥ"],[[7588,7588],"mapped","ɨ"],[[7589,7589],"mapped","ɩ"],[[7590,7590],"mapped","ɪ"],[[7591,7591],"mapped","ᵻ"],[[7592,7592],"mapped","ʝ"],[[7593,7593],"mapped","ɭ"],[[7594,7594],"mapped","ᶅ"],[[7595,7595],"mapped","ʟ"],[[7596,7596],"mapped","ɱ"],[[7597,7597],"mapped","ɰ"],[[7598,7598],"mapped","ɲ"],[[7599,7599],"mapped","ɳ"],[[7600,7600],"mapped","ɴ"],[[7601,7601],"mapped","ɵ"],[[7602,7602],"mapped","ɸ"],[[7603,7603],"mapped","ʂ"],[[7604,7604],"mapped","ʃ"],[[7605,7605],"mapped","ƫ"],[[7606,7606],"mapped","ʉ"],[[7607,7607],"mapped","ʊ"],[[7608,7608],"mapped","ᴜ"],[[7609,7609],"mapped","ʋ"],[[7610,7610],"mapped","ʌ"],[[7611,7611],"mapped","z"],[[7612,7612],"mapped","ʐ"],[[7613,7613],"mapped","ʑ"],[[7614,7614],"mapped","ʒ"],[[7615,7615],"mapped","θ"],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7673],"valid"],[[7674,7674],"disallowed"],[[7675,7675],"valid"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped","ḁ"],[[7681,7681],"valid"],[[7682,7682],"mapped","ḃ"],[[7683,7683],"valid"],[[7684,7684],"mapped","ḅ"],[[7685,7685],"valid"],[[7686,7686],"mapped","ḇ"],[[7687,7687],"valid"],[[7688,7688],"mapped","ḉ"],[[7689,7689],"valid"],[[7690,7690],"mapped","ḋ"],[[7691,7691],"valid"],[[7692,7692],"mapped","ḍ"],[[7693,7693],"valid"],[[7694,7694],"mapped","ḏ"],[[7695,7695],"valid"],[[7696,7696],"mapped","ḑ"],[[7697,7697],"valid"],[[7698,7698],"mapped","ḓ"],[[7699,7699],"valid"],[[7700,7700],"mapped","ḕ"],[[7701,7701],"valid"],[[7702,7702],"mapped","ḗ"],[[7703,7703],"valid"],[[7704,7704],"mapped","ḙ"],[[7705,7705],"valid"],[[7706,7706],"mapped","ḛ"],[[7707,7707],"valid"],[[7708,7708],"mapped","ḝ"],[[7709,7709],"valid"],[[7710,7710],"mapped","ḟ"],[[7711,7711],"valid"],[[7712,7712],"mapped","ḡ"],[[7713,7713],"valid"],[[7714,7714],"mapped","ḣ"],[[7715,7715],"valid"],[[7716,7716],"mapped","ḥ"],[[7717,7717],"valid"],[[7718,7718],"mapped","ḧ"],[[7719,7719],"valid"],[[7720,7720],"mapped","ḩ"],[[7721,7721],"valid"],[[7722,7722],"mapped","ḫ"],[[7723,7723],"valid"],[[7724,7724],"mapped","ḭ"],[[7725,7725],"valid"],[[7726,7726],"mapped","ḯ"],[[7727,7727],"valid"],[[7728,7728],"mapped","ḱ"],[[7729,7729],"valid"],[[7730,7730],"mapped","ḳ"],[[7731,7731],"valid"],[[7732,7732],"mapped","ḵ"],[[7733,7733],"valid"],[[7734,7734],"mapped","ḷ"],[[7735,7735],"valid"],[[7736,7736],"mapped","ḹ"],[[7737,7737],"valid"],[[7738,7738],"mapped","ḻ"],[[7739,7739],"valid"],[[7740,7740],"mapped","ḽ"],[[7741,7741],"valid"],[[7742,7742],"mapped","ḿ"],[[7743,7743],"valid"],[[7744,7744],"mapped","ṁ"],[[7745,7745],"valid"],[[7746,7746],"mapped","ṃ"],[[7747,7747],"valid"],[[7748,7748],"mapped","ṅ"],[[7749,7749],"valid"],[[7750,7750],"mapped","ṇ"],[[7751,7751],"valid"],[[7752,7752],"mapped","ṉ"],[[7753,7753],"valid"],[[7754,7754],"mapped","ṋ"],[[7755,7755],"valid"],[[7756,7756],"mapped","ṍ"],[[7757,7757],"valid"],[[7758,7758],"mapped","ṏ"],[[7759,7759],"valid"],[[7760,7760],"mapped","ṑ"],[[7761,7761],"valid"],[[7762,7762],"mapped","ṓ"],[[7763,7763],"valid"],[[7764,7764],"mapped","ṕ"],[[7765,7765],"valid"],[[7766,7766],"mapped","ṗ"],[[7767,7767],"valid"],[[7768,7768],"mapped","ṙ"],[[7769,7769],"valid"],[[7770,7770],"mapped","ṛ"],[[7771,7771],"valid"],[[7772,7772],"mapped","ṝ"],[[7773,7773],"valid"],[[7774,7774],"mapped","ṟ"],[[7775,7775],"valid"],[[7776,7776],"mapped","ṡ"],[[7777,7777],"valid"],[[7778,7778],"mapped","ṣ"],[[7779,7779],"valid"],[[7780,7780],"mapped","ṥ"],[[7781,7781],"valid"],[[7782,7782],"mapped","ṧ"],[[7783,7783],"valid"],[[7784,7784],"mapped","ṩ"],[[7785,7785],"valid"],[[7786,7786],"mapped","ṫ"],[[7787,7787],"valid"],[[7788,7788],"mapped","ṭ"],[[7789,7789],"valid"],[[7790,7790],"mapped","ṯ"],[[7791,7791],"valid"],[[7792,7792],"mapped","ṱ"],[[7793,7793],"valid"],[[7794,7794],"mapped","ṳ"],[[7795,7795],"valid"],[[7796,7796],"mapped","ṵ"],[[7797,7797],"valid"],[[7798,7798],"mapped","ṷ"],[[7799,7799],"valid"],[[7800,7800],"mapped","ṹ"],[[7801,7801],"valid"],[[7802,7802],"mapped","ṻ"],[[7803,7803],"valid"],[[7804,7804],"mapped","ṽ"],[[7805,7805],"valid"],[[7806,7806],"mapped","ṿ"],[[7807,7807],"valid"],[[7808,7808],"mapped","ẁ"],[[7809,7809],"valid"],[[7810,7810],"mapped","ẃ"],[[7811,7811],"valid"],[[7812,7812],"mapped","ẅ"],[[7813,7813],"valid"],[[7814,7814],"mapped","ẇ"],[[7815,7815],"valid"],[[7816,7816],"mapped","ẉ"],[[7817,7817],"valid"],[[7818,7818],"mapped","ẋ"],[[7819,7819],"valid"],[[7820,7820],"mapped","ẍ"],[[7821,7821],"valid"],[[7822,7822],"mapped","ẏ"],[[7823,7823],"valid"],[[7824,7824],"mapped","ẑ"],[[7825,7825],"valid"],[[7826,7826],"mapped","ẓ"],[[7827,7827],"valid"],[[7828,7828],"mapped","ẕ"],[[7829,7833],"valid"],[[7834,7834],"mapped","aʾ"],[[7835,7835],"mapped","ṡ"],[[7836,7837],"valid"],[[7838,7838],"mapped","ss"],[[7839,7839],"valid"],[[7840,7840],"mapped","ạ"],[[7841,7841],"valid"],[[7842,7842],"mapped","ả"],[[7843,7843],"valid"],[[7844,7844],"mapped","ấ"],[[7845,7845],"valid"],[[7846,7846],"mapped","ầ"],[[7847,7847],"valid"],[[7848,7848],"mapped","ẩ"],[[7849,7849],"valid"],[[7850,7850],"mapped","ẫ"],[[7851,7851],"valid"],[[7852,7852],"mapped","ậ"],[[7853,7853],"valid"],[[7854,7854],"mapped","ắ"],[[7855,7855],"valid"],[[7856,7856],"mapped","ằ"],[[7857,7857],"valid"],[[7858,7858],"mapped","ẳ"],[[7859,7859],"valid"],[[7860,7860],"mapped","ẵ"],[[7861,7861],"valid"],[[7862,7862],"mapped","ặ"],[[7863,7863],"valid"],[[7864,7864],"mapped","ẹ"],[[7865,7865],"valid"],[[7866,7866],"mapped","ẻ"],[[7867,7867],"valid"],[[7868,7868],"mapped","ẽ"],[[7869,7869],"valid"],[[7870,7870],"mapped","ế"],[[7871,7871],"valid"],[[7872,7872],"mapped","ề"],[[7873,7873],"valid"],[[7874,7874],"mapped","ể"],[[7875,7875],"valid"],[[7876,7876],"mapped","ễ"],[[7877,7877],"valid"],[[7878,7878],"mapped","ệ"],[[7879,7879],"valid"],[[7880,7880],"mapped","ỉ"],[[7881,7881],"valid"],[[7882,7882],"mapped","ị"],[[7883,7883],"valid"],[[7884,7884],"mapped","ọ"],[[7885,7885],"valid"],[[7886,7886],"mapped","ỏ"],[[7887,7887],"valid"],[[7888,7888],"mapped","ố"],[[7889,7889],"valid"],[[7890,7890],"mapped","ồ"],[[7891,7891],"valid"],[[7892,7892],"mapped","ổ"],[[7893,7893],"valid"],[[7894,7894],"mapped","ỗ"],[[7895,7895],"valid"],[[7896,7896],"mapped","ộ"],[[7897,7897],"valid"],[[7898,7898],"mapped","ớ"],[[7899,7899],"valid"],[[7900,7900],"mapped","ờ"],[[7901,7901],"valid"],[[7902,7902],"mapped","ở"],[[7903,7903],"valid"],[[7904,7904],"mapped","ỡ"],[[7905,7905],"valid"],[[7906,7906],"mapped","ợ"],[[7907,7907],"valid"],[[7908,7908],"mapped","ụ"],[[7909,7909],"valid"],[[7910,7910],"mapped","ủ"],[[7911,7911],"valid"],[[7912,7912],"mapped","ứ"],[[7913,7913],"valid"],[[7914,7914],"mapped","ừ"],[[7915,7915],"valid"],[[7916,7916],"mapped","ử"],[[7917,7917],"valid"],[[7918,7918],"mapped","ữ"],[[7919,7919],"valid"],[[7920,7920],"mapped","ự"],[[7921,7921],"valid"],[[7922,7922],"mapped","ỳ"],[[7923,7923],"valid"],[[7924,7924],"mapped","ỵ"],[[7925,7925],"valid"],[[7926,7926],"mapped","ỷ"],[[7927,7927],"valid"],[[7928,7928],"mapped","ỹ"],[[7929,7929],"valid"],[[7930,7930],"mapped","ỻ"],[[7931,7931],"valid"],[[7932,7932],"mapped","ỽ"],[[7933,7933],"valid"],[[7934,7934],"mapped","ỿ"],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped","ἀ"],[[7945,7945],"mapped","ἁ"],[[7946,7946],"mapped","ἂ"],[[7947,7947],"mapped","ἃ"],[[7948,7948],"mapped","ἄ"],[[7949,7949],"mapped","ἅ"],[[7950,7950],"mapped","ἆ"],[[7951,7951],"mapped","ἇ"],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped","ἐ"],[[7961,7961],"mapped","ἑ"],[[7962,7962],"mapped","ἒ"],[[7963,7963],"mapped","ἓ"],[[7964,7964],"mapped","ἔ"],[[7965,7965],"mapped","ἕ"],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped","ἠ"],[[7977,7977],"mapped","ἡ"],[[7978,7978],"mapped","ἢ"],[[7979,7979],"mapped","ἣ"],[[7980,7980],"mapped","ἤ"],[[7981,7981],"mapped","ἥ"],[[7982,7982],"mapped","ἦ"],[[7983,7983],"mapped","ἧ"],[[7984,7991],"valid"],[[7992,7992],"mapped","ἰ"],[[7993,7993],"mapped","ἱ"],[[7994,7994],"mapped","ἲ"],[[7995,7995],"mapped","ἳ"],[[7996,7996],"mapped","ἴ"],[[7997,7997],"mapped","ἵ"],[[7998,7998],"mapped","ἶ"],[[7999,7999],"mapped","ἷ"],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped","ὀ"],[[8009,8009],"mapped","ὁ"],[[8010,8010],"mapped","ὂ"],[[8011,8011],"mapped","ὃ"],[[8012,8012],"mapped","ὄ"],[[8013,8013],"mapped","ὅ"],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped","ὑ"],[[8026,8026],"disallowed"],[[8027,8027],"mapped","ὓ"],[[8028,8028],"disallowed"],[[8029,8029],"mapped","ὕ"],[[8030,8030],"disallowed"],[[8031,8031],"mapped","ὗ"],[[8032,8039],"valid"],[[8040,8040],"mapped","ὠ"],[[8041,8041],"mapped","ὡ"],[[8042,8042],"mapped","ὢ"],[[8043,8043],"mapped","ὣ"],[[8044,8044],"mapped","ὤ"],[[8045,8045],"mapped","ὥ"],[[8046,8046],"mapped","ὦ"],[[8047,8047],"mapped","ὧ"],[[8048,8048],"valid"],[[8049,8049],"mapped","ά"],[[8050,8050],"valid"],[[8051,8051],"mapped","έ"],[[8052,8052],"valid"],[[8053,8053],"mapped","ή"],[[8054,8054],"valid"],[[8055,8055],"mapped","ί"],[[8056,8056],"valid"],[[8057,8057],"mapped","ό"],[[8058,8058],"valid"],[[8059,8059],"mapped","ύ"],[[8060,8060],"valid"],[[8061,8061],"mapped","ώ"],[[8062,8063],"disallowed"],[[8064,8064],"mapped","ἀι"],[[8065,8065],"mapped","ἁι"],[[8066,8066],"mapped","ἂι"],[[8067,8067],"mapped","ἃι"],[[8068,8068],"mapped","ἄι"],[[8069,8069],"mapped","ἅι"],[[8070,8070],"mapped","ἆι"],[[8071,8071],"mapped","ἇι"],[[8072,8072],"mapped","ἀι"],[[8073,8073],"mapped","ἁι"],[[8074,8074],"mapped","ἂι"],[[8075,8075],"mapped","ἃι"],[[8076,8076],"mapped","ἄι"],[[8077,8077],"mapped","ἅι"],[[8078,8078],"mapped","ἆι"],[[8079,8079],"mapped","ἇι"],[[8080,8080],"mapped","ἠι"],[[8081,8081],"mapped","ἡι"],[[8082,8082],"mapped","ἢι"],[[8083,8083],"mapped","ἣι"],[[8084,8084],"mapped","ἤι"],[[8085,8085],"mapped","ἥι"],[[8086,8086],"mapped","ἦι"],[[8087,8087],"mapped","ἧι"],[[8088,8088],"mapped","ἠι"],[[8089,8089],"mapped","ἡι"],[[8090,8090],"mapped","ἢι"],[[8091,8091],"mapped","ἣι"],[[8092,8092],"mapped","ἤι"],[[8093,8093],"mapped","ἥι"],[[8094,8094],"mapped","ἦι"],[[8095,8095],"mapped","ἧι"],[[8096,8096],"mapped","ὠι"],[[8097,8097],"mapped","ὡι"],[[8098,8098],"mapped","ὢι"],[[8099,8099],"mapped","ὣι"],[[8100,8100],"mapped","ὤι"],[[8101,8101],"mapped","ὥι"],[[8102,8102],"mapped","ὦι"],[[8103,8103],"mapped","ὧι"],[[8104,8104],"mapped","ὠι"],[[8105,8105],"mapped","ὡι"],[[8106,8106],"mapped","ὢι"],[[8107,8107],"mapped","ὣι"],[[8108,8108],"mapped","ὤι"],[[8109,8109],"mapped","ὥι"],[[8110,8110],"mapped","ὦι"],[[8111,8111],"mapped","ὧι"],[[8112,8113],"valid"],[[8114,8114],"mapped","ὰι"],[[8115,8115],"mapped","αι"],[[8116,8116],"mapped","άι"],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped","ᾶι"],[[8120,8120],"mapped","ᾰ"],[[8121,8121],"mapped","ᾱ"],[[8122,8122],"mapped","ὰ"],[[8123,8123],"mapped","ά"],[[8124,8124],"mapped","αι"],[[8125,8125],"disallowed_STD3_mapped"," ̓"],[[8126,8126],"mapped","ι"],[[8127,8127],"disallowed_STD3_mapped"," ̓"],[[8128,8128],"disallowed_STD3_mapped"," ͂"],[[8129,8129],"disallowed_STD3_mapped"," ̈͂"],[[8130,8130],"mapped","ὴι"],[[8131,8131],"mapped","ηι"],[[8132,8132],"mapped","ήι"],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped","ῆι"],[[8136,8136],"mapped","ὲ"],[[8137,8137],"mapped","έ"],[[8138,8138],"mapped","ὴ"],[[8139,8139],"mapped","ή"],[[8140,8140],"mapped","ηι"],[[8141,8141],"disallowed_STD3_mapped"," ̓̀"],[[8142,8142],"disallowed_STD3_mapped"," ̓́"],[[8143,8143],"disallowed_STD3_mapped"," ̓͂"],[[8144,8146],"valid"],[[8147,8147],"mapped","ΐ"],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped","ῐ"],[[8153,8153],"mapped","ῑ"],[[8154,8154],"mapped","ὶ"],[[8155,8155],"mapped","ί"],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped"," ̔̀"],[[8158,8158],"disallowed_STD3_mapped"," ̔́"],[[8159,8159],"disallowed_STD3_mapped"," ̔͂"],[[8160,8162],"valid"],[[8163,8163],"mapped","ΰ"],[[8164,8167],"valid"],[[8168,8168],"mapped","ῠ"],[[8169,8169],"mapped","ῡ"],[[8170,8170],"mapped","ὺ"],[[8171,8171],"mapped","ύ"],[[8172,8172],"mapped","ῥ"],[[8173,8173],"disallowed_STD3_mapped"," ̈̀"],[[8174,8174],"disallowed_STD3_mapped"," ̈́"],[[8175,8175],"disallowed_STD3_mapped","`"],[[8176,8177],"disallowed"],[[8178,8178],"mapped","ὼι"],[[8179,8179],"mapped","ωι"],[[8180,8180],"mapped","ώι"],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped","ῶι"],[[8184,8184],"mapped","ὸ"],[[8185,8185],"mapped","ό"],[[8186,8186],"mapped","ὼ"],[[8187,8187],"mapped","ώ"],[[8188,8188],"mapped","ωι"],[[8189,8189],"disallowed_STD3_mapped"," ́"],[[8190,8190],"disallowed_STD3_mapped"," ̔"],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped"," "],[[8203,8203],"ignored"],[[8204,8205],"deviation",""],[[8206,8207],"disallowed"],[[8208,8208],"valid","","NV8"],[[8209,8209],"mapped","‐"],[[8210,8214],"valid","","NV8"],[[8215,8215],"disallowed_STD3_mapped"," ̳"],[[8216,8227],"valid","","NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid","","NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped"," "],[[8240,8242],"valid","","NV8"],[[8243,8243],"mapped","′′"],[[8244,8244],"mapped","′′′"],[[8245,8245],"valid","","NV8"],[[8246,8246],"mapped","‵‵"],[[8247,8247],"mapped","‵‵‵"],[[8248,8251],"valid","","NV8"],[[8252,8252],"disallowed_STD3_mapped","!!"],[[8253,8253],"valid","","NV8"],[[8254,8254],"disallowed_STD3_mapped"," ̅"],[[8255,8262],"valid","","NV8"],[[8263,8263],"disallowed_STD3_mapped","??"],[[8264,8264],"disallowed_STD3_mapped","?!"],[[8265,8265],"disallowed_STD3_mapped","!?"],[[8266,8269],"valid","","NV8"],[[8270,8274],"valid","","NV8"],[[8275,8276],"valid","","NV8"],[[8277,8278],"valid","","NV8"],[[8279,8279],"mapped","′′′′"],[[8280,8286],"valid","","NV8"],[[8287,8287],"disallowed_STD3_mapped"," "],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped","0"],[[8305,8305],"mapped","i"],[[8306,8307],"disallowed"],[[8308,8308],"mapped","4"],[[8309,8309],"mapped","5"],[[8310,8310],"mapped","6"],[[8311,8311],"mapped","7"],[[8312,8312],"mapped","8"],[[8313,8313],"mapped","9"],[[8314,8314],"disallowed_STD3_mapped","+"],[[8315,8315],"mapped","−"],[[8316,8316],"disallowed_STD3_mapped","="],[[8317,8317],"disallowed_STD3_mapped","("],[[8318,8318],"disallowed_STD3_mapped",")"],[[8319,8319],"mapped","n"],[[8320,8320],"mapped","0"],[[8321,8321],"mapped","1"],[[8322,8322],"mapped","2"],[[8323,8323],"mapped","3"],[[8324,8324],"mapped","4"],[[8325,8325],"mapped","5"],[[8326,8326],"mapped","6"],[[8327,8327],"mapped","7"],[[8328,8328],"mapped","8"],[[8329,8329],"mapped","9"],[[8330,8330],"disallowed_STD3_mapped","+"],[[8331,8331],"mapped","−"],[[8332,8332],"disallowed_STD3_mapped","="],[[8333,8333],"disallowed_STD3_mapped","("],[[8334,8334],"disallowed_STD3_mapped",")"],[[8335,8335],"disallowed"],[[8336,8336],"mapped","a"],[[8337,8337],"mapped","e"],[[8338,8338],"mapped","o"],[[8339,8339],"mapped","x"],[[8340,8340],"mapped","ə"],[[8341,8341],"mapped","h"],[[8342,8342],"mapped","k"],[[8343,8343],"mapped","l"],[[8344,8344],"mapped","m"],[[8345,8345],"mapped","n"],[[8346,8346],"mapped","p"],[[8347,8347],"mapped","s"],[[8348,8348],"mapped","t"],[[8349,8351],"disallowed"],[[8352,8359],"valid","","NV8"],[[8360,8360],"mapped","rs"],[[8361,8362],"valid","","NV8"],[[8363,8363],"valid","","NV8"],[[8364,8364],"valid","","NV8"],[[8365,8367],"valid","","NV8"],[[8368,8369],"valid","","NV8"],[[8370,8373],"valid","","NV8"],[[8374,8376],"valid","","NV8"],[[8377,8377],"valid","","NV8"],[[8378,8378],"valid","","NV8"],[[8379,8381],"valid","","NV8"],[[8382,8382],"valid","","NV8"],[[8383,8383],"valid","","NV8"],[[8384,8399],"disallowed"],[[8400,8417],"valid","","NV8"],[[8418,8419],"valid","","NV8"],[[8420,8426],"valid","","NV8"],[[8427,8427],"valid","","NV8"],[[8428,8431],"valid","","NV8"],[[8432,8432],"valid","","NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped","a/c"],[[8449,8449],"disallowed_STD3_mapped","a/s"],[[8450,8450],"mapped","c"],[[8451,8451],"mapped","°c"],[[8452,8452],"valid","","NV8"],[[8453,8453],"disallowed_STD3_mapped","c/o"],[[8454,8454],"disallowed_STD3_mapped","c/u"],[[8455,8455],"mapped","ɛ"],[[8456,8456],"valid","","NV8"],[[8457,8457],"mapped","°f"],[[8458,8458],"mapped","g"],[[8459,8462],"mapped","h"],[[8463,8463],"mapped","ħ"],[[8464,8465],"mapped","i"],[[8466,8467],"mapped","l"],[[8468,8468],"valid","","NV8"],[[8469,8469],"mapped","n"],[[8470,8470],"mapped","no"],[[8471,8472],"valid","","NV8"],[[8473,8473],"mapped","p"],[[8474,8474],"mapped","q"],[[8475,8477],"mapped","r"],[[8478,8479],"valid","","NV8"],[[8480,8480],"mapped","sm"],[[8481,8481],"mapped","tel"],[[8482,8482],"mapped","tm"],[[8483,8483],"valid","","NV8"],[[8484,8484],"mapped","z"],[[8485,8485],"valid","","NV8"],[[8486,8486],"mapped","ω"],[[8487,8487],"valid","","NV8"],[[8488,8488],"mapped","z"],[[8489,8489],"valid","","NV8"],[[8490,8490],"mapped","k"],[[8491,8491],"mapped","å"],[[8492,8492],"mapped","b"],[[8493,8493],"mapped","c"],[[8494,8494],"valid","","NV8"],[[8495,8496],"mapped","e"],[[8497,8497],"mapped","f"],[[8498,8498],"disallowed"],[[8499,8499],"mapped","m"],[[8500,8500],"mapped","o"],[[8501,8501],"mapped","א"],[[8502,8502],"mapped","ב"],[[8503,8503],"mapped","ג"],[[8504,8504],"mapped","ד"],[[8505,8505],"mapped","i"],[[8506,8506],"valid","","NV8"],[[8507,8507],"mapped","fax"],[[8508,8508],"mapped","π"],[[8509,8510],"mapped","γ"],[[8511,8511],"mapped","π"],[[8512,8512],"mapped","∑"],[[8513,8516],"valid","","NV8"],[[8517,8518],"mapped","d"],[[8519,8519],"mapped","e"],[[8520,8520],"mapped","i"],[[8521,8521],"mapped","j"],[[8522,8523],"valid","","NV8"],[[8524,8524],"valid","","NV8"],[[8525,8525],"valid","","NV8"],[[8526,8526],"valid"],[[8527,8527],"valid","","NV8"],[[8528,8528],"mapped","1⁄7"],[[8529,8529],"mapped","1⁄9"],[[8530,8530],"mapped","1⁄10"],[[8531,8531],"mapped","1⁄3"],[[8532,8532],"mapped","2⁄3"],[[8533,8533],"mapped","1⁄5"],[[8534,8534],"mapped","2⁄5"],[[8535,8535],"mapped","3⁄5"],[[8536,8536],"mapped","4⁄5"],[[8537,8537],"mapped","1⁄6"],[[8538,8538],"mapped","5⁄6"],[[8539,8539],"mapped","1⁄8"],[[8540,8540],"mapped","3⁄8"],[[8541,8541],"mapped","5⁄8"],[[8542,8542],"mapped","7⁄8"],[[8543,8543],"mapped","1⁄"],[[8544,8544],"mapped","i"],[[8545,8545],"mapped","ii"],[[8546,8546],"mapped","iii"],[[8547,8547],"mapped","iv"],[[8548,8548],"mapped","v"],[[8549,8549],"mapped","vi"],[[8550,8550],"mapped","vii"],[[8551,8551],"mapped","viii"],[[8552,8552],"mapped","ix"],[[8553,8553],"mapped","x"],[[8554,8554],"mapped","xi"],[[8555,8555],"mapped","xii"],[[8556,8556],"mapped","l"],[[8557,8557],"mapped","c"],[[8558,8558],"mapped","d"],[[8559,8559],"mapped","m"],[[8560,8560],"mapped","i"],[[8561,8561],"mapped","ii"],[[8562,8562],"mapped","iii"],[[8563,8563],"mapped","iv"],[[8564,8564],"mapped","v"],[[8565,8565],"mapped","vi"],[[8566,8566],"mapped","vii"],[[8567,8567],"mapped","viii"],[[8568,8568],"mapped","ix"],[[8569,8569],"mapped","x"],[[8570,8570],"mapped","xi"],[[8571,8571],"mapped","xii"],[[8572,8572],"mapped","l"],[[8573,8573],"mapped","c"],[[8574,8574],"mapped","d"],[[8575,8575],"mapped","m"],[[8576,8578],"valid","","NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid","","NV8"],[[8585,8585],"mapped","0⁄3"],[[8586,8587],"valid","","NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid","","NV8"],[[8683,8691],"valid","","NV8"],[[8692,8703],"valid","","NV8"],[[8704,8747],"valid","","NV8"],[[8748,8748],"mapped","∫∫"],[[8749,8749],"mapped","∫∫∫"],[[8750,8750],"valid","","NV8"],[[8751,8751],"mapped","∮∮"],[[8752,8752],"mapped","∮∮∮"],[[8753,8799],"valid","","NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid","","NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid","","NV8"],[[8946,8959],"valid","","NV8"],[[8960,8960],"valid","","NV8"],[[8961,8961],"valid","","NV8"],[[8962,9000],"valid","","NV8"],[[9001,9001],"mapped","〈"],[[9002,9002],"mapped","〉"],[[9003,9082],"valid","","NV8"],[[9083,9083],"valid","","NV8"],[[9084,9084],"valid","","NV8"],[[9085,9114],"valid","","NV8"],[[9115,9166],"valid","","NV8"],[[9167,9168],"valid","","NV8"],[[9169,9179],"valid","","NV8"],[[9180,9191],"valid","","NV8"],[[9192,9192],"valid","","NV8"],[[9193,9203],"valid","","NV8"],[[9204,9210],"valid","","NV8"],[[9211,9214],"valid","","NV8"],[[9215,9215],"valid","","NV8"],[[9216,9252],"valid","","NV8"],[[9253,9254],"valid","","NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid","","NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped","1"],[[9313,9313],"mapped","2"],[[9314,9314],"mapped","3"],[[9315,9315],"mapped","4"],[[9316,9316],"mapped","5"],[[9317,9317],"mapped","6"],[[9318,9318],"mapped","7"],[[9319,9319],"mapped","8"],[[9320,9320],"mapped","9"],[[9321,9321],"mapped","10"],[[9322,9322],"mapped","11"],[[9323,9323],"mapped","12"],[[9324,9324],"mapped","13"],[[9325,9325],"mapped","14"],[[9326,9326],"mapped","15"],[[9327,9327],"mapped","16"],[[9328,9328],"mapped","17"],[[9329,9329],"mapped","18"],[[9330,9330],"mapped","19"],[[9331,9331],"mapped","20"],[[9332,9332],"disallowed_STD3_mapped","(1)"],[[9333,9333],"disallowed_STD3_mapped","(2)"],[[9334,9334],"disallowed_STD3_mapped","(3)"],[[9335,9335],"disallowed_STD3_mapped","(4)"],[[9336,9336],"disallowed_STD3_mapped","(5)"],[[9337,9337],"disallowed_STD3_mapped","(6)"],[[9338,9338],"disallowed_STD3_mapped","(7)"],[[9339,9339],"disallowed_STD3_mapped","(8)"],[[9340,9340],"disallowed_STD3_mapped","(9)"],[[9341,9341],"disallowed_STD3_mapped","(10)"],[[9342,9342],"disallowed_STD3_mapped","(11)"],[[9343,9343],"disallowed_STD3_mapped","(12)"],[[9344,9344],"disallowed_STD3_mapped","(13)"],[[9345,9345],"disallowed_STD3_mapped","(14)"],[[9346,9346],"disallowed_STD3_mapped","(15)"],[[9347,9347],"disallowed_STD3_mapped","(16)"],[[9348,9348],"disallowed_STD3_mapped","(17)"],[[9349,9349],"disallowed_STD3_mapped","(18)"],[[9350,9350],"disallowed_STD3_mapped","(19)"],[[9351,9351],"disallowed_STD3_mapped","(20)"],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped","(a)"],[[9373,9373],"disallowed_STD3_mapped","(b)"],[[9374,9374],"disallowed_STD3_mapped","(c)"],[[9375,9375],"disallowed_STD3_mapped","(d)"],[[9376,9376],"disallowed_STD3_mapped","(e)"],[[9377,9377],"disallowed_STD3_mapped","(f)"],[[9378,9378],"disallowed_STD3_mapped","(g)"],[[9379,9379],"disallowed_STD3_mapped","(h)"],[[9380,9380],"disallowed_STD3_mapped","(i)"],[[9381,9381],"disallowed_STD3_mapped","(j)"],[[9382,9382],"disallowed_STD3_mapped","(k)"],[[9383,9383],"disallowed_STD3_mapped","(l)"],[[9384,9384],"disallowed_STD3_mapped","(m)"],[[9385,9385],"disallowed_STD3_mapped","(n)"],[[9386,9386],"disallowed_STD3_mapped","(o)"],[[9387,9387],"disallowed_STD3_mapped","(p)"],[[9388,9388],"disallowed_STD3_mapped","(q)"],[[9389,9389],"disallowed_STD3_mapped","(r)"],[[9390,9390],"disallowed_STD3_mapped","(s)"],[[9391,9391],"disallowed_STD3_mapped","(t)"],[[9392,9392],"disallowed_STD3_mapped","(u)"],[[9393,9393],"disallowed_STD3_mapped","(v)"],[[9394,9394],"disallowed_STD3_mapped","(w)"],[[9395,9395],"disallowed_STD3_mapped","(x)"],[[9396,9396],"disallowed_STD3_mapped","(y)"],[[9397,9397],"disallowed_STD3_mapped","(z)"],[[9398,9398],"mapped","a"],[[9399,9399],"mapped","b"],[[9400,9400],"mapped","c"],[[9401,9401],"mapped","d"],[[9402,9402],"mapped","e"],[[9403,9403],"mapped","f"],[[9404,9404],"mapped","g"],[[9405,9405],"mapped","h"],[[9406,9406],"mapped","i"],[[9407,9407],"mapped","j"],[[9408,9408],"mapped","k"],[[9409,9409],"mapped","l"],[[9410,9410],"mapped","m"],[[9411,9411],"mapped","n"],[[9412,9412],"mapped","o"],[[9413,9413],"mapped","p"],[[9414,9414],"mapped","q"],[[9415,9415],"mapped","r"],[[9416,9416],"mapped","s"],[[9417,9417],"mapped","t"],[[9418,9418],"mapped","u"],[[9419,9419],"mapped","v"],[[9420,9420],"mapped","w"],[[9421,9421],"mapped","x"],[[9422,9422],"mapped","y"],[[9423,9423],"mapped","z"],[[9424,9424],"mapped","a"],[[9425,9425],"mapped","b"],[[9426,9426],"mapped","c"],[[9427,9427],"mapped","d"],[[9428,9428],"mapped","e"],[[9429,9429],"mapped","f"],[[9430,9430],"mapped","g"],[[9431,9431],"mapped","h"],[[9432,9432],"mapped","i"],[[9433,9433],"mapped","j"],[[9434,9434],"mapped","k"],[[9435,9435],"mapped","l"],[[9436,9436],"mapped","m"],[[9437,9437],"mapped","n"],[[9438,9438],"mapped","o"],[[9439,9439],"mapped","p"],[[9440,9440],"mapped","q"],[[9441,9441],"mapped","r"],[[9442,9442],"mapped","s"],[[9443,9443],"mapped","t"],[[9444,9444],"mapped","u"],[[9445,9445],"mapped","v"],[[9446,9446],"mapped","w"],[[9447,9447],"mapped","x"],[[9448,9448],"mapped","y"],[[9449,9449],"mapped","z"],[[9450,9450],"mapped","0"],[[9451,9470],"valid","","NV8"],[[9471,9471],"valid","","NV8"],[[9472,9621],"valid","","NV8"],[[9622,9631],"valid","","NV8"],[[9632,9711],"valid","","NV8"],[[9712,9719],"valid","","NV8"],[[9720,9727],"valid","","NV8"],[[9728,9747],"valid","","NV8"],[[9748,9749],"valid","","NV8"],[[9750,9751],"valid","","NV8"],[[9752,9752],"valid","","NV8"],[[9753,9753],"valid","","NV8"],[[9754,9839],"valid","","NV8"],[[9840,9841],"valid","","NV8"],[[9842,9853],"valid","","NV8"],[[9854,9855],"valid","","NV8"],[[9856,9865],"valid","","NV8"],[[9866,9873],"valid","","NV8"],[[9874,9884],"valid","","NV8"],[[9885,9885],"valid","","NV8"],[[9886,9887],"valid","","NV8"],[[9888,9889],"valid","","NV8"],[[9890,9905],"valid","","NV8"],[[9906,9906],"valid","","NV8"],[[9907,9916],"valid","","NV8"],[[9917,9919],"valid","","NV8"],[[9920,9923],"valid","","NV8"],[[9924,9933],"valid","","NV8"],[[9934,9934],"valid","","NV8"],[[9935,9953],"valid","","NV8"],[[9954,9954],"valid","","NV8"],[[9955,9955],"valid","","NV8"],[[9956,9959],"valid","","NV8"],[[9960,9983],"valid","","NV8"],[[9984,9984],"valid","","NV8"],[[9985,9988],"valid","","NV8"],[[9989,9989],"valid","","NV8"],[[9990,9993],"valid","","NV8"],[[9994,9995],"valid","","NV8"],[[9996,10023],"valid","","NV8"],[[10024,10024],"valid","","NV8"],[[10025,10059],"valid","","NV8"],[[10060,10060],"valid","","NV8"],[[10061,10061],"valid","","NV8"],[[10062,10062],"valid","","NV8"],[[10063,10066],"valid","","NV8"],[[10067,10069],"valid","","NV8"],[[10070,10070],"valid","","NV8"],[[10071,10071],"valid","","NV8"],[[10072,10078],"valid","","NV8"],[[10079,10080],"valid","","NV8"],[[10081,10087],"valid","","NV8"],[[10088,10101],"valid","","NV8"],[[10102,10132],"valid","","NV8"],[[10133,10135],"valid","","NV8"],[[10136,10159],"valid","","NV8"],[[10160,10160],"valid","","NV8"],[[10161,10174],"valid","","NV8"],[[10175,10175],"valid","","NV8"],[[10176,10182],"valid","","NV8"],[[10183,10186],"valid","","NV8"],[[10187,10187],"valid","","NV8"],[[10188,10188],"valid","","NV8"],[[10189,10189],"valid","","NV8"],[[10190,10191],"valid","","NV8"],[[10192,10219],"valid","","NV8"],[[10220,10223],"valid","","NV8"],[[10224,10239],"valid","","NV8"],[[10240,10495],"valid","","NV8"],[[10496,10763],"valid","","NV8"],[[10764,10764],"mapped","∫∫∫∫"],[[10765,10867],"valid","","NV8"],[[10868,10868],"disallowed_STD3_mapped","::="],[[10869,10869],"disallowed_STD3_mapped","=="],[[10870,10870],"disallowed_STD3_mapped","==="],[[10871,10971],"valid","","NV8"],[[10972,10972],"mapped","⫝̸"],[[10973,11007],"valid","","NV8"],[[11008,11021],"valid","","NV8"],[[11022,11027],"valid","","NV8"],[[11028,11034],"valid","","NV8"],[[11035,11039],"valid","","NV8"],[[11040,11043],"valid","","NV8"],[[11044,11084],"valid","","NV8"],[[11085,11087],"valid","","NV8"],[[11088,11092],"valid","","NV8"],[[11093,11097],"valid","","NV8"],[[11098,11123],"valid","","NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid","","NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid","","NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid","","NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid","","NV8"],[[11218,11218],"valid","","NV8"],[[11219,11243],"disallowed"],[[11244,11247],"valid","","NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped","ⰰ"],[[11265,11265],"mapped","ⰱ"],[[11266,11266],"mapped","ⰲ"],[[11267,11267],"mapped","ⰳ"],[[11268,11268],"mapped","ⰴ"],[[11269,11269],"mapped","ⰵ"],[[11270,11270],"mapped","ⰶ"],[[11271,11271],"mapped","ⰷ"],[[11272,11272],"mapped","ⰸ"],[[11273,11273],"mapped","ⰹ"],[[11274,11274],"mapped","ⰺ"],[[11275,11275],"mapped","ⰻ"],[[11276,11276],"mapped","ⰼ"],[[11277,11277],"mapped","ⰽ"],[[11278,11278],"mapped","ⰾ"],[[11279,11279],"mapped","ⰿ"],[[11280,11280],"mapped","ⱀ"],[[11281,11281],"mapped","ⱁ"],[[11282,11282],"mapped","ⱂ"],[[11283,11283],"mapped","ⱃ"],[[11284,11284],"mapped","ⱄ"],[[11285,11285],"mapped","ⱅ"],[[11286,11286],"mapped","ⱆ"],[[11287,11287],"mapped","ⱇ"],[[11288,11288],"mapped","ⱈ"],[[11289,11289],"mapped","ⱉ"],[[11290,11290],"mapped","ⱊ"],[[11291,11291],"mapped","ⱋ"],[[11292,11292],"mapped","ⱌ"],[[11293,11293],"mapped","ⱍ"],[[11294,11294],"mapped","ⱎ"],[[11295,11295],"mapped","ⱏ"],[[11296,11296],"mapped","ⱐ"],[[11297,11297],"mapped","ⱑ"],[[11298,11298],"mapped","ⱒ"],[[11299,11299],"mapped","ⱓ"],[[11300,11300],"mapped","ⱔ"],[[11301,11301],"mapped","ⱕ"],[[11302,11302],"mapped","ⱖ"],[[11303,11303],"mapped","ⱗ"],[[11304,11304],"mapped","ⱘ"],[[11305,11305],"mapped","ⱙ"],[[11306,11306],"mapped","ⱚ"],[[11307,11307],"mapped","ⱛ"],[[11308,11308],"mapped","ⱜ"],[[11309,11309],"mapped","ⱝ"],[[11310,11310],"mapped","ⱞ"],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped","ⱡ"],[[11361,11361],"valid"],[[11362,11362],"mapped","ɫ"],[[11363,11363],"mapped","ᵽ"],[[11364,11364],"mapped","ɽ"],[[11365,11366],"valid"],[[11367,11367],"mapped","ⱨ"],[[11368,11368],"valid"],[[11369,11369],"mapped","ⱪ"],[[11370,11370],"valid"],[[11371,11371],"mapped","ⱬ"],[[11372,11372],"valid"],[[11373,11373],"mapped","ɑ"],[[11374,11374],"mapped","ɱ"],[[11375,11375],"mapped","ɐ"],[[11376,11376],"mapped","ɒ"],[[11377,11377],"valid"],[[11378,11378],"mapped","ⱳ"],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped","ⱶ"],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped","j"],[[11389,11389],"mapped","v"],[[11390,11390],"mapped","ȿ"],[[11391,11391],"mapped","ɀ"],[[11392,11392],"mapped","ⲁ"],[[11393,11393],"valid"],[[11394,11394],"mapped","ⲃ"],[[11395,11395],"valid"],[[11396,11396],"mapped","ⲅ"],[[11397,11397],"valid"],[[11398,11398],"mapped","ⲇ"],[[11399,11399],"valid"],[[11400,11400],"mapped","ⲉ"],[[11401,11401],"valid"],[[11402,11402],"mapped","ⲋ"],[[11403,11403],"valid"],[[11404,11404],"mapped","ⲍ"],[[11405,11405],"valid"],[[11406,11406],"mapped","ⲏ"],[[11407,11407],"valid"],[[11408,11408],"mapped","ⲑ"],[[11409,11409],"valid"],[[11410,11410],"mapped","ⲓ"],[[11411,11411],"valid"],[[11412,11412],"mapped","ⲕ"],[[11413,11413],"valid"],[[11414,11414],"mapped","ⲗ"],[[11415,11415],"valid"],[[11416,11416],"mapped","ⲙ"],[[11417,11417],"valid"],[[11418,11418],"mapped","ⲛ"],[[11419,11419],"valid"],[[11420,11420],"mapped","ⲝ"],[[11421,11421],"valid"],[[11422,11422],"mapped","ⲟ"],[[11423,11423],"valid"],[[11424,11424],"mapped","ⲡ"],[[11425,11425],"valid"],[[11426,11426],"mapped","ⲣ"],[[11427,11427],"valid"],[[11428,11428],"mapped","ⲥ"],[[11429,11429],"valid"],[[11430,11430],"mapped","ⲧ"],[[11431,11431],"valid"],[[11432,11432],"mapped","ⲩ"],[[11433,11433],"valid"],[[11434,11434],"mapped","ⲫ"],[[11435,11435],"valid"],[[11436,11436],"mapped","ⲭ"],[[11437,11437],"valid"],[[11438,11438],"mapped","ⲯ"],[[11439,11439],"valid"],[[11440,11440],"mapped","ⲱ"],[[11441,11441],"valid"],[[11442,11442],"mapped","ⲳ"],[[11443,11443],"valid"],[[11444,11444],"mapped","ⲵ"],[[11445,11445],"valid"],[[11446,11446],"mapped","ⲷ"],[[11447,11447],"valid"],[[11448,11448],"mapped","ⲹ"],[[11449,11449],"valid"],[[11450,11450],"mapped","ⲻ"],[[11451,11451],"valid"],[[11452,11452],"mapped","ⲽ"],[[11453,11453],"valid"],[[11454,11454],"mapped","ⲿ"],[[11455,11455],"valid"],[[11456,11456],"mapped","ⳁ"],[[11457,11457],"valid"],[[11458,11458],"mapped","ⳃ"],[[11459,11459],"valid"],[[11460,11460],"mapped","ⳅ"],[[11461,11461],"valid"],[[11462,11462],"mapped","ⳇ"],[[11463,11463],"valid"],[[11464,11464],"mapped","ⳉ"],[[11465,11465],"valid"],[[11466,11466],"mapped","ⳋ"],[[11467,11467],"valid"],[[11468,11468],"mapped","ⳍ"],[[11469,11469],"valid"],[[11470,11470],"mapped","ⳏ"],[[11471,11471],"valid"],[[11472,11472],"mapped","ⳑ"],[[11473,11473],"valid"],[[11474,11474],"mapped","ⳓ"],[[11475,11475],"valid"],[[11476,11476],"mapped","ⳕ"],[[11477,11477],"valid"],[[11478,11478],"mapped","ⳗ"],[[11479,11479],"valid"],[[11480,11480],"mapped","ⳙ"],[[11481,11481],"valid"],[[11482,11482],"mapped","ⳛ"],[[11483,11483],"valid"],[[11484,11484],"mapped","ⳝ"],[[11485,11485],"valid"],[[11486,11486],"mapped","ⳟ"],[[11487,11487],"valid"],[[11488,11488],"mapped","ⳡ"],[[11489,11489],"valid"],[[11490,11490],"mapped","ⳣ"],[[11491,11492],"valid"],[[11493,11498],"valid","","NV8"],[[11499,11499],"mapped","ⳬ"],[[11500,11500],"valid"],[[11501,11501],"mapped","ⳮ"],[[11502,11505],"valid"],[[11506,11506],"mapped","ⳳ"],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid","","NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped","ⵡ"],[[11632,11632],"valid","","NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid","","NV8"],[[11800,11803],"valid","","NV8"],[[11804,11805],"valid","","NV8"],[[11806,11822],"valid","","NV8"],[[11823,11823],"valid"],[[11824,11824],"valid","","NV8"],[[11825,11825],"valid","","NV8"],[[11826,11835],"valid","","NV8"],[[11836,11842],"valid","","NV8"],[[11843,11844],"valid","","NV8"],[[11845,11849],"valid","","NV8"],[[11850,11903],"disallowed"],[[11904,11929],"valid","","NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid","","NV8"],[[11935,11935],"mapped","母"],[[11936,12018],"valid","","NV8"],[[12019,12019],"mapped","龟"],[[12020,12031],"disallowed"],[[12032,12032],"mapped","一"],[[12033,12033],"mapped","丨"],[[12034,12034],"mapped","丶"],[[12035,12035],"mapped","丿"],[[12036,12036],"mapped","乙"],[[12037,12037],"mapped","亅"],[[12038,12038],"mapped","二"],[[12039,12039],"mapped","亠"],[[12040,12040],"mapped","人"],[[12041,12041],"mapped","儿"],[[12042,12042],"mapped","入"],[[12043,12043],"mapped","八"],[[12044,12044],"mapped","冂"],[[12045,12045],"mapped","冖"],[[12046,12046],"mapped","冫"],[[12047,12047],"mapped","几"],[[12048,12048],"mapped","凵"],[[12049,12049],"mapped","刀"],[[12050,12050],"mapped","力"],[[12051,12051],"mapped","勹"],[[12052,12052],"mapped","匕"],[[12053,12053],"mapped","匚"],[[12054,12054],"mapped","匸"],[[12055,12055],"mapped","十"],[[12056,12056],"mapped","卜"],[[12057,12057],"mapped","卩"],[[12058,12058],"mapped","厂"],[[12059,12059],"mapped","厶"],[[12060,12060],"mapped","又"],[[12061,12061],"mapped","口"],[[12062,12062],"mapped","囗"],[[12063,12063],"mapped","土"],[[12064,12064],"mapped","士"],[[12065,12065],"mapped","夂"],[[12066,12066],"mapped","夊"],[[12067,12067],"mapped","夕"],[[12068,12068],"mapped","大"],[[12069,12069],"mapped","女"],[[12070,12070],"mapped","子"],[[12071,12071],"mapped","宀"],[[12072,12072],"mapped","寸"],[[12073,12073],"mapped","小"],[[12074,12074],"mapped","尢"],[[12075,12075],"mapped","尸"],[[12076,12076],"mapped","屮"],[[12077,12077],"mapped","山"],[[12078,12078],"mapped","巛"],[[12079,12079],"mapped","工"],[[12080,12080],"mapped","己"],[[12081,12081],"mapped","巾"],[[12082,12082],"mapped","干"],[[12083,12083],"mapped","幺"],[[12084,12084],"mapped","广"],[[12085,12085],"mapped","廴"],[[12086,12086],"mapped","廾"],[[12087,12087],"mapped","弋"],[[12088,12088],"mapped","弓"],[[12089,12089],"mapped","彐"],[[12090,12090],"mapped","彡"],[[12091,12091],"mapped","彳"],[[12092,12092],"mapped","心"],[[12093,12093],"mapped","戈"],[[12094,12094],"mapped","戶"],[[12095,12095],"mapped","手"],[[12096,12096],"mapped","支"],[[12097,12097],"mapped","攴"],[[12098,12098],"mapped","文"],[[12099,12099],"mapped","斗"],[[12100,12100],"mapped","斤"],[[12101,12101],"mapped","方"],[[12102,12102],"mapped","无"],[[12103,12103],"mapped","日"],[[12104,12104],"mapped","曰"],[[12105,12105],"mapped","月"],[[12106,12106],"mapped","木"],[[12107,12107],"mapped","欠"],[[12108,12108],"mapped","止"],[[12109,12109],"mapped","歹"],[[12110,12110],"mapped","殳"],[[12111,12111],"mapped","毋"],[[12112,12112],"mapped","比"],[[12113,12113],"mapped","毛"],[[12114,12114],"mapped","氏"],[[12115,12115],"mapped","气"],[[12116,12116],"mapped","水"],[[12117,12117],"mapped","火"],[[12118,12118],"mapped","爪"],[[12119,12119],"mapped","父"],[[12120,12120],"mapped","爻"],[[12121,12121],"mapped","爿"],[[12122,12122],"mapped","片"],[[12123,12123],"mapped","牙"],[[12124,12124],"mapped","牛"],[[12125,12125],"mapped","犬"],[[12126,12126],"mapped","玄"],[[12127,12127],"mapped","玉"],[[12128,12128],"mapped","瓜"],[[12129,12129],"mapped","瓦"],[[12130,12130],"mapped","甘"],[[12131,12131],"mapped","生"],[[12132,12132],"mapped","用"],[[12133,12133],"mapped","田"],[[12134,12134],"mapped","疋"],[[12135,12135],"mapped","疒"],[[12136,12136],"mapped","癶"],[[12137,12137],"mapped","白"],[[12138,12138],"mapped","皮"],[[12139,12139],"mapped","皿"],[[12140,12140],"mapped","目"],[[12141,12141],"mapped","矛"],[[12142,12142],"mapped","矢"],[[12143,12143],"mapped","石"],[[12144,12144],"mapped","示"],[[12145,12145],"mapped","禸"],[[12146,12146],"mapped","禾"],[[12147,12147],"mapped","穴"],[[12148,12148],"mapped","立"],[[12149,12149],"mapped","竹"],[[12150,12150],"mapped","米"],[[12151,12151],"mapped","糸"],[[12152,12152],"mapped","缶"],[[12153,12153],"mapped","网"],[[12154,12154],"mapped","羊"],[[12155,12155],"mapped","羽"],[[12156,12156],"mapped","老"],[[12157,12157],"mapped","而"],[[12158,12158],"mapped","耒"],[[12159,12159],"mapped","耳"],[[12160,12160],"mapped","聿"],[[12161,12161],"mapped","肉"],[[12162,12162],"mapped","臣"],[[12163,12163],"mapped","自"],[[12164,12164],"mapped","至"],[[12165,12165],"mapped","臼"],[[12166,12166],"mapped","舌"],[[12167,12167],"mapped","舛"],[[12168,12168],"mapped","舟"],[[12169,12169],"mapped","艮"],[[12170,12170],"mapped","色"],[[12171,12171],"mapped","艸"],[[12172,12172],"mapped","虍"],[[12173,12173],"mapped","虫"],[[12174,12174],"mapped","血"],[[12175,12175],"mapped","行"],[[12176,12176],"mapped","衣"],[[12177,12177],"mapped","襾"],[[12178,12178],"mapped","見"],[[12179,12179],"mapped","角"],[[12180,12180],"mapped","言"],[[12181,12181],"mapped","谷"],[[12182,12182],"mapped","豆"],[[12183,12183],"mapped","豕"],[[12184,12184],"mapped","豸"],[[12185,12185],"mapped","貝"],[[12186,12186],"mapped","赤"],[[12187,12187],"mapped","走"],[[12188,12188],"mapped","足"],[[12189,12189],"mapped","身"],[[12190,12190],"mapped","車"],[[12191,12191],"mapped","辛"],[[12192,12192],"mapped","辰"],[[12193,12193],"mapped","辵"],[[12194,12194],"mapped","邑"],[[12195,12195],"mapped","酉"],[[12196,12196],"mapped","釆"],[[12197,12197],"mapped","里"],[[12198,12198],"mapped","金"],[[12199,12199],"mapped","長"],[[12200,12200],"mapped","門"],[[12201,12201],"mapped","阜"],[[12202,12202],"mapped","隶"],[[12203,12203],"mapped","隹"],[[12204,12204],"mapped","雨"],[[12205,12205],"mapped","靑"],[[12206,12206],"mapped","非"],[[12207,12207],"mapped","面"],[[12208,12208],"mapped","革"],[[12209,12209],"mapped","韋"],[[12210,12210],"mapped","韭"],[[12211,12211],"mapped","音"],[[12212,12212],"mapped","頁"],[[12213,12213],"mapped","風"],[[12214,12214],"mapped","飛"],[[12215,12215],"mapped","食"],[[12216,12216],"mapped","首"],[[12217,12217],"mapped","香"],[[12218,12218],"mapped","馬"],[[12219,12219],"mapped","骨"],[[12220,12220],"mapped","高"],[[12221,12221],"mapped","髟"],[[12222,12222],"mapped","鬥"],[[12223,12223],"mapped","鬯"],[[12224,12224],"mapped","鬲"],[[12225,12225],"mapped","鬼"],[[12226,12226],"mapped","魚"],[[12227,12227],"mapped","鳥"],[[12228,12228],"mapped","鹵"],[[12229,12229],"mapped","鹿"],[[12230,12230],"mapped","麥"],[[12231,12231],"mapped","麻"],[[12232,12232],"mapped","黃"],[[12233,12233],"mapped","黍"],[[12234,12234],"mapped","黑"],[[12235,12235],"mapped","黹"],[[12236,12236],"mapped","黽"],[[12237,12237],"mapped","鼎"],[[12238,12238],"mapped","鼓"],[[12239,12239],"mapped","鼠"],[[12240,12240],"mapped","鼻"],[[12241,12241],"mapped","齊"],[[12242,12242],"mapped","齒"],[[12243,12243],"mapped","龍"],[[12244,12244],"mapped","龜"],[[12245,12245],"mapped","龠"],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped"," "],[[12289,12289],"valid","","NV8"],[[12290,12290],"mapped","."],[[12291,12292],"valid","","NV8"],[[12293,12295],"valid"],[[12296,12329],"valid","","NV8"],[[12330,12333],"valid"],[[12334,12341],"valid","","NV8"],[[12342,12342],"mapped","〒"],[[12343,12343],"valid","","NV8"],[[12344,12344],"mapped","十"],[[12345,12345],"mapped","卄"],[[12346,12346],"mapped","卅"],[[12347,12347],"valid","","NV8"],[[12348,12348],"valid"],[[12349,12349],"valid","","NV8"],[[12350,12350],"valid","","NV8"],[[12351,12351],"valid","","NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped"," ゙"],[[12444,12444],"disallowed_STD3_mapped"," ゚"],[[12445,12446],"valid"],[[12447,12447],"mapped","より"],[[12448,12448],"valid","","NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped","コト"],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12590],"valid"],[[12591,12592],"disallowed"],[[12593,12593],"mapped","ᄀ"],[[12594,12594],"mapped","ᄁ"],[[12595,12595],"mapped","ᆪ"],[[12596,12596],"mapped","ᄂ"],[[12597,12597],"mapped","ᆬ"],[[12598,12598],"mapped","ᆭ"],[[12599,12599],"mapped","ᄃ"],[[12600,12600],"mapped","ᄄ"],[[12601,12601],"mapped","ᄅ"],[[12602,12602],"mapped","ᆰ"],[[12603,12603],"mapped","ᆱ"],[[12604,12604],"mapped","ᆲ"],[[12605,12605],"mapped","ᆳ"],[[12606,12606],"mapped","ᆴ"],[[12607,12607],"mapped","ᆵ"],[[12608,12608],"mapped","ᄚ"],[[12609,12609],"mapped","ᄆ"],[[12610,12610],"mapped","ᄇ"],[[12611,12611],"mapped","ᄈ"],[[12612,12612],"mapped","ᄡ"],[[12613,12613],"mapped","ᄉ"],[[12614,12614],"mapped","ᄊ"],[[12615,12615],"mapped","ᄋ"],[[12616,12616],"mapped","ᄌ"],[[12617,12617],"mapped","ᄍ"],[[12618,12618],"mapped","ᄎ"],[[12619,12619],"mapped","ᄏ"],[[12620,12620],"mapped","ᄐ"],[[12621,12621],"mapped","ᄑ"],[[12622,12622],"mapped","ᄒ"],[[12623,12623],"mapped","ᅡ"],[[12624,12624],"mapped","ᅢ"],[[12625,12625],"mapped","ᅣ"],[[12626,12626],"mapped","ᅤ"],[[12627,12627],"mapped","ᅥ"],[[12628,12628],"mapped","ᅦ"],[[12629,12629],"mapped","ᅧ"],[[12630,12630],"mapped","ᅨ"],[[12631,12631],"mapped","ᅩ"],[[12632,12632],"mapped","ᅪ"],[[12633,12633],"mapped","ᅫ"],[[12634,12634],"mapped","ᅬ"],[[12635,12635],"mapped","ᅭ"],[[12636,12636],"mapped","ᅮ"],[[12637,12637],"mapped","ᅯ"],[[12638,12638],"mapped","ᅰ"],[[12639,12639],"mapped","ᅱ"],[[12640,12640],"mapped","ᅲ"],[[12641,12641],"mapped","ᅳ"],[[12642,12642],"mapped","ᅴ"],[[12643,12643],"mapped","ᅵ"],[[12644,12644],"disallowed"],[[12645,12645],"mapped","ᄔ"],[[12646,12646],"mapped","ᄕ"],[[12647,12647],"mapped","ᇇ"],[[12648,12648],"mapped","ᇈ"],[[12649,12649],"mapped","ᇌ"],[[12650,12650],"mapped","ᇎ"],[[12651,12651],"mapped","ᇓ"],[[12652,12652],"mapped","ᇗ"],[[12653,12653],"mapped","ᇙ"],[[12654,12654],"mapped","ᄜ"],[[12655,12655],"mapped","ᇝ"],[[12656,12656],"mapped","ᇟ"],[[12657,12657],"mapped","ᄝ"],[[12658,12658],"mapped","ᄞ"],[[12659,12659],"mapped","ᄠ"],[[12660,12660],"mapped","ᄢ"],[[12661,12661],"mapped","ᄣ"],[[12662,12662],"mapped","ᄧ"],[[12663,12663],"mapped","ᄩ"],[[12664,12664],"mapped","ᄫ"],[[12665,12665],"mapped","ᄬ"],[[12666,12666],"mapped","ᄭ"],[[12667,12667],"mapped","ᄮ"],[[12668,12668],"mapped","ᄯ"],[[12669,12669],"mapped","ᄲ"],[[12670,12670],"mapped","ᄶ"],[[12671,12671],"mapped","ᅀ"],[[12672,12672],"mapped","ᅇ"],[[12673,12673],"mapped","ᅌ"],[[12674,12674],"mapped","ᇱ"],[[12675,12675],"mapped","ᇲ"],[[12676,12676],"mapped","ᅗ"],[[12677,12677],"mapped","ᅘ"],[[12678,12678],"mapped","ᅙ"],[[12679,12679],"mapped","ᆄ"],[[12680,12680],"mapped","ᆅ"],[[12681,12681],"mapped","ᆈ"],[[12682,12682],"mapped","ᆑ"],[[12683,12683],"mapped","ᆒ"],[[12684,12684],"mapped","ᆔ"],[[12685,12685],"mapped","ᆞ"],[[12686,12686],"mapped","ᆡ"],[[12687,12687],"disallowed"],[[12688,12689],"valid","","NV8"],[[12690,12690],"mapped","一"],[[12691,12691],"mapped","二"],[[12692,12692],"mapped","三"],[[12693,12693],"mapped","四"],[[12694,12694],"mapped","上"],[[12695,12695],"mapped","中"],[[12696,12696],"mapped","下"],[[12697,12697],"mapped","甲"],[[12698,12698],"mapped","乙"],[[12699,12699],"mapped","丙"],[[12700,12700],"mapped","丁"],[[12701,12701],"mapped","天"],[[12702,12702],"mapped","地"],[[12703,12703],"mapped","人"],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid","","NV8"],[[12752,12771],"valid","","NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped","(ᄀ)"],[[12801,12801],"disallowed_STD3_mapped","(ᄂ)"],[[12802,12802],"disallowed_STD3_mapped","(ᄃ)"],[[12803,12803],"disallowed_STD3_mapped","(ᄅ)"],[[12804,12804],"disallowed_STD3_mapped","(ᄆ)"],[[12805,12805],"disallowed_STD3_mapped","(ᄇ)"],[[12806,12806],"disallowed_STD3_mapped","(ᄉ)"],[[12807,12807],"disallowed_STD3_mapped","(ᄋ)"],[[12808,12808],"disallowed_STD3_mapped","(ᄌ)"],[[12809,12809],"disallowed_STD3_mapped","(ᄎ)"],[[12810,12810],"disallowed_STD3_mapped","(ᄏ)"],[[12811,12811],"disallowed_STD3_mapped","(ᄐ)"],[[12812,12812],"disallowed_STD3_mapped","(ᄑ)"],[[12813,12813],"disallowed_STD3_mapped","(ᄒ)"],[[12814,12814],"disallowed_STD3_mapped","(가)"],[[12815,12815],"disallowed_STD3_mapped","(나)"],[[12816,12816],"disallowed_STD3_mapped","(다)"],[[12817,12817],"disallowed_STD3_mapped","(라)"],[[12818,12818],"disallowed_STD3_mapped","(마)"],[[12819,12819],"disallowed_STD3_mapped","(바)"],[[12820,12820],"disallowed_STD3_mapped","(사)"],[[12821,12821],"disallowed_STD3_mapped","(아)"],[[12822,12822],"disallowed_STD3_mapped","(자)"],[[12823,12823],"disallowed_STD3_mapped","(차)"],[[12824,12824],"disallowed_STD3_mapped","(카)"],[[12825,12825],"disallowed_STD3_mapped","(타)"],[[12826,12826],"disallowed_STD3_mapped","(파)"],[[12827,12827],"disallowed_STD3_mapped","(하)"],[[12828,12828],"disallowed_STD3_mapped","(주)"],[[12829,12829],"disallowed_STD3_mapped","(오전)"],[[12830,12830],"disallowed_STD3_mapped","(오후)"],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped","(一)"],[[12833,12833],"disallowed_STD3_mapped","(二)"],[[12834,12834],"disallowed_STD3_mapped","(三)"],[[12835,12835],"disallowed_STD3_mapped","(四)"],[[12836,12836],"disallowed_STD3_mapped","(五)"],[[12837,12837],"disallowed_STD3_mapped","(六)"],[[12838,12838],"disallowed_STD3_mapped","(七)"],[[12839,12839],"disallowed_STD3_mapped","(八)"],[[12840,12840],"disallowed_STD3_mapped","(九)"],[[12841,12841],"disallowed_STD3_mapped","(十)"],[[12842,12842],"disallowed_STD3_mapped","(月)"],[[12843,12843],"disallowed_STD3_mapped","(火)"],[[12844,12844],"disallowed_STD3_mapped","(水)"],[[12845,12845],"disallowed_STD3_mapped","(木)"],[[12846,12846],"disallowed_STD3_mapped","(金)"],[[12847,12847],"disallowed_STD3_mapped","(土)"],[[12848,12848],"disallowed_STD3_mapped","(日)"],[[12849,12849],"disallowed_STD3_mapped","(株)"],[[12850,12850],"disallowed_STD3_mapped","(有)"],[[12851,12851],"disallowed_STD3_mapped","(社)"],[[12852,12852],"disallowed_STD3_mapped","(名)"],[[12853,12853],"disallowed_STD3_mapped","(特)"],[[12854,12854],"disallowed_STD3_mapped","(財)"],[[12855,12855],"disallowed_STD3_mapped","(祝)"],[[12856,12856],"disallowed_STD3_mapped","(労)"],[[12857,12857],"disallowed_STD3_mapped","(代)"],[[12858,12858],"disallowed_STD3_mapped","(呼)"],[[12859,12859],"disallowed_STD3_mapped","(学)"],[[12860,12860],"disallowed_STD3_mapped","(監)"],[[12861,12861],"disallowed_STD3_mapped","(企)"],[[12862,12862],"disallowed_STD3_mapped","(資)"],[[12863,12863],"disallowed_STD3_mapped","(協)"],[[12864,12864],"disallowed_STD3_mapped","(祭)"],[[12865,12865],"disallowed_STD3_mapped","(休)"],[[12866,12866],"disallowed_STD3_mapped","(自)"],[[12867,12867],"disallowed_STD3_mapped","(至)"],[[12868,12868],"mapped","問"],[[12869,12869],"mapped","幼"],[[12870,12870],"mapped","文"],[[12871,12871],"mapped","箏"],[[12872,12879],"valid","","NV8"],[[12880,12880],"mapped","pte"],[[12881,12881],"mapped","21"],[[12882,12882],"mapped","22"],[[12883,12883],"mapped","23"],[[12884,12884],"mapped","24"],[[12885,12885],"mapped","25"],[[12886,12886],"mapped","26"],[[12887,12887],"mapped","27"],[[12888,12888],"mapped","28"],[[12889,12889],"mapped","29"],[[12890,12890],"mapped","30"],[[12891,12891],"mapped","31"],[[12892,12892],"mapped","32"],[[12893,12893],"mapped","33"],[[12894,12894],"mapped","34"],[[12895,12895],"mapped","35"],[[12896,12896],"mapped","ᄀ"],[[12897,12897],"mapped","ᄂ"],[[12898,12898],"mapped","ᄃ"],[[12899,12899],"mapped","ᄅ"],[[12900,12900],"mapped","ᄆ"],[[12901,12901],"mapped","ᄇ"],[[12902,12902],"mapped","ᄉ"],[[12903,12903],"mapped","ᄋ"],[[12904,12904],"mapped","ᄌ"],[[12905,12905],"mapped","ᄎ"],[[12906,12906],"mapped","ᄏ"],[[12907,12907],"mapped","ᄐ"],[[12908,12908],"mapped","ᄑ"],[[12909,12909],"mapped","ᄒ"],[[12910,12910],"mapped","가"],[[12911,12911],"mapped","나"],[[12912,12912],"mapped","다"],[[12913,12913],"mapped","라"],[[12914,12914],"mapped","마"],[[12915,12915],"mapped","바"],[[12916,12916],"mapped","사"],[[12917,12917],"mapped","아"],[[12918,12918],"mapped","자"],[[12919,12919],"mapped","차"],[[12920,12920],"mapped","카"],[[12921,12921],"mapped","타"],[[12922,12922],"mapped","파"],[[12923,12923],"mapped","하"],[[12924,12924],"mapped","참고"],[[12925,12925],"mapped","주의"],[[12926,12926],"mapped","우"],[[12927,12927],"valid","","NV8"],[[12928,12928],"mapped","一"],[[12929,12929],"mapped","二"],[[12930,12930],"mapped","三"],[[12931,12931],"mapped","四"],[[12932,12932],"mapped","五"],[[12933,12933],"mapped","六"],[[12934,12934],"mapped","七"],[[12935,12935],"mapped","八"],[[12936,12936],"mapped","九"],[[12937,12937],"mapped","十"],[[12938,12938],"mapped","月"],[[12939,12939],"mapped","火"],[[12940,12940],"mapped","水"],[[12941,12941],"mapped","木"],[[12942,12942],"mapped","金"],[[12943,12943],"mapped","土"],[[12944,12944],"mapped","日"],[[12945,12945],"mapped","株"],[[12946,12946],"mapped","有"],[[12947,12947],"mapped","社"],[[12948,12948],"mapped","名"],[[12949,12949],"mapped","特"],[[12950,12950],"mapped","財"],[[12951,12951],"mapped","祝"],[[12952,12952],"mapped","労"],[[12953,12953],"mapped","秘"],[[12954,12954],"mapped","男"],[[12955,12955],"mapped","女"],[[12956,12956],"mapped","適"],[[12957,12957],"mapped","優"],[[12958,12958],"mapped","印"],[[12959,12959],"mapped","注"],[[12960,12960],"mapped","項"],[[12961,12961],"mapped","休"],[[12962,12962],"mapped","写"],[[12963,12963],"mapped","正"],[[12964,12964],"mapped","上"],[[12965,12965],"mapped","中"],[[12966,12966],"mapped","下"],[[12967,12967],"mapped","左"],[[12968,12968],"mapped","右"],[[12969,12969],"mapped","医"],[[12970,12970],"mapped","宗"],[[12971,12971],"mapped","学"],[[12972,12972],"mapped","監"],[[12973,12973],"mapped","企"],[[12974,12974],"mapped","資"],[[12975,12975],"mapped","協"],[[12976,12976],"mapped","夜"],[[12977,12977],"mapped","36"],[[12978,12978],"mapped","37"],[[12979,12979],"mapped","38"],[[12980,12980],"mapped","39"],[[12981,12981],"mapped","40"],[[12982,12982],"mapped","41"],[[12983,12983],"mapped","42"],[[12984,12984],"mapped","43"],[[12985,12985],"mapped","44"],[[12986,12986],"mapped","45"],[[12987,12987],"mapped","46"],[[12988,12988],"mapped","47"],[[12989,12989],"mapped","48"],[[12990,12990],"mapped","49"],[[12991,12991],"mapped","50"],[[12992,12992],"mapped","1月"],[[12993,12993],"mapped","2月"],[[12994,12994],"mapped","3月"],[[12995,12995],"mapped","4月"],[[12996,12996],"mapped","5月"],[[12997,12997],"mapped","6月"],[[12998,12998],"mapped","7月"],[[12999,12999],"mapped","8月"],[[13000,13000],"mapped","9月"],[[13001,13001],"mapped","10月"],[[13002,13002],"mapped","11月"],[[13003,13003],"mapped","12月"],[[13004,13004],"mapped","hg"],[[13005,13005],"mapped","erg"],[[13006,13006],"mapped","ev"],[[13007,13007],"mapped","ltd"],[[13008,13008],"mapped","ア"],[[13009,13009],"mapped","イ"],[[13010,13010],"mapped","ウ"],[[13011,13011],"mapped","エ"],[[13012,13012],"mapped","オ"],[[13013,13013],"mapped","カ"],[[13014,13014],"mapped","キ"],[[13015,13015],"mapped","ク"],[[13016,13016],"mapped","ケ"],[[13017,13017],"mapped","コ"],[[13018,13018],"mapped","サ"],[[13019,13019],"mapped","シ"],[[13020,13020],"mapped","ス"],[[13021,13021],"mapped","セ"],[[13022,13022],"mapped","ソ"],[[13023,13023],"mapped","タ"],[[13024,13024],"mapped","チ"],[[13025,13025],"mapped","ツ"],[[13026,13026],"mapped","テ"],[[13027,13027],"mapped","ト"],[[13028,13028],"mapped","ナ"],[[13029,13029],"mapped","ニ"],[[13030,13030],"mapped","ヌ"],[[13031,13031],"mapped","ネ"],[[13032,13032],"mapped","ノ"],[[13033,13033],"mapped","ハ"],[[13034,13034],"mapped","ヒ"],[[13035,13035],"mapped","フ"],[[13036,13036],"mapped","ヘ"],[[13037,13037],"mapped","ホ"],[[13038,13038],"mapped","マ"],[[13039,13039],"mapped","ミ"],[[13040,13040],"mapped","ム"],[[13041,13041],"mapped","メ"],[[13042,13042],"mapped","モ"],[[13043,13043],"mapped","ヤ"],[[13044,13044],"mapped","ユ"],[[13045,13045],"mapped","ヨ"],[[13046,13046],"mapped","ラ"],[[13047,13047],"mapped","リ"],[[13048,13048],"mapped","ル"],[[13049,13049],"mapped","レ"],[[13050,13050],"mapped","ロ"],[[13051,13051],"mapped","ワ"],[[13052,13052],"mapped","ヰ"],[[13053,13053],"mapped","ヱ"],[[13054,13054],"mapped","ヲ"],[[13055,13055],"disallowed"],[[13056,13056],"mapped","アパート"],[[13057,13057],"mapped","アルファ"],[[13058,13058],"mapped","アンペア"],[[13059,13059],"mapped","アール"],[[13060,13060],"mapped","イニング"],[[13061,13061],"mapped","インチ"],[[13062,13062],"mapped","ウォン"],[[13063,13063],"mapped","エスクード"],[[13064,13064],"mapped","エーカー"],[[13065,13065],"mapped","オンス"],[[13066,13066],"mapped","オーム"],[[13067,13067],"mapped","カイリ"],[[13068,13068],"mapped","カラット"],[[13069,13069],"mapped","カロリー"],[[13070,13070],"mapped","ガロン"],[[13071,13071],"mapped","ガンマ"],[[13072,13072],"mapped","ギガ"],[[13073,13073],"mapped","ギニー"],[[13074,13074],"mapped","キュリー"],[[13075,13075],"mapped","ギルダー"],[[13076,13076],"mapped","キロ"],[[13077,13077],"mapped","キログラム"],[[13078,13078],"mapped","キロメートル"],[[13079,13079],"mapped","キロワット"],[[13080,13080],"mapped","グラム"],[[13081,13081],"mapped","グラムトン"],[[13082,13082],"mapped","クルゼイロ"],[[13083,13083],"mapped","クローネ"],[[13084,13084],"mapped","ケース"],[[13085,13085],"mapped","コルナ"],[[13086,13086],"mapped","コーポ"],[[13087,13087],"mapped","サイクル"],[[13088,13088],"mapped","サンチーム"],[[13089,13089],"mapped","シリング"],[[13090,13090],"mapped","センチ"],[[13091,13091],"mapped","セント"],[[13092,13092],"mapped","ダース"],[[13093,13093],"mapped","デシ"],[[13094,13094],"mapped","ドル"],[[13095,13095],"mapped","トン"],[[13096,13096],"mapped","ナノ"],[[13097,13097],"mapped","ノット"],[[13098,13098],"mapped","ハイツ"],[[13099,13099],"mapped","パーセント"],[[13100,13100],"mapped","パーツ"],[[13101,13101],"mapped","バーレル"],[[13102,13102],"mapped","ピアストル"],[[13103,13103],"mapped","ピクル"],[[13104,13104],"mapped","ピコ"],[[13105,13105],"mapped","ビル"],[[13106,13106],"mapped","ファラッド"],[[13107,13107],"mapped","フィート"],[[13108,13108],"mapped","ブッシェル"],[[13109,13109],"mapped","フラン"],[[13110,13110],"mapped","ヘクタール"],[[13111,13111],"mapped","ペソ"],[[13112,13112],"mapped","ペニヒ"],[[13113,13113],"mapped","ヘルツ"],[[13114,13114],"mapped","ペンス"],[[13115,13115],"mapped","ページ"],[[13116,13116],"mapped","ベータ"],[[13117,13117],"mapped","ポイント"],[[13118,13118],"mapped","ボルト"],[[13119,13119],"mapped","ホン"],[[13120,13120],"mapped","ポンド"],[[13121,13121],"mapped","ホール"],[[13122,13122],"mapped","ホーン"],[[13123,13123],"mapped","マイクロ"],[[13124,13124],"mapped","マイル"],[[13125,13125],"mapped","マッハ"],[[13126,13126],"mapped","マルク"],[[13127,13127],"mapped","マンション"],[[13128,13128],"mapped","ミクロン"],[[13129,13129],"mapped","ミリ"],[[13130,13130],"mapped","ミリバール"],[[13131,13131],"mapped","メガ"],[[13132,13132],"mapped","メガトン"],[[13133,13133],"mapped","メートル"],[[13134,13134],"mapped","ヤード"],[[13135,13135],"mapped","ヤール"],[[13136,13136],"mapped","ユアン"],[[13137,13137],"mapped","リットル"],[[13138,13138],"mapped","リラ"],[[13139,13139],"mapped","ルピー"],[[13140,13140],"mapped","ルーブル"],[[13141,13141],"mapped","レム"],[[13142,13142],"mapped","レントゲン"],[[13143,13143],"mapped","ワット"],[[13144,13144],"mapped","0点"],[[13145,13145],"mapped","1点"],[[13146,13146],"mapped","2点"],[[13147,13147],"mapped","3点"],[[13148,13148],"mapped","4点"],[[13149,13149],"mapped","5点"],[[13150,13150],"mapped","6点"],[[13151,13151],"mapped","7点"],[[13152,13152],"mapped","8点"],[[13153,13153],"mapped","9点"],[[13154,13154],"mapped","10点"],[[13155,13155],"mapped","11点"],[[13156,13156],"mapped","12点"],[[13157,13157],"mapped","13点"],[[13158,13158],"mapped","14点"],[[13159,13159],"mapped","15点"],[[13160,13160],"mapped","16点"],[[13161,13161],"mapped","17点"],[[13162,13162],"mapped","18点"],[[13163,13163],"mapped","19点"],[[13164,13164],"mapped","20点"],[[13165,13165],"mapped","21点"],[[13166,13166],"mapped","22点"],[[13167,13167],"mapped","23点"],[[13168,13168],"mapped","24点"],[[13169,13169],"mapped","hpa"],[[13170,13170],"mapped","da"],[[13171,13171],"mapped","au"],[[13172,13172],"mapped","bar"],[[13173,13173],"mapped","ov"],[[13174,13174],"mapped","pc"],[[13175,13175],"mapped","dm"],[[13176,13176],"mapped","dm2"],[[13177,13177],"mapped","dm3"],[[13178,13178],"mapped","iu"],[[13179,13179],"mapped","平成"],[[13180,13180],"mapped","昭和"],[[13181,13181],"mapped","大正"],[[13182,13182],"mapped","明治"],[[13183,13183],"mapped","株式会社"],[[13184,13184],"mapped","pa"],[[13185,13185],"mapped","na"],[[13186,13186],"mapped","μa"],[[13187,13187],"mapped","ma"],[[13188,13188],"mapped","ka"],[[13189,13189],"mapped","kb"],[[13190,13190],"mapped","mb"],[[13191,13191],"mapped","gb"],[[13192,13192],"mapped","cal"],[[13193,13193],"mapped","kcal"],[[13194,13194],"mapped","pf"],[[13195,13195],"mapped","nf"],[[13196,13196],"mapped","μf"],[[13197,13197],"mapped","μg"],[[13198,13198],"mapped","mg"],[[13199,13199],"mapped","kg"],[[13200,13200],"mapped","hz"],[[13201,13201],"mapped","khz"],[[13202,13202],"mapped","mhz"],[[13203,13203],"mapped","ghz"],[[13204,13204],"mapped","thz"],[[13205,13205],"mapped","μl"],[[13206,13206],"mapped","ml"],[[13207,13207],"mapped","dl"],[[13208,13208],"mapped","kl"],[[13209,13209],"mapped","fm"],[[13210,13210],"mapped","nm"],[[13211,13211],"mapped","μm"],[[13212,13212],"mapped","mm"],[[13213,13213],"mapped","cm"],[[13214,13214],"mapped","km"],[[13215,13215],"mapped","mm2"],[[13216,13216],"mapped","cm2"],[[13217,13217],"mapped","m2"],[[13218,13218],"mapped","km2"],[[13219,13219],"mapped","mm3"],[[13220,13220],"mapped","cm3"],[[13221,13221],"mapped","m3"],[[13222,13222],"mapped","km3"],[[13223,13223],"mapped","m∕s"],[[13224,13224],"mapped","m∕s2"],[[13225,13225],"mapped","pa"],[[13226,13226],"mapped","kpa"],[[13227,13227],"mapped","mpa"],[[13228,13228],"mapped","gpa"],[[13229,13229],"mapped","rad"],[[13230,13230],"mapped","rad∕s"],[[13231,13231],"mapped","rad∕s2"],[[13232,13232],"mapped","ps"],[[13233,13233],"mapped","ns"],[[13234,13234],"mapped","μs"],[[13235,13235],"mapped","ms"],[[13236,13236],"mapped","pv"],[[13237,13237],"mapped","nv"],[[13238,13238],"mapped","μv"],[[13239,13239],"mapped","mv"],[[13240,13240],"mapped","kv"],[[13241,13241],"mapped","mv"],[[13242,13242],"mapped","pw"],[[13243,13243],"mapped","nw"],[[13244,13244],"mapped","μw"],[[13245,13245],"mapped","mw"],[[13246,13246],"mapped","kw"],[[13247,13247],"mapped","mw"],[[13248,13248],"mapped","kω"],[[13249,13249],"mapped","mω"],[[13250,13250],"disallowed"],[[13251,13251],"mapped","bq"],[[13252,13252],"mapped","cc"],[[13253,13253],"mapped","cd"],[[13254,13254],"mapped","c∕kg"],[[13255,13255],"disallowed"],[[13256,13256],"mapped","db"],[[13257,13257],"mapped","gy"],[[13258,13258],"mapped","ha"],[[13259,13259],"mapped","hp"],[[13260,13260],"mapped","in"],[[13261,13261],"mapped","kk"],[[13262,13262],"mapped","km"],[[13263,13263],"mapped","kt"],[[13264,13264],"mapped","lm"],[[13265,13265],"mapped","ln"],[[13266,13266],"mapped","log"],[[13267,13267],"mapped","lx"],[[13268,13268],"mapped","mb"],[[13269,13269],"mapped","mil"],[[13270,13270],"mapped","mol"],[[13271,13271],"mapped","ph"],[[13272,13272],"disallowed"],[[13273,13273],"mapped","ppm"],[[13274,13274],"mapped","pr"],[[13275,13275],"mapped","sr"],[[13276,13276],"mapped","sv"],[[13277,13277],"mapped","wb"],[[13278,13278],"mapped","v∕m"],[[13279,13279],"mapped","a∕m"],[[13280,13280],"mapped","1日"],[[13281,13281],"mapped","2日"],[[13282,13282],"mapped","3日"],[[13283,13283],"mapped","4日"],[[13284,13284],"mapped","5日"],[[13285,13285],"mapped","6日"],[[13286,13286],"mapped","7日"],[[13287,13287],"mapped","8日"],[[13288,13288],"mapped","9日"],[[13289,13289],"mapped","10日"],[[13290,13290],"mapped","11日"],[[13291,13291],"mapped","12日"],[[13292,13292],"mapped","13日"],[[13293,13293],"mapped","14日"],[[13294,13294],"mapped","15日"],[[13295,13295],"mapped","16日"],[[13296,13296],"mapped","17日"],[[13297,13297],"mapped","18日"],[[13298,13298],"mapped","19日"],[[13299,13299],"mapped","20日"],[[13300,13300],"mapped","21日"],[[13301,13301],"mapped","22日"],[[13302,13302],"mapped","23日"],[[13303,13303],"mapped","24日"],[[13304,13304],"mapped","25日"],[[13305,13305],"mapped","26日"],[[13306,13306],"mapped","27日"],[[13307,13307],"mapped","28日"],[[13308,13308],"mapped","29日"],[[13309,13309],"mapped","30日"],[[13310,13310],"mapped","31日"],[[13311,13311],"mapped","gal"],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid","","NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40938],"valid"],[[40939,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid","","NV8"],[[42146,42147],"valid","","NV8"],[[42148,42163],"valid","","NV8"],[[42164,42164],"valid","","NV8"],[[42165,42176],"valid","","NV8"],[[42177,42177],"valid","","NV8"],[[42178,42180],"valid","","NV8"],[[42181,42181],"valid","","NV8"],[[42182,42182],"valid","","NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid","","NV8"],[[42240,42508],"valid"],[[42509,42511],"valid","","NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped","ꙁ"],[[42561,42561],"valid"],[[42562,42562],"mapped","ꙃ"],[[42563,42563],"valid"],[[42564,42564],"mapped","ꙅ"],[[42565,42565],"valid"],[[42566,42566],"mapped","ꙇ"],[[42567,42567],"valid"],[[42568,42568],"mapped","ꙉ"],[[42569,42569],"valid"],[[42570,42570],"mapped","ꙋ"],[[42571,42571],"valid"],[[42572,42572],"mapped","ꙍ"],[[42573,42573],"valid"],[[42574,42574],"mapped","ꙏ"],[[42575,42575],"valid"],[[42576,42576],"mapped","ꙑ"],[[42577,42577],"valid"],[[42578,42578],"mapped","ꙓ"],[[42579,42579],"valid"],[[42580,42580],"mapped","ꙕ"],[[42581,42581],"valid"],[[42582,42582],"mapped","ꙗ"],[[42583,42583],"valid"],[[42584,42584],"mapped","ꙙ"],[[42585,42585],"valid"],[[42586,42586],"mapped","ꙛ"],[[42587,42587],"valid"],[[42588,42588],"mapped","ꙝ"],[[42589,42589],"valid"],[[42590,42590],"mapped","ꙟ"],[[42591,42591],"valid"],[[42592,42592],"mapped","ꙡ"],[[42593,42593],"valid"],[[42594,42594],"mapped","ꙣ"],[[42595,42595],"valid"],[[42596,42596],"mapped","ꙥ"],[[42597,42597],"valid"],[[42598,42598],"mapped","ꙧ"],[[42599,42599],"valid"],[[42600,42600],"mapped","ꙩ"],[[42601,42601],"valid"],[[42602,42602],"mapped","ꙫ"],[[42603,42603],"valid"],[[42604,42604],"mapped","ꙭ"],[[42605,42607],"valid"],[[42608,42611],"valid","","NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid","","NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped","ꚁ"],[[42625,42625],"valid"],[[42626,42626],"mapped","ꚃ"],[[42627,42627],"valid"],[[42628,42628],"mapped","ꚅ"],[[42629,42629],"valid"],[[42630,42630],"mapped","ꚇ"],[[42631,42631],"valid"],[[42632,42632],"mapped","ꚉ"],[[42633,42633],"valid"],[[42634,42634],"mapped","ꚋ"],[[42635,42635],"valid"],[[42636,42636],"mapped","ꚍ"],[[42637,42637],"valid"],[[42638,42638],"mapped","ꚏ"],[[42639,42639],"valid"],[[42640,42640],"mapped","ꚑ"],[[42641,42641],"valid"],[[42642,42642],"mapped","ꚓ"],[[42643,42643],"valid"],[[42644,42644],"mapped","ꚕ"],[[42645,42645],"valid"],[[42646,42646],"mapped","ꚗ"],[[42647,42647],"valid"],[[42648,42648],"mapped","ꚙ"],[[42649,42649],"valid"],[[42650,42650],"mapped","ꚛ"],[[42651,42651],"valid"],[[42652,42652],"mapped","ъ"],[[42653,42653],"mapped","ь"],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid","","NV8"],[[42736,42737],"valid"],[[42738,42743],"valid","","NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid","","NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid","","NV8"],[[42786,42786],"mapped","ꜣ"],[[42787,42787],"valid"],[[42788,42788],"mapped","ꜥ"],[[42789,42789],"valid"],[[42790,42790],"mapped","ꜧ"],[[42791,42791],"valid"],[[42792,42792],"mapped","ꜩ"],[[42793,42793],"valid"],[[42794,42794],"mapped","ꜫ"],[[42795,42795],"valid"],[[42796,42796],"mapped","ꜭ"],[[42797,42797],"valid"],[[42798,42798],"mapped","ꜯ"],[[42799,42801],"valid"],[[42802,42802],"mapped","ꜳ"],[[42803,42803],"valid"],[[42804,42804],"mapped","ꜵ"],[[42805,42805],"valid"],[[42806,42806],"mapped","ꜷ"],[[42807,42807],"valid"],[[42808,42808],"mapped","ꜹ"],[[42809,42809],"valid"],[[42810,42810],"mapped","ꜻ"],[[42811,42811],"valid"],[[42812,42812],"mapped","ꜽ"],[[42813,42813],"valid"],[[42814,42814],"mapped","ꜿ"],[[42815,42815],"valid"],[[42816,42816],"mapped","ꝁ"],[[42817,42817],"valid"],[[42818,42818],"mapped","ꝃ"],[[42819,42819],"valid"],[[42820,42820],"mapped","ꝅ"],[[42821,42821],"valid"],[[42822,42822],"mapped","ꝇ"],[[42823,42823],"valid"],[[42824,42824],"mapped","ꝉ"],[[42825,42825],"valid"],[[42826,42826],"mapped","ꝋ"],[[42827,42827],"valid"],[[42828,42828],"mapped","ꝍ"],[[42829,42829],"valid"],[[42830,42830],"mapped","ꝏ"],[[42831,42831],"valid"],[[42832,42832],"mapped","ꝑ"],[[42833,42833],"valid"],[[42834,42834],"mapped","ꝓ"],[[42835,42835],"valid"],[[42836,42836],"mapped","ꝕ"],[[42837,42837],"valid"],[[42838,42838],"mapped","ꝗ"],[[42839,42839],"valid"],[[42840,42840],"mapped","ꝙ"],[[42841,42841],"valid"],[[42842,42842],"mapped","ꝛ"],[[42843,42843],"valid"],[[42844,42844],"mapped","ꝝ"],[[42845,42845],"valid"],[[42846,42846],"mapped","ꝟ"],[[42847,42847],"valid"],[[42848,42848],"mapped","ꝡ"],[[42849,42849],"valid"],[[42850,42850],"mapped","ꝣ"],[[42851,42851],"valid"],[[42852,42852],"mapped","ꝥ"],[[42853,42853],"valid"],[[42854,42854],"mapped","ꝧ"],[[42855,42855],"valid"],[[42856,42856],"mapped","ꝩ"],[[42857,42857],"valid"],[[42858,42858],"mapped","ꝫ"],[[42859,42859],"valid"],[[42860,42860],"mapped","ꝭ"],[[42861,42861],"valid"],[[42862,42862],"mapped","ꝯ"],[[42863,42863],"valid"],[[42864,42864],"mapped","ꝯ"],[[42865,42872],"valid"],[[42873,42873],"mapped","ꝺ"],[[42874,42874],"valid"],[[42875,42875],"mapped","ꝼ"],[[42876,42876],"valid"],[[42877,42877],"mapped","ᵹ"],[[42878,42878],"mapped","ꝿ"],[[42879,42879],"valid"],[[42880,42880],"mapped","ꞁ"],[[42881,42881],"valid"],[[42882,42882],"mapped","ꞃ"],[[42883,42883],"valid"],[[42884,42884],"mapped","ꞅ"],[[42885,42885],"valid"],[[42886,42886],"mapped","ꞇ"],[[42887,42888],"valid"],[[42889,42890],"valid","","NV8"],[[42891,42891],"mapped","ꞌ"],[[42892,42892],"valid"],[[42893,42893],"mapped","ɥ"],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped","ꞑ"],[[42897,42897],"valid"],[[42898,42898],"mapped","ꞓ"],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped","ꞗ"],[[42903,42903],"valid"],[[42904,42904],"mapped","ꞙ"],[[42905,42905],"valid"],[[42906,42906],"mapped","ꞛ"],[[42907,42907],"valid"],[[42908,42908],"mapped","ꞝ"],[[42909,42909],"valid"],[[42910,42910],"mapped","ꞟ"],[[42911,42911],"valid"],[[42912,42912],"mapped","ꞡ"],[[42913,42913],"valid"],[[42914,42914],"mapped","ꞣ"],[[42915,42915],"valid"],[[42916,42916],"mapped","ꞥ"],[[42917,42917],"valid"],[[42918,42918],"mapped","ꞧ"],[[42919,42919],"valid"],[[42920,42920],"mapped","ꞩ"],[[42921,42921],"valid"],[[42922,42922],"mapped","ɦ"],[[42923,42923],"mapped","ɜ"],[[42924,42924],"mapped","ɡ"],[[42925,42925],"mapped","ɬ"],[[42926,42926],"mapped","ɪ"],[[42927,42927],"disallowed"],[[42928,42928],"mapped","ʞ"],[[42929,42929],"mapped","ʇ"],[[42930,42930],"mapped","ʝ"],[[42931,42931],"mapped","ꭓ"],[[42932,42932],"mapped","ꞵ"],[[42933,42933],"valid"],[[42934,42934],"mapped","ꞷ"],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped","ħ"],[[43001,43001],"mapped","œ"],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid","","NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid","","NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid","","NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43205],"valid"],[[43206,43213],"disallowed"],[[43214,43215],"valid","","NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid","","NV8"],[[43259,43259],"valid"],[[43260,43260],"valid","","NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid","","NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid","","NV8"],[[43360,43388],"valid","","NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid","","NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid","","NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid","","NV8"],[[43616,43638],"valid"],[[43639,43641],"valid","","NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid","","NV8"],[[43744,43759],"valid"],[[43760,43761],"valid","","NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid","","NV8"],[[43868,43868],"mapped","ꜧ"],[[43869,43869],"mapped","ꬷ"],[[43870,43870],"mapped","ɫ"],[[43871,43871],"mapped","ꭒ"],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped","Ꭰ"],[[43889,43889],"mapped","Ꭱ"],[[43890,43890],"mapped","Ꭲ"],[[43891,43891],"mapped","Ꭳ"],[[43892,43892],"mapped","Ꭴ"],[[43893,43893],"mapped","Ꭵ"],[[43894,43894],"mapped","Ꭶ"],[[43895,43895],"mapped","Ꭷ"],[[43896,43896],"mapped","Ꭸ"],[[43897,43897],"mapped","Ꭹ"],[[43898,43898],"mapped","Ꭺ"],[[43899,43899],"mapped","Ꭻ"],[[43900,43900],"mapped","Ꭼ"],[[43901,43901],"mapped","Ꭽ"],[[43902,43902],"mapped","Ꭾ"],[[43903,43903],"mapped","Ꭿ"],[[43904,43904],"mapped","Ꮀ"],[[43905,43905],"mapped","Ꮁ"],[[43906,43906],"mapped","Ꮂ"],[[43907,43907],"mapped","Ꮃ"],[[43908,43908],"mapped","Ꮄ"],[[43909,43909],"mapped","Ꮅ"],[[43910,43910],"mapped","Ꮆ"],[[43911,43911],"mapped","Ꮇ"],[[43912,43912],"mapped","Ꮈ"],[[43913,43913],"mapped","Ꮉ"],[[43914,43914],"mapped","Ꮊ"],[[43915,43915],"mapped","Ꮋ"],[[43916,43916],"mapped","Ꮌ"],[[43917,43917],"mapped","Ꮍ"],[[43918,43918],"mapped","Ꮎ"],[[43919,43919],"mapped","Ꮏ"],[[43920,43920],"mapped","Ꮐ"],[[43921,43921],"mapped","Ꮑ"],[[43922,43922],"mapped","Ꮒ"],[[43923,43923],"mapped","Ꮓ"],[[43924,43924],"mapped","Ꮔ"],[[43925,43925],"mapped","Ꮕ"],[[43926,43926],"mapped","Ꮖ"],[[43927,43927],"mapped","Ꮗ"],[[43928,43928],"mapped","Ꮘ"],[[43929,43929],"mapped","Ꮙ"],[[43930,43930],"mapped","Ꮚ"],[[43931,43931],"mapped","Ꮛ"],[[43932,43932],"mapped","Ꮜ"],[[43933,43933],"mapped","Ꮝ"],[[43934,43934],"mapped","Ꮞ"],[[43935,43935],"mapped","Ꮟ"],[[43936,43936],"mapped","Ꮠ"],[[43937,43937],"mapped","Ꮡ"],[[43938,43938],"mapped","Ꮢ"],[[43939,43939],"mapped","Ꮣ"],[[43940,43940],"mapped","Ꮤ"],[[43941,43941],"mapped","Ꮥ"],[[43942,43942],"mapped","Ꮦ"],[[43943,43943],"mapped","Ꮧ"],[[43944,43944],"mapped","Ꮨ"],[[43945,43945],"mapped","Ꮩ"],[[43946,43946],"mapped","Ꮪ"],[[43947,43947],"mapped","Ꮫ"],[[43948,43948],"mapped","Ꮬ"],[[43949,43949],"mapped","Ꮭ"],[[43950,43950],"mapped","Ꮮ"],[[43951,43951],"mapped","Ꮯ"],[[43952,43952],"mapped","Ꮰ"],[[43953,43953],"mapped","Ꮱ"],[[43954,43954],"mapped","Ꮲ"],[[43955,43955],"mapped","Ꮳ"],[[43956,43956],"mapped","Ꮴ"],[[43957,43957],"mapped","Ꮵ"],[[43958,43958],"mapped","Ꮶ"],[[43959,43959],"mapped","Ꮷ"],[[43960,43960],"mapped","Ꮸ"],[[43961,43961],"mapped","Ꮹ"],[[43962,43962],"mapped","Ꮺ"],[[43963,43963],"mapped","Ꮻ"],[[43964,43964],"mapped","Ꮼ"],[[43965,43965],"mapped","Ꮽ"],[[43966,43966],"mapped","Ꮾ"],[[43967,43967],"mapped","Ꮿ"],[[43968,44010],"valid"],[[44011,44011],"valid","","NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid","","NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid","","NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped","豈"],[[63745,63745],"mapped","更"],[[63746,63746],"mapped","車"],[[63747,63747],"mapped","賈"],[[63748,63748],"mapped","滑"],[[63749,63749],"mapped","串"],[[63750,63750],"mapped","句"],[[63751,63752],"mapped","龜"],[[63753,63753],"mapped","契"],[[63754,63754],"mapped","金"],[[63755,63755],"mapped","喇"],[[63756,63756],"mapped","奈"],[[63757,63757],"mapped","懶"],[[63758,63758],"mapped","癩"],[[63759,63759],"mapped","羅"],[[63760,63760],"mapped","蘿"],[[63761,63761],"mapped","螺"],[[63762,63762],"mapped","裸"],[[63763,63763],"mapped","邏"],[[63764,63764],"mapped","樂"],[[63765,63765],"mapped","洛"],[[63766,63766],"mapped","烙"],[[63767,63767],"mapped","珞"],[[63768,63768],"mapped","落"],[[63769,63769],"mapped","酪"],[[63770,63770],"mapped","駱"],[[63771,63771],"mapped","亂"],[[63772,63772],"mapped","卵"],[[63773,63773],"mapped","欄"],[[63774,63774],"mapped","爛"],[[63775,63775],"mapped","蘭"],[[63776,63776],"mapped","鸞"],[[63777,63777],"mapped","嵐"],[[63778,63778],"mapped","濫"],[[63779,63779],"mapped","藍"],[[63780,63780],"mapped","襤"],[[63781,63781],"mapped","拉"],[[63782,63782],"mapped","臘"],[[63783,63783],"mapped","蠟"],[[63784,63784],"mapped","廊"],[[63785,63785],"mapped","朗"],[[63786,63786],"mapped","浪"],[[63787,63787],"mapped","狼"],[[63788,63788],"mapped","郎"],[[63789,63789],"mapped","來"],[[63790,63790],"mapped","冷"],[[63791,63791],"mapped","勞"],[[63792,63792],"mapped","擄"],[[63793,63793],"mapped","櫓"],[[63794,63794],"mapped","爐"],[[63795,63795],"mapped","盧"],[[63796,63796],"mapped","老"],[[63797,63797],"mapped","蘆"],[[63798,63798],"mapped","虜"],[[63799,63799],"mapped","路"],[[63800,63800],"mapped","露"],[[63801,63801],"mapped","魯"],[[63802,63802],"mapped","鷺"],[[63803,63803],"mapped","碌"],[[63804,63804],"mapped","祿"],[[63805,63805],"mapped","綠"],[[63806,63806],"mapped","菉"],[[63807,63807],"mapped","錄"],[[63808,63808],"mapped","鹿"],[[63809,63809],"mapped","論"],[[63810,63810],"mapped","壟"],[[63811,63811],"mapped","弄"],[[63812,63812],"mapped","籠"],[[63813,63813],"mapped","聾"],[[63814,63814],"mapped","牢"],[[63815,63815],"mapped","磊"],[[63816,63816],"mapped","賂"],[[63817,63817],"mapped","雷"],[[63818,63818],"mapped","壘"],[[63819,63819],"mapped","屢"],[[63820,63820],"mapped","樓"],[[63821,63821],"mapped","淚"],[[63822,63822],"mapped","漏"],[[63823,63823],"mapped","累"],[[63824,63824],"mapped","縷"],[[63825,63825],"mapped","陋"],[[63826,63826],"mapped","勒"],[[63827,63827],"mapped","肋"],[[63828,63828],"mapped","凜"],[[63829,63829],"mapped","凌"],[[63830,63830],"mapped","稜"],[[63831,63831],"mapped","綾"],[[63832,63832],"mapped","菱"],[[63833,63833],"mapped","陵"],[[63834,63834],"mapped","讀"],[[63835,63835],"mapped","拏"],[[63836,63836],"mapped","樂"],[[63837,63837],"mapped","諾"],[[63838,63838],"mapped","丹"],[[63839,63839],"mapped","寧"],[[63840,63840],"mapped","怒"],[[63841,63841],"mapped","率"],[[63842,63842],"mapped","異"],[[63843,63843],"mapped","北"],[[63844,63844],"mapped","磻"],[[63845,63845],"mapped","便"],[[63846,63846],"mapped","復"],[[63847,63847],"mapped","不"],[[63848,63848],"mapped","泌"],[[63849,63849],"mapped","數"],[[63850,63850],"mapped","索"],[[63851,63851],"mapped","參"],[[63852,63852],"mapped","塞"],[[63853,63853],"mapped","省"],[[63854,63854],"mapped","葉"],[[63855,63855],"mapped","說"],[[63856,63856],"mapped","殺"],[[63857,63857],"mapped","辰"],[[63858,63858],"mapped","沈"],[[63859,63859],"mapped","拾"],[[63860,63860],"mapped","若"],[[63861,63861],"mapped","掠"],[[63862,63862],"mapped","略"],[[63863,63863],"mapped","亮"],[[63864,63864],"mapped","兩"],[[63865,63865],"mapped","凉"],[[63866,63866],"mapped","梁"],[[63867,63867],"mapped","糧"],[[63868,63868],"mapped","良"],[[63869,63869],"mapped","諒"],[[63870,63870],"mapped","量"],[[63871,63871],"mapped","勵"],[[63872,63872],"mapped","呂"],[[63873,63873],"mapped","女"],[[63874,63874],"mapped","廬"],[[63875,63875],"mapped","旅"],[[63876,63876],"mapped","濾"],[[63877,63877],"mapped","礪"],[[63878,63878],"mapped","閭"],[[63879,63879],"mapped","驪"],[[63880,63880],"mapped","麗"],[[63881,63881],"mapped","黎"],[[63882,63882],"mapped","力"],[[63883,63883],"mapped","曆"],[[63884,63884],"mapped","歷"],[[63885,63885],"mapped","轢"],[[63886,63886],"mapped","年"],[[63887,63887],"mapped","憐"],[[63888,63888],"mapped","戀"],[[63889,63889],"mapped","撚"],[[63890,63890],"mapped","漣"],[[63891,63891],"mapped","煉"],[[63892,63892],"mapped","璉"],[[63893,63893],"mapped","秊"],[[63894,63894],"mapped","練"],[[63895,63895],"mapped","聯"],[[63896,63896],"mapped","輦"],[[63897,63897],"mapped","蓮"],[[63898,63898],"mapped","連"],[[63899,63899],"mapped","鍊"],[[63900,63900],"mapped","列"],[[63901,63901],"mapped","劣"],[[63902,63902],"mapped","咽"],[[63903,63903],"mapped","烈"],[[63904,63904],"mapped","裂"],[[63905,63905],"mapped","說"],[[63906,63906],"mapped","廉"],[[63907,63907],"mapped","念"],[[63908,63908],"mapped","捻"],[[63909,63909],"mapped","殮"],[[63910,63910],"mapped","簾"],[[63911,63911],"mapped","獵"],[[63912,63912],"mapped","令"],[[63913,63913],"mapped","囹"],[[63914,63914],"mapped","寧"],[[63915,63915],"mapped","嶺"],[[63916,63916],"mapped","怜"],[[63917,63917],"mapped","玲"],[[63918,63918],"mapped","瑩"],[[63919,63919],"mapped","羚"],[[63920,63920],"mapped","聆"],[[63921,63921],"mapped","鈴"],[[63922,63922],"mapped","零"],[[63923,63923],"mapped","靈"],[[63924,63924],"mapped","領"],[[63925,63925],"mapped","例"],[[63926,63926],"mapped","禮"],[[63927,63927],"mapped","醴"],[[63928,63928],"mapped","隸"],[[63929,63929],"mapped","惡"],[[63930,63930],"mapped","了"],[[63931,63931],"mapped","僚"],[[63932,63932],"mapped","寮"],[[63933,63933],"mapped","尿"],[[63934,63934],"mapped","料"],[[63935,63935],"mapped","樂"],[[63936,63936],"mapped","燎"],[[63937,63937],"mapped","療"],[[63938,63938],"mapped","蓼"],[[63939,63939],"mapped","遼"],[[63940,63940],"mapped","龍"],[[63941,63941],"mapped","暈"],[[63942,63942],"mapped","阮"],[[63943,63943],"mapped","劉"],[[63944,63944],"mapped","杻"],[[63945,63945],"mapped","柳"],[[63946,63946],"mapped","流"],[[63947,63947],"mapped","溜"],[[63948,63948],"mapped","琉"],[[63949,63949],"mapped","留"],[[63950,63950],"mapped","硫"],[[63951,63951],"mapped","紐"],[[63952,63952],"mapped","類"],[[63953,63953],"mapped","六"],[[63954,63954],"mapped","戮"],[[63955,63955],"mapped","陸"],[[63956,63956],"mapped","倫"],[[63957,63957],"mapped","崙"],[[63958,63958],"mapped","淪"],[[63959,63959],"mapped","輪"],[[63960,63960],"mapped","律"],[[63961,63961],"mapped","慄"],[[63962,63962],"mapped","栗"],[[63963,63963],"mapped","率"],[[63964,63964],"mapped","隆"],[[63965,63965],"mapped","利"],[[63966,63966],"mapped","吏"],[[63967,63967],"mapped","履"],[[63968,63968],"mapped","易"],[[63969,63969],"mapped","李"],[[63970,63970],"mapped","梨"],[[63971,63971],"mapped","泥"],[[63972,63972],"mapped","理"],[[63973,63973],"mapped","痢"],[[63974,63974],"mapped","罹"],[[63975,63975],"mapped","裏"],[[63976,63976],"mapped","裡"],[[63977,63977],"mapped","里"],[[63978,63978],"mapped","離"],[[63979,63979],"mapped","匿"],[[63980,63980],"mapped","溺"],[[63981,63981],"mapped","吝"],[[63982,63982],"mapped","燐"],[[63983,63983],"mapped","璘"],[[63984,63984],"mapped","藺"],[[63985,63985],"mapped","隣"],[[63986,63986],"mapped","鱗"],[[63987,63987],"mapped","麟"],[[63988,63988],"mapped","林"],[[63989,63989],"mapped","淋"],[[63990,63990],"mapped","臨"],[[63991,63991],"mapped","立"],[[63992,63992],"mapped","笠"],[[63993,63993],"mapped","粒"],[[63994,63994],"mapped","狀"],[[63995,63995],"mapped","炙"],[[63996,63996],"mapped","識"],[[63997,63997],"mapped","什"],[[63998,63998],"mapped","茶"],[[63999,63999],"mapped","刺"],[[64000,64000],"mapped","切"],[[64001,64001],"mapped","度"],[[64002,64002],"mapped","拓"],[[64003,64003],"mapped","糖"],[[64004,64004],"mapped","宅"],[[64005,64005],"mapped","洞"],[[64006,64006],"mapped","暴"],[[64007,64007],"mapped","輻"],[[64008,64008],"mapped","行"],[[64009,64009],"mapped","降"],[[64010,64010],"mapped","見"],[[64011,64011],"mapped","廓"],[[64012,64012],"mapped","兀"],[[64013,64013],"mapped","嗀"],[[64014,64015],"valid"],[[64016,64016],"mapped","塚"],[[64017,64017],"valid"],[[64018,64018],"mapped","晴"],[[64019,64020],"valid"],[[64021,64021],"mapped","凞"],[[64022,64022],"mapped","猪"],[[64023,64023],"mapped","益"],[[64024,64024],"mapped","礼"],[[64025,64025],"mapped","神"],[[64026,64026],"mapped","祥"],[[64027,64027],"mapped","福"],[[64028,64028],"mapped","靖"],[[64029,64029],"mapped","精"],[[64030,64030],"mapped","羽"],[[64031,64031],"valid"],[[64032,64032],"mapped","蘒"],[[64033,64033],"valid"],[[64034,64034],"mapped","諸"],[[64035,64036],"valid"],[[64037,64037],"mapped","逸"],[[64038,64038],"mapped","都"],[[64039,64041],"valid"],[[64042,64042],"mapped","飯"],[[64043,64043],"mapped","飼"],[[64044,64044],"mapped","館"],[[64045,64045],"mapped","鶴"],[[64046,64046],"mapped","郞"],[[64047,64047],"mapped","隷"],[[64048,64048],"mapped","侮"],[[64049,64049],"mapped","僧"],[[64050,64050],"mapped","免"],[[64051,64051],"mapped","勉"],[[64052,64052],"mapped","勤"],[[64053,64053],"mapped","卑"],[[64054,64054],"mapped","喝"],[[64055,64055],"mapped","嘆"],[[64056,64056],"mapped","器"],[[64057,64057],"mapped","塀"],[[64058,64058],"mapped","墨"],[[64059,64059],"mapped","層"],[[64060,64060],"mapped","屮"],[[64061,64061],"mapped","悔"],[[64062,64062],"mapped","慨"],[[64063,64063],"mapped","憎"],[[64064,64064],"mapped","懲"],[[64065,64065],"mapped","敏"],[[64066,64066],"mapped","既"],[[64067,64067],"mapped","暑"],[[64068,64068],"mapped","梅"],[[64069,64069],"mapped","海"],[[64070,64070],"mapped","渚"],[[64071,64071],"mapped","漢"],[[64072,64072],"mapped","煮"],[[64073,64073],"mapped","爫"],[[64074,64074],"mapped","琢"],[[64075,64075],"mapped","碑"],[[64076,64076],"mapped","社"],[[64077,64077],"mapped","祉"],[[64078,64078],"mapped","祈"],[[64079,64079],"mapped","祐"],[[64080,64080],"mapped","祖"],[[64081,64081],"mapped","祝"],[[64082,64082],"mapped","禍"],[[64083,64083],"mapped","禎"],[[64084,64084],"mapped","穀"],[[64085,64085],"mapped","突"],[[64086,64086],"mapped","節"],[[64087,64087],"mapped","練"],[[64088,64088],"mapped","縉"],[[64089,64089],"mapped","繁"],[[64090,64090],"mapped","署"],[[64091,64091],"mapped","者"],[[64092,64092],"mapped","臭"],[[64093,64094],"mapped","艹"],[[64095,64095],"mapped","著"],[[64096,64096],"mapped","褐"],[[64097,64097],"mapped","視"],[[64098,64098],"mapped","謁"],[[64099,64099],"mapped","謹"],[[64100,64100],"mapped","賓"],[[64101,64101],"mapped","贈"],[[64102,64102],"mapped","辶"],[[64103,64103],"mapped","逸"],[[64104,64104],"mapped","難"],[[64105,64105],"mapped","響"],[[64106,64106],"mapped","頻"],[[64107,64107],"mapped","恵"],[[64108,64108],"mapped","𤋮"],[[64109,64109],"mapped","舘"],[[64110,64111],"disallowed"],[[64112,64112],"mapped","並"],[[64113,64113],"mapped","况"],[[64114,64114],"mapped","全"],[[64115,64115],"mapped","侀"],[[64116,64116],"mapped","充"],[[64117,64117],"mapped","冀"],[[64118,64118],"mapped","勇"],[[64119,64119],"mapped","勺"],[[64120,64120],"mapped","喝"],[[64121,64121],"mapped","啕"],[[64122,64122],"mapped","喙"],[[64123,64123],"mapped","嗢"],[[64124,64124],"mapped","塚"],[[64125,64125],"mapped","墳"],[[64126,64126],"mapped","奄"],[[64127,64127],"mapped","奔"],[[64128,64128],"mapped","婢"],[[64129,64129],"mapped","嬨"],[[64130,64130],"mapped","廒"],[[64131,64131],"mapped","廙"],[[64132,64132],"mapped","彩"],[[64133,64133],"mapped","徭"],[[64134,64134],"mapped","惘"],[[64135,64135],"mapped","慎"],[[64136,64136],"mapped","愈"],[[64137,64137],"mapped","憎"],[[64138,64138],"mapped","慠"],[[64139,64139],"mapped","懲"],[[64140,64140],"mapped","戴"],[[64141,64141],"mapped","揄"],[[64142,64142],"mapped","搜"],[[64143,64143],"mapped","摒"],[[64144,64144],"mapped","敖"],[[64145,64145],"mapped","晴"],[[64146,64146],"mapped","朗"],[[64147,64147],"mapped","望"],[[64148,64148],"mapped","杖"],[[64149,64149],"mapped","歹"],[[64150,64150],"mapped","殺"],[[64151,64151],"mapped","流"],[[64152,64152],"mapped","滛"],[[64153,64153],"mapped","滋"],[[64154,64154],"mapped","漢"],[[64155,64155],"mapped","瀞"],[[64156,64156],"mapped","煮"],[[64157,64157],"mapped","瞧"],[[64158,64158],"mapped","爵"],[[64159,64159],"mapped","犯"],[[64160,64160],"mapped","猪"],[[64161,64161],"mapped","瑱"],[[64162,64162],"mapped","甆"],[[64163,64163],"mapped","画"],[[64164,64164],"mapped","瘝"],[[64165,64165],"mapped","瘟"],[[64166,64166],"mapped","益"],[[64167,64167],"mapped","盛"],[[64168,64168],"mapped","直"],[[64169,64169],"mapped","睊"],[[64170,64170],"mapped","着"],[[64171,64171],"mapped","磌"],[[64172,64172],"mapped","窱"],[[64173,64173],"mapped","節"],[[64174,64174],"mapped","类"],[[64175,64175],"mapped","絛"],[[64176,64176],"mapped","練"],[[64177,64177],"mapped","缾"],[[64178,64178],"mapped","者"],[[64179,64179],"mapped","荒"],[[64180,64180],"mapped","華"],[[64181,64181],"mapped","蝹"],[[64182,64182],"mapped","襁"],[[64183,64183],"mapped","覆"],[[64184,64184],"mapped","視"],[[64185,64185],"mapped","調"],[[64186,64186],"mapped","諸"],[[64187,64187],"mapped","請"],[[64188,64188],"mapped","謁"],[[64189,64189],"mapped","諾"],[[64190,64190],"mapped","諭"],[[64191,64191],"mapped","謹"],[[64192,64192],"mapped","變"],[[64193,64193],"mapped","贈"],[[64194,64194],"mapped","輸"],[[64195,64195],"mapped","遲"],[[64196,64196],"mapped","醙"],[[64197,64197],"mapped","鉶"],[[64198,64198],"mapped","陼"],[[64199,64199],"mapped","難"],[[64200,64200],"mapped","靖"],[[64201,64201],"mapped","韛"],[[64202,64202],"mapped","響"],[[64203,64203],"mapped","頋"],[[64204,64204],"mapped","頻"],[[64205,64205],"mapped","鬒"],[[64206,64206],"mapped","龜"],[[64207,64207],"mapped","𢡊"],[[64208,64208],"mapped","𢡄"],[[64209,64209],"mapped","𣏕"],[[64210,64210],"mapped","㮝"],[[64211,64211],"mapped","䀘"],[[64212,64212],"mapped","䀹"],[[64213,64213],"mapped","𥉉"],[[64214,64214],"mapped","𥳐"],[[64215,64215],"mapped","𧻓"],[[64216,64216],"mapped","齃"],[[64217,64217],"mapped","龎"],[[64218,64255],"disallowed"],[[64256,64256],"mapped","ff"],[[64257,64257],"mapped","fi"],[[64258,64258],"mapped","fl"],[[64259,64259],"mapped","ffi"],[[64260,64260],"mapped","ffl"],[[64261,64262],"mapped","st"],[[64263,64274],"disallowed"],[[64275,64275],"mapped","մն"],[[64276,64276],"mapped","մե"],[[64277,64277],"mapped","մի"],[[64278,64278],"mapped","վն"],[[64279,64279],"mapped","մխ"],[[64280,64284],"disallowed"],[[64285,64285],"mapped","יִ"],[[64286,64286],"valid"],[[64287,64287],"mapped","ײַ"],[[64288,64288],"mapped","ע"],[[64289,64289],"mapped","א"],[[64290,64290],"mapped","ד"],[[64291,64291],"mapped","ה"],[[64292,64292],"mapped","כ"],[[64293,64293],"mapped","ל"],[[64294,64294],"mapped","ם"],[[64295,64295],"mapped","ר"],[[64296,64296],"mapped","ת"],[[64297,64297],"disallowed_STD3_mapped","+"],[[64298,64298],"mapped","שׁ"],[[64299,64299],"mapped","שׂ"],[[64300,64300],"mapped","שּׁ"],[[64301,64301],"mapped","שּׂ"],[[64302,64302],"mapped","אַ"],[[64303,64303],"mapped","אָ"],[[64304,64304],"mapped","אּ"],[[64305,64305],"mapped","בּ"],[[64306,64306],"mapped","גּ"],[[64307,64307],"mapped","דּ"],[[64308,64308],"mapped","הּ"],[[64309,64309],"mapped","וּ"],[[64310,64310],"mapped","זּ"],[[64311,64311],"disallowed"],[[64312,64312],"mapped","טּ"],[[64313,64313],"mapped","יּ"],[[64314,64314],"mapped","ךּ"],[[64315,64315],"mapped","כּ"],[[64316,64316],"mapped","לּ"],[[64317,64317],"disallowed"],[[64318,64318],"mapped","מּ"],[[64319,64319],"disallowed"],[[64320,64320],"mapped","נּ"],[[64321,64321],"mapped","סּ"],[[64322,64322],"disallowed"],[[64323,64323],"mapped","ףּ"],[[64324,64324],"mapped","פּ"],[[64325,64325],"disallowed"],[[64326,64326],"mapped","צּ"],[[64327,64327],"mapped","קּ"],[[64328,64328],"mapped","רּ"],[[64329,64329],"mapped","שּ"],[[64330,64330],"mapped","תּ"],[[64331,64331],"mapped","וֹ"],[[64332,64332],"mapped","בֿ"],[[64333,64333],"mapped","כֿ"],[[64334,64334],"mapped","פֿ"],[[64335,64335],"mapped","אל"],[[64336,64337],"mapped","ٱ"],[[64338,64341],"mapped","ٻ"],[[64342,64345],"mapped","پ"],[[64346,64349],"mapped","ڀ"],[[64350,64353],"mapped","ٺ"],[[64354,64357],"mapped","ٿ"],[[64358,64361],"mapped","ٹ"],[[64362,64365],"mapped","ڤ"],[[64366,64369],"mapped","ڦ"],[[64370,64373],"mapped","ڄ"],[[64374,64377],"mapped","ڃ"],[[64378,64381],"mapped","چ"],[[64382,64385],"mapped","ڇ"],[[64386,64387],"mapped","ڍ"],[[64388,64389],"mapped","ڌ"],[[64390,64391],"mapped","ڎ"],[[64392,64393],"mapped","ڈ"],[[64394,64395],"mapped","ژ"],[[64396,64397],"mapped","ڑ"],[[64398,64401],"mapped","ک"],[[64402,64405],"mapped","گ"],[[64406,64409],"mapped","ڳ"],[[64410,64413],"mapped","ڱ"],[[64414,64415],"mapped","ں"],[[64416,64419],"mapped","ڻ"],[[64420,64421],"mapped","ۀ"],[[64422,64425],"mapped","ہ"],[[64426,64429],"mapped","ھ"],[[64430,64431],"mapped","ے"],[[64432,64433],"mapped","ۓ"],[[64434,64449],"valid","","NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped","ڭ"],[[64471,64472],"mapped","ۇ"],[[64473,64474],"mapped","ۆ"],[[64475,64476],"mapped","ۈ"],[[64477,64477],"mapped","ۇٴ"],[[64478,64479],"mapped","ۋ"],[[64480,64481],"mapped","ۅ"],[[64482,64483],"mapped","ۉ"],[[64484,64487],"mapped","ې"],[[64488,64489],"mapped","ى"],[[64490,64491],"mapped","ئا"],[[64492,64493],"mapped","ئە"],[[64494,64495],"mapped","ئو"],[[64496,64497],"mapped","ئۇ"],[[64498,64499],"mapped","ئۆ"],[[64500,64501],"mapped","ئۈ"],[[64502,64504],"mapped","ئې"],[[64505,64507],"mapped","ئى"],[[64508,64511],"mapped","ی"],[[64512,64512],"mapped","ئج"],[[64513,64513],"mapped","ئح"],[[64514,64514],"mapped","ئم"],[[64515,64515],"mapped","ئى"],[[64516,64516],"mapped","ئي"],[[64517,64517],"mapped","بج"],[[64518,64518],"mapped","بح"],[[64519,64519],"mapped","بخ"],[[64520,64520],"mapped","بم"],[[64521,64521],"mapped","بى"],[[64522,64522],"mapped","بي"],[[64523,64523],"mapped","تج"],[[64524,64524],"mapped","تح"],[[64525,64525],"mapped","تخ"],[[64526,64526],"mapped","تم"],[[64527,64527],"mapped","تى"],[[64528,64528],"mapped","تي"],[[64529,64529],"mapped","ثج"],[[64530,64530],"mapped","ثم"],[[64531,64531],"mapped","ثى"],[[64532,64532],"mapped","ثي"],[[64533,64533],"mapped","جح"],[[64534,64534],"mapped","جم"],[[64535,64535],"mapped","حج"],[[64536,64536],"mapped","حم"],[[64537,64537],"mapped","خج"],[[64538,64538],"mapped","خح"],[[64539,64539],"mapped","خم"],[[64540,64540],"mapped","سج"],[[64541,64541],"mapped","سح"],[[64542,64542],"mapped","سخ"],[[64543,64543],"mapped","سم"],[[64544,64544],"mapped","صح"],[[64545,64545],"mapped","صم"],[[64546,64546],"mapped","ضج"],[[64547,64547],"mapped","ضح"],[[64548,64548],"mapped","ضخ"],[[64549,64549],"mapped","ضم"],[[64550,64550],"mapped","طح"],[[64551,64551],"mapped","طم"],[[64552,64552],"mapped","ظم"],[[64553,64553],"mapped","عج"],[[64554,64554],"mapped","عم"],[[64555,64555],"mapped","غج"],[[64556,64556],"mapped","غم"],[[64557,64557],"mapped","فج"],[[64558,64558],"mapped","فح"],[[64559,64559],"mapped","فخ"],[[64560,64560],"mapped","فم"],[[64561,64561],"mapped","فى"],[[64562,64562],"mapped","في"],[[64563,64563],"mapped","قح"],[[64564,64564],"mapped","قم"],[[64565,64565],"mapped","قى"],[[64566,64566],"mapped","قي"],[[64567,64567],"mapped","كا"],[[64568,64568],"mapped","كج"],[[64569,64569],"mapped","كح"],[[64570,64570],"mapped","كخ"],[[64571,64571],"mapped","كل"],[[64572,64572],"mapped","كم"],[[64573,64573],"mapped","كى"],[[64574,64574],"mapped","كي"],[[64575,64575],"mapped","لج"],[[64576,64576],"mapped","لح"],[[64577,64577],"mapped","لخ"],[[64578,64578],"mapped","لم"],[[64579,64579],"mapped","لى"],[[64580,64580],"mapped","لي"],[[64581,64581],"mapped","مج"],[[64582,64582],"mapped","مح"],[[64583,64583],"mapped","مخ"],[[64584,64584],"mapped","مم"],[[64585,64585],"mapped","مى"],[[64586,64586],"mapped","مي"],[[64587,64587],"mapped","نج"],[[64588,64588],"mapped","نح"],[[64589,64589],"mapped","نخ"],[[64590,64590],"mapped","نم"],[[64591,64591],"mapped","نى"],[[64592,64592],"mapped","ني"],[[64593,64593],"mapped","هج"],[[64594,64594],"mapped","هم"],[[64595,64595],"mapped","هى"],[[64596,64596],"mapped","هي"],[[64597,64597],"mapped","يج"],[[64598,64598],"mapped","يح"],[[64599,64599],"mapped","يخ"],[[64600,64600],"mapped","يم"],[[64601,64601],"mapped","يى"],[[64602,64602],"mapped","يي"],[[64603,64603],"mapped","ذٰ"],[[64604,64604],"mapped","رٰ"],[[64605,64605],"mapped","ىٰ"],[[64606,64606],"disallowed_STD3_mapped"," ٌّ"],[[64607,64607],"disallowed_STD3_mapped"," ٍّ"],[[64608,64608],"disallowed_STD3_mapped"," َّ"],[[64609,64609],"disallowed_STD3_mapped"," ُّ"],[[64610,64610],"disallowed_STD3_mapped"," ِّ"],[[64611,64611],"disallowed_STD3_mapped"," ّٰ"],[[64612,64612],"mapped","ئر"],[[64613,64613],"mapped","ئز"],[[64614,64614],"mapped","ئم"],[[64615,64615],"mapped","ئن"],[[64616,64616],"mapped","ئى"],[[64617,64617],"mapped","ئي"],[[64618,64618],"mapped","بر"],[[64619,64619],"mapped","بز"],[[64620,64620],"mapped","بم"],[[64621,64621],"mapped","بن"],[[64622,64622],"mapped","بى"],[[64623,64623],"mapped","بي"],[[64624,64624],"mapped","تر"],[[64625,64625],"mapped","تز"],[[64626,64626],"mapped","تم"],[[64627,64627],"mapped","تن"],[[64628,64628],"mapped","تى"],[[64629,64629],"mapped","تي"],[[64630,64630],"mapped","ثر"],[[64631,64631],"mapped","ثز"],[[64632,64632],"mapped","ثم"],[[64633,64633],"mapped","ثن"],[[64634,64634],"mapped","ثى"],[[64635,64635],"mapped","ثي"],[[64636,64636],"mapped","فى"],[[64637,64637],"mapped","في"],[[64638,64638],"mapped","قى"],[[64639,64639],"mapped","قي"],[[64640,64640],"mapped","كا"],[[64641,64641],"mapped","كل"],[[64642,64642],"mapped","كم"],[[64643,64643],"mapped","كى"],[[64644,64644],"mapped","كي"],[[64645,64645],"mapped","لم"],[[64646,64646],"mapped","لى"],[[64647,64647],"mapped","لي"],[[64648,64648],"mapped","ما"],[[64649,64649],"mapped","مم"],[[64650,64650],"mapped","نر"],[[64651,64651],"mapped","نز"],[[64652,64652],"mapped","نم"],[[64653,64653],"mapped","نن"],[[64654,64654],"mapped","نى"],[[64655,64655],"mapped","ني"],[[64656,64656],"mapped","ىٰ"],[[64657,64657],"mapped","ير"],[[64658,64658],"mapped","يز"],[[64659,64659],"mapped","يم"],[[64660,64660],"mapped","ين"],[[64661,64661],"mapped","يى"],[[64662,64662],"mapped","يي"],[[64663,64663],"mapped","ئج"],[[64664,64664],"mapped","ئح"],[[64665,64665],"mapped","ئخ"],[[64666,64666],"mapped","ئم"],[[64667,64667],"mapped","ئه"],[[64668,64668],"mapped","بج"],[[64669,64669],"mapped","بح"],[[64670,64670],"mapped","بخ"],[[64671,64671],"mapped","بم"],[[64672,64672],"mapped","به"],[[64673,64673],"mapped","تج"],[[64674,64674],"mapped","تح"],[[64675,64675],"mapped","تخ"],[[64676,64676],"mapped","تم"],[[64677,64677],"mapped","ته"],[[64678,64678],"mapped","ثم"],[[64679,64679],"mapped","جح"],[[64680,64680],"mapped","جم"],[[64681,64681],"mapped","حج"],[[64682,64682],"mapped","حم"],[[64683,64683],"mapped","خج"],[[64684,64684],"mapped","خم"],[[64685,64685],"mapped","سج"],[[64686,64686],"mapped","سح"],[[64687,64687],"mapped","سخ"],[[64688,64688],"mapped","سم"],[[64689,64689],"mapped","صح"],[[64690,64690],"mapped","صخ"],[[64691,64691],"mapped","صم"],[[64692,64692],"mapped","ضج"],[[64693,64693],"mapped","ضح"],[[64694,64694],"mapped","ضخ"],[[64695,64695],"mapped","ضم"],[[64696,64696],"mapped","طح"],[[64697,64697],"mapped","ظم"],[[64698,64698],"mapped","عج"],[[64699,64699],"mapped","عم"],[[64700,64700],"mapped","غج"],[[64701,64701],"mapped","غم"],[[64702,64702],"mapped","فج"],[[64703,64703],"mapped","فح"],[[64704,64704],"mapped","فخ"],[[64705,64705],"mapped","فم"],[[64706,64706],"mapped","قح"],[[64707,64707],"mapped","قم"],[[64708,64708],"mapped","كج"],[[64709,64709],"mapped","كح"],[[64710,64710],"mapped","كخ"],[[64711,64711],"mapped","كل"],[[64712,64712],"mapped","كم"],[[64713,64713],"mapped","لج"],[[64714,64714],"mapped","لح"],[[64715,64715],"mapped","لخ"],[[64716,64716],"mapped","لم"],[[64717,64717],"mapped","له"],[[64718,64718],"mapped","مج"],[[64719,64719],"mapped","مح"],[[64720,64720],"mapped","مخ"],[[64721,64721],"mapped","مم"],[[64722,64722],"mapped","نج"],[[64723,64723],"mapped","نح"],[[64724,64724],"mapped","نخ"],[[64725,64725],"mapped","نم"],[[64726,64726],"mapped","نه"],[[64727,64727],"mapped","هج"],[[64728,64728],"mapped","هم"],[[64729,64729],"mapped","هٰ"],[[64730,64730],"mapped","يج"],[[64731,64731],"mapped","يح"],[[64732,64732],"mapped","يخ"],[[64733,64733],"mapped","يم"],[[64734,64734],"mapped","يه"],[[64735,64735],"mapped","ئم"],[[64736,64736],"mapped","ئه"],[[64737,64737],"mapped","بم"],[[64738,64738],"mapped","به"],[[64739,64739],"mapped","تم"],[[64740,64740],"mapped","ته"],[[64741,64741],"mapped","ثم"],[[64742,64742],"mapped","ثه"],[[64743,64743],"mapped","سم"],[[64744,64744],"mapped","سه"],[[64745,64745],"mapped","شم"],[[64746,64746],"mapped","شه"],[[64747,64747],"mapped","كل"],[[64748,64748],"mapped","كم"],[[64749,64749],"mapped","لم"],[[64750,64750],"mapped","نم"],[[64751,64751],"mapped","نه"],[[64752,64752],"mapped","يم"],[[64753,64753],"mapped","يه"],[[64754,64754],"mapped","ـَّ"],[[64755,64755],"mapped","ـُّ"],[[64756,64756],"mapped","ـِّ"],[[64757,64757],"mapped","طى"],[[64758,64758],"mapped","طي"],[[64759,64759],"mapped","عى"],[[64760,64760],"mapped","عي"],[[64761,64761],"mapped","غى"],[[64762,64762],"mapped","غي"],[[64763,64763],"mapped","سى"],[[64764,64764],"mapped","سي"],[[64765,64765],"mapped","شى"],[[64766,64766],"mapped","شي"],[[64767,64767],"mapped","حى"],[[64768,64768],"mapped","حي"],[[64769,64769],"mapped","جى"],[[64770,64770],"mapped","جي"],[[64771,64771],"mapped","خى"],[[64772,64772],"mapped","خي"],[[64773,64773],"mapped","صى"],[[64774,64774],"mapped","صي"],[[64775,64775],"mapped","ضى"],[[64776,64776],"mapped","ضي"],[[64777,64777],"mapped","شج"],[[64778,64778],"mapped","شح"],[[64779,64779],"mapped","شخ"],[[64780,64780],"mapped","شم"],[[64781,64781],"mapped","شر"],[[64782,64782],"mapped","سر"],[[64783,64783],"mapped","صر"],[[64784,64784],"mapped","ضر"],[[64785,64785],"mapped","طى"],[[64786,64786],"mapped","طي"],[[64787,64787],"mapped","عى"],[[64788,64788],"mapped","عي"],[[64789,64789],"mapped","غى"],[[64790,64790],"mapped","غي"],[[64791,64791],"mapped","سى"],[[64792,64792],"mapped","سي"],[[64793,64793],"mapped","شى"],[[64794,64794],"mapped","شي"],[[64795,64795],"mapped","حى"],[[64796,64796],"mapped","حي"],[[64797,64797],"mapped","جى"],[[64798,64798],"mapped","جي"],[[64799,64799],"mapped","خى"],[[64800,64800],"mapped","خي"],[[64801,64801],"mapped","صى"],[[64802,64802],"mapped","صي"],[[64803,64803],"mapped","ضى"],[[64804,64804],"mapped","ضي"],[[64805,64805],"mapped","شج"],[[64806,64806],"mapped","شح"],[[64807,64807],"mapped","شخ"],[[64808,64808],"mapped","شم"],[[64809,64809],"mapped","شر"],[[64810,64810],"mapped","سر"],[[64811,64811],"mapped","صر"],[[64812,64812],"mapped","ضر"],[[64813,64813],"mapped","شج"],[[64814,64814],"mapped","شح"],[[64815,64815],"mapped","شخ"],[[64816,64816],"mapped","شم"],[[64817,64817],"mapped","سه"],[[64818,64818],"mapped","شه"],[[64819,64819],"mapped","طم"],[[64820,64820],"mapped","سج"],[[64821,64821],"mapped","سح"],[[64822,64822],"mapped","سخ"],[[64823,64823],"mapped","شج"],[[64824,64824],"mapped","شح"],[[64825,64825],"mapped","شخ"],[[64826,64826],"mapped","طم"],[[64827,64827],"mapped","ظم"],[[64828,64829],"mapped","اً"],[[64830,64831],"valid","","NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped","تجم"],[[64849,64850],"mapped","تحج"],[[64851,64851],"mapped","تحم"],[[64852,64852],"mapped","تخم"],[[64853,64853],"mapped","تمج"],[[64854,64854],"mapped","تمح"],[[64855,64855],"mapped","تمخ"],[[64856,64857],"mapped","جمح"],[[64858,64858],"mapped","حمي"],[[64859,64859],"mapped","حمى"],[[64860,64860],"mapped","سحج"],[[64861,64861],"mapped","سجح"],[[64862,64862],"mapped","سجى"],[[64863,64864],"mapped","سمح"],[[64865,64865],"mapped","سمج"],[[64866,64867],"mapped","سمم"],[[64868,64869],"mapped","صحح"],[[64870,64870],"mapped","صمم"],[[64871,64872],"mapped","شحم"],[[64873,64873],"mapped","شجي"],[[64874,64875],"mapped","شمخ"],[[64876,64877],"mapped","شمم"],[[64878,64878],"mapped","ضحى"],[[64879,64880],"mapped","ضخم"],[[64881,64882],"mapped","طمح"],[[64883,64883],"mapped","طمم"],[[64884,64884],"mapped","طمي"],[[64885,64885],"mapped","عجم"],[[64886,64887],"mapped","عمم"],[[64888,64888],"mapped","عمى"],[[64889,64889],"mapped","غمم"],[[64890,64890],"mapped","غمي"],[[64891,64891],"mapped","غمى"],[[64892,64893],"mapped","فخم"],[[64894,64894],"mapped","قمح"],[[64895,64895],"mapped","قمم"],[[64896,64896],"mapped","لحم"],[[64897,64897],"mapped","لحي"],[[64898,64898],"mapped","لحى"],[[64899,64900],"mapped","لجج"],[[64901,64902],"mapped","لخم"],[[64903,64904],"mapped","لمح"],[[64905,64905],"mapped","محج"],[[64906,64906],"mapped","محم"],[[64907,64907],"mapped","محي"],[[64908,64908],"mapped","مجح"],[[64909,64909],"mapped","مجم"],[[64910,64910],"mapped","مخج"],[[64911,64911],"mapped","مخم"],[[64912,64913],"disallowed"],[[64914,64914],"mapped","مجخ"],[[64915,64915],"mapped","همج"],[[64916,64916],"mapped","همم"],[[64917,64917],"mapped","نحم"],[[64918,64918],"mapped","نحى"],[[64919,64920],"mapped","نجم"],[[64921,64921],"mapped","نجى"],[[64922,64922],"mapped","نمي"],[[64923,64923],"mapped","نمى"],[[64924,64925],"mapped","يمم"],[[64926,64926],"mapped","بخي"],[[64927,64927],"mapped","تجي"],[[64928,64928],"mapped","تجى"],[[64929,64929],"mapped","تخي"],[[64930,64930],"mapped","تخى"],[[64931,64931],"mapped","تمي"],[[64932,64932],"mapped","تمى"],[[64933,64933],"mapped","جمي"],[[64934,64934],"mapped","جحى"],[[64935,64935],"mapped","جمى"],[[64936,64936],"mapped","سخى"],[[64937,64937],"mapped","صحي"],[[64938,64938],"mapped","شحي"],[[64939,64939],"mapped","ضحي"],[[64940,64940],"mapped","لجي"],[[64941,64941],"mapped","لمي"],[[64942,64942],"mapped","يحي"],[[64943,64943],"mapped","يجي"],[[64944,64944],"mapped","يمي"],[[64945,64945],"mapped","ممي"],[[64946,64946],"mapped","قمي"],[[64947,64947],"mapped","نحي"],[[64948,64948],"mapped","قمح"],[[64949,64949],"mapped","لحم"],[[64950,64950],"mapped","عمي"],[[64951,64951],"mapped","كمي"],[[64952,64952],"mapped","نجح"],[[64953,64953],"mapped","مخي"],[[64954,64954],"mapped","لجم"],[[64955,64955],"mapped","كمم"],[[64956,64956],"mapped","لجم"],[[64957,64957],"mapped","نجح"],[[64958,64958],"mapped","جحي"],[[64959,64959],"mapped","حجي"],[[64960,64960],"mapped","مجي"],[[64961,64961],"mapped","فمي"],[[64962,64962],"mapped","بحي"],[[64963,64963],"mapped","كمم"],[[64964,64964],"mapped","عجم"],[[64965,64965],"mapped","صمم"],[[64966,64966],"mapped","سخي"],[[64967,64967],"mapped","نجي"],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped","صلے"],[[65009,65009],"mapped","قلے"],[[65010,65010],"mapped","الله"],[[65011,65011],"mapped","اكبر"],[[65012,65012],"mapped","محمد"],[[65013,65013],"mapped","صلعم"],[[65014,65014],"mapped","رسول"],[[65015,65015],"mapped","عليه"],[[65016,65016],"mapped","وسلم"],[[65017,65017],"mapped","صلى"],[[65018,65018],"disallowed_STD3_mapped","صلى الله عليه وسلم"],[[65019,65019],"disallowed_STD3_mapped","جل جلاله"],[[65020,65020],"mapped","ریال"],[[65021,65021],"valid","","NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",","],[[65041,65041],"mapped","、"],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",":"],[[65044,65044],"disallowed_STD3_mapped",";"],[[65045,65045],"disallowed_STD3_mapped","!"],[[65046,65046],"disallowed_STD3_mapped","?"],[[65047,65047],"mapped","〖"],[[65048,65048],"mapped","〗"],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped","—"],[[65074,65074],"mapped","–"],[[65075,65076],"disallowed_STD3_mapped","_"],[[65077,65077],"disallowed_STD3_mapped","("],[[65078,65078],"disallowed_STD3_mapped",")"],[[65079,65079],"disallowed_STD3_mapped","{"],[[65080,65080],"disallowed_STD3_mapped","}"],[[65081,65081],"mapped","〔"],[[65082,65082],"mapped","〕"],[[65083,65083],"mapped","【"],[[65084,65084],"mapped","】"],[[65085,65085],"mapped","《"],[[65086,65086],"mapped","》"],[[65087,65087],"mapped","〈"],[[65088,65088],"mapped","〉"],[[65089,65089],"mapped","「"],[[65090,65090],"mapped","」"],[[65091,65091],"mapped","『"],[[65092,65092],"mapped","』"],[[65093,65094],"valid","","NV8"],[[65095,65095],"disallowed_STD3_mapped","["],[[65096,65096],"disallowed_STD3_mapped","]"],[[65097,65100],"disallowed_STD3_mapped"," ̅"],[[65101,65103],"disallowed_STD3_mapped","_"],[[65104,65104],"disallowed_STD3_mapped",","],[[65105,65105],"mapped","、"],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",";"],[[65109,65109],"disallowed_STD3_mapped",":"],[[65110,65110],"disallowed_STD3_mapped","?"],[[65111,65111],"disallowed_STD3_mapped","!"],[[65112,65112],"mapped","—"],[[65113,65113],"disallowed_STD3_mapped","("],[[65114,65114],"disallowed_STD3_mapped",")"],[[65115,65115],"disallowed_STD3_mapped","{"],[[65116,65116],"disallowed_STD3_mapped","}"],[[65117,65117],"mapped","〔"],[[65118,65118],"mapped","〕"],[[65119,65119],"disallowed_STD3_mapped","#"],[[65120,65120],"disallowed_STD3_mapped","&"],[[65121,65121],"disallowed_STD3_mapped","*"],[[65122,65122],"disallowed_STD3_mapped","+"],[[65123,65123],"mapped","-"],[[65124,65124],"disallowed_STD3_mapped","<"],[[65125,65125],"disallowed_STD3_mapped",">"],[[65126,65126],"disallowed_STD3_mapped","="],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped","\\"],[[65129,65129],"disallowed_STD3_mapped","$"],[[65130,65130],"disallowed_STD3_mapped","%"],[[65131,65131],"disallowed_STD3_mapped","@"],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped"," ً"],[[65137,65137],"mapped","ـً"],[[65138,65138],"disallowed_STD3_mapped"," ٌ"],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped"," ٍ"],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped"," َ"],[[65143,65143],"mapped","ـَ"],[[65144,65144],"disallowed_STD3_mapped"," ُ"],[[65145,65145],"mapped","ـُ"],[[65146,65146],"disallowed_STD3_mapped"," ِ"],[[65147,65147],"mapped","ـِ"],[[65148,65148],"disallowed_STD3_mapped"," ّ"],[[65149,65149],"mapped","ـّ"],[[65150,65150],"disallowed_STD3_mapped"," ْ"],[[65151,65151],"mapped","ـْ"],[[65152,65152],"mapped","ء"],[[65153,65154],"mapped","آ"],[[65155,65156],"mapped","أ"],[[65157,65158],"mapped","ؤ"],[[65159,65160],"mapped","إ"],[[65161,65164],"mapped","ئ"],[[65165,65166],"mapped","ا"],[[65167,65170],"mapped","ب"],[[65171,65172],"mapped","ة"],[[65173,65176],"mapped","ت"],[[65177,65180],"mapped","ث"],[[65181,65184],"mapped","ج"],[[65185,65188],"mapped","ح"],[[65189,65192],"mapped","خ"],[[65193,65194],"mapped","د"],[[65195,65196],"mapped","ذ"],[[65197,65198],"mapped","ر"],[[65199,65200],"mapped","ز"],[[65201,65204],"mapped","س"],[[65205,65208],"mapped","ش"],[[65209,65212],"mapped","ص"],[[65213,65216],"mapped","ض"],[[65217,65220],"mapped","ط"],[[65221,65224],"mapped","ظ"],[[65225,65228],"mapped","ع"],[[65229,65232],"mapped","غ"],[[65233,65236],"mapped","ف"],[[65237,65240],"mapped","ق"],[[65241,65244],"mapped","ك"],[[65245,65248],"mapped","ل"],[[65249,65252],"mapped","م"],[[65253,65256],"mapped","ن"],[[65257,65260],"mapped","ه"],[[65261,65262],"mapped","و"],[[65263,65264],"mapped","ى"],[[65265,65268],"mapped","ي"],[[65269,65270],"mapped","لآ"],[[65271,65272],"mapped","لأ"],[[65273,65274],"mapped","لإ"],[[65275,65276],"mapped","لا"],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped","!"],[[65282,65282],"disallowed_STD3_mapped","\""],[[65283,65283],"disallowed_STD3_mapped","#"],[[65284,65284],"disallowed_STD3_mapped","$"],[[65285,65285],"disallowed_STD3_mapped","%"],[[65286,65286],"disallowed_STD3_mapped","&"],[[65287,65287],"disallowed_STD3_mapped","'"],[[65288,65288],"disallowed_STD3_mapped","("],[[65289,65289],"disallowed_STD3_mapped",")"],[[65290,65290],"disallowed_STD3_mapped","*"],[[65291,65291],"disallowed_STD3_mapped","+"],[[65292,65292],"disallowed_STD3_mapped",","],[[65293,65293],"mapped","-"],[[65294,65294],"mapped","."],[[65295,65295],"disallowed_STD3_mapped","/"],[[65296,65296],"mapped","0"],[[65297,65297],"mapped","1"],[[65298,65298],"mapped","2"],[[65299,65299],"mapped","3"],[[65300,65300],"mapped","4"],[[65301,65301],"mapped","5"],[[65302,65302],"mapped","6"],[[65303,65303],"mapped","7"],[[65304,65304],"mapped","8"],[[65305,65305],"mapped","9"],[[65306,65306],"disallowed_STD3_mapped",":"],[[65307,65307],"disallowed_STD3_mapped",";"],[[65308,65308],"disallowed_STD3_mapped","<"],[[65309,65309],"disallowed_STD3_mapped","="],[[65310,65310],"disallowed_STD3_mapped",">"],[[65311,65311],"disallowed_STD3_mapped","?"],[[65312,65312],"disallowed_STD3_mapped","@"],[[65313,65313],"mapped","a"],[[65314,65314],"mapped","b"],[[65315,65315],"mapped","c"],[[65316,65316],"mapped","d"],[[65317,65317],"mapped","e"],[[65318,65318],"mapped","f"],[[65319,65319],"mapped","g"],[[65320,65320],"mapped","h"],[[65321,65321],"mapped","i"],[[65322,65322],"mapped","j"],[[65323,65323],"mapped","k"],[[65324,65324],"mapped","l"],[[65325,65325],"mapped","m"],[[65326,65326],"mapped","n"],[[65327,65327],"mapped","o"],[[65328,65328],"mapped","p"],[[65329,65329],"mapped","q"],[[65330,65330],"mapped","r"],[[65331,65331],"mapped","s"],[[65332,65332],"mapped","t"],[[65333,65333],"mapped","u"],[[65334,65334],"mapped","v"],[[65335,65335],"mapped","w"],[[65336,65336],"mapped","x"],[[65337,65337],"mapped","y"],[[65338,65338],"mapped","z"],[[65339,65339],"disallowed_STD3_mapped","["],[[65340,65340],"disallowed_STD3_mapped","\\"],[[65341,65341],"disallowed_STD3_mapped","]"],[[65342,65342],"disallowed_STD3_mapped","^"],[[65343,65343],"disallowed_STD3_mapped","_"],[[65344,65344],"disallowed_STD3_mapped","`"],[[65345,65345],"mapped","a"],[[65346,65346],"mapped","b"],[[65347,65347],"mapped","c"],[[65348,65348],"mapped","d"],[[65349,65349],"mapped","e"],[[65350,65350],"mapped","f"],[[65351,65351],"mapped","g"],[[65352,65352],"mapped","h"],[[65353,65353],"mapped","i"],[[65354,65354],"mapped","j"],[[65355,65355],"mapped","k"],[[65356,65356],"mapped","l"],[[65357,65357],"mapped","m"],[[65358,65358],"mapped","n"],[[65359,65359],"mapped","o"],[[65360,65360],"mapped","p"],[[65361,65361],"mapped","q"],[[65362,65362],"mapped","r"],[[65363,65363],"mapped","s"],[[65364,65364],"mapped","t"],[[65365,65365],"mapped","u"],[[65366,65366],"mapped","v"],[[65367,65367],"mapped","w"],[[65368,65368],"mapped","x"],[[65369,65369],"mapped","y"],[[65370,65370],"mapped","z"],[[65371,65371],"disallowed_STD3_mapped","{"],[[65372,65372],"disallowed_STD3_mapped","|"],[[65373,65373],"disallowed_STD3_mapped","}"],[[65374,65374],"disallowed_STD3_mapped","~"],[[65375,65375],"mapped","⦅"],[[65376,65376],"mapped","⦆"],[[65377,65377],"mapped","."],[[65378,65378],"mapped","「"],[[65379,65379],"mapped","」"],[[65380,65380],"mapped","、"],[[65381,65381],"mapped","・"],[[65382,65382],"mapped","ヲ"],[[65383,65383],"mapped","ァ"],[[65384,65384],"mapped","ィ"],[[65385,65385],"mapped","ゥ"],[[65386,65386],"mapped","ェ"],[[65387,65387],"mapped","ォ"],[[65388,65388],"mapped","ャ"],[[65389,65389],"mapped","ュ"],[[65390,65390],"mapped","ョ"],[[65391,65391],"mapped","ッ"],[[65392,65392],"mapped","ー"],[[65393,65393],"mapped","ア"],[[65394,65394],"mapped","イ"],[[65395,65395],"mapped","ウ"],[[65396,65396],"mapped","エ"],[[65397,65397],"mapped","オ"],[[65398,65398],"mapped","カ"],[[65399,65399],"mapped","キ"],[[65400,65400],"mapped","ク"],[[65401,65401],"mapped","ケ"],[[65402,65402],"mapped","コ"],[[65403,65403],"mapped","サ"],[[65404,65404],"mapped","シ"],[[65405,65405],"mapped","ス"],[[65406,65406],"mapped","セ"],[[65407,65407],"mapped","ソ"],[[65408,65408],"mapped","タ"],[[65409,65409],"mapped","チ"],[[65410,65410],"mapped","ツ"],[[65411,65411],"mapped","テ"],[[65412,65412],"mapped","ト"],[[65413,65413],"mapped","ナ"],[[65414,65414],"mapped","ニ"],[[65415,65415],"mapped","ヌ"],[[65416,65416],"mapped","ネ"],[[65417,65417],"mapped","ノ"],[[65418,65418],"mapped","ハ"],[[65419,65419],"mapped","ヒ"],[[65420,65420],"mapped","フ"],[[65421,65421],"mapped","ヘ"],[[65422,65422],"mapped","ホ"],[[65423,65423],"mapped","マ"],[[65424,65424],"mapped","ミ"],[[65425,65425],"mapped","ム"],[[65426,65426],"mapped","メ"],[[65427,65427],"mapped","モ"],[[65428,65428],"mapped","ヤ"],[[65429,65429],"mapped","ユ"],[[65430,65430],"mapped","ヨ"],[[65431,65431],"mapped","ラ"],[[65432,65432],"mapped","リ"],[[65433,65433],"mapped","ル"],[[65434,65434],"mapped","レ"],[[65435,65435],"mapped","ロ"],[[65436,65436],"mapped","ワ"],[[65437,65437],"mapped","ン"],[[65438,65438],"mapped","゙"],[[65439,65439],"mapped","゚"],[[65440,65440],"disallowed"],[[65441,65441],"mapped","ᄀ"],[[65442,65442],"mapped","ᄁ"],[[65443,65443],"mapped","ᆪ"],[[65444,65444],"mapped","ᄂ"],[[65445,65445],"mapped","ᆬ"],[[65446,65446],"mapped","ᆭ"],[[65447,65447],"mapped","ᄃ"],[[65448,65448],"mapped","ᄄ"],[[65449,65449],"mapped","ᄅ"],[[65450,65450],"mapped","ᆰ"],[[65451,65451],"mapped","ᆱ"],[[65452,65452],"mapped","ᆲ"],[[65453,65453],"mapped","ᆳ"],[[65454,65454],"mapped","ᆴ"],[[65455,65455],"mapped","ᆵ"],[[65456,65456],"mapped","ᄚ"],[[65457,65457],"mapped","ᄆ"],[[65458,65458],"mapped","ᄇ"],[[65459,65459],"mapped","ᄈ"],[[65460,65460],"mapped","ᄡ"],[[65461,65461],"mapped","ᄉ"],[[65462,65462],"mapped","ᄊ"],[[65463,65463],"mapped","ᄋ"],[[65464,65464],"mapped","ᄌ"],[[65465,65465],"mapped","ᄍ"],[[65466,65466],"mapped","ᄎ"],[[65467,65467],"mapped","ᄏ"],[[65468,65468],"mapped","ᄐ"],[[65469,65469],"mapped","ᄑ"],[[65470,65470],"mapped","ᄒ"],[[65471,65473],"disallowed"],[[65474,65474],"mapped","ᅡ"],[[65475,65475],"mapped","ᅢ"],[[65476,65476],"mapped","ᅣ"],[[65477,65477],"mapped","ᅤ"],[[65478,65478],"mapped","ᅥ"],[[65479,65479],"mapped","ᅦ"],[[65480,65481],"disallowed"],[[65482,65482],"mapped","ᅧ"],[[65483,65483],"mapped","ᅨ"],[[65484,65484],"mapped","ᅩ"],[[65485,65485],"mapped","ᅪ"],[[65486,65486],"mapped","ᅫ"],[[65487,65487],"mapped","ᅬ"],[[65488,65489],"disallowed"],[[65490,65490],"mapped","ᅭ"],[[65491,65491],"mapped","ᅮ"],[[65492,65492],"mapped","ᅯ"],[[65493,65493],"mapped","ᅰ"],[[65494,65494],"mapped","ᅱ"],[[65495,65495],"mapped","ᅲ"],[[65496,65497],"disallowed"],[[65498,65498],"mapped","ᅳ"],[[65499,65499],"mapped","ᅴ"],[[65500,65500],"mapped","ᅵ"],[[65501,65503],"disallowed"],[[65504,65504],"mapped","¢"],[[65505,65505],"mapped","£"],[[65506,65506],"mapped","¬"],[[65507,65507],"disallowed_STD3_mapped"," ̄"],[[65508,65508],"mapped","¦"],[[65509,65509],"mapped","¥"],[[65510,65510],"mapped","₩"],[[65511,65511],"disallowed"],[[65512,65512],"mapped","│"],[[65513,65513],"mapped","←"],[[65514,65514],"mapped","↑"],[[65515,65515],"mapped","→"],[[65516,65516],"mapped","↓"],[[65517,65517],"mapped","■"],[[65518,65518],"mapped","○"],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid","","NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid","","NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid","","NV8"],[[65856,65930],"valid","","NV8"],[[65931,65932],"valid","","NV8"],[[65933,65934],"valid","","NV8"],[[65935,65935],"disallowed"],[[65936,65947],"valid","","NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid","","NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid","","NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid","","NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid","","NV8"],[[66340,66348],"disallowed"],[[66349,66351],"valid"],[[66352,66368],"valid"],[[66369,66369],"valid","","NV8"],[[66370,66377],"valid"],[[66378,66378],"valid","","NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid","","NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid","","NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped","𐐨"],[[66561,66561],"mapped","𐐩"],[[66562,66562],"mapped","𐐪"],[[66563,66563],"mapped","𐐫"],[[66564,66564],"mapped","𐐬"],[[66565,66565],"mapped","𐐭"],[[66566,66566],"mapped","𐐮"],[[66567,66567],"mapped","𐐯"],[[66568,66568],"mapped","𐐰"],[[66569,66569],"mapped","𐐱"],[[66570,66570],"mapped","𐐲"],[[66571,66571],"mapped","𐐳"],[[66572,66572],"mapped","𐐴"],[[66573,66573],"mapped","𐐵"],[[66574,66574],"mapped","𐐶"],[[66575,66575],"mapped","𐐷"],[[66576,66576],"mapped","𐐸"],[[66577,66577],"mapped","𐐹"],[[66578,66578],"mapped","𐐺"],[[66579,66579],"mapped","𐐻"],[[66580,66580],"mapped","𐐼"],[[66581,66581],"mapped","𐐽"],[[66582,66582],"mapped","𐐾"],[[66583,66583],"mapped","𐐿"],[[66584,66584],"mapped","𐑀"],[[66585,66585],"mapped","𐑁"],[[66586,66586],"mapped","𐑂"],[[66587,66587],"mapped","𐑃"],[[66588,66588],"mapped","𐑄"],[[66589,66589],"mapped","𐑅"],[[66590,66590],"mapped","𐑆"],[[66591,66591],"mapped","𐑇"],[[66592,66592],"mapped","𐑈"],[[66593,66593],"mapped","𐑉"],[[66594,66594],"mapped","𐑊"],[[66595,66595],"mapped","𐑋"],[[66596,66596],"mapped","𐑌"],[[66597,66597],"mapped","𐑍"],[[66598,66598],"mapped","𐑎"],[[66599,66599],"mapped","𐑏"],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66735],"disallowed"],[[66736,66736],"mapped","𐓘"],[[66737,66737],"mapped","𐓙"],[[66738,66738],"mapped","𐓚"],[[66739,66739],"mapped","𐓛"],[[66740,66740],"mapped","𐓜"],[[66741,66741],"mapped","𐓝"],[[66742,66742],"mapped","𐓞"],[[66743,66743],"mapped","𐓟"],[[66744,66744],"mapped","𐓠"],[[66745,66745],"mapped","𐓡"],[[66746,66746],"mapped","𐓢"],[[66747,66747],"mapped","𐓣"],[[66748,66748],"mapped","𐓤"],[[66749,66749],"mapped","𐓥"],[[66750,66750],"mapped","𐓦"],[[66751,66751],"mapped","𐓧"],[[66752,66752],"mapped","𐓨"],[[66753,66753],"mapped","𐓩"],[[66754,66754],"mapped","𐓪"],[[66755,66755],"mapped","𐓫"],[[66756,66756],"mapped","𐓬"],[[66757,66757],"mapped","𐓭"],[[66758,66758],"mapped","𐓮"],[[66759,66759],"mapped","𐓯"],[[66760,66760],"mapped","𐓰"],[[66761,66761],"mapped","𐓱"],[[66762,66762],"mapped","𐓲"],[[66763,66763],"mapped","𐓳"],[[66764,66764],"mapped","𐓴"],[[66765,66765],"mapped","𐓵"],[[66766,66766],"mapped","𐓶"],[[66767,66767],"mapped","𐓷"],[[66768,66768],"mapped","𐓸"],[[66769,66769],"mapped","𐓹"],[[66770,66770],"mapped","𐓺"],[[66771,66771],"mapped","𐓻"],[[66772,66775],"disallowed"],[[66776,66811],"valid"],[[66812,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid","","NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid","","NV8"],[[67680,67702],"valid"],[[67703,67711],"valid","","NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid","","NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid","","NV8"],[[67840,67861],"valid"],[[67862,67865],"valid","","NV8"],[[67866,67867],"valid","","NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid","","NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid","","NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid","","NV8"],[[68030,68031],"valid"],[[68032,68047],"valid","","NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid","","NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid","","NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid","","NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid","","NV8"],[[68224,68252],"valid"],[[68253,68255],"valid","","NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid","","NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid","","NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid","","NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid","","NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid","","NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid","","NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid","","NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped","𐳀"],[[68737,68737],"mapped","𐳁"],[[68738,68738],"mapped","𐳂"],[[68739,68739],"mapped","𐳃"],[[68740,68740],"mapped","𐳄"],[[68741,68741],"mapped","𐳅"],[[68742,68742],"mapped","𐳆"],[[68743,68743],"mapped","𐳇"],[[68744,68744],"mapped","𐳈"],[[68745,68745],"mapped","𐳉"],[[68746,68746],"mapped","𐳊"],[[68747,68747],"mapped","𐳋"],[[68748,68748],"mapped","𐳌"],[[68749,68749],"mapped","𐳍"],[[68750,68750],"mapped","𐳎"],[[68751,68751],"mapped","𐳏"],[[68752,68752],"mapped","𐳐"],[[68753,68753],"mapped","𐳑"],[[68754,68754],"mapped","𐳒"],[[68755,68755],"mapped","𐳓"],[[68756,68756],"mapped","𐳔"],[[68757,68757],"mapped","𐳕"],[[68758,68758],"mapped","𐳖"],[[68759,68759],"mapped","𐳗"],[[68760,68760],"mapped","𐳘"],[[68761,68761],"mapped","𐳙"],[[68762,68762],"mapped","𐳚"],[[68763,68763],"mapped","𐳛"],[[68764,68764],"mapped","𐳜"],[[68765,68765],"mapped","𐳝"],[[68766,68766],"mapped","𐳞"],[[68767,68767],"mapped","𐳟"],[[68768,68768],"mapped","𐳠"],[[68769,68769],"mapped","𐳡"],[[68770,68770],"mapped","𐳢"],[[68771,68771],"mapped","𐳣"],[[68772,68772],"mapped","𐳤"],[[68773,68773],"mapped","𐳥"],[[68774,68774],"mapped","𐳦"],[[68775,68775],"mapped","𐳧"],[[68776,68776],"mapped","𐳨"],[[68777,68777],"mapped","𐳩"],[[68778,68778],"mapped","𐳪"],[[68779,68779],"mapped","𐳫"],[[68780,68780],"mapped","𐳬"],[[68781,68781],"mapped","𐳭"],[[68782,68782],"mapped","𐳮"],[[68783,68783],"mapped","𐳯"],[[68784,68784],"mapped","𐳰"],[[68785,68785],"mapped","𐳱"],[[68786,68786],"mapped","𐳲"],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid","","NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid","","NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid","","NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid","","NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid","","NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid","","NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid","","NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid","","NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid","","NV8"],[[70089,70089],"valid","","NV8"],[[70090,70092],"valid"],[[70093,70093],"valid","","NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid","","NV8"],[[70108,70108],"valid"],[[70109,70111],"valid","","NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid","","NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid","","NV8"],[[70206,70206],"valid"],[[70207,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid","","NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70655],"disallowed"],[[70656,70730],"valid"],[[70731,70735],"valid","","NV8"],[[70736,70745],"valid"],[[70746,70746],"disallowed"],[[70747,70747],"valid","","NV8"],[[70748,70748],"disallowed"],[[70749,70749],"valid","","NV8"],[[70750,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid","","NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid","","NV8"],[[71114,71127],"valid","","NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid","","NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71263],"disallowed"],[[71264,71276],"valid","","NV8"],[[71277,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid","","NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped","𑣀"],[[71841,71841],"mapped","𑣁"],[[71842,71842],"mapped","𑣂"],[[71843,71843],"mapped","𑣃"],[[71844,71844],"mapped","𑣄"],[[71845,71845],"mapped","𑣅"],[[71846,71846],"mapped","𑣆"],[[71847,71847],"mapped","𑣇"],[[71848,71848],"mapped","𑣈"],[[71849,71849],"mapped","𑣉"],[[71850,71850],"mapped","𑣊"],[[71851,71851],"mapped","𑣋"],[[71852,71852],"mapped","𑣌"],[[71853,71853],"mapped","𑣍"],[[71854,71854],"mapped","𑣎"],[[71855,71855],"mapped","𑣏"],[[71856,71856],"mapped","𑣐"],[[71857,71857],"mapped","𑣑"],[[71858,71858],"mapped","𑣒"],[[71859,71859],"mapped","𑣓"],[[71860,71860],"mapped","𑣔"],[[71861,71861],"mapped","𑣕"],[[71862,71862],"mapped","𑣖"],[[71863,71863],"mapped","𑣗"],[[71864,71864],"mapped","𑣘"],[[71865,71865],"mapped","𑣙"],[[71866,71866],"mapped","𑣚"],[[71867,71867],"mapped","𑣛"],[[71868,71868],"mapped","𑣜"],[[71869,71869],"mapped","𑣝"],[[71870,71870],"mapped","𑣞"],[[71871,71871],"mapped","𑣟"],[[71872,71913],"valid"],[[71914,71922],"valid","","NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72191],"disallowed"],[[72192,72254],"valid"],[[72255,72262],"valid","","NV8"],[[72263,72263],"valid"],[[72264,72271],"disallowed"],[[72272,72323],"valid"],[[72324,72325],"disallowed"],[[72326,72345],"valid"],[[72346,72348],"valid","","NV8"],[[72349,72349],"disallowed"],[[72350,72354],"valid","","NV8"],[[72355,72383],"disallowed"],[[72384,72440],"valid"],[[72441,72703],"disallowed"],[[72704,72712],"valid"],[[72713,72713],"disallowed"],[[72714,72758],"valid"],[[72759,72759],"disallowed"],[[72760,72768],"valid"],[[72769,72773],"valid","","NV8"],[[72774,72783],"disallowed"],[[72784,72793],"valid"],[[72794,72812],"valid","","NV8"],[[72813,72815],"disallowed"],[[72816,72817],"valid","","NV8"],[[72818,72847],"valid"],[[72848,72849],"disallowed"],[[72850,72871],"valid"],[[72872,72872],"disallowed"],[[72873,72886],"valid"],[[72887,72959],"disallowed"],[[72960,72966],"valid"],[[72967,72967],"disallowed"],[[72968,72969],"valid"],[[72970,72970],"disallowed"],[[72971,73014],"valid"],[[73015,73017],"disallowed"],[[73018,73018],"valid"],[[73019,73019],"disallowed"],[[73020,73021],"valid"],[[73022,73022],"disallowed"],[[73023,73031],"valid"],[[73032,73039],"disallowed"],[[73040,73049],"valid"],[[73050,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid","","NV8"],[[74851,74862],"valid","","NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid","","NV8"],[[74868,74868],"valid","","NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid","","NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid","","NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid","","NV8"],[[92992,92995],"valid"],[[92996,92997],"valid","","NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid","","NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,94175],"disallowed"],[[94176,94176],"valid"],[[94177,94177],"valid"],[[94178,94207],"disallowed"],[[94208,100332],"valid"],[[100333,100351],"disallowed"],[[100352,101106],"valid"],[[101107,110591],"disallowed"],[[110592,110593],"valid"],[[110594,110878],"valid"],[[110879,110959],"disallowed"],[[110960,111355],"valid"],[[111356,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid","","NV8"],[[113821,113822],"valid"],[[113823,113823],"valid","","NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid","","NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid","","NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid","","NV8"],[[119082,119133],"valid","","NV8"],[[119134,119134],"mapped","𝅗𝅥"],[[119135,119135],"mapped","𝅘𝅥"],[[119136,119136],"mapped","𝅘𝅥𝅮"],[[119137,119137],"mapped","𝅘𝅥𝅯"],[[119138,119138],"mapped","𝅘𝅥𝅰"],[[119139,119139],"mapped","𝅘𝅥𝅱"],[[119140,119140],"mapped","𝅘𝅥𝅲"],[[119141,119154],"valid","","NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid","","NV8"],[[119227,119227],"mapped","𝆹𝅥"],[[119228,119228],"mapped","𝆺𝅥"],[[119229,119229],"mapped","𝆹𝅥𝅮"],[[119230,119230],"mapped","𝆺𝅥𝅮"],[[119231,119231],"mapped","𝆹𝅥𝅯"],[[119232,119232],"mapped","𝆺𝅥𝅯"],[[119233,119261],"valid","","NV8"],[[119262,119272],"valid","","NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid","","NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid","","NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid","","NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped","a"],[[119809,119809],"mapped","b"],[[119810,119810],"mapped","c"],[[119811,119811],"mapped","d"],[[119812,119812],"mapped","e"],[[119813,119813],"mapped","f"],[[119814,119814],"mapped","g"],[[119815,119815],"mapped","h"],[[119816,119816],"mapped","i"],[[119817,119817],"mapped","j"],[[119818,119818],"mapped","k"],[[119819,119819],"mapped","l"],[[119820,119820],"mapped","m"],[[119821,119821],"mapped","n"],[[119822,119822],"mapped","o"],[[119823,119823],"mapped","p"],[[119824,119824],"mapped","q"],[[119825,119825],"mapped","r"],[[119826,119826],"mapped","s"],[[119827,119827],"mapped","t"],[[119828,119828],"mapped","u"],[[119829,119829],"mapped","v"],[[119830,119830],"mapped","w"],[[119831,119831],"mapped","x"],[[119832,119832],"mapped","y"],[[119833,119833],"mapped","z"],[[119834,119834],"mapped","a"],[[119835,119835],"mapped","b"],[[119836,119836],"mapped","c"],[[119837,119837],"mapped","d"],[[119838,119838],"mapped","e"],[[119839,119839],"mapped","f"],[[119840,119840],"mapped","g"],[[119841,119841],"mapped","h"],[[119842,119842],"mapped","i"],[[119843,119843],"mapped","j"],[[119844,119844],"mapped","k"],[[119845,119845],"mapped","l"],[[119846,119846],"mapped","m"],[[119847,119847],"mapped","n"],[[119848,119848],"mapped","o"],[[119849,119849],"mapped","p"],[[119850,119850],"mapped","q"],[[119851,119851],"mapped","r"],[[119852,119852],"mapped","s"],[[119853,119853],"mapped","t"],[[119854,119854],"mapped","u"],[[119855,119855],"mapped","v"],[[119856,119856],"mapped","w"],[[119857,119857],"mapped","x"],[[119858,119858],"mapped","y"],[[119859,119859],"mapped","z"],[[119860,119860],"mapped","a"],[[119861,119861],"mapped","b"],[[119862,119862],"mapped","c"],[[119863,119863],"mapped","d"],[[119864,119864],"mapped","e"],[[119865,119865],"mapped","f"],[[119866,119866],"mapped","g"],[[119867,119867],"mapped","h"],[[119868,119868],"mapped","i"],[[119869,119869],"mapped","j"],[[119870,119870],"mapped","k"],[[119871,119871],"mapped","l"],[[119872,119872],"mapped","m"],[[119873,119873],"mapped","n"],[[119874,119874],"mapped","o"],[[119875,119875],"mapped","p"],[[119876,119876],"mapped","q"],[[119877,119877],"mapped","r"],[[119878,119878],"mapped","s"],[[119879,119879],"mapped","t"],[[119880,119880],"mapped","u"],[[119881,119881],"mapped","v"],[[119882,119882],"mapped","w"],[[119883,119883],"mapped","x"],[[119884,119884],"mapped","y"],[[119885,119885],"mapped","z"],[[119886,119886],"mapped","a"],[[119887,119887],"mapped","b"],[[119888,119888],"mapped","c"],[[119889,119889],"mapped","d"],[[119890,119890],"mapped","e"],[[119891,119891],"mapped","f"],[[119892,119892],"mapped","g"],[[119893,119893],"disallowed"],[[119894,119894],"mapped","i"],[[119895,119895],"mapped","j"],[[119896,119896],"mapped","k"],[[119897,119897],"mapped","l"],[[119898,119898],"mapped","m"],[[119899,119899],"mapped","n"],[[119900,119900],"mapped","o"],[[119901,119901],"mapped","p"],[[119902,119902],"mapped","q"],[[119903,119903],"mapped","r"],[[119904,119904],"mapped","s"],[[119905,119905],"mapped","t"],[[119906,119906],"mapped","u"],[[119907,119907],"mapped","v"],[[119908,119908],"mapped","w"],[[119909,119909],"mapped","x"],[[119910,119910],"mapped","y"],[[119911,119911],"mapped","z"],[[119912,119912],"mapped","a"],[[119913,119913],"mapped","b"],[[119914,119914],"mapped","c"],[[119915,119915],"mapped","d"],[[119916,119916],"mapped","e"],[[119917,119917],"mapped","f"],[[119918,119918],"mapped","g"],[[119919,119919],"mapped","h"],[[119920,119920],"mapped","i"],[[119921,119921],"mapped","j"],[[119922,119922],"mapped","k"],[[119923,119923],"mapped","l"],[[119924,119924],"mapped","m"],[[119925,119925],"mapped","n"],[[119926,119926],"mapped","o"],[[119927,119927],"mapped","p"],[[119928,119928],"mapped","q"],[[119929,119929],"mapped","r"],[[119930,119930],"mapped","s"],[[119931,119931],"mapped","t"],[[119932,119932],"mapped","u"],[[119933,119933],"mapped","v"],[[119934,119934],"mapped","w"],[[119935,119935],"mapped","x"],[[119936,119936],"mapped","y"],[[119937,119937],"mapped","z"],[[119938,119938],"mapped","a"],[[119939,119939],"mapped","b"],[[119940,119940],"mapped","c"],[[119941,119941],"mapped","d"],[[119942,119942],"mapped","e"],[[119943,119943],"mapped","f"],[[119944,119944],"mapped","g"],[[119945,119945],"mapped","h"],[[119946,119946],"mapped","i"],[[119947,119947],"mapped","j"],[[119948,119948],"mapped","k"],[[119949,119949],"mapped","l"],[[119950,119950],"mapped","m"],[[119951,119951],"mapped","n"],[[119952,119952],"mapped","o"],[[119953,119953],"mapped","p"],[[119954,119954],"mapped","q"],[[119955,119955],"mapped","r"],[[119956,119956],"mapped","s"],[[119957,119957],"mapped","t"],[[119958,119958],"mapped","u"],[[119959,119959],"mapped","v"],[[119960,119960],"mapped","w"],[[119961,119961],"mapped","x"],[[119962,119962],"mapped","y"],[[119963,119963],"mapped","z"],[[119964,119964],"mapped","a"],[[119965,119965],"disallowed"],[[119966,119966],"mapped","c"],[[119967,119967],"mapped","d"],[[119968,119969],"disallowed"],[[119970,119970],"mapped","g"],[[119971,119972],"disallowed"],[[119973,119973],"mapped","j"],[[119974,119974],"mapped","k"],[[119975,119976],"disallowed"],[[119977,119977],"mapped","n"],[[119978,119978],"mapped","o"],[[119979,119979],"mapped","p"],[[119980,119980],"mapped","q"],[[119981,119981],"disallowed"],[[119982,119982],"mapped","s"],[[119983,119983],"mapped","t"],[[119984,119984],"mapped","u"],[[119985,119985],"mapped","v"],[[119986,119986],"mapped","w"],[[119987,119987],"mapped","x"],[[119988,119988],"mapped","y"],[[119989,119989],"mapped","z"],[[119990,119990],"mapped","a"],[[119991,119991],"mapped","b"],[[119992,119992],"mapped","c"],[[119993,119993],"mapped","d"],[[119994,119994],"disallowed"],[[119995,119995],"mapped","f"],[[119996,119996],"disallowed"],[[119997,119997],"mapped","h"],[[119998,119998],"mapped","i"],[[119999,119999],"mapped","j"],[[120000,120000],"mapped","k"],[[120001,120001],"mapped","l"],[[120002,120002],"mapped","m"],[[120003,120003],"mapped","n"],[[120004,120004],"disallowed"],[[120005,120005],"mapped","p"],[[120006,120006],"mapped","q"],[[120007,120007],"mapped","r"],[[120008,120008],"mapped","s"],[[120009,120009],"mapped","t"],[[120010,120010],"mapped","u"],[[120011,120011],"mapped","v"],[[120012,120012],"mapped","w"],[[120013,120013],"mapped","x"],[[120014,120014],"mapped","y"],[[120015,120015],"mapped","z"],[[120016,120016],"mapped","a"],[[120017,120017],"mapped","b"],[[120018,120018],"mapped","c"],[[120019,120019],"mapped","d"],[[120020,120020],"mapped","e"],[[120021,120021],"mapped","f"],[[120022,120022],"mapped","g"],[[120023,120023],"mapped","h"],[[120024,120024],"mapped","i"],[[120025,120025],"mapped","j"],[[120026,120026],"mapped","k"],[[120027,120027],"mapped","l"],[[120028,120028],"mapped","m"],[[120029,120029],"mapped","n"],[[120030,120030],"mapped","o"],[[120031,120031],"mapped","p"],[[120032,120032],"mapped","q"],[[120033,120033],"mapped","r"],[[120034,120034],"mapped","s"],[[120035,120035],"mapped","t"],[[120036,120036],"mapped","u"],[[120037,120037],"mapped","v"],[[120038,120038],"mapped","w"],[[120039,120039],"mapped","x"],[[120040,120040],"mapped","y"],[[120041,120041],"mapped","z"],[[120042,120042],"mapped","a"],[[120043,120043],"mapped","b"],[[120044,120044],"mapped","c"],[[120045,120045],"mapped","d"],[[120046,120046],"mapped","e"],[[120047,120047],"mapped","f"],[[120048,120048],"mapped","g"],[[120049,120049],"mapped","h"],[[120050,120050],"mapped","i"],[[120051,120051],"mapped","j"],[[120052,120052],"mapped","k"],[[120053,120053],"mapped","l"],[[120054,120054],"mapped","m"],[[120055,120055],"mapped","n"],[[120056,120056],"mapped","o"],[[120057,120057],"mapped","p"],[[120058,120058],"mapped","q"],[[120059,120059],"mapped","r"],[[120060,120060],"mapped","s"],[[120061,120061],"mapped","t"],[[120062,120062],"mapped","u"],[[120063,120063],"mapped","v"],[[120064,120064],"mapped","w"],[[120065,120065],"mapped","x"],[[120066,120066],"mapped","y"],[[120067,120067],"mapped","z"],[[120068,120068],"mapped","a"],[[120069,120069],"mapped","b"],[[120070,120070],"disallowed"],[[120071,120071],"mapped","d"],[[120072,120072],"mapped","e"],[[120073,120073],"mapped","f"],[[120074,120074],"mapped","g"],[[120075,120076],"disallowed"],[[120077,120077],"mapped","j"],[[120078,120078],"mapped","k"],[[120079,120079],"mapped","l"],[[120080,120080],"mapped","m"],[[120081,120081],"mapped","n"],[[120082,120082],"mapped","o"],[[120083,120083],"mapped","p"],[[120084,120084],"mapped","q"],[[120085,120085],"disallowed"],[[120086,120086],"mapped","s"],[[120087,120087],"mapped","t"],[[120088,120088],"mapped","u"],[[120089,120089],"mapped","v"],[[120090,120090],"mapped","w"],[[120091,120091],"mapped","x"],[[120092,120092],"mapped","y"],[[120093,120093],"disallowed"],[[120094,120094],"mapped","a"],[[120095,120095],"mapped","b"],[[120096,120096],"mapped","c"],[[120097,120097],"mapped","d"],[[120098,120098],"mapped","e"],[[120099,120099],"mapped","f"],[[120100,120100],"mapped","g"],[[120101,120101],"mapped","h"],[[120102,120102],"mapped","i"],[[120103,120103],"mapped","j"],[[120104,120104],"mapped","k"],[[120105,120105],"mapped","l"],[[120106,120106],"mapped","m"],[[120107,120107],"mapped","n"],[[120108,120108],"mapped","o"],[[120109,120109],"mapped","p"],[[120110,120110],"mapped","q"],[[120111,120111],"mapped","r"],[[120112,120112],"mapped","s"],[[120113,120113],"mapped","t"],[[120114,120114],"mapped","u"],[[120115,120115],"mapped","v"],[[120116,120116],"mapped","w"],[[120117,120117],"mapped","x"],[[120118,120118],"mapped","y"],[[120119,120119],"mapped","z"],[[120120,120120],"mapped","a"],[[120121,120121],"mapped","b"],[[120122,120122],"disallowed"],[[120123,120123],"mapped","d"],[[120124,120124],"mapped","e"],[[120125,120125],"mapped","f"],[[120126,120126],"mapped","g"],[[120127,120127],"disallowed"],[[120128,120128],"mapped","i"],[[120129,120129],"mapped","j"],[[120130,120130],"mapped","k"],[[120131,120131],"mapped","l"],[[120132,120132],"mapped","m"],[[120133,120133],"disallowed"],[[120134,120134],"mapped","o"],[[120135,120137],"disallowed"],[[120138,120138],"mapped","s"],[[120139,120139],"mapped","t"],[[120140,120140],"mapped","u"],[[120141,120141],"mapped","v"],[[120142,120142],"mapped","w"],[[120143,120143],"mapped","x"],[[120144,120144],"mapped","y"],[[120145,120145],"disallowed"],[[120146,120146],"mapped","a"],[[120147,120147],"mapped","b"],[[120148,120148],"mapped","c"],[[120149,120149],"mapped","d"],[[120150,120150],"mapped","e"],[[120151,120151],"mapped","f"],[[120152,120152],"mapped","g"],[[120153,120153],"mapped","h"],[[120154,120154],"mapped","i"],[[120155,120155],"mapped","j"],[[120156,120156],"mapped","k"],[[120157,120157],"mapped","l"],[[120158,120158],"mapped","m"],[[120159,120159],"mapped","n"],[[120160,120160],"mapped","o"],[[120161,120161],"mapped","p"],[[120162,120162],"mapped","q"],[[120163,120163],"mapped","r"],[[120164,120164],"mapped","s"],[[120165,120165],"mapped","t"],[[120166,120166],"mapped","u"],[[120167,120167],"mapped","v"],[[120168,120168],"mapped","w"],[[120169,120169],"mapped","x"],[[120170,120170],"mapped","y"],[[120171,120171],"mapped","z"],[[120172,120172],"mapped","a"],[[120173,120173],"mapped","b"],[[120174,120174],"mapped","c"],[[120175,120175],"mapped","d"],[[120176,120176],"mapped","e"],[[120177,120177],"mapped","f"],[[120178,120178],"mapped","g"],[[120179,120179],"mapped","h"],[[120180,120180],"mapped","i"],[[120181,120181],"mapped","j"],[[120182,120182],"mapped","k"],[[120183,120183],"mapped","l"],[[120184,120184],"mapped","m"],[[120185,120185],"mapped","n"],[[120186,120186],"mapped","o"],[[120187,120187],"mapped","p"],[[120188,120188],"mapped","q"],[[120189,120189],"mapped","r"],[[120190,120190],"mapped","s"],[[120191,120191],"mapped","t"],[[120192,120192],"mapped","u"],[[120193,120193],"mapped","v"],[[120194,120194],"mapped","w"],[[120195,120195],"mapped","x"],[[120196,120196],"mapped","y"],[[120197,120197],"mapped","z"],[[120198,120198],"mapped","a"],[[120199,120199],"mapped","b"],[[120200,120200],"mapped","c"],[[120201,120201],"mapped","d"],[[120202,120202],"mapped","e"],[[120203,120203],"mapped","f"],[[120204,120204],"mapped","g"],[[120205,120205],"mapped","h"],[[120206,120206],"mapped","i"],[[120207,120207],"mapped","j"],[[120208,120208],"mapped","k"],[[120209,120209],"mapped","l"],[[120210,120210],"mapped","m"],[[120211,120211],"mapped","n"],[[120212,120212],"mapped","o"],[[120213,120213],"mapped","p"],[[120214,120214],"mapped","q"],[[120215,120215],"mapped","r"],[[120216,120216],"mapped","s"],[[120217,120217],"mapped","t"],[[120218,120218],"mapped","u"],[[120219,120219],"mapped","v"],[[120220,120220],"mapped","w"],[[120221,120221],"mapped","x"],[[120222,120222],"mapped","y"],[[120223,120223],"mapped","z"],[[120224,120224],"mapped","a"],[[120225,120225],"mapped","b"],[[120226,120226],"mapped","c"],[[120227,120227],"mapped","d"],[[120228,120228],"mapped","e"],[[120229,120229],"mapped","f"],[[120230,120230],"mapped","g"],[[120231,120231],"mapped","h"],[[120232,120232],"mapped","i"],[[120233,120233],"mapped","j"],[[120234,120234],"mapped","k"],[[120235,120235],"mapped","l"],[[120236,120236],"mapped","m"],[[120237,120237],"mapped","n"],[[120238,120238],"mapped","o"],[[120239,120239],"mapped","p"],[[120240,120240],"mapped","q"],[[120241,120241],"mapped","r"],[[120242,120242],"mapped","s"],[[120243,120243],"mapped","t"],[[120244,120244],"mapped","u"],[[120245,120245],"mapped","v"],[[120246,120246],"mapped","w"],[[120247,120247],"mapped","x"],[[120248,120248],"mapped","y"],[[120249,120249],"mapped","z"],[[120250,120250],"mapped","a"],[[120251,120251],"mapped","b"],[[120252,120252],"mapped","c"],[[120253,120253],"mapped","d"],[[120254,120254],"mapped","e"],[[120255,120255],"mapped","f"],[[120256,120256],"mapped","g"],[[120257,120257],"mapped","h"],[[120258,120258],"mapped","i"],[[120259,120259],"mapped","j"],[[120260,120260],"mapped","k"],[[120261,120261],"mapped","l"],[[120262,120262],"mapped","m"],[[120263,120263],"mapped","n"],[[120264,120264],"mapped","o"],[[120265,120265],"mapped","p"],[[120266,120266],"mapped","q"],[[120267,120267],"mapped","r"],[[120268,120268],"mapped","s"],[[120269,120269],"mapped","t"],[[120270,120270],"mapped","u"],[[120271,120271],"mapped","v"],[[120272,120272],"mapped","w"],[[120273,120273],"mapped","x"],[[120274,120274],"mapped","y"],[[120275,120275],"mapped","z"],[[120276,120276],"mapped","a"],[[120277,120277],"mapped","b"],[[120278,120278],"mapped","c"],[[120279,120279],"mapped","d"],[[120280,120280],"mapped","e"],[[120281,120281],"mapped","f"],[[120282,120282],"mapped","g"],[[120283,120283],"mapped","h"],[[120284,120284],"mapped","i"],[[120285,120285],"mapped","j"],[[120286,120286],"mapped","k"],[[120287,120287],"mapped","l"],[[120288,120288],"mapped","m"],[[120289,120289],"mapped","n"],[[120290,120290],"mapped","o"],[[120291,120291],"mapped","p"],[[120292,120292],"mapped","q"],[[120293,120293],"mapped","r"],[[120294,120294],"mapped","s"],[[120295,120295],"mapped","t"],[[120296,120296],"mapped","u"],[[120297,120297],"mapped","v"],[[120298,120298],"mapped","w"],[[120299,120299],"mapped","x"],[[120300,120300],"mapped","y"],[[120301,120301],"mapped","z"],[[120302,120302],"mapped","a"],[[120303,120303],"mapped","b"],[[120304,120304],"mapped","c"],[[120305,120305],"mapped","d"],[[120306,120306],"mapped","e"],[[120307,120307],"mapped","f"],[[120308,120308],"mapped","g"],[[120309,120309],"mapped","h"],[[120310,120310],"mapped","i"],[[120311,120311],"mapped","j"],[[120312,120312],"mapped","k"],[[120313,120313],"mapped","l"],[[120314,120314],"mapped","m"],[[120315,120315],"mapped","n"],[[120316,120316],"mapped","o"],[[120317,120317],"mapped","p"],[[120318,120318],"mapped","q"],[[120319,120319],"mapped","r"],[[120320,120320],"mapped","s"],[[120321,120321],"mapped","t"],[[120322,120322],"mapped","u"],[[120323,120323],"mapped","v"],[[120324,120324],"mapped","w"],[[120325,120325],"mapped","x"],[[120326,120326],"mapped","y"],[[120327,120327],"mapped","z"],[[120328,120328],"mapped","a"],[[120329,120329],"mapped","b"],[[120330,120330],"mapped","c"],[[120331,120331],"mapped","d"],[[120332,120332],"mapped","e"],[[120333,120333],"mapped","f"],[[120334,120334],"mapped","g"],[[120335,120335],"mapped","h"],[[120336,120336],"mapped","i"],[[120337,120337],"mapped","j"],[[120338,120338],"mapped","k"],[[120339,120339],"mapped","l"],[[120340,120340],"mapped","m"],[[120341,120341],"mapped","n"],[[120342,120342],"mapped","o"],[[120343,120343],"mapped","p"],[[120344,120344],"mapped","q"],[[120345,120345],"mapped","r"],[[120346,120346],"mapped","s"],[[120347,120347],"mapped","t"],[[120348,120348],"mapped","u"],[[120349,120349],"mapped","v"],[[120350,120350],"mapped","w"],[[120351,120351],"mapped","x"],[[120352,120352],"mapped","y"],[[120353,120353],"mapped","z"],[[120354,120354],"mapped","a"],[[120355,120355],"mapped","b"],[[120356,120356],"mapped","c"],[[120357,120357],"mapped","d"],[[120358,120358],"mapped","e"],[[120359,120359],"mapped","f"],[[120360,120360],"mapped","g"],[[120361,120361],"mapped","h"],[[120362,120362],"mapped","i"],[[120363,120363],"mapped","j"],[[120364,120364],"mapped","k"],[[120365,120365],"mapped","l"],[[120366,120366],"mapped","m"],[[120367,120367],"mapped","n"],[[120368,120368],"mapped","o"],[[120369,120369],"mapped","p"],[[120370,120370],"mapped","q"],[[120371,120371],"mapped","r"],[[120372,120372],"mapped","s"],[[120373,120373],"mapped","t"],[[120374,120374],"mapped","u"],[[120375,120375],"mapped","v"],[[120376,120376],"mapped","w"],[[120377,120377],"mapped","x"],[[120378,120378],"mapped","y"],[[120379,120379],"mapped","z"],[[120380,120380],"mapped","a"],[[120381,120381],"mapped","b"],[[120382,120382],"mapped","c"],[[120383,120383],"mapped","d"],[[120384,120384],"mapped","e"],[[120385,120385],"mapped","f"],[[120386,120386],"mapped","g"],[[120387,120387],"mapped","h"],[[120388,120388],"mapped","i"],[[120389,120389],"mapped","j"],[[120390,120390],"mapped","k"],[[120391,120391],"mapped","l"],[[120392,120392],"mapped","m"],[[120393,120393],"mapped","n"],[[120394,120394],"mapped","o"],[[120395,120395],"mapped","p"],[[120396,120396],"mapped","q"],[[120397,120397],"mapped","r"],[[120398,120398],"mapped","s"],[[120399,120399],"mapped","t"],[[120400,120400],"mapped","u"],[[120401,120401],"mapped","v"],[[120402,120402],"mapped","w"],[[120403,120403],"mapped","x"],[[120404,120404],"mapped","y"],[[120405,120405],"mapped","z"],[[120406,120406],"mapped","a"],[[120407,120407],"mapped","b"],[[120408,120408],"mapped","c"],[[120409,120409],"mapped","d"],[[120410,120410],"mapped","e"],[[120411,120411],"mapped","f"],[[120412,120412],"mapped","g"],[[120413,120413],"mapped","h"],[[120414,120414],"mapped","i"],[[120415,120415],"mapped","j"],[[120416,120416],"mapped","k"],[[120417,120417],"mapped","l"],[[120418,120418],"mapped","m"],[[120419,120419],"mapped","n"],[[120420,120420],"mapped","o"],[[120421,120421],"mapped","p"],[[120422,120422],"mapped","q"],[[120423,120423],"mapped","r"],[[120424,120424],"mapped","s"],[[120425,120425],"mapped","t"],[[120426,120426],"mapped","u"],[[120427,120427],"mapped","v"],[[120428,120428],"mapped","w"],[[120429,120429],"mapped","x"],[[120430,120430],"mapped","y"],[[120431,120431],"mapped","z"],[[120432,120432],"mapped","a"],[[120433,120433],"mapped","b"],[[120434,120434],"mapped","c"],[[120435,120435],"mapped","d"],[[120436,120436],"mapped","e"],[[120437,120437],"mapped","f"],[[120438,120438],"mapped","g"],[[120439,120439],"mapped","h"],[[120440,120440],"mapped","i"],[[120441,120441],"mapped","j"],[[120442,120442],"mapped","k"],[[120443,120443],"mapped","l"],[[120444,120444],"mapped","m"],[[120445,120445],"mapped","n"],[[120446,120446],"mapped","o"],[[120447,120447],"mapped","p"],[[120448,120448],"mapped","q"],[[120449,120449],"mapped","r"],[[120450,120450],"mapped","s"],[[120451,120451],"mapped","t"],[[120452,120452],"mapped","u"],[[120453,120453],"mapped","v"],[[120454,120454],"mapped","w"],[[120455,120455],"mapped","x"],[[120456,120456],"mapped","y"],[[120457,120457],"mapped","z"],[[120458,120458],"mapped","a"],[[120459,120459],"mapped","b"],[[120460,120460],"mapped","c"],[[120461,120461],"mapped","d"],[[120462,120462],"mapped","e"],[[120463,120463],"mapped","f"],[[120464,120464],"mapped","g"],[[120465,120465],"mapped","h"],[[120466,120466],"mapped","i"],[[120467,120467],"mapped","j"],[[120468,120468],"mapped","k"],[[120469,120469],"mapped","l"],[[120470,120470],"mapped","m"],[[120471,120471],"mapped","n"],[[120472,120472],"mapped","o"],[[120473,120473],"mapped","p"],[[120474,120474],"mapped","q"],[[120475,120475],"mapped","r"],[[120476,120476],"mapped","s"],[[120477,120477],"mapped","t"],[[120478,120478],"mapped","u"],[[120479,120479],"mapped","v"],[[120480,120480],"mapped","w"],[[120481,120481],"mapped","x"],[[120482,120482],"mapped","y"],[[120483,120483],"mapped","z"],[[120484,120484],"mapped","ı"],[[120485,120485],"mapped","ȷ"],[[120486,120487],"disallowed"],[[120488,120488],"mapped","α"],[[120489,120489],"mapped","β"],[[120490,120490],"mapped","γ"],[[120491,120491],"mapped","δ"],[[120492,120492],"mapped","ε"],[[120493,120493],"mapped","ζ"],[[120494,120494],"mapped","η"],[[120495,120495],"mapped","θ"],[[120496,120496],"mapped","ι"],[[120497,120497],"mapped","κ"],[[120498,120498],"mapped","λ"],[[120499,120499],"mapped","μ"],[[120500,120500],"mapped","ν"],[[120501,120501],"mapped","ξ"],[[120502,120502],"mapped","ο"],[[120503,120503],"mapped","π"],[[120504,120504],"mapped","ρ"],[[120505,120505],"mapped","θ"],[[120506,120506],"mapped","σ"],[[120507,120507],"mapped","τ"],[[120508,120508],"mapped","υ"],[[120509,120509],"mapped","φ"],[[120510,120510],"mapped","χ"],[[120511,120511],"mapped","ψ"],[[120512,120512],"mapped","ω"],[[120513,120513],"mapped","∇"],[[120514,120514],"mapped","α"],[[120515,120515],"mapped","β"],[[120516,120516],"mapped","γ"],[[120517,120517],"mapped","δ"],[[120518,120518],"mapped","ε"],[[120519,120519],"mapped","ζ"],[[120520,120520],"mapped","η"],[[120521,120521],"mapped","θ"],[[120522,120522],"mapped","ι"],[[120523,120523],"mapped","κ"],[[120524,120524],"mapped","λ"],[[120525,120525],"mapped","μ"],[[120526,120526],"mapped","ν"],[[120527,120527],"mapped","ξ"],[[120528,120528],"mapped","ο"],[[120529,120529],"mapped","π"],[[120530,120530],"mapped","ρ"],[[120531,120532],"mapped","σ"],[[120533,120533],"mapped","τ"],[[120534,120534],"mapped","υ"],[[120535,120535],"mapped","φ"],[[120536,120536],"mapped","χ"],[[120537,120537],"mapped","ψ"],[[120538,120538],"mapped","ω"],[[120539,120539],"mapped","∂"],[[120540,120540],"mapped","ε"],[[120541,120541],"mapped","θ"],[[120542,120542],"mapped","κ"],[[120543,120543],"mapped","φ"],[[120544,120544],"mapped","ρ"],[[120545,120545],"mapped","π"],[[120546,120546],"mapped","α"],[[120547,120547],"mapped","β"],[[120548,120548],"mapped","γ"],[[120549,120549],"mapped","δ"],[[120550,120550],"mapped","ε"],[[120551,120551],"mapped","ζ"],[[120552,120552],"mapped","η"],[[120553,120553],"mapped","θ"],[[120554,120554],"mapped","ι"],[[120555,120555],"mapped","κ"],[[120556,120556],"mapped","λ"],[[120557,120557],"mapped","μ"],[[120558,120558],"mapped","ν"],[[120559,120559],"mapped","ξ"],[[120560,120560],"mapped","ο"],[[120561,120561],"mapped","π"],[[120562,120562],"mapped","ρ"],[[120563,120563],"mapped","θ"],[[120564,120564],"mapped","σ"],[[120565,120565],"mapped","τ"],[[120566,120566],"mapped","υ"],[[120567,120567],"mapped","φ"],[[120568,120568],"mapped","χ"],[[120569,120569],"mapped","ψ"],[[120570,120570],"mapped","ω"],[[120571,120571],"mapped","∇"],[[120572,120572],"mapped","α"],[[120573,120573],"mapped","β"],[[120574,120574],"mapped","γ"],[[120575,120575],"mapped","δ"],[[120576,120576],"mapped","ε"],[[120577,120577],"mapped","ζ"],[[120578,120578],"mapped","η"],[[120579,120579],"mapped","θ"],[[120580,120580],"mapped","ι"],[[120581,120581],"mapped","κ"],[[120582,120582],"mapped","λ"],[[120583,120583],"mapped","μ"],[[120584,120584],"mapped","ν"],[[120585,120585],"mapped","ξ"],[[120586,120586],"mapped","ο"],[[120587,120587],"mapped","π"],[[120588,120588],"mapped","ρ"],[[120589,120590],"mapped","σ"],[[120591,120591],"mapped","τ"],[[120592,120592],"mapped","υ"],[[120593,120593],"mapped","φ"],[[120594,120594],"mapped","χ"],[[120595,120595],"mapped","ψ"],[[120596,120596],"mapped","ω"],[[120597,120597],"mapped","∂"],[[120598,120598],"mapped","ε"],[[120599,120599],"mapped","θ"],[[120600,120600],"mapped","κ"],[[120601,120601],"mapped","φ"],[[120602,120602],"mapped","ρ"],[[120603,120603],"mapped","π"],[[120604,120604],"mapped","α"],[[120605,120605],"mapped","β"],[[120606,120606],"mapped","γ"],[[120607,120607],"mapped","δ"],[[120608,120608],"mapped","ε"],[[120609,120609],"mapped","ζ"],[[120610,120610],"mapped","η"],[[120611,120611],"mapped","θ"],[[120612,120612],"mapped","ι"],[[120613,120613],"mapped","κ"],[[120614,120614],"mapped","λ"],[[120615,120615],"mapped","μ"],[[120616,120616],"mapped","ν"],[[120617,120617],"mapped","ξ"],[[120618,120618],"mapped","ο"],[[120619,120619],"mapped","π"],[[120620,120620],"mapped","ρ"],[[120621,120621],"mapped","θ"],[[120622,120622],"mapped","σ"],[[120623,120623],"mapped","τ"],[[120624,120624],"mapped","υ"],[[120625,120625],"mapped","φ"],[[120626,120626],"mapped","χ"],[[120627,120627],"mapped","ψ"],[[120628,120628],"mapped","ω"],[[120629,120629],"mapped","∇"],[[120630,120630],"mapped","α"],[[120631,120631],"mapped","β"],[[120632,120632],"mapped","γ"],[[120633,120633],"mapped","δ"],[[120634,120634],"mapped","ε"],[[120635,120635],"mapped","ζ"],[[120636,120636],"mapped","η"],[[120637,120637],"mapped","θ"],[[120638,120638],"mapped","ι"],[[120639,120639],"mapped","κ"],[[120640,120640],"mapped","λ"],[[120641,120641],"mapped","μ"],[[120642,120642],"mapped","ν"],[[120643,120643],"mapped","ξ"],[[120644,120644],"mapped","ο"],[[120645,120645],"mapped","π"],[[120646,120646],"mapped","ρ"],[[120647,120648],"mapped","σ"],[[120649,120649],"mapped","τ"],[[120650,120650],"mapped","υ"],[[120651,120651],"mapped","φ"],[[120652,120652],"mapped","χ"],[[120653,120653],"mapped","ψ"],[[120654,120654],"mapped","ω"],[[120655,120655],"mapped","∂"],[[120656,120656],"mapped","ε"],[[120657,120657],"mapped","θ"],[[120658,120658],"mapped","κ"],[[120659,120659],"mapped","φ"],[[120660,120660],"mapped","ρ"],[[120661,120661],"mapped","π"],[[120662,120662],"mapped","α"],[[120663,120663],"mapped","β"],[[120664,120664],"mapped","γ"],[[120665,120665],"mapped","δ"],[[120666,120666],"mapped","ε"],[[120667,120667],"mapped","ζ"],[[120668,120668],"mapped","η"],[[120669,120669],"mapped","θ"],[[120670,120670],"mapped","ι"],[[120671,120671],"mapped","κ"],[[120672,120672],"mapped","λ"],[[120673,120673],"mapped","μ"],[[120674,120674],"mapped","ν"],[[120675,120675],"mapped","ξ"],[[120676,120676],"mapped","ο"],[[120677,120677],"mapped","π"],[[120678,120678],"mapped","ρ"],[[120679,120679],"mapped","θ"],[[120680,120680],"mapped","σ"],[[120681,120681],"mapped","τ"],[[120682,120682],"mapped","υ"],[[120683,120683],"mapped","φ"],[[120684,120684],"mapped","χ"],[[120685,120685],"mapped","ψ"],[[120686,120686],"mapped","ω"],[[120687,120687],"mapped","∇"],[[120688,120688],"mapped","α"],[[120689,120689],"mapped","β"],[[120690,120690],"mapped","γ"],[[120691,120691],"mapped","δ"],[[120692,120692],"mapped","ε"],[[120693,120693],"mapped","ζ"],[[120694,120694],"mapped","η"],[[120695,120695],"mapped","θ"],[[120696,120696],"mapped","ι"],[[120697,120697],"mapped","κ"],[[120698,120698],"mapped","λ"],[[120699,120699],"mapped","μ"],[[120700,120700],"mapped","ν"],[[120701,120701],"mapped","ξ"],[[120702,120702],"mapped","ο"],[[120703,120703],"mapped","π"],[[120704,120704],"mapped","ρ"],[[120705,120706],"mapped","σ"],[[120707,120707],"mapped","τ"],[[120708,120708],"mapped","υ"],[[120709,120709],"mapped","φ"],[[120710,120710],"mapped","χ"],[[120711,120711],"mapped","ψ"],[[120712,120712],"mapped","ω"],[[120713,120713],"mapped","∂"],[[120714,120714],"mapped","ε"],[[120715,120715],"mapped","θ"],[[120716,120716],"mapped","κ"],[[120717,120717],"mapped","φ"],[[120718,120718],"mapped","ρ"],[[120719,120719],"mapped","π"],[[120720,120720],"mapped","α"],[[120721,120721],"mapped","β"],[[120722,120722],"mapped","γ"],[[120723,120723],"mapped","δ"],[[120724,120724],"mapped","ε"],[[120725,120725],"mapped","ζ"],[[120726,120726],"mapped","η"],[[120727,120727],"mapped","θ"],[[120728,120728],"mapped","ι"],[[120729,120729],"mapped","κ"],[[120730,120730],"mapped","λ"],[[120731,120731],"mapped","μ"],[[120732,120732],"mapped","ν"],[[120733,120733],"mapped","ξ"],[[120734,120734],"mapped","ο"],[[120735,120735],"mapped","π"],[[120736,120736],"mapped","ρ"],[[120737,120737],"mapped","θ"],[[120738,120738],"mapped","σ"],[[120739,120739],"mapped","τ"],[[120740,120740],"mapped","υ"],[[120741,120741],"mapped","φ"],[[120742,120742],"mapped","χ"],[[120743,120743],"mapped","ψ"],[[120744,120744],"mapped","ω"],[[120745,120745],"mapped","∇"],[[120746,120746],"mapped","α"],[[120747,120747],"mapped","β"],[[120748,120748],"mapped","γ"],[[120749,120749],"mapped","δ"],[[120750,120750],"mapped","ε"],[[120751,120751],"mapped","ζ"],[[120752,120752],"mapped","η"],[[120753,120753],"mapped","θ"],[[120754,120754],"mapped","ι"],[[120755,120755],"mapped","κ"],[[120756,120756],"mapped","λ"],[[120757,120757],"mapped","μ"],[[120758,120758],"mapped","ν"],[[120759,120759],"mapped","ξ"],[[120760,120760],"mapped","ο"],[[120761,120761],"mapped","π"],[[120762,120762],"mapped","ρ"],[[120763,120764],"mapped","σ"],[[120765,120765],"mapped","τ"],[[120766,120766],"mapped","υ"],[[120767,120767],"mapped","φ"],[[120768,120768],"mapped","χ"],[[120769,120769],"mapped","ψ"],[[120770,120770],"mapped","ω"],[[120771,120771],"mapped","∂"],[[120772,120772],"mapped","ε"],[[120773,120773],"mapped","θ"],[[120774,120774],"mapped","κ"],[[120775,120775],"mapped","φ"],[[120776,120776],"mapped","ρ"],[[120777,120777],"mapped","π"],[[120778,120779],"mapped","ϝ"],[[120780,120781],"disallowed"],[[120782,120782],"mapped","0"],[[120783,120783],"mapped","1"],[[120784,120784],"mapped","2"],[[120785,120785],"mapped","3"],[[120786,120786],"mapped","4"],[[120787,120787],"mapped","5"],[[120788,120788],"mapped","6"],[[120789,120789],"mapped","7"],[[120790,120790],"mapped","8"],[[120791,120791],"mapped","9"],[[120792,120792],"mapped","0"],[[120793,120793],"mapped","1"],[[120794,120794],"mapped","2"],[[120795,120795],"mapped","3"],[[120796,120796],"mapped","4"],[[120797,120797],"mapped","5"],[[120798,120798],"mapped","6"],[[120799,120799],"mapped","7"],[[120800,120800],"mapped","8"],[[120801,120801],"mapped","9"],[[120802,120802],"mapped","0"],[[120803,120803],"mapped","1"],[[120804,120804],"mapped","2"],[[120805,120805],"mapped","3"],[[120806,120806],"mapped","4"],[[120807,120807],"mapped","5"],[[120808,120808],"mapped","6"],[[120809,120809],"mapped","7"],[[120810,120810],"mapped","8"],[[120811,120811],"mapped","9"],[[120812,120812],"mapped","0"],[[120813,120813],"mapped","1"],[[120814,120814],"mapped","2"],[[120815,120815],"mapped","3"],[[120816,120816],"mapped","4"],[[120817,120817],"mapped","5"],[[120818,120818],"mapped","6"],[[120819,120819],"mapped","7"],[[120820,120820],"mapped","8"],[[120821,120821],"mapped","9"],[[120822,120822],"mapped","0"],[[120823,120823],"mapped","1"],[[120824,120824],"mapped","2"],[[120825,120825],"mapped","3"],[[120826,120826],"mapped","4"],[[120827,120827],"mapped","5"],[[120828,120828],"mapped","6"],[[120829,120829],"mapped","7"],[[120830,120830],"mapped","8"],[[120831,120831],"mapped","9"],[[120832,121343],"valid","","NV8"],[[121344,121398],"valid"],[[121399,121402],"valid","","NV8"],[[121403,121452],"valid"],[[121453,121460],"valid","","NV8"],[[121461,121461],"valid"],[[121462,121475],"valid","","NV8"],[[121476,121476],"valid"],[[121477,121483],"valid","","NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,122879],"disallowed"],[[122880,122886],"valid"],[[122887,122887],"disallowed"],[[122888,122904],"valid"],[[122905,122906],"disallowed"],[[122907,122913],"valid"],[[122914,122914],"disallowed"],[[122915,122916],"valid"],[[122917,122917],"disallowed"],[[122918,122922],"valid"],[[122923,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid","","NV8"],[[125136,125142],"valid"],[[125143,125183],"disallowed"],[[125184,125184],"mapped","𞤢"],[[125185,125185],"mapped","𞤣"],[[125186,125186],"mapped","𞤤"],[[125187,125187],"mapped","𞤥"],[[125188,125188],"mapped","𞤦"],[[125189,125189],"mapped","𞤧"],[[125190,125190],"mapped","𞤨"],[[125191,125191],"mapped","𞤩"],[[125192,125192],"mapped","𞤪"],[[125193,125193],"mapped","𞤫"],[[125194,125194],"mapped","𞤬"],[[125195,125195],"mapped","𞤭"],[[125196,125196],"mapped","𞤮"],[[125197,125197],"mapped","𞤯"],[[125198,125198],"mapped","𞤰"],[[125199,125199],"mapped","𞤱"],[[125200,125200],"mapped","𞤲"],[[125201,125201],"mapped","𞤳"],[[125202,125202],"mapped","𞤴"],[[125203,125203],"mapped","𞤵"],[[125204,125204],"mapped","𞤶"],[[125205,125205],"mapped","𞤷"],[[125206,125206],"mapped","𞤸"],[[125207,125207],"mapped","𞤹"],[[125208,125208],"mapped","𞤺"],[[125209,125209],"mapped","𞤻"],[[125210,125210],"mapped","𞤼"],[[125211,125211],"mapped","𞤽"],[[125212,125212],"mapped","𞤾"],[[125213,125213],"mapped","𞤿"],[[125214,125214],"mapped","𞥀"],[[125215,125215],"mapped","𞥁"],[[125216,125216],"mapped","𞥂"],[[125217,125217],"mapped","𞥃"],[[125218,125258],"valid"],[[125259,125263],"disallowed"],[[125264,125273],"valid"],[[125274,125277],"disallowed"],[[125278,125279],"valid","","NV8"],[[125280,126463],"disallowed"],[[126464,126464],"mapped","ا"],[[126465,126465],"mapped","ب"],[[126466,126466],"mapped","ج"],[[126467,126467],"mapped","د"],[[126468,126468],"disallowed"],[[126469,126469],"mapped","و"],[[126470,126470],"mapped","ز"],[[126471,126471],"mapped","ح"],[[126472,126472],"mapped","ط"],[[126473,126473],"mapped","ي"],[[126474,126474],"mapped","ك"],[[126475,126475],"mapped","ل"],[[126476,126476],"mapped","م"],[[126477,126477],"mapped","ن"],[[126478,126478],"mapped","س"],[[126479,126479],"mapped","ع"],[[126480,126480],"mapped","ف"],[[126481,126481],"mapped","ص"],[[126482,126482],"mapped","ق"],[[126483,126483],"mapped","ر"],[[126484,126484],"mapped","ش"],[[126485,126485],"mapped","ت"],[[126486,126486],"mapped","ث"],[[126487,126487],"mapped","خ"],[[126488,126488],"mapped","ذ"],[[126489,126489],"mapped","ض"],[[126490,126490],"mapped","ظ"],[[126491,126491],"mapped","غ"],[[126492,126492],"mapped","ٮ"],[[126493,126493],"mapped","ں"],[[126494,126494],"mapped","ڡ"],[[126495,126495],"mapped","ٯ"],[[126496,126496],"disallowed"],[[126497,126497],"mapped","ب"],[[126498,126498],"mapped","ج"],[[126499,126499],"disallowed"],[[126500,126500],"mapped","ه"],[[126501,126502],"disallowed"],[[126503,126503],"mapped","ح"],[[126504,126504],"disallowed"],[[126505,126505],"mapped","ي"],[[126506,126506],"mapped","ك"],[[126507,126507],"mapped","ل"],[[126508,126508],"mapped","م"],[[126509,126509],"mapped","ن"],[[126510,126510],"mapped","س"],[[126511,126511],"mapped","ع"],[[126512,126512],"mapped","ف"],[[126513,126513],"mapped","ص"],[[126514,126514],"mapped","ق"],[[126515,126515],"disallowed"],[[126516,126516],"mapped","ش"],[[126517,126517],"mapped","ت"],[[126518,126518],"mapped","ث"],[[126519,126519],"mapped","خ"],[[126520,126520],"disallowed"],[[126521,126521],"mapped","ض"],[[126522,126522],"disallowed"],[[126523,126523],"mapped","غ"],[[126524,126529],"disallowed"],[[126530,126530],"mapped","ج"],[[126531,126534],"disallowed"],[[126535,126535],"mapped","ح"],[[126536,126536],"disallowed"],[[126537,126537],"mapped","ي"],[[126538,126538],"disallowed"],[[126539,126539],"mapped","ل"],[[126540,126540],"disallowed"],[[126541,126541],"mapped","ن"],[[126542,126542],"mapped","س"],[[126543,126543],"mapped","ع"],[[126544,126544],"disallowed"],[[126545,126545],"mapped","ص"],[[126546,126546],"mapped","ق"],[[126547,126547],"disallowed"],[[126548,126548],"mapped","ش"],[[126549,126550],"disallowed"],[[126551,126551],"mapped","خ"],[[126552,126552],"disallowed"],[[126553,126553],"mapped","ض"],[[126554,126554],"disallowed"],[[126555,126555],"mapped","غ"],[[126556,126556],"disallowed"],[[126557,126557],"mapped","ں"],[[126558,126558],"disallowed"],[[126559,126559],"mapped","ٯ"],[[126560,126560],"disallowed"],[[126561,126561],"mapped","ب"],[[126562,126562],"mapped","ج"],[[126563,126563],"disallowed"],[[126564,126564],"mapped","ه"],[[126565,126566],"disallowed"],[[126567,126567],"mapped","ح"],[[126568,126568],"mapped","ط"],[[126569,126569],"mapped","ي"],[[126570,126570],"mapped","ك"],[[126571,126571],"disallowed"],[[126572,126572],"mapped","م"],[[126573,126573],"mapped","ن"],[[126574,126574],"mapped","س"],[[126575,126575],"mapped","ع"],[[126576,126576],"mapped","ف"],[[126577,126577],"mapped","ص"],[[126578,126578],"mapped","ق"],[[126579,126579],"disallowed"],[[126580,126580],"mapped","ش"],[[126581,126581],"mapped","ت"],[[126582,126582],"mapped","ث"],[[126583,126583],"mapped","خ"],[[126584,126584],"disallowed"],[[126585,126585],"mapped","ض"],[[126586,126586],"mapped","ظ"],[[126587,126587],"mapped","غ"],[[126588,126588],"mapped","ٮ"],[[126589,126589],"disallowed"],[[126590,126590],"mapped","ڡ"],[[126591,126591],"disallowed"],[[126592,126592],"mapped","ا"],[[126593,126593],"mapped","ب"],[[126594,126594],"mapped","ج"],[[126595,126595],"mapped","د"],[[126596,126596],"mapped","ه"],[[126597,126597],"mapped","و"],[[126598,126598],"mapped","ز"],[[126599,126599],"mapped","ح"],[[126600,126600],"mapped","ط"],[[126601,126601],"mapped","ي"],[[126602,126602],"disallowed"],[[126603,126603],"mapped","ل"],[[126604,126604],"mapped","م"],[[126605,126605],"mapped","ن"],[[126606,126606],"mapped","س"],[[126607,126607],"mapped","ع"],[[126608,126608],"mapped","ف"],[[126609,126609],"mapped","ص"],[[126610,126610],"mapped","ق"],[[126611,126611],"mapped","ر"],[[126612,126612],"mapped","ش"],[[126613,126613],"mapped","ت"],[[126614,126614],"mapped","ث"],[[126615,126615],"mapped","خ"],[[126616,126616],"mapped","ذ"],[[126617,126617],"mapped","ض"],[[126618,126618],"mapped","ظ"],[[126619,126619],"mapped","غ"],[[126620,126624],"disallowed"],[[126625,126625],"mapped","ب"],[[126626,126626],"mapped","ج"],[[126627,126627],"mapped","د"],[[126628,126628],"disallowed"],[[126629,126629],"mapped","و"],[[126630,126630],"mapped","ز"],[[126631,126631],"mapped","ح"],[[126632,126632],"mapped","ط"],[[126633,126633],"mapped","ي"],[[126634,126634],"disallowed"],[[126635,126635],"mapped","ل"],[[126636,126636],"mapped","م"],[[126637,126637],"mapped","ن"],[[126638,126638],"mapped","س"],[[126639,126639],"mapped","ع"],[[126640,126640],"mapped","ف"],[[126641,126641],"mapped","ص"],[[126642,126642],"mapped","ق"],[[126643,126643],"mapped","ر"],[[126644,126644],"mapped","ش"],[[126645,126645],"mapped","ت"],[[126646,126646],"mapped","ث"],[[126647,126647],"mapped","خ"],[[126648,126648],"mapped","ذ"],[[126649,126649],"mapped","ض"],[[126650,126650],"mapped","ظ"],[[126651,126651],"mapped","غ"],[[126652,126703],"disallowed"],[[126704,126705],"valid","","NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid","","NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid","","NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid","","NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid","","NV8"],[[127167,127167],"valid","","NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid","","NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid","","NV8"],[[127200,127221],"valid","","NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped","0,"],[[127234,127234],"disallowed_STD3_mapped","1,"],[[127235,127235],"disallowed_STD3_mapped","2,"],[[127236,127236],"disallowed_STD3_mapped","3,"],[[127237,127237],"disallowed_STD3_mapped","4,"],[[127238,127238],"disallowed_STD3_mapped","5,"],[[127239,127239],"disallowed_STD3_mapped","6,"],[[127240,127240],"disallowed_STD3_mapped","7,"],[[127241,127241],"disallowed_STD3_mapped","8,"],[[127242,127242],"disallowed_STD3_mapped","9,"],[[127243,127244],"valid","","NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped","(a)"],[[127249,127249],"disallowed_STD3_mapped","(b)"],[[127250,127250],"disallowed_STD3_mapped","(c)"],[[127251,127251],"disallowed_STD3_mapped","(d)"],[[127252,127252],"disallowed_STD3_mapped","(e)"],[[127253,127253],"disallowed_STD3_mapped","(f)"],[[127254,127254],"disallowed_STD3_mapped","(g)"],[[127255,127255],"disallowed_STD3_mapped","(h)"],[[127256,127256],"disallowed_STD3_mapped","(i)"],[[127257,127257],"disallowed_STD3_mapped","(j)"],[[127258,127258],"disallowed_STD3_mapped","(k)"],[[127259,127259],"disallowed_STD3_mapped","(l)"],[[127260,127260],"disallowed_STD3_mapped","(m)"],[[127261,127261],"disallowed_STD3_mapped","(n)"],[[127262,127262],"disallowed_STD3_mapped","(o)"],[[127263,127263],"disallowed_STD3_mapped","(p)"],[[127264,127264],"disallowed_STD3_mapped","(q)"],[[127265,127265],"disallowed_STD3_mapped","(r)"],[[127266,127266],"disallowed_STD3_mapped","(s)"],[[127267,127267],"disallowed_STD3_mapped","(t)"],[[127268,127268],"disallowed_STD3_mapped","(u)"],[[127269,127269],"disallowed_STD3_mapped","(v)"],[[127270,127270],"disallowed_STD3_mapped","(w)"],[[127271,127271],"disallowed_STD3_mapped","(x)"],[[127272,127272],"disallowed_STD3_mapped","(y)"],[[127273,127273],"disallowed_STD3_mapped","(z)"],[[127274,127274],"mapped","〔s〕"],[[127275,127275],"mapped","c"],[[127276,127276],"mapped","r"],[[127277,127277],"mapped","cd"],[[127278,127278],"mapped","wz"],[[127279,127279],"disallowed"],[[127280,127280],"mapped","a"],[[127281,127281],"mapped","b"],[[127282,127282],"mapped","c"],[[127283,127283],"mapped","d"],[[127284,127284],"mapped","e"],[[127285,127285],"mapped","f"],[[127286,127286],"mapped","g"],[[127287,127287],"mapped","h"],[[127288,127288],"mapped","i"],[[127289,127289],"mapped","j"],[[127290,127290],"mapped","k"],[[127291,127291],"mapped","l"],[[127292,127292],"mapped","m"],[[127293,127293],"mapped","n"],[[127294,127294],"mapped","o"],[[127295,127295],"mapped","p"],[[127296,127296],"mapped","q"],[[127297,127297],"mapped","r"],[[127298,127298],"mapped","s"],[[127299,127299],"mapped","t"],[[127300,127300],"mapped","u"],[[127301,127301],"mapped","v"],[[127302,127302],"mapped","w"],[[127303,127303],"mapped","x"],[[127304,127304],"mapped","y"],[[127305,127305],"mapped","z"],[[127306,127306],"mapped","hv"],[[127307,127307],"mapped","mv"],[[127308,127308],"mapped","sd"],[[127309,127309],"mapped","ss"],[[127310,127310],"mapped","ppv"],[[127311,127311],"mapped","wc"],[[127312,127318],"valid","","NV8"],[[127319,127319],"valid","","NV8"],[[127320,127326],"valid","","NV8"],[[127327,127327],"valid","","NV8"],[[127328,127337],"valid","","NV8"],[[127338,127338],"mapped","mc"],[[127339,127339],"mapped","md"],[[127340,127343],"disallowed"],[[127344,127352],"valid","","NV8"],[[127353,127353],"valid","","NV8"],[[127354,127354],"valid","","NV8"],[[127355,127356],"valid","","NV8"],[[127357,127358],"valid","","NV8"],[[127359,127359],"valid","","NV8"],[[127360,127369],"valid","","NV8"],[[127370,127373],"valid","","NV8"],[[127374,127375],"valid","","NV8"],[[127376,127376],"mapped","dj"],[[127377,127386],"valid","","NV8"],[[127387,127404],"valid","","NV8"],[[127405,127461],"disallowed"],[[127462,127487],"valid","","NV8"],[[127488,127488],"mapped","ほか"],[[127489,127489],"mapped","ココ"],[[127490,127490],"mapped","サ"],[[127491,127503],"disallowed"],[[127504,127504],"mapped","手"],[[127505,127505],"mapped","字"],[[127506,127506],"mapped","双"],[[127507,127507],"mapped","デ"],[[127508,127508],"mapped","二"],[[127509,127509],"mapped","多"],[[127510,127510],"mapped","解"],[[127511,127511],"mapped","天"],[[127512,127512],"mapped","交"],[[127513,127513],"mapped","映"],[[127514,127514],"mapped","無"],[[127515,127515],"mapped","料"],[[127516,127516],"mapped","前"],[[127517,127517],"mapped","後"],[[127518,127518],"mapped","再"],[[127519,127519],"mapped","新"],[[127520,127520],"mapped","初"],[[127521,127521],"mapped","終"],[[127522,127522],"mapped","生"],[[127523,127523],"mapped","販"],[[127524,127524],"mapped","声"],[[127525,127525],"mapped","吹"],[[127526,127526],"mapped","演"],[[127527,127527],"mapped","投"],[[127528,127528],"mapped","捕"],[[127529,127529],"mapped","一"],[[127530,127530],"mapped","三"],[[127531,127531],"mapped","遊"],[[127532,127532],"mapped","左"],[[127533,127533],"mapped","中"],[[127534,127534],"mapped","右"],[[127535,127535],"mapped","指"],[[127536,127536],"mapped","走"],[[127537,127537],"mapped","打"],[[127538,127538],"mapped","禁"],[[127539,127539],"mapped","空"],[[127540,127540],"mapped","合"],[[127541,127541],"mapped","満"],[[127542,127542],"mapped","有"],[[127543,127543],"mapped","月"],[[127544,127544],"mapped","申"],[[127545,127545],"mapped","割"],[[127546,127546],"mapped","営"],[[127547,127547],"mapped","配"],[[127548,127551],"disallowed"],[[127552,127552],"mapped","〔本〕"],[[127553,127553],"mapped","〔三〕"],[[127554,127554],"mapped","〔二〕"],[[127555,127555],"mapped","〔安〕"],[[127556,127556],"mapped","〔点〕"],[[127557,127557],"mapped","〔打〕"],[[127558,127558],"mapped","〔盗〕"],[[127559,127559],"mapped","〔勝〕"],[[127560,127560],"mapped","〔敗〕"],[[127561,127567],"disallowed"],[[127568,127568],"mapped","得"],[[127569,127569],"mapped","可"],[[127570,127583],"disallowed"],[[127584,127589],"valid","","NV8"],[[127590,127743],"disallowed"],[[127744,127776],"valid","","NV8"],[[127777,127788],"valid","","NV8"],[[127789,127791],"valid","","NV8"],[[127792,127797],"valid","","NV8"],[[127798,127798],"valid","","NV8"],[[127799,127868],"valid","","NV8"],[[127869,127869],"valid","","NV8"],[[127870,127871],"valid","","NV8"],[[127872,127891],"valid","","NV8"],[[127892,127903],"valid","","NV8"],[[127904,127940],"valid","","NV8"],[[127941,127941],"valid","","NV8"],[[127942,127946],"valid","","NV8"],[[127947,127950],"valid","","NV8"],[[127951,127955],"valid","","NV8"],[[127956,127967],"valid","","NV8"],[[127968,127984],"valid","","NV8"],[[127985,127991],"valid","","NV8"],[[127992,127999],"valid","","NV8"],[[128000,128062],"valid","","NV8"],[[128063,128063],"valid","","NV8"],[[128064,128064],"valid","","NV8"],[[128065,128065],"valid","","NV8"],[[128066,128247],"valid","","NV8"],[[128248,128248],"valid","","NV8"],[[128249,128252],"valid","","NV8"],[[128253,128254],"valid","","NV8"],[[128255,128255],"valid","","NV8"],[[128256,128317],"valid","","NV8"],[[128318,128319],"valid","","NV8"],[[128320,128323],"valid","","NV8"],[[128324,128330],"valid","","NV8"],[[128331,128335],"valid","","NV8"],[[128336,128359],"valid","","NV8"],[[128360,128377],"valid","","NV8"],[[128378,128378],"valid","","NV8"],[[128379,128419],"valid","","NV8"],[[128420,128420],"valid","","NV8"],[[128421,128506],"valid","","NV8"],[[128507,128511],"valid","","NV8"],[[128512,128512],"valid","","NV8"],[[128513,128528],"valid","","NV8"],[[128529,128529],"valid","","NV8"],[[128530,128532],"valid","","NV8"],[[128533,128533],"valid","","NV8"],[[128534,128534],"valid","","NV8"],[[128535,128535],"valid","","NV8"],[[128536,128536],"valid","","NV8"],[[128537,128537],"valid","","NV8"],[[128538,128538],"valid","","NV8"],[[128539,128539],"valid","","NV8"],[[128540,128542],"valid","","NV8"],[[128543,128543],"valid","","NV8"],[[128544,128549],"valid","","NV8"],[[128550,128551],"valid","","NV8"],[[128552,128555],"valid","","NV8"],[[128556,128556],"valid","","NV8"],[[128557,128557],"valid","","NV8"],[[128558,128559],"valid","","NV8"],[[128560,128563],"valid","","NV8"],[[128564,128564],"valid","","NV8"],[[128565,128576],"valid","","NV8"],[[128577,128578],"valid","","NV8"],[[128579,128580],"valid","","NV8"],[[128581,128591],"valid","","NV8"],[[128592,128639],"valid","","NV8"],[[128640,128709],"valid","","NV8"],[[128710,128719],"valid","","NV8"],[[128720,128720],"valid","","NV8"],[[128721,128722],"valid","","NV8"],[[128723,128724],"valid","","NV8"],[[128725,128735],"disallowed"],[[128736,128748],"valid","","NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid","","NV8"],[[128756,128758],"valid","","NV8"],[[128759,128760],"valid","","NV8"],[[128761,128767],"disallowed"],[[128768,128883],"valid","","NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid","","NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid","","NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid","","NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid","","NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid","","NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid","","NV8"],[[129198,129279],"disallowed"],[[129280,129291],"valid","","NV8"],[[129292,129295],"disallowed"],[[129296,129304],"valid","","NV8"],[[129305,129310],"valid","","NV8"],[[129311,129311],"valid","","NV8"],[[129312,129319],"valid","","NV8"],[[129320,129327],"valid","","NV8"],[[129328,129328],"valid","","NV8"],[[129329,129330],"valid","","NV8"],[[129331,129342],"valid","","NV8"],[[129343,129343],"disallowed"],[[129344,129355],"valid","","NV8"],[[129356,129356],"valid","","NV8"],[[129357,129359],"disallowed"],[[129360,129374],"valid","","NV8"],[[129375,129387],"valid","","NV8"],[[129388,129407],"disallowed"],[[129408,129412],"valid","","NV8"],[[129413,129425],"valid","","NV8"],[[129426,129431],"valid","","NV8"],[[129432,129471],"disallowed"],[[129472,129472],"valid","","NV8"],[[129473,129487],"disallowed"],[[129488,129510],"valid","","NV8"],[[129511,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,183983],"disallowed"],[[183984,191456],"valid"],[[191457,194559],"disallowed"],[[194560,194560],"mapped","丽"],[[194561,194561],"mapped","丸"],[[194562,194562],"mapped","乁"],[[194563,194563],"mapped","𠄢"],[[194564,194564],"mapped","你"],[[194565,194565],"mapped","侮"],[[194566,194566],"mapped","侻"],[[194567,194567],"mapped","倂"],[[194568,194568],"mapped","偺"],[[194569,194569],"mapped","備"],[[194570,194570],"mapped","僧"],[[194571,194571],"mapped","像"],[[194572,194572],"mapped","㒞"],[[194573,194573],"mapped","𠘺"],[[194574,194574],"mapped","免"],[[194575,194575],"mapped","兔"],[[194576,194576],"mapped","兤"],[[194577,194577],"mapped","具"],[[194578,194578],"mapped","𠔜"],[[194579,194579],"mapped","㒹"],[[194580,194580],"mapped","內"],[[194581,194581],"mapped","再"],[[194582,194582],"mapped","𠕋"],[[194583,194583],"mapped","冗"],[[194584,194584],"mapped","冤"],[[194585,194585],"mapped","仌"],[[194586,194586],"mapped","冬"],[[194587,194587],"mapped","况"],[[194588,194588],"mapped","𩇟"],[[194589,194589],"mapped","凵"],[[194590,194590],"mapped","刃"],[[194591,194591],"mapped","㓟"],[[194592,194592],"mapped","刻"],[[194593,194593],"mapped","剆"],[[194594,194594],"mapped","割"],[[194595,194595],"mapped","剷"],[[194596,194596],"mapped","㔕"],[[194597,194597],"mapped","勇"],[[194598,194598],"mapped","勉"],[[194599,194599],"mapped","勤"],[[194600,194600],"mapped","勺"],[[194601,194601],"mapped","包"],[[194602,194602],"mapped","匆"],[[194603,194603],"mapped","北"],[[194604,194604],"mapped","卉"],[[194605,194605],"mapped","卑"],[[194606,194606],"mapped","博"],[[194607,194607],"mapped","即"],[[194608,194608],"mapped","卽"],[[194609,194611],"mapped","卿"],[[194612,194612],"mapped","𠨬"],[[194613,194613],"mapped","灰"],[[194614,194614],"mapped","及"],[[194615,194615],"mapped","叟"],[[194616,194616],"mapped","𠭣"],[[194617,194617],"mapped","叫"],[[194618,194618],"mapped","叱"],[[194619,194619],"mapped","吆"],[[194620,194620],"mapped","咞"],[[194621,194621],"mapped","吸"],[[194622,194622],"mapped","呈"],[[194623,194623],"mapped","周"],[[194624,194624],"mapped","咢"],[[194625,194625],"mapped","哶"],[[194626,194626],"mapped","唐"],[[194627,194627],"mapped","啓"],[[194628,194628],"mapped","啣"],[[194629,194630],"mapped","善"],[[194631,194631],"mapped","喙"],[[194632,194632],"mapped","喫"],[[194633,194633],"mapped","喳"],[[194634,194634],"mapped","嗂"],[[194635,194635],"mapped","圖"],[[194636,194636],"mapped","嘆"],[[194637,194637],"mapped","圗"],[[194638,194638],"mapped","噑"],[[194639,194639],"mapped","噴"],[[194640,194640],"mapped","切"],[[194641,194641],"mapped","壮"],[[194642,194642],"mapped","城"],[[194643,194643],"mapped","埴"],[[194644,194644],"mapped","堍"],[[194645,194645],"mapped","型"],[[194646,194646],"mapped","堲"],[[194647,194647],"mapped","報"],[[194648,194648],"mapped","墬"],[[194649,194649],"mapped","𡓤"],[[194650,194650],"mapped","売"],[[194651,194651],"mapped","壷"],[[194652,194652],"mapped","夆"],[[194653,194653],"mapped","多"],[[194654,194654],"mapped","夢"],[[194655,194655],"mapped","奢"],[[194656,194656],"mapped","𡚨"],[[194657,194657],"mapped","𡛪"],[[194658,194658],"mapped","姬"],[[194659,194659],"mapped","娛"],[[194660,194660],"mapped","娧"],[[194661,194661],"mapped","姘"],[[194662,194662],"mapped","婦"],[[194663,194663],"mapped","㛮"],[[194664,194664],"disallowed"],[[194665,194665],"mapped","嬈"],[[194666,194667],"mapped","嬾"],[[194668,194668],"mapped","𡧈"],[[194669,194669],"mapped","寃"],[[194670,194670],"mapped","寘"],[[194671,194671],"mapped","寧"],[[194672,194672],"mapped","寳"],[[194673,194673],"mapped","𡬘"],[[194674,194674],"mapped","寿"],[[194675,194675],"mapped","将"],[[194676,194676],"disallowed"],[[194677,194677],"mapped","尢"],[[194678,194678],"mapped","㞁"],[[194679,194679],"mapped","屠"],[[194680,194680],"mapped","屮"],[[194681,194681],"mapped","峀"],[[194682,194682],"mapped","岍"],[[194683,194683],"mapped","𡷤"],[[194684,194684],"mapped","嵃"],[[194685,194685],"mapped","𡷦"],[[194686,194686],"mapped","嵮"],[[194687,194687],"mapped","嵫"],[[194688,194688],"mapped","嵼"],[[194689,194689],"mapped","巡"],[[194690,194690],"mapped","巢"],[[194691,194691],"mapped","㠯"],[[194692,194692],"mapped","巽"],[[194693,194693],"mapped","帨"],[[194694,194694],"mapped","帽"],[[194695,194695],"mapped","幩"],[[194696,194696],"mapped","㡢"],[[194697,194697],"mapped","𢆃"],[[194698,194698],"mapped","㡼"],[[194699,194699],"mapped","庰"],[[194700,194700],"mapped","庳"],[[194701,194701],"mapped","庶"],[[194702,194702],"mapped","廊"],[[194703,194703],"mapped","𪎒"],[[194704,194704],"mapped","廾"],[[194705,194706],"mapped","𢌱"],[[194707,194707],"mapped","舁"],[[194708,194709],"mapped","弢"],[[194710,194710],"mapped","㣇"],[[194711,194711],"mapped","𣊸"],[[194712,194712],"mapped","𦇚"],[[194713,194713],"mapped","形"],[[194714,194714],"mapped","彫"],[[194715,194715],"mapped","㣣"],[[194716,194716],"mapped","徚"],[[194717,194717],"mapped","忍"],[[194718,194718],"mapped","志"],[[194719,194719],"mapped","忹"],[[194720,194720],"mapped","悁"],[[194721,194721],"mapped","㤺"],[[194722,194722],"mapped","㤜"],[[194723,194723],"mapped","悔"],[[194724,194724],"mapped","𢛔"],[[194725,194725],"mapped","惇"],[[194726,194726],"mapped","慈"],[[194727,194727],"mapped","慌"],[[194728,194728],"mapped","慎"],[[194729,194729],"mapped","慌"],[[194730,194730],"mapped","慺"],[[194731,194731],"mapped","憎"],[[194732,194732],"mapped","憲"],[[194733,194733],"mapped","憤"],[[194734,194734],"mapped","憯"],[[194735,194735],"mapped","懞"],[[194736,194736],"mapped","懲"],[[194737,194737],"mapped","懶"],[[194738,194738],"mapped","成"],[[194739,194739],"mapped","戛"],[[194740,194740],"mapped","扝"],[[194741,194741],"mapped","抱"],[[194742,194742],"mapped","拔"],[[194743,194743],"mapped","捐"],[[194744,194744],"mapped","𢬌"],[[194745,194745],"mapped","挽"],[[194746,194746],"mapped","拼"],[[194747,194747],"mapped","捨"],[[194748,194748],"mapped","掃"],[[194749,194749],"mapped","揤"],[[194750,194750],"mapped","𢯱"],[[194751,194751],"mapped","搢"],[[194752,194752],"mapped","揅"],[[194753,194753],"mapped","掩"],[[194754,194754],"mapped","㨮"],[[194755,194755],"mapped","摩"],[[194756,194756],"mapped","摾"],[[194757,194757],"mapped","撝"],[[194758,194758],"mapped","摷"],[[194759,194759],"mapped","㩬"],[[194760,194760],"mapped","敏"],[[194761,194761],"mapped","敬"],[[194762,194762],"mapped","𣀊"],[[194763,194763],"mapped","旣"],[[194764,194764],"mapped","書"],[[194765,194765],"mapped","晉"],[[194766,194766],"mapped","㬙"],[[194767,194767],"mapped","暑"],[[194768,194768],"mapped","㬈"],[[194769,194769],"mapped","㫤"],[[194770,194770],"mapped","冒"],[[194771,194771],"mapped","冕"],[[194772,194772],"mapped","最"],[[194773,194773],"mapped","暜"],[[194774,194774],"mapped","肭"],[[194775,194775],"mapped","䏙"],[[194776,194776],"mapped","朗"],[[194777,194777],"mapped","望"],[[194778,194778],"mapped","朡"],[[194779,194779],"mapped","杞"],[[194780,194780],"mapped","杓"],[[194781,194781],"mapped","𣏃"],[[194782,194782],"mapped","㭉"],[[194783,194783],"mapped","柺"],[[194784,194784],"mapped","枅"],[[194785,194785],"mapped","桒"],[[194786,194786],"mapped","梅"],[[194787,194787],"mapped","𣑭"],[[194788,194788],"mapped","梎"],[[194789,194789],"mapped","栟"],[[194790,194790],"mapped","椔"],[[194791,194791],"mapped","㮝"],[[194792,194792],"mapped","楂"],[[194793,194793],"mapped","榣"],[[194794,194794],"mapped","槪"],[[194795,194795],"mapped","檨"],[[194796,194796],"mapped","𣚣"],[[194797,194797],"mapped","櫛"],[[194798,194798],"mapped","㰘"],[[194799,194799],"mapped","次"],[[194800,194800],"mapped","𣢧"],[[194801,194801],"mapped","歔"],[[194802,194802],"mapped","㱎"],[[194803,194803],"mapped","歲"],[[194804,194804],"mapped","殟"],[[194805,194805],"mapped","殺"],[[194806,194806],"mapped","殻"],[[194807,194807],"mapped","𣪍"],[[194808,194808],"mapped","𡴋"],[[194809,194809],"mapped","𣫺"],[[194810,194810],"mapped","汎"],[[194811,194811],"mapped","𣲼"],[[194812,194812],"mapped","沿"],[[194813,194813],"mapped","泍"],[[194814,194814],"mapped","汧"],[[194815,194815],"mapped","洖"],[[194816,194816],"mapped","派"],[[194817,194817],"mapped","海"],[[194818,194818],"mapped","流"],[[194819,194819],"mapped","浩"],[[194820,194820],"mapped","浸"],[[194821,194821],"mapped","涅"],[[194822,194822],"mapped","𣴞"],[[194823,194823],"mapped","洴"],[[194824,194824],"mapped","港"],[[194825,194825],"mapped","湮"],[[194826,194826],"mapped","㴳"],[[194827,194827],"mapped","滋"],[[194828,194828],"mapped","滇"],[[194829,194829],"mapped","𣻑"],[[194830,194830],"mapped","淹"],[[194831,194831],"mapped","潮"],[[194832,194832],"mapped","𣽞"],[[194833,194833],"mapped","𣾎"],[[194834,194834],"mapped","濆"],[[194835,194835],"mapped","瀹"],[[194836,194836],"mapped","瀞"],[[194837,194837],"mapped","瀛"],[[194838,194838],"mapped","㶖"],[[194839,194839],"mapped","灊"],[[194840,194840],"mapped","災"],[[194841,194841],"mapped","灷"],[[194842,194842],"mapped","炭"],[[194843,194843],"mapped","𠔥"],[[194844,194844],"mapped","煅"],[[194845,194845],"mapped","𤉣"],[[194846,194846],"mapped","熜"],[[194847,194847],"disallowed"],[[194848,194848],"mapped","爨"],[[194849,194849],"mapped","爵"],[[194850,194850],"mapped","牐"],[[194851,194851],"mapped","𤘈"],[[194852,194852],"mapped","犀"],[[194853,194853],"mapped","犕"],[[194854,194854],"mapped","𤜵"],[[194855,194855],"mapped","𤠔"],[[194856,194856],"mapped","獺"],[[194857,194857],"mapped","王"],[[194858,194858],"mapped","㺬"],[[194859,194859],"mapped","玥"],[[194860,194861],"mapped","㺸"],[[194862,194862],"mapped","瑇"],[[194863,194863],"mapped","瑜"],[[194864,194864],"mapped","瑱"],[[194865,194865],"mapped","璅"],[[194866,194866],"mapped","瓊"],[[194867,194867],"mapped","㼛"],[[194868,194868],"mapped","甤"],[[194869,194869],"mapped","𤰶"],[[194870,194870],"mapped","甾"],[[194871,194871],"mapped","𤲒"],[[194872,194872],"mapped","異"],[[194873,194873],"mapped","𢆟"],[[194874,194874],"mapped","瘐"],[[194875,194875],"mapped","𤾡"],[[194876,194876],"mapped","𤾸"],[[194877,194877],"mapped","𥁄"],[[194878,194878],"mapped","㿼"],[[194879,194879],"mapped","䀈"],[[194880,194880],"mapped","直"],[[194881,194881],"mapped","𥃳"],[[194882,194882],"mapped","𥃲"],[[194883,194883],"mapped","𥄙"],[[194884,194884],"mapped","𥄳"],[[194885,194885],"mapped","眞"],[[194886,194887],"mapped","真"],[[194888,194888],"mapped","睊"],[[194889,194889],"mapped","䀹"],[[194890,194890],"mapped","瞋"],[[194891,194891],"mapped","䁆"],[[194892,194892],"mapped","䂖"],[[194893,194893],"mapped","𥐝"],[[194894,194894],"mapped","硎"],[[194895,194895],"mapped","碌"],[[194896,194896],"mapped","磌"],[[194897,194897],"mapped","䃣"],[[194898,194898],"mapped","𥘦"],[[194899,194899],"mapped","祖"],[[194900,194900],"mapped","𥚚"],[[194901,194901],"mapped","𥛅"],[[194902,194902],"mapped","福"],[[194903,194903],"mapped","秫"],[[194904,194904],"mapped","䄯"],[[194905,194905],"mapped","穀"],[[194906,194906],"mapped","穊"],[[194907,194907],"mapped","穏"],[[194908,194908],"mapped","𥥼"],[[194909,194910],"mapped","𥪧"],[[194911,194911],"disallowed"],[[194912,194912],"mapped","䈂"],[[194913,194913],"mapped","𥮫"],[[194914,194914],"mapped","篆"],[[194915,194915],"mapped","築"],[[194916,194916],"mapped","䈧"],[[194917,194917],"mapped","𥲀"],[[194918,194918],"mapped","糒"],[[194919,194919],"mapped","䊠"],[[194920,194920],"mapped","糨"],[[194921,194921],"mapped","糣"],[[194922,194922],"mapped","紀"],[[194923,194923],"mapped","𥾆"],[[194924,194924],"mapped","絣"],[[194925,194925],"mapped","䌁"],[[194926,194926],"mapped","緇"],[[194927,194927],"mapped","縂"],[[194928,194928],"mapped","繅"],[[194929,194929],"mapped","䌴"],[[194930,194930],"mapped","𦈨"],[[194931,194931],"mapped","𦉇"],[[194932,194932],"mapped","䍙"],[[194933,194933],"mapped","𦋙"],[[194934,194934],"mapped","罺"],[[194935,194935],"mapped","𦌾"],[[194936,194936],"mapped","羕"],[[194937,194937],"mapped","翺"],[[194938,194938],"mapped","者"],[[194939,194939],"mapped","𦓚"],[[194940,194940],"mapped","𦔣"],[[194941,194941],"mapped","聠"],[[194942,194942],"mapped","𦖨"],[[194943,194943],"mapped","聰"],[[194944,194944],"mapped","𣍟"],[[194945,194945],"mapped","䏕"],[[194946,194946],"mapped","育"],[[194947,194947],"mapped","脃"],[[194948,194948],"mapped","䐋"],[[194949,194949],"mapped","脾"],[[194950,194950],"mapped","媵"],[[194951,194951],"mapped","𦞧"],[[194952,194952],"mapped","𦞵"],[[194953,194953],"mapped","𣎓"],[[194954,194954],"mapped","𣎜"],[[194955,194955],"mapped","舁"],[[194956,194956],"mapped","舄"],[[194957,194957],"mapped","辞"],[[194958,194958],"mapped","䑫"],[[194959,194959],"mapped","芑"],[[194960,194960],"mapped","芋"],[[194961,194961],"mapped","芝"],[[194962,194962],"mapped","劳"],[[194963,194963],"mapped","花"],[[194964,194964],"mapped","芳"],[[194965,194965],"mapped","芽"],[[194966,194966],"mapped","苦"],[[194967,194967],"mapped","𦬼"],[[194968,194968],"mapped","若"],[[194969,194969],"mapped","茝"],[[194970,194970],"mapped","荣"],[[194971,194971],"mapped","莭"],[[194972,194972],"mapped","茣"],[[194973,194973],"mapped","莽"],[[194974,194974],"mapped","菧"],[[194975,194975],"mapped","著"],[[194976,194976],"mapped","荓"],[[194977,194977],"mapped","菊"],[[194978,194978],"mapped","菌"],[[194979,194979],"mapped","菜"],[[194980,194980],"mapped","𦰶"],[[194981,194981],"mapped","𦵫"],[[194982,194982],"mapped","𦳕"],[[194983,194983],"mapped","䔫"],[[194984,194984],"mapped","蓱"],[[194985,194985],"mapped","蓳"],[[194986,194986],"mapped","蔖"],[[194987,194987],"mapped","𧏊"],[[194988,194988],"mapped","蕤"],[[194989,194989],"mapped","𦼬"],[[194990,194990],"mapped","䕝"],[[194991,194991],"mapped","䕡"],[[194992,194992],"mapped","𦾱"],[[194993,194993],"mapped","𧃒"],[[194994,194994],"mapped","䕫"],[[194995,194995],"mapped","虐"],[[194996,194996],"mapped","虜"],[[194997,194997],"mapped","虧"],[[194998,194998],"mapped","虩"],[[194999,194999],"mapped","蚩"],[[195000,195000],"mapped","蚈"],[[195001,195001],"mapped","蜎"],[[195002,195002],"mapped","蛢"],[[195003,195003],"mapped","蝹"],[[195004,195004],"mapped","蜨"],[[195005,195005],"mapped","蝫"],[[195006,195006],"mapped","螆"],[[195007,195007],"disallowed"],[[195008,195008],"mapped","蟡"],[[195009,195009],"mapped","蠁"],[[195010,195010],"mapped","䗹"],[[195011,195011],"mapped","衠"],[[195012,195012],"mapped","衣"],[[195013,195013],"mapped","𧙧"],[[195014,195014],"mapped","裗"],[[195015,195015],"mapped","裞"],[[195016,195016],"mapped","䘵"],[[195017,195017],"mapped","裺"],[[195018,195018],"mapped","㒻"],[[195019,195019],"mapped","𧢮"],[[195020,195020],"mapped","𧥦"],[[195021,195021],"mapped","䚾"],[[195022,195022],"mapped","䛇"],[[195023,195023],"mapped","誠"],[[195024,195024],"mapped","諭"],[[195025,195025],"mapped","變"],[[195026,195026],"mapped","豕"],[[195027,195027],"mapped","𧲨"],[[195028,195028],"mapped","貫"],[[195029,195029],"mapped","賁"],[[195030,195030],"mapped","贛"],[[195031,195031],"mapped","起"],[[195032,195032],"mapped","𧼯"],[[195033,195033],"mapped","𠠄"],[[195034,195034],"mapped","跋"],[[195035,195035],"mapped","趼"],[[195036,195036],"mapped","跰"],[[195037,195037],"mapped","𠣞"],[[195038,195038],"mapped","軔"],[[195039,195039],"mapped","輸"],[[195040,195040],"mapped","𨗒"],[[195041,195041],"mapped","𨗭"],[[195042,195042],"mapped","邔"],[[195043,195043],"mapped","郱"],[[195044,195044],"mapped","鄑"],[[195045,195045],"mapped","𨜮"],[[195046,195046],"mapped","鄛"],[[195047,195047],"mapped","鈸"],[[195048,195048],"mapped","鋗"],[[195049,195049],"mapped","鋘"],[[195050,195050],"mapped","鉼"],[[195051,195051],"mapped","鏹"],[[195052,195052],"mapped","鐕"],[[195053,195053],"mapped","𨯺"],[[195054,195054],"mapped","開"],[[195055,195055],"mapped","䦕"],[[195056,195056],"mapped","閷"],[[195057,195057],"mapped","𨵷"],[[195058,195058],"mapped","䧦"],[[195059,195059],"mapped","雃"],[[195060,195060],"mapped","嶲"],[[195061,195061],"mapped","霣"],[[195062,195062],"mapped","𩅅"],[[195063,195063],"mapped","𩈚"],[[195064,195064],"mapped","䩮"],[[195065,195065],"mapped","䩶"],[[195066,195066],"mapped","韠"],[[195067,195067],"mapped","𩐊"],[[195068,195068],"mapped","䪲"],[[195069,195069],"mapped","𩒖"],[[195070,195071],"mapped","頋"],[[195072,195072],"mapped","頩"],[[195073,195073],"mapped","𩖶"],[[195074,195074],"mapped","飢"],[[195075,195075],"mapped","䬳"],[[195076,195076],"mapped","餩"],[[195077,195077],"mapped","馧"],[[195078,195078],"mapped","駂"],[[195079,195079],"mapped","駾"],[[195080,195080],"mapped","䯎"],[[195081,195081],"mapped","𩬰"],[[195082,195082],"mapped","鬒"],[[195083,195083],"mapped","鱀"],[[195084,195084],"mapped","鳽"],[[195085,195085],"mapped","䳎"],[[195086,195086],"mapped","䳭"],[[195087,195087],"mapped","鵧"],[[195088,195088],"mapped","𪃎"],[[195089,195089],"mapped","䳸"],[[195090,195090],"mapped","𪄅"],[[195091,195091],"mapped","𪈎"],[[195092,195092],"mapped","𪊑"],[[195093,195093],"mapped","麻"],[[195094,195094],"mapped","䵖"],[[195095,195095],"mapped","黹"],[[195096,195096],"mapped","黾"],[[195097,195097],"mapped","鼅"],[[195098,195098],"mapped","鼏"],[[195099,195099],"mapped","鼖"],[[195100,195100],"mapped","鼻"],[[195101,195101],"mapped","𪘀"],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]
+
+/***/ }),
+
+/***/ 3822:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+const stableSortBy = __webpack_require__(3823);
+const urlencoded = __webpack_require__(3808);
+
+exports.implementation = class URLSearchParamsImpl {
+ constructor(constructorArgs, { doNotStripQMark = false }) {
+ let init = constructorArgs[0];
+ this._list = [];
+ this._url = null;
+
+ if (!doNotStripQMark && typeof init === "string" && init[0] === "?") {
+ init = init.slice(1);
+ }
+
+ if (Array.isArray(init)) {
+ for (const pair of init) {
+ if (pair.length !== 2) {
+ throw new TypeError("Failed to construct 'URLSearchParams': parameter 1 sequence's element does not " +
+ "contain exactly two elements.");
+ }
+ this._list.push([pair[0], pair[1]]);
+ }
+ } else if (typeof init === "object" && Object.getPrototypeOf(init) === null) {
+ for (const name of Object.keys(init)) {
+ const value = init[name];
+ this._list.push([name, value]);
+ }
+ } else {
+ this._list = urlencoded.parseUrlencoded(init);
+ }
}
- return '';
-}
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection thru each iteratee. This method
- * performs a stable sort, that is, it preserves the original sort order of
- * equal elements. The iteratees are invoked with one argument: (value).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {...(Function|Function[])} [iteratees=[_.identity]]
- * The iteratees to sort by.
- * @returns {Array} Returns the new sorted array.
- * @example
- *
- * var users = [
- * { 'user': 'fred', 'age': 48 },
- * { 'user': 'barney', 'age': 36 },
- * { 'user': 'fred', 'age': 40 },
- * { 'user': 'barney', 'age': 34 }
- * ];
- *
- * _.sortBy(users, function(o) { return o.user; });
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
- *
- * _.sortBy(users, ['user', 'age']);
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
- *
- * _.sortBy(users, 'user', function(o) {
- * return Math.floor(o.age / 10);
- * });
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
- */
-var sortBy = baseRest(function(collection, iteratees) {
- if (collection == null) {
- return [];
+ _updateSteps() {
+ if (this._url !== null) {
+ let query = urlencoded.serializeUrlencoded(this._list);
+ if (query === "") {
+ query = null;
+ }
+ this._url._url.query = query;
+ }
}
- var length = iteratees.length;
- if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
- iteratees = [];
- } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
- iteratees = [iteratees[0]];
+
+ append(name, value) {
+ this._list.push([name, value]);
+ this._updateSteps();
}
- return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
-});
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
+ delete(name) {
+ let i = 0;
+ while (i < this._list.length) {
+ if (this._list[i][0] === name) {
+ this._list.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ this._updateSteps();
+ }
+
+ get(name) {
+ for (const tuple of this._list) {
+ if (tuple[0] === name) {
+ return tuple[1];
+ }
+ }
+ return null;
+ }
+
+ getAll(name) {
+ const output = [];
+ for (const tuple of this._list) {
+ if (tuple[0] === name) {
+ output.push(tuple[1]);
+ }
+ }
+ return output;
+ }
+
+ has(name) {
+ for (const tuple of this._list) {
+ if (tuple[0] === name) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ set(name, value) {
+ let found = false;
+ let i = 0;
+ while (i < this._list.length) {
+ if (this._list[i][0] === name) {
+ if (found) {
+ this._list.splice(i, 1);
+ } else {
+ found = true;
+ this._list[i][1] = value;
+ i++;
+ }
+ } else {
+ i++;
+ }
+ }
+ if (!found) {
+ this._list.push([name, value]);
+ }
+ this._updateSteps();
+ }
+
+ sort() {
+ this._list = stableSortBy(this._list, [0]);
+ this._updateSteps();
+ }
+
+ [Symbol.iterator]() {
+ return this._list[Symbol.iterator]();
+ }
+
+ toString() {
+ return urlencoded.serializeUrlencoded(this._list);
+ }
+};
+
+
+/***/ }),
+
+/***/ 3823:
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(global, module) {/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used to compose bitmasks for comparison styles. */
+var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+/** Used to match property names within property paths. */
+var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/,
+ reLeadingDot = /^\./,
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to match backslashes in property paths. */
+var reEscapeChar = /\\(\\)?/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/** Used to identify `toStringTag` values of typed arrays. */
+var typedArrayTags = {};
+typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+typedArrayTags[uint32Tag] = true;
+typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
+typedArrayTags[errorTag] = typedArrayTags[funcTag] =
+typedArrayTags[mapTag] = typedArrayTags[numberTag] =
+typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
+typedArrayTags[setTag] = typedArrayTags[stringTag] =
+typedArrayTags[weakMapTag] = false;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/** Detect free variable `exports`. */
+var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/** Detect free variable `process` from Node.js. */
+var freeProcess = moduleExports && freeGlobal.process;
+
+/** Used to access faster Node.js helpers. */
+var nodeUtil = (function() {
+ try {
+ return freeProcess && freeProcess.binding('util');
+ } catch (e) {}
+}());
+
+/* Node.js helper references. */
+var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+/**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+}
+
+/**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+}
+
+/**
+ * A specialized version of `_.some` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+function arraySome(array, predicate) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * The base implementation of `_.sortBy` which uses `comparer` to define the
+ * sort order of `array` and replaces criteria objects with their corresponding
+ * values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */
+function baseSortBy(array, comparer) {
+ var length = array.length;
+
+ array.sort(comparer);
+ while (length--) {
+ array[length] = array[length].value;
+ }
+ return array;
+}
+
+/**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+}
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var Symbol = root.Symbol,
+ Uint8Array = root.Uint8Array,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice,
+ spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = overArg(Object.keys, Object),
+ nativeMax = Math.max;
+
+/* Built-in method references that are verified to be native. */
+var DataView = getNative(root, 'DataView'),
+ Map = getNative(root, 'Map'),
+ Promise = getNative(root, 'Promise'),
+ Set = getNative(root, 'Set'),
+ WeakMap = getNative(root, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+
+/** Used to detect maps, sets, and weakmaps. */
+var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ *
+ * Creates an array cache object to store unique values.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.add(values[index]);
+ }
+}
+
+/**
+ * Adds `value` to the array cache.
+ *
+ * @private
+ * @name add
+ * @memberOf SetCache
+ * @alias push
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache instance.
+ */
+function setCacheAdd(value) {
+ this.__data__.set(value, HASH_UNDEFINED);
+ return this;
+}
+
+/**
+ * Checks if `value` is in the array cache.
+ *
+ * @private
+ * @name has
+ * @memberOf SetCache
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function setCacheHas(value) {
+ return this.__data__.has(value);
+}
+
+// Add methods to `SetCache`.
+SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+SetCache.prototype.has = setCacheHas;
+
+/**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Stack(entries) {
+ this.__data__ = new ListCache(entries);
+}
+
+/**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+function stackClear() {
+ this.__data__ = new ListCache;
+}
+
+/**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function stackDelete(key) {
+ return this.__data__['delete'](key);
+}
+
+/**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function stackGet(key) {
+ return this.__data__.get(key);
+}
+
+/**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function stackHas(key) {
+ return this.__data__.has(key);
+}
+
+/**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+function stackSet(key, value) {
+ var cache = this.__data__;
+ if (cache instanceof ListCache) {
+ var pairs = cache.__data__;
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ return this;
+ }
+ cache = this.__data__ = new MapCache(pairs);
+ }
+ cache.set(key, value);
+ return this;
+}
+
+// Add methods to `Stack`.
+Stack.prototype.clear = stackClear;
+Stack.prototype['delete'] = stackDelete;
+Stack.prototype.get = stackGet;
+Stack.prototype.has = stackHas;
+Stack.prototype.set = stackSet;
+
+/**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+function arrayLikeKeys(value, inherited) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
+ var result = (isArray(value) || isArguments(value))
+ ? baseTimes(value.length, String)
+ : [];
+
+ var length = result.length,
+ skipIndexes = !!length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * The base implementation of `_.forEach` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+var baseEach = createBaseEach(baseForOwn);
+
+/**
+ * The base implementation of `_.flatten` with support for restricting flattening.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {number} depth The maximum recursion depth.
+ * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+ * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+function baseFlatten(array, depth, predicate, isStrict, result) {
+ var index = -1,
+ length = array.length;
+
+ predicate || (predicate = isFlattenable);
+ result || (result = []);
+
+ while (++index < length) {
+ var value = array[index];
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `baseForOwn` which iterates over `object`
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+var baseFor = createBaseFor();
+
+/**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+}
+
+/**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+function baseGet(object, path) {
+ path = isKey(path, object) ? [path] : castPath(path);
+
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[toKey(path[index++])];
+ }
+ return (index && index == length) ? object : undefined;
+}
+
+/**
+ * The base implementation of `getTag`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+ return objectToString.call(value);
+}
+
+/**
+ * The base implementation of `_.hasIn` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+function baseHasIn(object, key) {
+ return object != null && key in Object(object);
+}
+
+/**
+ * The base implementation of `_.isEqual` which supports partial comparisons
+ * and tracks traversed objects.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {boolean} [bitmask] The bitmask of comparison flags.
+ * The bitmask may be composed of the following flags:
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+function baseIsEqual(value, other, customizer, bitmask, stack) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
+}
+
+/**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = arrayTag,
+ othTag = arrayTag;
+
+ if (!objIsArr) {
+ objTag = getTag(object);
+ objTag = objTag == argsTag ? objectTag : objTag;
+ }
+ if (!othIsArr) {
+ othTag = getTag(other);
+ othTag = othTag == argsTag ? objectTag : othTag;
+ }
+ var objIsObj = objTag == objectTag && !isHostObject(object),
+ othIsObj = othTag == objectTag && !isHostObject(other),
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && !objIsObj) {
+ stack || (stack = new Stack);
+ return (objIsArr || isTypedArray(object))
+ ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
+ : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
+ }
+ if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ var objUnwrapped = objIsWrapped ? object.value() : object,
+ othUnwrapped = othIsWrapped ? other.value() : other;
+
+ stack || (stack = new Stack);
+ return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ stack || (stack = new Stack);
+ return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
+}
+
+/**
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Array} matchData The property names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = Object(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack;
+ if (customizer) {
+ var result = customizer(objValue, srcValue, key, object, source, stack);
+ }
+ if (!(result === undefined
+ ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ : result
+ )) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ */
+function baseIsTypedArray(value) {
+ return isObjectLike(value) &&
+ isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
+}
+
+/**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+function baseIteratee(value) {
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+ if (typeof value == 'function') {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (typeof value == 'object') {
+ return isArray(value)
+ ? baseMatchesProperty(value[0], value[1])
+ : baseMatches(value);
+ }
+ return property(value);
+}
+
+/**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.map` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function baseMap(collection, iteratee) {
+ var index = -1,
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value, key, collection) {
+ result[++index] = iteratee(value, key, collection);
+ });
+ return result;
+}
+
+/**
+ * The base implementation of `_.matches` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ }
+ return function(object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+}
+
+/**
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function baseMatchesProperty(path, srcValue) {
+ if (isKey(path) && isStrictComparable(srcValue)) {
+ return matchesStrictComparable(toKey(path), srcValue);
+ }
+ return function(object) {
+ var objValue = get(object, path);
+ return (objValue === undefined && objValue === srcValue)
+ ? hasIn(object, path)
+ : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
+ };
+}
+
+/**
+ * The base implementation of `_.orderBy` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {string[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */
+function baseOrderBy(collection, iteratees, orders) {
+ var index = -1;
+ iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));
+
+ var result = baseMap(collection, function(value, key, collection) {
+ var criteria = arrayMap(iteratees, function(iteratee) {
+ return iteratee(value);
+ });
+ return { 'criteria': criteria, 'index': ++index, 'value': value };
+ });
+
+ return baseSortBy(result, function(object, other) {
+ return compareMultiple(object, other, orders);
+ });
+}
+
+/**
+ * A specialized version of `baseProperty` which supports deep paths.
*
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `delete`, `get`, `has`, and `set`.
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+function basePropertyDeep(path) {
+ return function(object) {
+ return baseGet(object, path);
+ };
+}
+
+/**
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
*
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ */
+function baseRest(func, start) {
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ index = -1;
+ var otherArgs = Array(start + 1);
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = array;
+ return apply(func, this, otherArgs);
+ };
+}
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
*
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Casts `value` to a path array if it's not one.
*
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast property path array.
+ */
+function castPath(value) {
+ return isArray(value) ? value : stringToPath(value);
+}
+
+/**
+ * Compares values to sort them in ascending order.
*
- * values(other);
- * // => [3, 4]
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */
+function compareAscending(value, other) {
+ if (value !== other) {
+ var valIsDefined = value !== undefined,
+ valIsNull = value === null,
+ valIsReflexive = value === value,
+ valIsSymbol = isSymbol(value);
+
+ var othIsDefined = other !== undefined,
+ othIsNull = other === null,
+ othIsReflexive = other === other,
+ othIsSymbol = isSymbol(other);
+
+ if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
+ (valIsNull && othIsDefined && othIsReflexive) ||
+ (!valIsDefined && othIsReflexive) ||
+ !valIsReflexive) {
+ return 1;
+ }
+ if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
+ (othIsNull && valIsDefined && valIsReflexive) ||
+ (!othIsDefined && valIsReflexive) ||
+ !othIsReflexive) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Used by `_.orderBy` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
+ * specify an order of "desc" for descending or "asc" for ascending sort order
+ * of corresponding values.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]|string[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+function compareMultiple(object, other, orders) {
+ var index = -1,
+ objCriteria = object.criteria,
+ othCriteria = other.criteria,
+ length = objCriteria.length,
+ ordersLength = orders.length;
+
+ while (++index < length) {
+ var result = compareAscending(objCriteria[index], othCriteria[index]);
+ if (result) {
+ if (index >= ordersLength) {
+ return result;
+ }
+ var order = orders[index];
+ return result * (order == 'desc' ? -1 : 1);
+ }
+ }
+ // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to provide the same value for
+ // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+ // for more details.
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
+ return object.index - other.index;
+}
+
+/**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee) {
+ if (collection == null) {
+ return collection;
+ }
+ if (!isArrayLike(collection)) {
+ return eachFunc(collection, iteratee);
+ }
+ var length = collection.length,
+ index = fromRight ? length : -1,
+ iterable = Object(collection);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+}
+
+/**
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(array);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var index = -1,
+ result = true,
+ seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
+
+ stack.set(array, other);
+ stack.set(other, array);
+
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, arrValue, index, other, array, stack)
+ : customizer(arrValue, othValue, index, array, other, stack);
+ }
+ if (compared !== undefined) {
+ if (compared) {
+ continue;
+ }
+ result = false;
+ break;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (seen) {
+ if (!arraySome(other, function(othValue, othIndex) {
+ if (!seen.has(othIndex) &&
+ (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
+ return seen.add(othIndex);
+ }
+ })) {
+ result = false;
+ break;
+ }
+ } else if (!(
+ arrValue === othValue ||
+ equalFunc(arrValue, othValue, customizer, bitmask, stack)
+ )) {
+ result = false;
+ break;
+ }
+ }
+ stack['delete'](array);
+ stack['delete'](other);
+ return result;
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
*
- * object.a = 2;
- * values(object);
- * // => [1, 2]
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
*
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
+ switch (tag) {
+ case dataViewTag:
+ if ((object.byteLength != other.byteLength) ||
+ (object.byteOffset != other.byteOffset)) {
+ return false;
+ }
+ object = object.buffer;
+ other = other.buffer;
+
+ case arrayBufferTag:
+ if ((object.byteLength != other.byteLength) ||
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+ return false;
+ }
+ return true;
+
+ case boolTag:
+ case dateTag:
+ case numberTag:
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
+ // Invalid dates are coerced to `NaN`.
+ return eq(+object, +other);
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings, primitives and objects,
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+ // for more details.
+ return object == (other + '');
+
+ case mapTag:
+ var convert = mapToArray;
+
+ case setTag:
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ convert || (convert = setToArray);
+
+ if (object.size != other.size && !isPartial) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked) {
+ return stacked == other;
+ }
+ bitmask |= UNORDERED_COMPARE_FLAG;
+
+ // Recursively compare objects (susceptible to call stack limits).
+ stack.set(object, other);
+ var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
+ stack['delete'](object);
+ return result;
+
+ case symbolTag:
+ if (symbolValueOf) {
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
+ }
+ }
+ return false;
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
*
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
-function memoize(func, resolver) {
- if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
- throw new TypeError(FUNC_ERROR_TEXT);
+function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ objProps = keys(object),
+ objLength = objProps.length,
+ othProps = keys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isPartial) {
+ return false;
}
- var memoized = function() {
- var args = arguments,
- key = resolver ? resolver.apply(this, args) : args[0],
- cache = memoized.cache;
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var result = true;
+ stack.set(object, other);
+ stack.set(other, object);
- if (cache.has(key)) {
- return cache.get(key);
+ var skipCtor = isPartial;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, objValue, key, other, object, stack)
+ : customizer(objValue, othValue, key, object, other, stack);
}
- var result = func.apply(this, args);
- memoized.cache = cache.set(key, result);
- return result;
- };
- memoized.cache = new (memoize.Cache || MapCache);
- return memoized;
-}
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(compared === undefined
+ ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
+ : compared
+ )) {
+ result = false;
+ break;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (result && !skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
-// Assign cache to `_.memoize`.
-memoize.Cache = MapCache;
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ result = false;
+ }
+ }
+ stack['delete'](object);
+ stack['delete'](other);
+ return result;
+}
/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
+ * Gets the data for `map`.
*
- * _.eq(NaN, NaN);
- * // => true
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
*/
-function eq(value, other) {
- return value === other || (value !== value && other !== other);
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
}
/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- * else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
+ * Gets the property names, values, and compare flags of `object`.
*
- * _.isArguments([1, 2, 3]);
- * // => false
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
*/
-function isArguments(value) {
- // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
- return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
- (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+function getMatchData(object) {
+ var result = keys(object),
+ length = result.length;
+
+ while (length--) {
+ var key = result[length],
+ value = object[key];
+
+ result[length] = [key, value, isStrictComparable(value)];
+ }
+ return result;
}
/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
+ * Gets the native function at `key` of `object`.
*
- * _.isArray(_.noop);
- * // => false
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
*/
-var isArray = Array.isArray;
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
+ * Gets the `toStringTag` of `value`.
*
- * _.isArrayLike(_.noop);
- * // => false
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
*/
-function isArrayLike(value) {
- return value != null && isLength(value.length) && !isFunction(value);
+var getTag = baseGetTag;
+
+// Fallback for data views, maps, sets, and weak maps in IE 11,
+// for data views in Edge < 14, and promises in Node.js.
+if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : undefined;
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
}
/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- * else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
+ * Checks if `path` exists on `object`.
*
- * _.isArrayLikeObject(_.noop);
- * // => false
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @param {Function} hasFunc The function to check properties.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
*/
-function isArrayLikeObject(value) {
- return isObjectLike(value) && isArrayLike(value);
+function hasPath(object, path, hasFunc) {
+ path = isKey(path, object) ? [path] : castPath(path);
+
+ var result,
+ index = -1,
+ length = path.length;
+
+ while (++index < length) {
+ var key = toKey(path[index]);
+ if (!(result = object != null && hasFunc(object, key))) {
+ break;
+ }
+ object = object[key];
+ }
+ if (result) {
+ return result;
+ }
+ var length = object ? object.length : 0;
+ return !!length && isLength(length) && isIndex(key, length) &&
+ (isArray(object) || isArguments(object));
}
/**
- * Checks if `value` is classified as a `Function` object.
+ * Checks if `value` is a flattenable `arguments` object or array.
*
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
+ * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
*/
-function isFunction(value) {
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 8-9 which returns 'object' for typed array and other constructors.
- var tag = isObject(value) ? objectToString.call(value) : '';
- return tag == funcTag || tag == genTag;
+function isFlattenable(value) {
+ return isArray(value) || isArguments(value) ||
+ !!(spreadableSymbol && value && value[spreadableSymbol]);
}
/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ * Checks if `value` is a valid array-like index.
*
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length &&
+ (typeof value == 'number' || reIsUint.test(value)) &&
+ (value > -1 && value % 1 == 0 && value < length);
+}
+
+/**
+ * Checks if the given arguments are from an iteratee call.
*
- * _.isLength('3');
- * // => false
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+ * else `false`.
*/
-function isLength(value) {
- return typeof value == 'number' &&
- value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)
+ ) {
+ return eq(object[index], value);
+ }
+ return false;
}
/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ * Checks if `value` is a property name and not a property path.
*
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
-function isObject(value) {
+function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
var type = typeof value;
- return !!value && (type == 'object' || type == 'function');
+ if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+ value == null || isSymbol(value)) {
+ return true;
+ }
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+ (object != null && value in Object(object));
}
/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
+ * Checks if `value` is suitable for use as unique object key.
*
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
*
- * _.isObjectLike(null);
- * // => false
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
-function isObjectLike(value) {
- return !!value && typeof value == 'object';
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
}
/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
+ * Checks if `value` is likely a prototype object.
*
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
*/
-function isSymbol(value) {
- return typeof value == 'symbol' ||
- (isObjectLike(value) && objectToString.call(value) == symbolTag);
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
}
/**
- * Checks if `value` is classified as a typed array.
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
*
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
+ * @private
* @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
*/
-var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+function isStrictComparable(value) {
+ return value === value && !isObject(value);
+}
/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
+ * A specialized version of `matchesProperty` for source values suitable
+ * for strict equality comparisons, i.e. `===`.
*
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- * @example
+ * @private
+ * @param {string} key The key of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function matchesStrictComparable(key, srcValue) {
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === srcValue &&
+ (srcValue !== undefined || (key in Object(object)));
+ };
+}
+
+/**
+ * Converts `string` to a property path array.
*
- * _.toString(null);
- * // => ''
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+var stringToPath = memoize(function(string) {
+ string = toString(string);
+
+ var result = [];
+ if (reLeadingDot.test(string)) {
+ result.push('');
+ }
+ string.replace(rePropName, function(match, number, quote, string) {
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+});
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
*
- * _.toString(-0);
- * // => '-0'
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Converts `func` to its source code.
*
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
*/
-function toString(value) {
- return value == null ? '' : baseToString(value);
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
}
/**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection thru each iteratee. This method
+ * performs a stable sort, that is, it preserves the original sort order of
+ * equal elements. The iteratees are invoked with one argument: (value).
*
* @static
* @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @returns {Array} Returns the new sorted array.
* @example
*
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
*
- * _.get(object, 'a[0].b.c');
- * // => 3
+ * _.sortBy(users, function(o) { return o.user; });
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
*
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
+ * _.sortBy(users, ['user', 'age']);
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
*
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
+ * _.sortBy(users, 'user', function(o) {
+ * return Math.floor(o.age / 10);
+ * });
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
*/
-function get(object, path, defaultValue) {
- var result = object == null ? undefined : baseGet(object, path);
- return result === undefined ? defaultValue : result;
-}
+var sortBy = baseRest(function(collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+ var length = iteratees.length;
+ if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
+ iteratees = [];
+ } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
+ iteratees = [iteratees[0]];
+ }
+ return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
+});
/**
- * Checks if `path` is a direct or inherited property of `object`.
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
- * @since 4.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
* @example
*
- * var object = _.create({ 'a': _.create({ 'b': 2 }) });
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
*
- * _.hasIn(object, 'a');
- * // => true
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
*
- * _.hasIn(object, 'a.b');
- * // => true
+ * values(other);
+ * // => [3, 4]
*
- * _.hasIn(object, ['a', 'b']);
- * // => true
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
*
- * _.hasIn(object, 'b');
- * // => false
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
*/
-function hasIn(object, path) {
- return object != null && hasPath(object, path, baseHasIn);
+function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result);
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
}
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
/**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
*
* @static
- * @since 0.1.0
* @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
- * function Foo() {
- * this.a = 1;
- * this.b = 2;
- * }
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
*
- * Foo.prototype.c = 3;
+ * _.eq(object, object);
+ * // => true
*
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
+ * _.eq(object, other);
+ * // => false
*
- * _.keys('hi');
- * // => ['0', '1']
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
*/
-function keys(object) {
- return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
}
/**
- * This method returns the first argument it receives.
+ * Checks if `value` is likely an `arguments` object.
*
* @static
- * @since 0.1.0
* @memberOf _
- * @category Util
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
* @example
*
- * var object = { 'a': 1 };
- *
- * console.log(_.identity(object) === object);
+ * _.isArguments(function() { return arguments; }());
* // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
*/
-function identity(value) {
- return value;
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
}
/**
- * Creates a function that returns the value at `path` of a given object.
+ * Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
- * var objects = [
- * { 'a': { 'b': 2 } },
- * { 'a': { 'b': 1 } }
- * ];
- *
- * _.map(objects, _.property('a.b'));
- * // => [2, 1]
+ * _.isArray([1, 2, 3]);
+ * // => true
*
- * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
- * // => [1, 2]
- */
-function property(path) {
- return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
-}
-
-module.exports = sortBy;
-
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(792), __webpack_require__(793)(module)))
-
-/***/ }),
-
-/***/ 792:
-/***/ (function(module, exports) {
-
-var g;
-
-// This works in non-strict mode
-g = (function() {
- return this;
-})();
-
-try {
- // This works if eval is allowed (see CSP)
- g = g || Function("return this")() || (1,eval)("this");
-} catch(e) {
- // This works if the window reference is available
- if(typeof window === "object")
- g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
-
-
-/***/ }),
-
-/***/ 793:
-/***/ (function(module, exports) {
-
-module.exports = function(module) {
- if(!module.webpackPolyfill) {
- module.deprecate = function() {};
- module.paths = [];
- // module.parent = undefined by default
- if(!module.children) module.children = [];
- Object.defineProperty(module, "loaded", {
- enumerable: true,
- get: function() {
- return module.l;
- }
- });
- Object.defineProperty(module, "id", {
- enumerable: true,
- get: function() {
- return module.i;
- }
- });
- module.webpackPolyfill = 1;
- }
- return module;
-};
-
-
-/***/ }),
-
-/***/ 794:
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/*!
- * The buffer module from node.js, for the browser.
+ * _.isArray(document.body.children);
+ * // => false
*
- * @author Feross Aboukhadijeh
- * @license MIT
- */
-/* eslint-disable no-proto */
-
-
-
-var base64 = __webpack_require__(795)
-var ieee754 = __webpack_require__(796)
-var isArray = __webpack_require__(797)
-
-exports.Buffer = Buffer
-exports.SlowBuffer = SlowBuffer
-exports.INSPECT_MAX_BYTES = 50
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
/**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
*
- * Due to various browser bugs, sometimes the Object implementation will be used even
- * when the browser supports typed arrays.
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
*
- * Note:
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
*
- * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
- * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ * _.isArrayLike(document.body.children);
+ * // => true
*
- * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ * _.isArrayLike('abc');
+ * // => true
*
- * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- * incorrect length in some situations.
-
- * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
- * get the Object implementation, which is slower but behaves correctly.
- */
-Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
- ? global.TYPED_ARRAY_SUPPORT
- : typedArraySupport()
-
-/*
- * Export kMaxLength after typed array support is determined.
+ * _.isArrayLike(_.noop);
+ * // => false
*/
-exports.kMaxLength = kMaxLength()
-
-function typedArraySupport () {
- try {
- var arr = new Uint8Array(1)
- arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
- return arr.foo() === 42 && // typed array instances can be augmented
- typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
- arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
- } catch (e) {
- return false
- }
-}
-
-function kMaxLength () {
- return Buffer.TYPED_ARRAY_SUPPORT
- ? 0x7fffffff
- : 0x3fffffff
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
}
-function createBuffer (that, length) {
- if (kMaxLength() < length) {
- throw new RangeError('Invalid typed array length')
- }
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- that = new Uint8Array(length)
- that.__proto__ = Buffer.prototype
- } else {
- // Fallback: Return an object instance of the Buffer class
- if (that === null) {
- that = new Buffer(length)
- }
- that.length = length
- }
-
- return that
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
}
/**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
+ * Checks if `value` is classified as a `Function` object.
*
- * The `Uint8Array` prototype remains unmodified.
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
*/
-
-function Buffer (arg, encodingOrOffset, length) {
- if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
- return new Buffer(arg, encodingOrOffset, length)
- }
-
- // Common case.
- if (typeof arg === 'number') {
- if (typeof encodingOrOffset === 'string') {
- throw new Error(
- 'If encoding is specified then the first argument must be a string'
- )
- }
- return allocUnsafe(this, arg)
- }
- return from(this, arg, encodingOrOffset, length)
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
}
-Buffer.poolSize = 8192 // not used by this implementation
-
-// TODO: Legacy, not needed anymore. Remove in next major version.
-Buffer._augment = function (arr) {
- arr.__proto__ = Buffer.prototype
- return arr
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
-function from (that, value, encodingOrOffset, length) {
- if (typeof value === 'number') {
- throw new TypeError('"value" argument must not be a number')
- }
-
- if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
- return fromArrayBuffer(that, value, encodingOrOffset, length)
- }
-
- if (typeof value === 'string') {
- return fromString(that, value, encodingOrOffset)
- }
-
- return fromObject(that, value)
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
}
/**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
-Buffer.from = function (value, encodingOrOffset, length) {
- return from(null, value, encodingOrOffset, length)
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
}
-if (Buffer.TYPED_ARRAY_SUPPORT) {
- Buffer.prototype.__proto__ = Uint8Array.prototype
- Buffer.__proto__ = Uint8Array
- if (typeof Symbol !== 'undefined' && Symbol.species &&
- Buffer[Symbol.species] === Buffer) {
- // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
- Object.defineProperty(Buffer, Symbol.species, {
- value: null,
- configurable: true
- })
- }
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
}
-function assertSize (size) {
- if (typeof size !== 'number') {
- throw new TypeError('"size" argument must be a number')
- } else if (size < 0) {
- throw new RangeError('"size" argument must not be negative')
- }
-}
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
-function alloc (that, size, fill, encoding) {
- assertSize(size)
- if (size <= 0) {
- return createBuffer(that, size)
- }
- if (fill !== undefined) {
- // Only pay attention to encoding if it's a string. This
- // prevents accidentally sending in a number that would
- // be interpretted as a start offset.
- return typeof encoding === 'string'
- ? createBuffer(that, size).fill(fill, encoding)
- : createBuffer(that, size).fill(fill)
- }
- return createBuffer(that, size)
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+ return value == null ? '' : baseToString(value);
}
/**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
-Buffer.alloc = function (size, fill, encoding) {
- return alloc(null, size, fill, encoding)
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
}
-function allocUnsafe (that, size) {
- assertSize(size)
- that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
- if (!Buffer.TYPED_ARRAY_SUPPORT) {
- for (var i = 0; i < size; ++i) {
- that[i] = 0
- }
- }
- return that
+/**
+ * Checks if `path` is a direct or inherited property of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.hasIn(object, 'a');
+ * // => true
+ *
+ * _.hasIn(object, 'a.b');
+ * // => true
+ *
+ * _.hasIn(object, ['a', 'b']);
+ * // => true
+ *
+ * _.hasIn(object, 'b');
+ * // => false
+ */
+function hasIn(object, path) {
+ return object != null && hasPath(object, path, baseHasIn);
}
/**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
-Buffer.allocUnsafe = function (size) {
- return allocUnsafe(null, size)
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
+
/**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ * This method returns the first argument it receives.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Util
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ *
+ * console.log(_.identity(object) === object);
+ * // => true
*/
-Buffer.allocUnsafeSlow = function (size) {
- return allocUnsafe(null, size)
+function identity(value) {
+ return value;
}
-function fromString (that, string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8'
- }
-
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('"encoding" must be a valid string encoding')
- }
-
- var length = byteLength(string, encoding) | 0
- that = createBuffer(that, length)
-
- var actual = that.write(string, encoding)
-
- if (actual !== length) {
- // Writing a hex string, for example, that contains invalid characters will
- // cause everything after the first invalid character to be ignored. (e.g.
- // 'abxxcd' will be treated as 'ab')
- that = that.slice(0, actual)
- }
-
- return that
+/**
+ * Creates a function that returns the value at `path` of a given object.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Util
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': 2 } },
+ * { 'a': { 'b': 1 } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b'));
+ * // => [2, 1]
+ *
+ * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
+ * // => [1, 2]
+ */
+function property(path) {
+ return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
-function fromArrayLike (that, array) {
- var length = array.length < 0 ? 0 : checked(array.length) | 0
- that = createBuffer(that, length)
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255
- }
- return that
-}
+module.exports = sortBy;
-function fromArrayBuffer (that, array, byteOffset, length) {
- array.byteLength // this throws if `array` is not a valid ArrayBuffer
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(792), __webpack_require__(793)(module)))
- if (byteOffset < 0 || array.byteLength < byteOffset) {
- throw new RangeError('\'offset\' is out of bounds')
- }
+/***/ }),
- if (array.byteLength < byteOffset + (length || 0)) {
- throw new RangeError('\'length\' is out of bounds')
- }
+/***/ 792:
+/***/ (function(module, exports) {
- if (byteOffset === undefined && length === undefined) {
- array = new Uint8Array(array)
- } else if (length === undefined) {
- array = new Uint8Array(array, byteOffset)
- } else {
- array = new Uint8Array(array, byteOffset, length)
- }
+var g;
+
+// This works in non-strict mode
+g = (function() {
+ return this;
+})();
+
+try {
+ // This works if eval is allowed (see CSP)
+ g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+ // This works if the window reference is available
+ if(typeof window === "object")
+ g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- that = array
- that.__proto__ = Buffer.prototype
- } else {
- // Fallback: Return an object instance of the Buffer class
- that = fromArrayLike(that, array)
- }
- return that
-}
-function fromObject (that, obj) {
- if (Buffer.isBuffer(obj)) {
- var len = checked(obj.length) | 0
- that = createBuffer(that, len)
+/***/ }),
- if (that.length === 0) {
- return that
- }
+/***/ 793:
+/***/ (function(module, exports) {
- obj.copy(that, 0, 0, len)
- return that
- }
+module.exports = function(module) {
+ if(!module.webpackPolyfill) {
+ module.deprecate = function() {};
+ module.paths = [];
+ // module.parent = undefined by default
+ if(!module.children) module.children = [];
+ Object.defineProperty(module, "loaded", {
+ enumerable: true,
+ get: function() {
+ return module.l;
+ }
+ });
+ Object.defineProperty(module, "id", {
+ enumerable: true,
+ get: function() {
+ return module.i;
+ }
+ });
+ module.webpackPolyfill = 1;
+ }
+ return module;
+};
- if (obj) {
- if ((typeof ArrayBuffer !== 'undefined' &&
- obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
- if (typeof obj.length !== 'number' || isnan(obj.length)) {
- return createBuffer(that, 0)
- }
- return fromArrayLike(that, obj)
- }
- if (obj.type === 'Buffer' && isArray(obj.data)) {
- return fromArrayLike(that, obj.data)
- }
- }
+/***/ }),
- throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
-}
+/***/ 794:
+/***/ (function(module, exports, __webpack_require__) {
-function checked (length) {
- // Note: cannot use `length < kMaxLength()` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= kMaxLength()) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
- 'size: 0x' + kMaxLength().toString(16) + ' bytes')
- }
- return length | 0
-}
+"use strict";
+/* WEBPACK VAR INJECTION */(function(global) {/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author Feross Aboukhadijeh
+ * @license MIT
+ */
+/* eslint-disable no-proto */
-function SlowBuffer (length) {
- if (+length != length) { // eslint-disable-line eqeqeq
- length = 0
- }
- return Buffer.alloc(+length)
-}
-Buffer.isBuffer = function isBuffer (b) {
- return !!(b != null && b._isBuffer)
-}
-Buffer.compare = function compare (a, b) {
- if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
- throw new TypeError('Arguments must be Buffers')
- }
+var base64 = __webpack_require__(795)
+var ieee754 = __webpack_require__(796)
+var isArray = __webpack_require__(797)
- if (a === b) return 0
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
- var x = a.length
- var y = b.length
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ * === true Use Uint8Array implementation (fastest)
+ * === false Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ * incorrect length in some situations.
- for (var i = 0, len = Math.min(x, y); i < len; ++i) {
- if (a[i] !== b[i]) {
- x = a[i]
- y = b[i]
- break
- }
- }
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+ ? global.TYPED_ARRAY_SUPPORT
+ : typedArraySupport()
- if (x < y) return -1
- if (y < x) return 1
- return 0
-}
+/*
+ * Export kMaxLength after typed array support is determined.
+ */
+exports.kMaxLength = kMaxLength()
-Buffer.isEncoding = function isEncoding (encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'latin1':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true
- default:
- return false
+function typedArraySupport () {
+ try {
+ var arr = new Uint8Array(1)
+ arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+ return arr.foo() === 42 && // typed array instances can be augmented
+ typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+ arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+ } catch (e) {
+ return false
}
}
-Buffer.concat = function concat (list, length) {
- if (!isArray(list)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
+function kMaxLength () {
+ return Buffer.TYPED_ARRAY_SUPPORT
+ ? 0x7fffffff
+ : 0x3fffffff
+}
- if (list.length === 0) {
- return Buffer.alloc(0)
+function createBuffer (that, length) {
+ if (kMaxLength() < length) {
+ throw new RangeError('Invalid typed array length')
}
-
- var i
- if (length === undefined) {
- length = 0
- for (i = 0; i < list.length; ++i) {
- length += list[i].length
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = new Uint8Array(length)
+ that.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ if (that === null) {
+ that = new Buffer(length)
}
+ that.length = length
}
- var buffer = Buffer.allocUnsafe(length)
- var pos = 0
- for (i = 0; i < list.length; ++i) {
- var buf = list[i]
- if (!Buffer.isBuffer(buf)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
- buf.copy(buffer, pos)
- pos += buf.length
- }
- return buffer
+ return that
}
-function byteLength (string, encoding) {
- if (Buffer.isBuffer(string)) {
- return string.length
- }
- if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
- (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
- return string.byteLength
- }
- if (typeof string !== 'string') {
- string = '' + string
- }
+/**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
- var len = string.length
- if (len === 0) return 0
+function Buffer (arg, encodingOrOffset, length) {
+ if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+ return new Buffer(arg, encodingOrOffset, length)
+ }
- // Use a for loop to avoid recursion
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'latin1':
- case 'binary':
- return len
- case 'utf8':
- case 'utf-8':
- case undefined:
- return utf8ToBytes(string).length
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2
- case 'hex':
- return len >>> 1
- case 'base64':
- return base64ToBytes(string).length
- default:
- if (loweredCase) return utf8ToBytes(string).length // assume utf8
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
+ // Common case.
+ if (typeof arg === 'number') {
+ if (typeof encodingOrOffset === 'string') {
+ throw new Error(
+ 'If encoding is specified then the first argument must be a string'
+ )
}
+ return allocUnsafe(this, arg)
}
+ return from(this, arg, encodingOrOffset, length)
}
-Buffer.byteLength = byteLength
-
-function slowToString (encoding, start, end) {
- var loweredCase = false
- // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
- // property of a typed array.
+Buffer.poolSize = 8192 // not used by this implementation
- // This behaves neither like String nor Uint8Array in that we set start/end
- // to their upper/lower bounds if the value passed is out of range.
- // undefined is handled specially as per ECMA-262 6th Edition,
- // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
- if (start === undefined || start < 0) {
- start = 0
- }
- // Return early if start > this.length. Done here to prevent potential uint32
- // coercion fail below.
- if (start > this.length) {
- return ''
- }
+// TODO: Legacy, not needed anymore. Remove in next major version.
+Buffer._augment = function (arr) {
+ arr.__proto__ = Buffer.prototype
+ return arr
+}
- if (end === undefined || end > this.length) {
- end = this.length
+function from (that, value, encodingOrOffset, length) {
+ if (typeof value === 'number') {
+ throw new TypeError('"value" argument must not be a number')
}
- if (end <= 0) {
- return ''
+ if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+ return fromArrayBuffer(that, value, encodingOrOffset, length)
}
- // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
- end >>>= 0
- start >>>= 0
-
- if (end <= start) {
- return ''
+ if (typeof value === 'string') {
+ return fromString(that, value, encodingOrOffset)
}
- if (!encoding) encoding = 'utf8'
-
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end)
-
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end)
-
- case 'ascii':
- return asciiSlice(this, start, end)
-
- case 'latin1':
- case 'binary':
- return latin1Slice(this, start, end)
-
- case 'base64':
- return base64Slice(this, start, end)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = (encoding + '').toLowerCase()
- loweredCase = true
- }
- }
+ return fromObject(that, value)
}
-// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
-// Buffer instances.
-Buffer.prototype._isBuffer = true
-
-function swap (b, n, m) {
- var i = b[n]
- b[n] = b[m]
- b[m] = i
+/**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+Buffer.from = function (value, encodingOrOffset, length) {
+ return from(null, value, encodingOrOffset, length)
}
-Buffer.prototype.swap16 = function swap16 () {
- var len = this.length
- if (len % 2 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 16-bits')
- }
- for (var i = 0; i < len; i += 2) {
- swap(this, i, i + 1)
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+ Buffer.prototype.__proto__ = Uint8Array.prototype
+ Buffer.__proto__ = Uint8Array
+ if (typeof Symbol !== 'undefined' && Symbol.species &&
+ Buffer[Symbol.species] === Buffer) {
+ // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+ Object.defineProperty(Buffer, Symbol.species, {
+ value: null,
+ configurable: true
+ })
}
- return this
}
-Buffer.prototype.swap32 = function swap32 () {
- var len = this.length
- if (len % 4 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 32-bits')
- }
- for (var i = 0; i < len; i += 4) {
- swap(this, i, i + 3)
- swap(this, i + 1, i + 2)
+function assertSize (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('"size" argument must be a number')
+ } else if (size < 0) {
+ throw new RangeError('"size" argument must not be negative')
}
- return this
}
-Buffer.prototype.swap64 = function swap64 () {
- var len = this.length
- if (len % 8 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 64-bits')
+function alloc (that, size, fill, encoding) {
+ assertSize(size)
+ if (size <= 0) {
+ return createBuffer(that, size)
}
- for (var i = 0; i < len; i += 8) {
- swap(this, i, i + 7)
- swap(this, i + 1, i + 6)
- swap(this, i + 2, i + 5)
- swap(this, i + 3, i + 4)
+ if (fill !== undefined) {
+ // Only pay attention to encoding if it's a string. This
+ // prevents accidentally sending in a number that would
+ // be interpretted as a start offset.
+ return typeof encoding === 'string'
+ ? createBuffer(that, size).fill(fill, encoding)
+ : createBuffer(that, size).fill(fill)
}
- return this
-}
-
-Buffer.prototype.toString = function toString () {
- var length = this.length | 0
- if (length === 0) return ''
- if (arguments.length === 0) return utf8Slice(this, 0, length)
- return slowToString.apply(this, arguments)
-}
-
-Buffer.prototype.equals = function equals (b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return true
- return Buffer.compare(this, b) === 0
+ return createBuffer(that, size)
}
-Buffer.prototype.inspect = function inspect () {
- var str = ''
- var max = exports.INSPECT_MAX_BYTES
- if (this.length > 0) {
- str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
- if (this.length > max) str += ' ... '
- }
- return ''
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+ return alloc(null, size, fill, encoding)
}
-Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
- if (!Buffer.isBuffer(target)) {
- throw new TypeError('Argument must be a Buffer')
+function allocUnsafe (that, size) {
+ assertSize(size)
+ that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ for (var i = 0; i < size; ++i) {
+ that[i] = 0
+ }
}
+ return that
+}
- if (start === undefined) {
- start = 0
- }
- if (end === undefined) {
- end = target ? target.length : 0
- }
- if (thisStart === undefined) {
- thisStart = 0
- }
- if (thisEnd === undefined) {
- thisEnd = this.length
- }
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+ return allocUnsafe(null, size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+ return allocUnsafe(null, size)
+}
- if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
- throw new RangeError('out of range index')
+function fromString (that, string, encoding) {
+ if (typeof encoding !== 'string' || encoding === '') {
+ encoding = 'utf8'
}
- if (thisStart >= thisEnd && start >= end) {
- return 0
- }
- if (thisStart >= thisEnd) {
- return -1
- }
- if (start >= end) {
- return 1
+ if (!Buffer.isEncoding(encoding)) {
+ throw new TypeError('"encoding" must be a valid string encoding')
}
- start >>>= 0
- end >>>= 0
- thisStart >>>= 0
- thisEnd >>>= 0
+ var length = byteLength(string, encoding) | 0
+ that = createBuffer(that, length)
- if (this === target) return 0
+ var actual = that.write(string, encoding)
- var x = thisEnd - thisStart
- var y = end - start
- var len = Math.min(x, y)
+ if (actual !== length) {
+ // Writing a hex string, for example, that contains invalid characters will
+ // cause everything after the first invalid character to be ignored. (e.g.
+ // 'abxxcd' will be treated as 'ab')
+ that = that.slice(0, actual)
+ }
- var thisCopy = this.slice(thisStart, thisEnd)
- var targetCopy = target.slice(start, end)
+ return that
+}
- for (var i = 0; i < len; ++i) {
- if (thisCopy[i] !== targetCopy[i]) {
- x = thisCopy[i]
- y = targetCopy[i]
- break
- }
+function fromArrayLike (that, array) {
+ var length = array.length < 0 ? 0 : checked(array.length) | 0
+ that = createBuffer(that, length)
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
}
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
+ return that
}
-// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
-// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
-//
-// Arguments:
-// - buffer - a Buffer to search
-// - val - a string, Buffer, or number
-// - byteOffset - an index into `buffer`; will be clamped to an int32
-// - encoding - an optional encoding, relevant is val is a string
-// - dir - true for indexOf, false for lastIndexOf
-function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
- // Empty buffer means no match
- if (buffer.length === 0) return -1
+function fromArrayBuffer (that, array, byteOffset, length) {
+ array.byteLength // this throws if `array` is not a valid ArrayBuffer
- // Normalize byteOffset
- if (typeof byteOffset === 'string') {
- encoding = byteOffset
- byteOffset = 0
- } else if (byteOffset > 0x7fffffff) {
- byteOffset = 0x7fffffff
- } else if (byteOffset < -0x80000000) {
- byteOffset = -0x80000000
- }
- byteOffset = +byteOffset // Coerce to Number.
- if (isNaN(byteOffset)) {
- // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
- byteOffset = dir ? 0 : (buffer.length - 1)
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
+ throw new RangeError('\'offset\' is out of bounds')
}
- // Normalize byteOffset: negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = buffer.length + byteOffset
- if (byteOffset >= buffer.length) {
- if (dir) return -1
- else byteOffset = buffer.length - 1
- } else if (byteOffset < 0) {
- if (dir) byteOffset = 0
- else return -1
+ if (array.byteLength < byteOffset + (length || 0)) {
+ throw new RangeError('\'length\' is out of bounds')
}
- // Normalize val
- if (typeof val === 'string') {
- val = Buffer.from(val, encoding)
+ if (byteOffset === undefined && length === undefined) {
+ array = new Uint8Array(array)
+ } else if (length === undefined) {
+ array = new Uint8Array(array, byteOffset)
+ } else {
+ array = new Uint8Array(array, byteOffset, length)
}
- // Finally, search either indexOf (if dir is true) or lastIndexOf
- if (Buffer.isBuffer(val)) {
- // Special case: looking for empty string/buffer always fails
- if (val.length === 0) {
- return -1
- }
- return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
- } else if (typeof val === 'number') {
- val = val & 0xFF // Search for a byte value [0-255]
- if (Buffer.TYPED_ARRAY_SUPPORT &&
- typeof Uint8Array.prototype.indexOf === 'function') {
- if (dir) {
- return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
- } else {
- return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
- }
- }
- return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = array
+ that.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ that = fromArrayLike(that, array)
}
-
- throw new TypeError('val must be string, number or Buffer')
+ return that
}
-function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
- var indexSize = 1
- var arrLength = arr.length
- var valLength = val.length
+function fromObject (that, obj) {
+ if (Buffer.isBuffer(obj)) {
+ var len = checked(obj.length) | 0
+ that = createBuffer(that, len)
- if (encoding !== undefined) {
- encoding = String(encoding).toLowerCase()
- if (encoding === 'ucs2' || encoding === 'ucs-2' ||
- encoding === 'utf16le' || encoding === 'utf-16le') {
- if (arr.length < 2 || val.length < 2) {
- return -1
- }
- indexSize = 2
- arrLength /= 2
- valLength /= 2
- byteOffset /= 2
+ if (that.length === 0) {
+ return that
}
- }
- function read (buf, i) {
- if (indexSize === 1) {
- return buf[i]
- } else {
- return buf.readUInt16BE(i * indexSize)
- }
+ obj.copy(that, 0, 0, len)
+ return that
}
- var i
- if (dir) {
- var foundIndex = -1
- for (i = byteOffset; i < arrLength; i++) {
- if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
- if (foundIndex === -1) foundIndex = i
- if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
- } else {
- if (foundIndex !== -1) i -= i - foundIndex
- foundIndex = -1
- }
- }
- } else {
- if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
- for (i = byteOffset; i >= 0; i--) {
- var found = true
- for (var j = 0; j < valLength; j++) {
- if (read(arr, i + j) !== read(val, j)) {
- found = false
- break
- }
+ if (obj) {
+ if ((typeof ArrayBuffer !== 'undefined' &&
+ obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+ if (typeof obj.length !== 'number' || isnan(obj.length)) {
+ return createBuffer(that, 0)
}
- if (found) return i
+ return fromArrayLike(that, obj)
}
- }
-
- return -1
-}
-
-Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
- return this.indexOf(val, byteOffset, encoding) !== -1
-}
-
-Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
-}
-
-Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
-}
-function hexWrite (buf, string, offset, length) {
- offset = Number(offset) || 0
- var remaining = buf.length - offset
- if (!length) {
- length = remaining
- } else {
- length = Number(length)
- if (length > remaining) {
- length = remaining
+ if (obj.type === 'Buffer' && isArray(obj.data)) {
+ return fromArrayLike(that, obj.data)
}
}
- // must be an even number of digits
- var strLen = string.length
- if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
+ throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
- if (length > strLen / 2) {
- length = strLen / 2
- }
- for (var i = 0; i < length; ++i) {
- var parsed = parseInt(string.substr(i * 2, 2), 16)
- if (isNaN(parsed)) return i
- buf[offset + i] = parsed
+function checked (length) {
+ // Note: cannot use `length < kMaxLength()` here because that fails when
+ // length is NaN (which is otherwise coerced to zero.)
+ if (length >= kMaxLength()) {
+ throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+ 'size: 0x' + kMaxLength().toString(16) + ' bytes')
}
- return i
+ return length | 0
}
-function utf8Write (buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+function SlowBuffer (length) {
+ if (+length != length) { // eslint-disable-line eqeqeq
+ length = 0
+ }
+ return Buffer.alloc(+length)
}
-function asciiWrite (buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length)
+Buffer.isBuffer = function isBuffer (b) {
+ return !!(b != null && b._isBuffer)
}
-function latin1Write (buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length)
-}
+Buffer.compare = function compare (a, b) {
+ if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+ throw new TypeError('Arguments must be Buffers')
+ }
-function base64Write (buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length)
+ if (a === b) return 0
+
+ var x = a.length
+ var y = b.length
+
+ for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+ if (a[i] !== b[i]) {
+ x = a[i]
+ y = b[i]
+ break
+ }
+ }
+
+ if (x < y) return -1
+ if (y < x) return 1
+ return 0
}
-function ucs2Write (buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+Buffer.isEncoding = function isEncoding (encoding) {
+ switch (String(encoding).toLowerCase()) {
+ case 'hex':
+ case 'utf8':
+ case 'utf-8':
+ case 'ascii':
+ case 'latin1':
+ case 'binary':
+ case 'base64':
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return true
+ default:
+ return false
+ }
}
-Buffer.prototype.write = function write (string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8'
- length = this.length
- offset = 0
- // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset
- length = this.length
- offset = 0
- // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset | 0
- if (isFinite(length)) {
- length = length | 0
- if (encoding === undefined) encoding = 'utf8'
- } else {
- encoding = length
- length = undefined
+Buffer.concat = function concat (list, length) {
+ if (!isArray(list)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+
+ if (list.length === 0) {
+ return Buffer.alloc(0)
+ }
+
+ var i
+ if (length === undefined) {
+ length = 0
+ for (i = 0; i < list.length; ++i) {
+ length += list[i].length
}
- // legacy write(string, encoding, offset, length) - remove in v0.13
- } else {
- throw new Error(
- 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
- )
}
- var remaining = this.length - offset
- if (length === undefined || length > remaining) length = remaining
+ var buffer = Buffer.allocUnsafe(length)
+ var pos = 0
+ for (i = 0; i < list.length; ++i) {
+ var buf = list[i]
+ if (!Buffer.isBuffer(buf)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+ buf.copy(buffer, pos)
+ pos += buf.length
+ }
+ return buffer
+}
- if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
- throw new RangeError('Attempt to write outside buffer bounds')
+function byteLength (string, encoding) {
+ if (Buffer.isBuffer(string)) {
+ return string.length
+ }
+ if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+ (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+ return string.byteLength
+ }
+ if (typeof string !== 'string') {
+ string = '' + string
}
- if (!encoding) encoding = 'utf8'
+ var len = string.length
+ if (len === 0) return 0
+ // Use a for loop to avoid recursion
var loweredCase = false
for (;;) {
switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length)
-
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length)
-
case 'ascii':
- return asciiWrite(this, string, offset, length)
-
case 'latin1':
case 'binary':
- return latin1Write(this, string, offset, length)
-
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length)
-
+ return len
+ case 'utf8':
+ case 'utf-8':
+ case undefined:
+ return utf8ToBytes(string).length
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
- return ucs2Write(this, string, offset, length)
-
+ return len * 2
+ case 'hex':
+ return len >>> 1
+ case 'base64':
+ return base64ToBytes(string).length
default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ if (loweredCase) return utf8ToBytes(string).length // assume utf8
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
+Buffer.byteLength = byteLength
-Buffer.prototype.toJSON = function toJSON () {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
-}
-
-function base64Slice (buf, start, end) {
- if (start === 0 && end === buf.length) {
- return base64.fromByteArray(buf)
- } else {
- return base64.fromByteArray(buf.slice(start, end))
- }
-}
-
-function utf8Slice (buf, start, end) {
- end = Math.min(buf.length, end)
- var res = []
+function slowToString (encoding, start, end) {
+ var loweredCase = false
- var i = start
- while (i < end) {
- var firstByte = buf[i]
- var codePoint = null
- var bytesPerSequence = (firstByte > 0xEF) ? 4
- : (firstByte > 0xDF) ? 3
- : (firstByte > 0xBF) ? 2
- : 1
+ // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+ // property of a typed array.
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint
+ // This behaves neither like String nor Uint8Array in that we set start/end
+ // to their upper/lower bounds if the value passed is out of range.
+ // undefined is handled specially as per ECMA-262 6th Edition,
+ // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+ if (start === undefined || start < 0) {
+ start = 0
+ }
+ // Return early if start > this.length. Done here to prevent potential uint32
+ // coercion fail below.
+ if (start > this.length) {
+ return ''
+ }
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte
- }
- break
- case 2:
- secondByte = buf[i + 1]
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint
- }
- }
- break
- case 3:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint
- }
- }
- break
- case 4:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- fourthByte = buf[i + 3]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint
- }
- }
- }
- }
+ if (end === undefined || end > this.length) {
+ end = this.length
+ }
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD
- bytesPerSequence = 1
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000
- res.push(codePoint >>> 10 & 0x3FF | 0xD800)
- codePoint = 0xDC00 | codePoint & 0x3FF
- }
+ if (end <= 0) {
+ return ''
+ }
- res.push(codePoint)
- i += bytesPerSequence
+ // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+ end >>>= 0
+ start >>>= 0
+
+ if (end <= start) {
+ return ''
}
- return decodeCodePointsArray(res)
-}
+ if (!encoding) encoding = 'utf8'
-// Based on http://stackoverflow.com/a/22747272/680742, the browser with
-// the lowest limit is Chrome, with 0x10000 args.
-// We go 1 magnitude less, for safety
-var MAX_ARGUMENTS_LENGTH = 0x1000
+ while (true) {
+ switch (encoding) {
+ case 'hex':
+ return hexSlice(this, start, end)
-function decodeCodePointsArray (codePoints) {
- var len = codePoints.length
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
- }
+ case 'utf8':
+ case 'utf-8':
+ return utf8Slice(this, start, end)
- // Decode in chunks to avoid "call stack size exceeded".
- var res = ''
- var i = 0
- while (i < len) {
- res += String.fromCharCode.apply(
- String,
- codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
- )
- }
- return res
-}
+ case 'ascii':
+ return asciiSlice(this, start, end)
-function asciiSlice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
+ case 'latin1':
+ case 'binary':
+ return latin1Slice(this, start, end)
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i] & 0x7F)
- }
- return ret
-}
+ case 'base64':
+ return base64Slice(this, start, end)
-function latin1Slice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return utf16leSlice(this, start, end)
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i])
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = (encoding + '').toLowerCase()
+ loweredCase = true
+ }
}
- return ret
}
-function hexSlice (buf, start, end) {
- var len = buf.length
-
- if (!start || start < 0) start = 0
- if (!end || end < 0 || end > len) end = len
+// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+// Buffer instances.
+Buffer.prototype._isBuffer = true
- var out = ''
- for (var i = start; i < end; ++i) {
- out += toHex(buf[i])
- }
- return out
+function swap (b, n, m) {
+ var i = b[n]
+ b[n] = b[m]
+ b[m] = i
}
-function utf16leSlice (buf, start, end) {
- var bytes = buf.slice(start, end)
- var res = ''
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+Buffer.prototype.swap16 = function swap16 () {
+ var len = this.length
+ if (len % 2 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 16-bits')
}
- return res
+ for (var i = 0; i < len; i += 2) {
+ swap(this, i, i + 1)
+ }
+ return this
}
-Buffer.prototype.slice = function slice (start, end) {
+Buffer.prototype.swap32 = function swap32 () {
var len = this.length
- start = ~~start
- end = end === undefined ? len : ~~end
-
- if (start < 0) {
- start += len
- if (start < 0) start = 0
- } else if (start > len) {
- start = len
+ if (len % 4 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 32-bits')
}
-
- if (end < 0) {
- end += len
- if (end < 0) end = 0
- } else if (end > len) {
- end = len
+ for (var i = 0; i < len; i += 4) {
+ swap(this, i, i + 3)
+ swap(this, i + 1, i + 2)
}
+ return this
+}
- if (end < start) end = start
-
- var newBuf
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- newBuf = this.subarray(start, end)
- newBuf.__proto__ = Buffer.prototype
- } else {
- var sliceLen = end - start
- newBuf = new Buffer(sliceLen, undefined)
- for (var i = 0; i < sliceLen; ++i) {
- newBuf[i] = this[i + start]
- }
+Buffer.prototype.swap64 = function swap64 () {
+ var len = this.length
+ if (len % 8 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 64-bits')
}
-
- return newBuf
+ for (var i = 0; i < len; i += 8) {
+ swap(this, i, i + 7)
+ swap(this, i + 1, i + 6)
+ swap(this, i + 2, i + 5)
+ swap(this, i + 3, i + 4)
+ }
+ return this
}
-/*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
-function checkOffset (offset, ext, length) {
- if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+Buffer.prototype.toString = function toString () {
+ var length = this.length | 0
+ if (length === 0) return ''
+ if (arguments.length === 0) return utf8Slice(this, 0, length)
+ return slowToString.apply(this, arguments)
}
-Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
+Buffer.prototype.equals = function equals (b) {
+ if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+ if (this === b) return true
+ return Buffer.compare(this, b) === 0
+}
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
+Buffer.prototype.inspect = function inspect () {
+ var str = ''
+ var max = exports.INSPECT_MAX_BYTES
+ if (this.length > 0) {
+ str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+ if (this.length > max) str += ' ... '
}
-
- return val
+ return ''
}
-Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length)
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+ if (!Buffer.isBuffer(target)) {
+ throw new TypeError('Argument must be a Buffer')
}
- var val = this[offset + --byteLength]
- var mul = 1
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul
+ if (start === undefined) {
+ start = 0
+ }
+ if (end === undefined) {
+ end = target ? target.length : 0
+ }
+ if (thisStart === undefined) {
+ thisStart = 0
+ }
+ if (thisEnd === undefined) {
+ thisEnd = this.length
}
- return val
-}
+ if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
+ throw new RangeError('out of range index')
+ }
-Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length)
- return this[offset]
-}
+ if (thisStart >= thisEnd && start >= end) {
+ return 0
+ }
+ if (thisStart >= thisEnd) {
+ return -1
+ }
+ if (start >= end) {
+ return 1
+ }
-Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- return this[offset] | (this[offset + 1] << 8)
-}
+ start >>>= 0
+ end >>>= 0
+ thisStart >>>= 0
+ thisEnd >>>= 0
-Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- return (this[offset] << 8) | this[offset + 1]
-}
+ if (this === target) return 0
-Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
+ var x = thisEnd - thisStart
+ var y = end - start
+ var len = Math.min(x, y)
- return ((this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16)) +
- (this[offset + 3] * 0x1000000)
+ var thisCopy = this.slice(thisStart, thisEnd)
+ var targetCopy = target.slice(start, end)
+
+ for (var i = 0; i < len; ++i) {
+ if (thisCopy[i] !== targetCopy[i]) {
+ x = thisCopy[i]
+ y = targetCopy[i]
+ break
+ }
+ }
+
+ if (x < y) return -1
+ if (y < x) return 1
+ return 0
}
-Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
+// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
+// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
+//
+// Arguments:
+// - buffer - a Buffer to search
+// - val - a string, Buffer, or number
+// - byteOffset - an index into `buffer`; will be clamped to an int32
+// - encoding - an optional encoding, relevant is val is a string
+// - dir - true for indexOf, false for lastIndexOf
+function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
+ // Empty buffer means no match
+ if (buffer.length === 0) return -1
- return (this[offset] * 0x1000000) +
- ((this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- this[offset + 3])
-}
+ // Normalize byteOffset
+ if (typeof byteOffset === 'string') {
+ encoding = byteOffset
+ byteOffset = 0
+ } else if (byteOffset > 0x7fffffff) {
+ byteOffset = 0x7fffffff
+ } else if (byteOffset < -0x80000000) {
+ byteOffset = -0x80000000
+ }
+ byteOffset = +byteOffset // Coerce to Number.
+ if (isNaN(byteOffset)) {
+ // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
+ byteOffset = dir ? 0 : (buffer.length - 1)
+ }
-Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
+ // Normalize byteOffset: negative offsets start from the end of the buffer
+ if (byteOffset < 0) byteOffset = buffer.length + byteOffset
+ if (byteOffset >= buffer.length) {
+ if (dir) return -1
+ else byteOffset = buffer.length - 1
+ } else if (byteOffset < 0) {
+ if (dir) byteOffset = 0
+ else return -1
+ }
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
+ // Normalize val
+ if (typeof val === 'string') {
+ val = Buffer.from(val, encoding)
}
- mul *= 0x80
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+ // Finally, search either indexOf (if dir is true) or lastIndexOf
+ if (Buffer.isBuffer(val)) {
+ // Special case: looking for empty string/buffer always fails
+ if (val.length === 0) {
+ return -1
+ }
+ return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
+ } else if (typeof val === 'number') {
+ val = val & 0xFF // Search for a byte value [0-255]
+ if (Buffer.TYPED_ARRAY_SUPPORT &&
+ typeof Uint8Array.prototype.indexOf === 'function') {
+ if (dir) {
+ return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
+ } else {
+ return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
+ }
+ }
+ return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
+ }
- return val
+ throw new TypeError('val must be string, number or Buffer')
}
-Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
+function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
+ var indexSize = 1
+ var arrLength = arr.length
+ var valLength = val.length
- var i = byteLength
- var mul = 1
- var val = this[offset + --i]
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul
+ if (encoding !== undefined) {
+ encoding = String(encoding).toLowerCase()
+ if (encoding === 'ucs2' || encoding === 'ucs-2' ||
+ encoding === 'utf16le' || encoding === 'utf-16le') {
+ if (arr.length < 2 || val.length < 2) {
+ return -1
+ }
+ indexSize = 2
+ arrLength /= 2
+ valLength /= 2
+ byteOffset /= 2
+ }
}
- mul *= 0x80
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+ function read (buf, i) {
+ if (indexSize === 1) {
+ return buf[i]
+ } else {
+ return buf.readUInt16BE(i * indexSize)
+ }
+ }
- return val
-}
+ var i
+ if (dir) {
+ var foundIndex = -1
+ for (i = byteOffset; i < arrLength; i++) {
+ if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+ if (foundIndex === -1) foundIndex = i
+ if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
+ } else {
+ if (foundIndex !== -1) i -= i - foundIndex
+ foundIndex = -1
+ }
+ }
+ } else {
+ if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
+ for (i = byteOffset; i >= 0; i--) {
+ var found = true
+ for (var j = 0; j < valLength; j++) {
+ if (read(arr, i + j) !== read(val, j)) {
+ found = false
+ break
+ }
+ }
+ if (found) return i
+ }
+ }
-Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length)
- if (!(this[offset] & 0x80)) return (this[offset])
- return ((0xff - this[offset] + 1) * -1)
+ return -1
}
-Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset] | (this[offset + 1] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
+Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
+ return this.indexOf(val, byteOffset, encoding) !== -1
}
-Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset + 1] | (this[offset] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
+Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}
-Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16) |
- (this[offset + 3] << 24)
+Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}
-Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
+function hexWrite (buf, string, offset, length) {
+ offset = Number(offset) || 0
+ var remaining = buf.length - offset
+ if (!length) {
+ length = remaining
+ } else {
+ length = Number(length)
+ if (length > remaining) {
+ length = remaining
+ }
+ }
- return (this[offset] << 24) |
- (this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- (this[offset + 3])
+ // must be an even number of digits
+ var strLen = string.length
+ if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
+
+ if (length > strLen / 2) {
+ length = strLen / 2
+ }
+ for (var i = 0; i < length; ++i) {
+ var parsed = parseInt(string.substr(i * 2, 2), 16)
+ if (isNaN(parsed)) return i
+ buf[offset + i] = parsed
+ }
+ return i
}
-Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, true, 23, 4)
+function utf8Write (buf, string, offset, length) {
+ return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}
-Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, false, 23, 4)
+function asciiWrite (buf, string, offset, length) {
+ return blitBuffer(asciiToBytes(string), buf, offset, length)
}
-Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, true, 52, 8)
+function latin1Write (buf, string, offset, length) {
+ return asciiWrite(buf, string, offset, length)
}
-Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, false, 52, 8)
+function base64Write (buf, string, offset, length) {
+ return blitBuffer(base64ToBytes(string), buf, offset, length)
}
-function checkInt (buf, value, offset, ext, max, min) {
- if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
- if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
+function ucs2Write (buf, string, offset, length) {
+ return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}
-Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+ // Buffer#write(string)
+ if (offset === undefined) {
+ encoding = 'utf8'
+ length = this.length
+ offset = 0
+ // Buffer#write(string, encoding)
+ } else if (length === undefined && typeof offset === 'string') {
+ encoding = offset
+ length = this.length
+ offset = 0
+ // Buffer#write(string, offset[, length][, encoding])
+ } else if (isFinite(offset)) {
+ offset = offset | 0
+ if (isFinite(length)) {
+ length = length | 0
+ if (encoding === undefined) encoding = 'utf8'
+ } else {
+ encoding = length
+ length = undefined
+ }
+ // legacy write(string, encoding, offset, length) - remove in v0.13
+ } else {
+ throw new Error(
+ 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
+ )
}
- var mul = 1
- var i = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
+ var remaining = this.length - offset
+ if (length === undefined || length > remaining) length = remaining
+
+ if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+ throw new RangeError('Attempt to write outside buffer bounds')
}
- return offset + byteLength
-}
+ if (!encoding) encoding = 'utf8'
-Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
- }
+ var loweredCase = false
+ for (;;) {
+ switch (encoding) {
+ case 'hex':
+ return hexWrite(this, string, offset, length)
- var i = byteLength - 1
- var mul = 1
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
+ case 'utf8':
+ case 'utf-8':
+ return utf8Write(this, string, offset, length)
- return offset + byteLength
-}
+ case 'ascii':
+ return asciiWrite(this, string, offset, length)
-Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
- this[offset] = (value & 0xff)
- return offset + 1
-}
+ case 'latin1':
+ case 'binary':
+ return latin1Write(this, string, offset, length)
-function objectWriteUInt16 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffff + value + 1
- for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
- buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
- (littleEndian ? i : 1 - i) * 8
- }
-}
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ return base64Write(this, string, offset, length)
-Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- } else {
- objectWriteUInt16(this, value, offset, true)
- }
- return offset + 2
-}
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return ucs2Write(this, string, offset, length)
-Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- } else {
- objectWriteUInt16(this, value, offset, false)
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = ('' + encoding).toLowerCase()
+ loweredCase = true
+ }
}
- return offset + 2
}
-function objectWriteUInt32 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffffffff + value + 1
- for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
- buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+Buffer.prototype.toJSON = function toJSON () {
+ return {
+ type: 'Buffer',
+ data: Array.prototype.slice.call(this._arr || this, 0)
}
}
-Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset + 3] = (value >>> 24)
- this[offset + 2] = (value >>> 16)
- this[offset + 1] = (value >>> 8)
- this[offset] = (value & 0xff)
+function base64Slice (buf, start, end) {
+ if (start === 0 && end === buf.length) {
+ return base64.fromByteArray(buf)
} else {
- objectWriteUInt32(this, value, offset, true)
+ return base64.fromByteArray(buf.slice(start, end))
}
- return offset + 4
}
-Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- } else {
- objectWriteUInt32(this, value, offset, false)
- }
- return offset + 4
-}
+function utf8Slice (buf, start, end) {
+ end = Math.min(buf.length, end)
+ var res = []
-Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1)
+ var i = start
+ while (i < end) {
+ var firstByte = buf[i]
+ var codePoint = null
+ var bytesPerSequence = (firstByte > 0xEF) ? 4
+ : (firstByte > 0xDF) ? 3
+ : (firstByte > 0xBF) ? 2
+ : 1
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
+ if (i + bytesPerSequence <= end) {
+ var secondByte, thirdByte, fourthByte, tempCodePoint
- var i = 0
- var mul = 1
- var sub = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
- sub = 1
+ switch (bytesPerSequence) {
+ case 1:
+ if (firstByte < 0x80) {
+ codePoint = firstByte
+ }
+ break
+ case 2:
+ secondByte = buf[i + 1]
+ if ((secondByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+ if (tempCodePoint > 0x7F) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 3:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+ if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 4:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ fourthByte = buf[i + 3]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+ if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+ codePoint = tempCodePoint
+ }
+ }
+ }
}
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
-
- return offset + byteLength
-}
-
-Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1)
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
-
- var i = byteLength - 1
- var mul = 1
- var sub = 0
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
- sub = 1
+ if (codePoint === null) {
+ // we did not generate a valid codePoint so insert a
+ // replacement char (U+FFFD) and advance only 1 byte
+ codePoint = 0xFFFD
+ bytesPerSequence = 1
+ } else if (codePoint > 0xFFFF) {
+ // encode to utf16 (surrogate pair dance)
+ codePoint -= 0x10000
+ res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+ codePoint = 0xDC00 | codePoint & 0x3FF
}
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+
+ res.push(codePoint)
+ i += bytesPerSequence
}
- return offset + byteLength
+ return decodeCodePointsArray(res)
}
-Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
- if (value < 0) value = 0xff + value + 1
- this[offset] = (value & 0xff)
- return offset + 1
-}
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
-Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- } else {
- objectWriteUInt16(this, value, offset, true)
+function decodeCodePointsArray (codePoints) {
+ var len = codePoints.length
+ if (len <= MAX_ARGUMENTS_LENGTH) {
+ return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
}
- return offset + 2
-}
-Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- } else {
- objectWriteUInt16(this, value, offset, false)
+ // Decode in chunks to avoid "call stack size exceeded".
+ var res = ''
+ var i = 0
+ while (i < len) {
+ res += String.fromCharCode.apply(
+ String,
+ codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+ )
}
- return offset + 2
+ return res
}
-Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- this[offset + 2] = (value >>> 16)
- this[offset + 3] = (value >>> 24)
- } else {
- objectWriteUInt32(this, value, offset, true)
- }
- return offset + 4
-}
+function asciiSlice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
-Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (value < 0) value = 0xffffffff + value + 1
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- } else {
- objectWriteUInt32(this, value, offset, false)
+ for (var i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i] & 0x7F)
}
- return offset + 4
+ return ret
}
-function checkIEEE754 (buf, value, offset, ext, max, min) {
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- if (offset < 0) throw new RangeError('Index out of range')
-}
+function latin1Slice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+ for (var i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i])
}
- ieee754.write(buf, value, offset, littleEndian, 23, 4)
- return offset + 4
+ return ret
}
-Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert)
-}
+function hexSlice (buf, start, end) {
+ var len = buf.length
-Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert)
-}
+ if (!start || start < 0) start = 0
+ if (!end || end < 0 || end > len) end = len
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+ var out = ''
+ for (var i = start; i < end; ++i) {
+ out += toHex(buf[i])
}
- ieee754.write(buf, value, offset, littleEndian, 52, 8)
- return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert)
+ return out
}
-Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert)
+function utf16leSlice (buf, start, end) {
+ var bytes = buf.slice(start, end)
+ var res = ''
+ for (var i = 0; i < bytes.length; i += 2) {
+ res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+ }
+ return res
}
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function copy (target, targetStart, start, end) {
- if (!start) start = 0
- if (!end && end !== 0) end = this.length
- if (targetStart >= target.length) targetStart = target.length
- if (!targetStart) targetStart = 0
- if (end > 0 && end < start) end = start
-
- // Copy 0 bytes; we're done
- if (end === start) return 0
- if (target.length === 0 || this.length === 0) return 0
+Buffer.prototype.slice = function slice (start, end) {
+ var len = this.length
+ start = ~~start
+ end = end === undefined ? len : ~~end
- // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds')
+ if (start < 0) {
+ start += len
+ if (start < 0) start = 0
+ } else if (start > len) {
+ start = len
}
- if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
- if (end < 0) throw new RangeError('sourceEnd out of bounds')
- // Are we oob?
- if (end > this.length) end = this.length
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start
+ if (end < 0) {
+ end += len
+ if (end < 0) end = 0
+ } else if (end > len) {
+ end = len
}
- var len = end - start
- var i
+ if (end < start) end = start
- if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (i = len - 1; i >= 0; --i) {
- target[i + targetStart] = this[i + start]
- }
- } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
- // ascending copy from start
- for (i = 0; i < len; ++i) {
- target[i + targetStart] = this[i + start]
- }
+ var newBuf
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ newBuf = this.subarray(start, end)
+ newBuf.__proto__ = Buffer.prototype
} else {
- Uint8Array.prototype.set.call(
- target,
- this.subarray(start, start + len),
- targetStart
- )
- }
-
- return len
-}
-
-// Usage:
-// buffer.fill(number[, offset[, end]])
-// buffer.fill(buffer[, offset[, end]])
-// buffer.fill(string[, offset[, end]][, encoding])
-Buffer.prototype.fill = function fill (val, start, end, encoding) {
- // Handle string cases:
- if (typeof val === 'string') {
- if (typeof start === 'string') {
- encoding = start
- start = 0
- end = this.length
- } else if (typeof end === 'string') {
- encoding = end
- end = this.length
- }
- if (val.length === 1) {
- var code = val.charCodeAt(0)
- if (code < 256) {
- val = code
- }
- }
- if (encoding !== undefined && typeof encoding !== 'string') {
- throw new TypeError('encoding must be a string')
- }
- if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
+ var sliceLen = end - start
+ newBuf = new Buffer(sliceLen, undefined)
+ for (var i = 0; i < sliceLen; ++i) {
+ newBuf[i] = this[i + start]
}
- } else if (typeof val === 'number') {
- val = val & 255
- }
-
- // Invalid ranges are not set to a default, so can range check early.
- if (start < 0 || this.length < start || this.length < end) {
- throw new RangeError('Out of range index')
}
- if (end <= start) {
- return this
- }
+ return newBuf
+}
- start = start >>> 0
- end = end === undefined ? this.length : end >>> 0
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+ if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+ if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
- if (!val) val = 0
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
- var i
- if (typeof val === 'number') {
- for (i = start; i < end; ++i) {
- this[i] = val
- }
- } else {
- var bytes = Buffer.isBuffer(val)
- ? val
- : utf8ToBytes(new Buffer(val, encoding).toString())
- var len = bytes.length
- for (i = 0; i < end - start; ++i) {
- this[i + start] = bytes[i % len]
- }
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
}
- return this
+ return val
}
-// HELPER FUNCTIONS
-// ================
-
-var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length)
+ }
-function base64clean (str) {
- // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = stringtrim(str).replace(INVALID_BASE64_RE, '')
- // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''
- // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '='
+ var val = this[offset + --byteLength]
+ var mul = 1
+ while (byteLength > 0 && (mul *= 0x100)) {
+ val += this[offset + --byteLength] * mul
}
- return str
+
+ return val
}
-function stringtrim (str) {
- if (str.trim) return str.trim()
- return str.replace(/^\s+|\s+$/g, '')
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ return this[offset]
}
-function toHex (n) {
- if (n < 16) return '0' + n.toString(16)
- return n.toString(16)
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return this[offset] | (this[offset + 1] << 8)
}
-function utf8ToBytes (string, units) {
- units = units || Infinity
- var codePoint
- var length = string.length
- var leadSurrogate = null
- var bytes = []
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return (this[offset] << 8) | this[offset + 1]
+}
- for (var i = 0; i < length; ++i) {
- codePoint = string.charCodeAt(i)
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
- // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- }
+ return ((this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16)) +
+ (this[offset + 3] * 0x1000000)
+}
- // valid lead
- leadSurrogate = codePoint
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
- continue
- }
+ return (this[offset] * 0x1000000) +
+ ((this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ this[offset + 3])
+}
- // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- leadSurrogate = codePoint
- continue
- }
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
- // valid surrogate pair
- codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- }
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
+ }
+ mul *= 0x80
- leadSurrogate = null
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
- // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break
- bytes.push(codePoint)
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break
- bytes.push(
- codePoint >> 0x6 | 0xC0,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break
- bytes.push(
- codePoint >> 0xC | 0xE0,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break
- bytes.push(
- codePoint >> 0x12 | 0xF0,
- codePoint >> 0xC & 0x3F | 0x80,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else {
- throw new Error('Invalid code point')
- }
+ return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var i = byteLength
+ var mul = 1
+ var val = this[offset + --i]
+ while (i > 0 && (mul *= 0x100)) {
+ val += this[offset + --i] * mul
}
+ mul *= 0x80
- return bytes
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+ return val
}
-function asciiToBytes (str) {
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF)
- }
- return byteArray
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ if (!(this[offset] & 0x80)) return (this[offset])
+ return ((0xff - this[offset] + 1) * -1)
}
-function utf16leToBytes (str, units) {
- var c, hi, lo
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- if ((units -= 2) < 0) break
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset] | (this[offset + 1] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
- c = str.charCodeAt(i)
- hi = c >> 8
- lo = c % 256
- byteArray.push(lo)
- byteArray.push(hi)
- }
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset + 1] | (this[offset] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
- return byteArray
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16) |
+ (this[offset + 3] << 24)
}
-function base64ToBytes (str) {
- return base64.toByteArray(base64clean(str))
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset] << 24) |
+ (this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ (this[offset + 3])
}
-function blitBuffer (src, dst, offset, length) {
- for (var i = 0; i < length; ++i) {
- if ((i + offset >= dst.length) || (i >= src.length)) break
- dst[i + offset] = src[i]
- }
- return i
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, true, 23, 4)
}
-function isnan (val) {
- return val !== val // eslint-disable-line no-self-compare
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, false, 23, 4)
}
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(792)))
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, true, 52, 8)
+}
-/***/ }),
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, false, 52, 8)
+}
-/***/ 795:
-/***/ (function(module, exports, __webpack_require__) {
+function checkInt (buf, value, offset, ext, max, min) {
+ if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
+ if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
+ if (offset + ext > buf.length) throw new RangeError('Index out of range')
+}
-"use strict";
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ var maxBytes = Math.pow(2, 8 * byteLength) - 1
+ checkInt(this, value, offset, byteLength, maxBytes, 0)
+ }
+ var mul = 1
+ var i = 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
-exports.byteLength = byteLength
-exports.toByteArray = toByteArray
-exports.fromByteArray = fromByteArray
+ return offset + byteLength
+}
-var lookup = []
-var revLookup = []
-var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ var maxBytes = Math.pow(2, 8 * byteLength) - 1
+ checkInt(this, value, offset, byteLength, maxBytes, 0)
+ }
-var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
-for (var i = 0, len = code.length; i < len; ++i) {
- lookup[i] = code[i]
- revLookup[code.charCodeAt(i)] = i
-}
+ var i = byteLength - 1
+ var mul = 1
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
-// Support decoding URL-safe base64 strings, as Node.js does.
-// See: https://en.wikipedia.org/wiki/Base64#URL_applications
-revLookup['-'.charCodeAt(0)] = 62
-revLookup['_'.charCodeAt(0)] = 63
+ return offset + byteLength
+}
-function getLens (b64) {
- var len = b64.length
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ this[offset] = (value & 0xff)
+ return offset + 1
+}
- if (len % 4 > 0) {
- throw new Error('Invalid string. Length must be a multiple of 4')
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
+ buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+ (littleEndian ? i : 1 - i) * 8
}
+}
- // Trim off extra bytes after placeholder bytes are found
- // See: https://github.com/beatgammit/base64-js/issues/42
- var validLen = b64.indexOf('=')
- if (validLen === -1) validLen = len
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
+ }
+ return offset + 2
+}
- var placeHoldersLen = validLen === len
- ? 0
- : 4 - (validLen % 4)
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
- return [validLen, placeHoldersLen]
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffffffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
+ buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+ }
}
-// base64 is 4/3 + up to two characters of the original data
-function byteLength (b64) {
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset + 3] = (value >>> 24)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 1] = (value >>> 8)
+ this[offset] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
+ }
+ return offset + 4
}
-function _byteLength (b64, validLen, placeHoldersLen) {
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
+ }
+ return offset + 4
}
-function toByteArray (b64) {
- var tmp
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
+ }
- var curByte = 0
+ var i = 0
+ var mul = 1
+ var sub = 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+ sub = 1
+ }
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+ }
- // if there are placeholders, only get up to the last complete 4 chars
- var len = placeHoldersLen > 0
- ? validLen - 4
- : validLen
+ return offset + byteLength
+}
- for (var i = 0; i < len; i += 4) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 18) |
- (revLookup[b64.charCodeAt(i + 1)] << 12) |
- (revLookup[b64.charCodeAt(i + 2)] << 6) |
- revLookup[b64.charCodeAt(i + 3)]
- arr[curByte++] = (tmp >> 16) & 0xFF
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
- }
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
- if (placeHoldersLen === 2) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 2) |
- (revLookup[b64.charCodeAt(i + 1)] >> 4)
- arr[curByte++] = tmp & 0xFF
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
- if (placeHoldersLen === 1) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 10) |
- (revLookup[b64.charCodeAt(i + 1)] << 4) |
- (revLookup[b64.charCodeAt(i + 2)] >> 2)
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
+ var i = byteLength - 1
+ var mul = 1
+ var sub = 0
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+ sub = 1
+ }
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
- return arr
+ return offset + byteLength
}
-function tripletToBase64 (num) {
- return lookup[num >> 18 & 0x3F] +
- lookup[num >> 12 & 0x3F] +
- lookup[num >> 6 & 0x3F] +
- lookup[num & 0x3F]
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ if (value < 0) value = 0xff + value + 1
+ this[offset] = (value & 0xff)
+ return offset + 1
}
-function encodeChunk (uint8, start, end) {
- var tmp
- var output = []
- for (var i = start; i < end; i += 3) {
- tmp =
- ((uint8[i] << 16) & 0xFF0000) +
- ((uint8[i + 1] << 8) & 0xFF00) +
- (uint8[i + 2] & 0xFF)
- output.push(tripletToBase64(tmp))
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
}
- return output.join('')
+ return offset + 2
}
-function fromByteArray (uint8) {
- var tmp
- var len = uint8.length
- var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
- var parts = []
- var maxChunkLength = 16383 // must be multiple of 3
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
- parts.push(encodeChunk(
- uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
- ))
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 3] = (value >>> 24)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
}
+ return offset + 4
+}
- // pad the end with zeros, but make sure to not forget the extra bytes
- if (extraBytes === 1) {
- tmp = uint8[len - 1]
- parts.push(
- lookup[tmp >> 2] +
- lookup[(tmp << 4) & 0x3F] +
- '=='
- )
- } else if (extraBytes === 2) {
- tmp = (uint8[len - 2] << 8) + uint8[len - 1]
- parts.push(
- lookup[tmp >> 10] +
- lookup[(tmp >> 4) & 0x3F] +
- lookup[(tmp << 2) & 0x3F] +
- '='
- )
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (value < 0) value = 0xffffffff + value + 1
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
}
+ return offset + 4
+}
- return parts.join('')
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+ if (offset + ext > buf.length) throw new RangeError('Index out of range')
+ if (offset < 0) throw new RangeError('Index out of range')
}
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 23, 4)
+ return offset + 4
+}
-/***/ }),
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, true, noAssert)
+}
-/***/ 796:
-/***/ (function(module, exports) {
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, false, noAssert)
+}
-exports.read = function (buffer, offset, isLE, mLen, nBytes) {
- var e, m
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var nBits = -7
- var i = isLE ? (nBytes - 1) : 0
- var d = isLE ? -1 : 1
- var s = buffer[offset + i]
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 52, 8)
+ return offset + 8
+}
- i += d
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, true, noAssert)
+}
- e = s & ((1 << (-nBits)) - 1)
- s >>= (-nBits)
- nBits += eLen
- for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, false, noAssert)
+}
- m = e & ((1 << (-nBits)) - 1)
- e >>= (-nBits)
- nBits += mLen
- for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+ if (!start) start = 0
+ if (!end && end !== 0) end = this.length
+ if (targetStart >= target.length) targetStart = target.length
+ if (!targetStart) targetStart = 0
+ if (end > 0 && end < start) end = start
- if (e === 0) {
- e = 1 - eBias
- } else if (e === eMax) {
- return m ? NaN : ((s ? -1 : 1) * Infinity)
- } else {
- m = m + Math.pow(2, mLen)
- e = e - eBias
+ // Copy 0 bytes; we're done
+ if (end === start) return 0
+ if (target.length === 0 || this.length === 0) return 0
+
+ // Fatal error conditions
+ if (targetStart < 0) {
+ throw new RangeError('targetStart out of bounds')
}
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-}
+ if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+ if (end < 0) throw new RangeError('sourceEnd out of bounds')
-exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
- var i = isLE ? 0 : (nBytes - 1)
- var d = isLE ? 1 : -1
- var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+ // Are we oob?
+ if (end > this.length) end = this.length
+ if (target.length - targetStart < end - start) {
+ end = target.length - targetStart + start
+ }
- value = Math.abs(value)
+ var len = end - start
+ var i
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0
- e = eMax
+ if (this === target && start < targetStart && targetStart < end) {
+ // descending copy from end
+ for (i = len - 1; i >= 0; --i) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+ // ascending copy from start
+ for (i = 0; i < len; ++i) {
+ target[i + targetStart] = this[i + start]
+ }
} else {
- e = Math.floor(Math.log(value) / Math.LN2)
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--
- c *= 2
+ Uint8Array.prototype.set.call(
+ target,
+ this.subarray(start, start + len),
+ targetStart
+ )
+ }
+
+ return len
+}
+
+// Usage:
+// buffer.fill(number[, offset[, end]])
+// buffer.fill(buffer[, offset[, end]])
+// buffer.fill(string[, offset[, end]][, encoding])
+Buffer.prototype.fill = function fill (val, start, end, encoding) {
+ // Handle string cases:
+ if (typeof val === 'string') {
+ if (typeof start === 'string') {
+ encoding = start
+ start = 0
+ end = this.length
+ } else if (typeof end === 'string') {
+ encoding = end
+ end = this.length
}
- if (e + eBias >= 1) {
- value += rt / c
- } else {
- value += rt * Math.pow(2, 1 - eBias)
+ if (val.length === 1) {
+ var code = val.charCodeAt(0)
+ if (code < 256) {
+ val = code
+ }
}
- if (value * c >= 2) {
- e++
- c /= 2
+ if (encoding !== undefined && typeof encoding !== 'string') {
+ throw new TypeError('encoding must be a string')
}
-
- if (e + eBias >= eMax) {
- m = 0
- e = eMax
- } else if (e + eBias >= 1) {
- m = ((value * c) - 1) * Math.pow(2, mLen)
- e = e + eBias
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
- e = 0
+ if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
+ throw new TypeError('Unknown encoding: ' + encoding)
}
+ } else if (typeof val === 'number') {
+ val = val & 255
}
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+ // Invalid ranges are not set to a default, so can range check early.
+ if (start < 0 || this.length < start || this.length < end) {
+ throw new RangeError('Out of range index')
+ }
- e = (e << mLen) | m
- eLen += mLen
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+ if (end <= start) {
+ return this
+ }
- buffer[offset + i - d] |= s * 128
-}
+ start = start >>> 0
+ end = end === undefined ? this.length : end >>> 0
+ if (!val) val = 0
-/***/ }),
+ var i
+ if (typeof val === 'number') {
+ for (i = start; i < end; ++i) {
+ this[i] = val
+ }
+ } else {
+ var bytes = Buffer.isBuffer(val)
+ ? val
+ : utf8ToBytes(new Buffer(val, encoding).toString())
+ var len = bytes.length
+ for (i = 0; i < end - start; ++i) {
+ this[i + start] = bytes[i % len]
+ }
+ }
-/***/ 797:
-/***/ (function(module, exports) {
+ return this
+}
-var toString = {}.toString;
+// HELPER FUNCTIONS
+// ================
-module.exports = Array.isArray || function (arr) {
- return toString.call(arr) == '[object Array]';
-};
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+function base64clean (str) {
+ // Node strips out invalid characters like \n and \t from the string, base64-js does not
+ str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+ // Node converts strings with length < 2 to ''
+ if (str.length < 2) return ''
+ // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+ while (str.length % 4 !== 0) {
+ str = str + '='
+ }
+ return str
+}
-/***/ }),
+function stringtrim (str) {
+ if (str.trim) return str.trim()
+ return str.replace(/^\s+|\s+$/g, '')
+}
-/***/ 916:
-/***/ (function(module, exports, __webpack_require__) {
+function toHex (n) {
+ if (n < 16) return '0' + n.toString(16)
+ return n.toString(16)
+}
-/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */
-;(function(root) {
+function utf8ToBytes (string, units) {
+ units = units || Infinity
+ var codePoint
+ var length = string.length
+ var leadSurrogate = null
+ var bytes = []
- /** Detect free variables */
- var freeExports = typeof exports == 'object' && exports &&
- !exports.nodeType && exports;
- var freeModule = typeof module == 'object' && module &&
- !module.nodeType && module;
- var freeGlobal = typeof global == 'object' && global;
- if (
- freeGlobal.global === freeGlobal ||
- freeGlobal.window === freeGlobal ||
- freeGlobal.self === freeGlobal
- ) {
- root = freeGlobal;
- }
+ for (var i = 0; i < length; ++i) {
+ codePoint = string.charCodeAt(i)
+
+ // is surrogate component
+ if (codePoint > 0xD7FF && codePoint < 0xE000) {
+ // last char was a lead
+ if (!leadSurrogate) {
+ // no lead yet
+ if (codePoint > 0xDBFF) {
+ // unexpected trail
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ } else if (i + 1 === length) {
+ // unpaired lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ }
- /**
- * The `punycode` object.
- * @name punycode
- * @type Object
- */
- var punycode,
+ // valid lead
+ leadSurrogate = codePoint
- /** Highest positive signed 32-bit float value */
- maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
+ continue
+ }
- /** Bootstring parameters */
- base = 36,
- tMin = 1,
- tMax = 26,
- skew = 38,
- damp = 700,
- initialBias = 72,
- initialN = 128, // 0x80
- delimiter = '-', // '\x2D'
+ // 2 leads in a row
+ if (codePoint < 0xDC00) {
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ leadSurrogate = codePoint
+ continue
+ }
- /** Regular expressions */
- regexPunycode = /^xn--/,
- regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
- regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
+ // valid surrogate pair
+ codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+ } else if (leadSurrogate) {
+ // valid bmp char, but last char was a lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ }
- /** Error messages */
- errors = {
- 'overflow': 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input'
- },
+ leadSurrogate = null
- /** Convenience shortcuts */
- baseMinusTMin = base - tMin,
- floor = Math.floor,
- stringFromCharCode = String.fromCharCode,
+ // encode utf8
+ if (codePoint < 0x80) {
+ if ((units -= 1) < 0) break
+ bytes.push(codePoint)
+ } else if (codePoint < 0x800) {
+ if ((units -= 2) < 0) break
+ bytes.push(
+ codePoint >> 0x6 | 0xC0,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x10000) {
+ if ((units -= 3) < 0) break
+ bytes.push(
+ codePoint >> 0xC | 0xE0,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x110000) {
+ if ((units -= 4) < 0) break
+ bytes.push(
+ codePoint >> 0x12 | 0xF0,
+ codePoint >> 0xC & 0x3F | 0x80,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else {
+ throw new Error('Invalid code point')
+ }
+ }
- /** Temporary variable */
- key;
+ return bytes
+}
- /*--------------------------------------------------------------------------*/
+function asciiToBytes (str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; ++i) {
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push(str.charCodeAt(i) & 0xFF)
+ }
+ return byteArray
+}
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
+function utf16leToBytes (str, units) {
+ var c, hi, lo
+ var byteArray = []
+ for (var i = 0; i < str.length; ++i) {
+ if ((units -= 2) < 0) break
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
+ c = str.charCodeAt(i)
+ hi = c >> 8
+ lo = c % 256
+ byteArray.push(lo)
+ byteArray.push(hi)
+ }
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- }
- // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
+ return byteArray
+}
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // low surrogate
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
+function base64ToBytes (str) {
+ return base64.toByteArray(base64clean(str))
+}
- /**
- * Creates a string based on an array of numeric code points.
- * @see `punycode.ucs2.decode`
- * @memberOf punycode.ucs2
- * @name encode
- * @param {Array} codePoints The array of numeric code points.
- * @returns {String} The new Unicode string (UCS-2).
- */
- function ucs2encode(array) {
- return map(array, function(value) {
- var output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += stringFromCharCode(value);
- return output;
- }).join('');
- }
+function blitBuffer (src, dst, offset, length) {
+ for (var i = 0; i < length; ++i) {
+ if ((i + offset >= dst.length) || (i >= src.length)) break
+ dst[i + offset] = src[i]
+ }
+ return i
+}
- /**
- * Converts a basic code point into a digit/integer.
- * @see `digitToBasic()`
- * @private
- * @param {Number} codePoint The basic numeric code point value.
- * @returns {Number} The numeric value of a basic code point (for use in
- * representing integers) in the range `0` to `base - 1`, or `base` if
- * the code point does not represent a value.
- */
- function basicToDigit(codePoint) {
- if (codePoint - 48 < 10) {
- return codePoint - 22;
- }
- if (codePoint - 65 < 26) {
- return codePoint - 65;
- }
- if (codePoint - 97 < 26) {
- return codePoint - 97;
- }
- return base;
- }
+function isnan (val) {
+ return val !== val // eslint-disable-line no-self-compare
+}
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(792)))
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
- }
+/***/ }),
- /**
- * Converts a Punycode string of ASCII-only symbols to a string of Unicode
- * symbols.
- * @memberOf punycode
- * @param {String} input The Punycode string of ASCII-only symbols.
- * @returns {String} The resulting string of Unicode symbols.
- */
- function decode(input) {
- // Don't use UCS-2
- var output = [],
- inputLength = input.length,
- out,
- i = 0,
- n = initialN,
- bias = initialBias,
- basic,
- j,
- index,
- oldi,
- w,
- k,
- digit,
- t,
- /** Cached calculation results */
- baseMinusT;
+/***/ 795:
+/***/ (function(module, exports, __webpack_require__) {
- // Handle the basic code points: let `basic` be the number of input code
- // points before the last delimiter, or `0` if there is none, then copy
- // the first basic code points to the output.
+"use strict";
- basic = input.lastIndexOf(delimiter);
- if (basic < 0) {
- basic = 0;
- }
- for (j = 0; j < basic; ++j) {
- // if it's not a basic code point
- if (input.charCodeAt(j) >= 0x80) {
- error('not-basic');
- }
- output.push(input.charCodeAt(j));
- }
+exports.byteLength = byteLength
+exports.toByteArray = toByteArray
+exports.fromByteArray = fromByteArray
- // Main decoding loop: start just after the last delimiter if any basic code
- // points were copied; start at the beginning otherwise.
+var lookup = []
+var revLookup = []
+var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
- for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+for (var i = 0, len = code.length; i < len; ++i) {
+ lookup[i] = code[i]
+ revLookup[code.charCodeAt(i)] = i
+}
- // `index` is the index of the next character to be consumed.
- // Decode a generalized variable-length integer into `delta`,
- // which gets added to `i`. The overflow checking is easier
- // if we increase `i` as we go, then subtract off its starting
- // value at the end to obtain `delta`.
- for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
+// Support decoding URL-safe base64 strings, as Node.js does.
+// See: https://en.wikipedia.org/wiki/Base64#URL_applications
+revLookup['-'.charCodeAt(0)] = 62
+revLookup['_'.charCodeAt(0)] = 63
- if (index >= inputLength) {
- error('invalid-input');
- }
+function getLens (b64) {
+ var len = b64.length
- digit = basicToDigit(input.charCodeAt(index++));
+ if (len % 4 > 0) {
+ throw new Error('Invalid string. Length must be a multiple of 4')
+ }
- if (digit >= base || digit > floor((maxInt - i) / w)) {
- error('overflow');
- }
+ // Trim off extra bytes after placeholder bytes are found
+ // See: https://github.com/beatgammit/base64-js/issues/42
+ var validLen = b64.indexOf('=')
+ if (validLen === -1) validLen = len
- i += digit * w;
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ var placeHoldersLen = validLen === len
+ ? 0
+ : 4 - (validLen % 4)
- if (digit < t) {
- break;
- }
+ return [validLen, placeHoldersLen]
+}
- baseMinusT = base - t;
- if (w > floor(maxInt / baseMinusT)) {
- error('overflow');
- }
+// base64 is 4/3 + up to two characters of the original data
+function byteLength (b64) {
+ var lens = getLens(b64)
+ var validLen = lens[0]
+ var placeHoldersLen = lens[1]
+ return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
+}
- w *= baseMinusT;
+function _byteLength (b64, validLen, placeHoldersLen) {
+ return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
+}
- }
+function toByteArray (b64) {
+ var tmp
+ var lens = getLens(b64)
+ var validLen = lens[0]
+ var placeHoldersLen = lens[1]
- out = output.length + 1;
- bias = adapt(i - oldi, out, oldi == 0);
+ var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
- // `i` was supposed to wrap around from `out` to `0`,
- // incrementing `n` each time, so we'll fix that now:
- if (floor(i / out) > maxInt - n) {
- error('overflow');
- }
+ var curByte = 0
- n += floor(i / out);
- i %= out;
+ // if there are placeholders, only get up to the last complete 4 chars
+ var len = placeHoldersLen > 0
+ ? validLen - 4
+ : validLen
- // Insert `n` at position `i` of the output
- output.splice(i++, 0, n);
+ for (var i = 0; i < len; i += 4) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 18) |
+ (revLookup[b64.charCodeAt(i + 1)] << 12) |
+ (revLookup[b64.charCodeAt(i + 2)] << 6) |
+ revLookup[b64.charCodeAt(i + 3)]
+ arr[curByte++] = (tmp >> 16) & 0xFF
+ arr[curByte++] = (tmp >> 8) & 0xFF
+ arr[curByte++] = tmp & 0xFF
+ }
- }
+ if (placeHoldersLen === 2) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 2) |
+ (revLookup[b64.charCodeAt(i + 1)] >> 4)
+ arr[curByte++] = tmp & 0xFF
+ }
- return ucs2encode(output);
- }
+ if (placeHoldersLen === 1) {
+ tmp =
+ (revLookup[b64.charCodeAt(i)] << 10) |
+ (revLookup[b64.charCodeAt(i + 1)] << 4) |
+ (revLookup[b64.charCodeAt(i + 2)] >> 2)
+ arr[curByte++] = (tmp >> 8) & 0xFF
+ arr[curByte++] = tmp & 0xFF
+ }
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT;
+ return arr
+}
- // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input);
+function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] +
+ lookup[num >> 12 & 0x3F] +
+ lookup[num >> 6 & 0x3F] +
+ lookup[num & 0x3F]
+}
- // Cache the length
- inputLength = input.length;
+function encodeChunk (uint8, start, end) {
+ var tmp
+ var output = []
+ for (var i = start; i < end; i += 3) {
+ tmp =
+ ((uint8[i] << 16) & 0xFF0000) +
+ ((uint8[i + 1] << 8) & 0xFF00) +
+ (uint8[i + 2] & 0xFF)
+ output.push(tripletToBase64(tmp))
+ }
+ return output.join('')
+}
+
+function fromByteArray (uint8) {
+ var tmp
+ var len = uint8.length
+ var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
+ var parts = []
+ var maxChunkLength = 16383 // must be multiple of 3
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+ parts.push(encodeChunk(
+ uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
+ ))
+ }
- // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias;
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ if (extraBytes === 1) {
+ tmp = uint8[len - 1]
+ parts.push(
+ lookup[tmp >> 2] +
+ lookup[(tmp << 4) & 0x3F] +
+ '=='
+ )
+ } else if (extraBytes === 2) {
+ tmp = (uint8[len - 2] << 8) + uint8[len - 1]
+ parts.push(
+ lookup[tmp >> 10] +
+ lookup[(tmp >> 4) & 0x3F] +
+ lookup[(tmp << 2) & 0x3F] +
+ '='
+ )
+ }
- // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
+ return parts.join('')
+}
- handledCPCount = basicLength = output.length;
- // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
+/***/ }),
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- }
+/***/ 796:
+/***/ (function(module, exports) {
- // Main encoding loop:
- while (handledCPCount < inputLength) {
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+ var e, m
+ var eLen = (nBytes * 8) - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var nBits = -7
+ var i = isLE ? (nBytes - 1) : 0
+ var d = isLE ? -1 : 1
+ var s = buffer[offset + i]
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
+ i += d
- // Increase `delta` enough to advance the decoder's state to ,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
+ e = s & ((1 << (-nBits)) - 1)
+ s >>= (-nBits)
+ nBits += eLen
+ for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
+ m = e & ((1 << (-nBits)) - 1)
+ e >>= (-nBits)
+ nBits += mLen
+ for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
+ if (e === 0) {
+ e = 1 - eBias
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity)
+ } else {
+ m = m + Math.pow(2, mLen)
+ e = e - eBias
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+ var e, m, c
+ var eLen = (nBytes * 8) - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+ var i = isLE ? 0 : (nBytes - 1)
+ var d = isLE ? 1 : -1
+ var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (q = delta, k = base; /* no condition */; k += base) {
- t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(
- stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
- );
- q = floor(qMinusT / baseMinusT);
- }
+ value = Math.abs(value)
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0
+ e = eMax
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2)
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--
+ c *= 2
+ }
+ if (e + eBias >= 1) {
+ value += rt / c
+ } else {
+ value += rt * Math.pow(2, 1 - eBias)
+ }
+ if (value * c >= 2) {
+ e++
+ c /= 2
+ }
- ++delta;
- ++n;
+ if (e + eBias >= eMax) {
+ m = 0
+ e = eMax
+ } else if (e + eBias >= 1) {
+ m = ((value * c) - 1) * Math.pow(2, mLen)
+ e = e + eBias
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+ e = 0
+ }
+ }
- }
- return output.join('');
- }
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
- /**
- * Converts a Punycode string representing a domain name or an email address
- * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
- * it doesn't matter if you call it on a string that has already been
- * converted to Unicode.
- * @memberOf punycode
- * @param {String} input The Punycoded domain name or email address to
- * convert to Unicode.
- * @returns {String} The Unicode representation of the given Punycode
- * string.
- */
- function toUnicode(input) {
- return mapDomain(input, function(string) {
- return regexPunycode.test(string)
- ? decode(string.slice(4).toLowerCase())
- : string;
- });
- }
+ e = (e << mLen) | m
+ eLen += mLen
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string)
- ? 'xn--' + encode(string)
- : string;
- });
- }
+ buffer[offset + i - d] |= s * 128
+}
- /*--------------------------------------------------------------------------*/
- /** Define the public API */
- punycode = {
- /**
- * A string representing the current Punycode.js version number.
- * @memberOf punycode
- * @type String
- */
- 'version': '1.4.1',
- /**
- * An object of methods to convert from JavaScript's internal character
- * representation (UCS-2) to Unicode code points, and back.
- * @see
- * @memberOf punycode
- * @type Object
- */
- 'ucs2': {
- 'decode': ucs2decode,
- 'encode': ucs2encode
- },
- 'decode': decode,
- 'encode': encode,
- 'toASCII': toASCII,
- 'toUnicode': toUnicode
- };
+/***/ }),
- /** Expose `punycode` */
- // Some AMD build optimizers, like r.js, check for specific condition patterns
- // like the following:
- if (
- true
- ) {
- !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
- return punycode;
- }).call(exports, __webpack_require__, exports, module),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else if (freeExports && freeModule) {
- if (module.exports == freeExports) {
- // in Node.js, io.js, or RingoJS v0.8.0+
- freeModule.exports = punycode;
- } else {
- // in Narwhal or RingoJS v0.7.0-
- for (key in punycode) {
- punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
- }
- }
- } else {
- // in Rhino or a web browser
- root.punycode = punycode;
- }
+/***/ 797:
+/***/ (function(module, exports) {
-}(this));
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(793)(module), __webpack_require__(792)))
/***/ })
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/shared/widgets/tooltip/HTMLTooltip.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/shared/widgets/tooltip/HTMLTooltip.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/client/shared/widgets/tooltip/HTMLTooltip.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/client/shared/widgets/tooltip/HTMLTooltip.js 2019-02-07 12:50:27.000000000 +0000
@@ -894,7 +894,16 @@
},
_getTopWindow: function() {
- return this.doc.defaultView.top;
+ const win = this.doc.defaultView;
+ if (win.windowRoot) {
+ // In some situations (e.g. about:devtools-toolbox) the current document is loaded
+ // in a Window instead of a ChromeWindow.
+ // To get access to the topmost ChromeWindow, we need to use the chrome privileged
+ // windowRoot getter.
+ return win.windowRoot.ownerGlobal;
+ }
+ // win.top is used as fallback if we are not in a chrome privileged document.
+ return win.top;
},
/**
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/mochitest/webextension-helpers.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/mochitest/webextension-helpers.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/mochitest/webextension-helpers.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/mochitest/webextension-helpers.js 2019-02-07 12:50:27.000000000 +0000
@@ -1,6 +1,6 @@
/* exported attachAddon, setWebExtensionOOPMode, waitForFramesUpdated, reloadAddon,
- collectFrameUpdates, generateWebExtensionXPI, promiseInstallFile,
- promiseAddonByID, promiseWebExtensionStartup, promiseWebExtensionShutdown
+ collectFrameUpdates, generateWebExtensionXPI, promiseInstallFile,
+ promiseWebExtensionStartup, promiseWebExtensionShutdown
*/
"use strict";
@@ -10,13 +10,10 @@
const {DebuggerServer} = require("devtools/server/main");
const {TargetFactory} = require("devtools/client/framework/target");
-const {AddonManager} = require("resource://gre/modules/AddonManager.jsm");
-const {Extension, Management} = require("resource://gre/modules/Extension.jsm");
-const {flushJarCache} = require("resource://gre/modules/ExtensionUtils.jsm");
-const {Services} = require("resource://gre/modules/Services.jsm");
+const {AddonTestUtils} = require("resource://testing-common/AddonTestUtils.jsm");
+const {ExtensionTestCommon} = require("resource://testing-common/ExtensionTestCommon.jsm");
loader.lazyImporter(this, "ExtensionParent", "resource://gre/modules/ExtensionParent.jsm");
-loader.lazyImporter(this, "OS", "resource://gre/modules/osfile.jsm");
// Initialize a minimal DebuggerServer and connect to the webextension addon actor.
if (!DebuggerServer.initialized) {
@@ -129,78 +126,11 @@
// Test helpers related to the AddonManager.
function generateWebExtensionXPI(extDetails) {
- const addonFile = Extension.generateXPI(extDetails);
-
- flushJarCache(addonFile.path);
- Services.ppmm.broadcastAsyncMessage("Extension:FlushJarCache",
- {path: addonFile.path});
-
- // Remove the file on cleanup if needed.
- SimpleTest.registerCleanupFunction(() => {
- flushJarCache(addonFile.path);
- Services.ppmm.broadcastAsyncMessage("Extension:FlushJarCache",
- {path: addonFile.path});
-
- if (addonFile.exists()) {
- OS.File.remove(addonFile.path);
- }
- });
-
- return addonFile;
-}
-
-function promiseCompleteInstall(install) {
- let listener;
- return new Promise((resolve, reject) => {
- listener = {
- onDownloadFailed: reject,
- onDownloadCancelled: reject,
- onInstallFailed: reject,
- onInstallCancelled: reject,
- onInstallEnded: resolve,
- onInstallPostponed: reject,
- };
-
- install.addListener(listener);
- install.install();
- }).then(() => {
- install.removeListener(listener);
- return install;
- });
-}
-
-function promiseInstallFile(file) {
- return AddonManager.getInstallForFile(file).then(install => {
- if (!install) {
- throw new Error(`No AddonInstall created for ${file.path}`);
- }
-
- if (install.state != AddonManager.STATE_DOWNLOADED) {
- throw new Error(`Expected file to be downloaded for install of ${file.path}`);
- }
-
- return promiseCompleteInstall(install);
- });
-}
-
-function promiseWebExtensionStartup() {
- return new Promise(resolve => {
- const listener = (evt, extension) => {
- Management.off("ready", listener);
- resolve(extension);
- };
-
- Management.on("ready", listener);
- });
+ return ExtensionTestCommon.generateXPI(extDetails);
}
-function promiseWebExtensionShutdown() {
- return new Promise(resolve => {
- const listener = (event, extension) => {
- Management.off("shutdown", listener);
- resolve(extension);
- };
-
- Management.on("shutdown", listener);
- });
-}
+let {
+ promiseInstallFile,
+ promiseWebExtensionStartup,
+ promiseWebExtensionShutdown,
+} = AddonTestUtils;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/unit/head_dbg.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/unit/head_dbg.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/unit/head_dbg.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/unit/head_dbg.js 2019-02-07 12:50:26.000000000 +0000
@@ -802,9 +802,7 @@
* @returns Promise
*/
async function getSource(threadClient, url) {
- const {sources} = await threadClient.getSources();
- const source = sources.find((s) => s.url === url);
-
+ const source = await getSourceForm(threadClient, url);
if (source) {
return threadClient.source(source);
}
@@ -813,11 +811,15 @@
}
async function getSourceById(threadClient, id) {
- const { sources } = await threadClient.getSources();
- const form = sources.find(source => source.actor == id);
+ const form = await getSourceFormById(threadClient, id);
return threadClient.source(form);
}
+async function getSourceForm(threadClient, url) {
+ const {sources} = await threadClient.getSources();
+ return sources.find((s) => s.url === url);
+}
+
async function getSourceFormById(threadClient, id) {
const { sources } = await threadClient.getSources();
return sources.find(source => source.actor == id);
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/unit/test_blackboxing-01.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/unit/test_blackboxing-01.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/server/tests/unit/test_blackboxing-01.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/server/tests/unit/test_blackboxing-01.js 2019-02-07 12:50:26.000000000 +0000
@@ -30,6 +30,7 @@
const testBlackBox = async function() {
const packet = await executeOnNextTickAndWaitForPause(evalCode, gClient);
+
const bpSource = await getSourceById(
gThreadClient,
packet.frame.where.actor
@@ -38,9 +39,9 @@
await setBreakpoint(bpSource, { line: 2 });
await resume(gThreadClient);
- const sourceClient = await getSource(gThreadClient, BLACK_BOXED_URL);
+ let sourceForm = await getSourceForm(gThreadClient, BLACK_BOXED_URL);
- Assert.ok(!sourceClient.isBlackBoxed,
+ Assert.ok(!sourceForm.isBlackBoxed,
"By default the source is not black boxed.");
// Test that we can step into `doStuff` when we are not black boxed.
@@ -58,8 +59,10 @@
}
);
- await blackBox(sourceClient);
- Assert.ok(sourceClient.isBlackBoxed);
+ const blackboxedSource = await getSource(gThreadClient, BLACK_BOXED_URL);
+ await blackBox(blackboxedSource);
+ sourceForm = await getSourceForm(gThreadClient, BLACK_BOXED_URL);
+ Assert.ok(sourceForm.isBlackBoxed);
// Test that we step through `doStuff` when we are black boxed and its frame
// doesn't show up.
@@ -81,8 +84,9 @@
}
);
- await unBlackBox(sourceClient);
- Assert.ok(!sourceClient.isBlackBoxed);
+ await unBlackBox(blackboxedSource);
+ sourceForm = await getSourceForm(gThreadClient, BLACK_BOXED_URL);
+ Assert.ok(!sourceForm.isBlackBoxed);
// Test that we can step into `doStuff` again.
await runTest(
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/client/breakpoint-client.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/client/breakpoint-client.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/client/breakpoint-client.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/client/breakpoint-client.js 2019-02-07 12:50:26.000000000 +0000
@@ -68,30 +68,30 @@
*/
setOptions: function(options) {
if (this._client.mainRoot.traits.nativeLogpoints) {
- this.setOptionsRequester(options);
- } else {
- // Older servers need to reinstall breakpoints when the condition changes.
- const deferred = promise.defer();
+ return this.setOptionsRequester(options).then(() => this);
+ }
+ // Older servers need to reinstall breakpoints when the condition changes.
+ const deferred = promise.defer();
- const info = {
- line: this.location.line,
- column: this.location.column,
- options,
- };
+ const info = {
+ line: this.location.line,
+ column: this.location.column,
+ options,
+ };
- // Remove the current breakpoint and add a new one with the specified
- // information.
- this.remove(response => {
- if (response && response.error) {
- deferred.reject(response);
- return;
- }
+ // Remove the current breakpoint and add a new one with the specified
+ // information.
+ this.remove(response => {
+ if (response && response.error) {
+ deferred.reject(response);
+ return;
+ }
- deferred.resolve(this.source.setBreakpoint(info).then(([, newBreakpoint]) => {
- return newBreakpoint;
- }));
- });
- }
+ deferred.resolve(this.source.setBreakpoint(info).then(([, newBreakpoint]) => {
+ return newBreakpoint;
+ }));
+ });
+ return deferred;
},
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/client/source-client.js firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/client/source-client.js
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/client/source-client.js 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/client/source-client.js 2019-02-07 12:50:26.000000000 +0000
@@ -19,7 +19,6 @@
*/
function SourceClient(client, form) {
this._form = form;
- this._isBlackBoxed = form.isBlackBoxed;
this._activeThread = client;
this._client = client.client;
}
@@ -28,9 +27,6 @@
get _transport() {
return this._client._transport;
},
- get isBlackBoxed() {
- return this._isBlackBoxed;
- },
get actor() {
return this._form.actor;
},
@@ -51,15 +47,6 @@
},
{
telemetry: "BLACKBOX",
- after: function(response) {
- if (!response.error) {
- this._isBlackBoxed = true;
- if (this._activeThread) {
- this._activeThread.emit("blackboxchange", this);
- }
- }
- return response;
- },
},
),
@@ -73,15 +60,6 @@
},
{
telemetry: "UNBLACKBOX",
- after: function(response) {
- if (!response.error) {
- this._isBlackBoxed = false;
- if (this._activeThread) {
- this._activeThread.emit("blackboxchange", this);
- }
- }
- return response;
- },
},
),
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h
--- firefox-trunk-67.0~a1~hg20190205r457303/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/devtools/shared/heapsnapshot/HeapSnapshotTempFileHelperParent.h 2019-02-07 12:50:26.000000000 +0000
@@ -14,10 +14,12 @@
class HeapSnapshotTempFileHelperParent
: public PHeapSnapshotTempFileHelperParent {
+ friend class PHeapSnapshotTempFileHelperParent;
+
explicit HeapSnapshotTempFileHelperParent() {}
void ActorDestroy(ActorDestroyReason why) override {}
mozilla::ipc::IPCResult RecvOpenHeapSnapshotTempFile(
- OpenHeapSnapshotTempFileResponse* outResponse) override;
+ OpenHeapSnapshotTempFileResponse* outResponse);
public:
static inline PHeapSnapshotTempFileHelperParent* Create();
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/animation/KeyframeEffect.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/animation/KeyframeEffect.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/animation/KeyframeEffect.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/animation/KeyframeEffect.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -1537,7 +1537,7 @@
uint32_t equalStructs = 0;
nsChangeHint changeHint =
- fromContext->CalcStyleDifference(toContext, &equalStructs);
+ fromContext->CalcStyleDifference(*toContext, &equalStructs);
mCumulativeChangeHint |= changeHint;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ChromeUtils.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ChromeUtils.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ChromeUtils.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ChromeUtils.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -841,6 +841,14 @@
service->RegisterWindowActor(aName, aOptions, aRv);
}
+/* static */ void ChromeUtils::UnregisterWindowActor(
+ const GlobalObject& aGlobal, const nsAString& aName) {
+ MOZ_ASSERT(XRE_IsParentProcess());
+
+ RefPtr service = JSWindowActorService::GetSingleton();
+ service->UnregisterWindowActor(aName);
+}
+
/* static */ bool ChromeUtils::IsClassifierBlockingErrorCode(
GlobalObject& aGlobal, uint32_t aError) {
return net::UrlClassifierFeatureFactory::IsClassifierBlockingErrorCode(
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ChromeUtils.h firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ChromeUtils.h
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ChromeUtils.h 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ChromeUtils.h 2019-02-07 12:50:27.000000000 +0000
@@ -180,6 +180,9 @@
const WindowActorOptions& aOptions,
ErrorResult& aRv);
+ static void UnregisterWindowActor(const GlobalObject& aGlobal,
+ const nsAString& aName);
+
static bool IsClassifierBlockingErrorCode(GlobalObject& aGlobal,
uint32_t aError);
};
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Document.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Document.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Document.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Document.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -297,6 +297,7 @@
#include "mozilla/net/RequestContextService.h"
#include "StorageAccessPermissionRequest.h"
#include "mozilla/dom/WindowProxyHolder.h"
+#include "ThirdPartyUtil.h"
#define XML_DECLARATION_BITS_DECLARATION_EXISTS (1 << 0)
#define XML_DECLARATION_BITS_ENCODING_EXISTS (1 << 1)
@@ -2854,6 +2855,13 @@
RefreshLinkHrefs();
}
+ // Recalculate our base domain
+ mBaseDomain.Truncate();
+ ThirdPartyUtil* thirdPartyUtil = ThirdPartyUtil::GetInstance();
+ if (thirdPartyUtil) {
+ Unused << thirdPartyUtil->GetBaseDomain(mDocumentURI, mBaseDomain);
+ }
+
// Tell our WindowGlobalParent that the document's URI has been changed.
nsPIDOMWindowInner* inner = GetInnerWindow();
WindowGlobalChild* wgc = inner ? inner->GetWindowGlobalChild() : nullptr;
@@ -7512,6 +7520,10 @@
mLayoutHistoryState = nullptr;
+ if (mOriginalDocument) {
+ mOriginalDocument->mLatestStaticClone = nullptr;
+ }
+
// Shut down our external resource map. We might not need this for
// leak-fixing if we fix nsDocumentViewer to do cycle-collection, but
// tearing down all those frame trees right now is the right thing to do.
@@ -8884,8 +8896,10 @@
if (clonedDoc) {
if (IsStaticDocument()) {
clonedDoc->mOriginalDocument = mOriginalDocument;
+ mOriginalDocument->mLatestStaticClone = clonedDoc;
} else {
clonedDoc->mOriginalDocument = this;
+ mLatestStaticClone = clonedDoc;
}
clonedDoc->mOriginalDocument->mStaticCloneCount++;
@@ -10845,7 +10859,7 @@
// Hide the cursor and set pointer lock for future mouse events
RefPtr esm = presContext->EventStateManager();
- esm->SetCursor(aCursorStyle, nullptr, false, 0.0f, 0.0f, widget, true);
+ esm->SetCursor(aCursorStyle, nullptr, Nothing(), widget, true);
EventStateManager::SetPointerLock(widget, aElement);
return true;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Document.h firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Document.h
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Document.h 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Document.h 2019-02-07 12:50:26.000000000 +0000
@@ -437,7 +437,8 @@
public nsIScriptObjectPrincipal,
public nsIApplicationCacheContainer,
public nsStubMutationObserver,
- public DispatcherTrait {
+ public DispatcherTrait,
+ public SupportsWeakPtr {
protected:
explicit Document(const char* aContentType);
virtual ~Document();
@@ -450,6 +451,8 @@
ExternalResourceLoad;
typedef net::ReferrerPolicy ReferrerPolicyEnum;
+ MOZ_DECLARE_WEAKREFERENCE_TYPENAME(Document)
+
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IDOCUMENT_IID)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
@@ -610,6 +613,8 @@
}
nsresult CloneDocHelper(Document* clone) const;
+ Document* GetLatestStaticClone() const { return mLatestStaticClone; }
+
/**
* Signal that the document title may have changed
* (see Document::GetTitle).
@@ -644,6 +649,13 @@
nsIURI* GetOriginalURI() const { return mOriginalURI; }
/**
+ * Return the base domain of the document. This has been computed using
+ * mozIThirdPartyUtil::GetBaseDomain() and can be used for third-party
+ * checks. When the URI of the document changes, this value is recomputed.
+ */
+ nsCString GetBaseDomain() const { return mBaseDomain; }
+
+ /**
* Set the URI for the document. This also sets the document's original URI,
* if it's null.
*/
@@ -3820,6 +3832,9 @@
nsCOMPtr mDocumentBaseURI;
nsCOMPtr mChromeXHRDocBaseURI;
+ // The base domain of the document for third-party checks.
+ nsCString mBaseDomain;
+
// A lazily-constructed URL data for style system to resolve URL value.
RefPtr mCachedURLData;
@@ -4316,6 +4331,11 @@
// Count of live static clones of this document.
uint32_t mStaticCloneCount;
+ // If the document is currently printing (or in print preview) this will point
+ // to the current static clone of this document. This is weak since the clone
+ // also has a reference to this document.
+ WeakPtr mLatestStaticClone;
+
// Array of nodes that have been blocked to prevent user tracking.
// They most likely have had their nsIChannel canceled by the URL
// classifier. (Safebrowsing)
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/MaybeCrossOriginObject.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/MaybeCrossOriginObject.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/MaybeCrossOriginObject.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/MaybeCrossOriginObject.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -41,7 +41,8 @@
BasePrincipal* subjectPrincipal =
BasePrincipal::Cast(nsContentUtils::SubjectPrincipal(cx));
- nsIPrincipal* objectPrincipal = nsContentUtils::ObjectPrincipal(obj);
+ BasePrincipal* objectPrincipal =
+ BasePrincipal::Cast(nsContentUtils::ObjectPrincipal(obj));
// The spec effectively has an EqualsConsideringDomain check here,
// because the spec has no concept of asymmetric security
@@ -53,11 +54,25 @@
// SubsumesConsideringDomain give the same results and use
// EqualsConsideringDomain for the check we actually do, since it's
// stricter and more closely matches the spec.
+ //
+ // That said, if the (not very well named)
+ // OriginAttributes::IsRestrictOpenerAccessForFPI() method returns
+ // false, we want to use FastSubsumesConsideringDomainIgnoringFPD
+ // instead of FastEqualsConsideringDomain, because in that case we
+ // still want to treat things which are in different first-party
+ // contexts as same-origin.
MOZ_ASSERT(
subjectPrincipal->FastEqualsConsideringDomain(objectPrincipal) ==
subjectPrincipal->FastSubsumesConsideringDomain(objectPrincipal),
"Why are we in an asymmetric case here?");
- return subjectPrincipal->FastEqualsConsideringDomain(objectPrincipal);
+ if (OriginAttributes::IsRestrictOpenerAccessForFPI()) {
+ return subjectPrincipal->FastEqualsConsideringDomain(objectPrincipal);
+ }
+
+ return subjectPrincipal->FastSubsumesConsideringDomainIgnoringFPD(
+ objectPrincipal) &&
+ objectPrincipal->FastSubsumesConsideringDomainIgnoringFPD(
+ subjectPrincipal);
}
bool MaybeCrossOriginObjectMixins::CrossOriginGetOwnPropertyHelper(
@@ -422,12 +437,36 @@
template
JSObject* MaybeCrossOriginObject ::enumerate(
JSContext* cx, JS::Handle proxy) const {
- // We want to avoid any possible magic here and just do the BaseProxyHandler
- // thing of using our property keys to enumerate.
+ // We need to be a little careful here. We want to get our list of property
+ // keys in whatever Realm we're in right now (which might be different from
+ // the Realm of "proxy"), and invoke our ownPropertyKeys which will return the
+ // right list. In particular we do NOT want to invoke
+ // ForwardingProxyHandler::enumerate here, because that will get the keys from
+ // our target, which may produce the wrong list.
+ //
+ // Once we have the list, we want to create the iterator object targeting the
+ // representation of "proxy" in our current Realm, since that's what the
+ // caller is working with.
+ //
+ // We could handle parts of this this by overriding enumerate() in
+ // CrossOriginObjectWrapper, but we'd still need special-case code here, so
+ // let's just do all the work here.
//
- // Note that we do not need to enter the Realm of "proxy" here, nor do we want
- // to: if this is a cross-origin access we want to handle it appropriately.
- return js::BaseProxyHandler::enumerate(cx, proxy);
+ // BaseProxyHandler::enumerate would do the right thing if we passed the right
+ // object to it, but it would assert that we've entered the policy of the
+ // proxy we passed it, which may be a CCW, not us, and the policy we actually
+ // entered is ours. So we basically reimplemnt it, but without that assert.
+ JS::Rooted self(cx, proxy);
+ if (!MaybeWrapObject(cx, &self)) {
+ return nullptr;
+ }
+
+ js::AutoIdVector props(cx);
+ if (!js::GetPropertyKeys(cx, self, 0, &props)) {
+ return nullptr;
+ }
+
+ return js::EnumeratedIdVectorToIterator(cx, self, props);
}
// Force instantiations of the out-of-line template methods we need.
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Navigator.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Navigator.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/Navigator.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/Navigator.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -1688,10 +1688,7 @@
// specific OS version, etc.
if (!aIsCallerChrome && nsContentUtils::ShouldResistFingerprinting()) {
nsAutoCString spoofedUA;
- nsresult rv = nsRFPService::GetSpoofedUserAgent(spoofedUA, false);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
+ nsRFPService::GetSpoofedUserAgent(spoofedUA, false);
CopyASCIItoUTF16(spoofedUA, aUserAgent);
return NS_OK;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentPermissionHelper.h firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentPermissionHelper.h
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentPermissionHelper.h 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentPermissionHelper.h 2019-02-07 12:50:26.000000000 +0000
@@ -221,11 +221,10 @@
nsPIDOMWindowInner* aWindow);
// It will be called when prompt dismissed.
- virtual mozilla::ipc::IPCResult RecvNotifyResult(
- const bool& aAllow,
- InfallibleTArray&& aChoices) override;
+ mozilla::ipc::IPCResult RecvNotifyResult(
+ const bool& aAllow, InfallibleTArray&& aChoices);
- virtual mozilla::ipc::IPCResult RecvGetVisibility() override;
+ mozilla::ipc::IPCResult RecvGetVisibility();
void IPDLAddRef() {
mIPCOpen = true;
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentUtils.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentUtils.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentUtils.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentUtils.cpp 2019-02-07 12:50:26.000000000 +0000
@@ -224,7 +224,7 @@
#include "nsContentTypeParser.h"
#include "nsICookiePermission.h"
#include "nsICookieService.h"
-#include "mozIThirdPartyUtil.h"
+#include "ThirdPartyUtil.h"
#include "mozilla/EnumSet.h"
#include "mozilla/BloomFilter.h"
#include "TabChild.h"
@@ -2097,6 +2097,12 @@
}
/* static */
+bool nsContentUtils::UseStandinsForNativeColors() {
+ return ShouldResistFingerprinting() ||
+ StaticPrefs::ui_use_standins_for_native_colors();
+}
+
+/* static */
void nsContentUtils::CalcRoundedWindowSizeForResistingFingerprinting(
int32_t aChromeWidth, int32_t aChromeHeight, int32_t aScreenWidth,
int32_t aScreenHeight, int32_t aInputWidth, int32_t aInputHeight,
@@ -8204,7 +8210,7 @@
MOZ_ASSERT(!aWindow || !aChannel,
"A window and channel should not both be provided.");
- nsCOMPtr thirdPartyUtil = services::GetThirdPartyUtil();
+ ThirdPartyUtil* thirdPartyUtil = ThirdPartyUtil::GetInstance();
if (!thirdPartyUtil) {
return false;
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentUtils.h firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentUtils.h
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsContentUtils.h 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsContentUtils.h 2019-02-07 12:50:27.000000000 +0000
@@ -308,6 +308,9 @@
static bool ShouldResistFingerprinting(nsIDocShell* aDocShell);
static bool ShouldResistFingerprinting(Document* aDoc);
+ // Prevent system colors from being exposed to CSS or canvas.
+ static bool UseStandinsForNativeColors();
+
// A helper function to calculate the rounded window size for fingerprinting
// resistance. The rounded size is based on the chrome UI size and available
// screen size. If the inputWidth/Height is greater than the available content
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsGlobalWindowOuter.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsGlobalWindowOuter.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/nsGlobalWindowOuter.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/nsGlobalWindowOuter.cpp 2019-02-07 12:50:27.000000000 +0000
@@ -2082,10 +2082,13 @@
JS::Rooted obj(cx, GetWrapperPreserveColor());
+ MOZ_ASSERT(js::IsWindowProxy(obj));
+
js::SetProxyReservedSlot(obj, OUTER_WINDOW_SLOT,
js::PrivateValue(nullptr));
js::SetProxyReservedSlot(outerObject, OUTER_WINDOW_SLOT,
js::PrivateValue(nullptr));
+ js::SetProxyReservedSlot(obj, HOLDER_WEAKMAP_SLOT, JS::UndefinedValue());
outerObject = xpc::TransplantObject(cx, obj, outerObject);
if (!outerObject) {
@@ -7496,7 +7499,7 @@
// Call esm and set cursor.
aError = presContext->EventStateManager()->SetCursor(
- cursor, nullptr, false, 0.0f, 0.0f, widget, true);
+ cursor, nullptr, Nothing(), widget, true);
}
}
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/test/test_window_define_nonconfigurable.html firefox-trunk-67.0~a1~hg20190207r457544/dom/base/test/test_window_define_nonconfigurable.html
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/test/test_window_define_nonconfigurable.html 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/test/test_window_define_nonconfigurable.html 2019-02-07 12:50:27.000000000 +0000
@@ -21,11 +21,11 @@
var retval = Object.defineProperty(window, "nosuchprop",
{ value: 5, configurable: false });
if (AppConstants.RELEASE_OR_BETA) {
- todo_is(retval, false,
- "Should return false when 'failing' to define non-configurable property via Object.defineProperty.")
+ todo_is(retval, null,
+ "Should return null when 'failing' to define non-configurable property via Object.defineProperty.")
} else {
- is(retval, false,
- "Should return false when 'failing' to define non-configurable property via Object.defineProperty.")
+ is(retval, null,
+ "Should return null when 'failing' to define non-configurable property via Object.defineProperty.")
}
var desc = Object.getOwnPropertyDescriptor(window, "nosuchprop");
is(typeof(desc), "object", "Should have a property 'nosuchprop' now");
@@ -39,6 +39,33 @@
is(desc.writable, false, "Property 'nosuchprop' should be readonly");
is(desc.value, 5, "Property 'nosuchprop' should have the right value");
+ retval = Object.defineProperties(window, {
+ "firstProp": { value: 1 },
+ "secondProp": { value: 2, configurable: false },
+ "thirdProp": { value: 3 },
+ });
+ if (AppConstants.RELEASE_OR_BETA) {
+ todo_is(retval, null,
+ "Should return null when 'failing' to define non-configurable property via Object.defineProperties.")
+ } else {
+ is(retval, null,
+ "Should return null when 'failing' to define non-configurable property via Object.defineProperties.")
+ }
+ // The properties should all be defined.
+ for (var [prop, val] of [["firstProp", 1], ["secondProp", 2], ["thirdProp", 3]]) {
+ desc = Object.getOwnPropertyDescriptor(window, prop);
+ is(typeof(desc), "object", `Should have a property '${prop}' now`);
+ if (AppConstants.RELEASE_OR_BETA) {
+ todo_is(desc.configurable, true,
+ `Property '${prop}' should be configurable`);
+ } else {
+ is(desc.configurable, true,
+ `Property '${prop}' should be configurable`);
+ }
+ is(desc.writable, false, `Property '${prop}' should be readonly`);
+ is(desc.value, val, `Property '${prop}' should have the right value`);
+ }
+
retval = Object.defineProperty(window, "nosuchprop2", { value: 6 });
is(retval, window,
"Should return object when succesfully defining 'nosuchprop2'");
diff -Nru firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ThirdPartyUtil.cpp firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ThirdPartyUtil.cpp
--- firefox-trunk-67.0~a1~hg20190205r457303/dom/base/ThirdPartyUtil.cpp 2019-02-06 08:02:36.000000000 +0000
+++ firefox-trunk-67.0~a1~hg20190207r457544/dom/base/ThirdPartyUtil.cpp 2019-02-07 12:50:26.000000000 +0000
@@ -16,7 +16,9 @@
#include "nsIScriptObjectPrincipal.h"
#include "nsIURI.h"
#include "nsThreadUtils.h"
+#include "mozilla/ClearOnShutdown.h"
#include "mozilla/Logging.h"
+#include "mozilla/StaticPtr.h"
#include "mozilla/Unused.h"
#include "nsPIDOMWindow.h"
@@ -29,13 +31,35 @@
#undef LOG
#define LOG(args) MOZ_LOG(gThirdPartyLog, mozilla::LogLevel::Debug, args)
+static mozilla::StaticRefPtr gService;
+
nsresult ThirdPartyUtil::Init() {
NS_ENSURE_TRUE(NS_IsMainThread(), NS_ERROR_NOT_AVAILABLE);
- nsresult rv;
- mTLDService = do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID, &rv);
+ MOZ_ASSERT(!gService);
+ gService = this;
+ mozilla::ClearOnShutdown(&gService);
- return rv;
+ mTLDService = nsEffectiveTLDService::GetInstance();
+ return mTLDService ? NS_OK : NS_ERROR_FAILURE;
+}
+
+ThirdPartyUtil::~ThirdPartyUtil() { gService = nullptr; }
+
+// static
+ThirdPartyUtil* ThirdPartyUtil::GetInstance() {
+ if (gService) {
+ return gService;
+ }
+ nsCOMPtr tpuService =
+ mozilla::services::GetThirdPartyUtil();
+ if (!tpuService) {
+ return nullptr;
+ }
+ MOZ_ASSERT(
+ gService,
+ "gService must have been initialized in nsEffectiveTLDService::Init");
+ return gService;
}
// Determine if aFirstDomain is a different base domain to aSecondURI; or, if
@@ -49,14 +73,13 @@
}
// Get the base domain for aSecondURI.
- nsCString secondDomain;
+ nsAutoCString secondDomain;
nsresult rv = GetBaseDomain(aSecondURI, secondDomain);
LOG(("ThirdPartyUtil::IsThirdPartyInternal %s =? %s", aFirstDomain.get(),
secondDomain.get()));
if (NS_FAILED(rv)) return rv;
- // Check strict equality.
- *aResult = aFirstDomain != secondDomain;
+ *aResult = IsThirdPartyInternal(aFirstDomain, secondDomain);
return NS_OK;
}
@@ -92,7 +115,7 @@
NS_ENSURE_ARG(aSecondURI);
NS_ASSERTION(aResult, "null outparam pointer");
- nsCString firstHost;
+ nsAutoCString firstHost;
nsresult rv = GetBaseDomain(aFirstURI, firstHost);
if (NS_FAILED(rv)) return rv;
@@ -109,19 +132,15 @@
bool result;
- // Get the URI of the window, and its base domain.
- nsresult rv;
- nsCOMPtr currentURI;
- rv = GetURIFromWindow(aWindow, getter_AddRefs(currentURI));
- if (NS_FAILED(rv)) return rv;
-
- nsCString bottomDomain;
- rv = GetBaseDomain(currentURI, bottomDomain);
- if (NS_FAILED(rv)) return rv;
+ nsCString bottomDomain =
+ GetBaseDomainFromWindow(nsPIDOMWindowOuter::From(aWindow));
+ if (bottomDomain.IsEmpty()) {
+ return NS_ERROR_FAILURE;
+ }
if (aURI) {
// Determine whether aURI is foreign with respect to currentURI.
- rv = IsThirdPartyInternal(bottomDomain, aURI, &result);
+ nsresult rv = IsThirdPartyInternal(bottomDomain, aURI, &result);
if (NS_FAILED(rv)) return rv;
if (result) {
@@ -130,24 +149,28 @@
}
}
- nsCOMPtr current = nsPIDOMWindowOuter::From(aWindow),
- parent;
- nsCOMPtr parentURI;
+ nsPIDOMWindowOuter* current = nsPIDOMWindowOuter::From(aWindow);
do {
// We use GetScriptableParent rather than GetParent because we consider
//