From 312e071a67f0d35d7f7e926142a70ea0e5647e1e Mon Sep 17 00:00:00 2001 From: psaunderualberta Date: Fri, 16 Jun 2023 21:24:08 -0600 Subject: [PATCH] Removed main.js from tracking --- .gitignore | 1 + main.js | 16806 --------------------------------------------------- 2 files changed, 1 insertion(+), 16806 deletions(-) delete mode 100644 main.js diff --git a/.gitignore b/.gitignore index 7e4fe3f8..09319046 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ yarn-error.log !.yarn/versions # build +main.js build # testing diff --git a/main.js b/main.js deleted file mode 100644 index d49aa93f..00000000 --- a/main.js +++ /dev/null @@ -1,16806 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to2, from2, except, desc) => { - if (from2 && typeof from2 === "object" || typeof from2 === "function") { - for (let key of __getOwnPropNames(from2)) - if (!__hasOwnProp.call(to2, key) && key !== except) - __defProp(to2, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable }); - } - return to2; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; - -// node_modules/pagerank.js/lib/index.js -var require_lib = __commonJS({ - "node_modules/pagerank.js/lib/index.js"(exports, module2) { - "use strict"; - function forOwn(object, callback2) { - if (typeof object === "object" && typeof callback2 === "function") { - for (var key in object) { - if (object.hasOwnProperty(key) === true) { - if (callback2(key, object[key]) === false) { - break; - } - } - } - } - } - module2.exports = function() { - var self = { - count: 0, - edges: {}, - nodes: {} - }; - self.link = function(source, target, weight) { - if (isFinite(weight) !== true || weight === null) { - weight = 1; - } - weight = parseFloat(weight); - if (self.nodes.hasOwnProperty(source) !== true) { - self.count++; - self.nodes[source] = { - weight: 0, - outbound: 0 - }; - } - self.nodes[source].outbound += weight; - if (self.nodes.hasOwnProperty(target) !== true) { - self.count++; - self.nodes[target] = { - weight: 0, - outbound: 0 - }; - } - if (self.edges.hasOwnProperty(source) !== true) { - self.edges[source] = {}; - } - if (self.edges[source].hasOwnProperty(target) !== true) { - self.edges[source][target] = 0; - } - self.edges[source][target] += weight; - }; - self.rank = function(alpha2, epsilon, callback2) { - var delta = 1, inverse = 1 / self.count; - forOwn(self.edges, function(source) { - if (self.nodes[source].outbound > 0) { - forOwn(self.edges[source], function(target) { - self.edges[source][target] /= self.nodes[source].outbound; - }); - } - }); - forOwn(self.nodes, function(key) { - self.nodes[key].weight = inverse; - }); - while (delta > epsilon) { - var leak = 0, nodes = {}; - forOwn(self.nodes, function(key, value) { - nodes[key] = value.weight; - if (value.outbound === 0) { - leak += value.weight; - } - self.nodes[key].weight = 0; - }); - leak *= alpha2; - forOwn(self.nodes, function(source) { - forOwn(self.edges[source], function(target, weight) { - self.nodes[target].weight += alpha2 * nodes[source] * weight; - }); - self.nodes[source].weight += (1 - alpha2) * inverse + leak * inverse; - }); - delta = 0; - forOwn(self.nodes, function(key, value) { - delta += Math.abs(value.weight - nodes[key]); - }); - } - forOwn(self.nodes, function(key) { - return callback2(key, self.nodes[key].weight); - }); - }; - self.reset = function() { - self.count = 0; - self.edges = {}; - self.nodes = {}; - }; - return self; - }(); - } -}); - -// node_modules/vhtml/dist/vhtml.js -var require_vhtml = __commonJS({ - "node_modules/vhtml/dist/vhtml.js"(exports, module2) { - (function(global, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.vhtml = factory(); - })(exports, function() { - "use strict"; - var emptyTags = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]; - var esc = function esc2(str) { - return String(str).replace(/[&<>"']/g, function(s) { - return "&" + map3[s] + ";"; - }); - }; - var map3 = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" }; - var setInnerHTMLAttr = "dangerouslySetInnerHTML"; - var DOMAttributeNames = { - className: "class", - htmlFor: "for" - }; - var sanitized = {}; - function h4(name, attrs) { - var stack = [], s = ""; - attrs = attrs || {}; - for (var i = arguments.length; i-- > 2; ) { - stack.push(arguments[i]); - } - if (typeof name === "function") { - attrs.children = stack.reverse(); - return name(attrs); - } - if (name) { - s += "<" + name; - if (attrs) - for (var _i in attrs) { - if (attrs[_i] !== false && attrs[_i] != null && _i !== setInnerHTMLAttr) { - s += " " + (DOMAttributeNames[_i] ? DOMAttributeNames[_i] : esc(_i)) + '="' + esc(attrs[_i]) + '"'; - } - } - s += ">"; - } - if (emptyTags.indexOf(name) === -1) { - if (attrs[setInnerHTMLAttr]) { - s += attrs[setInnerHTMLAttr].__html; - } else - while (stack.length) { - var child = stack.pop(); - if (child) { - if (child.pop) { - for (var _i2 = child.length; _i2--; ) { - stack.push(child[_i2]); - } - } else { - s += sanitized[child] === true ? child : esc(child); - } - } - } - s += name ? "" : ""; - } - sanitized[s] = true; - return s; - } - return h4; - }); - } -}); - -// node_modules/heap/lib/heap.js -var require_heap = __commonJS({ - "node_modules/heap/lib/heap.js"(exports, module2) { - (function() { - var Heap2, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup; - floor = Math.floor, min = Math.min; - defaultCmp = function(x, y) { - if (x < y) { - return -1; - } - if (x > y) { - return 1; - } - return 0; - }; - insort = function(a, x, lo, hi, cmp) { - var mid; - if (lo == null) { - lo = 0; - } - if (cmp == null) { - cmp = defaultCmp; - } - if (lo < 0) { - throw new Error("lo must be non-negative"); - } - if (hi == null) { - hi = a.length; - } - while (lo < hi) { - mid = floor((lo + hi) / 2); - if (cmp(x, a[mid]) < 0) { - hi = mid; - } else { - lo = mid + 1; - } - } - return [].splice.apply(a, [lo, lo - lo].concat(x)), x; - }; - heappush = function(array, item, cmp) { - if (cmp == null) { - cmp = defaultCmp; - } - array.push(item); - return _siftdown(array, 0, array.length - 1, cmp); - }; - heappop = function(array, cmp) { - var lastelt, returnitem; - if (cmp == null) { - cmp = defaultCmp; - } - lastelt = array.pop(); - if (array.length) { - returnitem = array[0]; - array[0] = lastelt; - _siftup(array, 0, cmp); - } else { - returnitem = lastelt; - } - return returnitem; - }; - heapreplace = function(array, item, cmp) { - var returnitem; - if (cmp == null) { - cmp = defaultCmp; - } - returnitem = array[0]; - array[0] = item; - _siftup(array, 0, cmp); - return returnitem; - }; - heappushpop = function(array, item, cmp) { - var _ref; - if (cmp == null) { - cmp = defaultCmp; - } - if (array.length && cmp(array[0], item) < 0) { - _ref = [array[0], item], item = _ref[0], array[0] = _ref[1]; - _siftup(array, 0, cmp); - } - return item; - }; - heapify = function(array, cmp) { - var i, _i, _j, _len, _ref, _ref1, _results, _results1; - if (cmp == null) { - cmp = defaultCmp; - } - _ref1 = function() { - _results1 = []; - for (var _j2 = 0, _ref2 = floor(array.length / 2); 0 <= _ref2 ? _j2 < _ref2 : _j2 > _ref2; 0 <= _ref2 ? _j2++ : _j2--) { - _results1.push(_j2); - } - return _results1; - }.apply(this).reverse(); - _results = []; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - i = _ref1[_i]; - _results.push(_siftup(array, i, cmp)); - } - return _results; - }; - updateItem = function(array, item, cmp) { - var pos; - if (cmp == null) { - cmp = defaultCmp; - } - pos = array.indexOf(item); - if (pos === -1) { - return; - } - _siftdown(array, 0, pos, cmp); - return _siftup(array, pos, cmp); - }; - nlargest = function(array, n, cmp) { - var elem, result, _i, _len, _ref; - if (cmp == null) { - cmp = defaultCmp; - } - result = array.slice(0, n); - if (!result.length) { - return result; - } - heapify(result, cmp); - _ref = array.slice(n); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elem = _ref[_i]; - heappushpop(result, elem, cmp); - } - return result.sort(cmp).reverse(); - }; - nsmallest = function(array, n, cmp) { - var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results; - if (cmp == null) { - cmp = defaultCmp; - } - if (n * 10 <= array.length) { - result = array.slice(0, n).sort(cmp); - if (!result.length) { - return result; - } - los = result[result.length - 1]; - _ref = array.slice(n); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elem = _ref[_i]; - if (cmp(elem, los) < 0) { - insort(result, elem, 0, null, cmp); - result.pop(); - los = result[result.length - 1]; - } - } - return result; - } - heapify(array, cmp); - _results = []; - for (i = _j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) { - _results.push(heappop(array, cmp)); - } - return _results; - }; - _siftdown = function(array, startpos, pos, cmp) { - var newitem, parent, parentpos; - if (cmp == null) { - cmp = defaultCmp; - } - newitem = array[pos]; - while (pos > startpos) { - parentpos = pos - 1 >> 1; - parent = array[parentpos]; - if (cmp(newitem, parent) < 0) { - array[pos] = parent; - pos = parentpos; - continue; - } - break; - } - return array[pos] = newitem; - }; - _siftup = function(array, pos, cmp) { - var childpos, endpos, newitem, rightpos, startpos; - if (cmp == null) { - cmp = defaultCmp; - } - endpos = array.length; - startpos = pos; - newitem = array[pos]; - childpos = 2 * pos + 1; - while (childpos < endpos) { - rightpos = childpos + 1; - if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) { - childpos = rightpos; - } - array[pos] = array[childpos]; - pos = childpos; - childpos = 2 * pos + 1; - } - array[pos] = newitem; - return _siftdown(array, startpos, pos, cmp); - }; - Heap2 = function() { - Heap3.push = heappush; - Heap3.pop = heappop; - Heap3.replace = heapreplace; - Heap3.pushpop = heappushpop; - Heap3.heapify = heapify; - Heap3.updateItem = updateItem; - Heap3.nlargest = nlargest; - Heap3.nsmallest = nsmallest; - function Heap3(cmp) { - this.cmp = cmp != null ? cmp : defaultCmp; - this.nodes = []; - } - Heap3.prototype.push = function(x) { - return heappush(this.nodes, x, this.cmp); - }; - Heap3.prototype.pop = function() { - return heappop(this.nodes, this.cmp); - }; - Heap3.prototype.peek = function() { - return this.nodes[0]; - }; - Heap3.prototype.contains = function(x) { - return this.nodes.indexOf(x) !== -1; - }; - Heap3.prototype.replace = function(x) { - return heapreplace(this.nodes, x, this.cmp); - }; - Heap3.prototype.pushpop = function(x) { - return heappushpop(this.nodes, x, this.cmp); - }; - Heap3.prototype.heapify = function() { - return heapify(this.nodes, this.cmp); - }; - Heap3.prototype.updateItem = function(x) { - return updateItem(this.nodes, x, this.cmp); - }; - Heap3.prototype.clear = function() { - return this.nodes = []; - }; - Heap3.prototype.empty = function() { - return this.nodes.length === 0; - }; - Heap3.prototype.size = function() { - return this.nodes.length; - }; - Heap3.prototype.clone = function() { - var heap; - heap = new Heap3(); - heap.nodes = this.nodes.slice(0); - return heap; - }; - Heap3.prototype.toArray = function() { - return this.nodes.slice(0); - }; - Heap3.prototype.insert = Heap3.prototype.push; - Heap3.prototype.top = Heap3.prototype.peek; - Heap3.prototype.front = Heap3.prototype.peek; - Heap3.prototype.has = Heap3.prototype.contains; - Heap3.prototype.copy = Heap3.prototype.clone; - return Heap3; - }(); - (function(root, factory) { - if (typeof define === "function" && define.amd) { - return define([], factory); - } else if (typeof exports === "object") { - return module2.exports = factory(); - } else { - return root.Heap = factory(); - } - })(this, function() { - return Heap2; - }); - }).call(exports); - } -}); - -// node_modules/heap/index.js -var require_heap2 = __commonJS({ - "node_modules/heap/index.js"(exports, module2) { - module2.exports = require_heap(); - } -}); - -// src/main.ts -var main_exports = {}; -__export(main_exports, { - default: () => SRPlugin -}); -module.exports = __toCommonJS(main_exports); -var import_obsidian8 = require("obsidian"); -var graph = __toESM(require_lib()); - -// src/settings.ts -var import_obsidian2 = require("obsidian"); - -// src/lang/helpers.ts -var import_obsidian = require("obsidian"); - -// src/lang/locale/af.ts -var af_default = {}; - -// src/lang/locale/ar.ts -var ar_default = { - // flashcard-modal.tsx - DECKS: "\u0627\u0644\u0631\u064F\u0632\u0645\u064E\u0627\u062A", - DUE_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u064F\u0633\u062A\u062D\u0642\u0629", - NEW_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u062C\u062F\u064A\u062F\u0629", - TOTAL_CARDS: "\u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - BACK: "\u0631\u062C\u0648\u0639", - SKIP: "Skip", - EDIT_CARD: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", - RESET_CARD_PROGRESS: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645\u0652 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", - HARD: "\u0635\u0639\u0628", - GOOD: "\u062C\u064A\u062F", - EASY: "\u0633\u0647\u0644", - SHOW_ANSWER: "\u0623\u0638\u0647\u0650\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0629", - CARD_PROGRESS_RESET: ".\u062A\u0645\u0651\u064E\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", - SAVE: "\u062D\u0641\u0638", - CANCEL: "\u0625\u0644\u063A\u0627\u0621", - NO_INPUT: ".\u0644\u0645 \u064A\u062A\u0650\u0645 \u062A\u0642\u062F\u064A\u0645 \u0623\u064A \u0645\u064F\u062F\u062E\u0644\u0627\u062A", - CURRENT_EASE_HELP_TEXT: ":\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629", - CURRENT_INTERVAL_HELP_TEXT: ":\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0627\u0644\u062D\u0627\u0644\u064A", - CARD_GENERATED_FROM: "${notePath} :\u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", - REVIEW_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - REVIEW_EASY_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0633\u0647\u0644", - REVIEW_GOOD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u062C\u064A\u062F", - REVIEW_HARD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0635\u0639\u0628", - REVIEW_NOTE_EASY_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0633\u0647\u0644\u0629", - REVIEW_NOTE_GOOD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u062C\u064A\u062F\u0629", - REVIEW_NOTE_HARD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0635\u0639\u0628\u0629", - CRAM_ALL_CARDS: "\u062D\u062F\u062F \u0631\u064F\u0632\u0645\u064E\u0629 \u0644\u0644\u062D\u0634\u0631", - REVIEW_ALL_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A", - REVIEW_CARDS_IN_NOTE: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", - CRAM_CARDS_IN_NOTE: "\u0623\u062D\u0634\u0631 \u062C\u0645\u064A\u0639 \u0628\u0637\u0627\u0642\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", - VIEW_STATS: "\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", - STATUS_BAR: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 ${dueFlashcardsCount},\u0645\u0644\u0627\u062D\u0638\u0627\u062A ${dueNotesCount}:\u0645\u0631\u0627\u062C\u0639\u0629", - SYNC_TIME_TAKEN: "${t}ms \u0627\u0633\u062A\u063A\u0631\u0627\u0642 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629", - NOTE_IN_IGNORED_FOLDER: ".\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u0636\u0645\u0646 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0630\u064A \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647 (\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", - PLEASE_TAG_NOTE: ".\u064A\u0631\u062C\u0649 \u0648\u0636\u0639 \u0648\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0634\u0643\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629 (\u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", - RESPONSE_RECEIVED: ".\u0627\u0633\u062A\u064F\u0644\u0645\u062A \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629", - NO_DECK_EXISTS: "${deckName} \u0644\u0627 \u064A\u0648\u062C\u062F \u0631\u064F\u0632\u0645\u064E\u0629", - ALL_CAUGHT_UP: "\u{1F606} \u0644\u0642\u062F \u062A\u0645 \u0627\u0644\u0642\u0628\u0636 \u0639\u0644\u064A\u0643\u0645 \u062C\u0645\u064A\u0639\u0627 \u0627\u0644\u0622\u0646", - // scheduling.ts - DAYS_STR_IVL: "\u064A\u0648\u0645/\u0623\u064A\u0627\u0645 ${interval}", - MONTHS_STR_IVL: "\u0634\u0647\u0631/\u0623\u0634\u0647\u0631 ${interval}", - YEARS_STR_IVL: "\u0633\u0646\u0629/\u0633\u0646\u0648\u0627\u062A ${interval}", - DAYS_STR_IVL_MOBILE: "\u064A${interval}", - MONTHS_STR_IVL_MOBILE: "\u0634${interval}", - YEARS_STR_IVL_MOBILE: "\u0633${interval}", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - Settings", - CHECK_WIKI: '.wiki \u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u060C \u062A\u062D\u0642\u0642 \u0645\u0646', - FOLDERS_TO_IGNORE: "\u0645\u062C\u0644\u062F\u0627\u062A \u0644\u062A\u062C\u0627\u0647\u0644\u0647\u0627", - FOLDERS_TO_IGNORE_DESC: "Templates Meta/Scripts : \u0623\u062F\u062E\u0644 \u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0644\u062F \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0648\u0627\u0633\u0637\u0629 \u0633\u0637\u0648\u0631 \u062C\u062F\u064A\u062F\u0629,\u0645\u062B\u0627\u0644", - FLASHCARDS: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - FLASHCARD_EASY_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0633\u0647\u0644", - FLASHCARD_GOOD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u062C\u064A\u062F", - FLASHCARD_HARD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0635\u0639\u0628", - FLASHCARD_EASY_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0633\u0647\u0644', - FLASHCARD_GOOD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u062C\u064A\u062F', - FLASHCARD_HARD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0635\u0639\u0628', - FLASHCARD_TAGS: "\u0648\u064F\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - FLASHCARD_TAGS_DESC: "#2\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u064F\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u0623\u0633\u0637\u0631 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A# \u0631\u0632\u0645\u06293# \u0631\u0632\u0645\u0629", - CONVERT_FOLDERS_TO_DECKS: "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u0623\u0635\u0644\u064A\u0629 \u0648 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629\u061F", - CONVERT_FOLDERS_TO_DECKS_DESC: ".\u0647\u0630\u0627 \u0647\u0648 \u0628\u062F\u064A\u0644 \u0644\u062E\u064A\u0627\u0631 \u0648\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0623\u0639\u0644\u0627\u0647", - INLINE_SCHEDULING_COMMENTS: "\u062D\u0641\u0638 \u062A\u0639\u0644\u064A\u0642 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0633\u0637\u0631 \u0645\u062B\u0644 \u0627\u0644\u0633\u0637\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0644\u0644\u0628\u0637\u0627\u0642\u0629 \u061F", - INLINE_SCHEDULING_COMMENTS_DESC: "\u0644\u0627 \u062A\u0643\u0633\u0631 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 HTML \u0633\u064A\u0624\u062F\u064A \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0625\u0644\u0649 \u062C\u0639\u0644 \u062A\u0639\u0644\u064A\u0642\u0627\u062A", - BURY_SIBLINGS_TILL_NEXT_DAY: "\u0623\u062E\u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u062D\u062A\u0649 \u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u062A\u0627\u0644\u064A", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "cloze deletions : \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u0647\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646 \u0646\u0641\u0633 \u0646\u0635 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0643\u0640", - SHOW_CARD_CONTEXT: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u064A\u0627\u0642 \u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A\u061F", - SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", - CARD_MODAL_HEIGHT_PERCENT: "\u0646\u0633\u0628\u0629 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", - CARD_MODAL_SIZE_PERCENT_DESC: "\u064A\u062C\u0628 \u0636\u0628\u0637\u0647\u0627 \u0639\u0644\u0649 100 \u066A \u0639\u0644\u0649 \u0627\u0644\u0647\u0627\u062A\u0641 \u0627\u0644\u0645\u062D\u0645\u0648\u0644 \u0623\u0648 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0635\u0648\u0631 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u064B\u0627", - RESET_DEFAULT: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A", - CARD_MODAL_WIDTH_PERCENT: "\u0646\u0633\u0628\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", - RANDOMIZE_CARD_ORDER: "\u062A\u0631\u062A\u064A\u0628 \u0628\u0637\u0627\u0642\u0629 \u0639\u0634\u0648\u0627\u0626\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629\u061F", - DISABLE_CLOZE_CARDS: "\u061Fcloze \u062A\u0639\u0637\u064A\u0644 \u0628\u0637\u0627\u0642\u0627\u062A", - CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", - CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", - INLINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0636\u0645\u0646\u0629", - FIX_SEPARATORS_MANUALLY_WARNING: "\u0636\u0639 \u0641\u064A \u062D\u0633\u0627\u0628\u0643 \u0623\u0646\u0647 \u0628\u0639\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062A\u0639\u062F\u064A\u0644 \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u064A\u062F\u0648\u064A\u064B\u0627", - INLINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u0636\u0645\u0646\u0629", - MULTILINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", - NOTES: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A", - REVIEW_PANE_ON_STARTUP: "\u062A\u0645\u0643\u064A\u0646 \u062C\u0632\u0621 \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0639\u0646\u062F \u0628\u062F\u0621 \u0627\u0644\u062A\u0634\u063A\u064A\u0644", - TAGS_TO_REVIEW: "\u0648\u0633\u0648\u0645 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", - TAGS_TO_REVIEW_DESC: "#\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u062E\u0637\u0648\u0637 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A : \u0645\u0631\u0627\u062C\u0639\u0629# \u0648\u0633\u06452# \u0648\u0633\u06453", - OPEN_RANDOM_NOTE: "\u0627\u0641\u062A\u062D \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", - OPEN_RANDOM_NOTE_DESC: "(Pagerank) \u0639\u0646\u062F \u062A\u0639\u0637\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u060C\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0633\u064A\u062A\u0645 \u062A\u0631\u062A\u064A\u0628\u064F\u0647\u0627 \u062D\u0633\u0628 \u0627\u0644\u0623\u0647\u0645\u064A\u0629", - AUTO_NEXT_NOTE: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0628\u0639\u062F \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u062A\u0639\u0637\u064A\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u060C \u0623\u064A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629:\u0627\u0644\u0633\u0647\u0644 \u0627\u0644\u0635\u0639\u0628 \u0627\u0644\u062C\u064A\u062F", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 Obsidian \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 , command hotkeys. \u0628\u0639\u062F \u0627\u0644\u062A\u0639\u0637\u064A\u0644 \u060C \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645", - MAX_N_DAYS_REVIEW_QUEUE: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u0631\u0636\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u064A\u0645\u0646\u0649", - MIN_ONE_DAY: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 1 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644", - VALID_NUMBER_WARNING: "\u064A\u0631\u062C\u0649 \u062A\u0642\u062F\u064A\u0645 \u0631\u0642\u0645 \u0635\u0627\u0644\u062D", - UI_PREFERENCES: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u064A \u0644\u0644\u0631\u064F\u0632\u0645 \u0645\u0648\u0633\u0639 \u0628\u062D\u064A\u062B \u062A\u0637\u0647\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0643\u0644\u0647\u0627", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: " \u0639\u0637\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0644\u0637\u064A \u0627\u0644\u0631\u064F\u0632\u0645 \u0627\u0644\u0645\u062A\u062F\u0627\u062E\u0644\u0629 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 , \u0645\u0641\u064A\u062F \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0631\u064F\u0632\u0645 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641", - ALGORITHM: "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629", - CHECK_ALGORITHM_WIKI: 'algorithm implementation :\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u062D\u0642\u0642 \u0645\u0646', - BASE_EASE: "\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629", - BASE_EASE_DESC: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 130 \u060C \u0648\u064A\u0641\u0636\u0644 \u062D\u0648\u0627\u0644\u064A 250.", - BASE_EASE_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629 130 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", - LAPSE_INTERVAL_CHANGE: "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u064A\u062A\u063A\u064A\u0631 \u0639\u0646\u062F \u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 \u0635\u0639\u0628\u0629", - LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", - EASY_BONUS: "\u0645\u0643\u0627\u0641\u0623\u0629 \u0633\u0647\u0644\u0629", - EASY_BONUS_DESC: "\u062A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 \u0636\u0628\u0637 \u0627\u0644\u0641\u0631\u0642 \u0641\u064A \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0628\u064A\u0646 \u0627\u0644\u0631\u062F \u0627\u0644\u062C\u064A\u062F \u0648\u0627\u0644\u0633\u0647\u0644 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 100 \u066A).", - EASY_BONUS_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 100 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "\u064A\u062A\u064A\u062D \u0644\u0643 \u0648\u0636\u0639 \u062D\u062F \u0623\u0639\u0644\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A (\u0627\u0641\u062A\u0631\u0627\u0636\u064A = 100 \u0639\u0627\u0645).", - MAX_INTERVAL_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0645\u062F\u0629 \u064A\u0648\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", - MAX_LINK_CONTRIB: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0631\u062A\u0628\u0627\u0637", - MAX_LINK_CONTRIB_DESC: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0644\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0645\u0631\u062C\u062D\u0629 \u0644\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629.", - LOGGING: "\u062A\u0633\u062C\u064A\u0644", - DISPLAY_DEBUG_INFO: "\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0637\u0648\u0631\u061F", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", - CLOSE: "\u0623\u063A\u0644\u0642", - NEW: "\u062C\u062F\u064A\u062F", - YESTERDAY: "\u0627\u0644\u0628\u0627\u0631\u062D\u0629", - TODAY: "\u0627\u0644\u064A\u0648\u0645", - TOMORROW: "\u0627\u0644\u063A\u062F", - // stats-modal.tsx - STATS_TITLE: "\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", - MONTH: "\u0634\u0647\u0631", - QUARTER: "\u0631\u0628\u0639 \u0627\u0644\u0633\u0646\u0629", - YEAR: "\u0633\u0646\u0629", - LIFETIME: "", - FORECAST: "", - FORECAST_DESC: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644", - SCHEDULED: "\u0627\u0644\u0645\u0642\u0631\u0631", - DAYS: "\u0623\u064A\u0627\u0645", - NUMBER_OF_CARDS: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - REVIEWS_PER_DAY: "\u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A/\u0627\u0644\u064A\u0648\u0645 ${avg} :\u0645\u062A\u0648\u0633\u0637", - INTERVALS: "\u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0646\u064A\u0629", - INTERVALS_DESC: "\u0627\u0644\u062A\u0623\u062E\u064A\u0631 \u062D\u062A\u0649 \u064A\u062A\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A \u0645\u0631\u0629 \u0623\u062E\u0631\u0649", - COUNT: "\u0639\u062F\u062F", - INTERVALS_SUMMARY: "${longest} : \u0623\u0637\u0648\u0644 \u0641\u0627\u0635\u0644 \u0632\u0645\u0646\u064A ,${avg} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A", - EASES: "\u0627\u0644\u0633\u0647\u0648\u0644\u0629", - EASES_SUMMARY: "${avgEase} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0647\u0648\u0644\u0629", - CARD_TYPES: "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", - CARD_TYPES_DESC: "\u0648\u0647\u0630\u0627 \u064A\u0634\u0645\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062E\u0641\u064A\u0629 \u0643\u0630\u0644\u0643 \u060C \u0625\u0646 \u0648\u062C\u062F\u062A", - CARD_TYPE_NEW: "\u062C\u062F\u064A\u062F\u0629", - CARD_TYPE_YOUNG: "\u0635\u063A\u064A\u0631\u0629", - CARD_TYPE_MATURE: "\u0646\u0627\u0636\u062C\u0629", - CARD_TYPES_SUMMARY: " ${totalCardsCount} :\u0625\u062C\u0645\u0627\u0644\u064A \u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A" -}; - -// src/lang/locale/cz.ts -var cz_default = { - // flashcard-modal.tsx - DECKS: "Bal\xED\u010Dky", - DUE_CARDS: "Karti\u010Dky po term\xEDnu", - NEW_CARDS: "Nov\xE9 karti\u010Dky", - TOTAL_CARDS: "Karti\u010Dek celkem", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "Vynulovat pokrok karti\u010Dky", - HARD: "Te\u017Ek\xE9", - GOOD: "Dobr\xE9", - EASY: "Jednoduch\xE9", - SHOW_ANSWER: "Uk\xE1zat odpov\u011B\u010F", - CARD_PROGRESS_RESET: "Pokrok karti\u010Dky byl vynulov\xE1n.", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "Otev\u0159\xEDt pozn\xE1mku k revizi", - REVIEW_CARDS: "Pozn\xE1mek k revizi", - REVIEW_EASY_FILE_MENU: "Revize: Jednoduch\xE9", - REVIEW_GOOD_FILE_MENU: "Revize: Dobr\xE9", - REVIEW_HARD_FILE_MENU: "Revize: T\u011B\u017Ek\xE9", - REVIEW_NOTE_EASY_CMD: "Ozna\u010Dit pozn\xE1mku jako jednoduchou", - REVIEW_NOTE_GOOD_CMD: "Ozna\u010Dit pozn\xE1mku jako dobrou", - REVIEW_NOTE_HARD_CMD: "Ozna\u010Dit pozn\xE1mku jako te\u017Ekou", - REVIEW_ALL_CARDS: "Revidovat karti\u010Dky ve v\u0161ech pozn\xE1mk\xE1ch", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_CARDS_IN_NOTE: "Revidovat karti\u010Dky v t\xE9to pozn\xE1mce.", - CRAM_CARDS_IN_NOTE: "Cram karti\u010Dky v t\xE9to pozn\xE1mce.", - VIEW_STATS: "Uk\xE1zat statistiky", - STATUS_BAR: "Revize: ${dueNotesCount} pozn\xE1mek, ${dueFlashcardsCount} karti\u010Dek po term\xEDnu", - SYNC_TIME_TAKEN: "Synchronizace trvala ${t}ms", - NOTE_IN_IGNORED_FOLDER: "Pozn\xE1mka je ulo\u017Eena v ignorovan\xE9 slo\u017Ece (zkontrolujte nastaven\xED).", - PLEASE_TAG_NOTE: "Pros\xEDm ozna\u010Dne pozn\xE1mku odpov\xEDdaj\xEDc\xEDm tagem pro revizi (v nastaven\xED).", - RESPONSE_RECEIVED: "Odpov\u011B\u010F p\u0159ijata.", - NO_DECK_EXISTS: "Neexistuje \u017E\xE1dn\xFD bal\xED\u010Dek pro ${deckName}", - ALL_CAUGHT_UP: "V\u0161e zrevidov\xE1no", - // scheduling.ts - DAYS_STR_IVL: "${interval} den/dn\xED", - MONTHS_STR_IVL: "${interval} m\u011Bs\xEDc(\u016F)", - YEARS_STR_IVL: "${interval} rok(\u016F)", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}r", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - Nastaven\xED", - CHECK_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na wiki.', - FOLDERS_TO_IGNORE: "Ignorovan\xE9 slo\u017Eky", - FOLDERS_TO_IGNORE_DESC: "Zadejte cesty ke slo\u017Ek\xE1m odd\u011Blen\xE9 od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDkad. \u0160ablony Meta/Scripts", - FLASHCARDS: "Karti\u010Dky", - FLASHCARD_EASY_LABEL: "Easy Button Text", - FLASHCARD_GOOD_LABEL: "Good Button Text", - FLASHCARD_HARD_LABEL: "Hard Button Text", - FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', - FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', - FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', - FLASHCARD_TAGS: "Tag pro karti\u010Dky", - FLASHCARD_TAGS_DESC: "Zadete tagy ood\u011Blen\xE9 mezerou nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad. #karti\u010Dky #bal\xED\u010Dke2 #bal\xED\u010Dek3.", - CONVERT_FOLDERS_TO_DECKS: "P\u0159ev\xE9st slo\u017Eky na bal\xED\u010Dky a podbal\xED\u010Dky?", - CONVERT_FOLDERS_TO_DECKS_DESC: "Toto je alternativa k tag\u016Fm karti\u010Dek viz nastaven\xED v\xFD\u0161e.", - INLINE_SCHEDULING_COMMENTS: "Ulo\u017Eit pl\xE1novac\xED koment\xE1\u0159 na stejn\xFD \u0159\xE1dek jako posledn\xED polo\u017Eka karti\u010Dky?", - INLINE_SCHEDULING_COMMENTS_DESC: "Zapnut\xED t\xE9to volby zp\u016Fsob\xED, \u017Ee HTML koment\xE1\u0159e nebudou rozb\xEDjet form\xE1tov\xE1n\xED list\u016F.", - BURY_SIBLINGS_TILL_NEXT_DAY: "Odlo\u017Eit p\u0159\xEDbuzn\xE9 karti\u010Dky na dal\u0161\xED den?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "P\u0159\xEDbuzn\xE9 karti\u010Dky jsou karti\u010Dky generovan\xE9 z textu stejn\xE9 pozn\xE1mky nap\u0159\xEDklad cloze smaz\xE1n\xED", - SHOW_CARD_CONTEXT: "Uk\xE1zat kontext v karti\u010Dce?", - SHOW_CARD_CONTEXT_DESC: "nap\u0159\xEDklad Titulek > Nadpis1 > Podnadpis > ... > Podnadpis", - CARD_MODAL_HEIGHT_PERCENT: "V\xFD\u0161ka karti\u010Dek v procentech", - CARD_MODAL_SIZE_PERCENT_DESC: "M\u011Blo by b\xFDt nastaveno na 100% na mobilu nebo kdy\u017E pou\u017E\xEDv\xE1te velk\xE9 obr\xE1zky", - RESET_DEFAULT: "Resetovat v\xFDchoz\xED nastaven\xED", - CARD_MODAL_WIDTH_PERCENT: "\u0160\xED\u0159ka karti\u010Dek v procentech", - RANDOMIZE_CARD_ORDER: "N\xE1hodn\u011B zm\u011Bnit po\u0159ad\xED karti\u010Dek b\u011Bhem revize?", - DISABLE_CLOZE_CARDS: "Vypnout cloze karti\u010Dky?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "P\u0159ev\xE9st ==zv\xFDrazn\u011Bn\xED== na clozes?", - CONVERT_BOLD_TEXT_TO_CLOZES: "P\u0159ev\xE9st **tu\u010Dn\xFD text** na clozes?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "P\u0159ev\xE9st {{slo\u017Een\xE9 z\xE1vorky}} na clozes?", - INLINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro inline karti\u010Dky", - FIX_SEPARATORS_MANUALLY_WARNING: "Pozor. Jakmile toto zm\u011Bn\xEDte, budete muset ru\u010Dn\u011B upravit v\u0161echny existuj\xEDc\xED karti\u010Dky.", - INLINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro oto\u010Den\xE9 inline karti\u010Dky", - MULTILINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkov\xE9 karti\u010Dky", - MULTILINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkove oto\u010Den\xE9 karti\u010Dky", - NOTES: "Pozn\xE1mky", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "Tag pro revizi", - TAGS_TO_REVIEW_DESC: "Zadejte tagy odd\u011Blen\xE9 mezerami nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad #review #tag2 #tag3.", - OPEN_RANDOM_NOTE: "Otev\u0159\xEDt n\xE1hodnou pozn\xE1mku pro revizi", - OPEN_RANDOM_NOTE_DESC: "Pokud toto vypnete, pozn\xE1mky budou \u0159azeny dle d\u016Fle\u017Eitosti (PageRank).", - AUTO_NEXT_NOTE: "Otev\u0159\xEDt automaticky dal\u0161\xED pozn\xE1mku po dokon\u010Den\xED revize", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "Vypnout volby revize v menu souboru nap\u0159\xEDklad 'Revize: Jednoduch\xE9'", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Po vypnut\xED m\u016F\u017Eete pou\u017E\xEDvat kl\xE1vesov\xE9 zkratky. Restartujte Obsidian po zm\u011Bn\u011B nastaven\xED.", - MAX_N_DAYS_REVIEW_QUEUE: "Maxim\xE1ln\xED po\u010Det dn\xED zobrazen\xFDch v prav\xE9m panelu", - MIN_ONE_DAY: "Po\u010Det dn\xED mus\xED b\xFDt minim\xE1ln\u011B 1.", - VALID_NUMBER_WARNING: "Pros\xEDm zadejte validn\xED \u010D\xEDslo.", - UI_PREFERENCES: "P\u0159edvolby u\u017Eivatelsk\xE9ho rozhran\xED", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stromy bal\xED\u010Dky by m\u011Bly b\xFDt zpo\u010D\xE1tku zobrazeny jako rozbalen\xE9", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Vypn\u011Bte toto, chcete-li sbalit vno\u0159en\xE9 bal\xED\u010Dky na stejn\xE9 kart\u011B. To je u\u017Eite\u010Dn\xE9, pokud m\xE1te karti\u010Dky, kter\xE9 pat\u0159\xED k mnoha bal\xED\u010Dk\u016Fm ve stejn\xE9m souboru.", - ALGORITHM: "Algoritmus", - CHECK_ALGORITHM_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na popis algoritmu.', - BASE_EASE: "Z\xE1kladn\xED slo\u017Eitost", - BASE_EASE_DESC: "minimum = 130, nejl\xE9pe p\u0159ibli\u017En\u011B 250.", - BASE_EASE_MIN_WARNING: "Z\xE1kladn\xED slo\u017Eitost mus\xED b\xFDt minim\xE1ln\u011B 130.", - LAPSE_INTERVAL_CHANGE: "Zm\u011Bna intervalu pokud karti\u010Dku/pozn\xE1mku ozna\u010D\xEDte jako slo\u017Eitou", - LAPSE_INTERVAL_CHANGE_DESC: "nov\xFD_inteval = star\xFD_interval * zm\u011Bna_intevalu / 100.", - EASY_BONUS: "Bonus pro jednoduch\xE9", - EASY_BONUS_DESC: "Tento bonus umo\u017E\u0148uje nastavit rozd\xEDl intervalu mezi jednoduch\xFDmi a dobr\xFDmi karti\u010Dkami/pozn\xE1mkami (minimum = 100%).", - EASY_BONUS_MIN_WARNING: "Bonus pro jednoduchost mus\xED b\xFDt minim\xE1ln\u011B 100.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "Umo\u017E\u0148uje nastavit horn\xED limit pro interval (defaultn\u011B = 100 let).", - MAX_INTERVAL_MIN_WARNING: "Maxim\xE1ln\xED interval mus\xED b\xFDt alespo\u0148 1 den.", - MAX_LINK_CONTRIB: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bv\u011Bk prolinkov\xE1n\xED", - MAX_LINK_CONTRIB_DESC: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bvek v\xE1\u017Een\xE9 slo\u017Eitosti prolinkovan\xFDch pozn\xE1mek pou\u017Eit\xFD pro ur\u010Den\xED po\u010D\xE1te\u010Dn\xED slo\u017Eitosti.", - LOGGING: "Zaznamen\xE1v\xE1m", - DISPLAY_DEBUG_INFO: "Zobrazit informace pro lad\u011Bn\xED na v\xFDvoj\xE1\u0159sk\xE9 konzoli?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "Fronta pozn\xE1mek k revizi", - CLOSE: "Uzav\u0159en\xE9", - NEW: "Nov\xE9", - YESTERDAY: "V\u010Dera", - TODAY: "Dnes", - TOMORROW: "Z\xEDtra", - // stats-modal.tsx - STATS_TITLE: "Statistiky", - MONTH: "M\u011Bs\xEDc", - QUARTER: "\u010Ctvrtlet\xED", - YEAR: "Rok", - LIFETIME: "Celkov\u011B", - FORECAST: "P\u0159edpov\u011B\u010F", - FORECAST_DESC: "Celkov\xFD po\u010Det karti\u010Dek, kter\xFDm vypr\u0161\xED term\xEDn", - SCHEDULED: "Napl\xE1nov\xE1no", - DAYS: "Dn\xED", - NUMBER_OF_CARDS: "Po\u010Det karti\u010Dek", - REVIEWS_PER_DAY: "Pr\u016Fm\u011Br: ${avg} revize/den", - INTERVALS: "Intervaly", - INTERVALS_DESC: "Doba, za kterou bude znovu zobrazeno k revize", - COUNT: "Po\u010Det", - INTERVALS_SUMMARY: "Pr\u016Fm\u011Brn\xFD interval: ${avg}, Nejdel\u0161\xED interval: ${longest}", - EASES: "Slo\u017Eitost", - EASES_SUMMARY: "Pr\u016Fm\u011Brn\xE1 slo\u017Eitost: ${avgEase}", - CARD_TYPES: "Typy karti\u010Dek", - CARD_TYPES_DESC: "Obsahuje i odlo\u017Een\xE9 karti\u010Dky (pokud existuj\xED)", - CARD_TYPE_NEW: "Nov\xE1", - CARD_TYPE_YOUNG: "Mlad\xE1", - CARD_TYPE_MATURE: "Dosp\u011Bl\xE1", - CARD_TYPES_SUMMARY: "Karti\u010Dek celkem: ${totalCardsCount}" -}; - -// src/lang/locale/bn.ts -var bn_default = {}; - -// src/lang/locale/da.ts -var da_default = {}; - -// src/lang/locale/de.ts -var de_default = { - // flashcard-modal.tsx - DECKS: "Stapel", - DUE_CARDS: "Anstehende Karten", - NEW_CARDS: "Neue Karten", - TOTAL_CARDS: "Alle Karten", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "Kartenfortschritt zur\xFCcksetzten", - HARD: "Schwer", - GOOD: "Gut", - EASY: "Einfach", - SHOW_ANSWER: "Zeige Antwort", - CARD_PROGRESS_RESET: "Kartenfortschritt wurde zur\xFCckgesetzt.", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "Notiz zur Wiederholung \xF6ffnen", - REVIEW_CARDS: "Lernkarten wiederholen", - REVIEW_EASY_FILE_MENU: "Notiz abschliessen als: Einfach", - REVIEW_GOOD_FILE_MENU: "Notiz abschliessen als: Gut", - REVIEW_HARD_FILE_MENU: "Notiz abschliessen als: Schwer", - REVIEW_NOTE_EASY_CMD: "Notiz abschliessen als: Einfach", - REVIEW_NOTE_GOOD_CMD: "Notiz abschliessen als: Gut", - REVIEW_NOTE_HARD_CMD: "Notiz abschliessen als: Schwer", - REVIEW_ALL_CARDS: "Alle Lernkarten wiederholen", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_CARDS_IN_NOTE: "Lernkarten in dieser Notiz wiederholen", - CRAM_CARDS_IN_NOTE: "Lernkarten in dieser Notiz pauken.", - VIEW_STATS: "Statistiken anzeigen", - STATUS_BAR: "Wiederholung: ${dueNotesCount} Notiz(en), ${dueFlashcardsCount} Karte(n) anstehend", - SYNC_TIME_TAKEN: "Sync dauerte ${t}ms", - NOTE_IN_IGNORED_FOLDER: "Notiz befindet sich in einem ausgeschlossenen Ordner (siehe Einstellungen).", - PLEASE_TAG_NOTE: "Bitte die Notiz f\xFCr Wiederholungen entsprechend taggen (siehe Einstellungen).", - RESPONSE_RECEIVED: "Antwort erhalten.", - NO_DECK_EXISTS: "Kein Stapel f\xFCr ${deckName} gefunden.", - ALL_CAUGHT_UP: "Yuhu! Alles geschafft! :D.", - // scheduling.ts - DAYS_STR_IVL: "${interval} Tag(e)", - MONTHS_STR_IVL: "${interval} Monat(e)", - YEARS_STR_IVL: "${interval} Jahr(e)", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}y", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - Einstellungen", - CHECK_WIKI: 'Weitere Informationen gibt es im Wiki (english).', - FOLDERS_TO_IGNORE: "Ausgeschlossene Ordner", - FOLDERS_TO_IGNORE_DESC: "Mehrere Ordner mit Zeilenumbr\xFCchen getrennt angeben. Bsp. OrdnerA[Zeilenumbruch]OrdnerB/Unterordner", - FLASHCARDS: "Lernkarten", - FLASHCARD_EASY_LABEL: "Easy Button Text", - FLASHCARD_GOOD_LABEL: "Good Button Text", - FLASHCARD_HARD_LABEL: "Hard Button Text", - FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', - FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', - FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', - FLASHCARD_TAGS: "Lernkarten Tags", - FLASHCARD_TAGS_DESC: "Mehrere Tags mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angeben. Bsp. #karte #stapel2 #stapel3.", - CONVERT_FOLDERS_TO_DECKS: "Ordner in Stapel und Substapel umwandeln?", - CONVERT_FOLDERS_TO_DECKS_DESC: 'Eine Alternative zur oberen "Lernkarten Tags" Option.', - INLINE_SCHEDULING_COMMENTS: "Den Fortschritt in der gleichen Zeile wie die letzte Zeile einer Lernkartei speichern?", - INLINE_SCHEDULING_COMMENTS_DESC: "Wenn aktiviert, wird der HTML Kommentar die umgebende Liste nicht aufbrechen.", - BURY_SIBLINGS_TILL_NEXT_DAY: "Verwandte Karten auf den n\xE4chsten Tag verlegen?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Verwandte Karten sind aus der gleichen Karte generiert worden (z.B. L\xFCckentextkarten oder beidseitige Karten).", - SHOW_CARD_CONTEXT: "Kontext in den Karten anzeigen?", - SHOW_CARD_CONTEXT_DESC: "Bsp. Titel > \xDCberschrift 1 > Sektion > ... > Untersektion", - CARD_MODAL_HEIGHT_PERCENT: "H\xF6he der Lernkartei in Prozent", - CARD_MODAL_SIZE_PERCENT_DESC: "Auf kleinen Bildschirmen (z.B. Smartphones) oder bei sehr grossen Bildern sollte dieser Wert auf 100% gesetzt werden.", - RESET_DEFAULT: "Standardeinstellung wiederherstellen", - CARD_MODAL_WIDTH_PERCENT: "Breite einer Lernkarte in Prozent", - RANDOMIZE_CARD_ORDER: "W\xE4hrend der Wiederhoung die Reihenfolge zuf\xE4llig mischen?", - DISABLE_CLOZE_CARDS: "L\xFCckentextkarten (cloze deletions) deaktivieren?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "==Hervorgehobenen== Text in L\xFCckentextkarten umwandeln?", - CONVERT_BOLD_TEXT_TO_CLOZES: "**Fettgedruckten** Text in L\xFCckentextkarten umwandeln?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{Geschweifte Klammern}} Text in L\xFCckentextkarten umwandeln?", - INLINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige Lernkarten", - FIX_SEPARATORS_MANUALLY_WARNING: "Wenn diese Einstellung ge\xE4ndert wird, dann m\xFCssen die entsprechenden Lernkarten manuell angepasst werden.", - INLINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige beidseitige Lernkarten", - MULTILINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige Lernkarten", - MULTILINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige beidseitige Lernkarten", - NOTES: "Notizen", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "Zu wiederholende Tags", - TAGS_TO_REVIEW_DESC: "Mehrere Tags k\xF6nnen mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angegeben werden. Bsp. #karte #tag1 #tag2.", - OPEN_RANDOM_NOTE: "Zuf\xE4llige Karten wiederholen", - OPEN_RANDOM_NOTE_DESC: "Wenn dies deaktiviert wird, dann werden die Notizen nach Wichtigkeit wiederholt (PageRank).", - AUTO_NEXT_NOTE: "Nach einer Wiederholung automatisch die n\xE4chste Karte \xF6ffnen", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "Optionen zur Wiederholung im Men\xFC einer Datei deaktivieren. Bsp. Wiederholen: Einfach Gut Schwer", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Nach dem Deaktivieren k\xF6nnen die Tastenk\xFCrzel zur Wiederholung verwendet werden. Obsidian muss nach einer \xC4nderung neu geladen weren.", - MAX_N_DAYS_REVIEW_QUEUE: "Maximale Anzahl anstehender Notizen, die im rechten Fensterbereich angezeigt werden", - MIN_ONE_DAY: "Anzahl der Tage muss mindestens 1 sein.", - VALID_NUMBER_WARNING: "Bitte eine g\xFCltige Zahl eingeben.", - UI_PREFERENCES: "Einstellungen der Benutzeroberfl\xE4che", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deckb\xE4ume sollten anf\xE4nglich erweitert angezeigt werden", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Deaktivieren Sie dies, um verschachtelte Decks in derselben Karte zu reduzieren. N\xFCtzlich, wenn Sie Karten haben, die zu vielen Decks in derselben Datei geh\xF6ren.", - ALGORITHM: "Algorithmus", - CHECK_ALGORITHM_WIKI: 'Weiterf\xFChrende Informationen: Implementierung des Algorithmus (english).', - BASE_EASE: "Basis der Einfachheit", - BASE_EASE_DESC: "Minimum ist 130. Empfohlen wird ca. 250.", - BASE_EASE_MIN_WARNING: "Basis der Einfachheit muss mindestens 130 sein.", - LAPSE_INTERVAL_CHANGE: "Anpassungsfaktor des Intervalls wenn eine Notiz / Karte 'Schwer' abgeschlossen wird", - LAPSE_INTERVAL_CHANGE_DESC: "neuesIntervall = altesIntervall * anpassungsfaktor / 100.", - EASY_BONUS: "Einfachheit-Bonus", - EASY_BONUS_DESC: "Der Einfachheit-Bonus gibt an um welchen Faktor (in Prozent) das Intervall l\xE4nger sein soll, wenn eine Notiz / Karte 'Einfach' statt 'Gut' abgeschlossen wird. Minimum ist 100%.", - EASY_BONUS_MIN_WARNING: "Der Einfachheit-Bonus muss mindestens 100 sein.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "Das maximale Intervall (in Tagen) f\xFCr Wiederholungen. Standard sind 100 Jahre.", - MAX_INTERVAL_MIN_WARNING: "Das maximale Interall muss mindestens ein Tag sein.", - MAX_LINK_CONTRIB: "Maximaler Einfluss von Links", - MAX_LINK_CONTRIB_DESC: "Maximaler Einfluss der Einfachheiten verlinkter Notizen zur gewichteten initialen Einfachheit einer neuen Lernkarte.", - LOGGING: "Logging", - DISPLAY_DEBUG_INFO: "Informationen zum Debugging in der Entwicklerkonsole anzeigen?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "Anstehende Notizen zur Wiederholung", - CLOSE: "Schliessen", - NEW: "Neu", - YESTERDAY: "Gestern", - TODAY: "Heute", - TOMORROW: "Morgen", - // stats-modal.tsx - STATS_TITLE: "Statistiken", - MONTH: "Month", - QUARTER: "Quarter", - YEAR: "Year", - LIFETIME: "Lifetime", - FORECAST: "Prognose", - FORECAST_DESC: "Anzahl der k\xFCnftig anstehenden Karten", - SCHEDULED: "Anstehend", - DAYS: "Tage", - NUMBER_OF_CARDS: "Anzahl der Karten", - REVIEWS_PER_DAY: "Durchschnitt: ${avg} Wiederholungen/Tag", - INTERVALS: "Intervalle", - INTERVALS_DESC: "Intervalle bis Wiederholungen anstehen", - COUNT: "Anzahl", - INTERVALS_SUMMARY: "Durchschnittliches Intervall: ${avg}, L\xE4ngstes Intervall: ${longest}", - EASES: "Einfachheit", - EASES_SUMMARY: "Durchschnittliche Einfachheit: ${avgEase}", - CARD_TYPES: "Kategorisierung", - CARD_TYPES_DESC: "Verlegte Karten eingeschlossen", - CARD_TYPE_NEW: "Neu", - CARD_TYPE_YOUNG: "Jung", - CARD_TYPE_MATURE: "Ausgereift", - CARD_TYPES_SUMMARY: "Insgesamt ${totalCardsCount} Karten" -}; - -// src/lang/locale/en.ts -var en_default = { - // flashcard-modal.tsx - DECKS: "Decks", - DUE_CARDS: "Due Cards", - NEW_CARDS: "New Cards", - TOTAL_CARDS: "Total Cards", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "Reset card's progress", - IMPOSSIBLE: "Impossible", - HARD: "Hard", - GOOD: "Good", - EASY: "Easy", - SHOW_ANSWER: "Show Answer", - CARD_PROGRESS_RESET: "Card's progress has been reset.", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "Open a note for review", - REVIEW_CARDS: "Review flashcards", - REVIEW_EASY_FILE_MENU: "Review: Easy", - REVIEW_GOOD_FILE_MENU: "Review: Good", - REVIEW_HARD_FILE_MENU: "Review: Hard", - REVIEW_NOTE_EASY_CMD: "Review note as easy", - REVIEW_NOTE_GOOD_CMD: "Review note as good", - REVIEW_NOTE_HARD_CMD: "Review note as hard", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_ALL_CARDS: "Review flashcards from all notes", - REVIEW_CARDS_IN_NOTE: "Review flashcards in this note", - CRAM_CARDS_IN_NOTE: "Cram flashcards in this note", - VIEW_STATS: "View statistics", - STATUS_BAR: "Review: ${dueNotesCount} note(s), ${dueFlashcardsCount} card(s) due", - SYNC_TIME_TAKEN: "Sync took ${t}ms", - NOTE_IN_IGNORED_FOLDER: "Note is saved under ignored folder (check settings).", - PLEASE_TAG_NOTE: "Please tag the note appropriately for reviewing (in settings).", - RESPONSE_RECEIVED: "Response received.", - NO_DECK_EXISTS: "No deck exists for ${deckName}", - ALL_CAUGHT_UP: "You're all caught up now :D.", - // scheduling.ts - // TODO: Translate MINUTES_X to other langs - MINUTES_STR_IVL: "${interval} minute(s)", - DAYS_STR_IVL: "${interval} day(s)", - MONTHS_STR_IVL: "${interval} month(s)", - YEARS_STR_IVL: "${interval} year(s)", - MINUTES_STR_IVL_MOBILE: "${interval}m", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}mo", - YEARS_STR_IVL_MOBILE: "${interval}y", - DATE_SCHED_FMT: "YYYY-MM-DD HH:mm:ss", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - Settings", - CHECK_WIKI: 'For more information, check the wiki.', - FOLDERS_TO_IGNORE: "Folders to ignore", - FOLDERS_TO_IGNORE_DESC: "Enter folder paths separated by newlines i.e. Templates Meta/Scripts", - FLASHCARDS: "Flashcards", - FLASHCARD_EASY_LABEL: "Easy Button Text", - FLASHCARD_GOOD_LABEL: "Good Button Text", - FLASHCARD_HARD_LABEL: "Hard Button Text", - FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', - FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', - FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', - FLASHCARD_TAGS: "Flashcard tags", - FLASHCARD_TAGS_DESC: "Enter tags separated by spaces or newlines i.e. #flashcards #deck2 #deck3.", - CONVERT_FOLDERS_TO_DECKS: "Convert folders to decks and subdecks?", - CONVERT_FOLDERS_TO_DECKS_DESC: "This is an alternative to the Flashcard tags option above.", - INLINE_SCHEDULING_COMMENTS: "Save scheduling comment on the same line as the flashcard's last line?", - INLINE_SCHEDULING_COMMENTS_DESC: "Turning this on will make the HTML comments not break list formatting.", - BURY_SIBLINGS_TILL_NEXT_DAY: "Bury sibling cards until the next day?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Siblings are cards generated from the same card text i.e. cloze deletions", - SHOW_CARD_CONTEXT: "Show context in cards?", - SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", - CARD_MODAL_HEIGHT_PERCENT: "Flashcard Height Percentage", - CARD_MODAL_SIZE_PERCENT_DESC: "Should be set to 100% on mobile or if you have very large images", - RESET_DEFAULT: "Reset to default", - CARD_MODAL_WIDTH_PERCENT: "Flashcard Width Percentage", - RANDOMIZE_CARD_ORDER: "Randomize card order during review?", - DISABLE_CLOZE_CARDS: "Disable cloze cards?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", - CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", - INLINE_CARDS_SEPARATOR: "Separator for inline flashcards", - FIX_SEPARATORS_MANUALLY_WARNING: "Note that after changing this you have to manually edit any flashcards you already have.", - INLINE_REVERSED_CARDS_SEPARATOR: "Separator for inline reversed flashcards", - MULTILINE_CARDS_SEPARATOR: "Separator for multiline flashcards", - MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator for multiline reversed flashcards", - NOTES: "Notes", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "Tags to review", - TAGS_TO_REVIEW_DESC: "Enter tags separated by spaces or newlines i.e. #review #tag2 #tag3.", - OPEN_RANDOM_NOTE: "Open a random note for review", - OPEN_RANDOM_NOTE_DESC: "When you turn this off, notes are ordered by importance (PageRank).", - AUTO_NEXT_NOTE: "Open next note automatically after a review", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "Disable review options in the file menu i.e. Review: Easy Good Hard", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "After disabling, you can review using the command hotkeys. Reload Obsidian after changing this.", - MAX_N_DAYS_REVIEW_QUEUE: "Maximum number of days to display on right panel", - MIN_ONE_DAY: "The number of days must be at least 1.", - VALID_NUMBER_WARNING: "Please provide a valid number.", - UI_PREFERENCES: "UI Preferences", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deck trees should be initially displayed as expanded", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Turn this off to collapse nested decks in the same card. Useful if you have cards which belong to many decks in the same file.", - ALGORITHM: "Algorithm", - CHECK_ALGORITHM_WIKI: 'For more information, check the algorithm implementation.', - BASE_EASE: "Base ease", - BASE_EASE_DESC: "minimum = 130, preferrably approximately 250.", - BASE_EASE_MIN_WARNING: "The base ease must be at least 130.", - LAPSE_INTERVAL_CHANGE: "Interval change when you review a flashcard/note as hard", - LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", - EASY_BONUS: "Easy Bonus", - EASY_BONUS_DESC: "The easy bonus allows you to set the difference in intervals between answering Good and Easy on a flashcard/note (minimum = 100%).", - EASY_BONUS_MIN_WARNING: "The easy bonus must be at least 100.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "Allows you to place an upper limit on the interval (default = 100 years).", - MAX_INTERVAL_MIN_WARNING: "The maximum interval must be at least 1 day.", - MAX_LINK_CONTRIB: "Maximum link contribution", - MAX_LINK_CONTRIB_DESC: "Maximum contribution of the weighted ease of linked notes to the initial ease.", - LOGGING: "Logging", - DISPLAY_DEBUG_INFO: "Display debugging information on the developer console?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "Notes Review Queue", - CLOSE: "Close", - NEW: "New", - YESTERDAY: "Yesterday", - TODAY: "Today", - TOMORROW: "Tomorrow", - // stats-modal.tsx - STATS_TITLE: "Statistics", - MONTH: "Month", - QUARTER: "Quarter", - YEAR: "Year", - LIFETIME: "Lifetime", - FORECAST: "Forecast", - FORECAST_DESC: "The number of cards due in the future", - SCHEDULED: "Scheduled", - DAYS: "Days", - NUMBER_OF_CARDS: "Number of cards", - REVIEWS_PER_DAY: "Average: ${avg} reviews/day", - INTERVALS: "Intervals", - INTERVALS_DESC: "Delays until reviews are shown again", - COUNT: "Count", - INTERVALS_SUMMARY: "Average interval: ${avg}, Longest interval: ${longest}", - EASES: "Eases", - EASES_SUMMARY: "Average ease: ${avgEase}", - CARD_TYPES: "Card Types", - CARD_TYPES_DESC: "This includes buried cards as well, if any", - CARD_TYPE_NEW: "New", - CARD_TYPE_YOUNG: "Young", - CARD_TYPE_MATURE: "Mature", - CARD_TYPES_SUMMARY: "Total cards: ${totalCardsCount}" -}; - -// src/lang/locale/en-gb.ts -var en_gb_default = {}; - -// src/lang/locale/es.ts -var es_default = { - // flashcard-modal.tsx - DECKS: "Mazos", - DUE_CARDS: "Tarjetas Vencidas", - NEW_CARDS: "Tarjetas Nuevas", - TOTAL_CARDS: "Tarjetas Totales", - BACK: "Atr\xE1s", - SKIP: "Saltar", - EDIT_CARD: "Editar Tarjeta", - RESET_CARD_PROGRESS: "Reiniciar progreso de la tarjeta", - HARD: "Dif\xEDcil", - GOOD: "Bien", - EASY: "F\xE1cil", - SHOW_ANSWER: "Mostrar Respuesta", - CARD_PROGRESS_RESET: "El progreso de la tarjeta se ha reiniciado.", - SAVE: "Guardar", - CANCEL: "Cancelar", - NO_INPUT: "Se ha prove\xEDdo entrada.", - CURRENT_EASE_HELP_TEXT: "Facilidad Actual: ", - CURRENT_INTERVAL_HELP_TEXT: "Intervalo Actual: ", - CARD_GENERATED_FROM: "Generado Desde: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "Abrir nota para revisi\xF3n", - REVIEW_CARDS: "Revisar Tarjetas", - REVIEW_EASY_FILE_MENU: "Revisar: F\xE1cil", - REVIEW_GOOD_FILE_MENU: "Revisar: Bien", - REVIEW_HARD_FILE_MENU: "Revisar: Dif\xEDcil", - REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil", - REVIEW_NOTE_GOOD_CMD: "Revisar nota como bien", - REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil", - CRAM_ALL_CARDS: "Selecciona un mazo a memorizar", - REVIEW_ALL_CARDS: "Revisar tarjetas de todas las notas", - REVIEW_CARDS_IN_NOTE: "Revisar tarjetas en esta nota", - CRAM_CARDS_IN_NOTE: "Memorizar tarjetas en esta nota", - VIEW_STATS: "Ver estad\xEDsticas", - STATUS_BAR: "Revisar: ${dueNotesCount} nota(s), ${dueFlashcardsCount} tarjetas vencidas", - SYNC_TIME_TAKEN: "La sincronizaci\xF3n tom\xF3 ${t} milisegundos", - NOTE_IN_IGNORED_FOLDER: "La nota est\xE1 guardada en un directorio ignorado (revisa los ajustes).", - PLEASE_TAG_NOTE: "Por favor etiquete apropiadamente la nota para revisi\xF3n (en los ajustes).", - RESPONSE_RECEIVED: "Respuesta Recibida", - NO_DECK_EXISTS: "No existen mazos para: ${deckName}", - ALL_CAUGHT_UP: "\xA1Est\xE1s al d\xEDa! \u{1F603}", - // scheduling.ts - DAYS_STR_IVL: "${interval} d\xEDa(s)", - MONTHS_STR_IVL: "${interval} mes(es)", - YEARS_STR_IVL: "${interval} a\xF1o(s)", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}a", - // settings.ts - SETTINGS_HEADER: "Extensi\xF3n de Repetici\xF3n Espaciada - Ajustes", - CHECK_WIKI: 'Para m\xE1s informaci\xF3n revisa la wiki.', - FOLDERS_TO_IGNORE: "Directorios a ignorar", - FOLDERS_TO_IGNORE_DESC: "Escriba las rutas de los directorios separadas por saltos de l\xEDnea, por ejemplo, Plantillas Extra/Guiones", - FLASHCARDS: "Tarjetas de Memorizaci\xF3n", - FLASHCARD_EASY_LABEL: "Texto del bot\xF3n: F\xE1cil", - FLASHCARD_GOOD_LABEL: "Texto del bot\xF3n: Bien", - FLASHCARD_HARD_LABEL: "Texto del bot\xF3n: Dif\xEDcil", - FLASHCARD_EASY_DESC: "Personalize la etiqueta para el bot\xF3n: F\xE1cil", - FLASHCARD_GOOD_DESC: "Personalize la etiqueta para el bot\xF3n: Bien", - FLASHCARD_HARD_DESC: "Personalize la etiqueta para el bot\xF3n: Dif\xEDcil", - FLASHCARD_TAGS: "Etiquetas de las Tarjetas de Memorizaci\xF3n", - FLASHCARD_TAGS_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDnea, por ejemplo, #memorizar #mazo2 #mazo3", - CONVERT_FOLDERS_TO_DECKS: "\xBFConvertir directorios a mazos y submazos?", - CONVERT_FOLDERS_TO_DECKS_DESC: "Esta es una opci\xF3n alternativa a las etiquetas de las Tarjetas de Memorizaci\xF3n.", - INLINE_SCHEDULING_COMMENTS: "\xBFGuardar el comentario para programaci\xF3n de las tarjetas en la \xFAltima l\xEDnea?", - INLINE_SCHEDULING_COMMENTS_DESC: "Activar esto har\xE1 que los comentarios HTML no rompan el formato de las listas.", - BURY_SIBLINGS_TILL_NEXT_DAY: "\xBFEnterrar tarjetas hermanas hasta el siguiente d\xEDa?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Los hermanos son tarjetas generadas del mismo texto de la tarjeta, por ejemplo, deletreos de huecos (cloze deletions en ingl\xE9s)", - SHOW_CARD_CONTEXT: "\xBFMostrar contexto en las tarjetas?", - SHOW_CARD_CONTEXT_DESC: "Por Ejemplo: T\xEDtulo > Cabecera > Sub-Cabecera > ... > Sub-Cabecera", - CARD_MODAL_HEIGHT_PERCENT: "Porcentaje de la altura de las tarjetas de memoria", - CARD_MODAL_SIZE_PERCENT_DESC: "Deber\xEDa ser establecido en 100% si tienes im\xE1genes grandes", - RESET_DEFAULT: "Reiniciar a la configuraci\xF3n por defecto", - CARD_MODAL_WIDTH_PERCENT: "Porcentaje del ancho de las tarjetas de memoria", - RANDOMIZE_CARD_ORDER: "\xBFAleatorizar el orden de las tarjetas para revisi\xF3n?", - DISABLE_CLOZE_CARDS: "\xBFDeshabilitar deletreo de huecos en las tarjetas?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "\xBFConvertir ==resaltados== a deletreo de huecos?", - CONVERT_BOLD_TEXT_TO_CLOZES: "\xBFConvertir **texto en negrita** a deletreo de huecos?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "\xBFConvertir {{llaves rizadas}} a deletreo de huecos?", - INLINE_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n en l\xEDnea", - FIX_SEPARATORS_MANUALLY_WARNING: "Note que despu\xE9s de cambiar este ajuste, tendr\xE1 que cambiar manualmente todas las notas que tenga.", - INLINE_REVERSED_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n para tarjetas de notas invertidas", - MULTILINE_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea", - MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea invertidas", - NOTES: "Notes", - REVIEW_PANE_ON_STARTUP: "Activar panel de revisi\xF3n de notas al arrancar", - TAGS_TO_REVIEW: "Etiquetas a revisar", - TAGS_TO_REVIEW_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDneas, por ejemplo, #revisi\xF3n #etiqueta2 #etiqueta3.", - OPEN_RANDOM_NOTE: "Abrir una nota al azar para revisar", - OPEN_RANDOM_NOTE_DESC: "Cuando deshabilita esto, las notas son ordenadas por importancia (Algoritmo PageRank).", - AUTO_NEXT_NOTE: "Abrir la siguiente nota autom\xE1ticamente despu\xE9s de una revisi\xF3n", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "Deshabilitar opciones de revisi\xF3n en el men\xFA de archivo, por ejemplo, Revisi\xF3n: F\xE1cil Bien Dif\xEDcil", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Despu\xE9s de deshabilitarlo, puede hacer las revisiones utilizando atajos de teclado. Reinicie Obsidian despu\xE9s de cambiar esto.", - MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de d\xEDas a mostrar en el panel derecho.", - MIN_ONE_DAY: "El n\xFAmero de d\xEDas debe ser al menos uno.", - VALID_NUMBER_WARNING: "Por favor especifique un n\xFAmero v\xE1lido.", - UI_PREFERENCES: "Preferencias de la interfaz de usuario.", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Los \xE1rboles de mazos deber\xEDan ser expandidos al inicio.", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desactiva esto para contraer mazos anidados en la misma tarjeta. \xDAtil si tienes tarjetas que pertenecen a muchos mazos en el mismo archivo.", - ALGORITHM: "Algoritmo", - CHECK_ALGORITHM_WIKI: 'Para m\xE1s informaci\xF3n, revisa la implementaci\xF3n del algoritmo.', - BASE_EASE: "Base ease", - BASE_EASE_DESC: "El m\xEDnimo es 130, es preferible que est\xE9 aproximado a 250.", - BASE_EASE_MIN_WARNING: "La facilidad base de las tarjetas debe ser al menos 130.", - LAPSE_INTERVAL_CHANGE: "El intervalo cambiar\xE1 cuando se revise una tarjeta o nota como Dif\xEDcil.", - LAPSE_INTERVAL_CHANGE_DESC: "NuevoInterval = ViejoIntervalo * CambioDeIntervalo / 100.", - EASY_BONUS: "Bonificaci\xF3n para F\xE1cil", - EASY_BONUS_DESC: "La bonificaci\xF3n para F\xE1cil te permite establecer la diferencia entre intervalos al responder Bien y F\xE1cil en las tarjetas o notas (m\xEDnimo = 100%).", - EASY_BONUS_MIN_WARNING: "El bono de facilidad debe ser al menos 100.", - MAX_INTERVAL: "Intervalo m\xE1ximo en d\xEDas", - MAX_INTERVAL_DESC: "Te permite establecer un l\xEDmite mayor en el intervalo (por defecto es de 100 a\xF1os).", - MAX_INTERVAL_MIN_WARNING: "El intervalo m\xE1ximo debe ser de al menos un d\xEDa.", - MAX_LINK_CONTRIB: "Contribuci\xF3n m\xE1xima de las notas vinculadas.", - MAX_LINK_CONTRIB_DESC: "Contribuci\xF3n m\xE1xima de la facilidad ponderada de las notas vinculadas a la facilidad inicial.", - LOGGING: "Registro", - DISPLAY_DEBUG_INFO: "\xBFMostrar informaci\xF3n de depuraci\xF3n en la consola de desarrollador?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "Cola de notas a revisar", - CLOSE: "Cerrar", - NEW: "Nuevo", - YESTERDAY: "Ayer", - TODAY: "Hoy", - TOMORROW: "Ma\xF1ana", - // stats-modal.tsx - STATS_TITLE: "Estad\xEDsticas", - MONTH: "Mes", - QUARTER: "Trimestre o Cuatrimestre", - // En Inglés: Quarter. - YEAR: "A\xF1o", - LIFETIME: "Tiempo de Vida", - FORECAST: "Pron\xF3stico", - FORECAST_DESC: "El n\xFAmero de tarjetas vencidas en el futuro", - SCHEDULED: "Programado", - DAYS: "D\xEDas", - NUMBER_OF_CARDS: "N\xFAmero de tarjetas", - REVIEWS_PER_DAY: "Carga: ${avg} Revisiones por d\xEDa", - INTERVALS: "Intervalos", - INTERVALS_DESC: "Retrasos hasta que las revisiones se muestren de nuevo", - COUNT: "Conteo", - INTERVALS_SUMMARY: "Intervalo de carga: ${avg}, Intervalo mayor: ${longest}", - EASES: "Facilidad", - EASES_SUMMARY: "Carga de Facilidad: ${avgEase}", - CARD_TYPES: "Tipos de tarjetas", - CARD_TYPES_DESC: "Esto incluye tambi\xE9n a las tarjetas enterradas, si las hay", - CARD_TYPE_NEW: "Nueva", - CARD_TYPE_YOUNG: "Joven", - CARD_TYPE_MATURE: "Madura", - CARD_TYPES_SUMMARY: "Tarjetas Totales: ${totalCardsCount}" -}; - -// src/lang/locale/fr.ts -var fr_default = {}; - -// src/lang/locale/hi.ts -var hi_default = {}; - -// src/lang/locale/id.ts -var id_default = {}; - -// src/lang/locale/it.ts -var it_default = {}; - -// src/lang/locale/ja.ts -var ja_default = { - // flashcard-modal.tsx - DECKS: "\u30C7\u30C3\u30AD", - DUE_CARDS: "\u671F\u65E5\u306E\u30AB\u30FC\u30C9", - NEW_CARDS: "\u65B0\u898F\u306E\u30AB\u30FC\u30C9", - TOTAL_CARDS: "\u30AB\u30FC\u30C9\u5408\u8A08", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u3092\u30EA\u30BB\u30C3\u30C8", - HARD: "Hard", - GOOD: "Good", - EASY: "Easy", - SHOW_ANSWER: "\u89E3\u7B54\u3092\u8868\u793A", - CARD_PROGRESS_RESET: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u304C\u30EA\u30BB\u30C3\u30C8\u3055\u308C\u307E\u3057\u305F\u3002", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30CE\u30FC\u30C8\u3092\u958B\u304F", - REVIEW_CARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u30EC\u30D3\u30E5\u30FC", - REVIEW_EASY_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Easy", - REVIEW_GOOD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Good", - REVIEW_HARD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Hard", - REVIEW_NOTE_EASY_CMD: "\u30CE\u30FC\u30C8\u3092Easy\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - REVIEW_NOTE_GOOD_CMD: "\u30CE\u30FC\u30C8\u3092Good\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - REVIEW_NOTE_HARD_CMD: "\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - REVIEW_ALL_CARDS: "\u3059\u3079\u3066\u306E\u30CE\u30FC\u30C8\u304B\u3089\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - CRAM_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u8A70\u3081\u8FBC\u307F\u5B66\u7FD2\u3059\u308B", - VIEW_STATS: "\u7D71\u8A08\u3092\u95B2\u89A7\u3059\u308B", - STATUS_BAR: "\u30EC\u30D3\u30E5\u30FC: ${dueNotesCount}\u30CE\u30FC\u30C8, ${dueFlashcardsCount}\u30AB\u30FC\u30C9\u304C\u671F\u65E5", - SYNC_TIME_TAKEN: "\u540C\u671F\u306B${t}ms\u304B\u304B\u308A\u307E\u3057\u305F\u3002", - NOTE_IN_IGNORED_FOLDER: "\u30CE\u30FC\u30C8\u304C\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", - PLEASE_TAG_NOTE: "\u30EC\u30D3\u30E5\u30FC\u3092\u884C\u3046\u306B\u306F\u30CE\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u6B63\u3057\u304F\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", - RESPONSE_RECEIVED: "\u7B54\u3048\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\u3002", - NO_DECK_EXISTS: "${deckName}\u306B\u306F\u30C7\u30C3\u30AD\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002", - ALL_CAUGHT_UP: "\u4ECA\u65E5\u306E\u8AB2\u984C\u3092\u3059\u3079\u3066\u9054\u6210\u3057\u307E\u3057\u305F :D", - // scheduling.ts - DAYS_STR_IVL: "${interval}\u65E5\u5F8C", - MONTHS_STR_IVL: "${interval}\u6708\u5F8C", - YEARS_STR_IVL: "${interval}\u5E74\u5F8C", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}y", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - \u8A2D\u5B9A", - CHECK_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306Fwiki\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', - FOLDERS_TO_IGNORE: "\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0", - FOLDERS_TO_IGNORE_DESC: '\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"Templates Meta/Scripts" \u306E\u3088\u3046\u306A\u30B9\u30DA\u30FC\u30B9\u306B\u3088\u308B\u533A\u5207\u308A\u3067\u306E\u66F8\u304D\u65B9\u306F\u7121\u52B9\u3067\u3059\u3002', - FLASHCARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9", - FLASHCARD_EASY_LABEL: "Easy Button Text", - FLASHCARD_GOOD_LABEL: "Good Button Text", - FLASHCARD_HARD_LABEL: "Hard Button Text", - FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', - FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', - FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', - FLASHCARD_TAGS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", - FLASHCARD_TAGS_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#flashcards #deck2 #deck3"', - CONVERT_FOLDERS_TO_DECKS: "\u30D5\u30A9\u30EB\u30C0\u3092\u30C7\u30C3\u30AD\u3068\u30B5\u30D6\u30C7\u30C3\u30AD\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", - CONVERT_FOLDERS_TO_DECKS_DESC: "\u3053\u308C\u306F\u4E0A\u8A18\u306E\u30BF\u30B0\u3092\u4F7F\u7528\u3057\u305F\u30C7\u30C3\u30AD\u69CB\u7BC9\u306E\u4EE3\u66FF\u3068\u306A\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3059\u3002", - INLINE_SCHEDULING_COMMENTS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6700\u7D42\u884C\u3068\u540C\u4E00\u306E\u884C\u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u30B3\u30E1\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F", - INLINE_SCHEDULING_COMMENTS_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u5316\u3059\u308B\u3068\u3001HTML\u30B3\u30E1\u30F3\u30C8\u306B\u3088\u3063\u3066Markdown\u306E\u30EA\u30B9\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u304C\u5D29\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002", - BURY_SIBLINGS_TILL_NEXT_DAY: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u307E\u3067\u30B7\u30D6\u30EA\u30F3\u30B0\u3092\u5EF6\u671F\u3057\u307E\u3059\u304B\uFF1F", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u30B7\u30D6\u30EA\u30F3\u30B0\u306F\u540C\u4E00\u306E\u30AB\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u304B\u3089\u751F\u6210\u3055\u308C\u305F\u30AB\u30FC\u30C9\u3001\u3064\u307E\u308A\u7A74\u57CB\u3081\u554F\u984C\u306E\u6D3E\u751F\u30AB\u30FC\u30C9\u3067\u3059\u3002", - SHOW_CARD_CONTEXT: "\u30AB\u30FC\u30C9\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F", - SHOW_CARD_CONTEXT_DESC: "\uFF62\u30BF\u30A4\u30C8\u30EB > \u898B\u51FA\u3057 1 > \u526F\u898B\u51FA\u3057 > ... > \u526F\u898B\u51FA\u3057\uFF63\u306E\u8868\u793A\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002", - CARD_MODAL_HEIGHT_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7E26\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", - CARD_MODAL_SIZE_PERCENT_DESC: "\u30E2\u30D0\u30A4\u30EB\u7248\u3001\u307E\u305F\u306F\u975E\u5E38\u306B\u5927\u304D\u306A\u30B5\u30A4\u30BA\u306E\u753B\u50CF\u304C\u3042\u308B\u5834\u5408\u306B\u306F100%\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002", - RESET_DEFAULT: "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306B\u30EA\u30BB\u30C3\u30C8\u3059\u308B", - CARD_MODAL_WIDTH_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6A2A\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", - RANDOMIZE_CARD_ORDER: "\u30EC\u30D3\u30E5\u30FC\u4E2D\u306E\u30AB\u30FC\u30C9\u306E\u9806\u756A\u3092\u30E9\u30F3\u30C0\u30E0\u306B\u3057\u307E\u3059\u304B\uFF1F", - DISABLE_CLOZE_CARDS: "\u7A74\u57CB\u3081\u30AB\u30FC\u30C9\u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F", - CONVERT_HIGHLIGHTS_TO_CLOZES: "==\u30CF\u30A4\u30E9\u30A4\u30C8==\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", - CONVERT_BOLD_TEXT_TO_CLOZES: "**\u30DC\u30FC\u30EB\u30C9\u4F53**\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{\u4E2D\u62EC\u5F27}}\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", - INLINE_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", - FIX_SEPARATORS_MANUALLY_WARNING: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u5834\u5408\u306B\u306F\u3001\u4F5C\u6210\u6E08\u307F\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u624B\u52D5\u3067\u7DE8\u96C6\u3057\u76F4\u3059\u5FC5\u8981\u304C\u3042\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - INLINE_REVERSED_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", - MULTILINE_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", - NOTES: "\u30CE\u30FC\u30C8", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", - TAGS_TO_REVIEW_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#review #tag2 #tag3"', - OPEN_RANDOM_NOTE: "\u30E9\u30F3\u30C0\u30E0\u306B\u30CE\u30FC\u30C8\u3092\u958B\u3044\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", - OPEN_RANDOM_NOTE_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u72B6\u614B\u3067\u306F\u3001\u30CE\u30FC\u30C8\u306F\u91CD\u8981\u5EA6(\u30DA\u30FC\u30B8\u30E9\u30F3\u30AF)\u306B\u3088\u308B\u9806\u756A\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002", - AUTO_NEXT_NOTE: "\u30EC\u30D3\u30E5\u30FC\u5F8C\u306B\u6B21\u306E\u30CE\u30FC\u30C8\u3092\u81EA\u52D5\u7684\u306B\u958B\u304F", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u306E\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u5316(\uFF62\u30EC\u30D3\u30E5\u30FC: Easy\uFF63\u7B49\u306E\u9805\u76EE\u3092\u975E\u8868\u793A\u306B\u3059\u308B)", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u7121\u52B9\u5316\u3057\u305F\u5F8C\u3001\u30B3\u30DE\u30F3\u30C9\u30DB\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD\u306B\u306A\u308A\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3057\u305F\u5834\u5408\u306B\u306FObsidian\u3092\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u30D1\u30CD\u30EB\u306B\u8868\u793A\u3059\u308B\u6700\u5927\u306E\u65E5\u6570", - MIN_ONE_DAY: "\u65E5\u6570\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - VALID_NUMBER_WARNING: "\u6709\u52B9\u306A\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - UI_PREFERENCES: "\u30E6\u30FC\u30B6\u30FC \u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u306E\u8A2D\u5B9A", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u30C7\u30C3\u30AD \u30C4\u30EA\u30FC\u306F\u6700\u521D\u306F\u5C55\u958B\u3057\u3066\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u3053\u308C\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u540C\u3058\u30AB\u30FC\u30C9\u5185\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30C7\u30C3\u30AD\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u307E\u3059\u3002\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u591A\u304F\u306E\u30C7\u30C3\u30AD\u306B\u5C5E\u3059\u308B\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u4FBF\u5229\u3067\u3059\u3002", - ALGORITHM: "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0", - CHECK_ALGORITHM_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', - BASE_EASE: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055", - BASE_EASE_DESC: "\u6700\u5C0F\u5024\u306F130\u3067\u3059\u304C\u3001 \u9069\u6B63\u5024\u306F\u304A\u304A\u3088\u305D250\u3067\u3059\u3002", - BASE_EASE_MIN_WARNING: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055\u306B\u306F130\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - LAPSE_INTERVAL_CHANGE: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u969B\u306E\u9593\u9694\u5909\u66F4", - LAPSE_INTERVAL_CHANGE_DESC: '"\u65B0\u3057\u3044\u9593\u9694 = \u4EE5\u524D\u306E\u9593\u9694 * \u9593\u9694\u5909\u66F4 / 100" \u3068\u3057\u3066\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002', - EASY_BONUS: "Easy\u30DC\u30FC\u30CA\u30B9", - EASY_BONUS_DESC: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u3088\u3063\u3066\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u306B\u304A\u3051\u308B\u9593\u9694\u306E\u5DEE\u5206\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059(\u6700\u5C0F\u5024 = 100%)\u3002", - EASY_BONUS_MIN_WARNING: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u306F100\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "\u9593\u9694\u306B\u4E0A\u9650\u5024\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 = 100\u5E74)\u3002", - MAX_INTERVAL_MIN_WARNING: "\u9593\u9694\u306E\u6700\u5927\u5024\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - MAX_LINK_CONTRIB: "\u30EA\u30F3\u30AF\u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u306E\u6700\u5927\u5024", - MAX_LINK_CONTRIB_DESC: "\u6700\u521D\u306E\u6613\u3057\u3055\u306B\u5BFE\u3057\u3066\u3001\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306E\u91CD\u307F\u4ED8\u3051\u3055\u308C\u305F\u6613\u3057\u3055\u304C\u5BC4\u4E0E\u3059\u308B\u6700\u5927\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", - LOGGING: "\u30ED\u30B0\u7BA1\u7406", - DISPLAY_DEBUG_INFO: "\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u3066\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\u30CE\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC\u306E\u30AD\u30E5\u30FC", - CLOSE: "\u9589\u3058\u308B", - NEW: "\u65B0\u898F", - YESTERDAY: "\u6628\u65E5", - TODAY: "\u4ECA\u65E5", - TOMORROW: "\u660E\u65E5", - // stats-modal.tsx - STATS_TITLE: "\u7D71\u8A08", - MONTH: "Month", - QUARTER: "Quarter", - YEAR: "Year", - LIFETIME: "Lifetime", - FORECAST: "\u4E88\u6E2C", - FORECAST_DESC: "\u5FA9\u7FD2\u671F\u65E5\u304C\u6765\u308B\u30AB\u30FC\u30C9\u306E\u679A\u6570", - SCHEDULED: "\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u6E08\u307F", - DAYS: "\u65E5", - NUMBER_OF_CARDS: "\u30AB\u30FC\u30C9\u6570", - REVIEWS_PER_DAY: "\u5E73\u5747: ${avg}\u30EC\u30D3\u30E5\u30FC/\u65E5", - INTERVALS: "\u9593\u9694", - INTERVALS_DESC: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u4E88\u5B9A\u65E5", - COUNT: "\u30AB\u30A6\u30F3\u30C8", - INTERVALS_SUMMARY: "\u9593\u9694\u306E\u5E73\u5747\u5024: ${avg}, \u6700\u9577\u306E\u9593\u9694: ${longest}", - EASES: "\u6613\u3057\u3055", - EASES_SUMMARY: "\u6613\u3057\u3055\u306E\u5E73\u5747\u5024: ${avgEase}", - CARD_TYPES: "\u30AB\u30FC\u30C9\u30BF\u30A4\u30D7", - CARD_TYPES_DESC: "\u5EF6\u671F\u306E\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3053\u308C\u306B\u542B\u307E\u308C\u307E\u3059", - CARD_TYPE_NEW: "\u65B0\u898F", - CARD_TYPE_YOUNG: "\u5FA9\u7FD2(\u521D\u671F)", - CARD_TYPE_MATURE: "\u5FA9\u7FD2(\u5F8C\u671F)", - CARD_TYPES_SUMMARY: "\u30AB\u30FC\u30C9\u306E\u5408\u8A08: ${totalCardsCount}\u679A" -}; - -// src/lang/locale/ko.ts -var ko_default = { - // flashcard-modal.tsx - DECKS: "\uB371", - DUE_CARDS: "\uB2E4\uC2DC \uBCFC \uCE74\uB4DC\uB4E4", - NEW_CARDS: "\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB4E4", - TOTAL_CARDS: "\uC804\uCCB4 \uCE74\uB4DC\uB4E4", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.", - HARD: "\uC5B4\uB824\uC6C0(Hard)", - GOOD: "\uC88B\uC74C(Good)", - EASY: "\uC26C\uC6C0(Easy)", - SHOW_ANSWER: "\uC815\uB2F5 \uD655\uC778\uD558\uAE30", - CARD_PROGRESS_RESET: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC774 \uCD08\uAE30\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uC5F4\uAE30", - REVIEW_CARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB9AC\uBDF0", - REVIEW_EASY_FILE_MENU: "\uB9AC\uBDF0: \uC26C\uC6C0(Easy)", - REVIEW_GOOD_FILE_MENU: "\uB9AC\uBDF0: \uC88B\uC74C(Good)", - REVIEW_HARD_FILE_MENU: "\uB9AC\uBDF0: \uC5B4\uB824\uC6C0(Hard)", - REVIEW_NOTE_EASY_CMD: "\uB178\uD2B8\uB97C \uC26C\uC6C0(easy)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", - REVIEW_NOTE_GOOD_CMD: "\uB178\uD2B8\uB97C \uC88B\uC74C(good)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", - REVIEW_NOTE_HARD_CMD: "\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(hard)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", - REVIEW_ALL_CARDS: "\uBAA8\uB4E0 \uB178\uD2B8\uB4E4\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", - CRAM_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uBCBC\uB77D\uCE58\uAE30\uD569\uB2C8\uB2E4.", - VIEW_STATS: "\uD1B5\uACC4 \uD655\uC778", - STATUS_BAR: "--\uB9AC\uBDF0: ${dueNotesCount} \uB178\uD2B8, ${dueFlashcardsCount} \uCE74\uB4DC \uB0A8\uC558\uC2B5\uB2C8\uB2E4.", - SYNC_TIME_TAKEN: "\uB3D9\uAE30\uD654\uC5D0 ${t}\uBC00\uB9AC\uCD08 \uAC78\uB838\uC2B5\uB2C8\uB2E4", - NOTE_IN_IGNORED_FOLDER: "\uB178\uD2B8\uAC00 \uBB34\uC2DC\uB41C \uD3F4\uB354 \uC544\uB798\uC5D0 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", - PLEASE_TAG_NOTE: "\uB9AC\uBDF0\uB97C \uD558\uAE30\uC704\uD574 \uB178\uD2B8\uC5D0 \uC801\uC808\uD788 \uD0DC\uADF8\uD574\uC8FC\uC138\uC694. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", - RESPONSE_RECEIVED: "\uC694\uCCAD\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4", - NO_DECK_EXISTS: "${deckName}\uC774\uB77C\uB294 \uC774\uB984\uC758 \uB371\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", - ALL_CAUGHT_UP: "\uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. :D", - // scheduling.ts - DAYS_STR_IVL: "${interval} \uC77C \uD6C4", - MONTHS_STR_IVL: "${interval} \uAC1C\uC6D4 \uD6C4", - YEARS_STR_IVL: "${interval} \uB144 \uD6C4", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}y", - // settings.ts - SETTINGS_HEADER: "Spaced Repetition Plugin - \uC124\uC815", - CHECK_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, wiki\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.', - FOLDERS_TO_IGNORE: "\uBB34\uC2DC\uD560 \uD3F4\uB354\uB4E4", - FOLDERS_TO_IGNORE_DESC: "\uD3F4\uB354 \uACBD\uB85C\uB97C \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. 'Templates Meta/Scripts' \uC640 \uAC19\uC774 \uC785\uB825\uD558\uB294 \uAC83\uC740 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", - FLASHCARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC", - FLASHCARD_EASY_LABEL: "Easy Button Text", - FLASHCARD_GOOD_LABEL: "Good Button Text", - FLASHCARD_HARD_LABEL: "Hard Button Text", - FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', - FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', - FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', - FLASHCARD_TAGS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8", - FLASHCARD_TAGS_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#flashcards #deck2 #deck3'", - CONVERT_FOLDERS_TO_DECKS: "\uD3F4\uB354\uB97C \uB371\uACFC \uC11C\uBE0C\uB371\uC73C\uB85C \uC0AC\uC6A9\uD560\uAE4C\uC694?", - CONVERT_FOLDERS_TO_DECKS_DESC: "\uC774 \uAE30\uB2A5\uC740 \uC704\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8 \uC635\uC158\uC744 \uB300\uCCB4\uD569\uB2C8\uB2E4.", - INLINE_SCHEDULING_COMMENTS: "\uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB9C8\uC9C0\uB9C9 \uC904\uACFC \uB3D9\uC77C\uD55C \uC904\uC5D0 \uC2A4\uCF00\uC904\uB9C1 \uCF54\uBA58\uD2B8\uB97C \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - INLINE_SCHEDULING_COMMENTS_DESC: "\uC774 \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 HTML \uC8FC\uC11D\uC774 \uBAA9\uB85D\uC758 \uD3EC\uB9E4\uD305\uC744 \uBB34\uB108\uD2B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", - BURY_SIBLINGS_TILL_NEXT_DAY: "Sibling \uCE74\uB4DC\uB97C \uB2E4\uC74C\uB0A0\uAE4C\uC9C0 \uBB3B\uC5B4\uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Sibling \uCE74\uB4DC\uB294 \uB3D9\uC77C\uD55C \uCE74\uB4DC \uD14D\uC2A4\uD2B8\uC5D0\uC11C \uC0DD\uC131\uB41C \uCE74\uB4DC\uC785\uB2C8\uB2E4. i.e. cloze deletions", - SHOW_CARD_CONTEXT: "\uCE74\uB4DC\uC758 \uBB38\uB9E5(context)\uC744 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - SHOW_CARD_CONTEXT_DESC: "\uCE74\uB4DC\uC5D0\uC11C 'Title > Heading 1 > Subheading > ... > Subheading' \uC758 \uD45C\uC2DC\uB97C \uD560\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.", - CARD_MODAL_HEIGHT_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB192\uC774 \uBE44\uC728", - CARD_MODAL_SIZE_PERCENT_DESC: "\uBAA8\uBC14\uC77C \uBC84\uC804 \uD639\uC740 \uB9E4\uC6B0 \uD070 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uACBD\uC6B0 100%\uB85C \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.", - RESET_DEFAULT: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654", - CARD_MODAL_WIDTH_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB108\uBE44 \uBE44\uC728", - RANDOMIZE_CARD_ORDER: "\uB9AC\uBDF0\uC911\uC778 \uCE74\uB4DC\uC758 \uC21C\uC11C\uB97C \uB79C\uB364\uC73C\uB85C \uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - DISABLE_CLOZE_CARDS: "\uBE48 \uCE78 \uCC44\uC6B0\uAE30 \uCE74\uB4DC\uB97C \uBE44\uD65C\uC131\uD654\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "==hightlights== \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - CONVERT_BOLD_TEXT_TO_CLOZES: "**bolded text** \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{curly brackets}} \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - INLINE_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", - FIX_SEPARATORS_MANUALLY_WARNING: "\uC8FC\uC758: \uC774 \uC635\uC158\uC744 \uC218\uC815\uD55C \uD6C4\uC5D0\uB294 \uC774\uBBF8 \uC791\uC131\uB41C \uD50C\uB798\uC2DC\uCE74\uB4DC\uB97C \uC218\uB3D9\uC73C\uB85C \uC218\uC815\uD574\uC57C \uD568\uC744 \uC8FC\uC758\uD558\uC2ED\uC2DC\uC624.", - INLINE_REVERSED_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", - MULTILINE_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", - NOTES: "\uB178\uD2B8", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "\uB9AC\uBDF0\uC5D0 \uC0AC\uC6A9\uD560 \uD0DC\uADF8", - TAGS_TO_REVIEW_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#review #tag2 #tag3'", - OPEN_RANDOM_NOTE: "\uB9AC\uBDF0\uB97C \uC704\uD574 \uB79C\uB364 \uB178\uD2B8\uB97C \uC5FD\uB2C8\uB2E4.", - OPEN_RANDOM_NOTE_DESC: "\uC774 \uC635\uC158\uC774 \uAEBC\uC838\uC788\uC73C\uBA74, \uB178\uD2B8\uB294 \uC911\uC694\uB3C4(\uD398\uC774\uC9C0 \uB7AD\uD06C)\uC5D0 \uB530\uB77C \uC815\uB82C\uB429\uB2C8\uB2E4.", - AUTO_NEXT_NOTE: "\uB9AC\uBDF0 \uD6C4\uC5D0 \uB2E4\uC74C \uB178\uD2B8\uB97C \uC790\uB3D9\uC73C\uB85C \uC5FD\uB2C8\uB2E4.", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C\uC758 \uB9AC\uBDF0 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD569\uB2C8\uB2E4. \uC608) \uB9AC\uBDF0: Easy Good Hard", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\uC774 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD55C \uD6C4, \uBA85\uB839 \uB2E8\uCD95\uD0A4\uB97C \uC774\uC6A9\uD574 \uB9AC\uBDF0\uD558\uC2E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC635\uC158\uC744 \uBCC0\uACBD\uD55C \uD6C4\uC5D0 \uC635\uC2DC\uB514\uC5B8\uC744 \uC0C8\uB85C\uACE0\uCE68 \uD558\uC2ED\uC2DC\uC624.", - MAX_N_DAYS_REVIEW_QUEUE: "\uC624\uB978\uCABD \uD328\uB110\uC5D0 \uD45C\uC2DC\uD560 \uCD5C\uB300 \uC77C\uC218", - MIN_ONE_DAY: "\uC801\uC5B4\uB3C4 1\uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", - VALID_NUMBER_WARNING: "\uC720\uD6A8\uD55C \uC22B\uC790\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.", - UI_PREFERENCES: "\uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 \uAE30\uBCF8 \uC124\uC815", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\uB371 \uD2B8\uB9AC\uB294 \uCC98\uC74C\uC5D0 \uD655\uC7A5\uB41C \uAC83\uC73C\uB85C \uD45C\uC2DC\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\uAC19\uC740 \uCE74\uB4DC\uC5D0 \uC911\uCCA9\uB41C \uB371\uC744 \uC811\uC73C\uB824\uBA74 \uC774 \uC635\uC158\uC744 \uB044\uC2ED\uC2DC\uC624. \uAC19\uC740 \uD30C\uC77C\uC5D0 \uC5EC\uB7EC \uB371\uC5D0 \uC18D\uD55C \uCE74\uB4DC\uAC00 \uC788\uB294 \uACBD\uC6B0 \uC720\uC6A9\uD569\uB2C8\uB2E4.", - ALGORITHM: "\uC54C\uACE0\uB9AC\uC998", - CHECK_ALGORITHM_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, algorithm implementation\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.', - BASE_EASE: "\uAE30\uBCF8 ease", - BASE_EASE_DESC: "\uCD5C\uC19F\uAC12 = 130, \uC801\uC815\uCE58\uB294 \uB300\uB7B5 250\uC785\uB2C8\uB2E4.", - BASE_EASE_MIN_WARNING: "\uAE30\uBCF8 ease\uB294 \uC801\uC5B4\uB3C4 130 \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", - LAPSE_INTERVAL_CHANGE: "\uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(Hard)\uC73C\uB85C \uB9AC\uBDF0\uD588\uC744 \uB54C\uC758 \uAC04\uACA9 \uBCC0\uACBD", - LAPSE_INTERVAL_CHANGE_DESC: "\uC0C8\uB85C\uC6B4 \uAC04\uACA9 = \uC774\uC804 \uAC04\uACA9 * \uAC04\uACA9\uBCC0\uACBD \uAC12 / 100.", - EASY_BONUS: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4", - EASY_BONUS_DESC: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uC5D0\uC11C \uC88B\uC74C(Good)\uACFC \uC26C\uC6C0(Easy) \uC0AC\uC774\uC758 \uAC04\uACA9 \uCC28\uC774\uB97C \uC124\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uCD5C\uC18C = 100%)", - EASY_BONUS_MIN_WARNING: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uC801\uC5B4\uB3C4 100\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "\uAC04\uACA9\uC758 \uC0C1\uD55C\uC120\uC744 \uB458 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12 = 100\uB144)", - MAX_INTERVAL_MIN_WARNING: "\uCD5C\uB300 \uAC04\uACA9\uC740 \uC801\uC5B4\uB3C4 1\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", - MAX_LINK_CONTRIB: "\uCD5C\uB300 \uC5F0\uACB0 \uAE30\uC5EC\uB3C4", - MAX_LINK_CONTRIB_DESC: "\uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uCD08\uAE30 ease\uC5D0 \uB300\uD55C \uAC00\uC911\uCE58\uAC00 \uC801\uC6A9\uB41C ease\uC758 \uCD5C\uB300 \uAE30\uC5EC\uB3C4\uC785\uB2C8\uB2E4.", - LOGGING: "\uB85C\uAE45", - DISPLAY_DEBUG_INFO: "\uB514\uBC84\uAE45 \uC815\uBCF4\uB97C \uAC1C\uBC1C\uC790 \uCF58\uC194\uC5D0 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uB300\uAE30\uC5F4", - CLOSE: "\uB2EB\uAE30", - NEW: "New", - YESTERDAY: "\uC5B4\uC81C", - TODAY: "\uC624\uB298", - TOMORROW: "\uB0B4\uC77C", - // stats-modal.tsx - STATS_TITLE: "\uD1B5\uACC4", - MONTH: "\uC6D4", - QUARTER: "\uBD84\uAE30", - YEAR: "\uB144", - LIFETIME: "\uD3C9\uC0DD", - FORECAST: "\uC608\uCE21", - FORECAST_DESC: "\uC774\uD6C4\uC5D0 \uD559\uC2B5\uD560 \uCE74\uB4DC\uC758 \uC218", - SCHEDULED: "Scheduled", - DAYS: "\uC77C", - NUMBER_OF_CARDS: "\uCE74\uB4DC\uC758 \uC218", - REVIEWS_PER_DAY: "\uD3C9\uADE0: ${avg} \uB9AC\uBDF0/\uC77C", - INTERVALS: "\uAC04\uACA9", - INTERVALS_DESC: "\uB9AC\uBDF0\uB97C \uB2E4\uC2DC \uD560 \uB54C \uAE4C\uC9C0\uC758 \uAE30\uAC04", - COUNT: "Count", - INTERVALS_SUMMARY: "\uD3C9\uADE0 \uAC04\uACA9: ${avg}, \uAC00\uC7A5 \uAE34 \uAC04\uACA9: ${longest}", - EASES: "Eases", - EASES_SUMMARY: "Average ease: ${avgEase}", - CARD_TYPES: "\uCE74\uB4DC \uD0C0\uC785", - CARD_TYPES_DESC: "\uC5EC\uAE30\uC5D0\uB294 \uBB3B\uC5B4\uB454 \uCE74\uB4DC\uB3C4 \uD3EC\uD568\uB429\uB2C8\uB2E4.", - CARD_TYPE_NEW: "New", - CARD_TYPE_YOUNG: "Young", - CARD_TYPE_MATURE: "Mature", - CARD_TYPES_SUMMARY: "\uC804\uCCB4 \uCE74\uB4DC \uC218: ${totalCardsCount}" -}; - -// src/lang/locale/mr.ts -var mr_default = {}; - -// src/lang/locale/nl.ts -var nl_default = {}; - -// src/lang/locale/no.ts -var no_default = {}; - -// src/lang/locale/pl.ts -var pl_default = {}; - -// src/lang/locale/pt.ts -var pt_default = {}; - -// src/lang/locale/pt-br.ts -var pt_br_default = { - // flashcard-modal.tsx - DECKS: "Baralhos", - DUE_CARDS: "Cartas para Colocar em Dia", - NEW_CARDS: "Novas Cartas", - TOTAL_CARDS: "Total de Cartas", - BACK: "Back", - SKIP: "Skip", - EDIT_CARD: "Edit Card", - RESET_CARD_PROGRESS: "Reiniciar o Progresso da Carta", - HARD: "Dif\xEDcil", - GOOD: "OK", - EASY: "F\xE1cil", - SHOW_ANSWER: "Mostrar Resposta", - CARD_PROGRESS_RESET: "O Progresso da Carta foi reiniciado", - SAVE: "Save", - CANCEL: "Cancel", - NO_INPUT: "No input provided.", - CURRENT_EASE_HELP_TEXT: "Current Ease: ", - CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", - CARD_GENERATED_FROM: "Generated from: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "Abrir uma nota para revisar", - REVIEW_CARDS: "Revisar flashcards", - REVIEW_EASY_FILE_MENU: "Revis\xE3o: F\xE1cil", - REVIEW_GOOD_FILE_MENU: "Revis\xE3o: OK", - REVIEW_HARD_FILE_MENU: "Revis\xE3o: Dif\xEDcil", - REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil", - REVIEW_NOTE_GOOD_CMD: "Revisar nota como OK", - REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil", - REVIEW_ALL_CARDS: "Revisar flashcards de todas as notas", - CRAM_ALL_CARDS: "Select a deck to cram", - REVIEW_CARDS_IN_NOTE: "Revisar flashcards nessa nota", - CRAM_CARDS_IN_NOTE: "Revisar todas as flashcards nessa nota", - VIEW_STATS: "Ver estat\xEDsticas", - STATUS_BAR: "Revis\xE3o: ${dueNotesCount} nota(s), ${dueFlashcardsCount} Carta(s) para colocar em dia", - SYNC_TIME_TAKEN: "Sicroniza\xE7\xE3o levou ${t}ms", - NOTE_IN_IGNORED_FOLDER: "Nota \xE9 salva na pasta ignorada (cheque as configura\xE7\xF5es).", - PLEASE_TAG_NOTE: "Por favor etiquete a nota apropriadamente para revisar (nas configura\xE7\xF5es).", - RESPONSE_RECEIVED: "Resposta recebida.", - NO_DECK_EXISTS: "Nenhum baralho existe para ${deckName}", - ALL_CAUGHT_UP: "Voc\xEA colocou tudo em prazo agora :D.", - // scheduling.ts - DAYS_STR_IVL: "${interval} dia(s)", - MONTHS_STR_IVL: "${interval} m\xEAs(es)", - YEARS_STR_IVL: "${interval} ano(s)", - DAYS_STR_IVL_MOBILE: "${interval}d", - MONTHS_STR_IVL_MOBILE: "${interval}m", - YEARS_STR_IVL_MOBILE: "${interval}a", - // settings.ts - SETTINGS_HEADER: "Plguin Spaced Repetition - Configura\xE7\xE3o", - CHECK_WIKI: 'Para mais informa\xE7\xF5es, checke o wiki.', - FOLDERS_TO_IGNORE: "Pastas para ignorar", - FOLDERS_TO_IGNORE_DESC: "Ensira o caminho das pastas separado por quebras de linha ex: Templates Meta/Scripts", - FLASHCARDS: "Flashcards", - FLASHCARD_EASY_LABEL: "Texto do Bot\xE3o de F\xE1cil", - FLASHCARD_GOOD_LABEL: "Texto do Bot\xE3o de OK", - FLASHCARD_HARD_LABEL: "Texto do Bot\xE3o de Dif\xEDcil", - FLASHCARD_EASY_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "F\xE1cil"', - FLASHCARD_GOOD_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "OK"', - FLASHCARD_HARD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "Dif\xEDcil"', - FLASHCARD_TAGS: "Etiquetas dos Flashcards", - FLASHCARD_TAGS_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebras de linha ex: #flashcards #baralho2 #baralho3.", - CONVERT_FOLDERS_TO_DECKS: "Converter pastas para baralhos e sub-baralhos?", - CONVERT_FOLDERS_TO_DECKS_DESC: "Isso \xE9 uma alternativa para a op\xE7\xE3o de etiqueta dos Flashcards em cima.", - INLINE_SCHEDULING_COMMENTS: "Salvar coment\xE1rios de agendamento na mesma linha que a \xFAltima linha do flashcard?", - INLINE_SCHEDULING_COMMENTS_DESC: "Ligar isso vai fazer com que os coment\xE1rios em HTML n\xE3o quebrem a formata\xE7\xE3o de listas.", - BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrar cartas irm\xE3s at\xE9 o pr\xF3ximo dia?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Cartas irm\xE3s s\xE3o geradas pelo texto da mesma carta ex: omiss\xE3o de palavras", - SHOW_CARD_CONTEXT: "Mostrar conxtexto nas cartas?", - SHOW_CARD_CONTEXT_DESC: "ex: T\xEDtulo > Cabe\xE7alho 1 > Subcabe\xE7alho > ... > Subcabe\xE7alho", - CARD_MODAL_HEIGHT_PERCENT: "Porcentagem da Altura do Flashcard", - CARD_MODAL_SIZE_PERCENT_DESC: "Deveria estar configurado em 100% em dispositivos m\xF3veis ou se voc\xEA tem imagens muito grandes", - RESET_DEFAULT: "Reiniciar para a pr\xE9-defini\xE7\xE3o", - CARD_MODAL_WIDTH_PERCENT: "Porcentagem de Largura do Flashcard", - RANDOMIZE_CARD_ORDER: "Aleatorizar a ordem das cartas durante a revis\xE3o?", - DISABLE_CLOZE_CARDS: "Desabilitar cartas que usam omiss\xE3o de palavras?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "Converter ==marca-texto== em omiss\xF5es?", - CONVERT_BOLD_TEXT_TO_CLOZES: "Converter **texto em negrito** em omiss\xF5es?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "Converter {{chaves}} em omiss\xF5es?", - INLINE_CARDS_SEPARATOR: "Separador para flashcards inline", - FIX_SEPARATORS_MANUALLY_WARNING: "Note que depois de mudar isso voc\xEA vai ter que manualmente mudar quaisquer flashcards que voc\xEA tenha.", - INLINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards inline reversos", - MULTILINE_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas", - MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas reversos", - NOTES: "Notas", - REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", - TAGS_TO_REVIEW: "Etiquetas para revisar", - TAGS_TO_REVIEW_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebra de linhas ex: #revisar #etiqueta2 #etiqueta3.", - OPEN_RANDOM_NOTE: "Abrir uma nota aleat\xF3ria para revisar", - OPEN_RANDOM_NOTE_DESC: "Quando voc\xEA desabilitar isso, as notas v\xE3o ser ordenadas por import\xE2ncia (PageRank).", - AUTO_NEXT_NOTE: "Abrir a pr\xF3xima nota automaticamente depois de uma revis\xE3o", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "Desabilitar op\xE7\xF5es de revis\xE3o no menu de arquivos ex: Revis\xE3o: F\xE1cil OK Dif\xEDcil", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Depois de desabilitar, voc\xEA pode revisar usando os atalhos de comando. Reinicie Obsidian depois de mudar isso.", - MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de dias para exibir no painel direito", - MIN_ONE_DAY: "O n\xFAmero de dias deve ser pelo menos 1.", - VALID_NUMBER_WARNING: "Por favor ensira um n\xFAmero v\xE1lido.", - UI_PREFERENCES: "Prefer\xEAncias de UI", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\xC1rvores de baralhos devem inicialmente serem exibidas como expandidas", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desabilite isso para colapsar baralhos que est\xE3o um dentro do outro na mesma carta. \xDAtil se voc\xEA tem cartas que pertencem a muitos baralhos em um mesmo arquivo.", - ALGORITHM: "Algor\xEDtmo", - CHECK_ALGORITHM_WIKI: 'Para mais informa\xE7\xF5es, cheque a implementa\xE7\xE3o do algor\xEDtmo.', - BASE_EASE: "Facilidade base", - BASE_EASE_DESC: "m\xEDnimo = 130, preferivelmente aproximadamente 250.", - BASE_EASE_MIN_WARNING: "A facilidade base deve ser pelo menos 130.", - LAPSE_INTERVAL_CHANGE: "Mudan\xE7a de intervalo quando voc\xEA revisa um(a) flashcard/nota como dif\xEDcil", - LAPSE_INTERVAL_CHANGE_DESC: "novoIntervalo = velhoIntervalo * mudancaIntervalo / 100.", - EASY_BONUS: "B\xF4nus de F\xE1cil", - EASY_BONUS_DESC: "O b\xF4nus de f\xE1cil te permite mudar a difer\xEAncia entre intervalos de responder OK e F\xE1cil em um(a) flashcard/nota (m\xEDnimo = 100%).", - EASY_BONUS_MIN_WARNING: "O b\xF4nus de f\xE1cil deve ser pelo menos 100.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "Te permite colocar um limite m\xE1ximo no intervalo (pr\xE9-defini\xE7\xE3o = 100 anos).", - MAX_INTERVAL_MIN_WARNING: "O intervalo m\xE1ximo deve ser pelo menos 1 dia.", - MAX_LINK_CONTRIB: "Contribui\xE7\xE3o M\xE1xima de Links", - MAX_LINK_CONTRIB_DESC: "Contribui\xE7\xE3o m\xE1xima da facilidade ponderada das notas linkadas \xE0 facilidade inicial.", - LOGGING: "Logging", - DISPLAY_DEBUG_INFO: "Mostrar informa\xE7\xE3o de debugging no console de desenvolvimento?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "Fila de Notas para Revisar", - CLOSE: "Fechar", - NEW: "Novo", - YESTERDAY: "Ontem", - TODAY: "Hoje", - TOMORROW: "Amanh\xE3", - // stats-modal.tsx - STATS_TITLE: "Estat\xEDsticas", - MONTH: "M\xEAs", - QUARTER: "Quarto", - YEAR: "Ano", - LIFETIME: "Tempo Total", - FORECAST: "Previs\xE3o", - FORECAST_DESC: "O n\xFAmero de cartas a serem colocadas em dia no futuro", - SCHEDULED: "Agendado", - DAYS: "Dias", - NUMBER_OF_CARDS: "N\xFAmero de cartas", - REVIEWS_PER_DAY: "M\xE9dia: ${avg} revis\xF5es/dia", - INTERVALS: "Intervalos", - INTERVALS_DESC: "Atrasos at\xE9 que as revis\xF5es sejam exibidas de novo", - COUNT: "Contagem", - INTERVALS_SUMMARY: "Intervalo em m\xE9dia: ${avg}, Maior intervalo: ${longest}", - EASES: "Facilidades", - EASES_SUMMARY: "Facilidade em m\xE9dia: ${avgEase}", - CARD_TYPES: "Tipos de Cartas", - CARD_TYPES_DESC: "Isso tamb\xE9m inclui cartas enterrados, caso existam", - CARD_TYPE_NEW: "Novo", - CARD_TYPE_YOUNG: "Jovem", - CARD_TYPE_MATURE: "Amadurecido", - CARD_TYPES_SUMMARY: "Total de cartas: ${totalCardsCount}" -}; - -// src/lang/locale/ro.ts -var ro_default = {}; - -// src/lang/locale/ru.ts -var ru_default = { - // flashcard-modal.tsx - DECKS: "\u041A\u043E\u043B\u043E\u0434\u044B", - DUE_CARDS: "\u041F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - NEW_CARDS: "\u041D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - TOTAL_CARDS: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - BACK: "\u041D\u0430\u0437\u0430\u0434", - SKIP: "\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C", - EDIT_CARD: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443", - RESET_CARD_PROGRESS: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - HARD: "\u0421\u043B\u043E\u0436\u043D\u043E", - GOOD: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", - EASY: "\u041B\u0435\u0433\u043A\u043E", - SHOW_ANSWER: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442", - CARD_PROGRESS_RESET: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - SAVE: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", - CANCEL: "\u041E\u0442\u043C\u0435\u043D\u0430", - NO_INPUT: "\u041F\u0443\u0441\u0442\u043E\u0439 \u0432\u0432\u043E\u0434.", - CURRENT_EASE_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u041B\u0435\u0433\u043A\u043E\u0441\u0442\u044C: ", - CURRENT_INTERVAL_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B: ", - CARD_GENERATED_FROM: "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0438\u0437: ${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", - REVIEW_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - REVIEW_EASY_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E", - REVIEW_GOOD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", - REVIEW_HARD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u0421\u043B\u043E\u0436\u043D\u043E", - REVIEW_NOTE_EASY_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041B\u0451\u0433\u043A\u0443\u044E", - REVIEW_NOTE_GOOD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u0443\u044E", - REVIEW_NOTE_HARD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u0421\u043B\u043E\u0436\u043D\u0443\u044E", - CRAM_ALL_CARDS: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u0435", - REVIEW_ALL_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043E \u0432\u0441\u0435\u0445 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u0445", - REVIEW_CARDS_IN_NOTE: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", - CRAM_CARDS_IN_NOTE: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", - VIEW_STATS: "\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443", - STATUS_BAR: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C: ${dueNotesCount} \u0437\u0430\u043C\u0435\u0442\u043E\u043A(-\u043A\u0438), ${dueFlashcardsCount} \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A(-\u043A\u0438) \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u0438\u0442", - SYNC_TIME_TAKEN: "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0437\u0430\u043D\u044F\u043B\u0430 ${t}\u043C\u0441", - NOTE_IN_IGNORED_FOLDER: "\u0417\u0430\u043C\u0435\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u0443\u044E \u043F\u0430\u043F\u043A\u0443 (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", - PLEASE_TAG_NOTE: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u043F\u043E\u043C\u0435\u0442\u044C\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u043D\u0430\u0434\u043E \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", - RESPONSE_RECEIVED: "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D.", - NO_DECK_EXISTS: "\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0440\u043E\u0432\u043D\u044F ${deckName}", - ALL_CAUGHT_UP: "\u041C\u043E\u043B\u043E\u0434\u0435\u0446! \u0422\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u043B\u0441\u044F \u0438 \u0434\u043E\u0448\u0435\u043B \u0434\u043E \u043A\u043E\u043D\u0446\u0430! :D", - // scheduling.ts - DAYS_STR_IVL: "${interval} \u0434\u043D\u0435\u0439", - MONTHS_STR_IVL: "${interval} \u043C\u0435\u0441\u044F\u0446\u043E\u0432", - YEARS_STR_IVL: "${interval} \u0433\u043E\u0434\u0430 (\u043B\u0435\u0442)", - DAYS_STR_IVL_MOBILE: "${interval}\u0434.", - MONTHS_STR_IVL_MOBILE: "${interval}\u043C.", - YEARS_STR_IVL_MOBILE: "${interval}\u0433.", - // settings.ts - SETTINGS_HEADER: "\u041F\u043B\u0430\u0433\u0438\u043D Spaced Repetition - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", - CHECK_WIKI: '\u0414\u043B\u044F \u0434\u043E\u043F. \u0438\u043D\u0444\u044B, \u0441\u043C\u043E\u0442\u0440\u0438 wiki.', - FOLDERS_TO_IGNORE: "\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0430\u043F\u043A\u0438", - FOLDERS_TO_IGNORE_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u043F\u0443\u0442\u0438 \u043F\u0430\u043F\u043E\u043A, \u043A\u0430\u0436\u0434\u0430\u044F \u043D\u0430 \u0441\u0432\u043E\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: Templates Meta/Scripts", - FLASHCARDS: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - FLASHCARD_EASY_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041B\u0435\u0433\u043A\u043E", - FLASHCARD_GOOD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", - FLASHCARD_HARD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u0421\u043B\u043E\u0436\u043D\u043E", - FLASHCARD_EASY_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"', - FLASHCARD_GOOD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"', - FLASHCARD_HARD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"', - FLASHCARD_TAGS: "\u0422\u044D\u0433\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - FLASHCARD_TAGS_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #flashcards #deck2 #deck3.", - CONVERT_FOLDERS_TO_DECKS: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438 \u0432 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u043F\u043E\u0434\u0443\u0440\u043E\u0432\u043D\u0438?", - CONVERT_FOLDERS_TO_DECKS_DESC: "\u042D\u0442\u043E \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u0442\u044D\u0433\u0430\u043C \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A, \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0441\u0432\u0435\u0440\u0445\u0443.", - INLINE_SCHEDULING_COMMENTS: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?", - INLINE_SCHEDULING_COMMENTS_DESC: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0434\u0435\u043B\u0430\u0435\u0442 \u0442\u0430\u043A, \u0447\u0442\u043E HTML \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043B\u043E\u043C\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.", - BURY_SIBLINGS_TILL_NEXT_DAY: "\u041F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0434\u043E \u0441\u043B\u0435\u0434. \u0434\u043D\u044F?", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u0420\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 - \u0442\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0438\u0437 \u043E\u0434\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430, \u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 ([...])", - SHOW_CARD_CONTEXT: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442(\u0443\u0440\u043E\u0432\u0435\u043D\u044C) \u0432 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445(\u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F)?", - SHOW_CARD_CONTEXT_DESC: "\u043F\u0440\u0438\u043C\u0435\u0440: Title > Heading 1 > Subheading > ... > Subheading", - CARD_MODAL_HEIGHT_PERCENT: "\u0412\u044B\u0441\u043E\u0442\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", - CARD_MODAL_SIZE_PERCENT_DESC: "\u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043E\u043C, \u0432\u044B\u0441\u0442\u0430\u0432\u044C\u0442\u0435 100% \u0438\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043E\u0433\u0440\u043E\u043C\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", - RESET_DEFAULT: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", - CARD_MODAL_WIDTH_PERCENT: "\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", - RANDOMIZE_CARD_ORDER: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F?", - DISABLE_CLOZE_CARDS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", - CONVERT_HIGHLIGHTS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C ==\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442== \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", - CONVERT_BOLD_TEXT_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C **\u0436\u0438\u0440\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442** \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C {{\u0444\u0438\u0433\u0443\u0440\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438}} \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", - INLINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - FIX_SEPARATORS_MANUALLY_WARNING: "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u0432\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", - INLINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - MULTILINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - NOTES: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438", - REVIEW_PANE_ON_STARTUP: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B", - TAGS_TO_REVIEW: "\u0422\u044D\u0433\u0438 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", - TAGS_TO_REVIEW_DESC: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u0430\u043C\u0438 \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #review #tag2 #tag3.", - OPEN_RANDOM_NOTE: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", - OPEN_RANDOM_NOTE_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u0442\u043E \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 (PageRank).", - AUTO_NEXT_NOTE: "\u041F\u043E\u0441\u043B\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0432 \u043C\u0435\u043D\u044E \u0444\u0430\u0439\u043B\u0430, \u0442.\u0435.: \u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E \u0421\u043B\u043E\u0436\u043D\u043E", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u041F\u043E\u0441\u043B\u0435 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u043F\u0440\u0438 \u043F\u043E\u043C\u043E\u0449\u0438 \u0445\u043E\u0442\u043A\u0435\u0435\u0432. \u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 Obsidian \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E.", - MAX_N_DAYS_REVIEW_QUEUE: "\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u043F\u0440\u0430\u0432\u0430", - MIN_ONE_DAY: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", - VALID_NUMBER_WARNING: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0447\u0438\u0441\u043B\u043E.", - UI_PREFERENCES: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u0414\u0435\u0440\u0435\u0432\u044C\u044F \u043A\u043E\u043B\u043E\u0434 \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0435", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043B\u043E\u0434\u044B \u043D\u0430 \u043E\u0434\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435. \u041F\u043E\u043B\u0435\u0437\u043D\u043E, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044C \u043A\u0430\u0440\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043C\u043D\u043E\u0433\u0438\u043C \u043A\u043E\u043B\u043E\u0434\u0430\u043C \u0432 \u043E\u0434\u043D\u043E\u043C \u0444\u0430\u0439\u043B\u0435.", - ALGORITHM: "\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C", - CHECK_ALGORITHM_WIKI: '\u0417\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044C \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430.', - BASE_EASE: "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C", - BASE_EASE_DESC: "\u043C\u0438\u043D\u0438\u043C\u0443\u043C = 130, \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043A\u043E\u043B\u043E 250.", - BASE_EASE_MIN_WARNING: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0443\u043C 130.", - LAPSE_INTERVAL_CHANGE: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442\u0435 \u0421\u043B\u043E\u0436\u043D\u043E \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438/\u0437\u0430\u043C\u0435\u0442\u043A\u0438", - LAPSE_INTERVAL_CHANGE_DESC: "\u043D\u043E\u0432\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A = \u0441\u0442\u0430\u0440\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A * \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 / 100.", - EASY_BONUS: "\u041B\u0435\u0433\u043A\u043E: \u0431\u043E\u043D\u0443\u0441", - EASY_BONUS_DESC: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u043D\u0438\u0446\u0443 \u0432 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430\u0445 \u043C\u0435\u0436\u0434\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u0425\u043E\u0440\u043E\u0448\u043E \u0438 \u041B\u0435\u0433\u043A\u043E \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435/\u0437\u0430\u043C\u0435\u0442\u043A\u0435 (\u043C\u0438\u043D. = 100%).", - EASY_BONUS_MIN_WARNING: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 100.", - MAX_INTERVAL: "Maximum interval in days", - MAX_INTERVAL_DESC: "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0433\u0440\u0430\u043D\u0438\u0446\u0443 \u043D\u0430 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E = 100 \u043B\u0435\u0442).", - MAX_INTERVAL_MIN_WARNING: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", - MAX_LINK_CONTRIB: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0432\u044F\u0437\u0438 (\u0441\u0441\u044B\u043B\u043A\u0438)", - MAX_LINK_CONTRIB_DESC: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0432\u0437\u0432\u0435\u0448\u0435\u043D\u043D\u043E\u0439 \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C.", - LOGGING: "\u0412\u0435\u0434\u0435\u043D\u0438\u0435 \u043B\u043E\u0433\u0430", - DISPLAY_DEBUG_INFO: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 (developer console)?", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435", - CLOSE: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", - NEW: "\u041D\u043E\u0432\u044B\u0435", - YESTERDAY: "\u0412\u0447\u0435\u0440\u0430\u0448\u043D\u0438\u0435", - TODAY: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0435", - TOMORROW: "\u0417\u0430\u0432\u0442\u0440\u0430\u0448\u043D\u0438\u0435", - // stats-modal.tsx - STATS_TITLE: "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430", - MONTH: "\u041C\u0435\u0441\u044F\u0446", - QUARTER: "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044C", - YEAR: "\u0413\u043E\u0434", - LIFETIME: "\u0412\u0441\u0451 \u0432\u0440\u0435\u043C\u044F", - FORECAST: "\u041F\u0440\u043E\u0433\u043D\u043E\u0437", - FORECAST_DESC: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0445 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043C", - SCHEDULED: "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E", - DAYS: "\u0414\u043D\u0435\u0439", - NUMBER_OF_CARDS: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - REVIEWS_PER_DAY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: ${avg} \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0439 \u0432 \u0434\u0435\u043D\u044C", - //!!! - INTERVALS: "\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u044B", - INTERVALS_DESC: "\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", - COUNT: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E", - INTERVALS_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${avg}, \u0421\u0430\u043C\u044B\u0439 \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${longest}", - EASES: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C (\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A) \n (\u043E\u0442 \u0430\u043D\u0433\u043B. ease, \u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430)", - EASES_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438: ${avgEase}", - CARD_TYPES: "\u0422\u0438\u043F\u044B \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", - CARD_TYPES_DESC: "\u0412\u043A\u043B\u044E\u0447\u0430\u044F \u0441\u043F\u0440\u044F\u0442\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u0442\u0430\u043A\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442.", - CARD_TYPE_NEW: "\u041D\u043E\u0432\u044B\u0445", - CARD_TYPE_YOUNG: "\u041C\u043E\u043B\u043E\u0434\u044B\u0445", - CARD_TYPE_MATURE: "\u0412\u0437\u0440\u043E\u0441\u043B\u044B\u0445", - CARD_TYPES_SUMMARY: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: ${totalCardsCount}" -}; - -// src/lang/locale/ta.ts -var ta_default = {}; - -// src/lang/locale/te.ts -var te_default = {}; - -// src/lang/locale/th.ts -var th_default = {}; - -// src/lang/locale/tr.ts -var tr_default = {}; - -// src/lang/locale/uk.ts -var uk_default = {}; - -// src/lang/locale/ur.ts -var ur_default = {}; - -// src/lang/locale/vi.ts -var vi_default = {}; - -// src/lang/locale/zh-cn.ts -var zh_cn_default = { - // flashcard-modal.tsx - DECKS: "\u5361\u7EC4", - DUE_CARDS: "\u5230\u671F\u5361\u7247", - NEW_CARDS: "\u65B0\u5361\u7247", - TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", - BACK: "\u8FD4\u56DE", - SKIP: "\u7565\u8FC7", - EDIT_CARD: "\u7F16\u8F91\u5361\u7247", - RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", - HARD: "\u8F83\u96BE", - GOOD: "\u8BB0\u5F97", - EASY: "\u7B80\u5355", - SHOW_ANSWER: "\u663E\u793A\u7B54\u6848", - CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", - SAVE: "\u50A8\u5B58", - CANCEL: "\u53D6\u6D88", - NO_INPUT: "\u6CA1\u6709\u63D0\u4F9B\u8F93\u5165\u3002", - CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", - CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u95F4\u9694\uFF1A", - CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\u6253\u5F00\u4E00\u4E2A\u7B14\u8BB0\u5F00\u59CB\u590D\u4E60", - REVIEW_CARDS: "\u590D\u4E60\u5361\u7247", - REVIEW_EASY_FILE_MENU: "\u590D\u4E60\uFF1A\u7B80\u5355", - REVIEW_GOOD_FILE_MENU: "\u590D\u4E60\uFF1A\u8BB0\u5F97", - REVIEW_HARD_FILE_MENU: "\u590D\u4E60\uFF1A\u8F83\u96BE", - REVIEW_NOTE_EASY_CMD: "\u6807\u8BB0\u4E3A\u201C\u7B80\u5355\u201D", - REVIEW_NOTE_GOOD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8BB0\u5F97\u201D", - REVIEW_NOTE_HARD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8F83\u96BE\u201D", - REVIEW_ALL_CARDS: "\u590D\u4E60\u6240\u6709\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", - CRAM_ALL_CARDS: "\u9009\u62E9\u8981\u96C6\u4E2D\u590D\u4E60\u7684\u5361\u7EC4", - REVIEW_CARDS_IN_NOTE: "\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", - CRAM_CARDS_IN_NOTE: "\u96C6\u4E2D\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", - VIEW_STATS: "\u67E5\u770B\u6570\u636E", - STATUS_BAR: "\u590D\u4E60: ${dueNotesCount} \u7B14\u8BB0, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", - SYNC_TIME_TAKEN: "\u540C\u6B65\u65F6\u95F4 ${t}ms", - NOTE_IN_IGNORED_FOLDER: "\u7B14\u8BB0\u4FDD\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F84\u4E2D\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", - PLEASE_TAG_NOTE: "\u8BF7\u5C06\u9700\u8981\u590D\u4E60\u7684\u7B14\u8BB0\u4E2D\u52A0\u5165\u6B63\u786E\u7684\u6807\u7B7E\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", - RESPONSE_RECEIVED: "\u53CD\u9988\u5DF2\u6536\u5230", - NO_DECK_EXISTS: "\u6CA1\u6709 ${deckName} \u5361\u7EC4", - ALL_CAUGHT_UP: "\u90FD\u590D\u4E60\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", - // scheduling.ts - DAYS_STR_IVL: "${interval}\u5929", - MONTHS_STR_IVL: "${interval}\u6708", - YEARS_STR_IVL: "${interval}\u5E74", - DAYS_STR_IVL_MOBILE: "${interval}\u5929", - MONTHS_STR_IVL_MOBILE: "${interval}\u6708", - YEARS_STR_IVL_MOBILE: "${interval}\u5E74", - // settings.ts - SETTINGS_HEADER: "\u95F4\u9694\u91CD\u590D\u63D2\u4EF6 - \u8BBE\u7F6E", - CHECK_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FBwiki.', - FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u6587\u4EF6\u5939", - FOLDERS_TO_IGNORE_DESC: "\u8F93\u5165\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u7528\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts", - FLASHCARDS: "\u5361\u7247", - FLASHCARD_EASY_LABEL: "\u201C\u7B80\u5355\u201D\u6309\u94AE\u6587\u672C", - FLASHCARD_GOOD_LABEL: "\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u6587\u672C", - FLASHCARD_HARD_LABEL: "\u201C\u8F83\u96BE\u201D\u6309\u94AE\u6587\u672C", - FLASHCARD_EASY_DESC: "\u81EA\u5B9A\u4E49\u201C\u7B80\u5355\u201D\u6309\u94AE\u7684\u6807\u7B7E", - FLASHCARD_GOOD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u7684\u6807\u7B7E", - FLASHCARD_HARD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8F83\u96BE\u201D\u6309\u94AE\u7684\u6807\u7B7E", - FLASHCARD_TAGS: "\u5361\u7247\u6807\u7B7E", - FLASHCARD_TAGS_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", - CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C06\u6587\u4EF6\u5939\u5185\u5BB9\u8F6C\u6362\u4E3A\u5361\u7247\u7EC4\u548C\u5B50\u5361\u7247\u7EC4\uFF1F", - CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9009\u9879\u4E3A\u5361\u7247\u6807\u7B7E\u9009\u9879\u7684\u66FF\u4EE3\u9009\u9879\u3002", - INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C06\u8BA1\u5212\u91CD\u590D\u65F6\u95F4\u4FDD\u5B58\u5728\u5361\u7247\u6700\u540E\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", - INLINE_SCHEDULING_COMMENTS_DESC: "HTML\u6CE8\u91CA\u4E0D\u518D\u7834\u574F\u5217\u8868\u683C\u5F0F", - BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C06\u5173\u8054\u5361\u7247\u9690\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u5173\u8054\u5361\u7247\u662F\u6765\u81EA\u540C\u4E00\u5361\u7247\u7684\u4E0D\u540C\u5F62\u5F0F\uFF0C \u4F8B\u5982\uFF1A\u5B8C\u5F62\u586B\u7A7A\u5361\u7247", - SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u663E\u793A\u4E0A\u4E0B\u6587\uFF1F", - SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6807\u9898 > \u526F\u6807\u9898 > \u5C0F\u6807\u9898 > ... > \u5C0F\u6807\u9898", - CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", - CARD_MODAL_SIZE_PERCENT_DESC: "\u8BF7\u5728\u79FB\u52A8\u7AEF\u4F7F\u7528\u5E76\u9700\u8981\u6D4F\u89C8\u8F83\u5927\u56FE\u7247\u65F6\u8BBE\u4E3A100%", - RESET_DEFAULT: "\u91CD\u7F6E\u4E3A\u9ED8\u8BA4", - CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BBD\u5EA6\u767E\u5206\u6BD4", - RANDOMIZE_CARD_ORDER: "\u590D\u4E60\u65F6\u968F\u673A\u663E\u793A\u5361\u7247\uFF1F", - DISABLE_CLOZE_CARDS: "\u4E0D\u8FDB\u884C\u5B8C\u5F62\u586B\u7A7A\uFF1F", - CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C06 ==\u9AD8\u4EAE== \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", - CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C06 **\u7C97\u4F53** \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C06 {{\u5927\u62EC\u53F7}} \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", - INLINE_CARDS_SEPARATOR: "\u5355\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", - FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9009\u9879\u540E\u4F60\u5C06\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u7B26\u3002", - INLINE_REVERSED_CARDS_SEPARATOR: "\u5355\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", - MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", - NOTES: "\u7B14\u8BB0", - REVIEW_PANE_ON_STARTUP: "\u542F\u52A8\u65F6\u5F00\u542F\u7B14\u8BB0\u590D\u4E60\u7A97\u683C", - TAGS_TO_REVIEW: "\u590D\u4E60\u6807\u7B7E", - TAGS_TO_REVIEW_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", - OPEN_RANDOM_NOTE: "\u590D\u4E60\u968F\u673A\u7B14\u8BB0", - OPEN_RANDOM_NOTE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\uFF0C\u7B14\u8BB0\u5C06\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", - AUTO_NEXT_NOTE: "\u590D\u4E60\u540E\u81EA\u52A8\u6253\u5F00\u4E0B\u4E00\u4E2A\u7B14\u8BB0", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u5173\u95ED\u6587\u4EF6\u9009\u5355\u4E2D\u7684\u590D\u4E60\u9009\u9879 \u4F8B\u5982\uFF1A\u590D\u4E60\uFF1A\u7B80\u5355 \u8BB0\u5F97 \u8F83\u96BE", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528\u5FEB\u6377\u952E\u5F00\u59CB\u590D\u4E60\u3002\u91CD\u65B0\u542F\u52A8Obsidian\u4F7F\u672C\u9009\u9879\u751F\u6548\u3002", - MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u8FB9\u680F\u4E2D\u663E\u793A\u7684\u6700\u5927\u5929\u6570", - MIN_ONE_DAY: "\u5929\u6570\u6700\u5C0F\u503C\u4E3A1", - VALID_NUMBER_WARNING: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57\u3002", - UI_PREFERENCES: "\u7528\u6237\u754C\u9762\u9996\u9009\u9879", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u7532\u677F\u6811\u6700\u521D\u5E94\u663E\u793A\u4E3A\u5C55\u5F00", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u53EF\u6298\u53E0\u540C\u4E00\u5F20\u5361\u7247\u4E2D\u7684\u5D4C\u5957\u724C\u7EC4\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C5E\u4E8E\u540C\u4E00\u6587\u4EF6\u4E2D\u7684\u8BB8\u591A\u5957\u724C\uFF0C\u5219\u5F88\u6709\u7528\u3002", - ALGORITHM: "\u7B97\u6CD5", - CHECK_ALGORITHM_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB\u7B97\u6CD5\u5B9E\u73B0.', - BASE_EASE: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6", - BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u8350\u503C\u7EA6250.", - BASE_EASE_MIN_WARNING: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u4E3A130\u3002", - LAPSE_INTERVAL_CHANGE: "\u5C06\u590D\u4E60\u65F6\u6807\u6CE8\u4E3A\u201C\u8F83\u96BE\u201D\u7684\u5361\u7247\u6216\u7B14\u8BB0\u590D\u4E60\u95F4\u9694\u7F29\u77ED", - LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u590D\u4E60\u95F4\u9694 = \u539F\u590D\u4E60\u95F4\u9694 * \u95F4\u9694\u6539\u53D8\u7CFB\u6570 / 100.", - EASY_BONUS: "\u7B80\u5355\u5956\u52B1", - EASY_BONUS_DESC: "\u7B80\u5355\u5956\u52B1\u8BBE\u5B9A\u201C\u8BB0\u5F97\u201D\u548C\u201C\u7B80\u5355\u201D\u5361\u7247\u6216\u7B14\u8BB0\u7684\u590D\u4E60\u95F4\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", - EASY_BONUS_MIN_WARNING: "\u7B80\u5355\u5956\u52B1\u81F3\u5C11\u4E3A100\u3002", - MAX_INTERVAL: "\u6700\u5927\u95F4\u9694\uFF08\u5929\uFF09", - MAX_INTERVAL_DESC: "\u8BBE\u5B9A\u590D\u4E60\u7684\u6700\u5927\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u503C100\u5E74\uFF09\u3002", - MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u95F4\u9694\u81F3\u5C11\u4E3A1\u5929", - MAX_LINK_CONTRIB: "\u6700\u5927\u94FE\u63A5\u6536\u76CA", - MAX_LINK_CONTRIB_DESC: "\u94FE\u63A5\u7B14\u8BB0\u7684\u52A0\u6743\u638C\u63E1\u7A0B\u5EA6\u5BF9\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8D21\u732E\u3002", - LOGGING: "\u8BB0\u5F55\u4E2D", - DISPLAY_DEBUG_INFO: "\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u8C03\u8BD5\u4FE1\u606F\uFF1F", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\u7B14\u8BB0\u590D\u4E60\u5E8F\u5217", - CLOSE: "\u4E34\u8FD1", - NEW: "\u65B0", - YESTERDAY: "\u6628\u5929", - TODAY: "\u4ECA\u5929", - TOMORROW: "\u660E\u5929", - // stats-modal.tsx - STATS_TITLE: "\u6570\u636E", - MONTH: "\u6708", - QUARTER: "\u5B63", - YEAR: "\u5E74", - LIFETIME: "\u5168\u90E8", - FORECAST: "\u9884\u671F", - FORECAST_DESC: "\u5C06\u8981\u5230\u671F\u7684\u5361\u7247\u6570\u91CF", - SCHEDULED: "\u5DF2\u6392\u671F", - DAYS: "\u5929", - NUMBER_OF_CARDS: "\u5361\u7247\u6570\u91CF", - REVIEWS_PER_DAY: "\u5E73\u5747: \u590D\u4E60${avg} /\u5929", - INTERVALS: "\u95F4\u9694", - INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u590D\u4E60\u7684\u65F6\u95F4\u95F4\u9694", - COUNT: "\u8BA1\u6570", - INTERVALS_SUMMARY: "\u5E73\u5747\u95F4\u9694\u65F6\u95F4: ${avg}, \u6700\u957F\u95F4\u9694\u65F6\u95F4: ${longest}", - EASES: "\u638C\u63E1\u7A0B\u5EA6", - EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", - CARD_TYPES: "\u5361\u7247\u7C7B\u578B", - CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C06\u663E\u793A\u9690\u85CF\u7684\u5361\u7247", - CARD_TYPE_NEW: "\u65B0", - CARD_TYPE_YOUNG: "\u8F83\u65B0", - CARD_TYPE_MATURE: "\u719F\u6089", - CARD_TYPES_SUMMARY: "\u603B\u5361\u7247\u6570: ${totalCardsCount}" -}; - -// src/lang/locale/zh-tw.ts -var zh_tw_default = { - // flashcard-modal.tsx - DECKS: "\u724C\u7D44", - DUE_CARDS: "\u5230\u671F\u5361\u7247", - NEW_CARDS: "\u65B0\u5361\u7247", - TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", - BACK: "\u8FD4\u56DE", - SKIP: "\u7565\u904E", - EDIT_CARD: "\u7DE8\u8F2F\u5361\u7247", - RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", - HARD: "\u8F03\u96E3", - GOOD: "\u8A18\u5F97", - EASY: "\u7C21\u55AE", - SHOW_ANSWER: "\u986F\u793A\u7B54\u6848", - CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", - SAVE: "\u5132\u5B58", - CANCEL: "\u53D6\u6D88", - NO_INPUT: "\u6C92\u6709\u63D0\u4F9B\u8F38\u5165\u3002", - CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", - CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u9593\u9694\u6642\u9593\uFF1A", - CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", - // main.ts - OPEN_NOTE_FOR_REVIEW: "\u6253\u958B\u4E00\u500B\u7B46\u8A18\u958B\u59CB\u5FA9\u7FD2", - REVIEW_CARDS: "\u5FA9\u7FD2\u5361\u7247", - REVIEW_EASY_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u7C21\u55AE", - REVIEW_GOOD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8A18\u5F97", - REVIEW_HARD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8F03\u96E3", - REVIEW_NOTE_EASY_CMD: "\u6A19\u8A18\u70BA\u300C\u7C21\u55AE\u300D", - REVIEW_NOTE_GOOD_CMD: "\u6A19\u8A18\u70BA\u300C\u8A18\u5F97\u300D", - REVIEW_NOTE_HARD_CMD: "\u6A19\u8A18\u70BA\u300C\u8F03\u96E3\u300D", - REVIEW_CARDS_IN_NOTE: "\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", - CRAM_ALL_CARDS: "\u9078\u64C7\u8981\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u7684\u724C\u7D44", - REVIEW_ALL_CARDS: "\u5FA9\u7FD2\u6240\u6709\u7B46\u8A18\u4E2D\u7684\u5361\u7247", - CRAM_CARDS_IN_NOTE: "\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", - VIEW_STATS: "\u6AA2\u8996\u6578\u64DA", - STATUS_BAR: "\u5FA9\u7FD2: ${dueNotesCount} \u7B46\u8A18, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", - SYNC_TIME_TAKEN: "\u540C\u6B65\u6642\u9593 ${t}ms", - NOTE_IN_IGNORED_FOLDER: "\u7B46\u8A18\u5132\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F91\u4E2D\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", - PLEASE_TAG_NOTE: "\u8ACB\u5C07\u9700\u8981\u5FA9\u7FD2\u7684\u7B46\u8A18\u4E2D\u52A0\u5165\u6B63\u78BA\u7684\u6A19\u7C64\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", - RESPONSE_RECEIVED: "\u56DE\u994B\u5DF2\u6536\u5230", - NO_DECK_EXISTS: "\u6C92\u6709 ${deckName} \u724C\u7D44", - ALL_CAUGHT_UP: "\u90FD\u5FA9\u7FD2\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", - // scheduling.ts - DAYS_STR_IVL: "${interval}\u5929", - MONTHS_STR_IVL: "${interval}\u6708", - YEARS_STR_IVL: "${interval}\u5E74", - DAYS_STR_IVL_MOBILE: "${interval}\u5929", - MONTHS_STR_IVL_MOBILE: "${interval}\u6708", - YEARS_STR_IVL_MOBILE: "${interval}\u5E74", - // settings.ts - SETTINGS_HEADER: "\u9593\u9694\u91CD\u8907\u5916\u639B - \u8A2D\u5B9A", - CHECK_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078wiki.', - FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u8CC7\u6599\u593E", - FOLDERS_TO_IGNORE_DESC: "\u8F38\u5165\u8CC7\u6599\u593E\u8DEF\u5F91\uFF08\u7528\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts", - FLASHCARDS: "\u5361\u7247", - FLASHCARD_EASY_LABEL: "\u7C21\u55AE\u6309\u9215\u6587\u5B57", - FLASHCARD_GOOD_LABEL: "\u8A18\u5F97\u6309\u9215\u6587\u5B57", - FLASHCARD_HARD_LABEL: "\u8F03\u96E3\u6309\u9215\u6587\u5B57", - FLASHCARD_EASY_DESC: "\u81EA\u8A02\u300C\u7C21\u55AE\u300D\u6309\u9215\u7684\u6A19\u7C64", - FLASHCARD_GOOD_DESC: "\u81EA\u8A02\u300C\u8A18\u5F97\u300D\u6309\u9215\u7684\u6A19\u7C64", - FLASHCARD_HARD_DESC: "\u81EA\u8A02\u300C\u8F03\u96E3\u300D\u6309\u9215\u7684\u6A19\u7C64", - FLASHCARD_TAGS: "\u5361\u7247\u6A19\u7C64", - FLASHCARD_TAGS_DESC: "\u8F38\u5165\u6A19\u7C64\uFF08\u7528\u7A7A\u767D\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", - CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C07\u8CC7\u6599\u593E\u5167\u5BB9\u8F49\u63DB\u70BA\u724C\u7D44\u548C\u5B50\u724C\u7D44\uFF1F", - CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9078\u9805\u70BA\u5361\u7247\u6A19\u7C64\u9078\u9805\u7684\u66FF\u4EE3\u9078\u9805\u3002", - INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C07\u8A08\u5283\u91CD\u8907\u6642\u9593\u5132\u5B58\u5728\u5361\u7247\u6700\u5F8C\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", - INLINE_SCHEDULING_COMMENTS_DESC: "\u52FE\u9078\u5F8CHTML\u8A3B\u89E3\u4E0D\u6703\u7834\u58DE\u5217\u8868\u683C\u5F0F\u554F\u984C\u3002", - BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C07\u53CD\u8F49\u5361\u7247\u96B1\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", - BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u53CD\u8F49\u5361\u7247\u7531\u540C\u4E00\u5361\u7247\u6587\u5B57\u7522\u751F\uFF0C\u4F8B\u5982\uFF1A\u586B\u7A7A\u514B\u6F0F\u5B57", - SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u986F\u793A\u4E0A\u4E0B\u6587\uFF1F", - SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6A19\u984C > \u526F\u6A19\u984C > \u5C0F\u6A19\u984C > ... > \u5C0F\u6A19\u984C", - CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", - CARD_MODAL_SIZE_PERCENT_DESC: "\u5728\u79FB\u52D5\u7AEF\u6216\u9700\u8981\u8F03\u5927\u5716\u7247\u6642\u61C9\u8A2D\u5B9A\u70BA100%", - RESET_DEFAULT: "\u91CD\u7F6E\u70BA\u9810\u8A2D\u503C", - CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BEC\u5EA6\u767E\u5206\u6BD4", - RANDOMIZE_CARD_ORDER: "\u5FA9\u7FD2\u6642\u96A8\u6A5F\u986F\u793A\u5361\u7247\uFF1F", - DISABLE_CLOZE_CARDS: "\u505C\u7528\u586B\u7A7A\u514B\u6F0F\u5B57\u5361\u7247\uFF1F", - CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C07 ==\u9AD8\u4EAE== \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", - CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C07 **\u7C97\u9AD4** \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", - CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C07 {{\u5927\u62EC\u865F}} \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", - INLINE_CARDS_SEPARATOR: "\u55AE\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", - FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9078\u9805\u5F8C\u4F60\u5C07\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u5B57\u5143\u3002", - INLINE_REVERSED_CARDS_SEPARATOR: "\u55AE\u884C\u53CD\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", - MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", - MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", - NOTES: "\u7B46\u8A18", - REVIEW_PANE_ON_STARTUP: "\u555F\u52D5\u6642\u958B\u555F\u7B46\u8A18\u5FA9\u7FD2\u7A97\u683C", - TAGS_TO_REVIEW: "\u5FA9\u7FD2\u6A19\u7C64", - TAGS_TO_REVIEW_DESC: "\u8F38\u5165\u6A19\u7C64\uFF0C\u7528\u7A7A\u683C\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", - OPEN_RANDOM_NOTE: "\u5FA9\u7FD2\u96A8\u6A5F\u7B46\u8A18", - OPEN_RANDOM_NOTE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\uFF0C\u7B46\u8A18\u5C07\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", - AUTO_NEXT_NOTE: "\u5FA9\u7FD2\u5F8C\u81EA\u52D5\u6253\u958B\u4E0B\u4E00\u500B\u7B46\u8A18", - DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u4E2D\u7684\u5FA9\u7FD2\u9078\u9805 \u4F8B\u5982\uFF1A\u5FA9\u7FD2\uFF1A\u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3", - DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u7684\u5FA9\u7FD2\u9078\u9805\uFF0C\u4F8B\u5982\uFF1A\u5FA9\u7FD2: \u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3\u3002", - MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u908A\u9762\u677F\u986F\u793A\u7684\u6700\u5927\u5929\u6578", - MIN_ONE_DAY: "\u5929\u6578\u6700\u5C0F\u503C\u70BA1", - VALID_NUMBER_WARNING: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u6578\u5B57\u3002", - UI_PREFERENCES: "\u7528\u6236\u4ECB\u9762\u9996\u9078\u9805", - INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u724C\u7D44\u6A39\u6700\u521D\u61C9\u986F\u793A\u70BA\u5C55\u958B", - INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\u53EF\u647A\u758A\u540C\u4E00\u5F35\u5361\u7247\u4E2D\u7684\u5DE2\u72C0\u724C\u7D44\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C6C\u65BC\u540C\u4E00\u6A94\u6848\u4E2D\u7684\u8A31\u591A\u5957\u724C\uFF0C\u5247\u5F88\u6709\u7528\u3002", - ALGORITHM: "\u6F14\u7B97\u6CD5", - CHECK_ALGORITHM_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078\u7B97\u6CD5\u5BE6\u73FE.', - BASE_EASE: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6", - BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u85A6\u503C\u7D04250.", - BASE_EASE_MIN_WARNING: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u70BA130\u3002", - LAPSE_INTERVAL_CHANGE: "\u5C07\u5FA9\u7FD2\u6642\u6A19\u8A3B\u70BA\u300C\u8F03\u96E3\u300D\u7684\u5361\u7247\u6216\u7B46\u8A18\u5FA9\u7FD2\u9593\u9694\u7E2E\u77ED", - LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u5FA9\u7FD2\u9593\u9694 = \u539F\u5FA9\u7FD2\u9593\u9694 * \u9593\u9694\u6539\u8B8A\u4FC2\u6578 / 100.", - EASY_BONUS: "\u7C21\u55AE\u734E\u52F5", - EASY_BONUS_DESC: "\u7C21\u55AE\u734E\u52F5\u8A2D\u5B9A\u300C\u8A18\u5F97\u300D\u548C\u300C\u7C21\u55AE\u300D\u5361\u7247\u6216\u7B46\u8A18\u7684\u5FA9\u7FD2\u9593\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", - EASY_BONUS_MIN_WARNING: "\u7C21\u55AE\u734E\u52F5\u81F3\u5C11\u70BA100\u3002", - MAX_INTERVAL: "\u6700\u5927\u9593\u9694\uFF08\u5929\uFF09", - MAX_INTERVAL_DESC: "\u8A2D\u5B9A\u5FA9\u7FD2\u7684\u6700\u5927\u9593\u9694\u6642\u9593\uFF08\u9810\u8A2D\u503C100\u5E74\uFF09\u3002", - MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u9593\u9694\u81F3\u5C11\u70BA1\u5929", - MAX_LINK_CONTRIB: "\u6700\u5927\u93C8\u63A5\u8CA2\u737B", - MAX_LINK_CONTRIB_DESC: "\u93C8\u63A5\u7B46\u8A18\u7684\u52A0\u6B0A\u638C\u63E1\u7A0B\u5EA6\u5C0D\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8CA2\u737B\u3002", - LOGGING: "\u8A18\u9304\u4E2D", - DISPLAY_DEBUG_INFO: "\u5728\u958B\u767C\u8005\u63A7\u5236\u53F0\u4E2D\u986F\u793A\u9664\u932F\u8CC7\u8A0A\uFF1F", - // sidebar.ts - NOTES_REVIEW_QUEUE: "\u7B46\u8A18\u5FA9\u7FD2\u5E8F\u5217", - CLOSE: "\u81E8\u8FD1", - NEW: "\u65B0", - YESTERDAY: "\u6628\u5929", - TODAY: "\u4ECA\u5929", - TOMORROW: "\u660E\u5929", - // stats-modal.tsx - STATS_TITLE: "\u7D71\u8A08", - MONTH: "\u6708", - QUARTER: "\u5B63", - YEAR: "\u5E74", - LIFETIME: "\u5168\u90E8", - FORECAST: "\u9810\u6E2C", - FORECAST_DESC: "\u5C07\u8981\u5230\u671F\u7684\u5361\u7247\u6578\u91CF", - SCHEDULED: "\u5DF2\u6392\u7A0B", - DAYS: "\u5929", - NUMBER_OF_CARDS: "\u5361\u7247\u6578\u91CF", - REVIEWS_PER_DAY: "\u5E73\u5747: \u5FA9\u7FD2${avg} /\u5929", - INTERVALS: "\u9593\u9694", - INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u5FA9\u7FD2\u7684\u6642\u9593\u9593\u9694", - COUNT: "\u8A08\u6578", - INTERVALS_SUMMARY: "\u5E73\u5747\u9593\u9694\u6642\u9593: ${avg}, \u6700\u9577\u9593\u9694\u6642\u9593: ${longest}", - EASES: "\u638C\u63E1\u7A0B\u5EA6", - EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", - CARD_TYPES: "\u5361\u7247\u578B\u5225", - CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C07\u986F\u793A\u96B1\u85CF\u7684\u5361\u7247", - CARD_TYPE_NEW: "\u65B0", - CARD_TYPE_YOUNG: "\u8F03\u65B0", - CARD_TYPE_MATURE: "\u719F\u6089", - CARD_TYPES_SUMMARY: "\u7E3D\u5361\u7247\u6578: ${totalCardsCount}" -}; - -// src/lang/helpers.ts -var localeMap = { - af: af_default, - ar: ar_default, - bn: bn_default, - cs: cz_default, - da: da_default, - de: de_default, - en: en_default, - "en-gb": en_gb_default, - es: es_default, - fr: fr_default, - hi: hi_default, - id: id_default, - it: it_default, - ja: ja_default, - ko: ko_default, - mr: mr_default, - nl: nl_default, - nn: no_default, - pl: pl_default, - pt: pt_default, - "pt-br": pt_br_default, - ro: ro_default, - ru: ru_default, - ta: ta_default, - te: te_default, - th: th_default, - tr: tr_default, - uk: uk_default, - ur: ur_default, - vi: vi_default, - "zh-cn": zh_cn_default, - "zh-tw": zh_tw_default -}; -var locale = localeMap[import_obsidian.moment.locale()]; -function interpolate(str, params) { - const names2 = Object.keys(params); - const vals = Object.values(params); - return new Function(...names2, `return \`${str}\`;`)(...vals); -} -function t(str, params) { - if (!locale) { - console.error(`SRS error: Locale ${import_obsidian.moment.locale()} not found.`); - } - const result = locale && locale[str] || en_default[str]; - if (params) { - return interpolate(result, params); - } - return result; -} - -// src/settings.ts -var DEFAULT_SETTINGS = { - // flashcards - flashcardEasyText: t("EASY"), - flashcardGoodText: t("GOOD"), - flashcardHardText: t("HARD"), - flashcardImpossibleText: t("IMPOSSIBLE"), - flashcardTags: ["#flashcards"], - convertFoldersToDecks: false, - cardCommentOnSameLine: false, - burySiblingCards: false, - showContextInCards: true, - flashcardHeightPercentage: import_obsidian2.Platform.isMobile ? 100 : 80, - flashcardWidthPercentage: import_obsidian2.Platform.isMobile ? 100 : 40, - randomizeCardOrder: true, - convertHighlightsToClozes: true, - convertBoldTextToClozes: false, - convertCurlyBracketsToClozes: false, - singleLineCardSeparator: "::", - singleLineReversedCardSeparator: ":::", - multilineCardSeparator: "?", - multilineReversedCardSeparator: "??", - editLaterTag: "#edit-later", - // notes - enableNoteReviewPaneOnStartup: true, - tagsToReview: ["#review"], - noteFoldersToIgnore: [], - openRandomNote: false, - autoNextNote: false, - disableFileMenuReviewOptions: false, - maxNDaysNotesReviewQueue: 365, - // UI settings - initiallyExpandAllSubdecksInTree: false, - // algorithm - baseEase: 250, - lapsesIntervalChange: 0.5, - easyBonus: 1.3, - maximumInterval: 36525, - maxLinkFactor: 1, - // logging - showDebugMessages: false -}; -var applyDebounceTimer = 0; -function applySettingsUpdate(callback2) { - clearTimeout(applyDebounceTimer); - applyDebounceTimer = window.setTimeout(callback2, 512); -} -var SRSettingTab = class extends import_obsidian2.PluginSettingTab { - constructor(app2, plugin) { - super(app2, plugin); - this.plugin = plugin; - } - display() { - const { containerEl } = this; - containerEl.empty(); - const header = containerEl.createEl("h1", { text: `${t("SETTINGS_HEADER")}` }); - header.addClass("sr-centered"); - containerEl.createDiv().innerHTML = t("CHECK_WIKI", { - wiki_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/" - }); - new import_obsidian2.Setting(containerEl).setName(t("FOLDERS_TO_IGNORE")).setDesc(t("FOLDERS_TO_IGNORE_DESC")).addTextArea( - (text) => text.setValue(this.plugin.data.settings.noteFoldersToIgnore.join("\n")).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.noteFoldersToIgnore = value.split(/\n+/).map((v) => v.trim()).filter((v) => v); - await this.plugin.savePluginData(); - }); - }) - ); - containerEl.createEl("h3", { text: `${t("FLASHCARDS")}` }); - new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_TAGS")).setDesc(t("FLASHCARD_TAGS_DESC")).addTextArea( - (text) => text.setValue(this.plugin.data.settings.flashcardTags.join(" ")).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.flashcardTags = value.split(/\s+/); - await this.plugin.savePluginData(); - }); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("CONVERT_FOLDERS_TO_DECKS")).setDesc(t("CONVERT_FOLDERS_TO_DECKS_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.convertFoldersToDecks).onChange(async (value) => { - this.plugin.data.settings.convertFoldersToDecks = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("INLINE_SCHEDULING_COMMENTS")).setDesc(t("INLINE_SCHEDULING_COMMENTS_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.cardCommentOnSameLine).onChange(async (value) => { - this.plugin.data.settings.cardCommentOnSameLine = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("BURY_SIBLINGS_TILL_NEXT_DAY")).setDesc(t("BURY_SIBLINGS_TILL_NEXT_DAY_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.burySiblingCards).onChange(async (value) => { - this.plugin.data.settings.burySiblingCards = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("SHOW_CARD_CONTEXT")).setDesc(t("SHOW_CARD_CONTEXT_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.showContextInCards).onChange(async (value) => { - this.plugin.data.settings.showContextInCards = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_HEIGHT_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider( - (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardHeightPercentage).setDynamicTooltip().onChange(async (value) => { - this.plugin.data.settings.flashcardHeightPercentage = value; - await this.plugin.savePluginData(); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.flashcardHeightPercentage = DEFAULT_SETTINGS.flashcardHeightPercentage; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_WIDTH_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider( - (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardWidthPercentage).setDynamicTooltip().onChange(async (value) => { - this.plugin.data.settings.flashcardWidthPercentage = value; - await this.plugin.savePluginData(); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.flashcardWidthPercentage = DEFAULT_SETTINGS.flashcardWidthPercentage; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("RANDOMIZE_CARD_ORDER")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.randomizeCardOrder).onChange(async (value) => { - this.plugin.data.settings.randomizeCardOrder = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("CONVERT_HIGHLIGHTS_TO_CLOZES")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.convertHighlightsToClozes).onChange(async (value) => { - this.plugin.data.settings.convertHighlightsToClozes = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("CONVERT_BOLD_TEXT_TO_CLOZES")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.convertBoldTextToClozes).onChange(async (value) => { - this.plugin.data.settings.convertBoldTextToClozes = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("CONVERT_CURLY_BRACKETS_TO_CLOZES")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.convertCurlyBracketsToClozes).onChange(async (value) => { - this.plugin.data.settings.convertCurlyBracketsToClozes = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("INLINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( - (text) => text.setValue(this.plugin.data.settings.singleLineCardSeparator).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.singleLineCardSeparator = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.singleLineCardSeparator = DEFAULT_SETTINGS.singleLineCardSeparator; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("INLINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( - (text) => text.setValue(this.plugin.data.settings.singleLineReversedCardSeparator).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.singleLineReversedCardSeparator = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.singleLineReversedCardSeparator = DEFAULT_SETTINGS.singleLineReversedCardSeparator; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( - (text) => text.setValue(this.plugin.data.settings.multilineCardSeparator).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.multilineCardSeparator = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.multilineCardSeparator = DEFAULT_SETTINGS.multilineCardSeparator; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( - (text) => text.setValue(this.plugin.data.settings.multilineReversedCardSeparator).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.multilineReversedCardSeparator = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.multilineReversedCardSeparator = DEFAULT_SETTINGS.multilineReversedCardSeparator; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_EASY_LABEL")).setDesc(t("FLASHCARD_EASY_DESC")).addText( - (text) => text.setValue(this.plugin.data.settings.flashcardEasyText).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.flashcardEasyText = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.flashcardEasyText = DEFAULT_SETTINGS.flashcardEasyText; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_GOOD_LABEL")).setDesc(t("FLASHCARD_GOOD_DESC")).addText( - (text) => text.setValue(this.plugin.data.settings.flashcardGoodText).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.flashcardGoodText = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.flashcardGoodText = DEFAULT_SETTINGS.flashcardGoodText; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_HARD_LABEL")).setDesc(t("FLASHCARD_HARD_DESC")).addText( - (text) => text.setValue(this.plugin.data.settings.flashcardHardText).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.flashcardHardText = value; - await this.plugin.savePluginData(); - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.flashcardHardText = DEFAULT_SETTINGS.flashcardHardText; - await this.plugin.savePluginData(); - this.display(); - }); - }); - containerEl.createEl("h3", { text: `${t("NOTES")}` }); - new import_obsidian2.Setting(containerEl).setName(t("REVIEW_PANE_ON_STARTUP")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.enableNoteReviewPaneOnStartup).onChange(async (value) => { - this.plugin.data.settings.enableNoteReviewPaneOnStartup = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("TAGS_TO_REVIEW")).setDesc(t("TAGS_TO_REVIEW_DESC")).addTextArea( - (text) => text.setValue(this.plugin.data.settings.tagsToReview.join(" ")).onChange((value) => { - applySettingsUpdate(async () => { - this.plugin.data.settings.tagsToReview = value.split(/\s+/); - await this.plugin.savePluginData(); - }); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("OPEN_RANDOM_NOTE")).setDesc(t("OPEN_RANDOM_NOTE_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.openRandomNote).onChange(async (value) => { - this.plugin.data.settings.openRandomNote = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("AUTO_NEXT_NOTE")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.autoNextNote).onChange(async (value) => { - this.plugin.data.settings.autoNextNote = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("DISABLE_FILE_MENU_REVIEW_OPTIONS")).setDesc(t("DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.disableFileMenuReviewOptions).onChange(async (value) => { - this.plugin.data.settings.disableFileMenuReviewOptions = value; - await this.plugin.savePluginData(); - }) - ); - new import_obsidian2.Setting(containerEl).setName(t("MAX_N_DAYS_REVIEW_QUEUE")).addText( - (text) => text.setValue(this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()).onChange((value) => { - applySettingsUpdate(async () => { - const numValue = Number.parseInt(value); - if (!isNaN(numValue)) { - if (numValue < 1) { - new import_obsidian2.Notice(t("MIN_ONE_DAY")); - text.setValue( - this.plugin.data.settings.maxNDaysNotesReviewQueue.toString() - ); - return; - } - this.plugin.data.settings.maxNDaysNotesReviewQueue = numValue; - await this.plugin.savePluginData(); - } else { - new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); - } - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.maxNDaysNotesReviewQueue = DEFAULT_SETTINGS.maxNDaysNotesReviewQueue; - await this.plugin.savePluginData(); - this.display(); - }); - }); - containerEl.createEl("h3", { text: `${t("UI_PREFERENCES")}` }); - new import_obsidian2.Setting(containerEl).setName(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE")).setDesc(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.initiallyExpandAllSubdecksInTree).onChange(async (value) => { - this.plugin.data.settings.initiallyExpandAllSubdecksInTree = value; - await this.plugin.savePluginData(); - }) - ); - containerEl.createEl("h3", { text: `${t("ALGORITHM")}` }); - containerEl.createDiv().innerHTML = t("CHECK_ALGORITHM_WIKI", { - algo_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/algorithms/" - }); - new import_obsidian2.Setting(containerEl).setName(t("BASE_EASE")).setDesc(t("BASE_EASE_DESC")).addText( - (text) => text.setValue(this.plugin.data.settings.baseEase.toString()).onChange((value) => { - applySettingsUpdate(async () => { - const numValue = Number.parseInt(value); - if (!isNaN(numValue)) { - if (numValue < 130) { - new import_obsidian2.Notice(t("BASE_EASE_MIN_WARNING")); - text.setValue(this.plugin.data.settings.baseEase.toString()); - return; - } - this.plugin.data.settings.baseEase = numValue; - await this.plugin.savePluginData(); - } else { - new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); - } - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.baseEase = DEFAULT_SETTINGS.baseEase; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("LAPSE_INTERVAL_CHANGE")).setDesc(t("LAPSE_INTERVAL_CHANGE_DESC")).addSlider( - (slider) => slider.setLimits(1, 99, 1).setValue(this.plugin.data.settings.lapsesIntervalChange * 100).setDynamicTooltip().onChange(async (value) => { - this.plugin.data.settings.lapsesIntervalChange = value / 100; - await this.plugin.savePluginData(); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.lapsesIntervalChange = DEFAULT_SETTINGS.lapsesIntervalChange; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("EASY_BONUS")).setDesc(t("EASY_BONUS_DESC")).addText( - (text) => text.setValue((this.plugin.data.settings.easyBonus * 100).toString()).onChange((value) => { - applySettingsUpdate(async () => { - const numValue = Number.parseInt(value) / 100; - if (!isNaN(numValue)) { - if (numValue < 1) { - new import_obsidian2.Notice(t("EASY_BONUS_MIN_WARNING")); - text.setValue( - (this.plugin.data.settings.easyBonus * 100).toString() - ); - return; - } - this.plugin.data.settings.easyBonus = numValue; - await this.plugin.savePluginData(); - } else { - new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); - } - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.easyBonus = DEFAULT_SETTINGS.easyBonus; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("MAX_INTERVAL")).setDesc(t("MAX_INTERVAL_DESC")).addText( - (text) => text.setValue(this.plugin.data.settings.maximumInterval.toString()).onChange((value) => { - applySettingsUpdate(async () => { - const numValue = Number.parseInt(value); - if (!isNaN(numValue)) { - if (numValue < 1) { - new import_obsidian2.Notice(t("MAX_INTERVAL_MIN_WARNING")); - text.setValue( - this.plugin.data.settings.maximumInterval.toString() - ); - return; - } - this.plugin.data.settings.maximumInterval = numValue; - await this.plugin.savePluginData(); - } else { - new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); - } - }); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.maximumInterval = DEFAULT_SETTINGS.maximumInterval; - await this.plugin.savePluginData(); - this.display(); - }); - }); - new import_obsidian2.Setting(containerEl).setName(t("MAX_LINK_CONTRIB")).setDesc(t("MAX_LINK_CONTRIB_DESC")).addSlider( - (slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.data.settings.maxLinkFactor * 100).setDynamicTooltip().onChange(async (value) => { - this.plugin.data.settings.maxLinkFactor = value / 100; - await this.plugin.savePluginData(); - }) - ).addExtraButton((button) => { - button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { - this.plugin.data.settings.maxLinkFactor = DEFAULT_SETTINGS.maxLinkFactor; - await this.plugin.savePluginData(); - this.display(); - }); - }); - containerEl.createEl("h3", { text: `${t("LOGGING")}` }); - new import_obsidian2.Setting(containerEl).setName(t("DISPLAY_DEBUG_INFO")).addToggle( - (toggle) => toggle.setValue(this.plugin.data.settings.showDebugMessages).onChange(async (value) => { - this.plugin.data.settings.showDebugMessages = value; - await this.plugin.savePluginData(); - }) - ); - } -}; - -// src/flashcard-modal.tsx -var import_obsidian3 = require("obsidian"); -var import_vhtml = __toESM(require_vhtml()); - -// src/constants.ts -var SCHEDULING_INFO_REGEX = /^---\n((?:.*\n)*)sr-due: (.+)\nsr-interval: (\d+)\nsr-ease: (\d+)\n((?:.*\n)?)---/; -var YAML_FRONT_MATTER_REGEX = /^---\n((?:.*\n)*?)---/; -var MULTI_SCHEDULING_EXTRACTOR = /!([-\d :]+),(\d+),(\d+)/gm; -var LEGACY_SCHEDULING_EXTRACTOR = //gm; -var MINUTES_PER_DAY = 24 * 60; -var IMAGE_FORMATS = [ - "jpg", - "jpeg", - "gif", - "png", - "svg", - "webp", - "apng", - "avif", - "jfif", - "pjpeg", - "pjp", - "bmp" -]; -var AUDIO_FORMATS = ["mp3", "webm", "m4a", "wav", "ogg"]; -var VIDEO_FORMATS = ["mp4", "mkv", "avi", "mov"]; -var COLLAPSE_ICON = ''; - -// src/scheduling.ts -function schedule(response, interval, ease, delayBeforeReview, settingsObj, dueDates) { - const minutesBeforeReview = Math.max(0, Math.floor(delayBeforeReview / (60 * 1e3))); - if (interval < MINUTES_PER_DAY) { - if (response === 0 /* Easy */) { - ease += 20; - interval = MINUTES_PER_DAY; - } else if (response === 1 /* Good */) { - interval = 10; - } else if (response === 2 /* Hard */) { - interval = 5; - ease = Math.max(settingsObj.baseEase, ease - 20); - } else { - interval = 1; - ease = Math.max(settingsObj.baseEase, ease - 20); - } - } else { - if (response === 0 /* Easy */) { - ease += 20; - interval = (interval + minutesBeforeReview) * ease / 100; - interval *= settingsObj.easyBonus; - } else if (response === 1 /* Good */) { - interval = (interval + minutesBeforeReview / 2) * ease / 100; - } else if (response === 2 /* Hard */) { - ease = Math.max(settingsObj.baseEase, ease - 20); - interval = Math.max( - 1, - (interval + minutesBeforeReview / 4) * settingsObj.lapsesIntervalChange - ); - } else { - ease = Math.max(settingsObj.baseEase, ease - 20); - interval = 5; - } - } - interval = roundInterval(interval, settingsObj.maximumInterval); - if (dueDates !== void 0) { - const dayInterval = Math.round(interval / MINUTES_PER_DAY); - if (!Object.prototype.hasOwnProperty.call(dueDates, dayInterval)) { - dueDates[dayInterval] = 0; - } else { - if (interval > 4 * MINUTES_PER_DAY) { - let fuzz = 0; - if (interval <= 7 * MINUTES_PER_DAY) { - fuzz = MINUTES_PER_DAY; - } else if (interval <= 30 * MINUTES_PER_DAY) { - fuzz = Math.max(2 * MINUTES_PER_DAY, Math.floor(interval * 0.15)); - } else { - fuzz = Math.max(4 * MINUTES_PER_DAY, Math.floor(interval * 0.05)); - } - const originalInterval = interval; - outer: - for (let i = MINUTES_PER_DAY; i <= fuzz; i += MINUTES_PER_DAY) { - for (let ivl of [originalInterval - i, originalInterval + i]) { - ivl = roundInterval(ivl, settingsObj.maximumInterval); - const dayIvl = Math.round(ivl / MINUTES_PER_DAY); - if (!Object.prototype.hasOwnProperty.call(dueDates, dayIvl)) { - dueDates[dayIvl] = 0; - interval = ivl; - break outer; - } - if (dueDates[dayIvl] < dueDates[dayInterval]) - interval = ivl; - } - } - } - } - dueDates[Math.round(interval / MINUTES_PER_DAY)]++; - } - return { interval: Math.round(interval * 10) / 10, ease }; -} -function textInterval(interval, isMobile) { - if (interval === void 0) { - return t("NEW"); - } - const days = Math.round(interval / (24 * 60)), months = Math.round(days / 3.04375) / 10, years = Math.round(days / 36.525) / 10; - if (isMobile) { - if (days < 1) - return t("MINUTES_STR_IVL_MOBILE", { interval }); - if (months < 1) - return t("DAYS_STR_IVL_MOBILE", { interval: days }); - if (years < 1) - return t("MONTHS_STR_IVL_MOBILE", { interval: months }); - return t("YEARS_STR_IVL_MOBILE", { interval: years }); - } else { - if (days < 1) - return t("MINUTES_STR_IVL", { interval }); - if (months < 1) - return t("DAYS_STR_IVL", { interval: days }); - if (years < 1) - return t("MONTHS_STR_IVL", { interval: months }); - return t("YEARS_STR_IVL", { interval: years }); - } -} -function roundInterval(interval, maximumInterval) { - interval = Math.round(interval); - interval = Math.min(interval, maximumInterval * MINUTES_PER_DAY); - if (interval < 5) { - interval = 1; - } else if (interval < 10) { - interval = 5; - } else if (interval < MINUTES_PER_DAY / 3) { - interval = 10; - } else if (interval < MINUTES_PER_DAY) { - interval = MINUTES_PER_DAY; - } - return interval; -} - -// src/utils.ts -function getTypedObjectEntries(obj) { - return Object.entries(obj); -} -var getKeysPreserveType = Object.keys; -var escapeRegexString = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); -function cyrb53(str, seed = 0) { - let h12 = 3735928559 ^ seed, h22 = 1103547991 ^ seed; - for (let i = 0, ch; i < str.length; i++) { - ch = str.charCodeAt(i); - h12 = Math.imul(h12 ^ ch, 2654435761); - h22 = Math.imul(h22 ^ ch, 1597334677); - } - h12 = Math.imul(h12 ^ h12 >>> 16, 2246822507) ^ Math.imul(h22 ^ h22 >>> 13, 3266489909); - h22 = Math.imul(h22 ^ h22 >>> 16, 2246822507) ^ Math.imul(h12 ^ h12 >>> 13, 3266489909); - return (4294967296 * (2097151 & h22) + (h12 >>> 0)).toString(16); -} - -// src/flashcard-modal.tsx -var import_heap = __toESM(require_heap2()); -var FlashcardEditModal = class extends import_obsidian3.Modal { - constructor(app2, plugin, existingText) { - super(app2); - this.didSubmit = false; - this.submitClickCallback = (_) => this.submit(); - this.cancelClickCallback = (_) => this.cancel(); - this.submitEnterCallback = (evt) => { - if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") { - evt.preventDefault(); - this.submit(); - } - }; - this.plugin = plugin; - this.titleEl.setText(t("EDIT_CARD")); - this.titleEl.addClass("sr-centered"); - this.modalText = existingText; - this.waitForClose = new Promise((resolve2, reject) => { - this.resolvePromise = resolve2; - this.rejectPromise = reject; - }); - this.display(); - this.open(); - } - static Prompt(app2, plugin, placeholder) { - const newPromptModal = new FlashcardEditModal(app2, plugin, placeholder); - return newPromptModal.waitForClose; - } - display() { - this.contentEl.empty(); - this.modalEl.addClass("sr-flashcard-input-modal"); - const mainContentContainer = this.contentEl.createDiv(); - mainContentContainer.addClass("sr-flashcard-input-area"); - this.inputComponent = this.createInputField(mainContentContainer, this.modalText); - this.createButtonBar(mainContentContainer); - } - createButton(container, text, callback2) { - const btn = new import_obsidian3.ButtonComponent(container); - btn.setButtonText(text).onClick(callback2); - return btn; - } - createButtonBar(mainContentContainer) { - const buttonBarContainer = mainContentContainer.createDiv(); - buttonBarContainer.addClass("sr-flashcard-edit-button-bar"); - this.createButton( - buttonBarContainer, - t("SAVE"), - this.submitClickCallback - ).setCta().buttonEl.style.marginRight = "0"; - this.createButton(buttonBarContainer, t("CANCEL"), this.cancelClickCallback); - } - createInputField(container, value) { - const textComponent = new import_obsidian3.TextAreaComponent(container); - textComponent.inputEl.style.width = "100%"; - textComponent.setValue(value != null ? value : "").onChange((value2) => this.input = value2).inputEl.addEventListener("keydown", this.submitEnterCallback); - return textComponent; - } - submit() { - this.didSubmit = true; - this.close(); - } - cancel() { - this.close(); - } - onOpen() { - super.onOpen(); - this.inputComponent.inputEl.focus(); - } - onClose() { - super.onClose(); - this.resolveInput(); - this.removeInputListener(); - } - resolveInput() { - if (!this.didSubmit) - this.rejectPromise(t("NO_INPUT")); - else - this.resolvePromise(this.input); - } - removeInputListener() { - this.inputComponent.inputEl.removeEventListener("keydown", this.submitEnterCallback); - } -}; -var FlashcardModal = class extends import_obsidian3.Modal { - constructor(app2, plugin, ignoreStats = false) { - super(app2); - this.plugin = plugin; - this.ignoreStats = ignoreStats; - this.titleEl.setText(t("DECKS")); - this.titleEl.addClass("sr-centered"); - if (import_obsidian3.Platform.isMobile) { - this.contentEl.style.display = "block"; - } - this.modalEl.style.height = this.plugin.data.settings.flashcardHeightPercentage + "%"; - this.modalEl.style.width = this.plugin.data.settings.flashcardWidthPercentage + "%"; - this.contentEl.style.position = "relative"; - this.contentEl.style.height = "92%"; - this.contentEl.addClass("sr-modal-content"); - document.body.onkeydown = (e) => { - if (document.activeElement.nodeName !== "TEXTAREA" && this.mode !== 0 /* DecksList */) { - const consume = () => { - e.preventDefault(); - e.stopPropagation(); - }; - if (this.mode !== 3 /* Closed */ && e.code === "KeyS") { - this.skipCurrentCard(); - consume(); - } else if (this.mode === 1 /* Front */ && (e.code === "Space" || e.code === "Enter")) { - this.showAnswer(); - consume(); - } else if (this.mode === 2 /* Back */) { - if (e.code === "Numpad1" || e.code === "Digit1") { - this.processReview(2 /* Hard */); - consume(); - } else if (e.code === "Numpad2" || e.code === "Digit2" || e.code === "Space") { - this.processReview(1 /* Good */); - consume(); - } else if (e.code === "Numpad3" || e.code === "Digit3") { - this.processReview(0 /* Easy */); - consume(); - } else if (e.code === "Numpad0" || e.code === "Digit0") { - this.processReview(4 /* Reset */); - consume(); - } - } - } - }; - } - onOpen() { - this.decksList(); - } - onClose() { - this.mode = 3 /* Closed */; - } - decksList() { - const aimDeck = this.plugin.deckTree.subdecks.filter( - (deck) => deck.deckName === this.plugin.data.historyDeck - ); - if (this.plugin.data.historyDeck && aimDeck.length > 0) { - const deck = aimDeck[0]; - this.currentDeck = deck; - this.checkDeck = deck.parent; - this.setupCardsView(); - deck.nextCard(this); - return; - } - this.mode = 0 /* DecksList */; - this.titleEl.setText(t("DECKS")); - this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("p", { style: "margin:0px;line-height:12px;" }, /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#4caf50;color:#ffffff;", - "aria-label": t("DUE_CARDS"), - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.plugin.deckTree.dueFlashcardsCount.toString() - ), /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#2196f3;", - "aria-label": t("NEW_CARDS"), - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.plugin.deckTree.newFlashcardsCount.toString() - ), /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#ff7043;", - "aria-label": t("TOTAL_CARDS"), - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.plugin.deckTree.totalFlashcards.toString() - )); - this.contentEl.empty(); - this.contentEl.setAttribute("id", "sr-flashcard-view"); - for (const deck of this.plugin.deckTree.subdecks) { - deck.render(this.contentEl, this); - } - } - setupCardsView() { - this.contentEl.empty(); - const flashCardMenu = this.contentEl.createDiv("sr-flashcard-menu"); - const backButton = flashCardMenu.createEl("button"); - backButton.addClass("sr-flashcard-menu-item"); - (0, import_obsidian3.setIcon)(backButton, "arrow-left"); - backButton.setAttribute("aria-label", t("BACK")); - backButton.addEventListener("click", () => { - this.plugin.data.historyDeck = ""; - this.decksList(); - }); - this.editButton = flashCardMenu.createEl("button"); - this.editButton.addClass("sr-flashcard-menu-item"); - (0, import_obsidian3.setIcon)(this.editButton, "edit"); - this.editButton.setAttribute("aria-label", t("EDIT_CARD")); - this.editButton.addEventListener("click", async () => { - const textPromptArr = this.currentCard.cardText.split("\n"); - let textPrompt = ""; - if (textPromptArr[textPromptArr.length - 1].startsWith("`; - } else { - let scheduling = [ - ...this.currentCard.cardText.matchAll(MULTI_SCHEDULING_EXTRACTOR) - ]; - if (scheduling.length === 0) { - scheduling = [...this.currentCard.cardText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)]; - } - const currCardSched = ["0", dueString, interval.toString(), ease.toString()]; - if (this.currentCard.isDue) { - scheduling[this.currentCard.siblingIdx] = currCardSched; - } else { - scheduling.push(currCardSched); - } - this.currentCard.cardText = this.currentCard.cardText.replace(//gm, ""); - this.currentCard.cardText += ""; - } - fileText = fileText.replace(replacementRegex, () => this.currentCard.cardText); - for (const sibling of this.currentCard.siblings) { - sibling.cardText = this.currentCard.cardText; - } - if (this.plugin.data.settings.burySiblingCards) { - this.burySiblingCards(true); - } - await this.app.vault.modify(this.currentCard.note, fileText); - if (interval < MINUTES_PER_DAY) { - const newCard = { ...this.currentCard }; - newCard.isDue = true; - newCard.isReDue = true; - newCard.interval = interval; - newCard.ease = ease; - newCard.delayBeforeReview = interval; - newCard.previousReview = window.moment(Date.now()).valueOf(); - this.currentDeck.notifyCardChanged(this.currentCardIdx, newCard); - } else { - this.currentDeck.deleteFlashcardAtIndex(this.currentCardIdx, this.currentCard.isDue); - } - this.currentDeck.nextCard(this); - } - async burySiblingCards(tillNextDay) { - if (tillNextDay) { - this.plugin.data.buryList.push(cyrb53(this.currentCard.cardText)); - await this.plugin.savePluginData(); - } - let idx; - for (const sibling of this.currentCard.siblings) { - while ((idx = this.currentDeck.flashcards.indexOf(sibling)) != -1) { - this.currentDeck.deleteFlashcardAtIndex( - idx, - this.currentDeck.flashcards[idx].isDue - ); - } - } - } - skipCurrentCard() { - this.currentDeck.deleteFlashcardAtIndex(this.currentCardIdx, this.currentCard.isDue); - this.burySiblingCards(false); - this.currentDeck.nextCard(this); - } - // slightly modified version of the renderMarkdown function in - // https://github.com/mgmeyers/obsidian-kanban/blob/main/src/KanbanView.tsx - async renderMarkdownWrapper(markdownString, containerEl, recursiveDepth = 0) { - if (recursiveDepth > 4) - return; - import_obsidian3.MarkdownRenderer.renderMarkdown( - markdownString, - containerEl, - this.currentCard.note.path, - this.plugin - ); - containerEl.findAll(".internal-embed").forEach((el) => { - const link2 = this.parseLink(el.getAttribute("src")); - if (!link2.target) { - el.innerText = link2.text; - } else if (link2.target instanceof import_obsidian3.TFile) { - if (link2.target.extension !== "md") { - this.embedMediaFile(el, link2.target); - } else { - el.innerText = ""; - this.renderTransclude(el, link2, recursiveDepth); - } - } - }); - } - parseLink(src) { - const linkComponentsRegex = /^(?[^#^]+)?(?:#(?!\^)(?.+)|#\^(?.+)|#)?$/; - const matched = typeof src === "string" && src.match(linkComponentsRegex); - const file = matched.groups.file || this.currentCard.note.path; - const target = this.plugin.app.metadataCache.getFirstLinkpathDest( - file, - this.currentCard.note.path - ); - return { - text: matched[0], - file: matched.groups.file, - heading: matched.groups.heading, - blockId: matched.groups.blockId, - target - }; - } - embedMediaFile(el, target) { - el.innerText = ""; - if (IMAGE_FORMATS.includes(target.extension)) { - el.createEl( - "img", - { - attr: { - src: this.plugin.app.vault.getResourcePath(target) - } - }, - (img) => { - if (el.hasAttribute("width")) - img.setAttribute("width", el.getAttribute("width")); - else - img.setAttribute("width", "100%"); - if (el.hasAttribute("alt")) - img.setAttribute("alt", el.getAttribute("alt")); - el.addEventListener( - "click", - (ev) => ev.target.style.minWidth = ev.target.style.minWidth === "100%" ? null : "100%" - ); - } - ); - el.addClasses(["image-embed", "is-loaded"]); - } else if (AUDIO_FORMATS.includes(target.extension) || VIDEO_FORMATS.includes(target.extension)) { - el.createEl( - AUDIO_FORMATS.includes(target.extension) ? "audio" : "video", - { - attr: { - controls: "", - src: this.plugin.app.vault.getResourcePath(target) - } - }, - (audio) => { - if (el.hasAttribute("alt")) - audio.setAttribute("alt", el.getAttribute("alt")); - } - ); - el.addClasses(["media-embed", "is-loaded"]); - } else { - el.innerText = target.path; - } - } - async renderTransclude(el, link2, recursiveDepth) { - var _a, _b, _c, _d; - const cache = this.app.metadataCache.getCache(link2.target.path); - const text = await this.app.vault.cachedRead(link2.target); - let blockText; - if (link2.heading) { - const clean = (s) => s.replace(/[\W\s]/g, ""); - const headingIndex = (_a = cache.headings) == null ? void 0 : _a.findIndex( - (h4) => clean(h4.heading) === clean(link2.heading) - ); - const heading = cache.headings[headingIndex]; - const startAt = heading.position.start.offset; - const endAt = ((_d = (_c = (_b = cache.headings.slice(headingIndex + 1).find((h4) => h4.level <= heading.level)) == null ? void 0 : _b.position) == null ? void 0 : _c.start) == null ? void 0 : _d.offset) || text.length; - blockText = text.substring(startAt, endAt); - } else if (link2.blockId) { - const block = cache.blocks[link2.blockId]; - const startAt = block.position.start.offset; - const endAt = block.position.end.offset; - blockText = text.substring(startAt, endAt); - } else { - blockText = text; - } - this.renderMarkdownWrapper(blockText, el, recursiveDepth + 1); - } -}; -var Deck = class { - constructor(deckName, parent) { - this.newFlashcardsCount = 0; - // counts those in subdecks too - this.dueFlashcardsCount = 0; - // counts those in subdecks too - this.totalFlashcards = 0; - this.deckName = deckName; - this.newFlashcardsCount = 0; - this.flashcards = []; - this.dueFlashcardsCount = 0; - this.totalFlashcards = 0; - this.subdecks = []; - this.parent = parent; - } - createDeck(deckPath) { - if (deckPath.length === 0) { - return; - } - const deckName = deckPath.shift(); - for (const deck2 of this.subdecks) { - if (deckName === deck2.deckName) { - deck2.createDeck(deckPath); - return; - } - } - const deck = new Deck(deckName, this); - this.subdecks.push(deck); - deck.createDeck(deckPath); - } - insertFlashcard(deckPath, cardObj) { - if (cardObj.isDue) { - this.dueFlashcardsCount++; - } else { - this.newFlashcardsCount++; - } - if (!cardObj.isReDue) - this.totalFlashcards++; - if (deckPath.length === 0) { - import_heap.default.push(this.flashcards, cardObj, Deck.comparator); - return; - } - const deckName = deckPath.shift(); - for (const deck of this.subdecks) { - if (deckName === deck.deckName) { - deck.insertFlashcard(deckPath, cardObj); - return; - } - } - } - // count flashcards that have either been buried - // or aren't due yet - countFlashcard(deckPath, n = 1) { - this.totalFlashcards += n; - const deckName = deckPath.shift(); - for (const deck of this.subdecks) { - if (deckName === deck.deckName) { - deck.countFlashcard(deckPath, n); - return; - } - } - } - deleteFlashcardAtIndex(index, cardIsDue, base = true) { - if (base) { - this.flashcards.splice(index, 1); - import_heap.default.heapify(this.flashcards, Deck.comparator); - } - if (cardIsDue) { - this.dueFlashcardsCount--; - } else { - this.newFlashcardsCount--; - } - if (this.parent !== null) - this.parent.deleteFlashcardAtIndex(index, cardIsDue, false); - } - /* - * Notify the deck that a card has been changed. - * Rather than updating the card in-place, we delete the old card - * and insert the new card. - */ - notifyCardChanged(oldCardIdx, newCard) { - this.deleteFlashcardAtIndex(oldCardIdx, this.flashcards[oldCardIdx].isDue); - const deckName = [this.deckName]; - let deck = this.parent; - let root = this.parent; - while (deck !== null) { - deckName.push(deck.deckName); - root = deck; - deck = deck.parent; - } - root.insertFlashcard(deckName.reverse().slice(1, deckName.length), newCard); - } - sortSubdecksList() { - this.subdecks.sort((a, b) => { - if (a.deckName < b.deckName) { - return -1; - } else if (a.deckName > b.deckName) { - return 1; - } - return 0; - }); - for (const deck of this.subdecks) { - deck.sortSubdecksList(); - } - } - render(containerEl, modal) { - const deckView = containerEl.createDiv("tree-item"); - const deckViewSelf = deckView.createDiv( - "tree-item-self tag-pane-tag is-clickable" - ); - const shouldBeInitiallyExpanded = modal.plugin.data.settings.initiallyExpandAllSubdecksInTree; - let collapsed = !shouldBeInitiallyExpanded; - let collapseIconEl = null; - if (this.subdecks.length > 0) { - collapseIconEl = deckViewSelf.createDiv("tree-item-icon collapse-icon"); - collapseIconEl.innerHTML = COLLAPSE_ICON; - collapseIconEl.childNodes[0].style.transform = collapsed ? "rotate(-90deg)" : ""; - } - const deckViewInner = deckViewSelf.createDiv("tree-item-inner"); - deckViewInner.addEventListener("click", () => { - modal.plugin.data.historyDeck = this.deckName; - modal.currentDeck = this; - modal.checkDeck = this.parent; - modal.setupCardsView(); - this.nextCard(modal); - }); - const deckViewInnerText = deckViewInner.createDiv("tag-pane-tag-text"); - deckViewInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, this.deckName); - const deckViewOuter = deckViewSelf.createDiv("tree-item-flair-outer"); - deckViewOuter.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", null, /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#4caf50;", - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.dueFlashcardsCount.toString() - ), /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#2196f3;", - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.newFlashcardsCount.toString() - ), /* @__PURE__ */ (0, import_vhtml.default)( - "span", - { - style: "background-color:#ff7043;", - class: "tag-pane-tag-count tree-item-flair sr-deck-counts" - }, - this.totalFlashcards.toString() - )); - const deckViewChildren = deckView.createDiv("tree-item-children"); - deckViewChildren.style.display = collapsed ? "none" : "block"; - if (this.subdecks.length > 0) { - collapseIconEl.addEventListener("click", () => { - if (collapsed) { - collapseIconEl.childNodes[0].style.transform = ""; - deckViewChildren.style.display = "block"; - } else { - collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; - deckViewChildren.style.display = "none"; - } - collapsed = !collapsed; - }); - } - for (const deck of this.subdecks) { - deck.render(deckViewChildren, modal); - } - } - nextCard(modal) { - if (this.flashcards.length === 0) { - if (this.dueFlashcardsCount + this.newFlashcardsCount > 0) { - for (const deck of this.subdecks) { - if (deck.dueFlashcardsCount + deck.newFlashcardsCount > 0) { - modal.currentDeck = deck; - deck.nextCard(modal); - return; - } - } - } - if (this.parent == modal.checkDeck) { - modal.plugin.data.historyDeck = ""; - modal.decksList(); - } else { - this.parent.nextCard(modal); - } - return; - } - import_heap.default.heapify(this.flashcards, Deck.comparator); - modal.responseDiv.style.display = "none"; - modal.resetButton.disabled = true; - modal.titleEl.setText( - `${this.deckName}: ${this.dueFlashcardsCount + this.newFlashcardsCount}` - ); - modal.answerBtn.style.display = "initial"; - modal.flashcardView.empty(); - modal.mode = 1 /* Front */; - let interval = 1, ease = modal.plugin.data.settings.baseEase, delayBeforeReview = 0; - if (this.flashcards.length > 0) { - modal.currentCardIdx = 0; - modal.currentCard = this.flashcards[modal.currentCardIdx]; - modal.renderMarkdownWrapper(modal.currentCard.front, modal.flashcardView); - if (modal.currentCard.isDue) { - interval = modal.currentCard.interval; - ease = modal.currentCard.ease; - delayBeforeReview = modal.currentCard.delayBeforeReview; - } else if (Object.prototype.hasOwnProperty.call( - modal.plugin.easeByPath, - modal.currentCard.note.path - )) { - ease = modal.plugin.easeByPath[modal.currentCard.note.path]; - } - } - const impossibleInterval = schedule( - 3 /* Impossible */, - interval, - ease, - delayBeforeReview, - modal.plugin.data.settings - ).interval; - const hardInterval = schedule( - 2 /* Hard */, - interval, - ease, - delayBeforeReview, - modal.plugin.data.settings - ).interval; - const goodInterval = schedule( - 1 /* Good */, - interval, - ease, - delayBeforeReview, - modal.plugin.data.settings - ).interval; - const easyInterval = schedule( - 0 /* Easy */, - interval, - ease, - delayBeforeReview, - modal.plugin.data.settings - ).interval; - if (modal.ignoreStats) { - modal.impossibleBtn.setText(`${modal.plugin.data.settings.flashcardImpossibleText}`); - modal.hardBtn.setText(`${modal.plugin.data.settings.flashcardHardText}`); - modal.goodBtn.setText(`${modal.plugin.data.settings.flashcardGoodText}`); - modal.easyBtn.setText(`${modal.plugin.data.settings.flashcardEasyText}`); - } else if (import_obsidian3.Platform.isMobile) { - modal.impossibleBtn.setText(textInterval(impossibleInterval, true)); - modal.hardBtn.setText(textInterval(hardInterval, true)); - modal.goodBtn.setText(textInterval(goodInterval, true)); - modal.easyBtn.setText(textInterval(easyInterval, true)); - } else { - modal.impossibleBtn.setText( - `${modal.plugin.data.settings.flashcardImpossibleText} - ${textInterval( - impossibleInterval, - false - )}` - ); - modal.hardBtn.setText( - `${modal.plugin.data.settings.flashcardHardText} - ${textInterval( - hardInterval, - false - )}` - ); - modal.goodBtn.setText( - `${modal.plugin.data.settings.flashcardGoodText} - ${textInterval( - goodInterval, - false - )}` - ); - modal.easyBtn.setText( - `${modal.plugin.data.settings.flashcardEasyText} - ${textInterval( - easyInterval, - false - )}` - ); - } - if (modal.plugin.data.settings.showContextInCards) - modal.contextView.setText(modal.currentCard.context); - } - /** - * Comparator for cards. Used to determine which card should be reviewed first. - * @param a One card to compare with another - * @param b The other card to compare - * @returns +1 => b should be reviewed first, -1 => a should be reviewed first, 0 => no preference - */ - static comparator(a, b) { - if (!a.isDue && !b.isDue) - return 0; - const now = window.moment(Date.now()).valueOf(); - if (a.isReDue && b.isReDue) { - const aReviewDelay = a.previousReview + a.interval * 60 * 1e3 - now; - const bReviewDelay = b.previousReview + b.interval * 60 * 1e3 - now; - return aReviewDelay < bReviewDelay ? -1 : 1; - } - if (a.isReDue) { - const aDiff = now - a.previousReview + a.interval * 60 * 1e3; - return aDiff > 0 ? 1 : -1; - } else if (b.isReDue) { - const bDiff = now - b.previousReview + b.interval * 60 * 1e3; - return bDiff > 0 ? -1 : 1; - } - return 0; - } -}; - -// src/stats-modal.tsx -var import_obsidian4 = require("obsidian"); -var import_vhtml2 = __toESM(require_vhtml()); - -// node_modules/@kurkle/color/dist/color.esm.js -function round(v) { - return v + 0.5 | 0; -} -var lim = (v, l, h4) => Math.max(Math.min(v, h4), l); -function p2b(v) { - return lim(round(v * 2.55), 0, 255); -} -function n2b(v) { - return lim(round(v * 255), 0, 255); -} -function b2n(v) { - return lim(round(v / 2.55) / 100, 0, 1); -} -function n2p(v) { - return lim(round(v * 100), 0, 100); -} -var map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 }; -var hex = [..."0123456789ABCDEF"]; -var h1 = (b) => hex[b & 15]; -var h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15]; -var eq = (b) => (b & 240) >> 4 === (b & 15); -var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); -function hexParse(str) { - var len = str.length; - var ret; - if (str[0] === "#") { - if (len === 4 || len === 5) { - ret = { - r: 255 & map$1[str[1]] * 17, - g: 255 & map$1[str[2]] * 17, - b: 255 & map$1[str[3]] * 17, - a: len === 5 ? map$1[str[4]] * 17 : 255 - }; - } else if (len === 7 || len === 9) { - ret = { - r: map$1[str[1]] << 4 | map$1[str[2]], - g: map$1[str[3]] << 4 | map$1[str[4]], - b: map$1[str[5]] << 4 | map$1[str[6]], - a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255 - }; - } - } - return ret; -} -var alpha = (a, f) => a < 255 ? f(a) : ""; -function hexString(v) { - var f = isShort(v) ? h1 : h2; - return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0; -} -var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; -function hsl2rgbn(h4, s, l) { - const a = s * Math.min(l, 1 - l); - const f = (n, k = (n + h4 / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); - return [f(0), f(8), f(4)]; -} -function hsv2rgbn(h4, s, v) { - const f = (n, k = (n + h4 / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); - return [f(5), f(3), f(1)]; -} -function hwb2rgbn(h4, w, b) { - const rgb = hsl2rgbn(h4, 1, 0.5); - let i; - if (w + b > 1) { - i = 1 / (w + b); - w *= i; - b *= i; - } - for (i = 0; i < 3; i++) { - rgb[i] *= 1 - w - b; - rgb[i] += w; - } - return rgb; -} -function hueValue(r, g, b, d, max) { - if (r === max) { - return (g - b) / d + (g < b ? 6 : 0); - } - if (g === max) { - return (b - r) / d + 2; - } - return (r - g) / d + 4; -} -function rgb2hsl(v) { - const range = 255; - const r = v.r / range; - const g = v.g / range; - const b = v.b / range; - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - const l = (max + min) / 2; - let h4, s, d; - if (max !== min) { - d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - h4 = hueValue(r, g, b, d, max); - h4 = h4 * 60 + 0.5; - } - return [h4 | 0, s || 0, l]; -} -function calln(f, a, b, c) { - return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b); -} -function hsl2rgb(h4, s, l) { - return calln(hsl2rgbn, h4, s, l); -} -function hwb2rgb(h4, w, b) { - return calln(hwb2rgbn, h4, w, b); -} -function hsv2rgb(h4, s, v) { - return calln(hsv2rgbn, h4, s, v); -} -function hue(h4) { - return (h4 % 360 + 360) % 360; -} -function hueParse(str) { - const m = HUE_RE.exec(str); - let a = 255; - let v; - if (!m) { - return; - } - if (m[5] !== v) { - a = m[6] ? p2b(+m[5]) : n2b(+m[5]); - } - const h4 = hue(+m[2]); - const p1 = +m[3] / 100; - const p2 = +m[4] / 100; - if (m[1] === "hwb") { - v = hwb2rgb(h4, p1, p2); - } else if (m[1] === "hsv") { - v = hsv2rgb(h4, p1, p2); - } else { - v = hsl2rgb(h4, p1, p2); - } - return { - r: v[0], - g: v[1], - b: v[2], - a - }; -} -function rotate(v, deg) { - var h4 = rgb2hsl(v); - h4[0] = hue(h4[0] + deg); - h4 = hsl2rgb(h4); - v.r = h4[0]; - v.g = h4[1]; - v.b = h4[2]; -} -function hslString(v) { - if (!v) { - return; - } - const a = rgb2hsl(v); - const h4 = a[0]; - const s = n2p(a[1]); - const l = n2p(a[2]); - return v.a < 255 ? `hsla(${h4}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h4}, ${s}%, ${l}%)`; -} -var map = { - x: "dark", - Z: "light", - Y: "re", - X: "blu", - W: "gr", - V: "medium", - U: "slate", - A: "ee", - T: "ol", - S: "or", - B: "ra", - C: "lateg", - D: "ights", - R: "in", - Q: "turquois", - E: "hi", - P: "ro", - O: "al", - N: "le", - M: "de", - L: "yello", - F: "en", - K: "ch", - G: "arks", - H: "ea", - I: "ightg", - J: "wh" -}; -var names$1 = { - OiceXe: "f0f8ff", - antiquewEte: "faebd7", - aqua: "ffff", - aquamarRe: "7fffd4", - azuY: "f0ffff", - beige: "f5f5dc", - bisque: "ffe4c4", - black: "0", - blanKedOmond: "ffebcd", - Xe: "ff", - XeviTet: "8a2be2", - bPwn: "a52a2a", - burlywood: "deb887", - caMtXe: "5f9ea0", - KartYuse: "7fff00", - KocTate: "d2691e", - cSO: "ff7f50", - cSnflowerXe: "6495ed", - cSnsilk: "fff8dc", - crimson: "dc143c", - cyan: "ffff", - xXe: "8b", - xcyan: "8b8b", - xgTMnPd: "b8860b", - xWay: "a9a9a9", - xgYF: "6400", - xgYy: "a9a9a9", - xkhaki: "bdb76b", - xmagFta: "8b008b", - xTivegYF: "556b2f", - xSange: "ff8c00", - xScEd: "9932cc", - xYd: "8b0000", - xsOmon: "e9967a", - xsHgYF: "8fbc8f", - xUXe: "483d8b", - xUWay: "2f4f4f", - xUgYy: "2f4f4f", - xQe: "ced1", - xviTet: "9400d3", - dAppRk: "ff1493", - dApskyXe: "bfff", - dimWay: "696969", - dimgYy: "696969", - dodgerXe: "1e90ff", - fiYbrick: "b22222", - flSOwEte: "fffaf0", - foYstWAn: "228b22", - fuKsia: "ff00ff", - gaRsbSo: "dcdcdc", - ghostwEte: "f8f8ff", - gTd: "ffd700", - gTMnPd: "daa520", - Way: "808080", - gYF: "8000", - gYFLw: "adff2f", - gYy: "808080", - honeyMw: "f0fff0", - hotpRk: "ff69b4", - RdianYd: "cd5c5c", - Rdigo: "4b0082", - ivSy: "fffff0", - khaki: "f0e68c", - lavFMr: "e6e6fa", - lavFMrXsh: "fff0f5", - lawngYF: "7cfc00", - NmoncEffon: "fffacd", - ZXe: "add8e6", - ZcSO: "f08080", - Zcyan: "e0ffff", - ZgTMnPdLw: "fafad2", - ZWay: "d3d3d3", - ZgYF: "90ee90", - ZgYy: "d3d3d3", - ZpRk: "ffb6c1", - ZsOmon: "ffa07a", - ZsHgYF: "20b2aa", - ZskyXe: "87cefa", - ZUWay: "778899", - ZUgYy: "778899", - ZstAlXe: "b0c4de", - ZLw: "ffffe0", - lime: "ff00", - limegYF: "32cd32", - lRF: "faf0e6", - magFta: "ff00ff", - maPon: "800000", - VaquamarRe: "66cdaa", - VXe: "cd", - VScEd: "ba55d3", - VpurpN: "9370db", - VsHgYF: "3cb371", - VUXe: "7b68ee", - VsprRggYF: "fa9a", - VQe: "48d1cc", - VviTetYd: "c71585", - midnightXe: "191970", - mRtcYam: "f5fffa", - mistyPse: "ffe4e1", - moccasR: "ffe4b5", - navajowEte: "ffdead", - navy: "80", - Tdlace: "fdf5e6", - Tive: "808000", - TivedBb: "6b8e23", - Sange: "ffa500", - SangeYd: "ff4500", - ScEd: "da70d6", - pOegTMnPd: "eee8aa", - pOegYF: "98fb98", - pOeQe: "afeeee", - pOeviTetYd: "db7093", - papayawEp: "ffefd5", - pHKpuff: "ffdab9", - peru: "cd853f", - pRk: "ffc0cb", - plum: "dda0dd", - powMrXe: "b0e0e6", - purpN: "800080", - YbeccapurpN: "663399", - Yd: "ff0000", - Psybrown: "bc8f8f", - PyOXe: "4169e1", - saddNbPwn: "8b4513", - sOmon: "fa8072", - sandybPwn: "f4a460", - sHgYF: "2e8b57", - sHshell: "fff5ee", - siFna: "a0522d", - silver: "c0c0c0", - skyXe: "87ceeb", - UXe: "6a5acd", - UWay: "708090", - UgYy: "708090", - snow: "fffafa", - sprRggYF: "ff7f", - stAlXe: "4682b4", - tan: "d2b48c", - teO: "8080", - tEstN: "d8bfd8", - tomato: "ff6347", - Qe: "40e0d0", - viTet: "ee82ee", - JHt: "f5deb3", - wEte: "ffffff", - wEtesmoke: "f5f5f5", - Lw: "ffff00", - LwgYF: "9acd32" -}; -function unpack() { - const unpacked = {}; - const keys = Object.keys(names$1); - const tkeys = Object.keys(map); - let i, j, k, ok, nk; - for (i = 0; i < keys.length; i++) { - ok = nk = keys[i]; - for (j = 0; j < tkeys.length; j++) { - k = tkeys[j]; - nk = nk.replace(k, map[k]); - } - k = parseInt(names$1[ok], 16); - unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255]; - } - return unpacked; -} -var names; -function nameParse(str) { - if (!names) { - names = unpack(); - names.transparent = [0, 0, 0, 0]; - } - const a = names[str.toLowerCase()]; - return a && { - r: a[0], - g: a[1], - b: a[2], - a: a.length === 4 ? a[3] : 255 - }; -} -var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; -function rgbParse(str) { - const m = RGB_RE.exec(str); - let a = 255; - let r, g, b; - if (!m) { - return; - } - if (m[7] !== r) { - const v = +m[7]; - a = m[8] ? p2b(v) : lim(v * 255, 0, 255); - } - r = +m[1]; - g = +m[3]; - b = +m[5]; - r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255)); - g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255)); - b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255)); - return { - r, - g, - b, - a - }; -} -function rgbString(v) { - return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`); -} -var to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055; -var from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); -function interpolate2(rgb1, rgb2, t2) { - const r = from(b2n(rgb1.r)); - const g = from(b2n(rgb1.g)); - const b = from(b2n(rgb1.b)); - return { - r: n2b(to(r + t2 * (from(b2n(rgb2.r)) - r))), - g: n2b(to(g + t2 * (from(b2n(rgb2.g)) - g))), - b: n2b(to(b + t2 * (from(b2n(rgb2.b)) - b))), - a: rgb1.a + t2 * (rgb2.a - rgb1.a) - }; -} -function modHSL(v, i, ratio) { - if (v) { - let tmp = rgb2hsl(v); - tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); - tmp = hsl2rgb(tmp); - v.r = tmp[0]; - v.g = tmp[1]; - v.b = tmp[2]; - } -} -function clone(v, proto) { - return v ? Object.assign(proto || {}, v) : v; -} -function fromObject(input) { - var v = { r: 0, g: 0, b: 0, a: 255 }; - if (Array.isArray(input)) { - if (input.length >= 3) { - v = { r: input[0], g: input[1], b: input[2], a: 255 }; - if (input.length > 3) { - v.a = n2b(input[3]); - } - } - } else { - v = clone(input, { r: 0, g: 0, b: 0, a: 1 }); - v.a = n2b(v.a); - } - return v; -} -function functionParse(str) { - if (str.charAt(0) === "r") { - return rgbParse(str); - } - return hueParse(str); -} -var Color = class { - constructor(input) { - if (input instanceof Color) { - return input; - } - const type = typeof input; - let v; - if (type === "object") { - v = fromObject(input); - } else if (type === "string") { - v = hexParse(input) || nameParse(input) || functionParse(input); - } - this._rgb = v; - this._valid = !!v; - } - get valid() { - return this._valid; - } - get rgb() { - var v = clone(this._rgb); - if (v) { - v.a = b2n(v.a); - } - return v; - } - set rgb(obj) { - this._rgb = fromObject(obj); - } - rgbString() { - return this._valid ? rgbString(this._rgb) : void 0; - } - hexString() { - return this._valid ? hexString(this._rgb) : void 0; - } - hslString() { - return this._valid ? hslString(this._rgb) : void 0; - } - mix(color2, weight) { - if (color2) { - const c1 = this.rgb; - const c2 = color2.rgb; - let w2; - const p = weight === w2 ? 0.5 : weight; - const w = 2 * p - 1; - const a = c1.a - c2.a; - const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; - w2 = 1 - w1; - c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5; - c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5; - c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5; - c1.a = p * c1.a + (1 - p) * c2.a; - this.rgb = c1; - } - return this; - } - interpolate(color2, t2) { - if (color2) { - this._rgb = interpolate2(this._rgb, color2._rgb, t2); - } - return this; - } - clone() { - return new Color(this.rgb); - } - alpha(a) { - this._rgb.a = n2b(a); - return this; - } - clearer(ratio) { - const rgb = this._rgb; - rgb.a *= 1 - ratio; - return this; - } - greyscale() { - const rgb = this._rgb; - const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); - rgb.r = rgb.g = rgb.b = val; - return this; - } - opaquer(ratio) { - const rgb = this._rgb; - rgb.a *= 1 + ratio; - return this; - } - negate() { - const v = this._rgb; - v.r = 255 - v.r; - v.g = 255 - v.g; - v.b = 255 - v.b; - return this; - } - lighten(ratio) { - modHSL(this._rgb, 2, ratio); - return this; - } - darken(ratio) { - modHSL(this._rgb, 2, -ratio); - return this; - } - saturate(ratio) { - modHSL(this._rgb, 1, ratio); - return this; - } - desaturate(ratio) { - modHSL(this._rgb, 1, -ratio); - return this; - } - rotate(deg) { - rotate(this._rgb, deg); - return this; - } -}; - -// node_modules/chart.js/dist/chunks/helpers.segment.js -function noop() { -} -var uid = (() => { - let id = 0; - return () => id++; -})(); -function isNullOrUndef(value) { - return value === null || typeof value === "undefined"; -} -function isArray(value) { - if (Array.isArray && Array.isArray(value)) { - return true; - } - const type = Object.prototype.toString.call(value); - if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") { - return true; - } - return false; -} -function isObject(value) { - return value !== null && Object.prototype.toString.call(value) === "[object Object]"; -} -function isNumberFinite(value) { - return (typeof value === "number" || value instanceof Number) && isFinite(+value); -} -function finiteOrDefault(value, defaultValue) { - return isNumberFinite(value) ? value : defaultValue; -} -function valueOrDefault(value, defaultValue) { - return typeof value === "undefined" ? defaultValue : value; -} -var toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension; -var toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value; -function callback(fn, args, thisArg) { - if (fn && typeof fn.call === "function") { - return fn.apply(thisArg, args); - } -} -function each(loopable, fn, thisArg, reverse) { - let i, len, keys; - if (isArray(loopable)) { - len = loopable.length; - if (reverse) { - for (i = len - 1; i >= 0; i--) { - fn.call(thisArg, loopable[i], i); - } - } else { - for (i = 0; i < len; i++) { - fn.call(thisArg, loopable[i], i); - } - } - } else if (isObject(loopable)) { - keys = Object.keys(loopable); - len = keys.length; - for (i = 0; i < len; i++) { - fn.call(thisArg, loopable[keys[i]], keys[i]); - } - } -} -function _elementsEqual(a0, a1) { - let i, ilen, v0, v1; - if (!a0 || !a1 || a0.length !== a1.length) { - return false; - } - for (i = 0, ilen = a0.length; i < ilen; ++i) { - v0 = a0[i]; - v1 = a1[i]; - if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) { - return false; - } - } - return true; -} -function clone2(source) { - if (isArray(source)) { - return source.map(clone2); - } - if (isObject(source)) { - const target = /* @__PURE__ */ Object.create(null); - const keys = Object.keys(source); - const klen = keys.length; - let k = 0; - for (; k < klen; ++k) { - target[keys[k]] = clone2(source[keys[k]]); - } - return target; - } - return source; -} -function isValidKey(key) { - return [ - "__proto__", - "prototype", - "constructor" - ].indexOf(key) === -1; -} -function _merger(key, target, source, options) { - if (!isValidKey(key)) { - return; - } - const tval = target[key]; - const sval = source[key]; - if (isObject(tval) && isObject(sval)) { - merge(tval, sval, options); - } else { - target[key] = clone2(sval); - } -} -function merge(target, source, options) { - const sources = isArray(source) ? source : [ - source - ]; - const ilen = sources.length; - if (!isObject(target)) { - return target; - } - options = options || {}; - const merger = options.merger || _merger; - let current; - for (let i = 0; i < ilen; ++i) { - current = sources[i]; - if (!isObject(current)) { - continue; - } - const keys = Object.keys(current); - for (let k = 0, klen = keys.length; k < klen; ++k) { - merger(keys[k], target, current, options); - } - } - return target; -} -function mergeIf(target, source) { - return merge(target, source, { - merger: _mergerIf - }); -} -function _mergerIf(key, target, source) { - if (!isValidKey(key)) { - return; - } - const tval = target[key]; - const sval = source[key]; - if (isObject(tval) && isObject(sval)) { - mergeIf(tval, sval); - } else if (!Object.prototype.hasOwnProperty.call(target, key)) { - target[key] = clone2(sval); - } -} -var keyResolvers = { - // Chart.helpers.core resolveObjectKey should resolve empty key to root object - "": (v) => v, - // default resolvers - x: (o) => o.x, - y: (o) => o.y -}; -function _splitKey(key) { - const parts = key.split("."); - const keys = []; - let tmp = ""; - for (const part of parts) { - tmp += part; - if (tmp.endsWith("\\")) { - tmp = tmp.slice(0, -1) + "."; - } else { - keys.push(tmp); - tmp = ""; - } - } - return keys; -} -function _getKeyResolver(key) { - const keys = _splitKey(key); - return (obj) => { - for (const k of keys) { - if (k === "") { - break; - } - obj = obj && obj[k]; - } - return obj; - }; -} -function resolveObjectKey(obj, key) { - const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key)); - return resolver(obj); -} -function _capitalize(str) { - return str.charAt(0).toUpperCase() + str.slice(1); -} -var defined = (value) => typeof value !== "undefined"; -var isFunction = (value) => typeof value === "function"; -var setsEqual = (a, b) => { - if (a.size !== b.size) { - return false; - } - for (const item of a) { - if (!b.has(item)) { - return false; - } - } - return true; -}; -function _isClickEvent(e) { - return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu"; -} -var PI = Math.PI; -var TAU = 2 * PI; -var PITAU = TAU + PI; -var INFINITY = Number.POSITIVE_INFINITY; -var RAD_PER_DEG = PI / 180; -var HALF_PI = PI / 2; -var QUARTER_PI = PI / 4; -var TWO_THIRDS_PI = PI * 2 / 3; -var log10 = Math.log10; -var sign = Math.sign; -function almostEquals(x, y, epsilon) { - return Math.abs(x - y) < epsilon; -} -function niceNum(range) { - const roundedRange = Math.round(range); - range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range; - const niceRange = Math.pow(10, Math.floor(log10(range))); - const fraction = range / niceRange; - const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; - return niceFraction * niceRange; -} -function _factorize(value) { - const result = []; - const sqrt = Math.sqrt(value); - let i; - for (i = 1; i < sqrt; i++) { - if (value % i === 0) { - result.push(i); - result.push(value / i); - } - } - if (sqrt === (sqrt | 0)) { - result.push(sqrt); - } - result.sort((a, b) => a - b).pop(); - return result; -} -function isNumber(n) { - return !isNaN(parseFloat(n)) && isFinite(n); -} -function almostWhole(x, epsilon) { - const rounded = Math.round(x); - return rounded - epsilon <= x && rounded + epsilon >= x; -} -function _setMinAndMaxByKey(array, target, property) { - let i, ilen, value; - for (i = 0, ilen = array.length; i < ilen; i++) { - value = array[i][property]; - if (!isNaN(value)) { - target.min = Math.min(target.min, value); - target.max = Math.max(target.max, value); - } - } -} -function toRadians(degrees) { - return degrees * (PI / 180); -} -function toDegrees(radians) { - return radians * (180 / PI); -} -function _decimalPlaces(x) { - if (!isNumberFinite(x)) { - return; - } - let e = 1; - let p = 0; - while (Math.round(x * e) / e !== x) { - e *= 10; - p++; - } - return p; -} -function getAngleFromPoint(centrePoint, anglePoint) { - const distanceFromXCenter = anglePoint.x - centrePoint.x; - const distanceFromYCenter = anglePoint.y - centrePoint.y; - const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); - let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); - if (angle < -0.5 * PI) { - angle += TAU; - } - return { - angle, - distance: radialDistanceFromCenter - }; -} -function distanceBetweenPoints(pt1, pt2) { - return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); -} -function _normalizeAngle(a) { - return (a % TAU + TAU) % TAU; -} -function _angleBetween(angle, start, end, sameAngleIsFullCircle) { - const a = _normalizeAngle(angle); - const s = _normalizeAngle(start); - const e = _normalizeAngle(end); - const angleToStart = _normalizeAngle(s - a); - const angleToEnd = _normalizeAngle(e - a); - const startToAngle = _normalizeAngle(a - s); - const endToAngle = _normalizeAngle(a - e); - return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle; -} -function _limitValue(value, min, max) { - return Math.max(min, Math.min(max, value)); -} -function _int16Range(value) { - return _limitValue(value, -32768, 32767); -} -function _isBetween(value, start, end, epsilon = 1e-6) { - return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon; -} -function _lookup(table, value, cmp) { - cmp = cmp || ((index) => table[index] < value); - let hi = table.length - 1; - let lo = 0; - let mid; - while (hi - lo > 1) { - mid = lo + hi >> 1; - if (cmp(mid)) { - lo = mid; - } else { - hi = mid; - } - } - return { - lo, - hi - }; -} -var _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index) => { - const ti = table[index][key]; - return ti < value || ti === value && table[index + 1][key] === value; -} : (index) => table[index][key] < value); -var _rlookupByKey = (table, key, value) => _lookup(table, value, (index) => table[index][key] >= value); -function _filterBetween(values, min, max) { - let start = 0; - let end = values.length; - while (start < end && values[start] < min) { - start++; - } - while (end > start && values[end - 1] > max) { - end--; - } - return start > 0 || end < values.length ? values.slice(start, end) : values; -} -var arrayEvents = [ - "push", - "pop", - "shift", - "splice", - "unshift" -]; -function listenArrayEvents(array, listener) { - if (array._chartjs) { - array._chartjs.listeners.push(listener); - return; - } - Object.defineProperty(array, "_chartjs", { - configurable: true, - enumerable: false, - value: { - listeners: [ - listener - ] - } - }); - arrayEvents.forEach((key) => { - const method = "_onData" + _capitalize(key); - const base = array[key]; - Object.defineProperty(array, key, { - configurable: true, - enumerable: false, - value(...args) { - const res = base.apply(this, args); - array._chartjs.listeners.forEach((object) => { - if (typeof object[method] === "function") { - object[method](...args); - } - }); - return res; - } - }); - }); -} -function unlistenArrayEvents(array, listener) { - const stub = array._chartjs; - if (!stub) { - return; - } - const listeners = stub.listeners; - const index = listeners.indexOf(listener); - if (index !== -1) { - listeners.splice(index, 1); - } - if (listeners.length > 0) { - return; - } - arrayEvents.forEach((key) => { - delete array[key]; - }); - delete array._chartjs; -} -function _arrayUnique(items) { - const set2 = new Set(items); - if (set2.size === items.length) { - return items; - } - return Array.from(set2); -} -var requestAnimFrame = function() { - if (typeof window === "undefined") { - return function(callback2) { - return callback2(); - }; - } - return window.requestAnimationFrame; -}(); -function throttled(fn, thisArg) { - let argsToUse = []; - let ticking = false; - return function(...args) { - argsToUse = args; - if (!ticking) { - ticking = true; - requestAnimFrame.call(window, () => { - ticking = false; - fn.apply(thisArg, argsToUse); - }); - } - }; -} -function debounce(fn, delay) { - let timeout; - return function(...args) { - if (delay) { - clearTimeout(timeout); - timeout = setTimeout(fn, delay, args); - } else { - fn.apply(this, args); - } - return delay; - }; -} -var _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center"; -var _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2; -var _textX = (align, left, right, rtl) => { - const check = rtl ? "left" : "right"; - return align === check ? right : align === "center" ? (left + right) / 2 : left; -}; -var atEdge = (t2) => t2 === 0 || t2 === 1; -var elasticIn = (t2, s, p) => -(Math.pow(2, 10 * (t2 -= 1)) * Math.sin((t2 - s) * TAU / p)); -var elasticOut = (t2, s, p) => Math.pow(2, -10 * t2) * Math.sin((t2 - s) * TAU / p) + 1; -var effects = { - linear: (t2) => t2, - easeInQuad: (t2) => t2 * t2, - easeOutQuad: (t2) => -t2 * (t2 - 2), - easeInOutQuad: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 : -0.5 * (--t2 * (t2 - 2) - 1), - easeInCubic: (t2) => t2 * t2 * t2, - easeOutCubic: (t2) => (t2 -= 1) * t2 * t2 + 1, - easeInOutCubic: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 + 2), - easeInQuart: (t2) => t2 * t2 * t2 * t2, - easeOutQuart: (t2) => -((t2 -= 1) * t2 * t2 * t2 - 1), - easeInOutQuart: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 : -0.5 * ((t2 -= 2) * t2 * t2 * t2 - 2), - easeInQuint: (t2) => t2 * t2 * t2 * t2 * t2, - easeOutQuint: (t2) => (t2 -= 1) * t2 * t2 * t2 * t2 + 1, - easeInOutQuint: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 * t2 * t2 + 2), - easeInSine: (t2) => -Math.cos(t2 * HALF_PI) + 1, - easeOutSine: (t2) => Math.sin(t2 * HALF_PI), - easeInOutSine: (t2) => -0.5 * (Math.cos(PI * t2) - 1), - easeInExpo: (t2) => t2 === 0 ? 0 : Math.pow(2, 10 * (t2 - 1)), - easeOutExpo: (t2) => t2 === 1 ? 1 : -Math.pow(2, -10 * t2) + 1, - easeInOutExpo: (t2) => atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * Math.pow(2, 10 * (t2 * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t2 * 2 - 1)) + 2), - easeInCirc: (t2) => t2 >= 1 ? t2 : -(Math.sqrt(1 - t2 * t2) - 1), - easeOutCirc: (t2) => Math.sqrt(1 - (t2 -= 1) * t2), - easeInOutCirc: (t2) => (t2 /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t2 * t2) - 1) : 0.5 * (Math.sqrt(1 - (t2 -= 2) * t2) + 1), - easeInElastic: (t2) => atEdge(t2) ? t2 : elasticIn(t2, 0.075, 0.3), - easeOutElastic: (t2) => atEdge(t2) ? t2 : elasticOut(t2, 0.075, 0.3), - easeInOutElastic(t2) { - const s = 0.1125; - const p = 0.45; - return atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * elasticIn(t2 * 2, s, p) : 0.5 + 0.5 * elasticOut(t2 * 2 - 1, s, p); - }, - easeInBack(t2) { - const s = 1.70158; - return t2 * t2 * ((s + 1) * t2 - s); - }, - easeOutBack(t2) { - const s = 1.70158; - return (t2 -= 1) * t2 * ((s + 1) * t2 + s) + 1; - }, - easeInOutBack(t2) { - let s = 1.70158; - if ((t2 /= 0.5) < 1) { - return 0.5 * (t2 * t2 * (((s *= 1.525) + 1) * t2 - s)); - } - return 0.5 * ((t2 -= 2) * t2 * (((s *= 1.525) + 1) * t2 + s) + 2); - }, - easeInBounce: (t2) => 1 - effects.easeOutBounce(1 - t2), - easeOutBounce(t2) { - const m = 7.5625; - const d = 2.75; - if (t2 < 1 / d) { - return m * t2 * t2; - } - if (t2 < 2 / d) { - return m * (t2 -= 1.5 / d) * t2 + 0.75; - } - if (t2 < 2.5 / d) { - return m * (t2 -= 2.25 / d) * t2 + 0.9375; - } - return m * (t2 -= 2.625 / d) * t2 + 0.984375; - }, - easeInOutBounce: (t2) => t2 < 0.5 ? effects.easeInBounce(t2 * 2) * 0.5 : effects.easeOutBounce(t2 * 2 - 1) * 0.5 + 0.5 -}; -function isPatternOrGradient(value) { - if (value && typeof value === "object") { - const type = value.toString(); - return type === "[object CanvasPattern]" || type === "[object CanvasGradient]"; - } - return false; -} -function color(value) { - return isPatternOrGradient(value) ? value : new Color(value); -} -function getHoverColor(value) { - return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString(); -} -var numbers = [ - "x", - "y", - "borderWidth", - "radius", - "tension" -]; -var colors = [ - "color", - "borderColor", - "backgroundColor" -]; -function applyAnimationsDefaults(defaults2) { - defaults2.set("animation", { - delay: void 0, - duration: 1e3, - easing: "easeOutQuart", - fn: void 0, - from: void 0, - loop: void 0, - to: void 0, - type: void 0 - }); - defaults2.describe("animation", { - _fallback: false, - _indexable: false, - _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn" - }); - defaults2.set("animations", { - colors: { - type: "color", - properties: colors - }, - numbers: { - type: "number", - properties: numbers - } - }); - defaults2.describe("animations", { - _fallback: "animation" - }); - defaults2.set("transitions", { - active: { - animation: { - duration: 400 - } - }, - resize: { - animation: { - duration: 0 - } - }, - show: { - animations: { - colors: { - from: "transparent" - }, - visible: { - type: "boolean", - duration: 0 - } - } - }, - hide: { - animations: { - colors: { - to: "transparent" - }, - visible: { - type: "boolean", - easing: "linear", - fn: (v) => v | 0 - } - } - } - }); -} -function applyLayoutsDefaults(defaults2) { - defaults2.set("layout", { - autoPadding: true, - padding: { - top: 0, - right: 0, - bottom: 0, - left: 0 - } - }); -} -var intlCache = /* @__PURE__ */ new Map(); -function getNumberFormat(locale2, options) { - options = options || {}; - const cacheKey = locale2 + JSON.stringify(options); - let formatter = intlCache.get(cacheKey); - if (!formatter) { - formatter = new Intl.NumberFormat(locale2, options); - intlCache.set(cacheKey, formatter); - } - return formatter; -} -function formatNumber(num, locale2, options) { - return getNumberFormat(locale2, options).format(num); -} -var formatters = { - values(value) { - return isArray(value) ? value : "" + value; - }, - numeric(tickValue, index, ticks) { - if (tickValue === 0) { - return "0"; - } - const locale2 = this.chart.options.locale; - let notation; - let delta = tickValue; - if (ticks.length > 1) { - const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value)); - if (maxTick < 1e-4 || maxTick > 1e15) { - notation = "scientific"; - } - delta = calculateDelta(tickValue, ticks); - } - const logDelta = log10(Math.abs(delta)); - const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); - const options = { - notation, - minimumFractionDigits: numDecimal, - maximumFractionDigits: numDecimal - }; - Object.assign(options, this.options.ticks.format); - return formatNumber(tickValue, locale2, options); - }, - logarithmic(tickValue, index, ticks) { - if (tickValue === 0) { - return "0"; - } - const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue))); - if ([ - 1, - 2, - 3, - 5, - 10, - 15 - ].includes(remain) || index > 0.8 * ticks.length) { - return formatters.numeric.call(this, tickValue, index, ticks); - } - return ""; - } -}; -function calculateDelta(tickValue, ticks) { - let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value; - if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) { - delta = tickValue - Math.floor(tickValue); - } - return delta; -} -var Ticks = { - formatters -}; -function applyScaleDefaults(defaults2) { - defaults2.set("scale", { - display: true, - offset: false, - reverse: false, - beginAtZero: false, - bounds: "ticks", - grace: 0, - grid: { - display: true, - lineWidth: 1, - drawOnChartArea: true, - drawTicks: true, - tickLength: 8, - tickWidth: (_ctx, options) => options.lineWidth, - tickColor: (_ctx, options) => options.color, - offset: false - }, - border: { - display: true, - dash: [], - dashOffset: 0, - width: 1 - }, - title: { - display: false, - text: "", - padding: { - top: 4, - bottom: 4 - } - }, - ticks: { - minRotation: 0, - maxRotation: 50, - mirror: false, - textStrokeWidth: 0, - textStrokeColor: "", - padding: 3, - display: true, - autoSkip: true, - autoSkipPadding: 3, - labelOffset: 0, - callback: Ticks.formatters.values, - minor: {}, - major: {}, - align: "center", - crossAlign: "near", - showLabelBackdrop: false, - backdropColor: "rgba(255, 255, 255, 0.75)", - backdropPadding: 2 - } - }); - defaults2.route("scale.ticks", "color", "", "color"); - defaults2.route("scale.grid", "color", "", "borderColor"); - defaults2.route("scale.border", "color", "", "borderColor"); - defaults2.route("scale.title", "color", "", "color"); - defaults2.describe("scale", { - _fallback: false, - _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser", - _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash" - }); - defaults2.describe("scales", { - _fallback: "scale" - }); - defaults2.describe("scale.ticks", { - _scriptable: (name) => name !== "backdropPadding" && name !== "callback", - _indexable: (name) => name !== "backdropPadding" - }); -} -var overrides = /* @__PURE__ */ Object.create(null); -var descriptors = /* @__PURE__ */ Object.create(null); -function getScope$1(node, key) { - if (!key) { - return node; - } - const keys = key.split("."); - for (let i = 0, n = keys.length; i < n; ++i) { - const k = keys[i]; - node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null)); - } - return node; -} -function set(root, scope, values) { - if (typeof scope === "string") { - return merge(getScope$1(root, scope), values); - } - return merge(getScope$1(root, ""), scope); -} -var Defaults = class { - constructor(_descriptors2, _appliers) { - this.animation = void 0; - this.backgroundColor = "rgba(0,0,0,0.1)"; - this.borderColor = "rgba(0,0,0,0.1)"; - this.color = "#666"; - this.datasets = {}; - this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio(); - this.elements = {}; - this.events = [ - "mousemove", - "mouseout", - "click", - "touchstart", - "touchmove" - ]; - this.font = { - family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", - size: 12, - style: "normal", - lineHeight: 1.2, - weight: null - }; - this.hover = {}; - this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor); - this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor); - this.hoverColor = (ctx, options) => getHoverColor(options.color); - this.indexAxis = "x"; - this.interaction = { - mode: "nearest", - intersect: true, - includeInvisible: false - }; - this.maintainAspectRatio = true; - this.onHover = null; - this.onClick = null; - this.parsing = true; - this.plugins = {}; - this.responsive = true; - this.scale = void 0; - this.scales = {}; - this.showLine = true; - this.drawActiveElementsOnTop = true; - this.describe(_descriptors2); - this.apply(_appliers); - } - set(scope, values) { - return set(this, scope, values); - } - get(scope) { - return getScope$1(this, scope); - } - describe(scope, values) { - return set(descriptors, scope, values); - } - override(scope, values) { - return set(overrides, scope, values); - } - route(scope, name, targetScope, targetName) { - const scopeObject = getScope$1(this, scope); - const targetScopeObject = getScope$1(this, targetScope); - const privateName = "_" + name; - Object.defineProperties(scopeObject, { - [privateName]: { - value: scopeObject[name], - writable: true - }, - [name]: { - enumerable: true, - get() { - const local = this[privateName]; - const target = targetScopeObject[targetName]; - if (isObject(local)) { - return Object.assign({}, target, local); - } - return valueOrDefault(local, target); - }, - set(value) { - this[privateName] = value; - } - } - }); - } - apply(appliers) { - appliers.forEach((apply) => apply(this)); - } -}; -var defaults = /* @__PURE__ */ new Defaults({ - _scriptable: (name) => !name.startsWith("on"), - _indexable: (name) => name !== "events", - hover: { - _fallback: "interaction" - }, - interaction: { - _scriptable: false, - _indexable: false - } -}, [ - applyAnimationsDefaults, - applyLayoutsDefaults, - applyScaleDefaults -]); -function toFontString(font) { - if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) { - return null; - } - return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family; -} -function _measureText(ctx, data, gc, longest, string) { - let textWidth = data[string]; - if (!textWidth) { - textWidth = data[string] = ctx.measureText(string).width; - gc.push(string); - } - if (textWidth > longest) { - longest = textWidth; - } - return longest; -} -function _longestText(ctx, font, arrayOfThings, cache) { - cache = cache || {}; - let data = cache.data = cache.data || {}; - let gc = cache.garbageCollect = cache.garbageCollect || []; - if (cache.font !== font) { - data = cache.data = {}; - gc = cache.garbageCollect = []; - cache.font = font; - } - ctx.save(); - ctx.font = font; - let longest = 0; - const ilen = arrayOfThings.length; - let i, j, jlen, thing, nestedThing; - for (i = 0; i < ilen; i++) { - thing = arrayOfThings[i]; - if (thing !== void 0 && thing !== null && !isArray(thing)) { - longest = _measureText(ctx, data, gc, longest, thing); - } else if (isArray(thing)) { - for (j = 0, jlen = thing.length; j < jlen; j++) { - nestedThing = thing[j]; - if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) { - longest = _measureText(ctx, data, gc, longest, nestedThing); - } - } - } - } - ctx.restore(); - const gcLen = gc.length / 2; - if (gcLen > arrayOfThings.length) { - for (i = 0; i < gcLen; i++) { - delete data[gc[i]]; - } - gc.splice(0, gcLen); - } - return longest; -} -function _alignPixel(chart, pixel, width) { - const devicePixelRatio = chart.currentDevicePixelRatio; - const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0; - return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; -} -function clearCanvas(canvas, ctx) { - ctx = ctx || canvas.getContext("2d"); - ctx.save(); - ctx.resetTransform(); - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.restore(); -} -function drawPoint(ctx, options, x, y) { - drawPointLegend(ctx, options, x, y, null); -} -function drawPointLegend(ctx, options, x, y, w) { - let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW; - const style = options.pointStyle; - const rotation = options.rotation; - const radius = options.radius; - let rad = (rotation || 0) * RAD_PER_DEG; - if (style && typeof style === "object") { - type = style.toString(); - if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") { - ctx.save(); - ctx.translate(x, y); - ctx.rotate(rad); - ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); - ctx.restore(); - return; - } - } - if (isNaN(radius) || radius <= 0) { - return; - } - ctx.beginPath(); - switch (style) { - default: - if (w) { - ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU); - } else { - ctx.arc(x, y, radius, 0, TAU); - } - ctx.closePath(); - break; - case "triangle": - width = w ? w / 2 : radius; - ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); - rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); - rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); - ctx.closePath(); - break; - case "rectRounded": - cornerRadius = radius * 0.516; - size = radius - cornerRadius; - xOffset = Math.cos(rad + QUARTER_PI) * size; - xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); - yOffset = Math.sin(rad + QUARTER_PI) * size; - yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); - ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); - ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad); - ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI); - ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); - ctx.closePath(); - break; - case "rect": - if (!rotation) { - size = Math.SQRT1_2 * radius; - width = w ? w / 2 : size; - ctx.rect(x - width, y - size, 2 * width, 2 * size); - break; - } - rad += QUARTER_PI; - case "rectRot": - xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); - ctx.moveTo(x - xOffsetW, y - yOffset); - ctx.lineTo(x + yOffsetW, y - xOffset); - ctx.lineTo(x + xOffsetW, y + yOffset); - ctx.lineTo(x - yOffsetW, y + xOffset); - ctx.closePath(); - break; - case "crossRot": - rad += QUARTER_PI; - case "cross": - xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); - ctx.moveTo(x - xOffsetW, y - yOffset); - ctx.lineTo(x + xOffsetW, y + yOffset); - ctx.moveTo(x + yOffsetW, y - xOffset); - ctx.lineTo(x - yOffsetW, y + xOffset); - break; - case "star": - xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); - ctx.moveTo(x - xOffsetW, y - yOffset); - ctx.lineTo(x + xOffsetW, y + yOffset); - ctx.moveTo(x + yOffsetW, y - xOffset); - ctx.lineTo(x - yOffsetW, y + xOffset); - rad += QUARTER_PI; - xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); - ctx.moveTo(x - xOffsetW, y - yOffset); - ctx.lineTo(x + xOffsetW, y + yOffset); - ctx.moveTo(x + yOffsetW, y - xOffset); - ctx.lineTo(x - yOffsetW, y + xOffset); - break; - case "line": - xOffset = w ? w / 2 : Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - break; - case "dash": - ctx.moveTo(x, y); - ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius); - break; - case false: - ctx.closePath(); - break; - } - ctx.fill(); - if (options.borderWidth > 0) { - ctx.stroke(); - } -} -function _isPointInArea(point, area, margin) { - margin = margin || 0.5; - return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin; -} -function clipArea(ctx, area) { - ctx.save(); - ctx.beginPath(); - ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); - ctx.clip(); -} -function unclipArea(ctx) { - ctx.restore(); -} -function setRenderOpts(ctx, opts) { - if (opts.translation) { - ctx.translate(opts.translation[0], opts.translation[1]); - } - if (!isNullOrUndef(opts.rotation)) { - ctx.rotate(opts.rotation); - } - if (opts.color) { - ctx.fillStyle = opts.color; - } - if (opts.textAlign) { - ctx.textAlign = opts.textAlign; - } - if (opts.textBaseline) { - ctx.textBaseline = opts.textBaseline; - } -} -function decorateText(ctx, x, y, line, opts) { - if (opts.strikethrough || opts.underline) { - const metrics = ctx.measureText(line); - const left = x - metrics.actualBoundingBoxLeft; - const right = x + metrics.actualBoundingBoxRight; - const top = y - metrics.actualBoundingBoxAscent; - const bottom = y + metrics.actualBoundingBoxDescent; - const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom; - ctx.strokeStyle = ctx.fillStyle; - ctx.beginPath(); - ctx.lineWidth = opts.decorationWidth || 2; - ctx.moveTo(left, yDecoration); - ctx.lineTo(right, yDecoration); - ctx.stroke(); - } -} -function drawBackdrop(ctx, opts) { - const oldColor = ctx.fillStyle; - ctx.fillStyle = opts.color; - ctx.fillRect(opts.left, opts.top, opts.width, opts.height); - ctx.fillStyle = oldColor; -} -function renderText(ctx, text, x, y, font, opts = {}) { - const lines = isArray(text) ? text : [ - text - ]; - const stroke = opts.strokeWidth > 0 && opts.strokeColor !== ""; - let i, line; - ctx.save(); - ctx.font = font.string; - setRenderOpts(ctx, opts); - for (i = 0; i < lines.length; ++i) { - line = lines[i]; - if (opts.backdrop) { - drawBackdrop(ctx, opts.backdrop); - } - if (stroke) { - if (opts.strokeColor) { - ctx.strokeStyle = opts.strokeColor; - } - if (!isNullOrUndef(opts.strokeWidth)) { - ctx.lineWidth = opts.strokeWidth; - } - ctx.strokeText(line, x, y, opts.maxWidth); - } - ctx.fillText(line, x, y, opts.maxWidth); - decorateText(ctx, x, y, line, opts); - y += Number(font.lineHeight); - } - ctx.restore(); -} -function addRoundedRectPath(ctx, rect) { - const { x, y, w, h: h4, radius } = rect; - ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true); - ctx.lineTo(x, y + h4 - radius.bottomLeft); - ctx.arc(x + radius.bottomLeft, y + h4 - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); - ctx.lineTo(x + w - radius.bottomRight, y + h4); - ctx.arc(x + w - radius.bottomRight, y + h4 - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); - ctx.lineTo(x + w, y + radius.topRight); - ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); - ctx.lineTo(x + radius.topLeft, y); -} -var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/; -var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/; -function toLineHeight(value, size) { - const matches = ("" + value).match(LINE_HEIGHT); - if (!matches || matches[1] === "normal") { - return size * 1.2; - } - value = +matches[2]; - switch (matches[3]) { - case "px": - return value; - case "%": - value /= 100; - break; - } - return size * value; -} -var numberOrZero = (v) => +v || 0; -function _readValueToProps(value, props) { - const ret = {}; - const objProps = isObject(props); - const keys = objProps ? Object.keys(props) : props; - const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value; - for (const prop of keys) { - ret[prop] = numberOrZero(read(prop)); - } - return ret; -} -function toTRBL(value) { - return _readValueToProps(value, { - top: "y", - right: "x", - bottom: "y", - left: "x" - }); -} -function toTRBLCorners(value) { - return _readValueToProps(value, [ - "topLeft", - "topRight", - "bottomLeft", - "bottomRight" - ]); -} -function toPadding(value) { - const obj = toTRBL(value); - obj.width = obj.left + obj.right; - obj.height = obj.top + obj.bottom; - return obj; -} -function toFont(options, fallback) { - options = options || {}; - fallback = fallback || defaults.font; - let size = valueOrDefault(options.size, fallback.size); - if (typeof size === "string") { - size = parseInt(size, 10); - } - let style = valueOrDefault(options.style, fallback.style); - if (style && !("" + style).match(FONT_STYLE)) { - console.warn('Invalid font style specified: "' + style + '"'); - style = void 0; - } - const font = { - family: valueOrDefault(options.family, fallback.family), - lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size), - size, - style, - weight: valueOrDefault(options.weight, fallback.weight), - string: "" - }; - font.string = toFontString(font); - return font; -} -function resolve(inputs, context, index, info) { - let cacheable = true; - let i, ilen, value; - for (i = 0, ilen = inputs.length; i < ilen; ++i) { - value = inputs[i]; - if (value === void 0) { - continue; - } - if (context !== void 0 && typeof value === "function") { - value = value(context); - cacheable = false; - } - if (index !== void 0 && isArray(value)) { - value = value[index % value.length]; - cacheable = false; - } - if (value !== void 0) { - if (info && !cacheable) { - info.cacheable = false; - } - return value; - } - } -} -function _addGrace(minmax, grace, beginAtZero) { - const { min, max } = minmax; - const change = toDimension(grace, (max - min) / 2); - const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add; - return { - min: keepZero(min, -Math.abs(change)), - max: keepZero(max, change) - }; -} -function createContext(parentContext, context) { - return Object.assign(Object.create(parentContext), context); -} -function _createResolver(scopes, prefixes = [ - "" -], rootScopes, fallback, getTarget = () => scopes[0]) { - const finalRootScopes = rootScopes || scopes; - if (typeof fallback === "undefined") { - fallback = _resolve("_fallback", scopes); - } - const cache = { - [Symbol.toStringTag]: "Object", - _cacheable: true, - _scopes: scopes, - _rootScopes: finalRootScopes, - _fallback: fallback, - _getTarget: getTarget, - override: (scope) => _createResolver([ - scope, - ...scopes - ], prefixes, finalRootScopes, fallback) - }; - return new Proxy(cache, { - /** - * A trap for the delete operator. - */ - deleteProperty(target, prop) { - delete target[prop]; - delete target._keys; - delete scopes[0][prop]; - return true; - }, - /** - * A trap for getting property values. - */ - get(target, prop) { - return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target)); - }, - /** - * A trap for Object.getOwnPropertyDescriptor. - * Also used by Object.hasOwnProperty. - */ - getOwnPropertyDescriptor(target, prop) { - return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop); - }, - /** - * A trap for Object.getPrototypeOf. - */ - getPrototypeOf() { - return Reflect.getPrototypeOf(scopes[0]); - }, - /** - * A trap for the in operator. - */ - has(target, prop) { - return getKeysFromAllScopes(target).includes(prop); - }, - /** - * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. - */ - ownKeys(target) { - return getKeysFromAllScopes(target); - }, - /** - * A trap for setting property values. - */ - set(target, prop, value) { - const storage = target._storage || (target._storage = getTarget()); - target[prop] = storage[prop] = value; - delete target._keys; - return true; - } - }); -} -function _attachContext(proxy, context, subProxy, descriptorDefaults) { - const cache = { - _cacheable: false, - _proxy: proxy, - _context: context, - _subProxy: subProxy, - _stack: /* @__PURE__ */ new Set(), - _descriptors: _descriptors(proxy, descriptorDefaults), - setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults), - override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults) - }; - return new Proxy(cache, { - /** - * A trap for the delete operator. - */ - deleteProperty(target, prop) { - delete target[prop]; - delete proxy[prop]; - return true; - }, - /** - * A trap for getting property values. - */ - get(target, prop, receiver) { - return _cached(target, prop, () => _resolveWithContext(target, prop, receiver)); - }, - /** - * A trap for Object.getOwnPropertyDescriptor. - * Also used by Object.hasOwnProperty. - */ - getOwnPropertyDescriptor(target, prop) { - return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? { - enumerable: true, - configurable: true - } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop); - }, - /** - * A trap for Object.getPrototypeOf. - */ - getPrototypeOf() { - return Reflect.getPrototypeOf(proxy); - }, - /** - * A trap for the in operator. - */ - has(target, prop) { - return Reflect.has(proxy, prop); - }, - /** - * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. - */ - ownKeys() { - return Reflect.ownKeys(proxy); - }, - /** - * A trap for setting property values. - */ - set(target, prop, value) { - proxy[prop] = value; - delete target[prop]; - return true; - } - }); -} -function _descriptors(proxy, defaults2 = { - scriptable: true, - indexable: true -}) { - const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy; - return { - allKeys: _allKeys, - scriptable: _scriptable, - indexable: _indexable, - isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable, - isIndexable: isFunction(_indexable) ? _indexable : () => _indexable - }; -} -var readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; -var needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object); -function _cached(target, prop, resolve2) { - if (Object.prototype.hasOwnProperty.call(target, prop)) { - return target[prop]; - } - const value = resolve2(); - target[prop] = value; - return value; -} -function _resolveWithContext(target, prop, receiver) { - const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; - let value = _proxy[prop]; - if (isFunction(value) && descriptors2.isScriptable(prop)) { - value = _resolveScriptable(prop, value, target, receiver); - } - if (isArray(value) && value.length) { - value = _resolveArray(prop, value, target, descriptors2.isIndexable); - } - if (needsSubResolver(prop, value)) { - value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2); - } - return value; -} -function _resolveScriptable(prop, getValue, target, receiver) { - const { _proxy, _context, _subProxy, _stack } = target; - if (_stack.has(prop)) { - throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop); - } - _stack.add(prop); - let value = getValue(_context, _subProxy || receiver); - _stack.delete(prop); - if (needsSubResolver(prop, value)) { - value = createSubResolver(_proxy._scopes, _proxy, prop, value); - } - return value; -} -function _resolveArray(prop, value, target, isIndexable) { - const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; - if (typeof _context.index !== "undefined" && isIndexable(prop)) { - return value[_context.index % value.length]; - } else if (isObject(value[0])) { - const arr = value; - const scopes = _proxy._scopes.filter((s) => s !== arr); - value = []; - for (const item of arr) { - const resolver = createSubResolver(scopes, _proxy, prop, item); - value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2)); - } - } - return value; -} -function resolveFallback(fallback, prop, value) { - return isFunction(fallback) ? fallback(prop, value) : fallback; -} -var getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0; -function addScopes(set2, parentScopes, key, parentFallback, value) { - for (const parent of parentScopes) { - const scope = getScope(key, parent); - if (scope) { - set2.add(scope); - const fallback = resolveFallback(scope._fallback, key, value); - if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) { - return fallback; - } - } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) { - return null; - } - } - return false; -} -function createSubResolver(parentScopes, resolver, prop, value) { - const rootScopes = resolver._rootScopes; - const fallback = resolveFallback(resolver._fallback, prop, value); - const allScopes = [ - ...parentScopes, - ...rootScopes - ]; - const set2 = /* @__PURE__ */ new Set(); - set2.add(value); - let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value); - if (key === null) { - return false; - } - if (typeof fallback !== "undefined" && fallback !== prop) { - key = addScopesFromKey(set2, allScopes, fallback, key, value); - if (key === null) { - return false; - } - } - return _createResolver(Array.from(set2), [ - "" - ], rootScopes, fallback, () => subGetTarget(resolver, prop, value)); -} -function addScopesFromKey(set2, allScopes, key, fallback, item) { - while (key) { - key = addScopes(set2, allScopes, key, fallback, item); - } - return key; -} -function subGetTarget(resolver, prop, value) { - const parent = resolver._getTarget(); - if (!(prop in parent)) { - parent[prop] = {}; - } - const target = parent[prop]; - if (isArray(target) && isObject(value)) { - return value; - } - return target || {}; -} -function _resolveWithPrefixes(prop, prefixes, scopes, proxy) { - let value; - for (const prefix of prefixes) { - value = _resolve(readKey(prefix, prop), scopes); - if (typeof value !== "undefined") { - return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value; - } - } -} -function _resolve(key, scopes) { - for (const scope of scopes) { - if (!scope) { - continue; - } - const value = scope[key]; - if (typeof value !== "undefined") { - return value; - } - } -} -function getKeysFromAllScopes(target) { - let keys = target._keys; - if (!keys) { - keys = target._keys = resolveKeysFromAllScopes(target._scopes); - } - return keys; -} -function resolveKeysFromAllScopes(scopes) { - const set2 = /* @__PURE__ */ new Set(); - for (const scope of scopes) { - for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) { - set2.add(key); - } - } - return Array.from(set2); -} -var EPSILON = Number.EPSILON || 1e-14; -function _isDomSupported() { - return typeof window !== "undefined" && typeof document !== "undefined"; -} -function _getParentNode(domNode) { - let parent = domNode.parentNode; - if (parent && parent.toString() === "[object ShadowRoot]") { - parent = parent.host; - } - return parent; -} -function parseMaxStyle(styleValue, node, parentProperty) { - let valueInPixels; - if (typeof styleValue === "string") { - valueInPixels = parseInt(styleValue, 10); - if (styleValue.indexOf("%") !== -1) { - valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; - } - } else { - valueInPixels = styleValue; - } - return valueInPixels; -} -var getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null); -function getStyle(el, property) { - return getComputedStyle2(el).getPropertyValue(property); -} -var positions = [ - "top", - "right", - "bottom", - "left" -]; -function getPositionedStyle(styles, style, suffix) { - const result = {}; - suffix = suffix ? "-" + suffix : ""; - for (let i = 0; i < 4; i++) { - const pos = positions[i]; - result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0; - } - result.width = result.left + result.right; - result.height = result.top + result.bottom; - return result; -} -var useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot); -function getCanvasPosition(e, canvas) { - const touches = e.touches; - const source = touches && touches.length ? touches[0] : e; - const { offsetX, offsetY } = source; - let box = false; - let x, y; - if (useOffsetPos(offsetX, offsetY, e.target)) { - x = offsetX; - y = offsetY; - } else { - const rect = canvas.getBoundingClientRect(); - x = source.clientX - rect.left; - y = source.clientY - rect.top; - box = true; - } - return { - x, - y, - box - }; -} -function getRelativePosition(event, chart) { - if ("native" in event) { - return event; - } - const { canvas, currentDevicePixelRatio } = chart; - const style = getComputedStyle2(canvas); - const borderBox = style.boxSizing === "border-box"; - const paddings = getPositionedStyle(style, "padding"); - const borders = getPositionedStyle(style, "border", "width"); - const { x, y, box } = getCanvasPosition(event, canvas); - const xOffset = paddings.left + (box && borders.left); - const yOffset = paddings.top + (box && borders.top); - let { width, height } = chart; - if (borderBox) { - width -= paddings.width + borders.width; - height -= paddings.height + borders.height; - } - return { - x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio), - y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio) - }; -} -function getContainerSize(canvas, width, height) { - let maxWidth, maxHeight; - if (width === void 0 || height === void 0) { - const container = _getParentNode(canvas); - if (!container) { - width = canvas.clientWidth; - height = canvas.clientHeight; - } else { - const rect = container.getBoundingClientRect(); - const containerStyle = getComputedStyle2(container); - const containerBorder = getPositionedStyle(containerStyle, "border", "width"); - const containerPadding = getPositionedStyle(containerStyle, "padding"); - width = rect.width - containerPadding.width - containerBorder.width; - height = rect.height - containerPadding.height - containerBorder.height; - maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth"); - maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight"); - } - } - return { - width, - height, - maxWidth: maxWidth || INFINITY, - maxHeight: maxHeight || INFINITY - }; -} -var round1 = (v) => Math.round(v * 10) / 10; -function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) { - const style = getComputedStyle2(canvas); - const margins = getPositionedStyle(style, "margin"); - const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY; - const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY; - const containerSize = getContainerSize(canvas, bbWidth, bbHeight); - let { width, height } = containerSize; - if (style.boxSizing === "content-box") { - const borders = getPositionedStyle(style, "border", "width"); - const paddings = getPositionedStyle(style, "padding"); - width -= paddings.width + borders.width; - height -= paddings.height + borders.height; - } - width = Math.max(0, width - margins.width); - height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height); - width = round1(Math.min(width, maxWidth, containerSize.maxWidth)); - height = round1(Math.min(height, maxHeight, containerSize.maxHeight)); - if (width && !height) { - height = round1(width / 2); - } - const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0; - if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) { - height = containerSize.height; - width = round1(Math.floor(height * aspectRatio)); - } - return { - width, - height - }; -} -function retinaScale(chart, forceRatio, forceStyle) { - const pixelRatio = forceRatio || 1; - const deviceHeight = Math.floor(chart.height * pixelRatio); - const deviceWidth = Math.floor(chart.width * pixelRatio); - chart.height = Math.floor(chart.height); - chart.width = Math.floor(chart.width); - const canvas = chart.canvas; - if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) { - canvas.style.height = `${chart.height}px`; - canvas.style.width = `${chart.width}px`; - } - if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) { - chart.currentDevicePixelRatio = pixelRatio; - canvas.height = deviceHeight; - canvas.width = deviceWidth; - chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); - return true; - } - return false; -} -var supportsEventListenerOptions = function() { - let passiveSupported = false; - try { - const options = { - get passive() { - passiveSupported = true; - return false; - } - }; - window.addEventListener("test", null, options); - window.removeEventListener("test", null, options); - } catch (e) { - } - return passiveSupported; -}(); -function readUsedSize(element, property) { - const value = getStyle(element, property); - const matches = value && value.match(/^(\d+)(\.\d+)?px$/); - return matches ? +matches[1] : void 0; -} -var getRightToLeftAdapter = function(rectX, width) { - return { - x(x) { - return rectX + rectX + width - x; - }, - setWidth(w) { - width = w; - }, - textAlign(align) { - if (align === "center") { - return align; - } - return align === "right" ? "left" : "right"; - }, - xPlus(x, value) { - return x - value; - }, - leftForLtr(x, itemWidth) { - return x - itemWidth; - } - }; -}; -var getLeftToRightAdapter = function() { - return { - x(x) { - return x; - }, - setWidth(w) { - }, - textAlign(align) { - return align; - }, - xPlus(x, value) { - return x + value; - }, - leftForLtr(x, _itemWidth) { - return x; - } - }; -}; -function getRtlAdapter(rtl, rectX, width) { - return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter(); -} -function overrideTextDirection(ctx, direction) { - let style, original; - if (direction === "ltr" || direction === "rtl") { - style = ctx.canvas.style; - original = [ - style.getPropertyValue("direction"), - style.getPropertyPriority("direction") - ]; - style.setProperty("direction", direction, "important"); - ctx.prevTextDirection = original; - } -} -function restoreTextDirection(ctx, original) { - if (original !== void 0) { - delete ctx.prevTextDirection; - ctx.canvas.style.setProperty("direction", original[0], original[1]); - } -} - -// node_modules/chart.js/dist/chart.js -var Animator = class { - constructor() { - this._request = null; - this._charts = /* @__PURE__ */ new Map(); - this._running = false; - this._lastDate = void 0; - } - _notify(chart, anims, date, type) { - const callbacks = anims.listeners[type]; - const numSteps = anims.duration; - callbacks.forEach((fn) => fn({ - chart, - initial: anims.initial, - numSteps, - currentStep: Math.min(date - anims.start, numSteps) - })); - } - _refresh() { - if (this._request) { - return; - } - this._running = true; - this._request = requestAnimFrame.call(window, () => { - this._update(); - this._request = null; - if (this._running) { - this._refresh(); - } - }); - } - _update(date = Date.now()) { - let remaining = 0; - this._charts.forEach((anims, chart) => { - if (!anims.running || !anims.items.length) { - return; - } - const items = anims.items; - let i = items.length - 1; - let draw = false; - let item; - for (; i >= 0; --i) { - item = items[i]; - if (item._active) { - if (item._total > anims.duration) { - anims.duration = item._total; - } - item.tick(date); - draw = true; - } else { - items[i] = items[items.length - 1]; - items.pop(); - } - } - if (draw) { - chart.draw(); - this._notify(chart, anims, date, "progress"); - } - if (!items.length) { - anims.running = false; - this._notify(chart, anims, date, "complete"); - anims.initial = false; - } - remaining += items.length; - }); - this._lastDate = date; - if (remaining === 0) { - this._running = false; - } - } - _getAnims(chart) { - const charts = this._charts; - let anims = charts.get(chart); - if (!anims) { - anims = { - running: false, - initial: true, - items: [], - listeners: { - complete: [], - progress: [] - } - }; - charts.set(chart, anims); - } - return anims; - } - listen(chart, event, cb) { - this._getAnims(chart).listeners[event].push(cb); - } - add(chart, items) { - if (!items || !items.length) { - return; - } - this._getAnims(chart).items.push(...items); - } - has(chart) { - return this._getAnims(chart).items.length > 0; - } - start(chart) { - const anims = this._charts.get(chart); - if (!anims) { - return; - } - anims.running = true; - anims.start = Date.now(); - anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0); - this._refresh(); - } - running(chart) { - if (!this._running) { - return false; - } - const anims = this._charts.get(chart); - if (!anims || !anims.running || !anims.items.length) { - return false; - } - return true; - } - stop(chart) { - const anims = this._charts.get(chart); - if (!anims || !anims.items.length) { - return; - } - const items = anims.items; - let i = items.length - 1; - for (; i >= 0; --i) { - items[i].cancel(); - } - anims.items = []; - this._notify(chart, anims, Date.now(), "complete"); - } - remove(chart) { - return this._charts.delete(chart); - } -}; -var animator = /* @__PURE__ */ new Animator(); -var transparent = "transparent"; -var interpolators = { - boolean(from2, to2, factor) { - return factor > 0.5 ? to2 : from2; - }, - color(from2, to2, factor) { - const c0 = color(from2 || transparent); - const c1 = c0.valid && color(to2 || transparent); - return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2; - }, - number(from2, to2, factor) { - return from2 + (to2 - from2) * factor; - } -}; -var Animation = class { - constructor(cfg, target, prop, to2) { - const currentValue = target[prop]; - to2 = resolve([ - cfg.to, - to2, - currentValue, - cfg.from - ]); - const from2 = resolve([ - cfg.from, - currentValue, - to2 - ]); - this._active = true; - this._fn = cfg.fn || interpolators[cfg.type || typeof from2]; - this._easing = effects[cfg.easing] || effects.linear; - this._start = Math.floor(Date.now() + (cfg.delay || 0)); - this._duration = this._total = Math.floor(cfg.duration); - this._loop = !!cfg.loop; - this._target = target; - this._prop = prop; - this._from = from2; - this._to = to2; - this._promises = void 0; - } - active() { - return this._active; - } - update(cfg, to2, date) { - if (this._active) { - this._notify(false); - const currentValue = this._target[this._prop]; - const elapsed = date - this._start; - const remain = this._duration - elapsed; - this._start = date; - this._duration = Math.floor(Math.max(remain, cfg.duration)); - this._total += elapsed; - this._loop = !!cfg.loop; - this._to = resolve([ - cfg.to, - to2, - currentValue, - cfg.from - ]); - this._from = resolve([ - cfg.from, - currentValue, - to2 - ]); - } - } - cancel() { - if (this._active) { - this.tick(Date.now()); - this._active = false; - this._notify(false); - } - } - tick(date) { - const elapsed = date - this._start; - const duration = this._duration; - const prop = this._prop; - const from2 = this._from; - const loop = this._loop; - const to2 = this._to; - let factor; - this._active = from2 !== to2 && (loop || elapsed < duration); - if (!this._active) { - this._target[prop] = to2; - this._notify(true); - return; - } - if (elapsed < 0) { - this._target[prop] = from2; - return; - } - factor = elapsed / duration % 2; - factor = loop && factor > 1 ? 2 - factor : factor; - factor = this._easing(Math.min(1, Math.max(0, factor))); - this._target[prop] = this._fn(from2, to2, factor); - } - wait() { - const promises = this._promises || (this._promises = []); - return new Promise((res, rej) => { - promises.push({ - res, - rej - }); - }); - } - _notify(resolved) { - const method = resolved ? "res" : "rej"; - const promises = this._promises || []; - for (let i = 0; i < promises.length; i++) { - promises[i][method](); - } - } -}; -var Animations = class { - constructor(chart, config) { - this._chart = chart; - this._properties = /* @__PURE__ */ new Map(); - this.configure(config); - } - configure(config) { - if (!isObject(config)) { - return; - } - const animationOptions = Object.keys(defaults.animation); - const animatedProps = this._properties; - Object.getOwnPropertyNames(config).forEach((key) => { - const cfg = config[key]; - if (!isObject(cfg)) { - return; - } - const resolved = {}; - for (const option of animationOptions) { - resolved[option] = cfg[option]; - } - (isArray(cfg.properties) && cfg.properties || [ - key - ]).forEach((prop) => { - if (prop === key || !animatedProps.has(prop)) { - animatedProps.set(prop, resolved); - } - }); - }); - } - _animateOptions(target, values) { - const newOptions = values.options; - const options = resolveTargetOptions(target, newOptions); - if (!options) { - return []; - } - const animations = this._createAnimations(options, newOptions); - if (newOptions.$shared) { - awaitAll(target.options.$animations, newOptions).then(() => { - target.options = newOptions; - }, () => { - }); - } - return animations; - } - _createAnimations(target, values) { - const animatedProps = this._properties; - const animations = []; - const running = target.$animations || (target.$animations = {}); - const props = Object.keys(values); - const date = Date.now(); - let i; - for (i = props.length - 1; i >= 0; --i) { - const prop = props[i]; - if (prop.charAt(0) === "$") { - continue; - } - if (prop === "options") { - animations.push(...this._animateOptions(target, values)); - continue; - } - const value = values[prop]; - let animation = running[prop]; - const cfg = animatedProps.get(prop); - if (animation) { - if (cfg && animation.active()) { - animation.update(cfg, value, date); - continue; - } else { - animation.cancel(); - } - } - if (!cfg || !cfg.duration) { - target[prop] = value; - continue; - } - running[prop] = animation = new Animation(cfg, target, prop, value); - animations.push(animation); - } - return animations; - } - update(target, values) { - if (this._properties.size === 0) { - Object.assign(target, values); - return; - } - const animations = this._createAnimations(target, values); - if (animations.length) { - animator.add(this._chart, animations); - return true; - } - } -}; -function awaitAll(animations, properties) { - const running = []; - const keys = Object.keys(properties); - for (let i = 0; i < keys.length; i++) { - const anim = animations[keys[i]]; - if (anim && anim.active()) { - running.push(anim.wait()); - } - } - return Promise.all(running); -} -function resolveTargetOptions(target, newOptions) { - if (!newOptions) { - return; - } - let options = target.options; - if (!options) { - target.options = newOptions; - return; - } - if (options.$shared) { - target.options = options = Object.assign({}, options, { - $shared: false, - $animations: {} - }); - } - return options; -} -function scaleClip(scale, allowedOverflow) { - const opts = scale && scale.options || {}; - const reverse = opts.reverse; - const min = opts.min === void 0 ? allowedOverflow : 0; - const max = opts.max === void 0 ? allowedOverflow : 0; - return { - start: reverse ? max : min, - end: reverse ? min : max - }; -} -function defaultClip(xScale, yScale, allowedOverflow) { - if (allowedOverflow === false) { - return false; - } - const x = scaleClip(xScale, allowedOverflow); - const y = scaleClip(yScale, allowedOverflow); - return { - top: y.end, - right: x.end, - bottom: y.start, - left: x.start - }; -} -function toClip(value) { - let t2, r, b, l; - if (isObject(value)) { - t2 = value.top; - r = value.right; - b = value.bottom; - l = value.left; - } else { - t2 = r = b = l = value; - } - return { - top: t2, - right: r, - bottom: b, - left: l, - disabled: value === false - }; -} -function getSortedDatasetIndices(chart, filterVisible) { - const keys = []; - const metasets = chart._getSortedDatasetMetas(filterVisible); - let i, ilen; - for (i = 0, ilen = metasets.length; i < ilen; ++i) { - keys.push(metasets[i].index); - } - return keys; -} -function applyStack(stack, value, dsIndex, options = {}) { - const keys = stack.keys; - const singleMode = options.mode === "single"; - let i, ilen, datasetIndex, otherValue; - if (value === null) { - return; - } - for (i = 0, ilen = keys.length; i < ilen; ++i) { - datasetIndex = +keys[i]; - if (datasetIndex === dsIndex) { - if (options.all) { - continue; - } - break; - } - otherValue = stack.values[datasetIndex]; - if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) { - value += otherValue; - } - } - return value; -} -function convertObjectDataToArray(data) { - const keys = Object.keys(data); - const adata = new Array(keys.length); - let i, ilen, key; - for (i = 0, ilen = keys.length; i < ilen; ++i) { - key = keys[i]; - adata[i] = { - x: key, - y: data[key] - }; - } - return adata; -} -function isStacked(scale, meta) { - const stacked = scale && scale.options.stacked; - return stacked || stacked === void 0 && meta.stack !== void 0; -} -function getStackKey(indexScale, valueScale, meta) { - return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`; -} -function getUserBounds(scale) { - const { min, max, minDefined, maxDefined } = scale.getUserBounds(); - return { - min: minDefined ? min : Number.NEGATIVE_INFINITY, - max: maxDefined ? max : Number.POSITIVE_INFINITY - }; -} -function getOrCreateStack(stacks, stackKey, indexValue) { - const subStack = stacks[stackKey] || (stacks[stackKey] = {}); - return subStack[indexValue] || (subStack[indexValue] = {}); -} -function getLastIndexInStack(stack, vScale, positive, type) { - for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) { - const value = stack[meta.index]; - if (positive && value > 0 || !positive && value < 0) { - return meta.index; - } - } - return null; -} -function updateStacks(controller, parsed) { - const { chart, _cachedMeta: meta } = controller; - const stacks = chart._stacks || (chart._stacks = {}); - const { iScale, vScale, index: datasetIndex } = meta; - const iAxis = iScale.axis; - const vAxis = vScale.axis; - const key = getStackKey(iScale, vScale, meta); - const ilen = parsed.length; - let stack; - for (let i = 0; i < ilen; ++i) { - const item = parsed[i]; - const { [iAxis]: index, [vAxis]: value } = item; - const itemStacks = item._stacks || (item._stacks = {}); - stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index); - stack[datasetIndex] = value; - stack._top = getLastIndexInStack(stack, vScale, true, meta.type); - stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type); - const visualValues = stack._visualValues || (stack._visualValues = {}); - visualValues[datasetIndex] = value; - } -} -function getFirstScaleId(chart, axis) { - const scales = chart.scales; - return Object.keys(scales).filter((key) => scales[key].axis === axis).shift(); -} -function createDatasetContext(parent, index) { - return createContext(parent, { - active: false, - dataset: void 0, - datasetIndex: index, - index, - mode: "default", - type: "dataset" - }); -} -function createDataContext(parent, index, element) { - return createContext(parent, { - active: false, - dataIndex: index, - parsed: void 0, - raw: void 0, - element, - index, - mode: "default", - type: "data" - }); -} -function clearStacks(meta, items) { - const datasetIndex = meta.controller.index; - const axis = meta.vScale && meta.vScale.axis; - if (!axis) { - return; - } - items = items || meta._parsed; - for (const parsed of items) { - const stacks = parsed._stacks; - if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) { - return; - } - delete stacks[axis][datasetIndex]; - if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) { - delete stacks[axis]._visualValues[datasetIndex]; - } - } -} -var isDirectUpdateMode = (mode) => mode === "reset" || mode === "none"; -var cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); -var createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && { - keys: getSortedDatasetIndices(chart, true), - values: null -}; -var DatasetController = class { - constructor(chart, datasetIndex) { - this.chart = chart; - this._ctx = chart.ctx; - this.index = datasetIndex; - this._cachedDataOpts = {}; - this._cachedMeta = this.getMeta(); - this._type = this._cachedMeta.type; - this.options = void 0; - this._parsing = false; - this._data = void 0; - this._objectData = void 0; - this._sharedOptions = void 0; - this._drawStart = void 0; - this._drawCount = void 0; - this.enableOptionSharing = false; - this.supportsDecimation = false; - this.$context = void 0; - this._syncList = []; - this.datasetElementType = new.target.datasetElementType; - this.dataElementType = new.target.dataElementType; - this.initialize(); - } - initialize() { - const meta = this._cachedMeta; - this.configure(); - this.linkScales(); - meta._stacked = isStacked(meta.vScale, meta); - this.addElements(); - if (this.options.fill && !this.chart.isPluginEnabled("filler")) { - console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options"); - } - } - updateIndex(datasetIndex) { - if (this.index !== datasetIndex) { - clearStacks(this._cachedMeta); - } - this.index = datasetIndex; - } - linkScales() { - const chart = this.chart; - const meta = this._cachedMeta; - const dataset = this.getDataset(); - const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y; - const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, "x")); - const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, "y")); - const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, "r")); - const indexAxis = meta.indexAxis; - const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid); - const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid); - meta.xScale = this.getScaleForId(xid); - meta.yScale = this.getScaleForId(yid); - meta.rScale = this.getScaleForId(rid); - meta.iScale = this.getScaleForId(iid); - meta.vScale = this.getScaleForId(vid); - } - getDataset() { - return this.chart.data.datasets[this.index]; - } - getMeta() { - return this.chart.getDatasetMeta(this.index); - } - getScaleForId(scaleID) { - return this.chart.scales[scaleID]; - } - _getOtherScale(scale) { - const meta = this._cachedMeta; - return scale === meta.iScale ? meta.vScale : meta.iScale; - } - reset() { - this._update("reset"); - } - _destroy() { - const meta = this._cachedMeta; - if (this._data) { - unlistenArrayEvents(this._data, this); - } - if (meta._stacked) { - clearStacks(meta); - } - } - _dataCheck() { - const dataset = this.getDataset(); - const data = dataset.data || (dataset.data = []); - const _data = this._data; - if (isObject(data)) { - this._data = convertObjectDataToArray(data); - } else if (_data !== data) { - if (_data) { - unlistenArrayEvents(_data, this); - const meta = this._cachedMeta; - clearStacks(meta); - meta._parsed = []; - } - if (data && Object.isExtensible(data)) { - listenArrayEvents(data, this); - } - this._syncList = []; - this._data = data; - } - } - addElements() { - const meta = this._cachedMeta; - this._dataCheck(); - if (this.datasetElementType) { - meta.dataset = new this.datasetElementType(); - } - } - buildOrUpdateElements(resetNewElements) { - const meta = this._cachedMeta; - const dataset = this.getDataset(); - let stackChanged = false; - this._dataCheck(); - const oldStacked = meta._stacked; - meta._stacked = isStacked(meta.vScale, meta); - if (meta.stack !== dataset.stack) { - stackChanged = true; - clearStacks(meta); - meta.stack = dataset.stack; - } - this._resyncElements(resetNewElements); - if (stackChanged || oldStacked !== meta._stacked) { - updateStacks(this, meta._parsed); - } - } - configure() { - const config = this.chart.config; - const scopeKeys = config.datasetScopeKeys(this._type); - const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true); - this.options = config.createResolver(scopes, this.getContext()); - this._parsing = this.options.parsing; - this._cachedDataOpts = {}; - } - parse(start, count) { - const { _cachedMeta: meta, _data: data } = this; - const { iScale, _stacked } = meta; - const iAxis = iScale.axis; - let sorted = start === 0 && count === data.length ? true : meta._sorted; - let prev = start > 0 && meta._parsed[start - 1]; - let i, cur, parsed; - if (this._parsing === false) { - meta._parsed = data; - meta._sorted = true; - parsed = data; - } else { - if (isArray(data[start])) { - parsed = this.parseArrayData(meta, data, start, count); - } else if (isObject(data[start])) { - parsed = this.parseObjectData(meta, data, start, count); - } else { - parsed = this.parsePrimitiveData(meta, data, start, count); - } - const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis]; - for (i = 0; i < count; ++i) { - meta._parsed[i + start] = cur = parsed[i]; - if (sorted) { - if (isNotInOrderComparedToPrev()) { - sorted = false; - } - prev = cur; - } - } - meta._sorted = sorted; - } - if (_stacked) { - updateStacks(this, parsed); - } - } - parsePrimitiveData(meta, data, start, count) { - const { iScale, vScale } = meta; - const iAxis = iScale.axis; - const vAxis = vScale.axis; - const labels = iScale.getLabels(); - const singleScale = iScale === vScale; - const parsed = new Array(count); - let i, ilen, index; - for (i = 0, ilen = count; i < ilen; ++i) { - index = i + start; - parsed[i] = { - [iAxis]: singleScale || iScale.parse(labels[index], index), - [vAxis]: vScale.parse(data[index], index) - }; - } - return parsed; - } - parseArrayData(meta, data, start, count) { - const { xScale, yScale } = meta; - const parsed = new Array(count); - let i, ilen, index, item; - for (i = 0, ilen = count; i < ilen; ++i) { - index = i + start; - item = data[index]; - parsed[i] = { - x: xScale.parse(item[0], index), - y: yScale.parse(item[1], index) - }; - } - return parsed; - } - parseObjectData(meta, data, start, count) { - const { xScale, yScale } = meta; - const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; - const parsed = new Array(count); - let i, ilen, index, item; - for (i = 0, ilen = count; i < ilen; ++i) { - index = i + start; - item = data[index]; - parsed[i] = { - x: xScale.parse(resolveObjectKey(item, xAxisKey), index), - y: yScale.parse(resolveObjectKey(item, yAxisKey), index) - }; - } - return parsed; - } - getParsed(index) { - return this._cachedMeta._parsed[index]; - } - getDataElement(index) { - return this._cachedMeta.data[index]; - } - applyStack(scale, parsed, mode) { - const chart = this.chart; - const meta = this._cachedMeta; - const value = parsed[scale.axis]; - const stack = { - keys: getSortedDatasetIndices(chart, true), - values: parsed._stacks[scale.axis]._visualValues - }; - return applyStack(stack, value, meta.index, { - mode - }); - } - updateRangeFromParsed(range, scale, parsed, stack) { - const parsedValue = parsed[scale.axis]; - let value = parsedValue === null ? NaN : parsedValue; - const values = stack && parsed._stacks[scale.axis]; - if (stack && values) { - stack.values = values; - value = applyStack(stack, parsedValue, this._cachedMeta.index); - } - range.min = Math.min(range.min, value); - range.max = Math.max(range.max, value); - } - getMinMax(scale, canStack) { - const meta = this._cachedMeta; - const _parsed = meta._parsed; - const sorted = meta._sorted && scale === meta.iScale; - const ilen = _parsed.length; - const otherScale = this._getOtherScale(scale); - const stack = createStack(canStack, meta, this.chart); - const range = { - min: Number.POSITIVE_INFINITY, - max: Number.NEGATIVE_INFINITY - }; - const { min: otherMin, max: otherMax } = getUserBounds(otherScale); - let i, parsed; - function _skip() { - parsed = _parsed[i]; - const otherValue = parsed[otherScale.axis]; - return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; - } - for (i = 0; i < ilen; ++i) { - if (_skip()) { - continue; - } - this.updateRangeFromParsed(range, scale, parsed, stack); - if (sorted) { - break; - } - } - if (sorted) { - for (i = ilen - 1; i >= 0; --i) { - if (_skip()) { - continue; - } - this.updateRangeFromParsed(range, scale, parsed, stack); - break; - } - } - return range; - } - getAllParsedValues(scale) { - const parsed = this._cachedMeta._parsed; - const values = []; - let i, ilen, value; - for (i = 0, ilen = parsed.length; i < ilen; ++i) { - value = parsed[i][scale.axis]; - if (isNumberFinite(value)) { - values.push(value); - } - } - return values; - } - getMaxOverflow() { - return false; - } - getLabelAndValue(index) { - const meta = this._cachedMeta; - const iScale = meta.iScale; - const vScale = meta.vScale; - const parsed = this.getParsed(index); - return { - label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "", - value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : "" - }; - } - _update(mode) { - const meta = this._cachedMeta; - this.update(mode || "default"); - meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow()))); - } - update(mode) { - } - draw() { - const ctx = this._ctx; - const chart = this.chart; - const meta = this._cachedMeta; - const elements = meta.data || []; - const area = chart.chartArea; - const active = []; - const start = this._drawStart || 0; - const count = this._drawCount || elements.length - start; - const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop; - let i; - if (meta.dataset) { - meta.dataset.draw(ctx, area, start, count); - } - for (i = start; i < start + count; ++i) { - const element = elements[i]; - if (element.hidden) { - continue; - } - if (element.active && drawActiveElementsOnTop) { - active.push(element); - } else { - element.draw(ctx, area); - } - } - for (i = 0; i < active.length; ++i) { - active[i].draw(ctx, area); - } - } - getStyle(index, active) { - const mode = active ? "active" : "default"; - return index === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode); - } - getContext(index, active, mode) { - const dataset = this.getDataset(); - let context; - if (index >= 0 && index < this._cachedMeta.data.length) { - const element = this._cachedMeta.data[index]; - context = element.$context || (element.$context = createDataContext(this.getContext(), index, element)); - context.parsed = this.getParsed(index); - context.raw = dataset.data[index]; - context.index = context.dataIndex = index; - } else { - context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index)); - context.dataset = dataset; - context.index = context.datasetIndex = this.index; - } - context.active = !!active; - context.mode = mode; - return context; - } - resolveDatasetElementOptions(mode) { - return this._resolveElementOptions(this.datasetElementType.id, mode); - } - resolveDataElementOptions(index, mode) { - return this._resolveElementOptions(this.dataElementType.id, mode, index); - } - _resolveElementOptions(elementType, mode = "default", index) { - const active = mode === "active"; - const cache = this._cachedDataOpts; - const cacheKey = elementType + "-" + mode; - const cached = cache[cacheKey]; - const sharing = this.enableOptionSharing && defined(index); - if (cached) { - return cloneIfNotShared(cached, sharing); - } - const config = this.chart.config; - const scopeKeys = config.datasetElementScopeKeys(this._type, elementType); - const prefixes = active ? [ - `${elementType}Hover`, - "hover", - elementType, - "" - ] : [ - elementType, - "" - ]; - const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); - const names2 = Object.keys(defaults.elements[elementType]); - const context = () => this.getContext(index, active, mode); - const values = config.resolveNamedOptions(scopes, names2, context, prefixes); - if (values.$shared) { - values.$shared = sharing; - cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing)); - } - return values; - } - _resolveAnimations(index, transition, active) { - const chart = this.chart; - const cache = this._cachedDataOpts; - const cacheKey = `animation-${transition}`; - const cached = cache[cacheKey]; - if (cached) { - return cached; - } - let options; - if (chart.options.animation !== false) { - const config = this.chart.config; - const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition); - const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); - options = config.createResolver(scopes, this.getContext(index, active, transition)); - } - const animations = new Animations(chart, options && options.animations); - if (options && options._cacheable) { - cache[cacheKey] = Object.freeze(animations); - } - return animations; - } - getSharedOptions(options) { - if (!options.$shared) { - return; - } - return this._sharedOptions || (this._sharedOptions = Object.assign({}, options)); - } - includeOptions(mode, sharedOptions) { - return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled; - } - _getSharedOptions(start, mode) { - const firstOpts = this.resolveDataElementOptions(start, mode); - const previouslySharedOptions = this._sharedOptions; - const sharedOptions = this.getSharedOptions(firstOpts); - const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions; - this.updateSharedOptions(sharedOptions, mode, firstOpts); - return { - sharedOptions, - includeOptions - }; - } - updateElement(element, index, properties, mode) { - if (isDirectUpdateMode(mode)) { - Object.assign(element, properties); - } else { - this._resolveAnimations(index, mode).update(element, properties); - } - } - updateSharedOptions(sharedOptions, mode, newOptions) { - if (sharedOptions && !isDirectUpdateMode(mode)) { - this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions); - } - } - _setStyle(element, index, mode, active) { - element.active = active; - const options = this.getStyle(index, active); - this._resolveAnimations(index, mode, active).update(element, { - options: !active && this.getSharedOptions(options) || options - }); - } - removeHoverStyle(element, datasetIndex, index) { - this._setStyle(element, index, "active", false); - } - setHoverStyle(element, datasetIndex, index) { - this._setStyle(element, index, "active", true); - } - _removeDatasetHoverStyle() { - const element = this._cachedMeta.dataset; - if (element) { - this._setStyle(element, void 0, "active", false); - } - } - _setDatasetHoverStyle() { - const element = this._cachedMeta.dataset; - if (element) { - this._setStyle(element, void 0, "active", true); - } - } - _resyncElements(resetNewElements) { - const data = this._data; - const elements = this._cachedMeta.data; - for (const [method, arg1, arg2] of this._syncList) { - this[method](arg1, arg2); - } - this._syncList = []; - const numMeta = elements.length; - const numData = data.length; - const count = Math.min(numData, numMeta); - if (count) { - this.parse(0, count); - } - if (numData > numMeta) { - this._insertElements(numMeta, numData - numMeta, resetNewElements); - } else if (numData < numMeta) { - this._removeElements(numData, numMeta - numData); - } - } - _insertElements(start, count, resetNewElements = true) { - const meta = this._cachedMeta; - const data = meta.data; - const end = start + count; - let i; - const move = (arr) => { - arr.length += count; - for (i = arr.length - 1; i >= end; i--) { - arr[i] = arr[i - count]; - } - }; - move(data); - for (i = start; i < end; ++i) { - data[i] = new this.dataElementType(); - } - if (this._parsing) { - move(meta._parsed); - } - this.parse(start, count); - if (resetNewElements) { - this.updateElements(data, start, count, "reset"); - } - } - updateElements(element, start, count, mode) { - } - _removeElements(start, count) { - const meta = this._cachedMeta; - if (this._parsing) { - const removed = meta._parsed.splice(start, count); - if (meta._stacked) { - clearStacks(meta, removed); - } - } - meta.data.splice(start, count); - } - _sync(args) { - if (this._parsing) { - this._syncList.push(args); - } else { - const [method, arg1, arg2] = args; - this[method](arg1, arg2); - } - this.chart._dataChanges.push([ - this.index, - ...args - ]); - } - _onDataPush() { - const count = arguments.length; - this._sync([ - "_insertElements", - this.getDataset().data.length - count, - count - ]); - } - _onDataPop() { - this._sync([ - "_removeElements", - this._cachedMeta.data.length - 1, - 1 - ]); - } - _onDataShift() { - this._sync([ - "_removeElements", - 0, - 1 - ]); - } - _onDataSplice(start, count) { - if (count) { - this._sync([ - "_removeElements", - start, - count - ]); - } - const newCount = arguments.length - 2; - if (newCount) { - this._sync([ - "_insertElements", - start, - newCount - ]); - } - } - _onDataUnshift() { - this._sync([ - "_insertElements", - 0, - arguments.length - ]); - } -}; -__publicField(DatasetController, "defaults", {}); -__publicField(DatasetController, "datasetElementType", null); -__publicField(DatasetController, "dataElementType", null); -function getAllScaleValues(scale, type) { - if (!scale._cache.$bar) { - const visibleMetas = scale.getMatchingVisibleMetas(type); - let values = []; - for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) { - values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale)); - } - scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b)); - } - return scale._cache.$bar; -} -function computeMinSampleSize(meta) { - const scale = meta.iScale; - const values = getAllScaleValues(scale, meta.type); - let min = scale._length; - let i, ilen, curr, prev; - const updateMinAndPrev = () => { - if (curr === 32767 || curr === -32768) { - return; - } - if (defined(prev)) { - min = Math.min(min, Math.abs(curr - prev) || min); - } - prev = curr; - }; - for (i = 0, ilen = values.length; i < ilen; ++i) { - curr = scale.getPixelForValue(values[i]); - updateMinAndPrev(); - } - prev = void 0; - for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) { - curr = scale.getPixelForTick(i); - updateMinAndPrev(); - } - return min; -} -function computeFitCategoryTraits(index, ruler, options, stackCount) { - const thickness = options.barThickness; - let size, ratio; - if (isNullOrUndef(thickness)) { - size = ruler.min * options.categoryPercentage; - ratio = options.barPercentage; - } else { - size = thickness * stackCount; - ratio = 1; - } - return { - chunk: size / stackCount, - ratio, - start: ruler.pixels[index] - size / 2 - }; -} -function computeFlexCategoryTraits(index, ruler, options, stackCount) { - const pixels = ruler.pixels; - const curr = pixels[index]; - let prev = index > 0 ? pixels[index - 1] : null; - let next = index < pixels.length - 1 ? pixels[index + 1] : null; - const percent = options.categoryPercentage; - if (prev === null) { - prev = curr - (next === null ? ruler.end - ruler.start : next - curr); - } - if (next === null) { - next = curr + curr - prev; - } - const start = curr - (curr - Math.min(prev, next)) / 2 * percent; - const size = Math.abs(next - prev) / 2 * percent; - return { - chunk: size / stackCount, - ratio: options.barPercentage, - start - }; -} -function parseFloatBar(entry, item, vScale, i) { - const startValue = vScale.parse(entry[0], i); - const endValue = vScale.parse(entry[1], i); - const min = Math.min(startValue, endValue); - const max = Math.max(startValue, endValue); - let barStart = min; - let barEnd = max; - if (Math.abs(min) > Math.abs(max)) { - barStart = max; - barEnd = min; - } - item[vScale.axis] = barEnd; - item._custom = { - barStart, - barEnd, - start: startValue, - end: endValue, - min, - max - }; -} -function parseValue(entry, item, vScale, i) { - if (isArray(entry)) { - parseFloatBar(entry, item, vScale, i); - } else { - item[vScale.axis] = vScale.parse(entry, i); - } - return item; -} -function parseArrayOrPrimitive(meta, data, start, count) { - const iScale = meta.iScale; - const vScale = meta.vScale; - const labels = iScale.getLabels(); - const singleScale = iScale === vScale; - const parsed = []; - let i, ilen, item, entry; - for (i = start, ilen = start + count; i < ilen; ++i) { - entry = data[i]; - item = {}; - item[iScale.axis] = singleScale || iScale.parse(labels[i], i); - parsed.push(parseValue(entry, item, vScale, i)); - } - return parsed; -} -function isFloatBar(custom) { - return custom && custom.barStart !== void 0 && custom.barEnd !== void 0; -} -function barSign(size, vScale, actualBase) { - if (size !== 0) { - return sign(size); - } - return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1); -} -function borderProps(properties) { - let reverse, start, end, top, bottom; - if (properties.horizontal) { - reverse = properties.base > properties.x; - start = "left"; - end = "right"; - } else { - reverse = properties.base < properties.y; - start = "bottom"; - end = "top"; - } - if (reverse) { - top = "end"; - bottom = "start"; - } else { - top = "start"; - bottom = "end"; - } - return { - start, - end, - reverse, - top, - bottom - }; -} -function setBorderSkipped(properties, options, stack, index) { - let edge = options.borderSkipped; - const res = {}; - if (!edge) { - properties.borderSkipped = res; - return; - } - if (edge === true) { - properties.borderSkipped = { - top: true, - right: true, - bottom: true, - left: true - }; - return; - } - const { start, end, reverse, top, bottom } = borderProps(properties); - if (edge === "middle" && stack) { - properties.enableBorderRadius = true; - if ((stack._top || 0) === index) { - edge = top; - } else if ((stack._bottom || 0) === index) { - edge = bottom; - } else { - res[parseEdge(bottom, start, end, reverse)] = true; - edge = top; - } - } - res[parseEdge(edge, start, end, reverse)] = true; - properties.borderSkipped = res; -} -function parseEdge(edge, a, b, reverse) { - if (reverse) { - edge = swap(edge, a, b); - edge = startEnd(edge, b, a); - } else { - edge = startEnd(edge, a, b); - } - return edge; -} -function swap(orig, v1, v2) { - return orig === v1 ? v2 : orig === v2 ? v1 : orig; -} -function startEnd(v, start, end) { - return v === "start" ? start : v === "end" ? end : v; -} -function setInflateAmount(properties, { inflateAmount }, ratio) { - properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount; -} -var BarController = class extends DatasetController { - parsePrimitiveData(meta, data, start, count) { - return parseArrayOrPrimitive(meta, data, start, count); - } - parseArrayData(meta, data, start, count) { - return parseArrayOrPrimitive(meta, data, start, count); - } - parseObjectData(meta, data, start, count) { - const { iScale, vScale } = meta; - const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; - const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey; - const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey; - const parsed = []; - let i, ilen, item, obj; - for (i = start, ilen = start + count; i < ilen; ++i) { - obj = data[i]; - item = {}; - item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i); - parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i)); - } - return parsed; - } - updateRangeFromParsed(range, scale, parsed, stack) { - super.updateRangeFromParsed(range, scale, parsed, stack); - const custom = parsed._custom; - if (custom && scale === this._cachedMeta.vScale) { - range.min = Math.min(range.min, custom.min); - range.max = Math.max(range.max, custom.max); - } - } - getMaxOverflow() { - return 0; - } - getLabelAndValue(index) { - const meta = this._cachedMeta; - const { iScale, vScale } = meta; - const parsed = this.getParsed(index); - const custom = parsed._custom; - const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]); - return { - label: "" + iScale.getLabelForValue(parsed[iScale.axis]), - value - }; - } - initialize() { - this.enableOptionSharing = true; - super.initialize(); - const meta = this._cachedMeta; - meta.stack = this.getDataset().stack; - } - update(mode) { - const meta = this._cachedMeta; - this.updateElements(meta.data, 0, meta.data.length, mode); - } - updateElements(bars, start, count, mode) { - const reset2 = mode === "reset"; - const { index, _cachedMeta: { vScale } } = this; - const base = vScale.getBasePixel(); - const horizontal = vScale.isHorizontal(); - const ruler = this._getRuler(); - const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); - for (let i = start; i < start + count; i++) { - const parsed = this.getParsed(i); - const vpixels = reset2 || isNullOrUndef(parsed[vScale.axis]) ? { - base, - head: base - } : this._calculateBarValuePixels(i); - const ipixels = this._calculateBarIndexPixels(i, ruler); - const stack = (parsed._stacks || {})[vScale.axis]; - const properties = { - horizontal, - base: vpixels.base, - enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom, - x: horizontal ? vpixels.head : ipixels.center, - y: horizontal ? ipixels.center : vpixels.head, - height: horizontal ? ipixels.size : Math.abs(vpixels.size), - width: horizontal ? Math.abs(vpixels.size) : ipixels.size - }; - if (includeOptions) { - properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode); - } - const options = properties.options || bars[i].options; - setBorderSkipped(properties, options, stack, index); - setInflateAmount(properties, options, ruler.ratio); - this.updateElement(bars[i], i, properties, mode); - } - } - _getStacks(last, dataIndex) { - const { iScale } = this._cachedMeta; - const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped); - const stacked = iScale.options.stacked; - const stacks = []; - const skipNull = (meta) => { - const parsed = meta.controller.getParsed(dataIndex); - const val = parsed && parsed[meta.vScale.axis]; - if (isNullOrUndef(val) || isNaN(val)) { - return true; - } - }; - for (const meta of metasets) { - if (dataIndex !== void 0 && skipNull(meta)) { - continue; - } - if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) { - stacks.push(meta.stack); - } - if (meta.index === last) { - break; - } - } - if (!stacks.length) { - stacks.push(void 0); - } - return stacks; - } - _getStackCount(index) { - return this._getStacks(void 0, index).length; - } - _getStackIndex(datasetIndex, name, dataIndex) { - const stacks = this._getStacks(datasetIndex, dataIndex); - const index = name !== void 0 ? stacks.indexOf(name) : -1; - return index === -1 ? stacks.length - 1 : index; - } - _getRuler() { - const opts = this.options; - const meta = this._cachedMeta; - const iScale = meta.iScale; - const pixels = []; - let i, ilen; - for (i = 0, ilen = meta.data.length; i < ilen; ++i) { - pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i)); - } - const barThickness = opts.barThickness; - const min = barThickness || computeMinSampleSize(meta); - return { - min, - pixels, - start: iScale._startPixel, - end: iScale._endPixel, - stackCount: this._getStackCount(), - scale: iScale, - grouped: opts.grouped, - ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage - }; - } - _calculateBarValuePixels(index) { - const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this; - const actualBase = baseValue || 0; - const parsed = this.getParsed(index); - const custom = parsed._custom; - const floating = isFloatBar(custom); - let value = parsed[vScale.axis]; - let start = 0; - let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value; - let head, size; - if (length !== value) { - start = length - value; - length = value; - } - if (floating) { - value = custom.barStart; - length = custom.barEnd - custom.barStart; - if (value !== 0 && sign(value) !== sign(custom.barEnd)) { - start = 0; - } - start += value; - } - const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start; - let base = vScale.getPixelForValue(startValue); - if (this.chart.getDataVisibility(index)) { - head = vScale.getPixelForValue(start + length); - } else { - head = base; - } - size = head - base; - if (Math.abs(size) < minBarLength) { - size = barSign(size, vScale, actualBase) * minBarLength; - if (value === actualBase) { - base -= size / 2; - } - const startPixel = vScale.getPixelForDecimal(0); - const endPixel = vScale.getPixelForDecimal(1); - const min = Math.min(startPixel, endPixel); - const max = Math.max(startPixel, endPixel); - base = Math.max(Math.min(base, max), min); - head = base + size; - if (_stacked && !floating) { - parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base); - } - } - if (base === vScale.getPixelForValue(actualBase)) { - const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2; - base += halfGrid; - size -= halfGrid; - } - return { - size, - base, - head, - center: head + size / 2 - }; - } - _calculateBarIndexPixels(index, ruler) { - const scale = ruler.scale; - const options = this.options; - const skipNull = options.skipNull; - const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); - let center, size; - if (ruler.grouped) { - const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount; - const range = options.barThickness === "flex" ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount); - const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : void 0); - center = range.start + range.chunk * stackIndex + range.chunk / 2; - size = Math.min(maxBarThickness, range.chunk * range.ratio); - } else { - center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index); - size = Math.min(maxBarThickness, ruler.min * ruler.ratio); - } - return { - base: center - size / 2, - head: center + size / 2, - center, - size - }; - } - draw() { - const meta = this._cachedMeta; - const vScale = meta.vScale; - const rects = meta.data; - const ilen = rects.length; - let i = 0; - for (; i < ilen; ++i) { - if (this.getParsed(i)[vScale.axis] !== null) { - rects[i].draw(this._ctx); - } - } - } -}; -__publicField(BarController, "id", "bar"); -__publicField(BarController, "defaults", { - datasetElementType: false, - dataElementType: "bar", - categoryPercentage: 0.8, - barPercentage: 0.9, - grouped: true, - animations: { - numbers: { - type: "number", - properties: [ - "x", - "y", - "base", - "width", - "height" - ] - } - } -}); -__publicField(BarController, "overrides", { - scales: { - _index_: { - type: "category", - offset: true, - grid: { - offset: true - } - }, - _value_: { - type: "linear", - beginAtZero: true - } - } -}); -function getRatioAndOffset(rotation, circumference, cutout) { - let ratioX = 1; - let ratioY = 1; - let offsetX = 0; - let offsetY = 0; - if (circumference < TAU) { - const startAngle = rotation; - const endAngle = startAngle + circumference; - const startX = Math.cos(startAngle); - const startY = Math.sin(startAngle); - const endX = Math.cos(endAngle); - const endY = Math.sin(endAngle); - const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout); - const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout); - const maxX = calcMax(0, startX, endX); - const maxY = calcMax(HALF_PI, startY, endY); - const minX = calcMin(PI, startX, endX); - const minY = calcMin(PI + HALF_PI, startY, endY); - ratioX = (maxX - minX) / 2; - ratioY = (maxY - minY) / 2; - offsetX = -(maxX + minX) / 2; - offsetY = -(maxY + minY) / 2; - } - return { - ratioX, - ratioY, - offsetX, - offsetY - }; -} -var DoughnutController = class extends DatasetController { - constructor(chart, datasetIndex) { - super(chart, datasetIndex); - this.enableOptionSharing = true; - this.innerRadius = void 0; - this.outerRadius = void 0; - this.offsetX = void 0; - this.offsetY = void 0; - } - linkScales() { - } - parse(start, count) { - const data = this.getDataset().data; - const meta = this._cachedMeta; - if (this._parsing === false) { - meta._parsed = data; - } else { - let getter = (i2) => +data[i2]; - if (isObject(data[start])) { - const { key = "value" } = this._parsing; - getter = (i2) => +resolveObjectKey(data[i2], key); - } - let i, ilen; - for (i = start, ilen = start + count; i < ilen; ++i) { - meta._parsed[i] = getter(i); - } - } - } - _getRotation() { - return toRadians(this.options.rotation - 90); - } - _getCircumference() { - return toRadians(this.options.circumference); - } - _getRotationExtents() { - let min = TAU; - let max = -TAU; - for (let i = 0; i < this.chart.data.datasets.length; ++i) { - if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) { - const controller = this.chart.getDatasetMeta(i).controller; - const rotation = controller._getRotation(); - const circumference = controller._getCircumference(); - min = Math.min(min, rotation); - max = Math.max(max, rotation + circumference); - } - } - return { - rotation: min, - circumference: max - min - }; - } - update(mode) { - const chart = this.chart; - const { chartArea } = chart; - const meta = this._cachedMeta; - const arcs = meta.data; - const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing; - const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); - const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1); - const chartWeight = this._getRingWeight(this.index); - const { circumference, rotation } = this._getRotationExtents(); - const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout); - const maxWidth = (chartArea.width - spacing) / ratioX; - const maxHeight = (chartArea.height - spacing) / ratioY; - const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); - const outerRadius = toDimension(this.options.radius, maxRadius); - const innerRadius = Math.max(outerRadius * cutout, 0); - const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal(); - this.offsetX = offsetX * outerRadius; - this.offsetY = offsetY * outerRadius; - meta.total = this.calculateTotal(); - this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index); - this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0); - this.updateElements(arcs, 0, arcs.length, mode); - } - _circumference(i, reset2) { - const opts = this.options; - const meta = this._cachedMeta; - const circumference = this._getCircumference(); - if (reset2 && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) { - return 0; - } - return this.calculateCircumference(meta._parsed[i] * circumference / TAU); - } - updateElements(arcs, start, count, mode) { - const reset2 = mode === "reset"; - const chart = this.chart; - const chartArea = chart.chartArea; - const opts = chart.options; - const animationOpts = opts.animation; - const centerX = (chartArea.left + chartArea.right) / 2; - const centerY = (chartArea.top + chartArea.bottom) / 2; - const animateScale = reset2 && animationOpts.animateScale; - const innerRadius = animateScale ? 0 : this.innerRadius; - const outerRadius = animateScale ? 0 : this.outerRadius; - const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); - let startAngle = this._getRotation(); - let i; - for (i = 0; i < start; ++i) { - startAngle += this._circumference(i, reset2); - } - for (i = start; i < start + count; ++i) { - const circumference = this._circumference(i, reset2); - const arc = arcs[i]; - const properties = { - x: centerX + this.offsetX, - y: centerY + this.offsetY, - startAngle, - endAngle: startAngle + circumference, - circumference, - outerRadius, - innerRadius - }; - if (includeOptions) { - properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode); - } - startAngle += circumference; - this.updateElement(arc, i, properties, mode); - } - } - calculateTotal() { - const meta = this._cachedMeta; - const metaData = meta.data; - let total = 0; - let i; - for (i = 0; i < metaData.length; i++) { - const value = meta._parsed[i]; - if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) { - total += Math.abs(value); - } - } - return total; - } - calculateCircumference(value) { - const total = this._cachedMeta.total; - if (total > 0 && !isNaN(value)) { - return TAU * (Math.abs(value) / total); - } - return 0; - } - getLabelAndValue(index) { - const meta = this._cachedMeta; - const chart = this.chart; - const labels = chart.data.labels || []; - const value = formatNumber(meta._parsed[index], chart.options.locale); - return { - label: labels[index] || "", - value - }; - } - getMaxBorderWidth(arcs) { - let max = 0; - const chart = this.chart; - let i, ilen, meta, controller, options; - if (!arcs) { - for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { - if (chart.isDatasetVisible(i)) { - meta = chart.getDatasetMeta(i); - arcs = meta.data; - controller = meta.controller; - break; - } - } - } - if (!arcs) { - return 0; - } - for (i = 0, ilen = arcs.length; i < ilen; ++i) { - options = controller.resolveDataElementOptions(i); - if (options.borderAlign !== "inner") { - max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0); - } - } - return max; - } - getMaxOffset(arcs) { - let max = 0; - for (let i = 0, ilen = arcs.length; i < ilen; ++i) { - const options = this.resolveDataElementOptions(i); - max = Math.max(max, options.offset || 0, options.hoverOffset || 0); - } - return max; - } - _getRingWeightOffset(datasetIndex) { - let ringWeightOffset = 0; - for (let i = 0; i < datasetIndex; ++i) { - if (this.chart.isDatasetVisible(i)) { - ringWeightOffset += this._getRingWeight(i); - } - } - return ringWeightOffset; - } - _getRingWeight(datasetIndex) { - return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0); - } - _getVisibleDatasetWeightTotal() { - return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; - } -}; -__publicField(DoughnutController, "id", "doughnut"); -__publicField(DoughnutController, "defaults", { - datasetElementType: false, - dataElementType: "arc", - animation: { - animateRotate: true, - animateScale: false - }, - animations: { - numbers: { - type: "number", - properties: [ - "circumference", - "endAngle", - "innerRadius", - "outerRadius", - "startAngle", - "x", - "y", - "offset", - "borderWidth", - "spacing" - ] - } - }, - cutout: "50%", - rotation: 0, - circumference: 360, - radius: "100%", - spacing: 0, - indexAxis: "r" -}); -__publicField(DoughnutController, "descriptors", { - _scriptable: (name) => name !== "spacing", - _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash") -}); -__publicField(DoughnutController, "overrides", { - aspectRatio: 1, - plugins: { - legend: { - labels: { - generateLabels(chart) { - const data = chart.data; - if (data.labels.length && data.datasets.length) { - const { labels: { pointStyle, color: color2 } } = chart.legend.options; - return data.labels.map((label, i) => { - const meta = chart.getDatasetMeta(0); - const style = meta.controller.getStyle(i); - return { - text: label, - fillStyle: style.backgroundColor, - strokeStyle: style.borderColor, - fontColor: color2, - lineWidth: style.borderWidth, - pointStyle, - hidden: !chart.getDataVisibility(i), - index: i - }; - }); - } - return []; - } - }, - onClick(e, legendItem, legend) { - legend.chart.toggleDataVisibility(legendItem.index); - legend.chart.update(); - } - } - } -}); -var PieController = class extends DoughnutController { -}; -__publicField(PieController, "id", "pie"); -__publicField(PieController, "defaults", { - cutout: 0, - rotation: 0, - circumference: 360, - radius: "100%" -}); -function abstract() { - throw new Error("This method is not implemented: Check that a complete date adapter is provided."); -} -var DateAdapterBase = class { - constructor(options) { - __publicField(this, "options"); - this.options = options || {}; - } - /** - * Override default date adapter methods. - * Accepts type parameter to define options type. - * @example - * Chart._adapters._date.override<{myAdapterOption: string}>({ - * init() { - * console.log(this.options.myAdapterOption); - * } - * }) - */ - static override(members) { - Object.assign(DateAdapterBase.prototype, members); - } - // eslint-disable-next-line @typescript-eslint/no-empty-function - init() { - } - formats() { - return abstract(); - } - parse() { - return abstract(); - } - format() { - return abstract(); - } - add() { - return abstract(); - } - diff() { - return abstract(); - } - startOf() { - return abstract(); - } - endOf() { - return abstract(); - } -}; -var adapters = { - _date: DateAdapterBase -}; -function binarySearch(metaset, axis, value, intersect) { - const { controller, data, _sorted } = metaset; - const iScale = controller._cachedMeta.iScale; - if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) { - const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey; - if (!intersect) { - return lookupMethod(data, axis, value); - } else if (controller._sharedOptions) { - const el = data[0]; - const range = typeof el.getRange === "function" && el.getRange(axis); - if (range) { - const start = lookupMethod(data, axis, value - range); - const end = lookupMethod(data, axis, value + range); - return { - lo: start.lo, - hi: end.hi - }; - } - } - } - return { - lo: 0, - hi: data.length - 1 - }; -} -function evaluateInteractionItems(chart, axis, position, handler, intersect) { - const metasets = chart.getSortedVisibleDatasetMetas(); - const value = position[axis]; - for (let i = 0, ilen = metasets.length; i < ilen; ++i) { - const { index, data } = metasets[i]; - const { lo, hi } = binarySearch(metasets[i], axis, value, intersect); - for (let j = lo; j <= hi; ++j) { - const element = data[j]; - if (!element.skip) { - handler(element, index, j); - } - } - } -} -function getDistanceMetricForAxis(axis) { - const useX = axis.indexOf("x") !== -1; - const useY = axis.indexOf("y") !== -1; - return function(pt1, pt2) { - const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; - const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; - return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); - }; -} -function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) { - const items = []; - if (!includeInvisible && !chart.isPointInArea(position)) { - return items; - } - const evaluationFunc = function(element, datasetIndex, index) { - if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) { - return; - } - if (element.inRange(position.x, position.y, useFinalPosition)) { - items.push({ - element, - datasetIndex, - index - }); - } - }; - evaluateInteractionItems(chart, axis, position, evaluationFunc, true); - return items; -} -function getNearestRadialItems(chart, position, axis, useFinalPosition) { - let items = []; - function evaluationFunc(element, datasetIndex, index) { - const { startAngle, endAngle } = element.getProps([ - "startAngle", - "endAngle" - ], useFinalPosition); - const { angle } = getAngleFromPoint(element, { - x: position.x, - y: position.y - }); - if (_angleBetween(angle, startAngle, endAngle)) { - items.push({ - element, - datasetIndex, - index - }); - } - } - evaluateInteractionItems(chart, axis, position, evaluationFunc); - return items; -} -function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) { - let items = []; - const distanceMetric = getDistanceMetricForAxis(axis); - let minDistance = Number.POSITIVE_INFINITY; - function evaluationFunc(element, datasetIndex, index) { - const inRange2 = element.inRange(position.x, position.y, useFinalPosition); - if (intersect && !inRange2) { - return; - } - const center = element.getCenterPoint(useFinalPosition); - const pointInArea = !!includeInvisible || chart.isPointInArea(center); - if (!pointInArea && !inRange2) { - return; - } - const distance = distanceMetric(position, center); - if (distance < minDistance) { - items = [ - { - element, - datasetIndex, - index - } - ]; - minDistance = distance; - } else if (distance === minDistance) { - items.push({ - element, - datasetIndex, - index - }); - } - } - evaluateInteractionItems(chart, axis, position, evaluationFunc); - return items; -} -function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) { - if (!includeInvisible && !chart.isPointInArea(position)) { - return []; - } - return axis === "r" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible); -} -function getAxisItems(chart, position, axis, intersect, useFinalPosition) { - const items = []; - const rangeMethod = axis === "x" ? "inXRange" : "inYRange"; - let intersectsItem = false; - evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => { - if (element[rangeMethod](position[axis], useFinalPosition)) { - items.push({ - element, - datasetIndex, - index - }); - intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition); - } - }); - if (intersect && !intersectsItem) { - return []; - } - return items; -} -var Interaction = { - evaluateInteractionItems, - modes: { - index(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - const axis = options.axis || "x"; - const includeInvisible = options.includeInvisible || false; - const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible); - const elements = []; - if (!items.length) { - return []; - } - chart.getSortedVisibleDatasetMetas().forEach((meta) => { - const index = items[0].index; - const element = meta.data[index]; - if (element && !element.skip) { - elements.push({ - element, - datasetIndex: meta.index, - index - }); - } - }); - return elements; - }, - dataset(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - const axis = options.axis || "xy"; - const includeInvisible = options.includeInvisible || false; - let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible); - if (items.length > 0) { - const datasetIndex = items[0].datasetIndex; - const data = chart.getDatasetMeta(datasetIndex).data; - items = []; - for (let i = 0; i < data.length; ++i) { - items.push({ - element: data[i], - datasetIndex, - index: i - }); - } - } - return items; - }, - point(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - const axis = options.axis || "xy"; - const includeInvisible = options.includeInvisible || false; - return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible); - }, - nearest(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - const axis = options.axis || "xy"; - const includeInvisible = options.includeInvisible || false; - return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible); - }, - x(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - return getAxisItems(chart, position, "x", options.intersect, useFinalPosition); - }, - y(chart, e, options, useFinalPosition) { - const position = getRelativePosition(e, chart); - return getAxisItems(chart, position, "y", options.intersect, useFinalPosition); - } - } -}; -var STATIC_POSITIONS = [ - "left", - "top", - "right", - "bottom" -]; -function filterByPosition(array, position) { - return array.filter((v) => v.pos === position); -} -function filterDynamicPositionByAxis(array, axis) { - return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis); -} -function sortByWeight(array, reverse) { - return array.sort((a, b) => { - const v0 = reverse ? b : a; - const v1 = reverse ? a : b; - return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight; - }); -} -function wrapBoxes(boxes) { - const layoutBoxes = []; - let i, ilen, box, pos, stack, stackWeight; - for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { - box = boxes[i]; - ({ position: pos, options: { stack, stackWeight = 1 } } = box); - layoutBoxes.push({ - index: i, - box, - pos, - horizontal: box.isHorizontal(), - weight: box.weight, - stack: stack && pos + stack, - stackWeight - }); - } - return layoutBoxes; -} -function buildStacks(layouts2) { - const stacks = {}; - for (const wrap of layouts2) { - const { stack, pos, stackWeight } = wrap; - if (!stack || !STATIC_POSITIONS.includes(pos)) { - continue; - } - const _stack = stacks[stack] || (stacks[stack] = { - count: 0, - placed: 0, - weight: 0, - size: 0 - }); - _stack.count++; - _stack.weight += stackWeight; - } - return stacks; -} -function setLayoutDims(layouts2, params) { - const stacks = buildStacks(layouts2); - const { vBoxMaxWidth, hBoxMaxHeight } = params; - let i, ilen, layout; - for (i = 0, ilen = layouts2.length; i < ilen; ++i) { - layout = layouts2[i]; - const { fullSize } = layout.box; - const stack = stacks[layout.stack]; - const factor = stack && layout.stackWeight / stack.weight; - if (layout.horizontal) { - layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth; - layout.height = hBoxMaxHeight; - } else { - layout.width = vBoxMaxWidth; - layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight; - } - } - return stacks; -} -function buildLayoutBoxes(boxes) { - const layoutBoxes = wrapBoxes(boxes); - const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true); - const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true); - const right = sortByWeight(filterByPosition(layoutBoxes, "right")); - const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true); - const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom")); - const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x"); - const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y"); - return { - fullSize, - leftAndTop: left.concat(top), - rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal), - chartArea: filterByPosition(layoutBoxes, "chartArea"), - vertical: left.concat(right).concat(centerVertical), - horizontal: top.concat(bottom).concat(centerHorizontal) - }; -} -function getCombinedMax(maxPadding, chartArea, a, b) { - return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); -} -function updateMaxPadding(maxPadding, boxPadding) { - maxPadding.top = Math.max(maxPadding.top, boxPadding.top); - maxPadding.left = Math.max(maxPadding.left, boxPadding.left); - maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); - maxPadding.right = Math.max(maxPadding.right, boxPadding.right); -} -function updateDims(chartArea, params, layout, stacks) { - const { pos, box } = layout; - const maxPadding = chartArea.maxPadding; - if (!isObject(pos)) { - if (layout.size) { - chartArea[pos] -= layout.size; - } - const stack = stacks[layout.stack] || { - size: 0, - count: 1 - }; - stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width); - layout.size = stack.size / stack.count; - chartArea[pos] += layout.size; - } - if (box.getPadding) { - updateMaxPadding(maxPadding, box.getPadding()); - } - const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right")); - const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom")); - const widthChanged = newWidth !== chartArea.w; - const heightChanged = newHeight !== chartArea.h; - chartArea.w = newWidth; - chartArea.h = newHeight; - return layout.horizontal ? { - same: widthChanged, - other: heightChanged - } : { - same: heightChanged, - other: widthChanged - }; -} -function handleMaxPadding(chartArea) { - const maxPadding = chartArea.maxPadding; - function updatePos(pos) { - const change = Math.max(maxPadding[pos] - chartArea[pos], 0); - chartArea[pos] += change; - return change; - } - chartArea.y += updatePos("top"); - chartArea.x += updatePos("left"); - updatePos("right"); - updatePos("bottom"); -} -function getMargins(horizontal, chartArea) { - const maxPadding = chartArea.maxPadding; - function marginForPositions(positions2) { - const margin = { - left: 0, - top: 0, - right: 0, - bottom: 0 - }; - positions2.forEach((pos) => { - margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); - }); - return margin; - } - return horizontal ? marginForPositions([ - "left", - "right" - ]) : marginForPositions([ - "top", - "bottom" - ]); -} -function fitBoxes(boxes, chartArea, params, stacks) { - const refitBoxes = []; - let i, ilen, layout, box, refit, changed; - for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { - layout = boxes[i]; - box = layout.box; - box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea)); - const { same, other } = updateDims(chartArea, params, layout, stacks); - refit |= same && refitBoxes.length; - changed = changed || other; - if (!box.fullSize) { - refitBoxes.push(layout); - } - } - return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed; -} -function setBoxDims(box, left, top, width, height) { - box.top = top; - box.left = left; - box.right = left + width; - box.bottom = top + height; - box.width = width; - box.height = height; -} -function placeBoxes(boxes, chartArea, params, stacks) { - const userPadding = params.padding; - let { x, y } = chartArea; - for (const layout of boxes) { - const box = layout.box; - const stack = stacks[layout.stack] || { - count: 1, - placed: 0, - weight: 1 - }; - const weight = layout.stackWeight / stack.weight || 1; - if (layout.horizontal) { - const width = chartArea.w * weight; - const height = stack.size || box.height; - if (defined(stack.start)) { - y = stack.start; - } - if (box.fullSize) { - setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height); - } else { - setBoxDims(box, chartArea.left + stack.placed, y, width, height); - } - stack.start = y; - stack.placed += width; - y = box.bottom; - } else { - const height = chartArea.h * weight; - const width = stack.size || box.width; - if (defined(stack.start)) { - x = stack.start; - } - if (box.fullSize) { - setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top); - } else { - setBoxDims(box, x, chartArea.top + stack.placed, width, height); - } - stack.start = x; - stack.placed += height; - x = box.right; - } - } - chartArea.x = x; - chartArea.y = y; -} -var layouts = { - addBox(chart, item) { - if (!chart.boxes) { - chart.boxes = []; - } - item.fullSize = item.fullSize || false; - item.position = item.position || "top"; - item.weight = item.weight || 0; - item._layers = item._layers || function() { - return [ - { - z: 0, - draw(chartArea) { - item.draw(chartArea); - } - } - ]; - }; - chart.boxes.push(item); - }, - removeBox(chart, layoutItem) { - const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; - if (index !== -1) { - chart.boxes.splice(index, 1); - } - }, - configure(chart, item, options) { - item.fullSize = options.fullSize; - item.position = options.position; - item.weight = options.weight; - }, - update(chart, width, height, minPadding) { - if (!chart) { - return; - } - const padding = toPadding(chart.options.layout.padding); - const availableWidth = Math.max(width - padding.width, 0); - const availableHeight = Math.max(height - padding.height, 0); - const boxes = buildLayoutBoxes(chart.boxes); - const verticalBoxes = boxes.vertical; - const horizontalBoxes = boxes.horizontal; - each(chart.boxes, (box) => { - if (typeof box.beforeLayout === "function") { - box.beforeLayout(); - } - }); - const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1; - const params = Object.freeze({ - outerWidth: width, - outerHeight: height, - padding, - availableWidth, - availableHeight, - vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount, - hBoxMaxHeight: availableHeight / 2 - }); - const maxPadding = Object.assign({}, padding); - updateMaxPadding(maxPadding, toPadding(minPadding)); - const chartArea = Object.assign({ - maxPadding, - w: availableWidth, - h: availableHeight, - x: padding.left, - y: padding.top - }, padding); - const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); - fitBoxes(boxes.fullSize, chartArea, params, stacks); - fitBoxes(verticalBoxes, chartArea, params, stacks); - if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) { - fitBoxes(verticalBoxes, chartArea, params, stacks); - } - handleMaxPadding(chartArea); - placeBoxes(boxes.leftAndTop, chartArea, params, stacks); - chartArea.x += chartArea.w; - chartArea.y += chartArea.h; - placeBoxes(boxes.rightAndBottom, chartArea, params, stacks); - chart.chartArea = { - left: chartArea.left, - top: chartArea.top, - right: chartArea.left + chartArea.w, - bottom: chartArea.top + chartArea.h, - height: chartArea.h, - width: chartArea.w - }; - each(boxes.chartArea, (layout) => { - const box = layout.box; - Object.assign(box, chart.chartArea); - box.update(chartArea.w, chartArea.h, { - left: 0, - top: 0, - right: 0, - bottom: 0 - }); - }); - } -}; -var BasePlatform = class { - acquireContext(canvas, aspectRatio) { - } - releaseContext(context) { - return false; - } - addEventListener(chart, type, listener) { - } - removeEventListener(chart, type, listener) { - } - getDevicePixelRatio() { - return 1; - } - getMaximumSize(element, width, height, aspectRatio) { - width = Math.max(0, width || element.width); - height = height || element.height; - return { - width, - height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height) - }; - } - isAttached(canvas) { - return true; - } - updateConfig(config) { - } -}; -var BasicPlatform = class extends BasePlatform { - acquireContext(item) { - return item && item.getContext && item.getContext("2d") || null; - } - updateConfig(config) { - config.options.animation = false; - } -}; -var EXPANDO_KEY = "$chartjs"; -var EVENT_TYPES = { - touchstart: "mousedown", - touchmove: "mousemove", - touchend: "mouseup", - pointerenter: "mouseenter", - pointerdown: "mousedown", - pointermove: "mousemove", - pointerup: "mouseup", - pointerleave: "mouseout", - pointerout: "mouseout" -}; -var isNullOrEmpty = (value) => value === null || value === ""; -function initCanvas(canvas, aspectRatio) { - const style = canvas.style; - const renderHeight = canvas.getAttribute("height"); - const renderWidth = canvas.getAttribute("width"); - canvas[EXPANDO_KEY] = { - initial: { - height: renderHeight, - width: renderWidth, - style: { - display: style.display, - height: style.height, - width: style.width - } - } - }; - style.display = style.display || "block"; - style.boxSizing = style.boxSizing || "border-box"; - if (isNullOrEmpty(renderWidth)) { - const displayWidth = readUsedSize(canvas, "width"); - if (displayWidth !== void 0) { - canvas.width = displayWidth; - } - } - if (isNullOrEmpty(renderHeight)) { - if (canvas.style.height === "") { - canvas.height = canvas.width / (aspectRatio || 2); - } else { - const displayHeight = readUsedSize(canvas, "height"); - if (displayHeight !== void 0) { - canvas.height = displayHeight; - } - } - } - return canvas; -} -var eventListenerOptions = supportsEventListenerOptions ? { - passive: true -} : false; -function addListener(node, type, listener) { - node.addEventListener(type, listener, eventListenerOptions); -} -function removeListener(chart, type, listener) { - chart.canvas.removeEventListener(type, listener, eventListenerOptions); -} -function fromNativeEvent(event, chart) { - const type = EVENT_TYPES[event.type] || event.type; - const { x, y } = getRelativePosition(event, chart); - return { - type, - chart, - native: event, - x: x !== void 0 ? x : null, - y: y !== void 0 ? y : null - }; -} -function nodeListContains(nodeList, canvas) { - for (const node of nodeList) { - if (node === canvas || node.contains(canvas)) { - return true; - } - } -} -function createAttachObserver(chart, type, listener) { - const canvas = chart.canvas; - const observer = new MutationObserver((entries) => { - let trigger = false; - for (const entry of entries) { - trigger = trigger || nodeListContains(entry.addedNodes, canvas); - trigger = trigger && !nodeListContains(entry.removedNodes, canvas); - } - if (trigger) { - listener(); - } - }); - observer.observe(document, { - childList: true, - subtree: true - }); - return observer; -} -function createDetachObserver(chart, type, listener) { - const canvas = chart.canvas; - const observer = new MutationObserver((entries) => { - let trigger = false; - for (const entry of entries) { - trigger = trigger || nodeListContains(entry.removedNodes, canvas); - trigger = trigger && !nodeListContains(entry.addedNodes, canvas); - } - if (trigger) { - listener(); - } - }); - observer.observe(document, { - childList: true, - subtree: true - }); - return observer; -} -var drpListeningCharts = /* @__PURE__ */ new Map(); -var oldDevicePixelRatio = 0; -function onWindowResize() { - const dpr = window.devicePixelRatio; - if (dpr === oldDevicePixelRatio) { - return; - } - oldDevicePixelRatio = dpr; - drpListeningCharts.forEach((resize, chart) => { - if (chart.currentDevicePixelRatio !== dpr) { - resize(); - } - }); -} -function listenDevicePixelRatioChanges(chart, resize) { - if (!drpListeningCharts.size) { - window.addEventListener("resize", onWindowResize); - } - drpListeningCharts.set(chart, resize); -} -function unlistenDevicePixelRatioChanges(chart) { - drpListeningCharts.delete(chart); - if (!drpListeningCharts.size) { - window.removeEventListener("resize", onWindowResize); - } -} -function createResizeObserver(chart, type, listener) { - const canvas = chart.canvas; - const container = canvas && _getParentNode(canvas); - if (!container) { - return; - } - const resize = throttled((width, height) => { - const w = container.clientWidth; - listener(width, height); - if (w < container.clientWidth) { - listener(); - } - }, window); - const observer = new ResizeObserver((entries) => { - const entry = entries[0]; - const width = entry.contentRect.width; - const height = entry.contentRect.height; - if (width === 0 && height === 0) { - return; - } - resize(width, height); - }); - observer.observe(container); - listenDevicePixelRatioChanges(chart, resize); - return observer; -} -function releaseObserver(chart, type, observer) { - if (observer) { - observer.disconnect(); - } - if (type === "resize") { - unlistenDevicePixelRatioChanges(chart); - } -} -function createProxyAndListen(chart, type, listener) { - const canvas = chart.canvas; - const proxy = throttled((event) => { - if (chart.ctx !== null) { - listener(fromNativeEvent(event, chart)); - } - }, chart); - addListener(canvas, type, proxy); - return proxy; -} -var DomPlatform = class extends BasePlatform { - acquireContext(canvas, aspectRatio) { - const context = canvas && canvas.getContext && canvas.getContext("2d"); - if (context && context.canvas === canvas) { - initCanvas(canvas, aspectRatio); - return context; - } - return null; - } - releaseContext(context) { - const canvas = context.canvas; - if (!canvas[EXPANDO_KEY]) { - return false; - } - const initial = canvas[EXPANDO_KEY].initial; - [ - "height", - "width" - ].forEach((prop) => { - const value = initial[prop]; - if (isNullOrUndef(value)) { - canvas.removeAttribute(prop); - } else { - canvas.setAttribute(prop, value); - } - }); - const style = initial.style || {}; - Object.keys(style).forEach((key) => { - canvas.style[key] = style[key]; - }); - canvas.width = canvas.width; - delete canvas[EXPANDO_KEY]; - return true; - } - addEventListener(chart, type, listener) { - this.removeEventListener(chart, type); - const proxies = chart.$proxies || (chart.$proxies = {}); - const handlers = { - attach: createAttachObserver, - detach: createDetachObserver, - resize: createResizeObserver - }; - const handler = handlers[type] || createProxyAndListen; - proxies[type] = handler(chart, type, listener); - } - removeEventListener(chart, type) { - const proxies = chart.$proxies || (chart.$proxies = {}); - const proxy = proxies[type]; - if (!proxy) { - return; - } - const handlers = { - attach: releaseObserver, - detach: releaseObserver, - resize: releaseObserver - }; - const handler = handlers[type] || removeListener; - handler(chart, type, proxy); - proxies[type] = void 0; - } - getDevicePixelRatio() { - return window.devicePixelRatio; - } - getMaximumSize(canvas, width, height, aspectRatio) { - return getMaximumSize(canvas, width, height, aspectRatio); - } - isAttached(canvas) { - const container = _getParentNode(canvas); - return !!(container && container.isConnected); - } -}; -function _detectPlatform(canvas) { - if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) { - return BasicPlatform; - } - return DomPlatform; -} -var Element = class { - constructor() { - __publicField(this, "x"); - __publicField(this, "y"); - __publicField(this, "active", false); - __publicField(this, "options"); - __publicField(this, "$animations"); - } - tooltipPosition(useFinalPosition) { - const { x, y } = this.getProps([ - "x", - "y" - ], useFinalPosition); - return { - x, - y - }; - } - hasValue() { - return isNumber(this.x) && isNumber(this.y); - } - getProps(props, final) { - const anims = this.$animations; - if (!final || !anims) { - return this; - } - const ret = {}; - props.forEach((prop) => { - ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop]; - }); - return ret; - } -}; -__publicField(Element, "defaults", {}); -__publicField(Element, "defaultRoutes"); -function autoSkip(scale, ticks) { - const tickOpts = scale.options.ticks; - const determinedMaxTicks = determineMaxTicks(scale); - const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks); - const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : []; - const numMajorIndices = majorIndices.length; - const first = majorIndices[0]; - const last = majorIndices[numMajorIndices - 1]; - const newTicks = []; - if (numMajorIndices > ticksLimit) { - skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit); - return newTicks; - } - const spacing = calculateSpacing(majorIndices, ticks, ticksLimit); - if (numMajorIndices > 0) { - let i, ilen; - const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null; - skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first); - for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) { - skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]); - } - skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing); - return newTicks; - } - skip(ticks, newTicks, spacing); - return newTicks; -} -function determineMaxTicks(scale) { - const offset = scale.options.offset; - const tickLength = scale._tickSize(); - const maxScale = scale._length / tickLength + (offset ? 0 : 1); - const maxChart = scale._maxLength / tickLength; - return Math.floor(Math.min(maxScale, maxChart)); -} -function calculateSpacing(majorIndices, ticks, ticksLimit) { - const evenMajorSpacing = getEvenSpacing(majorIndices); - const spacing = ticks.length / ticksLimit; - if (!evenMajorSpacing) { - return Math.max(spacing, 1); - } - const factors = _factorize(evenMajorSpacing); - for (let i = 0, ilen = factors.length - 1; i < ilen; i++) { - const factor = factors[i]; - if (factor > spacing) { - return factor; - } - } - return Math.max(spacing, 1); -} -function getMajorIndices(ticks) { - const result = []; - let i, ilen; - for (i = 0, ilen = ticks.length; i < ilen; i++) { - if (ticks[i].major) { - result.push(i); - } - } - return result; -} -function skipMajors(ticks, newTicks, majorIndices, spacing) { - let count = 0; - let next = majorIndices[0]; - let i; - spacing = Math.ceil(spacing); - for (i = 0; i < ticks.length; i++) { - if (i === next) { - newTicks.push(ticks[i]); - count++; - next = majorIndices[count * spacing]; - } - } -} -function skip(ticks, newTicks, spacing, majorStart, majorEnd) { - const start = valueOrDefault(majorStart, 0); - const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length); - let count = 0; - let length, i, next; - spacing = Math.ceil(spacing); - if (majorEnd) { - length = majorEnd - majorStart; - spacing = length / Math.floor(length / spacing); - } - next = start; - while (next < 0) { - count++; - next = Math.round(start + count * spacing); - } - for (i = Math.max(start, 0); i < end; i++) { - if (i === next) { - newTicks.push(ticks[i]); - count++; - next = Math.round(start + count * spacing); - } - } -} -function getEvenSpacing(arr) { - const len = arr.length; - let i, diff; - if (len < 2) { - return false; - } - for (diff = arr[0], i = 1; i < len; ++i) { - if (arr[i] - arr[i - 1] !== diff) { - return false; - } - } - return diff; -} -var reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align; -var offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset; -var getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength); -function sample(arr, numItems) { - const result = []; - const increment = arr.length / numItems; - const len = arr.length; - let i = 0; - for (; i < len; i += increment) { - result.push(arr[Math.floor(i)]); - } - return result; -} -function getPixelForGridLine(scale, index, offsetGridLines) { - const length = scale.ticks.length; - const validIndex2 = Math.min(index, length - 1); - const start = scale._startPixel; - const end = scale._endPixel; - const epsilon = 1e-6; - let lineValue = scale.getPixelForTick(validIndex2); - let offset; - if (offsetGridLines) { - if (length === 1) { - offset = Math.max(lineValue - start, end - lineValue); - } else if (index === 0) { - offset = (scale.getPixelForTick(1) - lineValue) / 2; - } else { - offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2; - } - lineValue += validIndex2 < index ? offset : -offset; - if (lineValue < start - epsilon || lineValue > end + epsilon) { - return; - } - } - return lineValue; -} -function garbageCollect(caches, length) { - each(caches, (cache) => { - const gc = cache.gc; - const gcLen = gc.length / 2; - let i; - if (gcLen > length) { - for (i = 0; i < gcLen; ++i) { - delete cache.data[gc[i]]; - } - gc.splice(0, gcLen); - } - }); -} -function getTickMarkLength(options) { - return options.drawTicks ? options.tickLength : 0; -} -function getTitleHeight(options, fallback) { - if (!options.display) { - return 0; - } - const font = toFont(options.font, fallback); - const padding = toPadding(options.padding); - const lines = isArray(options.text) ? options.text.length : 1; - return lines * font.lineHeight + padding.height; -} -function createScaleContext(parent, scale) { - return createContext(parent, { - scale, - type: "scale" - }); -} -function createTickContext(parent, index, tick) { - return createContext(parent, { - tick, - index, - type: "tick" - }); -} -function titleAlign(align, position, reverse) { - let ret = _toLeftRightCenter(align); - if (reverse && position !== "right" || !reverse && position === "right") { - ret = reverseAlign(ret); - } - return ret; -} -function titleArgs(scale, offset, position, align) { - const { top, left, bottom, right, chart } = scale; - const { chartArea, scales } = chart; - let rotation = 0; - let maxWidth, titleX, titleY; - const height = bottom - top; - const width = right - left; - if (scale.isHorizontal()) { - titleX = _alignStartEnd(align, left, right); - if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - titleY = scales[positionAxisID].getPixelForValue(value) + height - offset; - } else if (position === "center") { - titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset; - } else { - titleY = offsetFromEdge(scale, position, offset); - } - maxWidth = right - left; - } else { - if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - titleX = scales[positionAxisID].getPixelForValue(value) - width + offset; - } else if (position === "center") { - titleX = (chartArea.left + chartArea.right) / 2 - width + offset; - } else { - titleX = offsetFromEdge(scale, position, offset); - } - titleY = _alignStartEnd(align, bottom, top); - rotation = position === "left" ? -HALF_PI : HALF_PI; - } - return { - titleX, - titleY, - maxWidth, - rotation - }; -} -var Scale = class extends Element { - constructor(cfg) { - super(); - this.id = cfg.id; - this.type = cfg.type; - this.options = void 0; - this.ctx = cfg.ctx; - this.chart = cfg.chart; - this.top = void 0; - this.bottom = void 0; - this.left = void 0; - this.right = void 0; - this.width = void 0; - this.height = void 0; - this._margins = { - left: 0, - right: 0, - top: 0, - bottom: 0 - }; - this.maxWidth = void 0; - this.maxHeight = void 0; - this.paddingTop = void 0; - this.paddingBottom = void 0; - this.paddingLeft = void 0; - this.paddingRight = void 0; - this.axis = void 0; - this.labelRotation = void 0; - this.min = void 0; - this.max = void 0; - this._range = void 0; - this.ticks = []; - this._gridLineItems = null; - this._labelItems = null; - this._labelSizes = null; - this._length = 0; - this._maxLength = 0; - this._longestTextCache = {}; - this._startPixel = void 0; - this._endPixel = void 0; - this._reversePixels = false; - this._userMax = void 0; - this._userMin = void 0; - this._suggestedMax = void 0; - this._suggestedMin = void 0; - this._ticksLength = 0; - this._borderValue = 0; - this._cache = {}; - this._dataLimitsCached = false; - this.$context = void 0; - } - init(options) { - this.options = options.setContext(this.getContext()); - this.axis = options.axis; - this._userMin = this.parse(options.min); - this._userMax = this.parse(options.max); - this._suggestedMin = this.parse(options.suggestedMin); - this._suggestedMax = this.parse(options.suggestedMax); - } - parse(raw, index) { - return raw; - } - getUserBounds() { - let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this; - _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY); - _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY); - _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY); - _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY); - return { - min: finiteOrDefault(_userMin, _suggestedMin), - max: finiteOrDefault(_userMax, _suggestedMax), - minDefined: isNumberFinite(_userMin), - maxDefined: isNumberFinite(_userMax) - }; - } - getMinMax(canStack) { - let { min, max, minDefined, maxDefined } = this.getUserBounds(); - let range; - if (minDefined && maxDefined) { - return { - min, - max - }; - } - const metas = this.getMatchingVisibleMetas(); - for (let i = 0, ilen = metas.length; i < ilen; ++i) { - range = metas[i].controller.getMinMax(this, canStack); - if (!minDefined) { - min = Math.min(min, range.min); - } - if (!maxDefined) { - max = Math.max(max, range.max); - } - } - min = maxDefined && min > max ? max : min; - max = minDefined && min > max ? min : max; - return { - min: finiteOrDefault(min, finiteOrDefault(max, min)), - max: finiteOrDefault(max, finiteOrDefault(min, max)) - }; - } - getPadding() { - return { - left: this.paddingLeft || 0, - top: this.paddingTop || 0, - right: this.paddingRight || 0, - bottom: this.paddingBottom || 0 - }; - } - getTicks() { - return this.ticks; - } - getLabels() { - const data = this.chart.data; - return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || []; - } - getLabelItems(chartArea = this.chart.chartArea) { - const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea)); - return items; - } - beforeLayout() { - this._cache = {}; - this._dataLimitsCached = false; - } - beforeUpdate() { - callback(this.options.beforeUpdate, [ - this - ]); - } - update(maxWidth, maxHeight, margins) { - const { beginAtZero, grace, ticks: tickOpts } = this.options; - const sampleSize = tickOpts.sampleSize; - this.beforeUpdate(); - this.maxWidth = maxWidth; - this.maxHeight = maxHeight; - this._margins = margins = Object.assign({ - left: 0, - right: 0, - top: 0, - bottom: 0 - }, margins); - this.ticks = null; - this._labelSizes = null; - this._gridLineItems = null; - this._labelItems = null; - this.beforeSetDimensions(); - this.setDimensions(); - this.afterSetDimensions(); - this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom; - if (!this._dataLimitsCached) { - this.beforeDataLimits(); - this.determineDataLimits(); - this.afterDataLimits(); - this._range = _addGrace(this, grace, beginAtZero); - this._dataLimitsCached = true; - } - this.beforeBuildTicks(); - this.ticks = this.buildTicks() || []; - this.afterBuildTicks(); - const samplingEnabled = sampleSize < this.ticks.length; - this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks); - this.configure(); - this.beforeCalculateLabelRotation(); - this.calculateLabelRotation(); - this.afterCalculateLabelRotation(); - if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) { - this.ticks = autoSkip(this, this.ticks); - this._labelSizes = null; - this.afterAutoSkip(); - } - if (samplingEnabled) { - this._convertTicksToLabels(this.ticks); - } - this.beforeFit(); - this.fit(); - this.afterFit(); - this.afterUpdate(); - } - configure() { - let reversePixels = this.options.reverse; - let startPixel, endPixel; - if (this.isHorizontal()) { - startPixel = this.left; - endPixel = this.right; - } else { - startPixel = this.top; - endPixel = this.bottom; - reversePixels = !reversePixels; - } - this._startPixel = startPixel; - this._endPixel = endPixel; - this._reversePixels = reversePixels; - this._length = endPixel - startPixel; - this._alignToPixels = this.options.alignToPixels; - } - afterUpdate() { - callback(this.options.afterUpdate, [ - this - ]); - } - beforeSetDimensions() { - callback(this.options.beforeSetDimensions, [ - this - ]); - } - setDimensions() { - if (this.isHorizontal()) { - this.width = this.maxWidth; - this.left = 0; - this.right = this.width; - } else { - this.height = this.maxHeight; - this.top = 0; - this.bottom = this.height; - } - this.paddingLeft = 0; - this.paddingTop = 0; - this.paddingRight = 0; - this.paddingBottom = 0; - } - afterSetDimensions() { - callback(this.options.afterSetDimensions, [ - this - ]); - } - _callHooks(name) { - this.chart.notifyPlugins(name, this.getContext()); - callback(this.options[name], [ - this - ]); - } - beforeDataLimits() { - this._callHooks("beforeDataLimits"); - } - determineDataLimits() { - } - afterDataLimits() { - this._callHooks("afterDataLimits"); - } - beforeBuildTicks() { - this._callHooks("beforeBuildTicks"); - } - buildTicks() { - return []; - } - afterBuildTicks() { - this._callHooks("afterBuildTicks"); - } - beforeTickToLabelConversion() { - callback(this.options.beforeTickToLabelConversion, [ - this - ]); - } - generateTickLabels(ticks) { - const tickOpts = this.options.ticks; - let i, ilen, tick; - for (i = 0, ilen = ticks.length; i < ilen; i++) { - tick = ticks[i]; - tick.label = callback(tickOpts.callback, [ - tick.value, - i, - ticks - ], this); - } - } - afterTickToLabelConversion() { - callback(this.options.afterTickToLabelConversion, [ - this - ]); - } - beforeCalculateLabelRotation() { - callback(this.options.beforeCalculateLabelRotation, [ - this - ]); - } - calculateLabelRotation() { - const options = this.options; - const tickOpts = options.ticks; - const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit); - const minRotation = tickOpts.minRotation || 0; - const maxRotation = tickOpts.maxRotation; - let labelRotation = minRotation; - let tickWidth, maxHeight, maxLabelDiagonal; - if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) { - this.labelRotation = minRotation; - return; - } - const labelSizes = this._getLabelSizes(); - const maxLabelWidth = labelSizes.widest.width; - const maxLabelHeight = labelSizes.highest.height; - const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth); - tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1); - if (maxLabelWidth + 6 > tickWidth) { - tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1)); - maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font); - maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight); - labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1)))); - labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation)); - } - this.labelRotation = labelRotation; - } - afterCalculateLabelRotation() { - callback(this.options.afterCalculateLabelRotation, [ - this - ]); - } - afterAutoSkip() { - } - beforeFit() { - callback(this.options.beforeFit, [ - this - ]); - } - fit() { - const minSize = { - width: 0, - height: 0 - }; - const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this; - const display = this._isVisible(); - const isHorizontal = this.isHorizontal(); - if (display) { - const titleHeight = getTitleHeight(titleOpts, chart.options.font); - if (isHorizontal) { - minSize.width = this.maxWidth; - minSize.height = getTickMarkLength(gridOpts) + titleHeight; - } else { - minSize.height = this.maxHeight; - minSize.width = getTickMarkLength(gridOpts) + titleHeight; - } - if (tickOpts.display && this.ticks.length) { - const { first, last, widest, highest } = this._getLabelSizes(); - const tickPadding = tickOpts.padding * 2; - const angleRadians = toRadians(this.labelRotation); - const cos = Math.cos(angleRadians); - const sin = Math.sin(angleRadians); - if (isHorizontal) { - const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height; - minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding); - } else { - const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; - minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding); - } - this._calculatePadding(first, last, sin, cos); - } - } - this._handleMargins(); - if (isHorizontal) { - this.width = this._length = chart.width - this._margins.left - this._margins.right; - this.height = minSize.height; - } else { - this.width = minSize.width; - this.height = this._length = chart.height - this._margins.top - this._margins.bottom; - } - } - _calculatePadding(first, last, sin, cos) { - const { ticks: { align, padding }, position } = this.options; - const isRotated = this.labelRotation !== 0; - const labelsBelowTicks = position !== "top" && this.axis === "x"; - if (this.isHorizontal()) { - const offsetLeft = this.getPixelForTick(0) - this.left; - const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1); - let paddingLeft = 0; - let paddingRight = 0; - if (isRotated) { - if (labelsBelowTicks) { - paddingLeft = cos * first.width; - paddingRight = sin * last.height; - } else { - paddingLeft = sin * first.height; - paddingRight = cos * last.width; - } - } else if (align === "start") { - paddingRight = last.width; - } else if (align === "end") { - paddingLeft = first.width; - } else if (align !== "inner") { - paddingLeft = first.width / 2; - paddingRight = last.width / 2; - } - this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0); - this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0); - } else { - let paddingTop = last.height / 2; - let paddingBottom = first.height / 2; - if (align === "start") { - paddingTop = 0; - paddingBottom = first.height; - } else if (align === "end") { - paddingTop = last.height; - paddingBottom = 0; - } - this.paddingTop = paddingTop + padding; - this.paddingBottom = paddingBottom + padding; - } - } - _handleMargins() { - if (this._margins) { - this._margins.left = Math.max(this.paddingLeft, this._margins.left); - this._margins.top = Math.max(this.paddingTop, this._margins.top); - this._margins.right = Math.max(this.paddingRight, this._margins.right); - this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom); - } - } - afterFit() { - callback(this.options.afterFit, [ - this - ]); - } - isHorizontal() { - const { axis, position } = this.options; - return position === "top" || position === "bottom" || axis === "x"; - } - isFullSize() { - return this.options.fullSize; - } - _convertTicksToLabels(ticks) { - this.beforeTickToLabelConversion(); - this.generateTickLabels(ticks); - let i, ilen; - for (i = 0, ilen = ticks.length; i < ilen; i++) { - if (isNullOrUndef(ticks[i].label)) { - ticks.splice(i, 1); - ilen--; - i--; - } - } - this.afterTickToLabelConversion(); - } - _getLabelSizes() { - let labelSizes = this._labelSizes; - if (!labelSizes) { - const sampleSize = this.options.ticks.sampleSize; - let ticks = this.ticks; - if (sampleSize < ticks.length) { - ticks = sample(ticks, sampleSize); - } - this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit); - } - return labelSizes; - } - _computeLabelSizes(ticks, length, maxTicksLimit) { - const { ctx, _longestTextCache: caches } = this; - const widths = []; - const heights = []; - const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit)); - let widestLabelSize = 0; - let highestLabelSize = 0; - let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel; - for (i = 0; i < length; i += increment) { - label = ticks[i].label; - tickFont = this._resolveTickFontOptions(i); - ctx.font = fontString = tickFont.string; - cache = caches[fontString] = caches[fontString] || { - data: {}, - gc: [] - }; - lineHeight = tickFont.lineHeight; - width = height = 0; - if (!isNullOrUndef(label) && !isArray(label)) { - width = _measureText(ctx, cache.data, cache.gc, width, label); - height = lineHeight; - } else if (isArray(label)) { - for (j = 0, jlen = label.length; j < jlen; ++j) { - nestedLabel = label[j]; - if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) { - width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel); - height += lineHeight; - } - } - } - widths.push(width); - heights.push(height); - widestLabelSize = Math.max(width, widestLabelSize); - highestLabelSize = Math.max(height, highestLabelSize); - } - garbageCollect(caches, length); - const widest = widths.indexOf(widestLabelSize); - const highest = heights.indexOf(highestLabelSize); - const valueAt = (idx) => ({ - width: widths[idx] || 0, - height: heights[idx] || 0 - }); - return { - first: valueAt(0), - last: valueAt(length - 1), - widest: valueAt(widest), - highest: valueAt(highest), - widths, - heights - }; - } - getLabelForValue(value) { - return value; - } - getPixelForValue(value, index) { - return NaN; - } - getValueForPixel(pixel) { - } - getPixelForTick(index) { - const ticks = this.ticks; - if (index < 0 || index > ticks.length - 1) { - return null; - } - return this.getPixelForValue(ticks[index].value); - } - getPixelForDecimal(decimal) { - if (this._reversePixels) { - decimal = 1 - decimal; - } - const pixel = this._startPixel + decimal * this._length; - return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel); - } - getDecimalForPixel(pixel) { - const decimal = (pixel - this._startPixel) / this._length; - return this._reversePixels ? 1 - decimal : decimal; - } - getBasePixel() { - return this.getPixelForValue(this.getBaseValue()); - } - getBaseValue() { - const { min, max } = this; - return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0; - } - getContext(index) { - const ticks = this.ticks || []; - if (index >= 0 && index < ticks.length) { - const tick = ticks[index]; - return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick)); - } - return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this)); - } - _tickSize() { - const optionTicks = this.options.ticks; - const rot = toRadians(this.labelRotation); - const cos = Math.abs(Math.cos(rot)); - const sin = Math.abs(Math.sin(rot)); - const labelSizes = this._getLabelSizes(); - const padding = optionTicks.autoSkipPadding || 0; - const w = labelSizes ? labelSizes.widest.width + padding : 0; - const h4 = labelSizes ? labelSizes.highest.height + padding : 0; - return this.isHorizontal() ? h4 * cos > w * sin ? w / cos : h4 / sin : h4 * sin < w * cos ? h4 / cos : w / sin; - } - _isVisible() { - const display = this.options.display; - if (display !== "auto") { - return !!display; - } - return this.getMatchingVisibleMetas().length > 0; - } - _computeGridLineItems(chartArea) { - const axis = this.axis; - const chart = this.chart; - const options = this.options; - const { grid, position, border } = options; - const offset = grid.offset; - const isHorizontal = this.isHorizontal(); - const ticks = this.ticks; - const ticksLength = ticks.length + (offset ? 1 : 0); - const tl = getTickMarkLength(grid); - const items = []; - const borderOpts = border.setContext(this.getContext()); - const axisWidth = borderOpts.display ? borderOpts.width : 0; - const axisHalfWidth = axisWidth / 2; - const alignBorderValue = function(pixel) { - return _alignPixel(chart, pixel, axisWidth); - }; - let borderValue, i, lineValue, alignedLineValue; - let tx1, ty1, tx2, ty2, x1, y1, x2, y2; - if (position === "top") { - borderValue = alignBorderValue(this.bottom); - ty1 = this.bottom - tl; - ty2 = borderValue - axisHalfWidth; - y1 = alignBorderValue(chartArea.top) + axisHalfWidth; - y2 = chartArea.bottom; - } else if (position === "bottom") { - borderValue = alignBorderValue(this.top); - y1 = chartArea.top; - y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth; - ty1 = borderValue + axisHalfWidth; - ty2 = this.top + tl; - } else if (position === "left") { - borderValue = alignBorderValue(this.right); - tx1 = this.right - tl; - tx2 = borderValue - axisHalfWidth; - x1 = alignBorderValue(chartArea.left) + axisHalfWidth; - x2 = chartArea.right; - } else if (position === "right") { - borderValue = alignBorderValue(this.left); - x1 = chartArea.left; - x2 = alignBorderValue(chartArea.right) - axisHalfWidth; - tx1 = borderValue + axisHalfWidth; - tx2 = this.left + tl; - } else if (axis === "x") { - if (position === "center") { - borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); - } else if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); - } - y1 = chartArea.top; - y2 = chartArea.bottom; - ty1 = borderValue + axisHalfWidth; - ty2 = ty1 + tl; - } else if (axis === "y") { - if (position === "center") { - borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2); - } else if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); - } - tx1 = borderValue - axisHalfWidth; - tx2 = tx1 - tl; - x1 = chartArea.left; - x2 = chartArea.right; - } - const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength); - const step = Math.max(1, Math.ceil(ticksLength / limit)); - for (i = 0; i < ticksLength; i += step) { - const context = this.getContext(i); - const optsAtIndex = grid.setContext(context); - const optsAtIndexBorder = border.setContext(context); - const lineWidth = optsAtIndex.lineWidth; - const lineColor = optsAtIndex.color; - const borderDash = optsAtIndexBorder.dash || []; - const borderDashOffset = optsAtIndexBorder.dashOffset; - const tickWidth = optsAtIndex.tickWidth; - const tickColor = optsAtIndex.tickColor; - const tickBorderDash = optsAtIndex.tickBorderDash || []; - const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset; - lineValue = getPixelForGridLine(this, i, offset); - if (lineValue === void 0) { - continue; - } - alignedLineValue = _alignPixel(chart, lineValue, lineWidth); - if (isHorizontal) { - tx1 = tx2 = x1 = x2 = alignedLineValue; - } else { - ty1 = ty2 = y1 = y2 = alignedLineValue; - } - items.push({ - tx1, - ty1, - tx2, - ty2, - x1, - y1, - x2, - y2, - width: lineWidth, - color: lineColor, - borderDash, - borderDashOffset, - tickWidth, - tickColor, - tickBorderDash, - tickBorderDashOffset - }); - } - this._ticksLength = ticksLength; - this._borderValue = borderValue; - return items; - } - _computeLabelItems(chartArea) { - const axis = this.axis; - const options = this.options; - const { position, ticks: optionTicks } = options; - const isHorizontal = this.isHorizontal(); - const ticks = this.ticks; - const { align, crossAlign, padding, mirror } = optionTicks; - const tl = getTickMarkLength(options.grid); - const tickAndPadding = tl + padding; - const hTickAndPadding = mirror ? -padding : tickAndPadding; - const rotation = -toRadians(this.labelRotation); - const items = []; - let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; - let textBaseline = "middle"; - if (position === "top") { - y = this.bottom - hTickAndPadding; - textAlign = this._getXAxisLabelAlignment(); - } else if (position === "bottom") { - y = this.top + hTickAndPadding; - textAlign = this._getXAxisLabelAlignment(); - } else if (position === "left") { - const ret = this._getYAxisLabelAlignment(tl); - textAlign = ret.textAlign; - x = ret.x; - } else if (position === "right") { - const ret = this._getYAxisLabelAlignment(tl); - textAlign = ret.textAlign; - x = ret.x; - } else if (axis === "x") { - if (position === "center") { - y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding; - } else if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding; - } - textAlign = this._getXAxisLabelAlignment(); - } else if (axis === "y") { - if (position === "center") { - x = (chartArea.left + chartArea.right) / 2 - tickAndPadding; - } else if (isObject(position)) { - const positionAxisID = Object.keys(position)[0]; - const value = position[positionAxisID]; - x = this.chart.scales[positionAxisID].getPixelForValue(value); - } - textAlign = this._getYAxisLabelAlignment(tl).textAlign; - } - if (axis === "y") { - if (align === "start") { - textBaseline = "top"; - } else if (align === "end") { - textBaseline = "bottom"; - } - } - const labelSizes = this._getLabelSizes(); - for (i = 0, ilen = ticks.length; i < ilen; ++i) { - tick = ticks[i]; - label = tick.label; - const optsAtIndex = optionTicks.setContext(this.getContext(i)); - pixel = this.getPixelForTick(i) + optionTicks.labelOffset; - font = this._resolveTickFontOptions(i); - lineHeight = font.lineHeight; - lineCount = isArray(label) ? label.length : 1; - const halfCount = lineCount / 2; - const color2 = optsAtIndex.color; - const strokeColor = optsAtIndex.textStrokeColor; - const strokeWidth = optsAtIndex.textStrokeWidth; - let tickTextAlign = textAlign; - if (isHorizontal) { - x = pixel; - if (textAlign === "inner") { - if (i === ilen - 1) { - tickTextAlign = !this.options.reverse ? "right" : "left"; - } else if (i === 0) { - tickTextAlign = !this.options.reverse ? "left" : "right"; - } else { - tickTextAlign = "center"; - } - } - if (position === "top") { - if (crossAlign === "near" || rotation !== 0) { - textOffset = -lineCount * lineHeight + lineHeight / 2; - } else if (crossAlign === "center") { - textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; - } else { - textOffset = -labelSizes.highest.height + lineHeight / 2; - } - } else { - if (crossAlign === "near" || rotation !== 0) { - textOffset = lineHeight / 2; - } else if (crossAlign === "center") { - textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; - } else { - textOffset = labelSizes.highest.height - lineCount * lineHeight; - } - } - if (mirror) { - textOffset *= -1; - } - if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) { - x += lineHeight / 2 * Math.sin(rotation); - } - } else { - y = pixel; - textOffset = (1 - lineCount) * lineHeight / 2; - } - let backdrop; - if (optsAtIndex.showLabelBackdrop) { - const labelPadding = toPadding(optsAtIndex.backdropPadding); - const height = labelSizes.heights[i]; - const width = labelSizes.widths[i]; - let top = textOffset - labelPadding.top; - let left = 0 - labelPadding.left; - switch (textBaseline) { - case "middle": - top -= height / 2; - break; - case "bottom": - top -= height; - break; - } - switch (textAlign) { - case "center": - left -= width / 2; - break; - case "right": - left -= width; - break; - } - backdrop = { - left, - top, - width: width + labelPadding.width, - height: height + labelPadding.height, - color: optsAtIndex.backdropColor - }; - } - items.push({ - label, - font, - textOffset, - options: { - rotation, - color: color2, - strokeColor, - strokeWidth, - textAlign: tickTextAlign, - textBaseline, - translation: [ - x, - y - ], - backdrop - } - }); - } - return items; - } - _getXAxisLabelAlignment() { - const { position, ticks } = this.options; - const rotation = -toRadians(this.labelRotation); - if (rotation) { - return position === "top" ? "left" : "right"; - } - let align = "center"; - if (ticks.align === "start") { - align = "left"; - } else if (ticks.align === "end") { - align = "right"; - } else if (ticks.align === "inner") { - align = "inner"; - } - return align; - } - _getYAxisLabelAlignment(tl) { - const { position, ticks: { crossAlign, mirror, padding } } = this.options; - const labelSizes = this._getLabelSizes(); - const tickAndPadding = tl + padding; - const widest = labelSizes.widest.width; - let textAlign; - let x; - if (position === "left") { - if (mirror) { - x = this.right + padding; - if (crossAlign === "near") { - textAlign = "left"; - } else if (crossAlign === "center") { - textAlign = "center"; - x += widest / 2; - } else { - textAlign = "right"; - x += widest; - } - } else { - x = this.right - tickAndPadding; - if (crossAlign === "near") { - textAlign = "right"; - } else if (crossAlign === "center") { - textAlign = "center"; - x -= widest / 2; - } else { - textAlign = "left"; - x = this.left; - } - } - } else if (position === "right") { - if (mirror) { - x = this.left + padding; - if (crossAlign === "near") { - textAlign = "right"; - } else if (crossAlign === "center") { - textAlign = "center"; - x -= widest / 2; - } else { - textAlign = "left"; - x -= widest; - } - } else { - x = this.left + tickAndPadding; - if (crossAlign === "near") { - textAlign = "left"; - } else if (crossAlign === "center") { - textAlign = "center"; - x += widest / 2; - } else { - textAlign = "right"; - x = this.right; - } - } - } else { - textAlign = "right"; - } - return { - textAlign, - x - }; - } - _computeLabelArea() { - if (this.options.ticks.mirror) { - return; - } - const chart = this.chart; - const position = this.options.position; - if (position === "left" || position === "right") { - return { - top: 0, - left: this.left, - bottom: chart.height, - right: this.right - }; - } - if (position === "top" || position === "bottom") { - return { - top: this.top, - left: 0, - bottom: this.bottom, - right: chart.width - }; - } - } - drawBackground() { - const { ctx, options: { backgroundColor }, left, top, width, height } = this; - if (backgroundColor) { - ctx.save(); - ctx.fillStyle = backgroundColor; - ctx.fillRect(left, top, width, height); - ctx.restore(); - } - } - getLineWidthForValue(value) { - const grid = this.options.grid; - if (!this._isVisible() || !grid.display) { - return 0; - } - const ticks = this.ticks; - const index = ticks.findIndex((t2) => t2.value === value); - if (index >= 0) { - const opts = grid.setContext(this.getContext(index)); - return opts.lineWidth; - } - return 0; - } - drawGrid(chartArea) { - const grid = this.options.grid; - const ctx = this.ctx; - const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea)); - let i, ilen; - const drawLine = (p1, p2, style) => { - if (!style.width || !style.color) { - return; - } - ctx.save(); - ctx.lineWidth = style.width; - ctx.strokeStyle = style.color; - ctx.setLineDash(style.borderDash || []); - ctx.lineDashOffset = style.borderDashOffset; - ctx.beginPath(); - ctx.moveTo(p1.x, p1.y); - ctx.lineTo(p2.x, p2.y); - ctx.stroke(); - ctx.restore(); - }; - if (grid.display) { - for (i = 0, ilen = items.length; i < ilen; ++i) { - const item = items[i]; - if (grid.drawOnChartArea) { - drawLine({ - x: item.x1, - y: item.y1 - }, { - x: item.x2, - y: item.y2 - }, item); - } - if (grid.drawTicks) { - drawLine({ - x: item.tx1, - y: item.ty1 - }, { - x: item.tx2, - y: item.ty2 - }, { - color: item.tickColor, - width: item.tickWidth, - borderDash: item.tickBorderDash, - borderDashOffset: item.tickBorderDashOffset - }); - } - } - } - } - drawBorder() { - const { chart, ctx, options: { border, grid } } = this; - const borderOpts = border.setContext(this.getContext()); - const axisWidth = border.display ? borderOpts.width : 0; - if (!axisWidth) { - return; - } - const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth; - const borderValue = this._borderValue; - let x1, x2, y1, y2; - if (this.isHorizontal()) { - x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2; - x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2; - y1 = y2 = borderValue; - } else { - y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2; - y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2; - x1 = x2 = borderValue; - } - ctx.save(); - ctx.lineWidth = borderOpts.width; - ctx.strokeStyle = borderOpts.color; - ctx.beginPath(); - ctx.moveTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.stroke(); - ctx.restore(); - } - drawLabels(chartArea) { - const optionTicks = this.options.ticks; - if (!optionTicks.display) { - return; - } - const ctx = this.ctx; - const area = this._computeLabelArea(); - if (area) { - clipArea(ctx, area); - } - const items = this.getLabelItems(chartArea); - for (const item of items) { - const renderTextOptions = item.options; - const tickFont = item.font; - const label = item.label; - const y = item.textOffset; - renderText(ctx, label, 0, y, tickFont, renderTextOptions); - } - if (area) { - unclipArea(ctx); - } - } - drawTitle() { - const { ctx, options: { position, title, reverse } } = this; - if (!title.display) { - return; - } - const font = toFont(title.font); - const padding = toPadding(title.padding); - const align = title.align; - let offset = font.lineHeight / 2; - if (position === "bottom" || position === "center" || isObject(position)) { - offset += padding.bottom; - if (isArray(title.text)) { - offset += font.lineHeight * (title.text.length - 1); - } - } else { - offset += padding.top; - } - const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align); - renderText(ctx, title.text, 0, 0, font, { - color: title.color, - maxWidth, - rotation, - textAlign: titleAlign(align, position, reverse), - textBaseline: "middle", - translation: [ - titleX, - titleY - ] - }); - } - draw(chartArea) { - if (!this._isVisible()) { - return; - } - this.drawBackground(); - this.drawGrid(chartArea); - this.drawBorder(); - this.drawTitle(); - this.drawLabels(chartArea); - } - _layers() { - const opts = this.options; - const tz = opts.ticks && opts.ticks.z || 0; - const gz = valueOrDefault(opts.grid && opts.grid.z, -1); - const bz = valueOrDefault(opts.border && opts.border.z, 0); - if (!this._isVisible() || this.draw !== Scale.prototype.draw) { - return [ - { - z: tz, - draw: (chartArea) => { - this.draw(chartArea); - } - } - ]; - } - return [ - { - z: gz, - draw: (chartArea) => { - this.drawBackground(); - this.drawGrid(chartArea); - this.drawTitle(); - } - }, - { - z: bz, - draw: () => { - this.drawBorder(); - } - }, - { - z: tz, - draw: (chartArea) => { - this.drawLabels(chartArea); - } - } - ]; - } - getMatchingVisibleMetas(type) { - const metas = this.chart.getSortedVisibleDatasetMetas(); - const axisID = this.axis + "AxisID"; - const result = []; - let i, ilen; - for (i = 0, ilen = metas.length; i < ilen; ++i) { - const meta = metas[i]; - if (meta[axisID] === this.id && (!type || meta.type === type)) { - result.push(meta); - } - } - return result; - } - _resolveTickFontOptions(index) { - const opts = this.options.ticks.setContext(this.getContext(index)); - return toFont(opts.font); - } - _maxDigits() { - const fontSize = this._resolveTickFontOptions(0).lineHeight; - return (this.isHorizontal() ? this.width : this.height) / fontSize; - } -}; -var TypedRegistry = class { - constructor(type, scope, override) { - this.type = type; - this.scope = scope; - this.override = override; - this.items = /* @__PURE__ */ Object.create(null); - } - isForType(type) { - return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype); - } - register(item) { - const proto = Object.getPrototypeOf(item); - let parentScope; - if (isIChartComponent(proto)) { - parentScope = this.register(proto); - } - const items = this.items; - const id = item.id; - const scope = this.scope + "." + id; - if (!id) { - throw new Error("class does not have id: " + item); - } - if (id in items) { - return scope; - } - items[id] = item; - registerDefaults(item, scope, parentScope); - if (this.override) { - defaults.override(item.id, item.overrides); - } - return scope; - } - get(id) { - return this.items[id]; - } - unregister(item) { - const items = this.items; - const id = item.id; - const scope = this.scope; - if (id in items) { - delete items[id]; - } - if (scope && id in defaults[scope]) { - delete defaults[scope][id]; - if (this.override) { - delete overrides[id]; - } - } - } -}; -function registerDefaults(item, scope, parentScope) { - const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [ - parentScope ? defaults.get(parentScope) : {}, - defaults.get(scope), - item.defaults - ]); - defaults.set(scope, itemDefaults); - if (item.defaultRoutes) { - routeDefaults(scope, item.defaultRoutes); - } - if (item.descriptors) { - defaults.describe(scope, item.descriptors); - } -} -function routeDefaults(scope, routes) { - Object.keys(routes).forEach((property) => { - const propertyParts = property.split("."); - const sourceName = propertyParts.pop(); - const sourceScope = [ - scope - ].concat(propertyParts).join("."); - const parts = routes[property].split("."); - const targetName = parts.pop(); - const targetScope = parts.join("."); - defaults.route(sourceScope, sourceName, targetScope, targetName); - }); -} -function isIChartComponent(proto) { - return "id" in proto && "defaults" in proto; -} -var Registry = class { - constructor() { - this.controllers = new TypedRegistry(DatasetController, "datasets", true); - this.elements = new TypedRegistry(Element, "elements"); - this.plugins = new TypedRegistry(Object, "plugins"); - this.scales = new TypedRegistry(Scale, "scales"); - this._typedRegistries = [ - this.controllers, - this.scales, - this.elements - ]; - } - add(...args) { - this._each("register", args); - } - remove(...args) { - this._each("unregister", args); - } - addControllers(...args) { - this._each("register", args, this.controllers); - } - addElements(...args) { - this._each("register", args, this.elements); - } - addPlugins(...args) { - this._each("register", args, this.plugins); - } - addScales(...args) { - this._each("register", args, this.scales); - } - getController(id) { - return this._get(id, this.controllers, "controller"); - } - getElement(id) { - return this._get(id, this.elements, "element"); - } - getPlugin(id) { - return this._get(id, this.plugins, "plugin"); - } - getScale(id) { - return this._get(id, this.scales, "scale"); - } - removeControllers(...args) { - this._each("unregister", args, this.controllers); - } - removeElements(...args) { - this._each("unregister", args, this.elements); - } - removePlugins(...args) { - this._each("unregister", args, this.plugins); - } - removeScales(...args) { - this._each("unregister", args, this.scales); - } - _each(method, args, typedRegistry) { - [ - ...args - ].forEach((arg) => { - const reg = typedRegistry || this._getRegistryForType(arg); - if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) { - this._exec(method, reg, arg); - } else { - each(arg, (item) => { - const itemReg = typedRegistry || this._getRegistryForType(item); - this._exec(method, itemReg, item); - }); - } - }); - } - _exec(method, registry2, component) { - const camelMethod = _capitalize(method); - callback(component["before" + camelMethod], [], component); - registry2[method](component); - callback(component["after" + camelMethod], [], component); - } - _getRegistryForType(type) { - for (let i = 0; i < this._typedRegistries.length; i++) { - const reg = this._typedRegistries[i]; - if (reg.isForType(type)) { - return reg; - } - } - return this.plugins; - } - _get(id, typedRegistry, type) { - const item = typedRegistry.get(id); - if (item === void 0) { - throw new Error('"' + id + '" is not a registered ' + type + "."); - } - return item; - } -}; -var registry = /* @__PURE__ */ new Registry(); -var PluginService = class { - constructor() { - this._init = []; - } - notify(chart, hook, args, filter) { - if (hook === "beforeInit") { - this._init = this._createDescriptors(chart, true); - this._notify(this._init, chart, "install"); - } - const descriptors2 = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart); - const result = this._notify(descriptors2, chart, hook, args); - if (hook === "afterDestroy") { - this._notify(descriptors2, chart, "stop"); - this._notify(this._init, chart, "uninstall"); - } - return result; - } - _notify(descriptors2, chart, hook, args) { - args = args || {}; - for (const descriptor of descriptors2) { - const plugin = descriptor.plugin; - const method = plugin[hook]; - const params = [ - chart, - args, - descriptor.options - ]; - if (callback(method, params, plugin) === false && args.cancelable) { - return false; - } - } - return true; - } - invalidate() { - if (!isNullOrUndef(this._cache)) { - this._oldCache = this._cache; - this._cache = void 0; - } - } - _descriptors(chart) { - if (this._cache) { - return this._cache; - } - const descriptors2 = this._cache = this._createDescriptors(chart); - this._notifyStateChanges(chart); - return descriptors2; - } - _createDescriptors(chart, all) { - const config = chart && chart.config; - const options = valueOrDefault(config.options && config.options.plugins, {}); - const plugins = allPlugins(config); - return options === false && !all ? [] : createDescriptors(chart, plugins, options, all); - } - _notifyStateChanges(chart) { - const previousDescriptors = this._oldCache || []; - const descriptors2 = this._cache; - const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id)); - this._notify(diff(previousDescriptors, descriptors2), chart, "stop"); - this._notify(diff(descriptors2, previousDescriptors), chart, "start"); - } -}; -function allPlugins(config) { - const localIds = {}; - const plugins = []; - const keys = Object.keys(registry.plugins.items); - for (let i = 0; i < keys.length; i++) { - plugins.push(registry.getPlugin(keys[i])); - } - const local = config.plugins || []; - for (let i = 0; i < local.length; i++) { - const plugin = local[i]; - if (plugins.indexOf(plugin) === -1) { - plugins.push(plugin); - localIds[plugin.id] = true; - } - } - return { - plugins, - localIds - }; -} -function getOpts(options, all) { - if (!all && options === false) { - return null; - } - if (options === true) { - return {}; - } - return options; -} -function createDescriptors(chart, { plugins, localIds }, options, all) { - const result = []; - const context = chart.getContext(); - for (const plugin of plugins) { - const id = plugin.id; - const opts = getOpts(options[id], all); - if (opts === null) { - continue; - } - result.push({ - plugin, - options: pluginOpts(chart.config, { - plugin, - local: localIds[id] - }, opts, context) - }); - } - return result; -} -function pluginOpts(config, { plugin, local }, opts, context) { - const keys = config.pluginScopeKeys(plugin); - const scopes = config.getOptionScopes(opts, keys); - if (local && plugin.defaults) { - scopes.push(plugin.defaults); - } - return config.createResolver(scopes, context, [ - "" - ], { - scriptable: false, - indexable: false, - allKeys: true - }); -} -function getIndexAxis(type, options) { - const datasetDefaults = defaults.datasets[type] || {}; - const datasetOptions = (options.datasets || {})[type] || {}; - return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || "x"; -} -function getAxisFromDefaultScaleID(id, indexAxis) { - let axis = id; - if (id === "_index_") { - axis = indexAxis; - } else if (id === "_value_") { - axis = indexAxis === "x" ? "y" : "x"; - } - return axis; -} -function getDefaultScaleIDFromAxis(axis, indexAxis) { - return axis === indexAxis ? "_index_" : "_value_"; -} -function idMatchesAxis(id) { - if (id === "x" || id === "y" || id === "r") { - return id; - } -} -function axisFromPosition(position) { - if (position === "top" || position === "bottom") { - return "x"; - } - if (position === "left" || position === "right") { - return "y"; - } -} -function determineAxis(id, ...scaleOptions) { - if (idMatchesAxis(id)) { - return id; - } - for (const opts of scaleOptions) { - const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase()); - if (axis) { - return axis; - } - } - throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`); -} -function getAxisFromDataset(id, axis, dataset) { - if (dataset[axis + "AxisID"] === id) { - return { - axis - }; - } -} -function retrieveAxisFromDatasets(id, config) { - if (config.data && config.data.datasets) { - const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id); - if (boundDs.length) { - return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]); - } - } - return {}; -} -function mergeScaleConfig(config, options) { - const chartDefaults = overrides[config.type] || { - scales: {} - }; - const configScales = options.scales || {}; - const chartIndexAxis = getIndexAxis(config.type, options); - const scales = /* @__PURE__ */ Object.create(null); - Object.keys(configScales).forEach((id) => { - const scaleConf = configScales[id]; - if (!isObject(scaleConf)) { - return console.error(`Invalid scale configuration for scale: ${id}`); - } - if (scaleConf._proxy) { - return console.warn(`Ignoring resolver passed as options for scale: ${id}`); - } - const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]); - const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); - const defaultScaleOptions = chartDefaults.scales || {}; - scales[id] = mergeIf(/* @__PURE__ */ Object.create(null), [ - { - axis - }, - scaleConf, - defaultScaleOptions[axis], - defaultScaleOptions[defaultId] - ]); - }); - config.data.datasets.forEach((dataset) => { - const type = dataset.type || config.type; - const indexAxis = dataset.indexAxis || getIndexAxis(type, options); - const datasetDefaults = overrides[type] || {}; - const defaultScaleOptions = datasetDefaults.scales || {}; - Object.keys(defaultScaleOptions).forEach((defaultID) => { - const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); - const id = dataset[axis + "AxisID"] || axis; - scales[id] = scales[id] || /* @__PURE__ */ Object.create(null); - mergeIf(scales[id], [ - { - axis - }, - configScales[id], - defaultScaleOptions[defaultID] - ]); - }); - }); - Object.keys(scales).forEach((key) => { - const scale = scales[key]; - mergeIf(scale, [ - defaults.scales[scale.type], - defaults.scale - ]); - }); - return scales; -} -function initOptions(config) { - const options = config.options || (config.options = {}); - options.plugins = valueOrDefault(options.plugins, {}); - options.scales = mergeScaleConfig(config, options); -} -function initData(data) { - data = data || {}; - data.datasets = data.datasets || []; - data.labels = data.labels || []; - return data; -} -function initConfig(config) { - config = config || {}; - config.data = initData(config.data); - initOptions(config); - return config; -} -var keyCache = /* @__PURE__ */ new Map(); -var keysCached = /* @__PURE__ */ new Set(); -function cachedKeys(cacheKey, generate) { - let keys = keyCache.get(cacheKey); - if (!keys) { - keys = generate(); - keyCache.set(cacheKey, keys); - keysCached.add(keys); - } - return keys; -} -var addIfFound = (set2, obj, key) => { - const opts = resolveObjectKey(obj, key); - if (opts !== void 0) { - set2.add(opts); - } -}; -var Config = class { - constructor(config) { - this._config = initConfig(config); - this._scopeCache = /* @__PURE__ */ new Map(); - this._resolverCache = /* @__PURE__ */ new Map(); - } - get platform() { - return this._config.platform; - } - get type() { - return this._config.type; - } - set type(type) { - this._config.type = type; - } - get data() { - return this._config.data; - } - set data(data) { - this._config.data = initData(data); - } - get options() { - return this._config.options; - } - set options(options) { - this._config.options = options; - } - get plugins() { - return this._config.plugins; - } - update() { - const config = this._config; - this.clearCache(); - initOptions(config); - } - clearCache() { - this._scopeCache.clear(); - this._resolverCache.clear(); - } - datasetScopeKeys(datasetType) { - return cachedKeys(datasetType, () => [ - [ - `datasets.${datasetType}`, - "" - ] - ]); - } - datasetAnimationScopeKeys(datasetType, transition) { - return cachedKeys(`${datasetType}.transition.${transition}`, () => [ - [ - `datasets.${datasetType}.transitions.${transition}`, - `transitions.${transition}` - ], - [ - `datasets.${datasetType}`, - "" - ] - ]); - } - datasetElementScopeKeys(datasetType, elementType) { - return cachedKeys(`${datasetType}-${elementType}`, () => [ - [ - `datasets.${datasetType}.elements.${elementType}`, - `datasets.${datasetType}`, - `elements.${elementType}`, - "" - ] - ]); - } - pluginScopeKeys(plugin) { - const id = plugin.id; - const type = this.type; - return cachedKeys(`${type}-plugin-${id}`, () => [ - [ - `plugins.${id}`, - ...plugin.additionalOptionScopes || [] - ] - ]); - } - _cachedScopes(mainScope, resetCache) { - const _scopeCache = this._scopeCache; - let cache = _scopeCache.get(mainScope); - if (!cache || resetCache) { - cache = /* @__PURE__ */ new Map(); - _scopeCache.set(mainScope, cache); - } - return cache; - } - getOptionScopes(mainScope, keyLists, resetCache) { - const { options, type } = this; - const cache = this._cachedScopes(mainScope, resetCache); - const cached = cache.get(keyLists); - if (cached) { - return cached; - } - const scopes = /* @__PURE__ */ new Set(); - keyLists.forEach((keys) => { - if (mainScope) { - scopes.add(mainScope); - keys.forEach((key) => addIfFound(scopes, mainScope, key)); - } - keys.forEach((key) => addIfFound(scopes, options, key)); - keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key)); - keys.forEach((key) => addIfFound(scopes, defaults, key)); - keys.forEach((key) => addIfFound(scopes, descriptors, key)); - }); - const array = Array.from(scopes); - if (array.length === 0) { - array.push(/* @__PURE__ */ Object.create(null)); - } - if (keysCached.has(keyLists)) { - cache.set(keyLists, array); - } - return array; - } - chartOptionScopes() { - const { options, type } = this; - return [ - options, - overrides[type] || {}, - defaults.datasets[type] || {}, - { - type - }, - defaults, - descriptors - ]; - } - resolveNamedOptions(scopes, names2, context, prefixes = [ - "" - ]) { - const result = { - $shared: true - }; - const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes); - let options = resolver; - if (needContext(resolver, names2)) { - result.$shared = false; - context = isFunction(context) ? context() : context; - const subResolver = this.createResolver(scopes, context, subPrefixes); - options = _attachContext(resolver, context, subResolver); - } - for (const prop of names2) { - result[prop] = options[prop]; - } - return result; - } - createResolver(scopes, context, prefixes = [ - "" - ], descriptorDefaults) { - const { resolver } = getResolver(this._resolverCache, scopes, prefixes); - return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver; - } -}; -function getResolver(resolverCache, scopes, prefixes) { - let cache = resolverCache.get(scopes); - if (!cache) { - cache = /* @__PURE__ */ new Map(); - resolverCache.set(scopes, cache); - } - const cacheKey = prefixes.join(); - let cached = cache.get(cacheKey); - if (!cached) { - const resolver = _createResolver(scopes, prefixes); - cached = { - resolver, - subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover")) - }; - cache.set(cacheKey, cached); - } - return cached; -} -var hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false); -function needContext(proxy, names2) { - const { isScriptable, isIndexable } = _descriptors(proxy); - for (const prop of names2) { - const scriptable = isScriptable(prop); - const indexable = isIndexable(prop); - const value = (indexable || scriptable) && proxy[prop]; - if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) { - return true; - } - } - return false; -} -var version = "4.3.0"; -var KNOWN_POSITIONS = [ - "top", - "bottom", - "left", - "right", - "chartArea" -]; -function positionIsHorizontal(position, axis) { - return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x"; -} -function compare2Level(l1, l2) { - return function(a, b) { - return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1]; - }; -} -function onAnimationsComplete(context) { - const chart = context.chart; - const animationOptions = chart.options.animation; - chart.notifyPlugins("afterRender"); - callback(animationOptions && animationOptions.onComplete, [ - context - ], chart); -} -function onAnimationProgress(context) { - const chart = context.chart; - const animationOptions = chart.options.animation; - callback(animationOptions && animationOptions.onProgress, [ - context - ], chart); -} -function getCanvas(item) { - if (_isDomSupported() && typeof item === "string") { - item = document.getElementById(item); - } else if (item && item.length) { - item = item[0]; - } - if (item && item.canvas) { - item = item.canvas; - } - return item; -} -var instances = {}; -var getChart = (key) => { - const canvas = getCanvas(key); - return Object.values(instances).filter((c) => c.canvas === canvas).pop(); -}; -function moveNumericKeys(obj, start, move) { - const keys = Object.keys(obj); - for (const key of keys) { - const intKey = +key; - if (intKey >= start) { - const value = obj[key]; - delete obj[key]; - if (move > 0 || intKey > start) { - obj[intKey + move] = value; - } - } - } -} -function determineLastEvent(e, lastEvent, inChartArea, isClick) { - if (!inChartArea || e.type === "mouseout") { - return null; - } - if (isClick) { - return lastEvent; - } - return e; -} -function getDatasetArea(meta) { - const { xScale, yScale } = meta; - if (xScale && yScale) { - return { - left: xScale.left, - right: xScale.right, - top: yScale.top, - bottom: yScale.bottom - }; - } -} -var Chart = class { - static register(...items) { - registry.add(...items); - invalidatePlugins(); - } - static unregister(...items) { - registry.remove(...items); - invalidatePlugins(); - } - constructor(item, userConfig) { - const config = this.config = new Config(userConfig); - const initialCanvas = getCanvas(item); - const existingChart = getChart(initialCanvas); - if (existingChart) { - throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused."); - } - const options = config.createResolver(config.chartOptionScopes(), this.getContext()); - this.platform = new (config.platform || _detectPlatform(initialCanvas))(); - this.platform.updateConfig(config); - const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); - const canvas = context && context.canvas; - const height = canvas && canvas.height; - const width = canvas && canvas.width; - this.id = uid(); - this.ctx = context; - this.canvas = canvas; - this.width = width; - this.height = height; - this._options = options; - this._aspectRatio = this.aspectRatio; - this._layers = []; - this._metasets = []; - this._stacks = void 0; - this.boxes = []; - this.currentDevicePixelRatio = void 0; - this.chartArea = void 0; - this._active = []; - this._lastEvent = void 0; - this._listeners = {}; - this._responsiveListeners = void 0; - this._sortedMetasets = []; - this.scales = {}; - this._plugins = new PluginService(); - this.$proxies = {}; - this._hiddenIndices = {}; - this.attached = false; - this._animationsDisabled = void 0; - this.$context = void 0; - this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0); - this._dataChanges = []; - instances[this.id] = this; - if (!context || !canvas) { - console.error("Failed to create chart: can't acquire context from the given item"); - return; - } - animator.listen(this, "complete", onAnimationsComplete); - animator.listen(this, "progress", onAnimationProgress); - this._initialize(); - if (this.attached) { - this.update(); - } - } - get aspectRatio() { - const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this; - if (!isNullOrUndef(aspectRatio)) { - return aspectRatio; - } - if (maintainAspectRatio && _aspectRatio) { - return _aspectRatio; - } - return height ? width / height : null; - } - get data() { - return this.config.data; - } - set data(data) { - this.config.data = data; - } - get options() { - return this._options; - } - set options(options) { - this.config.options = options; - } - get registry() { - return registry; - } - _initialize() { - this.notifyPlugins("beforeInit"); - if (this.options.responsive) { - this.resize(); - } else { - retinaScale(this, this.options.devicePixelRatio); - } - this.bindEvents(); - this.notifyPlugins("afterInit"); - return this; - } - clear() { - clearCanvas(this.canvas, this.ctx); - return this; - } - stop() { - animator.stop(this); - return this; - } - resize(width, height) { - if (!animator.running(this)) { - this._resize(width, height); - } else { - this._resizeBeforeDraw = { - width, - height - }; - } - } - _resize(width, height) { - const options = this.options; - const canvas = this.canvas; - const aspectRatio = options.maintainAspectRatio && this.aspectRatio; - const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio); - const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio(); - const mode = this.width ? "resize" : "attach"; - this.width = newSize.width; - this.height = newSize.height; - this._aspectRatio = this.aspectRatio; - if (!retinaScale(this, newRatio, true)) { - return; - } - this.notifyPlugins("resize", { - size: newSize - }); - callback(options.onResize, [ - this, - newSize - ], this); - if (this.attached) { - if (this._doResize(mode)) { - this.render(); - } - } - } - ensureScalesHaveIDs() { - const options = this.options; - const scalesOptions = options.scales || {}; - each(scalesOptions, (axisOptions, axisID) => { - axisOptions.id = axisID; - }); - } - buildOrUpdateScales() { - const options = this.options; - const scaleOpts = options.scales; - const scales = this.scales; - const updated = Object.keys(scales).reduce((obj, id) => { - obj[id] = false; - return obj; - }, {}); - let items = []; - if (scaleOpts) { - items = items.concat(Object.keys(scaleOpts).map((id) => { - const scaleOptions = scaleOpts[id]; - const axis = determineAxis(id, scaleOptions); - const isRadial = axis === "r"; - const isHorizontal = axis === "x"; - return { - options: scaleOptions, - dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left", - dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear" - }; - })); - } - each(items, (item) => { - const scaleOptions = item.options; - const id = scaleOptions.id; - const axis = determineAxis(id, scaleOptions); - const scaleType = valueOrDefault(scaleOptions.type, item.dtype); - if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) { - scaleOptions.position = item.dposition; - } - updated[id] = true; - let scale = null; - if (id in scales && scales[id].type === scaleType) { - scale = scales[id]; - } else { - const scaleClass = registry.getScale(scaleType); - scale = new scaleClass({ - id, - type: scaleType, - ctx: this.ctx, - chart: this - }); - scales[scale.id] = scale; - } - scale.init(scaleOptions, options); - }); - each(updated, (hasUpdated, id) => { - if (!hasUpdated) { - delete scales[id]; - } - }); - each(scales, (scale) => { - layouts.configure(this, scale, scale.options); - layouts.addBox(this, scale); - }); - } - _updateMetasets() { - const metasets = this._metasets; - const numData = this.data.datasets.length; - const numMeta = metasets.length; - metasets.sort((a, b) => a.index - b.index); - if (numMeta > numData) { - for (let i = numData; i < numMeta; ++i) { - this._destroyDatasetMeta(i); - } - metasets.splice(numData, numMeta - numData); - } - this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index")); - } - _removeUnreferencedMetasets() { - const { _metasets: metasets, data: { datasets } } = this; - if (metasets.length > datasets.length) { - delete this._stacks; - } - metasets.forEach((meta, index) => { - if (datasets.filter((x) => x === meta._dataset).length === 0) { - this._destroyDatasetMeta(index); - } - }); - } - buildOrUpdateControllers() { - const newControllers = []; - const datasets = this.data.datasets; - let i, ilen; - this._removeUnreferencedMetasets(); - for (i = 0, ilen = datasets.length; i < ilen; i++) { - const dataset = datasets[i]; - let meta = this.getDatasetMeta(i); - const type = dataset.type || this.config.type; - if (meta.type && meta.type !== type) { - this._destroyDatasetMeta(i); - meta = this.getDatasetMeta(i); - } - meta.type = type; - meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options); - meta.order = dataset.order || 0; - meta.index = i; - meta.label = "" + dataset.label; - meta.visible = this.isDatasetVisible(i); - if (meta.controller) { - meta.controller.updateIndex(i); - meta.controller.linkScales(); - } else { - const ControllerClass = registry.getController(type); - const { datasetElementType, dataElementType } = defaults.datasets[type]; - Object.assign(ControllerClass, { - dataElementType: registry.getElement(dataElementType), - datasetElementType: datasetElementType && registry.getElement(datasetElementType) - }); - meta.controller = new ControllerClass(this, i); - newControllers.push(meta.controller); - } - } - this._updateMetasets(); - return newControllers; - } - _resetElements() { - each(this.data.datasets, (dataset, datasetIndex) => { - this.getDatasetMeta(datasetIndex).controller.reset(); - }, this); - } - reset() { - this._resetElements(); - this.notifyPlugins("reset"); - } - update(mode) { - const config = this.config; - config.update(); - const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); - const animsDisabled = this._animationsDisabled = !options.animation; - this._updateScales(); - this._checkEventBindings(); - this._updateHiddenIndices(); - this._plugins.invalidate(); - if (this.notifyPlugins("beforeUpdate", { - mode, - cancelable: true - }) === false) { - return; - } - const newControllers = this.buildOrUpdateControllers(); - this.notifyPlugins("beforeElementsUpdate"); - let minPadding = 0; - for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) { - const { controller } = this.getDatasetMeta(i); - const reset2 = !animsDisabled && newControllers.indexOf(controller) === -1; - controller.buildOrUpdateElements(reset2); - minPadding = Math.max(+controller.getMaxOverflow(), minPadding); - } - minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; - this._updateLayout(minPadding); - if (!animsDisabled) { - each(newControllers, (controller) => { - controller.reset(); - }); - } - this._updateDatasets(mode); - this.notifyPlugins("afterUpdate", { - mode - }); - this._layers.sort(compare2Level("z", "_idx")); - const { _active, _lastEvent } = this; - if (_lastEvent) { - this._eventHandler(_lastEvent, true); - } else if (_active.length) { - this._updateHoverStyles(_active, _active, true); - } - this.render(); - } - _updateScales() { - each(this.scales, (scale) => { - layouts.removeBox(this, scale); - }); - this.ensureScalesHaveIDs(); - this.buildOrUpdateScales(); - } - _checkEventBindings() { - const options = this.options; - const existingEvents = new Set(Object.keys(this._listeners)); - const newEvents = new Set(options.events); - if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { - this.unbindEvents(); - this.bindEvents(); - } - } - _updateHiddenIndices() { - const { _hiddenIndices } = this; - const changes = this._getUniformDataChanges() || []; - for (const { method, start, count } of changes) { - const move = method === "_removeElements" ? -count : count; - moveNumericKeys(_hiddenIndices, start, move); - } - } - _getUniformDataChanges() { - const _dataChanges = this._dataChanges; - if (!_dataChanges || !_dataChanges.length) { - return; - } - this._dataChanges = []; - const datasetCount = this.data.datasets.length; - const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(","))); - const changeSet = makeSet(0); - for (let i = 1; i < datasetCount; i++) { - if (!setsEqual(changeSet, makeSet(i))) { - return; - } - } - return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({ - method: a[1], - start: +a[2], - count: +a[3] - })); - } - _updateLayout(minPadding) { - if (this.notifyPlugins("beforeLayout", { - cancelable: true - }) === false) { - return; - } - layouts.update(this, this.width, this.height, minPadding); - const area = this.chartArea; - const noArea = area.width <= 0 || area.height <= 0; - this._layers = []; - each(this.boxes, (box) => { - if (noArea && box.position === "chartArea") { - return; - } - if (box.configure) { - box.configure(); - } - this._layers.push(...box._layers()); - }, this); - this._layers.forEach((item, index) => { - item._idx = index; - }); - this.notifyPlugins("afterLayout"); - } - _updateDatasets(mode) { - if (this.notifyPlugins("beforeDatasetsUpdate", { - mode, - cancelable: true - }) === false) { - return; - } - for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { - this.getDatasetMeta(i).controller.configure(); - } - for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { - this._updateDataset(i, isFunction(mode) ? mode({ - datasetIndex: i - }) : mode); - } - this.notifyPlugins("afterDatasetsUpdate", { - mode - }); - } - _updateDataset(index, mode) { - const meta = this.getDatasetMeta(index); - const args = { - meta, - index, - mode, - cancelable: true - }; - if (this.notifyPlugins("beforeDatasetUpdate", args) === false) { - return; - } - meta.controller._update(mode); - args.cancelable = false; - this.notifyPlugins("afterDatasetUpdate", args); - } - render() { - if (this.notifyPlugins("beforeRender", { - cancelable: true - }) === false) { - return; - } - if (animator.has(this)) { - if (this.attached && !animator.running(this)) { - animator.start(this); - } - } else { - this.draw(); - onAnimationsComplete({ - chart: this - }); - } - } - draw() { - let i; - if (this._resizeBeforeDraw) { - const { width, height } = this._resizeBeforeDraw; - this._resize(width, height); - this._resizeBeforeDraw = null; - } - this.clear(); - if (this.width <= 0 || this.height <= 0) { - return; - } - if (this.notifyPlugins("beforeDraw", { - cancelable: true - }) === false) { - return; - } - const layers = this._layers; - for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { - layers[i].draw(this.chartArea); - } - this._drawDatasets(); - for (; i < layers.length; ++i) { - layers[i].draw(this.chartArea); - } - this.notifyPlugins("afterDraw"); - } - _getSortedDatasetMetas(filterVisible) { - const metasets = this._sortedMetasets; - const result = []; - let i, ilen; - for (i = 0, ilen = metasets.length; i < ilen; ++i) { - const meta = metasets[i]; - if (!filterVisible || meta.visible) { - result.push(meta); - } - } - return result; - } - getSortedVisibleDatasetMetas() { - return this._getSortedDatasetMetas(true); - } - _drawDatasets() { - if (this.notifyPlugins("beforeDatasetsDraw", { - cancelable: true - }) === false) { - return; - } - const metasets = this.getSortedVisibleDatasetMetas(); - for (let i = metasets.length - 1; i >= 0; --i) { - this._drawDataset(metasets[i]); - } - this.notifyPlugins("afterDatasetsDraw"); - } - _drawDataset(meta) { - const ctx = this.ctx; - const clip = meta._clip; - const useClip = !clip.disabled; - const area = getDatasetArea(meta) || this.chartArea; - const args = { - meta, - index: meta.index, - cancelable: true - }; - if (this.notifyPlugins("beforeDatasetDraw", args) === false) { - return; - } - if (useClip) { - clipArea(ctx, { - left: clip.left === false ? 0 : area.left - clip.left, - right: clip.right === false ? this.width : area.right + clip.right, - top: clip.top === false ? 0 : area.top - clip.top, - bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom - }); - } - meta.controller.draw(); - if (useClip) { - unclipArea(ctx); - } - args.cancelable = false; - this.notifyPlugins("afterDatasetDraw", args); - } - isPointInArea(point) { - return _isPointInArea(point, this.chartArea, this._minPadding); - } - getElementsAtEventForMode(e, mode, options, useFinalPosition) { - const method = Interaction.modes[mode]; - if (typeof method === "function") { - return method(this, e, options, useFinalPosition); - } - return []; - } - getDatasetMeta(datasetIndex) { - const dataset = this.data.datasets[datasetIndex]; - const metasets = this._metasets; - let meta = metasets.filter((x) => x && x._dataset === dataset).pop(); - if (!meta) { - meta = { - type: null, - data: [], - dataset: null, - controller: null, - hidden: null, - xAxisID: null, - yAxisID: null, - order: dataset && dataset.order || 0, - index: datasetIndex, - _dataset: dataset, - _parsed: [], - _sorted: false - }; - metasets.push(meta); - } - return meta; - } - getContext() { - return this.$context || (this.$context = createContext(null, { - chart: this, - type: "chart" - })); - } - getVisibleDatasetCount() { - return this.getSortedVisibleDatasetMetas().length; - } - isDatasetVisible(datasetIndex) { - const dataset = this.data.datasets[datasetIndex]; - if (!dataset) { - return false; - } - const meta = this.getDatasetMeta(datasetIndex); - return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden; - } - setDatasetVisibility(datasetIndex, visible) { - const meta = this.getDatasetMeta(datasetIndex); - meta.hidden = !visible; - } - toggleDataVisibility(index) { - this._hiddenIndices[index] = !this._hiddenIndices[index]; - } - getDataVisibility(index) { - return !this._hiddenIndices[index]; - } - _updateVisibility(datasetIndex, dataIndex, visible) { - const mode = visible ? "show" : "hide"; - const meta = this.getDatasetMeta(datasetIndex); - const anims = meta.controller._resolveAnimations(void 0, mode); - if (defined(dataIndex)) { - meta.data[dataIndex].hidden = !visible; - this.update(); - } else { - this.setDatasetVisibility(datasetIndex, visible); - anims.update(meta, { - visible - }); - this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0); - } - } - hide(datasetIndex, dataIndex) { - this._updateVisibility(datasetIndex, dataIndex, false); - } - show(datasetIndex, dataIndex) { - this._updateVisibility(datasetIndex, dataIndex, true); - } - _destroyDatasetMeta(datasetIndex) { - const meta = this._metasets[datasetIndex]; - if (meta && meta.controller) { - meta.controller._destroy(); - } - delete this._metasets[datasetIndex]; - } - _stop() { - let i, ilen; - this.stop(); - animator.remove(this); - for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { - this._destroyDatasetMeta(i); - } - } - destroy() { - this.notifyPlugins("beforeDestroy"); - const { canvas, ctx } = this; - this._stop(); - this.config.clearCache(); - if (canvas) { - this.unbindEvents(); - clearCanvas(canvas, ctx); - this.platform.releaseContext(ctx); - this.canvas = null; - this.ctx = null; - } - delete instances[this.id]; - this.notifyPlugins("afterDestroy"); - } - toBase64Image(...args) { - return this.canvas.toDataURL(...args); - } - bindEvents() { - this.bindUserEvents(); - if (this.options.responsive) { - this.bindResponsiveEvents(); - } else { - this.attached = true; - } - } - bindUserEvents() { - const listeners = this._listeners; - const platform = this.platform; - const _add = (type, listener2) => { - platform.addEventListener(this, type, listener2); - listeners[type] = listener2; - }; - const listener = (e, x, y) => { - e.offsetX = x; - e.offsetY = y; - this._eventHandler(e); - }; - each(this.options.events, (type) => _add(type, listener)); - } - bindResponsiveEvents() { - if (!this._responsiveListeners) { - this._responsiveListeners = {}; - } - const listeners = this._responsiveListeners; - const platform = this.platform; - const _add = (type, listener2) => { - platform.addEventListener(this, type, listener2); - listeners[type] = listener2; - }; - const _remove = (type, listener2) => { - if (listeners[type]) { - platform.removeEventListener(this, type, listener2); - delete listeners[type]; - } - }; - const listener = (width, height) => { - if (this.canvas) { - this.resize(width, height); - } - }; - let detached; - const attached = () => { - _remove("attach", attached); - this.attached = true; - this.resize(); - _add("resize", listener); - _add("detach", detached); - }; - detached = () => { - this.attached = false; - _remove("resize", listener); - this._stop(); - this._resize(0, 0); - _add("attach", attached); - }; - if (platform.isAttached(this.canvas)) { - attached(); - } else { - detached(); - } - } - unbindEvents() { - each(this._listeners, (listener, type) => { - this.platform.removeEventListener(this, type, listener); - }); - this._listeners = {}; - each(this._responsiveListeners, (listener, type) => { - this.platform.removeEventListener(this, type, listener); - }); - this._responsiveListeners = void 0; - } - updateHoverStyle(items, mode, enabled) { - const prefix = enabled ? "set" : "remove"; - let meta, item, i, ilen; - if (mode === "dataset") { - meta = this.getDatasetMeta(items[0].datasetIndex); - meta.controller["_" + prefix + "DatasetHoverStyle"](); - } - for (i = 0, ilen = items.length; i < ilen; ++i) { - item = items[i]; - const controller = item && this.getDatasetMeta(item.datasetIndex).controller; - if (controller) { - controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index); - } - } - } - getActiveElements() { - return this._active || []; - } - setActiveElements(activeElements) { - const lastActive = this._active || []; - const active = activeElements.map(({ datasetIndex, index }) => { - const meta = this.getDatasetMeta(datasetIndex); - if (!meta) { - throw new Error("No dataset found at index " + datasetIndex); - } - return { - datasetIndex, - element: meta.data[index], - index - }; - }); - const changed = !_elementsEqual(active, lastActive); - if (changed) { - this._active = active; - this._lastEvent = null; - this._updateHoverStyles(active, lastActive); - } - } - notifyPlugins(hook, args, filter) { - return this._plugins.notify(this, hook, args, filter); - } - isPluginEnabled(pluginId) { - return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1; - } - _updateHoverStyles(active, lastActive, replay) { - const hoverOptions = this.options.hover; - const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index)); - const deactivated = diff(lastActive, active); - const activated = replay ? active : diff(active, lastActive); - if (deactivated.length) { - this.updateHoverStyle(deactivated, hoverOptions.mode, false); - } - if (activated.length && hoverOptions.mode) { - this.updateHoverStyle(activated, hoverOptions.mode, true); - } - } - _eventHandler(e, replay) { - const args = { - event: e, - replay, - cancelable: true, - inChartArea: this.isPointInArea(e) - }; - const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type); - if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) { - return; - } - const changed = this._handleEvent(e, replay, args.inChartArea); - args.cancelable = false; - this.notifyPlugins("afterEvent", args, eventFilter); - if (changed || args.changed) { - this.render(); - } - return this; - } - _handleEvent(e, replay, inChartArea) { - const { _active: lastActive = [], options } = this; - const useFinalPosition = replay; - const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition); - const isClick = _isClickEvent(e); - const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick); - if (inChartArea) { - this._lastEvent = null; - callback(options.onHover, [ - e, - active, - this - ], this); - if (isClick) { - callback(options.onClick, [ - e, - active, - this - ], this); - } - } - const changed = !_elementsEqual(active, lastActive); - if (changed || replay) { - this._active = active; - this._updateHoverStyles(active, lastActive, replay); - } - this._lastEvent = lastEvent; - return changed; - } - _getActiveElements(e, lastActive, inChartArea, useFinalPosition) { - if (e.type === "mouseout") { - return []; - } - if (!inChartArea) { - return lastActive; - } - const hoverOptions = this.options.hover; - return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition); - } -}; -__publicField(Chart, "defaults", defaults); -__publicField(Chart, "instances", instances); -__publicField(Chart, "overrides", overrides); -__publicField(Chart, "registry", registry); -__publicField(Chart, "version", version); -__publicField(Chart, "getChart", getChart); -function invalidatePlugins() { - return each(Chart.instances, (chart) => chart._plugins.invalidate()); -} -function clipArc(ctx, element, endAngle) { - const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element; - let angleMargin = pixelMargin / outerRadius; - ctx.beginPath(); - ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin); - if (innerRadius > pixelMargin) { - angleMargin = pixelMargin / innerRadius; - ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true); - } else { - ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI); - } - ctx.closePath(); - ctx.clip(); -} -function toRadiusCorners(value) { - return _readValueToProps(value, [ - "outerStart", - "outerEnd", - "innerStart", - "innerEnd" - ]); -} -function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) { - const o = toRadiusCorners(arc.options.borderRadius); - const halfThickness = (outerRadius - innerRadius) / 2; - const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); - const computeOuterLimit = (val) => { - const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2; - return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit)); - }; - return { - outerStart: computeOuterLimit(o.outerStart), - outerEnd: computeOuterLimit(o.outerEnd), - innerStart: _limitValue(o.innerStart, 0, innerLimit), - innerEnd: _limitValue(o.innerEnd, 0, innerLimit) - }; -} -function rThetaToXY(r, theta, x, y) { - return { - x: x + r * Math.cos(theta), - y: y + r * Math.sin(theta) - }; -} -function pathArc(ctx, element, offset, spacing, end, circular) { - const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element; - const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); - const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; - let spacingOffset = 0; - const alpha2 = end - start; - if (spacing) { - const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; - const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; - const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; - const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2; - spacingOffset = (alpha2 - adjustedAngle) / 2; - } - const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius; - const angleOffset = (alpha2 - beta) / 2; - const startAngle = start + angleOffset + spacingOffset; - const endAngle = end - angleOffset - spacingOffset; - const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle); - const outerStartAdjustedRadius = outerRadius - outerStart; - const outerEndAdjustedRadius = outerRadius - outerEnd; - const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius; - const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius; - const innerStartAdjustedRadius = innerRadius + innerStart; - const innerEndAdjustedRadius = innerRadius + innerEnd; - const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius; - const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius; - ctx.beginPath(); - if (circular) { - const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2; - ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle); - ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle); - if (outerEnd > 0) { - const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y); - ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI); - } - const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y); - ctx.lineTo(p4.x, p4.y); - if (innerEnd > 0) { - const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y); - ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI); - } - const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2; - ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true); - ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true); - if (innerStart > 0) { - const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y); - ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI); - } - const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y); - ctx.lineTo(p8.x, p8.y); - if (outerStart > 0) { - const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y); - ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle); - } - } else { - ctx.moveTo(x, y); - const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x; - const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y; - ctx.lineTo(outerStartX, outerStartY); - const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x; - const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y; - ctx.lineTo(outerEndX, outerEndY); - } - ctx.closePath(); -} -function drawArc(ctx, element, offset, spacing, circular) { - const { fullCircles, startAngle, circumference } = element; - let endAngle = element.endAngle; - if (fullCircles) { - pathArc(ctx, element, offset, spacing, endAngle, circular); - for (let i = 0; i < fullCircles; ++i) { - ctx.fill(); - } - if (!isNaN(circumference)) { - endAngle = startAngle + (circumference % TAU || TAU); - } - } - pathArc(ctx, element, offset, spacing, endAngle, circular); - ctx.fill(); - return endAngle; -} -function drawBorder(ctx, element, offset, spacing, circular) { - const { fullCircles, startAngle, circumference, options } = element; - const { borderWidth, borderJoinStyle, borderDash, borderDashOffset } = options; - const inner = options.borderAlign === "inner"; - if (!borderWidth) { - return; - } - ctx.setLineDash(borderDash || []); - ctx.lineDashOffset = borderDashOffset; - if (inner) { - ctx.lineWidth = borderWidth * 2; - ctx.lineJoin = borderJoinStyle || "round"; - } else { - ctx.lineWidth = borderWidth; - ctx.lineJoin = borderJoinStyle || "bevel"; - } - let endAngle = element.endAngle; - if (fullCircles) { - pathArc(ctx, element, offset, spacing, endAngle, circular); - for (let i = 0; i < fullCircles; ++i) { - ctx.stroke(); - } - if (!isNaN(circumference)) { - endAngle = startAngle + (circumference % TAU || TAU); - } - } - if (inner) { - clipArc(ctx, element, endAngle); - } - if (!fullCircles) { - pathArc(ctx, element, offset, spacing, endAngle, circular); - ctx.stroke(); - } -} -var ArcElement = class extends Element { - constructor(cfg) { - super(); - __publicField(this, "circumference"); - __publicField(this, "endAngle"); - __publicField(this, "fullCircles"); - __publicField(this, "innerRadius"); - __publicField(this, "outerRadius"); - __publicField(this, "pixelMargin"); - __publicField(this, "startAngle"); - this.options = void 0; - this.circumference = void 0; - this.startAngle = void 0; - this.endAngle = void 0; - this.innerRadius = void 0; - this.outerRadius = void 0; - this.pixelMargin = 0; - this.fullCircles = 0; - if (cfg) { - Object.assign(this, cfg); - } - } - inRange(chartX, chartY, useFinalPosition) { - const point = this.getProps([ - "x", - "y" - ], useFinalPosition); - const { angle, distance } = getAngleFromPoint(point, { - x: chartX, - y: chartY - }); - const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([ - "startAngle", - "endAngle", - "innerRadius", - "outerRadius", - "circumference" - ], useFinalPosition); - const rAdjust = (this.options.spacing + this.options.borderWidth) / 2; - const _circumference = valueOrDefault(circumference, endAngle - startAngle); - const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle); - const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); - return betweenAngles && withinRadius; - } - getCenterPoint(useFinalPosition) { - const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([ - "x", - "y", - "startAngle", - "endAngle", - "innerRadius", - "outerRadius" - ], useFinalPosition); - const { offset, spacing } = this.options; - const halfAngle = (startAngle + endAngle) / 2; - const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; - return { - x: x + Math.cos(halfAngle) * halfRadius, - y: y + Math.sin(halfAngle) * halfRadius - }; - } - tooltipPosition(useFinalPosition) { - return this.getCenterPoint(useFinalPosition); - } - draw(ctx) { - const { options, circumference } = this; - const offset = (options.offset || 0) / 4; - const spacing = (options.spacing || 0) / 2; - const circular = options.circular; - this.pixelMargin = options.borderAlign === "inner" ? 0.33 : 0; - this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; - if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) { - return; - } - ctx.save(); - const halfAngle = (this.startAngle + this.endAngle) / 2; - ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset); - const fix = 1 - Math.sin(Math.min(PI, circumference || 0)); - const radiusOffset = offset * fix; - ctx.fillStyle = options.backgroundColor; - ctx.strokeStyle = options.borderColor; - drawArc(ctx, this, radiusOffset, spacing, circular); - drawBorder(ctx, this, radiusOffset, spacing, circular); - ctx.restore(); - } -}; -__publicField(ArcElement, "id", "arc"); -__publicField(ArcElement, "defaults", { - borderAlign: "center", - borderColor: "#fff", - borderDash: [], - borderDashOffset: 0, - borderJoinStyle: void 0, - borderRadius: 0, - borderWidth: 2, - offset: 0, - spacing: 0, - angle: void 0, - circular: true -}); -__publicField(ArcElement, "defaultRoutes", { - backgroundColor: "backgroundColor" -}); -__publicField(ArcElement, "descriptors", { - _scriptable: true, - _indexable: (name) => name !== "borderDash" -}); -function getBarBounds(bar, useFinalPosition) { - const { x, y, base, width, height } = bar.getProps([ - "x", - "y", - "base", - "width", - "height" - ], useFinalPosition); - let left, right, top, bottom, half; - if (bar.horizontal) { - half = height / 2; - left = Math.min(x, base); - right = Math.max(x, base); - top = y - half; - bottom = y + half; - } else { - half = width / 2; - left = x - half; - right = x + half; - top = Math.min(y, base); - bottom = Math.max(y, base); - } - return { - left, - top, - right, - bottom - }; -} -function skipOrLimit(skip2, value, min, max) { - return skip2 ? 0 : _limitValue(value, min, max); -} -function parseBorderWidth(bar, maxW, maxH) { - const value = bar.options.borderWidth; - const skip2 = bar.borderSkipped; - const o = toTRBL(value); - return { - t: skipOrLimit(skip2.top, o.top, 0, maxH), - r: skipOrLimit(skip2.right, o.right, 0, maxW), - b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH), - l: skipOrLimit(skip2.left, o.left, 0, maxW) - }; -} -function parseBorderRadius(bar, maxW, maxH) { - const { enableBorderRadius } = bar.getProps([ - "enableBorderRadius" - ]); - const value = bar.options.borderRadius; - const o = toTRBLCorners(value); - const maxR = Math.min(maxW, maxH); - const skip2 = bar.borderSkipped; - const enableBorder = enableBorderRadius || isObject(value); - return { - topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR), - topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR), - bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR), - bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR) - }; -} -function boundingRects(bar) { - const bounds = getBarBounds(bar); - const width = bounds.right - bounds.left; - const height = bounds.bottom - bounds.top; - const border = parseBorderWidth(bar, width / 2, height / 2); - const radius = parseBorderRadius(bar, width / 2, height / 2); - return { - outer: { - x: bounds.left, - y: bounds.top, - w: width, - h: height, - radius - }, - inner: { - x: bounds.left + border.l, - y: bounds.top + border.t, - w: width - border.l - border.r, - h: height - border.t - border.b, - radius: { - topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)), - topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)), - bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)), - bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)) - } - } - }; -} -function inRange(bar, x, y, useFinalPosition) { - const skipX = x === null; - const skipY = y === null; - const skipBoth = skipX && skipY; - const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition); - return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom)); -} -function hasRadius(radius) { - return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight; -} -function addNormalRectPath(ctx, rect) { - ctx.rect(rect.x, rect.y, rect.w, rect.h); -} -function inflateRect(rect, amount, refRect = {}) { - const x = rect.x !== refRect.x ? -amount : 0; - const y = rect.y !== refRect.y ? -amount : 0; - const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x; - const h4 = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y; - return { - x: rect.x + x, - y: rect.y + y, - w: rect.w + w, - h: rect.h + h4, - radius: rect.radius - }; -} -var BarElement = class extends Element { - constructor(cfg) { - super(); - this.options = void 0; - this.horizontal = void 0; - this.base = void 0; - this.width = void 0; - this.height = void 0; - this.inflateAmount = void 0; - if (cfg) { - Object.assign(this, cfg); - } - } - draw(ctx) { - const { inflateAmount, options: { borderColor, backgroundColor } } = this; - const { inner, outer } = boundingRects(this); - const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath; - ctx.save(); - if (outer.w !== inner.w || outer.h !== inner.h) { - ctx.beginPath(); - addRectPath(ctx, inflateRect(outer, inflateAmount, inner)); - ctx.clip(); - addRectPath(ctx, inflateRect(inner, -inflateAmount, outer)); - ctx.fillStyle = borderColor; - ctx.fill("evenodd"); - } - ctx.beginPath(); - addRectPath(ctx, inflateRect(inner, inflateAmount)); - ctx.fillStyle = backgroundColor; - ctx.fill(); - ctx.restore(); - } - inRange(mouseX, mouseY, useFinalPosition) { - return inRange(this, mouseX, mouseY, useFinalPosition); - } - inXRange(mouseX, useFinalPosition) { - return inRange(this, mouseX, null, useFinalPosition); - } - inYRange(mouseY, useFinalPosition) { - return inRange(this, null, mouseY, useFinalPosition); - } - getCenterPoint(useFinalPosition) { - const { x, y, base, horizontal } = this.getProps([ - "x", - "y", - "base", - "horizontal" - ], useFinalPosition); - return { - x: horizontal ? (x + base) / 2 : x, - y: horizontal ? y : (y + base) / 2 - }; - } - getRange(axis) { - return axis === "x" ? this.width / 2 : this.height / 2; - } -}; -__publicField(BarElement, "id", "bar"); -__publicField(BarElement, "defaults", { - borderSkipped: "start", - borderWidth: 0, - borderRadius: 0, - inflateAmount: "auto", - pointStyle: void 0 -}); -__publicField(BarElement, "defaultRoutes", { - backgroundColor: "backgroundColor", - borderColor: "borderColor" -}); -var getBoxSize = (labelOpts, fontSize) => { - let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts; - if (labelOpts.usePointStyle) { - boxHeight = Math.min(boxHeight, fontSize); - boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize); - } - return { - boxWidth, - boxHeight, - itemHeight: Math.max(fontSize, boxHeight) - }; -}; -var itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index; -var Legend = class extends Element { - constructor(config) { - super(); - this._added = false; - this.legendHitBoxes = []; - this._hoveredItem = null; - this.doughnutMode = false; - this.chart = config.chart; - this.options = config.options; - this.ctx = config.ctx; - this.legendItems = void 0; - this.columnSizes = void 0; - this.lineWidths = void 0; - this.maxHeight = void 0; - this.maxWidth = void 0; - this.top = void 0; - this.bottom = void 0; - this.left = void 0; - this.right = void 0; - this.height = void 0; - this.width = void 0; - this._margins = void 0; - this.position = void 0; - this.weight = void 0; - this.fullSize = void 0; - } - update(maxWidth, maxHeight, margins) { - this.maxWidth = maxWidth; - this.maxHeight = maxHeight; - this._margins = margins; - this.setDimensions(); - this.buildLabels(); - this.fit(); - } - setDimensions() { - if (this.isHorizontal()) { - this.width = this.maxWidth; - this.left = this._margins.left; - this.right = this.width; - } else { - this.height = this.maxHeight; - this.top = this._margins.top; - this.bottom = this.height; - } - } - buildLabels() { - const labelOpts = this.options.labels || {}; - let legendItems = callback(labelOpts.generateLabels, [ - this.chart - ], this) || []; - if (labelOpts.filter) { - legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data)); - } - if (labelOpts.sort) { - legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data)); - } - if (this.options.reverse) { - legendItems.reverse(); - } - this.legendItems = legendItems; - } - fit() { - const { options, ctx } = this; - if (!options.display) { - this.width = this.height = 0; - return; - } - const labelOpts = options.labels; - const labelFont = toFont(labelOpts.font); - const fontSize = labelFont.size; - const titleHeight = this._computeTitleHeight(); - const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize); - let width, height; - ctx.font = labelFont.string; - if (this.isHorizontal()) { - width = this.maxWidth; - height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10; - } else { - height = this.maxHeight; - width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10; - } - this.width = Math.min(width, options.maxWidth || this.maxWidth); - this.height = Math.min(height, options.maxHeight || this.maxHeight); - } - _fitRows(titleHeight, fontSize, boxWidth, itemHeight) { - const { ctx, maxWidth, options: { labels: { padding } } } = this; - const hitboxes = this.legendHitBoxes = []; - const lineWidths = this.lineWidths = [ - 0 - ]; - const lineHeight = itemHeight + padding; - let totalHeight = titleHeight; - ctx.textAlign = "left"; - ctx.textBaseline = "middle"; - let row = -1; - let top = -lineHeight; - this.legendItems.forEach((legendItem, i) => { - const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; - if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) { - totalHeight += lineHeight; - lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0; - top += lineHeight; - row++; - } - hitboxes[i] = { - left: 0, - top, - row, - width: itemWidth, - height: itemHeight - }; - lineWidths[lineWidths.length - 1] += itemWidth + padding; - }); - return totalHeight; - } - _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) { - const { ctx, maxHeight, options: { labels: { padding } } } = this; - const hitboxes = this.legendHitBoxes = []; - const columnSizes = this.columnSizes = []; - const heightLimit = maxHeight - titleHeight; - let totalWidth = padding; - let currentColWidth = 0; - let currentColHeight = 0; - let left = 0; - let col = 0; - this.legendItems.forEach((legendItem, i) => { - const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight); - if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { - totalWidth += currentColWidth + padding; - columnSizes.push({ - width: currentColWidth, - height: currentColHeight - }); - left += currentColWidth + padding; - col++; - currentColWidth = currentColHeight = 0; - } - hitboxes[i] = { - left, - top: currentColHeight, - col, - width: itemWidth, - height: itemHeight - }; - currentColWidth = Math.max(currentColWidth, itemWidth); - currentColHeight += itemHeight + padding; - }); - totalWidth += currentColWidth; - columnSizes.push({ - width: currentColWidth, - height: currentColHeight - }); - return totalWidth; - } - adjustHitBoxes() { - if (!this.options.display) { - return; - } - const titleHeight = this._computeTitleHeight(); - const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this; - const rtlHelper = getRtlAdapter(rtl, this.left, this.width); - if (this.isHorizontal()) { - let row = 0; - let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); - for (const hitbox of hitboxes) { - if (row !== hitbox.row) { - row = hitbox.row; - left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); - } - hitbox.top += this.top + titleHeight + padding; - hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width); - left += hitbox.width + padding; - } - } else { - let col = 0; - let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); - for (const hitbox of hitboxes) { - if (hitbox.col !== col) { - col = hitbox.col; - top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); - } - hitbox.top = top; - hitbox.left += this.left + padding; - hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width); - top += hitbox.height + padding; - } - } - } - isHorizontal() { - return this.options.position === "top" || this.options.position === "bottom"; - } - draw() { - if (this.options.display) { - const ctx = this.ctx; - clipArea(ctx, this); - this._draw(); - unclipArea(ctx); - } - } - _draw() { - const { options: opts, columnSizes, lineWidths, ctx } = this; - const { align, labels: labelOpts } = opts; - const defaultColor = defaults.color; - const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); - const labelFont = toFont(labelOpts.font); - const { padding } = labelOpts; - const fontSize = labelFont.size; - const halfFontSize = fontSize / 2; - let cursor; - this.drawTitle(); - ctx.textAlign = rtlHelper.textAlign("left"); - ctx.textBaseline = "middle"; - ctx.lineWidth = 0.5; - ctx.font = labelFont.string; - const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize); - const drawLegendBox = function(x, y, legendItem) { - if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) { - return; - } - ctx.save(); - const lineWidth = valueOrDefault(legendItem.lineWidth, 1); - ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor); - ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt"); - ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0); - ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter"); - ctx.lineWidth = lineWidth; - ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor); - ctx.setLineDash(valueOrDefault(legendItem.lineDash, [])); - if (labelOpts.usePointStyle) { - const drawOptions = { - radius: boxHeight * Math.SQRT2 / 2, - pointStyle: legendItem.pointStyle, - rotation: legendItem.rotation, - borderWidth: lineWidth - }; - const centerX = rtlHelper.xPlus(x, boxWidth / 2); - const centerY = y + halfFontSize; - drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth); - } else { - const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0); - const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth); - const borderRadius = toTRBLCorners(legendItem.borderRadius); - ctx.beginPath(); - if (Object.values(borderRadius).some((v) => v !== 0)) { - addRoundedRectPath(ctx, { - x: xBoxLeft, - y: yBoxTop, - w: boxWidth, - h: boxHeight, - radius: borderRadius - }); - } else { - ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight); - } - ctx.fill(); - if (lineWidth !== 0) { - ctx.stroke(); - } - } - ctx.restore(); - }; - const fillText = function(x, y, legendItem) { - renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, { - strikethrough: legendItem.hidden, - textAlign: rtlHelper.textAlign(legendItem.textAlign) - }); - }; - const isHorizontal = this.isHorizontal(); - const titleHeight = this._computeTitleHeight(); - if (isHorizontal) { - cursor = { - x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]), - y: this.top + padding + titleHeight, - line: 0 - }; - } else { - cursor = { - x: this.left + padding, - y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height), - line: 0 - }; - } - overrideTextDirection(this.ctx, opts.textDirection); - const lineHeight = itemHeight + padding; - this.legendItems.forEach((legendItem, i) => { - ctx.strokeStyle = legendItem.fontColor; - ctx.fillStyle = legendItem.fontColor; - const textWidth = ctx.measureText(legendItem.text).width; - const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); - const width = boxWidth + halfFontSize + textWidth; - let x = cursor.x; - let y = cursor.y; - rtlHelper.setWidth(this.width); - if (isHorizontal) { - if (i > 0 && x + width + padding > this.right) { - y = cursor.y += lineHeight; - cursor.line++; - x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]); - } - } else if (i > 0 && y + lineHeight > this.bottom) { - x = cursor.x = x + columnSizes[cursor.line].width + padding; - cursor.line++; - y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height); - } - const realX = rtlHelper.x(x); - drawLegendBox(realX, y, legendItem); - x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl); - fillText(rtlHelper.x(x), y, legendItem); - if (isHorizontal) { - cursor.x += width + padding; - } else if (typeof legendItem.text !== "string") { - const fontLineHeight = labelFont.lineHeight; - cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight); - } else { - cursor.y += lineHeight; - } - }); - restoreTextDirection(this.ctx, opts.textDirection); - } - drawTitle() { - const opts = this.options; - const titleOpts = opts.title; - const titleFont = toFont(titleOpts.font); - const titlePadding = toPadding(titleOpts.padding); - if (!titleOpts.display) { - return; - } - const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); - const ctx = this.ctx; - const position = titleOpts.position; - const halfFontSize = titleFont.size / 2; - const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize; - let y; - let left = this.left; - let maxWidth = this.width; - if (this.isHorizontal()) { - maxWidth = Math.max(...this.lineWidths); - y = this.top + topPaddingPlusHalfFontSize; - left = _alignStartEnd(opts.align, left, this.right - maxWidth); - } else { - const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0); - y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight()); - } - const x = _alignStartEnd(position, left, left + maxWidth); - ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position)); - ctx.textBaseline = "middle"; - ctx.strokeStyle = titleOpts.color; - ctx.fillStyle = titleOpts.color; - ctx.font = titleFont.string; - renderText(ctx, titleOpts.text, x, y, titleFont); - } - _computeTitleHeight() { - const titleOpts = this.options.title; - const titleFont = toFont(titleOpts.font); - const titlePadding = toPadding(titleOpts.padding); - return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0; - } - _getLegendItemAt(x, y) { - let i, hitBox, lh; - if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) { - lh = this.legendHitBoxes; - for (i = 0; i < lh.length; ++i) { - hitBox = lh[i]; - if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) { - return this.legendItems[i]; - } - } - } - return null; - } - handleEvent(e) { - const opts = this.options; - if (!isListened(e.type, opts)) { - return; - } - const hoveredItem = this._getLegendItemAt(e.x, e.y); - if (e.type === "mousemove" || e.type === "mouseout") { - const previous = this._hoveredItem; - const sameItem = itemsEqual(previous, hoveredItem); - if (previous && !sameItem) { - callback(opts.onLeave, [ - e, - previous, - this - ], this); - } - this._hoveredItem = hoveredItem; - if (hoveredItem && !sameItem) { - callback(opts.onHover, [ - e, - hoveredItem, - this - ], this); - } - } else if (hoveredItem) { - callback(opts.onClick, [ - e, - hoveredItem, - this - ], this); - } - } -}; -function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) { - const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx); - const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight); - return { - itemWidth, - itemHeight - }; -} -function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) { - let legendItemText = legendItem.text; - if (legendItemText && typeof legendItemText !== "string") { - legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b); - } - return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width; -} -function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) { - let itemHeight = _itemHeight; - if (typeof legendItem.text !== "string") { - itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight); - } - return itemHeight; -} -function calculateLegendItemHeight(legendItem, fontLineHeight) { - const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0; - return fontLineHeight * labelHeight; -} -function isListened(type, opts) { - if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) { - return true; - } - if (opts.onClick && (type === "click" || type === "mouseup")) { - return true; - } - return false; -} -var plugin_legend = { - id: "legend", - _element: Legend, - start(chart, _args, options) { - const legend = chart.legend = new Legend({ - ctx: chart.ctx, - options, - chart - }); - layouts.configure(chart, legend, options); - layouts.addBox(chart, legend); - }, - stop(chart) { - layouts.removeBox(chart, chart.legend); - delete chart.legend; - }, - beforeUpdate(chart, _args, options) { - const legend = chart.legend; - layouts.configure(chart, legend, options); - legend.options = options; - }, - afterUpdate(chart) { - const legend = chart.legend; - legend.buildLabels(); - legend.adjustHitBoxes(); - }, - afterEvent(chart, args) { - if (!args.replay) { - chart.legend.handleEvent(args.event); - } - }, - defaults: { - display: true, - position: "top", - align: "center", - fullSize: true, - reverse: false, - weight: 1e3, - onClick(e, legendItem, legend) { - const index = legendItem.datasetIndex; - const ci = legend.chart; - if (ci.isDatasetVisible(index)) { - ci.hide(index); - legendItem.hidden = true; - } else { - ci.show(index); - legendItem.hidden = false; - } - }, - onHover: null, - onLeave: null, - labels: { - color: (ctx) => ctx.chart.options.color, - boxWidth: 40, - padding: 10, - generateLabels(chart) { - const datasets = chart.data.datasets; - const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart.legend.options; - return chart._getSortedDatasetMetas().map((meta) => { - const style = meta.controller.getStyle(usePointStyle ? 0 : void 0); - const borderWidth = toPadding(style.borderWidth); - return { - text: datasets[meta.index].label, - fillStyle: style.backgroundColor, - fontColor: color2, - hidden: !meta.visible, - lineCap: style.borderCapStyle, - lineDash: style.borderDash, - lineDashOffset: style.borderDashOffset, - lineJoin: style.borderJoinStyle, - lineWidth: (borderWidth.width + borderWidth.height) / 4, - strokeStyle: style.borderColor, - pointStyle: pointStyle || style.pointStyle, - rotation: style.rotation, - textAlign: textAlign || style.textAlign, - borderRadius: useBorderRadius && (borderRadius || style.borderRadius), - datasetIndex: meta.index - }; - }, this); - } - }, - title: { - color: (ctx) => ctx.chart.options.color, - display: false, - position: "center", - text: "" - } - }, - descriptors: { - _scriptable: (name) => !name.startsWith("on"), - labels: { - _scriptable: (name) => ![ - "generateLabels", - "filter", - "sort" - ].includes(name) - } - } -}; -var Title = class extends Element { - constructor(config) { - super(); - this.chart = config.chart; - this.options = config.options; - this.ctx = config.ctx; - this._padding = void 0; - this.top = void 0; - this.bottom = void 0; - this.left = void 0; - this.right = void 0; - this.width = void 0; - this.height = void 0; - this.position = void 0; - this.weight = void 0; - this.fullSize = void 0; - } - update(maxWidth, maxHeight) { - const opts = this.options; - this.left = 0; - this.top = 0; - if (!opts.display) { - this.width = this.height = this.right = this.bottom = 0; - return; - } - this.width = this.right = maxWidth; - this.height = this.bottom = maxHeight; - const lineCount = isArray(opts.text) ? opts.text.length : 1; - this._padding = toPadding(opts.padding); - const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height; - if (this.isHorizontal()) { - this.height = textSize; - } else { - this.width = textSize; - } - } - isHorizontal() { - const pos = this.options.position; - return pos === "top" || pos === "bottom"; - } - _drawArgs(offset) { - const { top, left, bottom, right, options } = this; - const align = options.align; - let rotation = 0; - let maxWidth, titleX, titleY; - if (this.isHorizontal()) { - titleX = _alignStartEnd(align, left, right); - titleY = top + offset; - maxWidth = right - left; - } else { - if (options.position === "left") { - titleX = left + offset; - titleY = _alignStartEnd(align, bottom, top); - rotation = PI * -0.5; - } else { - titleX = right - offset; - titleY = _alignStartEnd(align, top, bottom); - rotation = PI * 0.5; - } - maxWidth = bottom - top; - } - return { - titleX, - titleY, - maxWidth, - rotation - }; - } - draw() { - const ctx = this.ctx; - const opts = this.options; - if (!opts.display) { - return; - } - const fontOpts = toFont(opts.font); - const lineHeight = fontOpts.lineHeight; - const offset = lineHeight / 2 + this._padding.top; - const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset); - renderText(ctx, opts.text, 0, 0, fontOpts, { - color: opts.color, - maxWidth, - rotation, - textAlign: _toLeftRightCenter(opts.align), - textBaseline: "middle", - translation: [ - titleX, - titleY - ] - }); - } -}; -function createTitle(chart, titleOpts) { - const title = new Title({ - ctx: chart.ctx, - options: titleOpts, - chart - }); - layouts.configure(chart, title, titleOpts); - layouts.addBox(chart, title); - chart.titleBlock = title; -} -var plugin_title = { - id: "title", - _element: Title, - start(chart, _args, options) { - createTitle(chart, options); - }, - stop(chart) { - const titleBlock = chart.titleBlock; - layouts.removeBox(chart, titleBlock); - delete chart.titleBlock; - }, - beforeUpdate(chart, _args, options) { - const title = chart.titleBlock; - layouts.configure(chart, title, options); - title.options = options; - }, - defaults: { - align: "center", - display: false, - font: { - weight: "bold" - }, - fullSize: true, - padding: 10, - position: "top", - text: "", - weight: 2e3 - }, - defaultRoutes: { - color: "color" - }, - descriptors: { - _scriptable: true, - _indexable: false - } -}; -var map2 = /* @__PURE__ */ new WeakMap(); -var plugin_subtitle = { - id: "subtitle", - start(chart, _args, options) { - const title = new Title({ - ctx: chart.ctx, - options, - chart - }); - layouts.configure(chart, title, options); - layouts.addBox(chart, title); - map2.set(chart, title); - }, - stop(chart) { - layouts.removeBox(chart, map2.get(chart)); - map2.delete(chart); - }, - beforeUpdate(chart, _args, options) { - const title = map2.get(chart); - layouts.configure(chart, title, options); - title.options = options; - }, - defaults: { - align: "center", - display: false, - font: { - weight: "normal" - }, - fullSize: true, - padding: 0, - position: "top", - text: "", - weight: 1500 - }, - defaultRoutes: { - color: "color" - }, - descriptors: { - _scriptable: true, - _indexable: false - } -}; -var positioners = { - average(items) { - if (!items.length) { - return false; - } - let i, len; - let x = 0; - let y = 0; - let count = 0; - for (i = 0, len = items.length; i < len; ++i) { - const el = items[i].element; - if (el && el.hasValue()) { - const pos = el.tooltipPosition(); - x += pos.x; - y += pos.y; - ++count; - } - } - return { - x: x / count, - y: y / count - }; - }, - nearest(items, eventPosition) { - if (!items.length) { - return false; - } - let x = eventPosition.x; - let y = eventPosition.y; - let minDistance = Number.POSITIVE_INFINITY; - let i, len, nearestElement; - for (i = 0, len = items.length; i < len; ++i) { - const el = items[i].element; - if (el && el.hasValue()) { - const center = el.getCenterPoint(); - const d = distanceBetweenPoints(eventPosition, center); - if (d < minDistance) { - minDistance = d; - nearestElement = el; - } - } - } - if (nearestElement) { - const tp = nearestElement.tooltipPosition(); - x = tp.x; - y = tp.y; - } - return { - x, - y - }; - } -}; -function pushOrConcat(base, toPush) { - if (toPush) { - if (isArray(toPush)) { - Array.prototype.push.apply(base, toPush); - } else { - base.push(toPush); - } - } - return base; -} -function splitNewlines(str) { - if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) { - return str.split("\n"); - } - return str; -} -function createTooltipItem(chart, item) { - const { element, datasetIndex, index } = item; - const controller = chart.getDatasetMeta(datasetIndex).controller; - const { label, value } = controller.getLabelAndValue(index); - return { - chart, - label, - parsed: controller.getParsed(index), - raw: chart.data.datasets[datasetIndex].data[index], - formattedValue: value, - dataset: controller.getDataset(), - dataIndex: index, - datasetIndex, - element - }; -} -function getTooltipSize(tooltip, options) { - const ctx = tooltip.chart.ctx; - const { body, footer, title } = tooltip; - const { boxWidth, boxHeight } = options; - const bodyFont = toFont(options.bodyFont); - const titleFont = toFont(options.titleFont); - const footerFont = toFont(options.footerFont); - const titleLineCount = title.length; - const footerLineCount = footer.length; - const bodyLineItemCount = body.length; - const padding = toPadding(options.padding); - let height = padding.height; - let width = 0; - let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0); - combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length; - if (titleLineCount) { - height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom; - } - if (combinedBodyLength) { - const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight; - height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing; - } - if (footerLineCount) { - height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing; - } - let widthPadding = 0; - const maxLineWidth = function(line) { - width = Math.max(width, ctx.measureText(line).width + widthPadding); - }; - ctx.save(); - ctx.font = titleFont.string; - each(tooltip.title, maxLineWidth); - ctx.font = bodyFont.string; - each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth); - widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0; - each(body, (bodyItem) => { - each(bodyItem.before, maxLineWidth); - each(bodyItem.lines, maxLineWidth); - each(bodyItem.after, maxLineWidth); - }); - widthPadding = 0; - ctx.font = footerFont.string; - each(tooltip.footer, maxLineWidth); - ctx.restore(); - width += padding.width; - return { - width, - height - }; -} -function determineYAlign(chart, size) { - const { y, height } = size; - if (y < height / 2) { - return "top"; - } else if (y > chart.height - height / 2) { - return "bottom"; - } - return "center"; -} -function doesNotFitWithAlign(xAlign, chart, options, size) { - const { x, width } = size; - const caret = options.caretSize + options.caretPadding; - if (xAlign === "left" && x + width + caret > chart.width) { - return true; - } - if (xAlign === "right" && x - width - caret < 0) { - return true; - } -} -function determineXAlign(chart, options, size, yAlign) { - const { x, width } = size; - const { width: chartWidth, chartArea: { left, right } } = chart; - let xAlign = "center"; - if (yAlign === "center") { - xAlign = x <= (left + right) / 2 ? "left" : "right"; - } else if (x <= width / 2) { - xAlign = "left"; - } else if (x >= chartWidth - width / 2) { - xAlign = "right"; - } - if (doesNotFitWithAlign(xAlign, chart, options, size)) { - xAlign = "center"; - } - return xAlign; -} -function determineAlignment(chart, options, size) { - const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size); - return { - xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign), - yAlign - }; -} -function alignX(size, xAlign) { - let { x, width } = size; - if (xAlign === "right") { - x -= width; - } else if (xAlign === "center") { - x -= width / 2; - } - return x; -} -function alignY(size, yAlign, paddingAndSize) { - let { y, height } = size; - if (yAlign === "top") { - y += paddingAndSize; - } else if (yAlign === "bottom") { - y -= height + paddingAndSize; - } else { - y -= height / 2; - } - return y; -} -function getBackgroundPoint(options, size, alignment, chart) { - const { caretSize, caretPadding, cornerRadius } = options; - const { xAlign, yAlign } = alignment; - const paddingAndSize = caretSize + caretPadding; - const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius); - let x = alignX(size, xAlign); - const y = alignY(size, yAlign, paddingAndSize); - if (yAlign === "center") { - if (xAlign === "left") { - x += paddingAndSize; - } else if (xAlign === "right") { - x -= paddingAndSize; - } - } else if (xAlign === "left") { - x -= Math.max(topLeft, bottomLeft) + caretSize; - } else if (xAlign === "right") { - x += Math.max(topRight, bottomRight) + caretSize; - } - return { - x: _limitValue(x, 0, chart.width - size.width), - y: _limitValue(y, 0, chart.height - size.height) - }; -} -function getAlignedX(tooltip, align, options) { - const padding = toPadding(options.padding); - return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left; -} -function getBeforeAfterBodyLines(callback2) { - return pushOrConcat([], splitNewlines(callback2)); -} -function createTooltipContext(parent, tooltip, tooltipItems) { - return createContext(parent, { - tooltip, - tooltipItems, - type: "tooltip" - }); -} -function overrideCallbacks(callbacks, context) { - const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks; - return override ? callbacks.override(override) : callbacks; -} -var defaultCallbacks = { - beforeTitle: noop, - title(tooltipItems) { - if (tooltipItems.length > 0) { - const item = tooltipItems[0]; - const labels = item.chart.data.labels; - const labelCount = labels ? labels.length : 0; - if (this && this.options && this.options.mode === "dataset") { - return item.dataset.label || ""; - } else if (item.label) { - return item.label; - } else if (labelCount > 0 && item.dataIndex < labelCount) { - return labels[item.dataIndex]; - } - } - return ""; - }, - afterTitle: noop, - beforeBody: noop, - beforeLabel: noop, - label(tooltipItem) { - if (this && this.options && this.options.mode === "dataset") { - return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue; - } - let label = tooltipItem.dataset.label || ""; - if (label) { - label += ": "; - } - const value = tooltipItem.formattedValue; - if (!isNullOrUndef(value)) { - label += value; - } - return label; - }, - labelColor(tooltipItem) { - const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); - const options = meta.controller.getStyle(tooltipItem.dataIndex); - return { - borderColor: options.borderColor, - backgroundColor: options.backgroundColor, - borderWidth: options.borderWidth, - borderDash: options.borderDash, - borderDashOffset: options.borderDashOffset, - borderRadius: 0 - }; - }, - labelTextColor() { - return this.options.bodyColor; - }, - labelPointStyle(tooltipItem) { - const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); - const options = meta.controller.getStyle(tooltipItem.dataIndex); - return { - pointStyle: options.pointStyle, - rotation: options.rotation - }; - }, - afterLabel: noop, - afterBody: noop, - beforeFooter: noop, - footer: noop, - afterFooter: noop -}; -function invokeCallbackWithFallback(callbacks, name, ctx, arg) { - const result = callbacks[name].call(ctx, arg); - if (typeof result === "undefined") { - return defaultCallbacks[name].call(ctx, arg); - } - return result; -} -var Tooltip = class extends Element { - constructor(config) { - super(); - this.opacity = 0; - this._active = []; - this._eventPosition = void 0; - this._size = void 0; - this._cachedAnimations = void 0; - this._tooltipItems = []; - this.$animations = void 0; - this.$context = void 0; - this.chart = config.chart; - this.options = config.options; - this.dataPoints = void 0; - this.title = void 0; - this.beforeBody = void 0; - this.body = void 0; - this.afterBody = void 0; - this.footer = void 0; - this.xAlign = void 0; - this.yAlign = void 0; - this.x = void 0; - this.y = void 0; - this.height = void 0; - this.width = void 0; - this.caretX = void 0; - this.caretY = void 0; - this.labelColors = void 0; - this.labelPointStyles = void 0; - this.labelTextColors = void 0; - } - initialize(options) { - this.options = options; - this._cachedAnimations = void 0; - this.$context = void 0; - } - _resolveAnimations() { - const cached = this._cachedAnimations; - if (cached) { - return cached; - } - const chart = this.chart; - const options = this.options.setContext(this.getContext()); - const opts = options.enabled && chart.options.animation && options.animations; - const animations = new Animations(this.chart, opts); - if (opts._cacheable) { - this._cachedAnimations = Object.freeze(animations); - } - return animations; - } - getContext() { - return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems)); - } - getTitle(context, options) { - const { callbacks } = options; - const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context); - const title = invokeCallbackWithFallback(callbacks, "title", this, context); - const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context); - let lines = []; - lines = pushOrConcat(lines, splitNewlines(beforeTitle)); - lines = pushOrConcat(lines, splitNewlines(title)); - lines = pushOrConcat(lines, splitNewlines(afterTitle)); - return lines; - } - getBeforeBody(tooltipItems, options) { - return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "beforeBody", this, tooltipItems)); - } - getBody(tooltipItems, options) { - const { callbacks } = options; - const bodyItems = []; - each(tooltipItems, (context) => { - const bodyItem = { - before: [], - lines: [], - after: [] - }; - const scoped = overrideCallbacks(callbacks, context); - pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context))); - pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context)); - pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context))); - bodyItems.push(bodyItem); - }); - return bodyItems; - } - getAfterBody(tooltipItems, options) { - return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "afterBody", this, tooltipItems)); - } - getFooter(tooltipItems, options) { - const { callbacks } = options; - const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems); - const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems); - const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems); - let lines = []; - lines = pushOrConcat(lines, splitNewlines(beforeFooter)); - lines = pushOrConcat(lines, splitNewlines(footer)); - lines = pushOrConcat(lines, splitNewlines(afterFooter)); - return lines; - } - _createItems(options) { - const active = this._active; - const data = this.chart.data; - const labelColors = []; - const labelPointStyles = []; - const labelTextColors = []; - let tooltipItems = []; - let i, len; - for (i = 0, len = active.length; i < len; ++i) { - tooltipItems.push(createTooltipItem(this.chart, active[i])); - } - if (options.filter) { - tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data)); - } - if (options.itemSort) { - tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data)); - } - each(tooltipItems, (context) => { - const scoped = overrideCallbacks(options.callbacks, context); - labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context)); - labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context)); - labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context)); - }); - this.labelColors = labelColors; - this.labelPointStyles = labelPointStyles; - this.labelTextColors = labelTextColors; - this.dataPoints = tooltipItems; - return tooltipItems; - } - update(changed, replay) { - const options = this.options.setContext(this.getContext()); - const active = this._active; - let properties; - let tooltipItems = []; - if (!active.length) { - if (this.opacity !== 0) { - properties = { - opacity: 0 - }; - } - } else { - const position = positioners[options.position].call(this, active, this._eventPosition); - tooltipItems = this._createItems(options); - this.title = this.getTitle(tooltipItems, options); - this.beforeBody = this.getBeforeBody(tooltipItems, options); - this.body = this.getBody(tooltipItems, options); - this.afterBody = this.getAfterBody(tooltipItems, options); - this.footer = this.getFooter(tooltipItems, options); - const size = this._size = getTooltipSize(this, options); - const positionAndSize = Object.assign({}, position, size); - const alignment = determineAlignment(this.chart, options, positionAndSize); - const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart); - this.xAlign = alignment.xAlign; - this.yAlign = alignment.yAlign; - properties = { - opacity: 1, - x: backgroundPoint.x, - y: backgroundPoint.y, - width: size.width, - height: size.height, - caretX: position.x, - caretY: position.y - }; - } - this._tooltipItems = tooltipItems; - this.$context = void 0; - if (properties) { - this._resolveAnimations().update(this, properties); - } - if (changed && options.external) { - options.external.call(this, { - chart: this.chart, - tooltip: this, - replay - }); - } - } - drawCaret(tooltipPoint, ctx, size, options) { - const caretPosition = this.getCaretPosition(tooltipPoint, size, options); - ctx.lineTo(caretPosition.x1, caretPosition.y1); - ctx.lineTo(caretPosition.x2, caretPosition.y2); - ctx.lineTo(caretPosition.x3, caretPosition.y3); - } - getCaretPosition(tooltipPoint, size, options) { - const { xAlign, yAlign } = this; - const { caretSize, cornerRadius } = options; - const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius); - const { x: ptX, y: ptY } = tooltipPoint; - const { width, height } = size; - let x1, x2, x3, y1, y2, y3; - if (yAlign === "center") { - y2 = ptY + height / 2; - if (xAlign === "left") { - x1 = ptX; - x2 = x1 - caretSize; - y1 = y2 + caretSize; - y3 = y2 - caretSize; - } else { - x1 = ptX + width; - x2 = x1 + caretSize; - y1 = y2 - caretSize; - y3 = y2 + caretSize; - } - x3 = x1; - } else { - if (xAlign === "left") { - x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize; - } else if (xAlign === "right") { - x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; - } else { - x2 = this.caretX; - } - if (yAlign === "top") { - y1 = ptY; - y2 = y1 - caretSize; - x1 = x2 - caretSize; - x3 = x2 + caretSize; - } else { - y1 = ptY + height; - y2 = y1 + caretSize; - x1 = x2 + caretSize; - x3 = x2 - caretSize; - } - y3 = y1; - } - return { - x1, - x2, - x3, - y1, - y2, - y3 - }; - } - drawTitle(pt, ctx, options) { - const title = this.title; - const length = title.length; - let titleFont, titleSpacing, i; - if (length) { - const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); - pt.x = getAlignedX(this, options.titleAlign, options); - ctx.textAlign = rtlHelper.textAlign(options.titleAlign); - ctx.textBaseline = "middle"; - titleFont = toFont(options.titleFont); - titleSpacing = options.titleSpacing; - ctx.fillStyle = options.titleColor; - ctx.font = titleFont.string; - for (i = 0; i < length; ++i) { - ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2); - pt.y += titleFont.lineHeight + titleSpacing; - if (i + 1 === length) { - pt.y += options.titleMarginBottom - titleSpacing; - } - } - } - } - _drawColorBox(ctx, pt, i, rtlHelper, options) { - const labelColor = this.labelColors[i]; - const labelPointStyle = this.labelPointStyles[i]; - const { boxHeight, boxWidth } = options; - const bodyFont = toFont(options.bodyFont); - const colorX = getAlignedX(this, "left", options); - const rtlColorX = rtlHelper.x(colorX); - const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0; - const colorY = pt.y + yOffSet; - if (options.usePointStyle) { - const drawOptions = { - radius: Math.min(boxWidth, boxHeight) / 2, - pointStyle: labelPointStyle.pointStyle, - rotation: labelPointStyle.rotation, - borderWidth: 1 - }; - const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2; - const centerY = colorY + boxHeight / 2; - ctx.strokeStyle = options.multiKeyBackground; - ctx.fillStyle = options.multiKeyBackground; - drawPoint(ctx, drawOptions, centerX, centerY); - ctx.strokeStyle = labelColor.borderColor; - ctx.fillStyle = labelColor.backgroundColor; - drawPoint(ctx, drawOptions, centerX, centerY); - } else { - ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1; - ctx.strokeStyle = labelColor.borderColor; - ctx.setLineDash(labelColor.borderDash || []); - ctx.lineDashOffset = labelColor.borderDashOffset || 0; - const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth); - const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2); - const borderRadius = toTRBLCorners(labelColor.borderRadius); - if (Object.values(borderRadius).some((v) => v !== 0)) { - ctx.beginPath(); - ctx.fillStyle = options.multiKeyBackground; - addRoundedRectPath(ctx, { - x: outerX, - y: colorY, - w: boxWidth, - h: boxHeight, - radius: borderRadius - }); - ctx.fill(); - ctx.stroke(); - ctx.fillStyle = labelColor.backgroundColor; - ctx.beginPath(); - addRoundedRectPath(ctx, { - x: innerX, - y: colorY + 1, - w: boxWidth - 2, - h: boxHeight - 2, - radius: borderRadius - }); - ctx.fill(); - } else { - ctx.fillStyle = options.multiKeyBackground; - ctx.fillRect(outerX, colorY, boxWidth, boxHeight); - ctx.strokeRect(outerX, colorY, boxWidth, boxHeight); - ctx.fillStyle = labelColor.backgroundColor; - ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2); - } - } - ctx.fillStyle = this.labelTextColors[i]; - } - drawBody(pt, ctx, options) { - const { body } = this; - const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options; - const bodyFont = toFont(options.bodyFont); - let bodyLineHeight = bodyFont.lineHeight; - let xLinePadding = 0; - const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); - const fillLineOfText = function(line) { - ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2); - pt.y += bodyLineHeight + bodySpacing; - }; - const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign); - let bodyItem, textColor, lines, i, j, ilen, jlen; - ctx.textAlign = bodyAlign; - ctx.textBaseline = "middle"; - ctx.font = bodyFont.string; - pt.x = getAlignedX(this, bodyAlignForCalculation, options); - ctx.fillStyle = options.bodyColor; - each(this.beforeBody, fillLineOfText); - xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0; - for (i = 0, ilen = body.length; i < ilen; ++i) { - bodyItem = body[i]; - textColor = this.labelTextColors[i]; - ctx.fillStyle = textColor; - each(bodyItem.before, fillLineOfText); - lines = bodyItem.lines; - if (displayColors && lines.length) { - this._drawColorBox(ctx, pt, i, rtlHelper, options); - bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight); - } - for (j = 0, jlen = lines.length; j < jlen; ++j) { - fillLineOfText(lines[j]); - bodyLineHeight = bodyFont.lineHeight; - } - each(bodyItem.after, fillLineOfText); - } - xLinePadding = 0; - bodyLineHeight = bodyFont.lineHeight; - each(this.afterBody, fillLineOfText); - pt.y -= bodySpacing; - } - drawFooter(pt, ctx, options) { - const footer = this.footer; - const length = footer.length; - let footerFont, i; - if (length) { - const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); - pt.x = getAlignedX(this, options.footerAlign, options); - pt.y += options.footerMarginTop; - ctx.textAlign = rtlHelper.textAlign(options.footerAlign); - ctx.textBaseline = "middle"; - footerFont = toFont(options.footerFont); - ctx.fillStyle = options.footerColor; - ctx.font = footerFont.string; - for (i = 0; i < length; ++i) { - ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2); - pt.y += footerFont.lineHeight + options.footerSpacing; - } - } - } - drawBackground(pt, ctx, tooltipSize, options) { - const { xAlign, yAlign } = this; - const { x, y } = pt; - const { width, height } = tooltipSize; - const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius); - ctx.fillStyle = options.backgroundColor; - ctx.strokeStyle = options.borderColor; - ctx.lineWidth = options.borderWidth; - ctx.beginPath(); - ctx.moveTo(x + topLeft, y); - if (yAlign === "top") { - this.drawCaret(pt, ctx, tooltipSize, options); - } - ctx.lineTo(x + width - topRight, y); - ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); - if (yAlign === "center" && xAlign === "right") { - this.drawCaret(pt, ctx, tooltipSize, options); - } - ctx.lineTo(x + width, y + height - bottomRight); - ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); - if (yAlign === "bottom") { - this.drawCaret(pt, ctx, tooltipSize, options); - } - ctx.lineTo(x + bottomLeft, y + height); - ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); - if (yAlign === "center" && xAlign === "left") { - this.drawCaret(pt, ctx, tooltipSize, options); - } - ctx.lineTo(x, y + topLeft); - ctx.quadraticCurveTo(x, y, x + topLeft, y); - ctx.closePath(); - ctx.fill(); - if (options.borderWidth > 0) { - ctx.stroke(); - } - } - _updateAnimationTarget(options) { - const chart = this.chart; - const anims = this.$animations; - const animX = anims && anims.x; - const animY = anims && anims.y; - if (animX || animY) { - const position = positioners[options.position].call(this, this._active, this._eventPosition); - if (!position) { - return; - } - const size = this._size = getTooltipSize(this, options); - const positionAndSize = Object.assign({}, position, this._size); - const alignment = determineAlignment(chart, options, positionAndSize); - const point = getBackgroundPoint(options, positionAndSize, alignment, chart); - if (animX._to !== point.x || animY._to !== point.y) { - this.xAlign = alignment.xAlign; - this.yAlign = alignment.yAlign; - this.width = size.width; - this.height = size.height; - this.caretX = position.x; - this.caretY = position.y; - this._resolveAnimations().update(this, point); - } - } - } - _willRender() { - return !!this.opacity; - } - draw(ctx) { - const options = this.options.setContext(this.getContext()); - let opacity = this.opacity; - if (!opacity) { - return; - } - this._updateAnimationTarget(options); - const tooltipSize = { - width: this.width, - height: this.height - }; - const pt = { - x: this.x, - y: this.y - }; - opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity; - const padding = toPadding(options.padding); - const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length; - if (options.enabled && hasTooltipContent) { - ctx.save(); - ctx.globalAlpha = opacity; - this.drawBackground(pt, ctx, tooltipSize, options); - overrideTextDirection(ctx, options.textDirection); - pt.y += padding.top; - this.drawTitle(pt, ctx, options); - this.drawBody(pt, ctx, options); - this.drawFooter(pt, ctx, options); - restoreTextDirection(ctx, options.textDirection); - ctx.restore(); - } - } - getActiveElements() { - return this._active || []; - } - setActiveElements(activeElements, eventPosition) { - const lastActive = this._active; - const active = activeElements.map(({ datasetIndex, index }) => { - const meta = this.chart.getDatasetMeta(datasetIndex); - if (!meta) { - throw new Error("Cannot find a dataset at index " + datasetIndex); - } - return { - datasetIndex, - element: meta.data[index], - index - }; - }); - const changed = !_elementsEqual(lastActive, active); - const positionChanged = this._positionChanged(active, eventPosition); - if (changed || positionChanged) { - this._active = active; - this._eventPosition = eventPosition; - this._ignoreReplayEvents = true; - this.update(true); - } - } - handleEvent(e, replay, inChartArea = true) { - if (replay && this._ignoreReplayEvents) { - return false; - } - this._ignoreReplayEvents = false; - const options = this.options; - const lastActive = this._active || []; - const active = this._getActiveElements(e, lastActive, replay, inChartArea); - const positionChanged = this._positionChanged(active, e); - const changed = replay || !_elementsEqual(active, lastActive) || positionChanged; - if (changed) { - this._active = active; - if (options.enabled || options.external) { - this._eventPosition = { - x: e.x, - y: e.y - }; - this.update(true, replay); - } - } - return changed; - } - _getActiveElements(e, lastActive, replay, inChartArea) { - const options = this.options; - if (e.type === "mouseout") { - return []; - } - if (!inChartArea) { - return lastActive; - } - const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay); - if (options.reverse) { - active.reverse(); - } - return active; - } - _positionChanged(active, e) { - const { caretX, caretY, options } = this; - const position = positioners[options.position].call(this, active, e); - return position !== false && (caretX !== position.x || caretY !== position.y); - } -}; -__publicField(Tooltip, "positioners", positioners); -var plugin_tooltip = { - id: "tooltip", - _element: Tooltip, - positioners, - afterInit(chart, _args, options) { - if (options) { - chart.tooltip = new Tooltip({ - chart, - options - }); - } - }, - beforeUpdate(chart, _args, options) { - if (chart.tooltip) { - chart.tooltip.initialize(options); - } - }, - reset(chart, _args, options) { - if (chart.tooltip) { - chart.tooltip.initialize(options); - } - }, - afterDraw(chart) { - const tooltip = chart.tooltip; - if (tooltip && tooltip._willRender()) { - const args = { - tooltip - }; - if (chart.notifyPlugins("beforeTooltipDraw", { - ...args, - cancelable: true - }) === false) { - return; - } - tooltip.draw(chart.ctx); - chart.notifyPlugins("afterTooltipDraw", args); - } - }, - afterEvent(chart, args) { - if (chart.tooltip) { - const useFinalPosition = args.replay; - if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) { - args.changed = true; - } - } - }, - defaults: { - enabled: true, - external: null, - position: "average", - backgroundColor: "rgba(0,0,0,0.8)", - titleColor: "#fff", - titleFont: { - weight: "bold" - }, - titleSpacing: 2, - titleMarginBottom: 6, - titleAlign: "left", - bodyColor: "#fff", - bodySpacing: 2, - bodyFont: {}, - bodyAlign: "left", - footerColor: "#fff", - footerSpacing: 2, - footerMarginTop: 6, - footerFont: { - weight: "bold" - }, - footerAlign: "left", - padding: 6, - caretPadding: 2, - caretSize: 5, - cornerRadius: 6, - boxHeight: (ctx, opts) => opts.bodyFont.size, - boxWidth: (ctx, opts) => opts.bodyFont.size, - multiKeyBackground: "#fff", - displayColors: true, - boxPadding: 0, - borderColor: "rgba(0,0,0,0)", - borderWidth: 0, - animation: { - duration: 400, - easing: "easeOutQuart" - }, - animations: { - numbers: { - type: "number", - properties: [ - "x", - "y", - "width", - "height", - "caretX", - "caretY" - ] - }, - opacity: { - easing: "linear", - duration: 200 - } - }, - callbacks: defaultCallbacks - }, - defaultRoutes: { - bodyFont: "font", - footerFont: "font", - titleFont: "font" - }, - descriptors: { - _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external", - _indexable: false, - callbacks: { - _scriptable: false, - _indexable: false - }, - animation: { - _fallback: false - }, - animations: { - _fallback: "animation" - } - }, - additionalOptionScopes: [ - "interaction" - ] -}; -var addIfString = (labels, raw, index, addedLabels) => { - if (typeof raw === "string") { - index = labels.push(raw) - 1; - addedLabels.unshift({ - index, - label: raw - }); - } else if (isNaN(raw)) { - index = null; - } - return index; -}; -function findOrAddLabel(labels, raw, index, addedLabels) { - const first = labels.indexOf(raw); - if (first === -1) { - return addIfString(labels, raw, index, addedLabels); - } - const last = labels.lastIndexOf(raw); - return first !== last ? index : first; -} -var validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max); -function _getLabelForValue(value) { - const labels = this.getLabels(); - if (value >= 0 && value < labels.length) { - return labels[value]; - } - return value; -} -var CategoryScale = class extends Scale { - constructor(cfg) { - super(cfg); - this._startValue = void 0; - this._valueRange = 0; - this._addedLabels = []; - } - init(scaleOptions) { - const added = this._addedLabels; - if (added.length) { - const labels = this.getLabels(); - for (const { index, label } of added) { - if (labels[index] === label) { - labels.splice(index, 1); - } - } - this._addedLabels = []; - } - super.init(scaleOptions); - } - parse(raw, index) { - if (isNullOrUndef(raw)) { - return null; - } - const labels = this.getLabels(); - index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels); - return validIndex(index, labels.length - 1); - } - determineDataLimits() { - const { minDefined, maxDefined } = this.getUserBounds(); - let { min, max } = this.getMinMax(true); - if (this.options.bounds === "ticks") { - if (!minDefined) { - min = 0; - } - if (!maxDefined) { - max = this.getLabels().length - 1; - } - } - this.min = min; - this.max = max; - } - buildTicks() { - const min = this.min; - const max = this.max; - const offset = this.options.offset; - const ticks = []; - let labels = this.getLabels(); - labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1); - this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); - this._startValue = this.min - (offset ? 0.5 : 0); - for (let value = min; value <= max; value++) { - ticks.push({ - value - }); - } - return ticks; - } - getLabelForValue(value) { - return _getLabelForValue.call(this, value); - } - configure() { - super.configure(); - if (!this.isHorizontal()) { - this._reversePixels = !this._reversePixels; - } - } - getPixelForValue(value) { - if (typeof value !== "number") { - value = this.parse(value); - } - return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); - } - getPixelForTick(index) { - const ticks = this.ticks; - if (index < 0 || index > ticks.length - 1) { - return null; - } - return this.getPixelForValue(ticks[index].value); - } - getValueForPixel(pixel) { - return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); - } - getBasePixel() { - return this.bottom; - } -}; -__publicField(CategoryScale, "id", "category"); -__publicField(CategoryScale, "defaults", { - ticks: { - callback: _getLabelForValue - } -}); -function generateTicks$1(generationOptions, dataRange) { - const ticks = []; - const MIN_SPACING = 1e-14; - const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions; - const unit = step || 1; - const maxSpaces = maxTicks - 1; - const { min: rmin, max: rmax } = dataRange; - const minDefined = !isNullOrUndef(min); - const maxDefined = !isNullOrUndef(max); - const countDefined = !isNullOrUndef(count); - const minSpacing = (rmax - rmin) / (maxDigits + 1); - let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit; - let factor, niceMin, niceMax, numSpaces; - if (spacing < MIN_SPACING && !minDefined && !maxDefined) { - return [ - { - value: rmin - }, - { - value: rmax - } - ]; - } - numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); - if (numSpaces > maxSpaces) { - spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit; - } - if (!isNullOrUndef(precision)) { - factor = Math.pow(10, precision); - spacing = Math.ceil(spacing * factor) / factor; - } - if (bounds === "ticks") { - niceMin = Math.floor(rmin / spacing) * spacing; - niceMax = Math.ceil(rmax / spacing) * spacing; - } else { - niceMin = rmin; - niceMax = rmax; - } - if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) { - numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks)); - spacing = (max - min) / numSpaces; - niceMin = min; - niceMax = max; - } else if (countDefined) { - niceMin = minDefined ? min : niceMin; - niceMax = maxDefined ? max : niceMax; - numSpaces = count - 1; - spacing = (niceMax - niceMin) / numSpaces; - } else { - numSpaces = (niceMax - niceMin) / spacing; - if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) { - numSpaces = Math.round(numSpaces); - } else { - numSpaces = Math.ceil(numSpaces); - } - } - const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin)); - factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision); - niceMin = Math.round(niceMin * factor) / factor; - niceMax = Math.round(niceMax * factor) / factor; - let j = 0; - if (minDefined) { - if (includeBounds && niceMin !== min) { - ticks.push({ - value: min - }); - if (niceMin < min) { - j++; - } - if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) { - j++; - } - } else if (niceMin < min) { - j++; - } - } - for (; j < numSpaces; ++j) { - const tickValue = Math.round((niceMin + j * spacing) * factor) / factor; - if (maxDefined && tickValue > max) { - break; - } - ticks.push({ - value: tickValue - }); - } - if (maxDefined && includeBounds && niceMax !== max) { - if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) { - ticks[ticks.length - 1].value = max; - } else { - ticks.push({ - value: max - }); - } - } else if (!maxDefined || niceMax === max) { - ticks.push({ - value: niceMax - }); - } - return ticks; -} -function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) { - const rad = toRadians(minRotation); - const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3; - const length = 0.75 * minSpacing * ("" + value).length; - return Math.min(minSpacing / ratio, length); -} -var LinearScaleBase = class extends Scale { - constructor(cfg) { - super(cfg); - this.start = void 0; - this.end = void 0; - this._startValue = void 0; - this._endValue = void 0; - this._valueRange = 0; - } - parse(raw, index) { - if (isNullOrUndef(raw)) { - return null; - } - if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) { - return null; - } - return +raw; - } - handleTickRangeOptions() { - const { beginAtZero } = this.options; - const { minDefined, maxDefined } = this.getUserBounds(); - let { min, max } = this; - const setMin = (v) => min = minDefined ? min : v; - const setMax = (v) => max = maxDefined ? max : v; - if (beginAtZero) { - const minSign = sign(min); - const maxSign = sign(max); - if (minSign < 0 && maxSign < 0) { - setMax(0); - } else if (minSign > 0 && maxSign > 0) { - setMin(0); - } - } - if (min === max) { - let offset = max === 0 ? 1 : Math.abs(max * 0.05); - setMax(max + offset); - if (!beginAtZero) { - setMin(min - offset); - } - } - this.min = min; - this.max = max; - } - getTickLimit() { - const tickOpts = this.options.ticks; - let { maxTicksLimit, stepSize } = tickOpts; - let maxTicks; - if (stepSize) { - maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1; - if (maxTicks > 1e3) { - console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`); - maxTicks = 1e3; - } - } else { - maxTicks = this.computeTickLimit(); - maxTicksLimit = maxTicksLimit || 11; - } - if (maxTicksLimit) { - maxTicks = Math.min(maxTicksLimit, maxTicks); - } - return maxTicks; - } - computeTickLimit() { - return Number.POSITIVE_INFINITY; - } - buildTicks() { - const opts = this.options; - const tickOpts = opts.ticks; - let maxTicks = this.getTickLimit(); - maxTicks = Math.max(2, maxTicks); - const numericGeneratorOptions = { - maxTicks, - bounds: opts.bounds, - min: opts.min, - max: opts.max, - precision: tickOpts.precision, - step: tickOpts.stepSize, - count: tickOpts.count, - maxDigits: this._maxDigits(), - horizontal: this.isHorizontal(), - minRotation: tickOpts.minRotation || 0, - includeBounds: tickOpts.includeBounds !== false - }; - const dataRange = this._range || this; - const ticks = generateTicks$1(numericGeneratorOptions, dataRange); - if (opts.bounds === "ticks") { - _setMinAndMaxByKey(ticks, this, "value"); - } - if (opts.reverse) { - ticks.reverse(); - this.start = this.max; - this.end = this.min; - } else { - this.start = this.min; - this.end = this.max; - } - return ticks; - } - configure() { - const ticks = this.ticks; - let start = this.min; - let end = this.max; - super.configure(); - if (this.options.offset && ticks.length) { - const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2; - start -= offset; - end += offset; - } - this._startValue = start; - this._endValue = end; - this._valueRange = end - start; - } - getLabelForValue(value) { - return formatNumber(value, this.chart.options.locale, this.options.ticks.format); - } -}; -var LinearScale = class extends LinearScaleBase { - determineDataLimits() { - const { min, max } = this.getMinMax(true); - this.min = isNumberFinite(min) ? min : 0; - this.max = isNumberFinite(max) ? max : 1; - this.handleTickRangeOptions(); - } - computeTickLimit() { - const horizontal = this.isHorizontal(); - const length = horizontal ? this.width : this.height; - const minRotation = toRadians(this.options.ticks.minRotation); - const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3; - const tickFont = this._resolveTickFontOptions(0); - return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio)); - } - getPixelForValue(value) { - return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); - } - getValueForPixel(pixel) { - return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange; - } -}; -__publicField(LinearScale, "id", "linear"); -__publicField(LinearScale, "defaults", { - ticks: { - callback: Ticks.formatters.numeric - } -}); -var log10Floor = (v) => Math.floor(log10(v)); -var changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m); -function isMajor(tickVal) { - const remain = tickVal / Math.pow(10, log10Floor(tickVal)); - return remain === 1; -} -function steps(min, max, rangeExp) { - const rangeStep = Math.pow(10, rangeExp); - const start = Math.floor(min / rangeStep); - const end = Math.ceil(max / rangeStep); - return end - start; -} -function startExp(min, max) { - const range = max - min; - let rangeExp = log10Floor(range); - while (steps(min, max, rangeExp) > 10) { - rangeExp++; - } - while (steps(min, max, rangeExp) < 10) { - rangeExp--; - } - return Math.min(rangeExp, log10Floor(min)); -} -function generateTicks(generationOptions, { min, max }) { - min = finiteOrDefault(generationOptions.min, min); - const ticks = []; - const minExp = log10Floor(min); - let exp = startExp(min, max); - let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; - const stepSize = Math.pow(10, exp); - const base = minExp > exp ? Math.pow(10, minExp) : 0; - const start = Math.round((min - base) * precision) / precision; - const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10; - let significand = Math.floor((start - offset) / Math.pow(10, exp)); - let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision); - while (value < max) { - ticks.push({ - value, - major: isMajor(value), - significand - }); - if (significand >= 10) { - significand = significand < 15 ? 15 : 20; - } else { - significand++; - } - if (significand >= 20) { - exp++; - significand = 2; - precision = exp >= 0 ? 1 : precision; - } - value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision; - } - const lastTick = finiteOrDefault(generationOptions.max, value); - ticks.push({ - value: lastTick, - major: isMajor(lastTick), - significand - }); - return ticks; -} -var LogarithmicScale = class extends Scale { - constructor(cfg) { - super(cfg); - this.start = void 0; - this.end = void 0; - this._startValue = void 0; - this._valueRange = 0; - } - parse(raw, index) { - const value = LinearScaleBase.prototype.parse.apply(this, [ - raw, - index - ]); - if (value === 0) { - this._zero = true; - return void 0; - } - return isNumberFinite(value) && value > 0 ? value : null; - } - determineDataLimits() { - const { min, max } = this.getMinMax(true); - this.min = isNumberFinite(min) ? Math.max(0, min) : null; - this.max = isNumberFinite(max) ? Math.max(0, max) : null; - if (this.options.beginAtZero) { - this._zero = true; - } - if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) { - this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0); - } - this.handleTickRangeOptions(); - } - handleTickRangeOptions() { - const { minDefined, maxDefined } = this.getUserBounds(); - let min = this.min; - let max = this.max; - const setMin = (v) => min = minDefined ? min : v; - const setMax = (v) => max = maxDefined ? max : v; - if (min === max) { - if (min <= 0) { - setMin(1); - setMax(10); - } else { - setMin(changeExponent(min, -1)); - setMax(changeExponent(max, 1)); - } - } - if (min <= 0) { - setMin(changeExponent(max, -1)); - } - if (max <= 0) { - setMax(changeExponent(min, 1)); - } - this.min = min; - this.max = max; - } - buildTicks() { - const opts = this.options; - const generationOptions = { - min: this._userMin, - max: this._userMax - }; - const ticks = generateTicks(generationOptions, this); - if (opts.bounds === "ticks") { - _setMinAndMaxByKey(ticks, this, "value"); - } - if (opts.reverse) { - ticks.reverse(); - this.start = this.max; - this.end = this.min; - } else { - this.start = this.min; - this.end = this.max; - } - return ticks; - } - getLabelForValue(value) { - return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format); - } - configure() { - const start = this.min; - super.configure(); - this._startValue = log10(start); - this._valueRange = log10(this.max) - log10(start); - } - getPixelForValue(value) { - if (value === void 0 || value === 0) { - value = this.min; - } - if (value === null || isNaN(value)) { - return NaN; - } - return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange); - } - getValueForPixel(pixel) { - const decimal = this.getDecimalForPixel(pixel); - return Math.pow(10, this._startValue + decimal * this._valueRange); - } -}; -__publicField(LogarithmicScale, "id", "logarithmic"); -__publicField(LogarithmicScale, "defaults", { - ticks: { - callback: Ticks.formatters.logarithmic, - major: { - enabled: true - } - } -}); -function getTickBackdropHeight(opts) { - const tickOpts = opts.ticks; - if (tickOpts.display && opts.display) { - const padding = toPadding(tickOpts.backdropPadding); - return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height; - } - return 0; -} -function measureLabelSize(ctx, font, label) { - label = isArray(label) ? label : [ - label - ]; - return { - w: _longestText(ctx, font.string, label), - h: label.length * font.lineHeight - }; -} -function determineLimits(angle, pos, size, min, max) { - if (angle === min || angle === max) { - return { - start: pos - size / 2, - end: pos + size / 2 - }; - } else if (angle < min || angle > max) { - return { - start: pos - size, - end: pos - }; - } - return { - start: pos, - end: pos + size - }; -} -function fitWithPointLabels(scale) { - const orig = { - l: scale.left + scale._padding.left, - r: scale.right - scale._padding.right, - t: scale.top + scale._padding.top, - b: scale.bottom - scale._padding.bottom - }; - const limits = Object.assign({}, orig); - const labelSizes = []; - const padding = []; - const valueCount = scale._pointLabels.length; - const pointLabelOpts = scale.options.pointLabels; - const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0; - for (let i = 0; i < valueCount; i++) { - const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i)); - padding[i] = opts.padding; - const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle); - const plFont = toFont(opts.font); - const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]); - labelSizes[i] = textSize; - const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle); - const angle = Math.round(toDegrees(angleRadians)); - const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); - const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); - updateLimits(limits, orig, angleRadians, hLimits, vLimits); - } - scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b); - scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding); -} -function updateLimits(limits, orig, angle, hLimits, vLimits) { - const sin = Math.abs(Math.sin(angle)); - const cos = Math.abs(Math.cos(angle)); - let x = 0; - let y = 0; - if (hLimits.start < orig.l) { - x = (orig.l - hLimits.start) / sin; - limits.l = Math.min(limits.l, orig.l - x); - } else if (hLimits.end > orig.r) { - x = (hLimits.end - orig.r) / sin; - limits.r = Math.max(limits.r, orig.r + x); - } - if (vLimits.start < orig.t) { - y = (orig.t - vLimits.start) / cos; - limits.t = Math.min(limits.t, orig.t - y); - } else if (vLimits.end > orig.b) { - y = (vLimits.end - orig.b) / cos; - limits.b = Math.max(limits.b, orig.b + y); - } -} -function createPointLabelItem(scale, index, itemOpts) { - const outerDistance = scale.drawingArea; - const { extra, additionalAngle, padding, size } = itemOpts; - const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle); - const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI))); - const y = yForAngle(pointLabelPosition.y, size.h, angle); - const textAlign = getTextAlignForAngle(angle); - const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign); - return { - visible: true, - x: pointLabelPosition.x, - y, - textAlign, - left, - top: y, - right: left + size.w, - bottom: y + size.h - }; -} -function isNotOverlapped(item, area) { - if (!area) { - return true; - } - const { left, top, right, bottom } = item; - const apexesInArea = _isPointInArea({ - x: left, - y: top - }, area) || _isPointInArea({ - x: left, - y: bottom - }, area) || _isPointInArea({ - x: right, - y: top - }, area) || _isPointInArea({ - x: right, - y: bottom - }, area); - return !apexesInArea; -} -function buildPointLabelItems(scale, labelSizes, padding) { - const items = []; - const valueCount = scale._pointLabels.length; - const opts = scale.options; - const { centerPointLabels, display } = opts.pointLabels; - const itemOpts = { - extra: getTickBackdropHeight(opts) / 2, - additionalAngle: centerPointLabels ? PI / valueCount : 0 - }; - let area; - for (let i = 0; i < valueCount; i++) { - itemOpts.padding = padding[i]; - itemOpts.size = labelSizes[i]; - const item = createPointLabelItem(scale, i, itemOpts); - items.push(item); - if (display === "auto") { - item.visible = isNotOverlapped(item, area); - if (item.visible) { - area = item; - } - } - } - return items; -} -function getTextAlignForAngle(angle) { - if (angle === 0 || angle === 180) { - return "center"; - } else if (angle < 180) { - return "left"; - } - return "right"; -} -function leftForTextAlign(x, w, align) { - if (align === "right") { - x -= w; - } else if (align === "center") { - x -= w / 2; - } - return x; -} -function yForAngle(y, h4, angle) { - if (angle === 90 || angle === 270) { - y -= h4 / 2; - } else if (angle > 270 || angle < 90) { - y -= h4; - } - return y; -} -function drawPointLabelBox(ctx, opts, item) { - const { left, top, right, bottom } = item; - const { backdropColor } = opts; - if (!isNullOrUndef(backdropColor)) { - const borderRadius = toTRBLCorners(opts.borderRadius); - const padding = toPadding(opts.backdropPadding); - ctx.fillStyle = backdropColor; - const backdropLeft = left - padding.left; - const backdropTop = top - padding.top; - const backdropWidth = right - left + padding.width; - const backdropHeight = bottom - top + padding.height; - if (Object.values(borderRadius).some((v) => v !== 0)) { - ctx.beginPath(); - addRoundedRectPath(ctx, { - x: backdropLeft, - y: backdropTop, - w: backdropWidth, - h: backdropHeight, - radius: borderRadius - }); - ctx.fill(); - } else { - ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight); - } - } -} -function drawPointLabels(scale, labelCount) { - const { ctx, options: { pointLabels } } = scale; - for (let i = labelCount - 1; i >= 0; i--) { - const item = scale._pointLabelItems[i]; - if (!item.visible) { - continue; - } - const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i)); - drawPointLabelBox(ctx, optsAtIndex, item); - const plFont = toFont(optsAtIndex.font); - const { x, y, textAlign } = item; - renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, { - color: optsAtIndex.color, - textAlign, - textBaseline: "middle" - }); - } -} -function pathRadiusLine(scale, radius, circular, labelCount) { - const { ctx } = scale; - if (circular) { - ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU); - } else { - let pointPosition = scale.getPointPosition(0, radius); - ctx.moveTo(pointPosition.x, pointPosition.y); - for (let i = 1; i < labelCount; i++) { - pointPosition = scale.getPointPosition(i, radius); - ctx.lineTo(pointPosition.x, pointPosition.y); - } - } -} -function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) { - const ctx = scale.ctx; - const circular = gridLineOpts.circular; - const { color: color2, lineWidth } = gridLineOpts; - if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) { - return; - } - ctx.save(); - ctx.strokeStyle = color2; - ctx.lineWidth = lineWidth; - ctx.setLineDash(borderOpts.dash); - ctx.lineDashOffset = borderOpts.dashOffset; - ctx.beginPath(); - pathRadiusLine(scale, radius, circular, labelCount); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); -} -function createPointLabelContext(parent, index, label) { - return createContext(parent, { - label, - index, - type: "pointLabel" - }); -} -var RadialLinearScale = class extends LinearScaleBase { - constructor(cfg) { - super(cfg); - this.xCenter = void 0; - this.yCenter = void 0; - this.drawingArea = void 0; - this._pointLabels = []; - this._pointLabelItems = []; - } - setDimensions() { - const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2); - const w = this.width = this.maxWidth - padding.width; - const h4 = this.height = this.maxHeight - padding.height; - this.xCenter = Math.floor(this.left + w / 2 + padding.left); - this.yCenter = Math.floor(this.top + h4 / 2 + padding.top); - this.drawingArea = Math.floor(Math.min(w, h4) / 2); - } - determineDataLimits() { - const { min, max } = this.getMinMax(false); - this.min = isNumberFinite(min) && !isNaN(min) ? min : 0; - this.max = isNumberFinite(max) && !isNaN(max) ? max : 0; - this.handleTickRangeOptions(); - } - computeTickLimit() { - return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); - } - generateTickLabels(ticks) { - LinearScaleBase.prototype.generateTickLabels.call(this, ticks); - this._pointLabels = this.getLabels().map((value, index) => { - const label = callback(this.options.pointLabels.callback, [ - value, - index - ], this); - return label || label === 0 ? label : ""; - }).filter((v, i) => this.chart.getDataVisibility(i)); - } - fit() { - const opts = this.options; - if (opts.display && opts.pointLabels.display) { - fitWithPointLabels(this); - } else { - this.setCenterPoint(0, 0, 0, 0); - } - } - setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) { - this.xCenter += Math.floor((leftMovement - rightMovement) / 2); - this.yCenter += Math.floor((topMovement - bottomMovement) / 2); - this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement)); - } - getIndexAngle(index) { - const angleMultiplier = TAU / (this._pointLabels.length || 1); - const startAngle = this.options.startAngle || 0; - return _normalizeAngle(index * angleMultiplier + toRadians(startAngle)); - } - getDistanceFromCenterForValue(value) { - if (isNullOrUndef(value)) { - return NaN; - } - const scalingFactor = this.drawingArea / (this.max - this.min); - if (this.options.reverse) { - return (this.max - value) * scalingFactor; - } - return (value - this.min) * scalingFactor; - } - getValueForDistanceFromCenter(distance) { - if (isNullOrUndef(distance)) { - return NaN; - } - const scaledDistance = distance / (this.drawingArea / (this.max - this.min)); - return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance; - } - getPointLabelContext(index) { - const pointLabels = this._pointLabels || []; - if (index >= 0 && index < pointLabels.length) { - const pointLabel = pointLabels[index]; - return createPointLabelContext(this.getContext(), index, pointLabel); - } - } - getPointPosition(index, distanceFromCenter, additionalAngle = 0) { - const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle; - return { - x: Math.cos(angle) * distanceFromCenter + this.xCenter, - y: Math.sin(angle) * distanceFromCenter + this.yCenter, - angle - }; - } - getPointPositionForValue(index, value) { - return this.getPointPosition(index, this.getDistanceFromCenterForValue(value)); - } - getBasePosition(index) { - return this.getPointPositionForValue(index || 0, this.getBaseValue()); - } - getPointLabelPosition(index) { - const { left, top, right, bottom } = this._pointLabelItems[index]; - return { - left, - top, - right, - bottom - }; - } - drawBackground() { - const { backgroundColor, grid: { circular } } = this.options; - if (backgroundColor) { - const ctx = this.ctx; - ctx.save(); - ctx.beginPath(); - pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length); - ctx.closePath(); - ctx.fillStyle = backgroundColor; - ctx.fill(); - ctx.restore(); - } - } - drawGrid() { - const ctx = this.ctx; - const opts = this.options; - const { angleLines, grid, border } = opts; - const labelCount = this._pointLabels.length; - let i, offset, position; - if (opts.pointLabels.display) { - drawPointLabels(this, labelCount); - } - if (grid.display) { - this.ticks.forEach((tick, index) => { - if (index !== 0) { - offset = this.getDistanceFromCenterForValue(tick.value); - const context = this.getContext(index); - const optsAtIndex = grid.setContext(context); - const optsAtIndexBorder = border.setContext(context); - drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder); - } - }); - } - if (angleLines.display) { - ctx.save(); - for (i = labelCount - 1; i >= 0; i--) { - const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i)); - const { color: color2, lineWidth } = optsAtIndex; - if (!lineWidth || !color2) { - continue; - } - ctx.lineWidth = lineWidth; - ctx.strokeStyle = color2; - ctx.setLineDash(optsAtIndex.borderDash); - ctx.lineDashOffset = optsAtIndex.borderDashOffset; - offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max); - position = this.getPointPosition(i, offset); - ctx.beginPath(); - ctx.moveTo(this.xCenter, this.yCenter); - ctx.lineTo(position.x, position.y); - ctx.stroke(); - } - ctx.restore(); - } - } - drawBorder() { - } - drawLabels() { - const ctx = this.ctx; - const opts = this.options; - const tickOpts = opts.ticks; - if (!tickOpts.display) { - return; - } - const startAngle = this.getIndexAngle(0); - let offset, width; - ctx.save(); - ctx.translate(this.xCenter, this.yCenter); - ctx.rotate(startAngle); - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - this.ticks.forEach((tick, index) => { - if (index === 0 && !opts.reverse) { - return; - } - const optsAtIndex = tickOpts.setContext(this.getContext(index)); - const tickFont = toFont(optsAtIndex.font); - offset = this.getDistanceFromCenterForValue(this.ticks[index].value); - if (optsAtIndex.showLabelBackdrop) { - ctx.font = tickFont.string; - width = ctx.measureText(tick.label).width; - ctx.fillStyle = optsAtIndex.backdropColor; - const padding = toPadding(optsAtIndex.backdropPadding); - ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height); - } - renderText(ctx, tick.label, 0, -offset, tickFont, { - color: optsAtIndex.color - }); - }); - ctx.restore(); - } - drawTitle() { - } -}; -__publicField(RadialLinearScale, "id", "radialLinear"); -__publicField(RadialLinearScale, "defaults", { - display: true, - animate: true, - position: "chartArea", - angleLines: { - display: true, - lineWidth: 1, - borderDash: [], - borderDashOffset: 0 - }, - grid: { - circular: false - }, - startAngle: 0, - ticks: { - showLabelBackdrop: true, - callback: Ticks.formatters.numeric - }, - pointLabels: { - backdropColor: void 0, - backdropPadding: 2, - display: true, - font: { - size: 10 - }, - callback(label) { - return label; - }, - padding: 5, - centerPointLabels: false - } -}); -__publicField(RadialLinearScale, "defaultRoutes", { - "angleLines.color": "borderColor", - "pointLabels.color": "color", - "ticks.color": "color" -}); -__publicField(RadialLinearScale, "descriptors", { - angleLines: { - _fallback: "grid" - } -}); -var INTERVALS = { - millisecond: { - common: true, - size: 1, - steps: 1e3 - }, - second: { - common: true, - size: 1e3, - steps: 60 - }, - minute: { - common: true, - size: 6e4, - steps: 60 - }, - hour: { - common: true, - size: 36e5, - steps: 24 - }, - day: { - common: true, - size: 864e5, - steps: 30 - }, - week: { - common: false, - size: 6048e5, - steps: 4 - }, - month: { - common: true, - size: 2628e6, - steps: 12 - }, - quarter: { - common: false, - size: 7884e6, - steps: 4 - }, - year: { - common: true, - size: 3154e7 - } -}; -var UNITS = /* @__PURE__ */ Object.keys(INTERVALS); -function sorter(a, b) { - return a - b; -} -function parse(scale, input) { - if (isNullOrUndef(input)) { - return null; - } - const adapter = scale._adapter; - const { parser, round: round2, isoWeekday } = scale._parseOpts; - let value = input; - if (typeof parser === "function") { - value = parser(value); - } - if (!isNumberFinite(value)) { - value = typeof parser === "string" ? adapter.parse(value, parser) : adapter.parse(value); - } - if (value === null) { - return null; - } - if (round2) { - value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2); - } - return +value; -} -function determineUnitForAutoTicks(minUnit, min, max, capacity) { - const ilen = UNITS.length; - for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { - const interval = INTERVALS[UNITS[i]]; - const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER; - if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { - return UNITS[i]; - } - } - return UNITS[ilen - 1]; -} -function determineUnitForFormatting(scale, numTicks, minUnit, min, max) { - for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) { - const unit = UNITS[i]; - if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) { - return unit; - } - } - return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; -} -function determineMajorUnit(unit) { - for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { - if (INTERVALS[UNITS[i]].common) { - return UNITS[i]; - } - } -} -function addTick(ticks, time, timestamps) { - if (!timestamps) { - ticks[time] = true; - } else if (timestamps.length) { - const { lo, hi } = _lookup(timestamps, time); - const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi]; - ticks[timestamp] = true; - } -} -function setMajorTicks(scale, ticks, map3, majorUnit) { - const adapter = scale._adapter; - const first = +adapter.startOf(ticks[0].value, majorUnit); - const last = ticks[ticks.length - 1].value; - let major, index; - for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) { - index = map3[major]; - if (index >= 0) { - ticks[index].major = true; - } - } - return ticks; -} -function ticksFromTimestamps(scale, values, majorUnit) { - const ticks = []; - const map3 = {}; - const ilen = values.length; - let i, value; - for (i = 0; i < ilen; ++i) { - value = values[i]; - map3[value] = i; - ticks.push({ - value, - major: false - }); - } - return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit); -} -var TimeScale = class extends Scale { - constructor(props) { - super(props); - this._cache = { - data: [], - labels: [], - all: [] - }; - this._unit = "day"; - this._majorUnit = void 0; - this._offsets = {}; - this._normalized = false; - this._parseOpts = void 0; - } - init(scaleOpts, opts = {}) { - const time = scaleOpts.time || (scaleOpts.time = {}); - const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date); - adapter.init(opts); - mergeIf(time.displayFormats, adapter.formats()); - this._parseOpts = { - parser: time.parser, - round: time.round, - isoWeekday: time.isoWeekday - }; - super.init(scaleOpts); - this._normalized = opts.normalized; - } - parse(raw, index) { - if (raw === void 0) { - return null; - } - return parse(this, raw); - } - beforeLayout() { - super.beforeLayout(); - this._cache = { - data: [], - labels: [], - all: [] - }; - } - determineDataLimits() { - const options = this.options; - const adapter = this._adapter; - const unit = options.time.unit || "day"; - let { min, max, minDefined, maxDefined } = this.getUserBounds(); - function _applyBounds(bounds) { - if (!minDefined && !isNaN(bounds.min)) { - min = Math.min(min, bounds.min); - } - if (!maxDefined && !isNaN(bounds.max)) { - max = Math.max(max, bounds.max); - } - } - if (!minDefined || !maxDefined) { - _applyBounds(this._getLabelBounds()); - if (options.bounds !== "ticks" || options.ticks.source !== "labels") { - _applyBounds(this.getMinMax(false)); - } - } - min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); - max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; - this.min = Math.min(min, max - 1); - this.max = Math.max(min + 1, max); - } - _getLabelBounds() { - const arr = this.getLabelTimestamps(); - let min = Number.POSITIVE_INFINITY; - let max = Number.NEGATIVE_INFINITY; - if (arr.length) { - min = arr[0]; - max = arr[arr.length - 1]; - } - return { - min, - max - }; - } - buildTicks() { - const options = this.options; - const timeOpts = options.time; - const tickOpts = options.ticks; - const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate(); - if (options.bounds === "ticks" && timestamps.length) { - this.min = this._userMin || timestamps[0]; - this.max = this._userMax || timestamps[timestamps.length - 1]; - } - const min = this.min; - const max = this.max; - const ticks = _filterBetween(timestamps, min, max); - this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max)); - this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit); - this.initOffsets(timestamps); - if (options.reverse) { - ticks.reverse(); - } - return ticksFromTimestamps(this, ticks, this._majorUnit); - } - afterAutoSkip() { - if (this.options.offsetAfterAutoskip) { - this.initOffsets(this.ticks.map((tick) => +tick.value)); - } - } - initOffsets(timestamps = []) { - let start = 0; - let end = 0; - let first, last; - if (this.options.offset && timestamps.length) { - first = this.getDecimalForValue(timestamps[0]); - if (timestamps.length === 1) { - start = 1 - first; - } else { - start = (this.getDecimalForValue(timestamps[1]) - first) / 2; - } - last = this.getDecimalForValue(timestamps[timestamps.length - 1]); - if (timestamps.length === 1) { - end = last; - } else { - end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2; - } - } - const limit = timestamps.length < 3 ? 0.5 : 0.25; - start = _limitValue(start, 0, limit); - end = _limitValue(end, 0, limit); - this._offsets = { - start, - end, - factor: 1 / (start + 1 + end) - }; - } - _generate() { - const adapter = this._adapter; - const min = this.min; - const max = this.max; - const options = this.options; - const timeOpts = options.time; - const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min)); - const stepSize = valueOrDefault(options.ticks.stepSize, 1); - const weekday = minor === "week" ? timeOpts.isoWeekday : false; - const hasWeekday = isNumber(weekday) || weekday === true; - const ticks = {}; - let first = min; - let time, count; - if (hasWeekday) { - first = +adapter.startOf(first, "isoWeek", weekday); - } - first = +adapter.startOf(first, hasWeekday ? "day" : minor); - if (adapter.diff(max, min, minor) > 1e5 * stepSize) { - throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor); - } - const timestamps = options.ticks.source === "data" && this.getDataTimestamps(); - for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) { - addTick(ticks, time, timestamps); - } - if (time === max || options.bounds === "ticks" || count === 1) { - addTick(ticks, time, timestamps); - } - return Object.keys(ticks).sort((a, b) => a - b).map((x) => +x); - } - getLabelForValue(value) { - const adapter = this._adapter; - const timeOpts = this.options.time; - if (timeOpts.tooltipFormat) { - return adapter.format(value, timeOpts.tooltipFormat); - } - return adapter.format(value, timeOpts.displayFormats.datetime); - } - format(value, format) { - const options = this.options; - const formats = options.time.displayFormats; - const unit = this._unit; - const fmt = format || formats[unit]; - return this._adapter.format(value, fmt); - } - _tickFormatFunction(time, index, ticks, format) { - const options = this.options; - const formatter = options.ticks.callback; - if (formatter) { - return callback(formatter, [ - time, - index, - ticks - ], this); - } - const formats = options.time.displayFormats; - const unit = this._unit; - const majorUnit = this._majorUnit; - const minorFormat = unit && formats[unit]; - const majorFormat = majorUnit && formats[majorUnit]; - const tick = ticks[index]; - const major = majorUnit && majorFormat && tick && tick.major; - return this._adapter.format(time, format || (major ? majorFormat : minorFormat)); - } - generateTickLabels(ticks) { - let i, ilen, tick; - for (i = 0, ilen = ticks.length; i < ilen; ++i) { - tick = ticks[i]; - tick.label = this._tickFormatFunction(tick.value, i, ticks); - } - } - getDecimalForValue(value) { - return value === null ? NaN : (value - this.min) / (this.max - this.min); - } - getPixelForValue(value) { - const offsets = this._offsets; - const pos = this.getDecimalForValue(value); - return this.getPixelForDecimal((offsets.start + pos) * offsets.factor); - } - getValueForPixel(pixel) { - const offsets = this._offsets; - const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; - return this.min + pos * (this.max - this.min); - } - _getLabelSize(label) { - const ticksOpts = this.options.ticks; - const tickLabelWidth = this.ctx.measureText(label).width; - const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation); - const cosRotation = Math.cos(angle); - const sinRotation = Math.sin(angle); - const tickFontSize = this._resolveTickFontOptions(0).size; - return { - w: tickLabelWidth * cosRotation + tickFontSize * sinRotation, - h: tickLabelWidth * sinRotation + tickFontSize * cosRotation - }; - } - _getLabelCapacity(exampleTime) { - const timeOpts = this.options.time; - const displayFormats = timeOpts.displayFormats; - const format = displayFormats[timeOpts.unit] || displayFormats.millisecond; - const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [ - exampleTime - ], this._majorUnit), format); - const size = this._getLabelSize(exampleLabel); - const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1; - return capacity > 0 ? capacity : 1; - } - getDataTimestamps() { - let timestamps = this._cache.data || []; - let i, ilen; - if (timestamps.length) { - return timestamps; - } - const metas = this.getMatchingVisibleMetas(); - if (this._normalized && metas.length) { - return this._cache.data = metas[0].controller.getAllParsedValues(this); - } - for (i = 0, ilen = metas.length; i < ilen; ++i) { - timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this)); - } - return this._cache.data = this.normalize(timestamps); - } - getLabelTimestamps() { - const timestamps = this._cache.labels || []; - let i, ilen; - if (timestamps.length) { - return timestamps; - } - const labels = this.getLabels(); - for (i = 0, ilen = labels.length; i < ilen; ++i) { - timestamps.push(parse(this, labels[i])); - } - return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps); - } - normalize(values) { - return _arrayUnique(values.sort(sorter)); - } -}; -__publicField(TimeScale, "id", "time"); -__publicField(TimeScale, "defaults", { - bounds: "data", - adapters: {}, - time: { - parser: false, - unit: false, - round: false, - isoWeekday: false, - minUnit: "millisecond", - displayFormats: {} - }, - ticks: { - source: "auto", - callback: false, - major: { - enabled: false - } - } -}); -function interpolate3(table, val, reverse) { - let lo = 0; - let hi = table.length - 1; - let prevSource, nextSource, prevTarget, nextTarget; - if (reverse) { - if (val >= table[lo].pos && val <= table[hi].pos) { - ({ lo, hi } = _lookupByKey(table, "pos", val)); - } - ({ pos: prevSource, time: prevTarget } = table[lo]); - ({ pos: nextSource, time: nextTarget } = table[hi]); - } else { - if (val >= table[lo].time && val <= table[hi].time) { - ({ lo, hi } = _lookupByKey(table, "time", val)); - } - ({ time: prevSource, pos: prevTarget } = table[lo]); - ({ time: nextSource, pos: nextTarget } = table[hi]); - } - const span = nextSource - prevSource; - return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget; -} -var TimeSeriesScale = class extends TimeScale { - constructor(props) { - super(props); - this._table = []; - this._minPos = void 0; - this._tableRange = void 0; - } - initOffsets() { - const timestamps = this._getTimestampsForTable(); - const table = this._table = this.buildLookupTable(timestamps); - this._minPos = interpolate3(table, this.min); - this._tableRange = interpolate3(table, this.max) - this._minPos; - super.initOffsets(timestamps); - } - buildLookupTable(timestamps) { - const { min, max } = this; - const items = []; - const table = []; - let i, ilen, prev, curr, next; - for (i = 0, ilen = timestamps.length; i < ilen; ++i) { - curr = timestamps[i]; - if (curr >= min && curr <= max) { - items.push(curr); - } - } - if (items.length < 2) { - return [ - { - time: min, - pos: 0 - }, - { - time: max, - pos: 1 - } - ]; - } - for (i = 0, ilen = items.length; i < ilen; ++i) { - next = items[i + 1]; - prev = items[i - 1]; - curr = items[i]; - if (Math.round((next + prev) / 2) !== curr) { - table.push({ - time: curr, - pos: i / (ilen - 1) - }); - } - } - return table; - } - _getTimestampsForTable() { - let timestamps = this._cache.all || []; - if (timestamps.length) { - return timestamps; - } - const data = this.getDataTimestamps(); - const label = this.getLabelTimestamps(); - if (data.length && label.length) { - timestamps = this.normalize(data.concat(label)); - } else { - timestamps = data.length ? data : label; - } - timestamps = this._cache.all = timestamps; - return timestamps; - } - getDecimalForValue(value) { - return (interpolate3(this._table, value) - this._minPos) / this._tableRange; - } - getValueForPixel(pixel) { - const offsets = this._offsets; - const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; - return interpolate3(this._table, decimal * this._tableRange + this._minPos, true); - } -}; -__publicField(TimeSeriesScale, "id", "timeseries"); -__publicField(TimeSeriesScale, "defaults", TimeScale.defaults); - -// src/stats-modal.tsx -Chart.register( - BarElement, - BarController, - plugin_legend, - plugin_title, - plugin_tooltip, - plugin_subtitle, - CategoryScale, - LinearScale, - PieController, - ArcElement -); -var StatsModal = class extends import_obsidian4.Modal { - constructor(app2, plugin) { - super(app2); - this.plugin = plugin; - this.titleEl.setText(`${t("STATS_TITLE")} `); - this.titleEl.addClass("sr-centered"); - this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("select", { id: "sr-chart-period" }, /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "month", selected: true }, t("MONTH")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "quarter" }, t("QUARTER")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "year" }, t("YEAR")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "lifetime" }, t("LIFETIME"))); - this.modalEl.style.height = "100%"; - this.modalEl.style.width = "100%"; - if (import_obsidian4.Platform.isMobile) { - this.contentEl.style.display = "block"; - } - } - onOpen() { - const { contentEl } = this; - contentEl.style.textAlign = "center"; - let maxN = Math.max(...getKeysPreserveType(this.plugin.dueDatesFlashcards)); - for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) { - if (!Object.prototype.hasOwnProperty.call(this.plugin.dueDatesFlashcards, dueOffset)) { - this.plugin.dueDatesFlashcards[dueOffset] = 0; - } - } - const dueDatesFlashcardsCopy = { 0: 0 }; - for (const [dueOffset, dueCount] of getTypedObjectEntries(this.plugin.dueDatesFlashcards)) { - if (dueOffset <= 0) { - dueDatesFlashcardsCopy[0] += dueCount; - } else { - dueDatesFlashcardsCopy[dueOffset] = dueCount; - } - } - const cardStats = this.plugin.cardStats; - const scheduledCount = cardStats.youngCount + cardStats.matureCount; - maxN = Math.max(maxN, 1); - contentEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("div", null, /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "forecastChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "forecastChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "intervalsChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "intervalsChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "easesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "easesChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "cardTypesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "cardTypesChartSummary" })); - createStatsChart( - "bar", - "forecastChart", - t("FORECAST"), - t("FORECAST_DESC"), - Object.keys(dueDatesFlashcardsCopy), - Object.values(dueDatesFlashcardsCopy), - t("REVIEWS_PER_DAY", { avg: (scheduledCount / maxN).toFixed(1) }), - t("SCHEDULED"), - t("DAYS"), - t("NUMBER_OF_CARDS") - ); - maxN = Math.max(...getKeysPreserveType(cardStats.intervals)); - for (let interval = 0; interval <= maxN; interval++) { - if (!Object.prototype.hasOwnProperty.call(cardStats.intervals, interval)) { - cardStats.intervals[interval] = 0; - } - } - const average_interval = textInterval( - Math.round( - getTypedObjectEntries(cardStats.intervals).map(([interval, count]) => interval * count).reduce((a, b) => a + b, 0) / scheduledCount * 10 - ) / 10 || 0, - false - ), longest_interval = textInterval( - Math.max(...getKeysPreserveType(cardStats.intervals)) || 0, - false - ); - createStatsChart( - "bar", - "intervalsChart", - t("INTERVALS"), - t("INTERVALS_DESC"), - Object.keys(cardStats.intervals), - Object.values(cardStats.intervals), - t("INTERVALS_SUMMARY", { avg: average_interval, longest: longest_interval }), - t("COUNT"), - t("DAYS"), - t("NUMBER_OF_CARDS") - ); - const eases = getKeysPreserveType(cardStats.eases); - for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) { - if (!Object.prototype.hasOwnProperty.call(cardStats.eases, ease)) { - cardStats.eases[ease] = 0; - } - } - const average_ease = Math.round( - getTypedObjectEntries(cardStats.eases).map(([ease, count]) => ease * count).reduce((a, b) => a + b, 0) / scheduledCount - ) || 0; - createStatsChart( - "bar", - "easesChart", - t("EASES"), - "", - Object.keys(cardStats.eases), - Object.values(cardStats.eases), - t("EASES_SUMMARY", { avgEase: average_ease }), - t("COUNT"), - t("EASES"), - t("NUMBER_OF_CARDS") - ); - const totalCardsCount = this.plugin.deckTree.totalFlashcards; - createStatsChart( - "pie", - "cardTypesChart", - t("CARD_TYPES"), - t("CARD_TYPES_DESC"), - [ - `${t("CARD_TYPE_NEW")} - ${Math.round( - cardStats.newCount / totalCardsCount * 100 - )}%`, - `${t("CARD_TYPE_YOUNG")} - ${Math.round( - cardStats.youngCount / totalCardsCount * 100 - )}%`, - `${t("CARD_TYPE_MATURE")} - ${Math.round( - cardStats.matureCount / totalCardsCount * 100 - )}%` - ], - [cardStats.newCount, cardStats.youngCount, cardStats.matureCount], - t("CARD_TYPES_SUMMARY", { totalCardsCount }) - ); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -}; -function createStatsChart(type, canvasId, title, subtitle, labels, data, summary, seriesTitle = "", xAxisTitle = "", yAxisTitle = "") { - const style = getComputedStyle(document.body); - const textColor = style.getPropertyValue("--text-normal"); - let scales = {}, backgroundColor = ["#2196f3"]; - if (type !== "pie") { - scales = { - x: { - title: { - display: true, - text: xAxisTitle, - color: textColor - } - }, - y: { - title: { - display: true, - text: yAxisTitle, - color: textColor - } - } - }; - } else { - backgroundColor = ["#2196f3", "#4caf50", "green"]; - } - const shouldFilter = canvasId === "forecastChart" || canvasId === "intervalsChart"; - const statsChart = new Chart(document.getElementById(canvasId), { - type, - data: { - labels: shouldFilter ? labels.slice(0, 31) : labels, - datasets: [ - { - label: seriesTitle, - backgroundColor, - data: shouldFilter ? data.slice(0, 31) : data - } - ] - }, - options: { - scales, - plugins: { - title: { - display: true, - text: title, - font: { - size: 22 - }, - color: textColor - }, - subtitle: { - display: true, - text: subtitle, - font: { - size: 16, - style: "italic" - }, - color: textColor - }, - legend: { - display: false - } - }, - aspectRatio: 2 - } - }); - if (shouldFilter) { - const chartPeriodEl = document.getElementById("sr-chart-period"); - chartPeriodEl.addEventListener("click", () => { - let filteredLabels, filteredData; - const chartPeriod = chartPeriodEl.value; - if (chartPeriod === "month") { - filteredLabels = labels.slice(0, 31); - filteredData = data.slice(0, 31); - } else if (chartPeriod === "quarter") { - filteredLabels = labels.slice(0, 91); - filteredData = data.slice(0, 91); - } else if (chartPeriod === "year") { - filteredLabels = labels.slice(0, 366); - filteredData = data.slice(0, 366); - } else { - filteredLabels = labels; - filteredData = data; - } - statsChart.data.labels = filteredLabels; - statsChart.data.datasets[0] = { - label: seriesTitle, - backgroundColor, - data: filteredData - }; - statsChart.update(); - }); - } - document.getElementById(`${canvasId}Summary`).innerText = summary; -} - -// src/sidebar.ts -var import_obsidian5 = require("obsidian"); -var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view"; -var ReviewQueueListView = class extends import_obsidian5.ItemView { - constructor(leaf, plugin) { - super(leaf); - this.plugin = plugin; - this.registerEvent(this.app.workspace.on("file-open", () => this.redraw())); - this.registerEvent(this.app.vault.on("rename", () => this.redraw())); - } - getViewType() { - return REVIEW_QUEUE_VIEW_TYPE; - } - getDisplayText() { - return t("NOTES_REVIEW_QUEUE"); - } - getIcon() { - return "SpacedRepIcon"; - } - onHeaderMenu(menu) { - menu.addItem((item) => { - item.setTitle(t("CLOSE")).setIcon("cross").onClick(() => { - this.app.workspace.detachLeavesOfType(REVIEW_QUEUE_VIEW_TYPE); - }); - }); - } - redraw() { - const activeFile = this.app.workspace.getActiveFile(); - const rootEl = createDiv("nav-folder mod-root"); - const childrenEl = rootEl.createDiv("nav-folder-children"); - for (const deckKey in this.plugin.reviewDecks) { - const deck = this.plugin.reviewDecks[deckKey]; - const deckCollapsed = !deck.activeFolders.has(deck.deckName); - const deckFolderEl = this.createRightPaneFolder( - childrenEl, - deckKey, - deckCollapsed, - false, - deck - ).getElementsByClassName("nav-folder-children")[0]; - if (deck.newNotes.length > 0) { - const newNotesFolderEl = this.createRightPaneFolder( - deckFolderEl, - t("NEW"), - !deck.activeFolders.has(t("NEW")), - deckCollapsed, - deck - ); - for (const newFile of deck.newNotes) { - const fileIsOpen = activeFile && newFile.path === activeFile.path; - if (fileIsOpen) { - deck.activeFolders.add(deck.deckName); - deck.activeFolders.add(t("NEW")); - this.changeFolderIconToExpanded(newNotesFolderEl); - this.changeFolderIconToExpanded(deckFolderEl); - } - this.createRightPaneFile( - newNotesFolderEl, - newFile, - fileIsOpen, - !deck.activeFolders.has(t("NEW")), - deck, - this.plugin - ); - } - } - if (deck.scheduledNotes.length > 0) { - const now = Date.now(); - let currUnix = -1; - let schedFolderEl = null, folderTitle = ""; - const maxDaysToRender = this.plugin.data.settings.maxNDaysNotesReviewQueue; - for (const sNote of deck.scheduledNotes) { - if (sNote.dueUnix != currUnix) { - const nDays = Math.ceil((sNote.dueUnix - now) / (24 * 3600 * 1e3)); - if (nDays > maxDaysToRender) { - break; - } - if (nDays === -1) { - folderTitle = t("YESTERDAY"); - } else if (nDays === 0) { - folderTitle = t("TODAY"); - } else if (nDays === 1) { - folderTitle = t("TOMORROW"); - } else { - folderTitle = new Date(sNote.dueUnix).toDateString(); - } - schedFolderEl = this.createRightPaneFolder( - deckFolderEl, - folderTitle, - !deck.activeFolders.has(folderTitle), - deckCollapsed, - deck - ); - currUnix = sNote.dueUnix; - } - const fileIsOpen = activeFile && sNote.note.path === activeFile.path; - if (fileIsOpen) { - deck.activeFolders.add(deck.deckName); - deck.activeFolders.add(folderTitle); - this.changeFolderIconToExpanded(schedFolderEl); - this.changeFolderIconToExpanded(deckFolderEl); - } - this.createRightPaneFile( - schedFolderEl, - sNote.note, - fileIsOpen, - !deck.activeFolders.has(folderTitle), - deck, - this.plugin - ); - } - } - } - const contentEl = this.containerEl.children[1]; - contentEl.empty(); - contentEl.appendChild(rootEl); - } - createRightPaneFolder(parentEl, folderTitle, collapsed, hidden, deck) { - const folderEl = parentEl.createDiv("nav-folder"); - const folderTitleEl = folderEl.createDiv("nav-folder-title"); - const childrenEl = folderEl.createDiv("nav-folder-children"); - const collapseIconEl = folderTitleEl.createDiv( - "nav-folder-collapse-indicator collapse-icon" - ); - collapseIconEl.innerHTML = COLLAPSE_ICON; - if (collapsed) { - collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; - } - folderTitleEl.createDiv("nav-folder-title-content").setText(folderTitle); - if (hidden) { - folderEl.style.display = "none"; - } - folderTitleEl.onClickEvent(() => { - for (const child of childrenEl.childNodes) { - if (child.style.display === "block" || child.style.display === "") { - child.style.display = "none"; - collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; - deck.activeFolders.delete(folderTitle); - } else { - child.style.display = "block"; - collapseIconEl.childNodes[0].style.transform = ""; - deck.activeFolders.add(folderTitle); - } - } - }); - return folderEl; - } - createRightPaneFile(folderEl, file, fileElActive, hidden, deck, plugin) { - const navFileEl = folderEl.getElementsByClassName("nav-folder-children")[0].createDiv("nav-file"); - if (hidden) { - navFileEl.style.display = "none"; - } - const navFileTitle = navFileEl.createDiv("nav-file-title"); - if (fileElActive) { - navFileTitle.addClass("is-active"); - } - navFileTitle.createDiv("nav-file-title-content").setText(file.basename); - navFileTitle.addEventListener( - "click", - async (event) => { - event.preventDefault(); - plugin.lastSelectedReviewDeck = deck.deckName; - await this.app.workspace.getLeaf().openFile(file); - return false; - }, - false - ); - navFileTitle.addEventListener( - "contextmenu", - (event) => { - event.preventDefault(); - const fileMenu = new import_obsidian5.Menu(); - this.app.workspace.trigger("file-menu", fileMenu, file, "my-context-menu", null); - fileMenu.showAtPosition({ - x: event.pageX, - y: event.pageY - }); - return false; - }, - false - ); - } - changeFolderIconToExpanded(folderEl) { - const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator"); - collapseIconEl.childNodes[0].style.transform = ""; - } -}; - -// src/review-deck.ts -var import_obsidian6 = require("obsidian"); -var ReviewDeck = class { - constructor(name) { - this.newNotes = []; - this.scheduledNotes = []; - this.dueNotesCount = 0; - this.deckName = name; - this.activeFolders = /* @__PURE__ */ new Set([this.deckName, t("TODAY")]); - } - sortNotes(pageranks) { - this.newNotes = this.newNotes.sort( - (a, b) => (pageranks[b.path] || 0) - (pageranks[a.path] || 0) - ); - this.scheduledNotes = this.scheduledNotes.sort((a, b) => { - const result = a.dueUnix - b.dueUnix; - if (result != 0) { - return result; - } - return (pageranks[b.note.path] || 0) - (pageranks[a.note.path] || 0); - }); - } -}; -var ReviewDeckSelectionModal = class extends import_obsidian6.FuzzySuggestModal { - constructor(app2, deckKeys) { - super(app2); - this.deckKeys = []; - this.deckKeys = deckKeys; - } - getItems() { - return this.deckKeys; - } - getItemText(item) { - return item; - } - onChooseItem(deckKey, _) { - this.close(); - this.submitCallback(deckKey); - } -}; - -// src/parser.ts -function parse2(text, singlelineCardSeparator, singlelineReversedCardSeparator, multilineCardSeparator, multilineReversedCardSeparator, convertHighlightsToClozes, convertBoldTextToClozes, convertCurlyBracketsToClozes) { - let cardText = ""; - const cards = []; - let cardType = null; - let lineNo = 0; - const lines = text.replaceAll("\r\n", "\n").split("\n"); - for (let i = 0; i < lines.length; i++) { - if (lines[i].length === 0) { - if (cardType) { - cards.push([cardType, cardText, lineNo]); - cardType = null; - } - cardText = ""; - continue; - } else if (lines[i].startsWith("")) - i++; - i++; - continue; - } - if (cardText.length > 0) { - cardText += "\n"; - } - cardText += lines[i]; - if (lines[i].includes(singlelineReversedCardSeparator) || lines[i].includes(singlelineCardSeparator)) { - cardType = lines[i].includes(singlelineReversedCardSeparator) ? 1 /* SingleLineReversed */ : 0 /* SingleLineBasic */; - cardText = lines[i]; - lineNo = i; - if (i + 1 < lines.length && lines[i + 1].startsWith(""; - const replacementRegex = new RegExp(escapeRegexString(cardText), "gm"); - fileText = fileText.replace(replacementRegex, () => newCardText); - fileChanged = true; - } - const context = settings.showContextInCards ? getCardContext(lineNo, headings, note.basename) : ""; - const siblings = []; - for (let i = 0; i < siblingMatches.length; i++) { - const front = siblingMatches[i][0].trim(), back = siblingMatches[i][1].trim(); - const cardObj = { - isDue: i < scheduling.length, - isReDue: false, - note, - lineNo, - front, - back, - cardText, - context, - cardType, - siblingIdx: i, - siblings, - editLater: false - }; - if (ignoreStats) { - this.cardStats.newCount++; - cardObj.isDue = true; - this.deckTree.insertFlashcard([...deckPath], cardObj); - } else if (i < scheduling.length) { - const dueUnix = window.moment(scheduling[i][1], ["YYYY-MM-DD", "DD-MM-YYYY", t("DATE_SCHED_FMT")]).valueOf(); - const nDays = Math.ceil((dueUnix - now) / (24 * 3600 * 1e3)); - if (!Object.prototype.hasOwnProperty.call(this.dueDatesFlashcards, nDays)) { - this.dueDatesFlashcards[nDays] = 0; - } - this.dueDatesFlashcards[nDays]++; - const interval = parseInt(scheduling[i][2]), ease = parseInt(scheduling[i][3]); - if (!Object.prototype.hasOwnProperty.call(this.cardStats.intervals, interval)) { - this.cardStats.intervals[interval] = 0; - } - this.cardStats.intervals[interval]++; - if (!Object.prototype.hasOwnProperty.call(this.cardStats.eases, ease)) { - this.cardStats.eases[ease] = 0; - } - this.cardStats.eases[ease]++; - totalNoteEase += ease; - scheduledCount++; - if (interval >= 32) { - this.cardStats.matureCount++; - } else { - this.cardStats.youngCount++; - } - if (this.data.buryList.includes(cardTextHash)) { - this.deckTree.countFlashcard([...deckPath]); - continue; - } - if (dueUnix <= now) { - cardObj.interval = interval; - cardObj.ease = ease; - cardObj.delayBeforeReview = now - dueUnix; - this.deckTree.insertFlashcard([...deckPath], cardObj); - } else { - this.deckTree.countFlashcard([...deckPath]); - continue; - } - } else { - this.cardStats.newCount++; - if (this.data.buryList.includes(cyrb53(cardText))) { - this.deckTree.countFlashcard([...deckPath]); - continue; - } - this.deckTree.insertFlashcard([...deckPath], cardObj); - } - siblings.push(cardObj); - } - } - if (fileChanged) { - await this.app.vault.modify(note, fileText); - } - if (scheduledCount > 0) { - const flashcardsInNoteAvgEase = totalNoteEase / scheduledCount; - const flashcardContribution = Math.min( - 1, - Math.log(scheduledCount + 0.5) / Math.log(64) - ); - return flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution); - } - return 0; - } - async loadPluginData() { - this.data = Object.assign({}, DEFAULT_DATA, await this.loadData()); - this.data.settings = Object.assign({}, DEFAULT_SETTINGS, this.data.settings); - } - async savePluginData() { - await this.saveData(this.data); - } - initView() { - this.registerView( - REVIEW_QUEUE_VIEW_TYPE, - (leaf) => this.reviewQueueView = new ReviewQueueListView(leaf, this) - ); - if (this.data.settings.enableNoteReviewPaneOnStartup && app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).length == 0) { - this.app.workspace.getRightLeaf(false).setViewState({ - type: REVIEW_QUEUE_VIEW_TYPE, - active: true - }); - } - } -}; -function getCardContext(cardLine, headings, note_title) { - const stack = []; - for (const heading of headings) { - if (heading.position.start.line > cardLine) { - break; - } - while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) { - stack.pop(); - } - stack.push(heading); - } - let context = `${note_title} > `; - for (const headingObj of stack) { - headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim(); - context += `${headingObj.heading} > `; - } - return context.slice(0, -3); -} -/*! Bundled license information: - -@kurkle/color/dist/color.esm.js: - (*! - * @kurkle/color v0.3.1 - * https://github.com/kurkle/color#readme - * (c) 2022 Jukka Kurkela - * Released under the MIT License - *) - -chart.js/dist/chunks/helpers.segment.js: - (*! - * Chart.js v4.3.0 - * https://www.chartjs.org - * (c) 2023 Chart.js Contributors - * Released under the MIT License - *) - -chart.js/dist/chart.js: - (*! - * Chart.js v4.3.0 - * https://www.chartjs.org - * (c) 2023 Chart.js Contributors - * Released under the MIT License - *) -*/ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL3BhZ2VyYW5rLmpzL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdmh0bWwvc3JjL2VtcHR5LXRhZ3MuanMiLCAibm9kZV9tb2R1bGVzL3ZodG1sL3NyYy92aHRtbC5qcyIsICJub2RlX21vZHVsZXMvaGVhcC9saWIvaGVhcC5qcyIsICJub2RlX21vZHVsZXMvaGVhcC9pbmRleC5qcyIsICJzcmMvbWFpbi50cyIsICJzcmMvc2V0dGluZ3MudHMiLCAic3JjL2xhbmcvaGVscGVycy50cyIsICJzcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAic3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9jei50cyIsICJzcmMvbGFuZy9sb2NhbGUvYm4udHMiLCAic3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9kZS50cyIsICJzcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAic3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9lcy50cyIsICJzcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAic3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9pZC50cyIsICJzcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAic3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9rby50cyIsICJzcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAic3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgInNyYy9sYW5nL2xvY2FsZS9uby50cyIsICJzcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAic3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgInNyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICJzcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAic3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgInNyYy9sYW5nL2xvY2FsZS90YS50cyIsICJzcmMvbGFuZy9sb2NhbGUvdGUudHMiLCAic3JjL2xhbmcvbG9jYWxlL3RoLnRzIiwgInNyYy9sYW5nL2xvY2FsZS90ci50cyIsICJzcmMvbGFuZy9sb2NhbGUvdWsudHMiLCAic3JjL2xhbmcvbG9jYWxlL3VyLnRzIiwgInNyYy9sYW5nL2xvY2FsZS92aS50cyIsICJzcmMvbGFuZy9sb2NhbGUvemgtY24udHMiLCAic3JjL2xhbmcvbG9jYWxlL3poLXR3LnRzIiwgInNyYy9mbGFzaGNhcmQtbW9kYWwudHN4IiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL3NjaGVkdWxpbmcudHMiLCAic3JjL3V0aWxzLnRzIiwgInNyYy9zdGF0cy1tb2RhbC50c3giLCAibm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY29yZS50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5tYXRoLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbGxlY3Rpb24udHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZXh0cmFzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmVhc2luZy50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb2xvci50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRpb25zLmRlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuZGVmYXVsdHMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50bC50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50aWNrcy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5zY2FsZS5kZWZhdWx0cy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kZWZhdWx0cy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jYW52YXMudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMub3B0aW9ucy50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb25maWcudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY3VydmUudHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZG9tLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmludGVycG9sYXRpb24udHMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMucnRsLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLnNlZ21lbnQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFuaW1hdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZGF0YXNldENvbnRyb2xsZXIuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmJhci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIuYnViYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5kb3VnaG51dC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIubGluZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIucG9sYXJBcmVhLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5waWUuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnJhZGFyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5zY2F0dGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFkYXB0ZXJzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmludGVyYWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5iYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGxhdGZvcm0vcGxhdGZvcm0uYmFzaWMuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5kb20uanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5lbGVtZW50LnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmF1dG9za2lwLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnR5cGVkUmVnaXN0cnkuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucmVnaXN0cnkuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucGx1Z2lucy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuY29udHJvbGxlci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYXJjLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5saW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5wb2ludC50cyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYmFyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uY29sb3JzLnRzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZGVjaW1hdGlvbi5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuc2VnbWVudC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuaGVscGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci5vcHRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuc3RhY2suanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvc2ltcGxlQXJjLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmRyYXdpbmcuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5sZWdlbmQuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50aXRsZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnN1YnRpdGxlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4udG9vbHRpcC5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5jYXRlZ29yeS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5saW5lYXJiYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLmxpbmVhci5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5sb2dhcml0aG1pYy5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5yYWRpYWxMaW5lYXIuanMiLCAibm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUudGltZS5qcyIsICJub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lc2VyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaW5kZXgudHMiLCAic3JjL3NpZGViYXIudHMiLCAic3JjL3Jldmlldy1kZWNrLnRzIiwgInNyYy9wYXJzZXIudHMiLCAic3JjL2ljb25z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QUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxJQUFJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxP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QU0sT0FBTyxVQUFVO0FBQ3hDO0FBQUEsSUFDSjtBQUVBLFdBQU8sTUFBTSxTQUFTLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQyxFQUFFLFNBQVMsUUFBUSxPQUFPO0FBQ3ZFLFlBQU0sSUFBSTtBQUFBLElBQ2Q7QUFFQSxVQUFNLEtBQUssT0FBTztBQUFBLEVBQ3RCO0FBRUEsTUFBSSxVQUFVLEdBQUc7QUFDakIsYUFBVyxjQUFjLE9BQU87QUFDNUIsZUFBVyxVQUFVLFdBQVcsUUFBUSxRQUFRLGVBQWUsRUFBRSxFQUFFLEtBQUs7QUFDeEUsZUFBVyxHQUFHLFdBQVc7QUFBQSxFQUM3QjtBQUNBLFNBQU8sUUFBUSxNQUFNLEdBQUcsRUFBRTtBQUM5QjsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgImNhbGxiYWNrIiwgImFscGhhIiwgImVzYyIsICJTdHJpbmciLCAic3RyIiwgInJlcGxhY2UiLCAibWFwIiwgInMiLCAic2V0SW5uZXJIVE1MQXR0ciIsICJET01BdHRyaWJ1dGVOYW1lcyIsICJzYW5pdGl6ZWQiLCAiaCIsICJuYW1lIiwgImF0dHJzIiwgInN0YWNrIiwgImkiLCAiYXJndW1lbnRzIiwgImxlbmd0aCIsICJwdXNoIiwgImNoaWxkcmVuIiwgInJldmVyc2UiLCAiZW1wdHlUYWdzIiwgImluZGV4T2YiLCAiX19odG1sIiwgImNoaWxkIiwgInBvcCIsICJtb2R1bGUiLCAiSGVhcCIsICJfaiIsICJfcmVmIiwgInJlcXVpcmVfaGVhcCIsICJtb2R1bGUiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJuYW1lcyIsICJjYWxsYmFjayIsICJhcHAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImgxIiwgImgyIiwgImFwcCIsICJyZXNvbHZlIiwgImNhbGxiYWNrIiwgInZhbHVlIiwgImgiLCAibGluayIsICJkZWNrIiwgIkhlYXAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF92aHRtbCIsICJoIiwgImgiLCAiaW50ZXJwb2xhdGUiLCAidCIsICJjb2xvciIsICJub29wIiwgInVpZCIsICJpZCIsICJpc051bGxPclVuZGVmIiwgInZhbHVlIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAidHlwZSIsICJPYmplY3QiLCAicHJvdG90eXBlIiwgInRvU3RyaW5nIiwgImNhbGwiLCAic2xpY2UiLCAiaXNPYmplY3QiLCAiaXNOdW1iZXJGaW5pdGUiLCAiTnVtYmVyIiwgImlzRmluaXRlIiwgImZpbml0ZU9yRGVmYXVsdCIsICJkZWZhdWx0VmFsdWUiLCAidmFsdWVPckRlZmF1bHQiLCAidG9QZXJjZW50YWdlIiwgImRpbWVuc2lvbiIsICJlbmRzV2l0aCIsICJwYXJzZUZsb2F0IiwgInRvRGltZW5zaW9uIiwgImNhbGxiYWNrIiwgImZuIiwgImFyZ3MiLCAidGhpc0FyZyIsICJhcHBseSIsICJlYWNoIiwgImxvb3BhYmxlIiwgInJldmVyc2UiLCAiaSIsICJsZW4iLCAia2V5cyIsICJsZW5ndGgiLCAiX2VsZW1lbnRzRXF1YWwiLCAiYTAiLCAiYTEiLCAiaWxlbiIsICJ2MCIsICJ2MSIsICJkYXRhc2V0SW5kZXgiLCAiaW5kZXgiLCAiY2xvbmUiLCAic291cmNlIiwgIm1hcCIsICJ0YXJnZXQiLCAiY3JlYXRlIiwgImtsZW4iLCAiayIsICJpc1ZhbGlkS2V5IiwgImtleSIsICJpbmRleE9mIiwgIl9tZXJnZXIiLCAib3B0aW9ucyIsICJ0dmFsIiwgInN2YWwiLCAibWVyZ2UiLCAic291cmNlcyIsICJtZXJnZXIiLCAiY3VycmVudCIsICJtZXJnZUlmIiwgIl9tZXJnZXJJZiIsICJoYXNPd25Qcm9wZXJ0eSIsICJrZXlSZXNvbHZlcnMiLCAidiIsICJ4IiwgIm8iLCAieSIsICJfc3BsaXRLZXkiLCAia2V5IiwgInBhcnRzIiwgInNwbGl0IiwgImtleXMiLCAidG1wIiwgInBhcnQiLCAiZW5kc1dpdGgiLCAic2xpY2UiLCAicHVzaCIsICJfZ2V0S2V5UmVzb2x2ZXIiLCAib2JqIiwgImsiLCAicmVzb2x2ZU9iamVjdEtleSIsICJyZXNvbHZlciIsICJfY2FwaXRhbGl6ZSIsICJzdHIiLCAiY2hhckF0IiwgInRvVXBwZXJDYXNlIiwgImRlZmluZWQiLCAidmFsdWUiLCAiaXNGdW5jdGlvbiIsICJzZXRzRXF1YWwiLCAiYSIsICJiIiwgInNpemUiLCAiaXRlbSIsICJoYXMiLCAiX2lzQ2xpY2tFdmVudCIsICJlIiwgInR5cGUiLCAiUEkiLCAiTWF0aCIsICJUQVUiLCAiUElUQVUiLCAiSU5GSU5JVFkiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIlJBRF9QRVJfREVHIiwgIkhBTEZfUEkiLCAiUVVBUlRFUl9QSSIsICJUV09fVEhJUkRTX1BJIiwgImxvZzEwIiwgInNpZ24iLCAiYWxtb3N0RXF1YWxzIiwgImVwc2lsb24iLCAiYWJzIiwgIm5pY2VOdW0iLCAicmFuZ2UiLCAicm91bmRlZFJhbmdlIiwgInJvdW5kIiwgIm5pY2VSYW5nZSIsICJwb3ciLCAiZmxvb3IiLCAiZnJhY3Rpb24iLCAibmljZUZyYWN0aW9uIiwgIl9mYWN0b3JpemUiLCAicmVzdWx0IiwgInNxcnQiLCAiaSIsICJzb3J0IiwgInBvcCIsICJpc051bWJlciIsICJuIiwgImlzTmFOIiwgInBhcnNlRmxvYXQiLCAiaXNGaW5pdGUiLCAiYWxtb3N0V2hvbGUiLCAicm91bmRlZCIsICJfc2V0TWluQW5kTWF4QnlLZXkiLCAiYXJyYXkiLCAidGFyZ2V0IiwgInByb3BlcnR5IiwgImlsZW4iLCAibGVuZ3RoIiwgIm1pbiIsICJtYXgiLCAidG9SYWRpYW5zIiwgImRlZ3JlZXMiLCAidG9EZWdyZWVzIiwgInJhZGlhbnMiLCAiX2RlY2ltYWxQbGFjZXMiLCAiaXNGaW5pdGVOdW1iZXIiLCAicCIsICJnZXRBbmdsZUZyb21Qb2ludCIsICJjZW50cmVQb2ludCIsICJhbmdsZVBvaW50IiwgImRpc3RhbmNlRnJvbVhDZW50ZXIiLCAiZGlzdGFuY2VGcm9tWUNlbnRlciIsICJyYWRpYWxEaXN0YW5jZUZyb21DZW50ZXIiLCAiYW5nbGUiLCAiYXRhbjIiLCAiZGlzdGFuY2UiLCAiZGlzdGFuY2VCZXR3ZWVuUG9pbnRzIiwgInB0MSIsICJwdDIiLCAiX25vcm1hbGl6ZUFuZ2xlIiwgImEiLCAiVEFVIiwgIl9hbmdsZUJldHdlZW4iLCAiYW5nbGUiLCAic3RhcnQiLCAiZW5kIiwgInNhbWVBbmdsZUlzRnVsbENpcmNsZSIsICJzIiwgImUiLCAiYW5nbGVUb1N0YXJ0IiwgImFuZ2xlVG9FbmQiLCAic3RhcnRUb0FuZ2xlIiwgImVuZFRvQW5nbGUiLCAiX2xpbWl0VmFsdWUiLCAidmFsdWUiLCAibWluIiwgIm1heCIsICJNYXRoIiwgIl9pbnQxNlJhbmdlIiwgIl9pc0JldHdlZW4iLCAiZXBzaWxvbiIsICJfbG9va3VwIiwgInRhYmxlIiwgImNtcCIsICJpbmRleCIsICJoaSIsICJsZW5ndGgiLCAibG8iLCAibWlkIiwgIl9sb29rdXBCeUtleSIsICJrZXkiLCAibGFzdCIsICJ0aSIsICJfcmxvb2t1cEJ5S2V5IiwgIl9maWx0ZXJCZXR3ZWVuIiwgInZhbHVlcyIsICJzbGljZSIsICJhcnJheUV2ZW50cyIsICJsaXN0ZW5BcnJheUV2ZW50cyIsICJhcnJheSIsICJsaXN0ZW5lciIsICJfY2hhcnRqcyIsICJsaXN0ZW5lcnMiLCAicHVzaCIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZm9yRWFjaCIsICJtZXRob2QiLCAiX2NhcGl0YWxpemUiLCAiYmFzZSIsICJhcmdzIiwgInJlcyIsICJhcHBseSIsICJvYmplY3QiLCAidW5saXN0ZW5BcnJheUV2ZW50cyIsICJzdHViIiwgImluZGV4T2YiLCAic3BsaWNlIiwgIl9hcnJheVVuaXF1ZSIsICJpdGVtcyIsICJzZXQiLCAiU2V0IiwgInNpemUiLCAiQXJyYXkiLCAiZnJvbSIsICJyZXF1ZXN0QW5pbUZyYW1lIiwgIndpbmRvdyIsICJjYWxsYmFjayIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAidGhyb3R0bGVkIiwgImZuIiwgInRoaXNBcmciLCAiYXJnc1RvVXNlIiwgInRpY2tpbmciLCAiYXJncyIsICJjYWxsIiwgImFwcGx5IiwgImRlYm91bmNlIiwgImRlbGF5IiwgInRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgInNldFRpbWVvdXQiLCAiX3RvTGVmdFJpZ2h0Q2VudGVyIiwgImFsaWduIiwgIl9hbGlnblN0YXJ0RW5kIiwgInN0YXJ0IiwgImVuZCIsICJfdGV4dFgiLCAibGVmdCIsICJyaWdodCIsICJydGwiLCAiY2hlY2siLCAiYXRFZGdlIiwgInQiLCAiZWxhc3RpY0luIiwgInMiLCAicCIsICJNYXRoIiwgInBvdyIsICJzaW4iLCAiVEFVIiwgImVsYXN0aWNPdXQiLCAiZWZmZWN0cyIsICJsaW5lYXIiLCAiZWFzZUluUXVhZCIsICJlYXNlT3V0UXVhZCIsICJlYXNlSW5PdXRRdWFkIiwgImVhc2VJbkN1YmljIiwgImVhc2VPdXRDdWJpYyIsICJlYXNlSW5PdXRDdWJpYyIsICJlYXNlSW5RdWFydCIsICJlYXNlT3V0UXVhcnQiLCAiZWFzZUluT3V0UXVhcnQiLCAiZWFzZUluUXVpbnQiLCAiZWFzZU91dFF1aW50IiwgImVhc2VJbk91dFF1aW50IiwgImVhc2VJblNpbmUiLCAiY29zIiwgIkhBTEZfUEkiLCAiZWFzZU91dFNpbmUiLCAiZWFzZUluT3V0U2luZSIsICJQSSIsICJlYXNlSW5FeHBvIiwgImVhc2VPdXRFeHBvIiwgImVhc2VJbk91dEV4cG8iLCAiZWFzZUluQ2lyYyIsICJzcXJ0IiwgImVhc2VPdXRDaXJjIiwgImVhc2VJbk91dENpcmMiLCAiZWFzZUluRWxhc3RpYyIsICJlYXNlT3V0RWxhc3RpYyIsICJlYXNlSW5PdXRFbGFzdGljIiwgImVhc2VJbkJhY2siLCAiZWFzZU91dEJhY2siLCAiZWFzZUluT3V0QmFjayIsICJlYXNlSW5Cb3VuY2UiLCAiZWFzZU91dEJvdW5jZSIsICJtIiwgImQiLCAiZWFzZUluT3V0Qm91bmNlIiwgImlzUGF0dGVybk9yR3JhZGllbnQiLCAidmFsdWUiLCAidHlwZSIsICJ0b1N0cmluZyIsICJjb2xvciIsICJDb2xvciIsICJnZXRIb3ZlckNvbG9yIiwgInNhdHVyYXRlIiwgImRhcmtlbiIsICJoZXhTdHJpbmciLCAibnVtYmVycyIsICJjb2xvcnMiLCAiYXBwbHlBbmltYXRpb25zRGVmYXVsdHMiLCAiZGVmYXVsdHMiLCAic2V0IiwgImRlbGF5IiwgInVuZGVmaW5lZCIsICJkdXJhdGlvbiIsICJlYXNpbmciLCAiZm4iLCAiZnJvbSIsICJsb29wIiwgInRvIiwgImRlc2NyaWJlIiwgIl9mYWxsYmFjayIsICJfaW5kZXhhYmxlIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAicHJvcGVydGllcyIsICJhY3RpdmUiLCAiYW5pbWF0aW9uIiwgInJlc2l6ZSIsICJzaG93IiwgImFuaW1hdGlvbnMiLCAidmlzaWJsZSIsICJoaWRlIiwgInYiLCAiYXBwbHlMYXlvdXRzRGVmYXVsdHMiLCAiYXV0b1BhZGRpbmciLCAicGFkZGluZyIsICJ0b3AiLCAicmlnaHQiLCAiYm90dG9tIiwgImxlZnQiLCAiaW50bENhY2hlIiwgIk1hcCIsICJnZXROdW1iZXJGb3JtYXQiLCAibG9jYWxlIiwgIm9wdGlvbnMiLCAiY2FjaGVLZXkiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiZm9ybWF0dGVyIiwgImdldCIsICJJbnRsIiwgIk51bWJlckZvcm1hdCIsICJmb3JtYXROdW1iZXIiLCAibnVtIiwgImZvcm1hdCIsICJmb3JtYXR0ZXJzIiwgInZhbHVlcyIsICJpc0FycmF5IiwgIm51bWVyaWMiLCAidGlja1ZhbHVlIiwgImluZGV4IiwgInRpY2tzIiwgImNoYXJ0IiwgIm5vdGF0aW9uIiwgImRlbHRhIiwgImxlbmd0aCIsICJtYXhUaWNrIiwgIm1heCIsICJhYnMiLCAiY2FsY3VsYXRlRGVsdGEiLCAibG9nRGVsdGEiLCAibG9nMTAiLCAibnVtRGVjaW1hbCIsICJpc05hTiIsICJtaW4iLCAiZmxvb3IiLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsICJPYmplY3QiLCAiYXNzaWduIiwgImxvZ2FyaXRobWljIiwgInJlbWFpbiIsICJzaWduaWZpY2FuZCIsICJpbmNsdWRlcyIsICJjYWxsIiwgImFwcGx5U2NhbGVEZWZhdWx0cyIsICJkaXNwbGF5IiwgIm9mZnNldCIsICJyZXZlcnNlIiwgImJlZ2luQXRaZXJvIiwgImJvdW5kcyIsICJncmFjZSIsICJncmlkIiwgImxpbmVXaWR0aCIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd1RpY2tzIiwgInRpY2tMZW5ndGgiLCAidGlja1dpZHRoIiwgIl9jdHgiLCAidGlja0NvbG9yIiwgImJvcmRlciIsICJkYXNoIiwgImRhc2hPZmZzZXQiLCAid2lkdGgiLCAidGl0bGUiLCAidGV4dCIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJtaXJyb3IiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VDb2xvciIsICJhdXRvU2tpcCIsICJhdXRvU2tpcFBhZGRpbmciLCAibGFiZWxPZmZzZXQiLCAiY2FsbGJhY2siLCAiVGlja3MiLCAibWlub3IiLCAibWFqb3IiLCAiYWxpZ24iLCAiY3Jvc3NBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcENvbG9yIiwgImJhY2tkcm9wUGFkZGluZyIsICJyb3V0ZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJjcmVhdGUiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0U2NvcGUiLCAibm9kZSIsICJrZXkiLCAia2V5cyIsICJzcGxpdCIsICJpIiwgIm4iLCAiayIsICJyb290IiwgInNjb3BlIiwgIm1lcmdlIiwgIkRlZmF1bHRzIiwgImNvbnN0cnVjdG9yIiwgIl9kZXNjcmlwdG9ycyIsICJfYXBwbGllcnMiLCAiYmFja2dyb3VuZENvbG9yIiwgImJvcmRlckNvbG9yIiwgImRhdGFzZXRzIiwgImRldmljZVBpeGVsUmF0aW8iLCAiY29udGV4dCIsICJwbGF0Zm9ybSIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImVsZW1lbnRzIiwgImV2ZW50cyIsICJmb250IiwgImZhbWlseSIsICJzaXplIiwgInN0eWxlIiwgImxpbmVIZWlnaHQiLCAid2VpZ2h0IiwgImhvdmVyIiwgImhvdmVyQmFja2dyb3VuZENvbG9yIiwgImN0eCIsICJob3ZlckJvcmRlckNvbG9yIiwgImhvdmVyQ29sb3IiLCAiaW5kZXhBeGlzIiwgImludGVyYWN0aW9uIiwgIm1vZGUiLCAiaW50ZXJzZWN0IiwgImluY2x1ZGVJbnZpc2libGUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAicGFyc2luZyIsICJwbHVnaW5zIiwgInJlc3BvbnNpdmUiLCAic2NhbGUiLCAic2NhbGVzIiwgInNob3dMaW5lIiwgImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwgImFwcGx5IiwgIm92ZXJyaWRlIiwgInRhcmdldFNjb3BlIiwgInRhcmdldE5hbWUiLCAic2NvcGVPYmplY3QiLCAidGFyZ2V0U2NvcGVPYmplY3QiLCAicHJpdmF0ZU5hbWUiLCAiZGVmaW5lUHJvcGVydGllcyIsICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgImxvY2FsIiwgInRhcmdldCIsICJpc09iamVjdCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcHBsaWVycyIsICJmb3JFYWNoIiwgInRvRm9udFN0cmluZyIsICJpc051bGxPclVuZGVmIiwgIl9tZWFzdXJlVGV4dCIsICJkYXRhIiwgImdjIiwgImxvbmdlc3QiLCAic3RyaW5nIiwgInRleHRXaWR0aCIsICJtZWFzdXJlVGV4dCIsICJwdXNoIiwgIl9sb25nZXN0VGV4dCIsICJhcnJheU9mVGhpbmdzIiwgImNhY2hlIiwgImdhcmJhZ2VDb2xsZWN0IiwgInNhdmUiLCAiaWxlbiIsICJqIiwgImpsZW4iLCAidGhpbmciLCAibmVzdGVkVGhpbmciLCAicmVzdG9yZSIsICJnY0xlbiIsICJzcGxpY2UiLCAiX2FsaWduUGl4ZWwiLCAicGl4ZWwiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAiaGFsZldpZHRoIiwgInJvdW5kIiwgImNsZWFyQ2FudmFzIiwgImNhbnZhcyIsICJnZXRDb250ZXh0IiwgInJlc2V0VHJhbnNmb3JtIiwgImNsZWFyUmVjdCIsICJoZWlnaHQiLCAiZHJhd1BvaW50IiwgIngiLCAieSIsICJkcmF3UG9pbnRMZWdlbmQiLCAidyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiY29ybmVyUmFkaXVzIiwgInhPZmZzZXRXIiwgInlPZmZzZXRXIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAicmFkaXVzIiwgInJhZCIsICJSQURfUEVSX0RFRyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImRyYXdJbWFnZSIsICJiZWdpblBhdGgiLCAiZWxsaXBzZSIsICJhcmMiLCAiY2xvc2VQYXRoIiwgIm1vdmVUbyIsICJUV09fVEhJUkRTX1BJIiwgImxpbmVUbyIsICJRVUFSVEVSX1BJIiwgIlNRUlQxXzIiLCAicmVjdCIsICJmaWxsIiwgImJvcmRlcldpZHRoIiwgInN0cm9rZSIsICJfaXNQb2ludEluQXJlYSIsICJwb2ludCIsICJhcmVhIiwgIm1hcmdpbiIsICJjbGlwQXJlYSIsICJjbGlwIiwgInVuY2xpcEFyZWEiLCAic2V0UmVuZGVyT3B0cyIsICJjdHgiLCAib3B0cyIsICJ0cmFuc2xhdGlvbiIsICJ0cmFuc2xhdGUiLCAiaXNOdWxsT3JVbmRlZiIsICJyb3RhdGlvbiIsICJyb3RhdGUiLCAiY29sb3IiLCAiZmlsbFN0eWxlIiwgInRleHRBbGlnbiIsICJ0ZXh0QmFzZWxpbmUiLCAiZGVjb3JhdGVUZXh0IiwgIngiLCAieSIsICJsaW5lIiwgInN0cmlrZXRocm91Z2giLCAidW5kZXJsaW5lIiwgIm1ldHJpY3MiLCAibWVhc3VyZVRleHQiLCAibGVmdCIsICJhY3R1YWxCb3VuZGluZ0JveExlZnQiLCAicmlnaHQiLCAiYWN0dWFsQm91bmRpbmdCb3hSaWdodCIsICJ0b3AiLCAiYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQiLCAiYm90dG9tIiwgImFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCIsICJ5RGVjb3JhdGlvbiIsICJzdHJva2VTdHlsZSIsICJiZWdpblBhdGgiLCAibGluZVdpZHRoIiwgImRlY29yYXRpb25XaWR0aCIsICJtb3ZlVG8iLCAibGluZVRvIiwgInN0cm9rZSIsICJkcmF3QmFja2Ryb3AiLCAib2xkQ29sb3IiLCAiZmlsbFJlY3QiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInJlbmRlclRleHQiLCAidGV4dCIsICJmb250IiwgImxpbmVzIiwgImlzQXJyYXkiLCAic3Ryb2tlV2lkdGgiLCAic3Ryb2tlQ29sb3IiLCAiaSIsICJzYXZlIiwgInN0cmluZyIsICJsZW5ndGgiLCAiYmFja2Ryb3AiLCAic3Ryb2tlVGV4dCIsICJtYXhXaWR0aCIsICJmaWxsVGV4dCIsICJOdW1iZXIiLCAibGluZUhlaWdodCIsICJyZXN0b3JlIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJyZWN0IiwgInciLCAiaCIsICJyYWRpdXMiLCAiYXJjIiwgInRvcExlZnQiLCAiSEFMRl9QSSIsICJQSSIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgInRvcFJpZ2h0IiwgIkxJTkVfSEVJR0hUIiwgIkZPTlRfU1RZTEUiLCAidG9MaW5lSGVpZ2h0IiwgInZhbHVlIiwgInNpemUiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJudW1iZXJPclplcm8iLCAidiIsICJfcmVhZFZhbHVlVG9Qcm9wcyIsICJwcm9wcyIsICJyZXQiLCAib2JqUHJvcHMiLCAiaXNPYmplY3QiLCAia2V5cyIsICJPYmplY3QiLCAicmVhZCIsICJwcm9wIiwgInZhbHVlT3JEZWZhdWx0IiwgInRvVFJCTCIsICJ0b1RSQkxDb3JuZXJzIiwgInRvUGFkZGluZyIsICJvYmoiLCAidG9Gb250IiwgIm9wdGlvbnMiLCAiZmFsbGJhY2siLCAiZGVmYXVsdHMiLCAicGFyc2VJbnQiLCAic3R5bGUiLCAiY29uc29sZSIsICJ3YXJuIiwgInVuZGVmaW5lZCIsICJmYW1pbHkiLCAid2VpZ2h0IiwgInRvRm9udFN0cmluZyIsICJyZXNvbHZlIiwgImlucHV0cyIsICJjb250ZXh0IiwgImluZGV4IiwgImluZm8iLCAiY2FjaGVhYmxlIiwgImlsZW4iLCAiX2FkZEdyYWNlIiwgIm1pbm1heCIsICJncmFjZSIsICJiZWdpbkF0WmVybyIsICJtaW4iLCAibWF4IiwgImNoYW5nZSIsICJ0b0RpbWVuc2lvbiIsICJrZWVwWmVybyIsICJhZGQiLCAiTWF0aCIsICJhYnMiLCAiY3JlYXRlQ29udGV4dCIsICJwYXJlbnRDb250ZXh0IiwgImFzc2lnbiIsICJjcmVhdGUiLCAiX2NyZWF0ZVJlc29sdmVyIiwgInNjb3BlcyIsICJwcmVmaXhlcyIsICJyb290U2NvcGVzIiwgImdldFRhcmdldCIsICJmaW5hbFJvb3RTY29wZXMiLCAiX3Jlc29sdmUiLCAiY2FjaGUiLCAiU3ltYm9sIiwgInRvU3RyaW5nVGFnIiwgIl9jYWNoZWFibGUiLCAiX3Njb3BlcyIsICJfcm9vdFNjb3BlcyIsICJfZmFsbGJhY2siLCAiX2dldFRhcmdldCIsICJvdmVycmlkZSIsICJzY29wZSIsICJQcm94eSIsICJkZWxldGVQcm9wZXJ0eSIsICJ0YXJnZXQiLCAiX2tleXMiLCAiZ2V0IiwgIl9jYWNoZWQiLCAiX3Jlc29sdmVXaXRoUHJlZml4ZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIlJlZmxlY3QiLCAiZ2V0UHJvdG90eXBlT2YiLCAiaGFzIiwgImdldEtleXNGcm9tQWxsU2NvcGVzIiwgImluY2x1ZGVzIiwgIm93bktleXMiLCAic2V0IiwgInN0b3JhZ2UiLCAiX3N0b3JhZ2UiLCAiX2F0dGFjaENvbnRleHQiLCAicHJveHkiLCAic3ViUHJveHkiLCAiZGVzY3JpcHRvckRlZmF1bHRzIiwgIl9wcm94eSIsICJfY29udGV4dCIsICJfc3ViUHJveHkiLCAiX3N0YWNrIiwgIlNldCIsICJfZGVzY3JpcHRvcnMiLCAic2V0Q29udGV4dCIsICJyZWNlaXZlciIsICJfcmVzb2x2ZVdpdGhDb250ZXh0IiwgImFsbEtleXMiLCAiZW51bWVyYWJsZSIsICJjb25maWd1cmFibGUiLCAic2NyaXB0YWJsZSIsICJpbmRleGFibGUiLCAiX3NjcmlwdGFibGUiLCAiX2luZGV4YWJsZSIsICJfYWxsS2V5cyIsICJpc1NjcmlwdGFibGUiLCAiaXNGdW5jdGlvbiIsICJpc0luZGV4YWJsZSIsICJyZWFkS2V5IiwgInByZWZpeCIsICJuYW1lIiwgIl9jYXBpdGFsaXplIiwgIm5lZWRzU3ViUmVzb2x2ZXIiLCAiY29uc3RydWN0b3IiLCAicHJvdG90eXBlIiwgImhhc093blByb3BlcnR5IiwgImNhbGwiLCAiZGVzY3JpcHRvcnMiLCAiX3Jlc29sdmVTY3JpcHRhYmxlIiwgIl9yZXNvbHZlQXJyYXkiLCAiZ2V0VmFsdWUiLCAiRXJyb3IiLCAiQXJyYXkiLCAiZnJvbSIsICJqb2luIiwgImRlbGV0ZSIsICJjcmVhdGVTdWJSZXNvbHZlciIsICJhcnIiLCAiZmlsdGVyIiwgInMiLCAiaXRlbSIsICJyZXNvbHZlciIsICJwdXNoIiwgInJlc29sdmVGYWxsYmFjayIsICJnZXRTY29wZSIsICJrZXkiLCAicGFyZW50IiwgInJlc29sdmVPYmplY3RLZXkiLCAiYWRkU2NvcGVzIiwgInBhcmVudFNjb3BlcyIsICJwYXJlbnRGYWxsYmFjayIsICJhbGxTY29wZXMiLCAiYWRkU2NvcGVzRnJvbUtleSIsICJzdWJHZXRUYXJnZXQiLCAicmVzb2x2ZUtleXNGcm9tQWxsU2NvcGVzIiwgImsiLCAic3RhcnRzV2l0aCIsICJFUFNJTE9OIiwgIk51bWJlciIsICJfaXNEb21TdXBwb3J0ZWQiLCAid2luZG93IiwgImRvY3VtZW50IiwgIl9nZXRQYXJlbnROb2RlIiwgImRvbU5vZGUiLCAicGFyZW50IiwgInBhcmVudE5vZGUiLCAidG9TdHJpbmciLCAiaG9zdCIsICJwYXJzZU1heFN0eWxlIiwgInN0eWxlVmFsdWUiLCAibm9kZSIsICJwYXJlbnRQcm9wZXJ0eSIsICJ2YWx1ZUluUGl4ZWxzIiwgInBhcnNlSW50IiwgImluZGV4T2YiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiZ2V0U3R5bGUiLCAiZWwiLCAicHJvcGVydHkiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJwb3NpdGlvbnMiLCAiZ2V0UG9zaXRpb25lZFN0eWxlIiwgInN0eWxlcyIsICJzdHlsZSIsICJzdWZmaXgiLCAicmVzdWx0IiwgImkiLCAicG9zIiwgInBhcnNlRmxvYXQiLCAid2lkdGgiLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAidG9wIiwgImJvdHRvbSIsICJ1c2VPZmZzZXRQb3MiLCAieCIsICJ5IiwgInRhcmdldCIsICJzaGFkb3dSb290IiwgImdldENhbnZhc1Bvc2l0aW9uIiwgImUiLCAiY2FudmFzIiwgInRvdWNoZXMiLCAic291cmNlIiwgImxlbmd0aCIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiYm94IiwgInJlY3QiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJnZXRSZWxhdGl2ZVBvc2l0aW9uIiwgImV2ZW50IiwgImNoYXJ0IiwgImN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIiwgImJvcmRlckJveCIsICJib3hTaXppbmciLCAicGFkZGluZ3MiLCAiYm9yZGVycyIsICJ4T2Zmc2V0IiwgInlPZmZzZXQiLCAiTWF0aCIsICJyb3VuZCIsICJnZXRDb250YWluZXJTaXplIiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJ1bmRlZmluZWQiLCAiY29udGFpbmVyIiwgImNsaWVudFdpZHRoIiwgImNsaWVudEhlaWdodCIsICJjb250YWluZXJTdHlsZSIsICJjb250YWluZXJCb3JkZXIiLCAiY29udGFpbmVyUGFkZGluZyIsICJJTkZJTklUWSIsICJyb3VuZDEiLCAidiIsICJnZXRNYXhpbXVtU2l6ZSIsICJiYldpZHRoIiwgImJiSGVpZ2h0IiwgImFzcGVjdFJhdGlvIiwgIm1hcmdpbnMiLCAiY29udGFpbmVyU2l6ZSIsICJtYXgiLCAibWluIiwgIm1haW50YWluSGVpZ2h0IiwgImZsb29yIiwgInJldGluYVNjYWxlIiwgImZvcmNlUmF0aW8iLCAiZm9yY2VTdHlsZSIsICJwaXhlbFJhdGlvIiwgImRldmljZUhlaWdodCIsICJkZXZpY2VXaWR0aCIsICJjdHgiLCAic2V0VHJhbnNmb3JtIiwgInN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAicGFzc2l2ZVN1cHBvcnRlZCIsICJvcHRpb25zIiwgInBhc3NpdmUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInJlYWRVc2VkU2l6ZSIsICJ2YWx1ZSIsICJtYXRjaGVzIiwgIm1hdGNoIiwgImdldFJpZ2h0VG9MZWZ0QWRhcHRlciIsICJyZWN0WCIsICJ3aWR0aCIsICJ4IiwgInNldFdpZHRoIiwgInciLCAidGV4dEFsaWduIiwgImFsaWduIiwgInhQbHVzIiwgInZhbHVlIiwgImxlZnRGb3JMdHIiLCAiaXRlbVdpZHRoIiwgImdldExlZnRUb1JpZ2h0QWRhcHRlciIsICJfaXRlbVdpZHRoIiwgImdldFJ0bEFkYXB0ZXIiLCAicnRsIiwgIm92ZXJyaWRlVGV4dERpcmVjdGlvbiIsICJjdHgiLCAiZGlyZWN0aW9uIiwgInN0eWxlIiwgIm9yaWdpbmFsIiwgImNhbnZhcyIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImdldFByb3BlcnR5UHJpb3JpdHkiLCAic2V0UHJvcGVydHkiLCAicHJldlRleHREaXJlY3Rpb24iLCAicmVzdG9yZVRleHREaXJlY3Rpb24iLCAidW5kZWZpbmVkIiwgIkFuaW1hdG9yIiwgImNvbnN0cnVjdG9yIiwgIl9yZXF1ZXN0IiwgIl9jaGFydHMiLCAiTWFwIiwgIl9ydW5uaW5nIiwgIl9sYXN0RGF0ZSIsICJ1bmRlZmluZWQiLCAiX25vdGlmeSIsICJjaGFydCIsICJhbmltcyIsICJkYXRlIiwgInR5cGUiLCAiY2FsbGJhY2tzIiwgImxpc3RlbmVycyIsICJudW1TdGVwcyIsICJkdXJhdGlvbiIsICJmb3JFYWNoIiwgImZuIiwgImluaXRpYWwiLCAiY3VycmVudFN0ZXAiLCAiTWF0aCIsICJtaW4iLCAic3RhcnQiLCAiX3JlZnJlc2giLCAicmVxdWVzdEFuaW1GcmFtZSIsICJjYWxsIiwgIndpbmRvdyIsICJfdXBkYXRlIiwgIkRhdGUiLCAibm93IiwgInJlbWFpbmluZyIsICJydW5uaW5nIiwgIml0ZW1zIiwgImxlbmd0aCIsICJpIiwgImRyYXciLCAiaXRlbSIsICJfYWN0aXZlIiwgIl90b3RhbCIsICJ0aWNrIiwgInBvcCIsICJfZ2V0QW5pbXMiLCAiY2hhcnRzIiwgImdldCIsICJjb21wbGV0ZSIsICJwcm9ncmVzcyIsICJzZXQiLCAibGlzdGVuIiwgImV2ZW50IiwgImNiIiwgInB1c2giLCAiYWRkIiwgImhhcyIsICJyZWR1Y2UiLCAiYWNjIiwgImN1ciIsICJtYXgiLCAiX2R1cmF0aW9uIiwgInN0b3AiLCAiY2FuY2VsIiwgInJlbW92ZSIsICJkZWxldGUiLCAidHJhbnNwYXJlbnQiLCAiaW50ZXJwb2xhdG9ycyIsICJib29sZWFuIiwgImZyb20iLCAidG8iLCAiZmFjdG9yIiwgImNvbG9yIiwgImMwIiwgImhlbHBlcnNDb2xvciIsICJjMSIsICJ2YWxpZCIsICJtaXgiLCAiaGV4U3RyaW5nIiwgIm51bWJlciIsICJBbmltYXRpb24iLCAiY2ZnIiwgInRhcmdldCIsICJwcm9wIiwgImN1cnJlbnRWYWx1ZSIsICJyZXNvbHZlIiwgIl9mbiIsICJfZWFzaW5nIiwgImVmZmVjdHMiLCAiZWFzaW5nIiwgImxpbmVhciIsICJfc3RhcnQiLCAiZmxvb3IiLCAiZGVsYXkiLCAiX2xvb3AiLCAibG9vcCIsICJfdGFyZ2V0IiwgIl9wcm9wIiwgIl9mcm9tIiwgIl90byIsICJfcHJvbWlzZXMiLCAiYWN0aXZlIiwgInVwZGF0ZSIsICJlbGFwc2VkIiwgInJlbWFpbiIsICJ3YWl0IiwgInByb21pc2VzIiwgIlByb21pc2UiLCAicmVzIiwgInJlaiIsICJyZXNvbHZlZCIsICJtZXRob2QiLCAiQW5pbWF0aW9ucyIsICJjb25maWciLCAiX2NoYXJ0IiwgIl9wcm9wZXJ0aWVzIiwgImNvbmZpZ3VyZSIsICJpc09iamVjdCIsICJhbmltYXRpb25PcHRpb25zIiwgIk9iamVjdCIsICJrZXlzIiwgImRlZmF1bHRzIiwgImFuaW1hdGlvbiIsICJhbmltYXRlZFByb3BzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAia2V5IiwgIm9wdGlvbiIsICJpc0FycmF5IiwgInByb3BlcnRpZXMiLCAiX2FuaW1hdGVPcHRpb25zIiwgInZhbHVlcyIsICJuZXdPcHRpb25zIiwgIm9wdGlvbnMiLCAicmVzb2x2ZVRhcmdldE9wdGlvbnMiLCAiYW5pbWF0aW9ucyIsICJfY3JlYXRlQW5pbWF0aW9ucyIsICIkc2hhcmVkIiwgImF3YWl0QWxsIiwgIiRhbmltYXRpb25zIiwgInRoZW4iLCAicHJvcHMiLCAiY2hhckF0IiwgInZhbHVlIiwgInNpemUiLCAiYXNzaWduIiwgImFuaW1hdG9yIiwgImFuaW0iLCAiYWxsIiwgInNjYWxlQ2xpcCIsICJzY2FsZSIsICJhbGxvd2VkT3ZlcmZsb3ciLCAib3B0cyIsICJyZXZlcnNlIiwgImVuZCIsICJkZWZhdWx0Q2xpcCIsICJ4U2NhbGUiLCAieVNjYWxlIiwgIngiLCAieSIsICJ0b3AiLCAicmlnaHQiLCAiYm90dG9tIiwgImxlZnQiLCAidG9DbGlwIiwgInQiLCAiciIsICJiIiwgImwiLCAiZGlzYWJsZWQiLCAiZ2V0U29ydGVkRGF0YXNldEluZGljZXMiLCAiZmlsdGVyVmlzaWJsZSIsICJtZXRhc2V0cyIsICJfZ2V0U29ydGVkRGF0YXNldE1ldGFzIiwgImlsZW4iLCAiaW5kZXgiLCAiYXBwbHlTdGFjayIsICJzdGFjayIsICJkc0luZGV4IiwgInNpbmdsZU1vZGUiLCAibW9kZSIsICJkYXRhc2V0SW5kZXgiLCAib3RoZXJWYWx1ZSIsICJpc0Zpbml0ZSIsICJzaWduIiwgImNvbnZlcnRPYmplY3REYXRhVG9BcnJheSIsICJkYXRhIiwgImFkYXRhIiwgIkFycmF5IiwgImlzU3RhY2tlZCIsICJtZXRhIiwgInN0YWNrZWQiLCAiZ2V0U3RhY2tLZXkiLCAiaW5kZXhTY2FsZSIsICJ2YWx1ZVNjYWxlIiwgImlkIiwgImdldFVzZXJCb3VuZHMiLCAibWluRGVmaW5lZCIsICJtYXhEZWZpbmVkIiwgIk51bWJlciIsICJORUdBVElWRV9JTkZJTklUWSIsICJQT1NJVElWRV9JTkZJTklUWSIsICJnZXRPckNyZWF0ZVN0YWNrIiwgInN0YWNrcyIsICJzdGFja0tleSIsICJpbmRleFZhbHVlIiwgInN1YlN0YWNrIiwgImdldExhc3RJbmRleEluU3RhY2siLCAidlNjYWxlIiwgInBvc2l0aXZlIiwgImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwgInVwZGF0ZVN0YWNrcyIsICJjb250cm9sbGVyIiwgInBhcnNlZCIsICJfY2FjaGVkTWV0YSIsICJfc3RhY2tzIiwgImlTY2FsZSIsICJpQXhpcyIsICJheGlzIiwgInZBeGlzIiwgIml0ZW1TdGFja3MiLCAiX3RvcCIsICJfYm90dG9tIiwgInZpc3VhbFZhbHVlcyIsICJfdmlzdWFsVmFsdWVzIiwgImdldEZpcnN0U2NhbGVJZCIsICJzY2FsZXMiLCAiZmlsdGVyIiwgInNoaWZ0IiwgImNyZWF0ZURhdGFzZXRDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgImRhdGFzZXQiLCAiY3JlYXRlRGF0YUNvbnRleHQiLCAiZWxlbWVudCIsICJkYXRhSW5kZXgiLCAicmF3IiwgImNsZWFyU3RhY2tzIiwgIl9wYXJzZWQiLCAiaXNEaXJlY3RVcGRhdGVNb2RlIiwgImNsb25lSWZOb3RTaGFyZWQiLCAiY2FjaGVkIiwgInNoYXJlZCIsICJjcmVhdGVTdGFjayIsICJjYW5TdGFjayIsICJoaWRkZW4iLCAiX3N0YWNrZWQiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAiX2N0eCIsICJjdHgiLCAiX2NhY2hlZERhdGFPcHRzIiwgImdldE1ldGEiLCAiX3R5cGUiLCAiX3BhcnNpbmciLCAiX2RhdGEiLCAiX29iamVjdERhdGEiLCAiX3NoYXJlZE9wdGlvbnMiLCAiX2RyYXdTdGFydCIsICJfZHJhd0NvdW50IiwgImVuYWJsZU9wdGlvblNoYXJpbmciLCAic3VwcG9ydHNEZWNpbWF0aW9uIiwgIiRjb250ZXh0IiwgIl9zeW5jTGlzdCIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgImluaXRpYWxpemUiLCAibGlua1NjYWxlcyIsICJhZGRFbGVtZW50cyIsICJmaWxsIiwgImlzUGx1Z2luRW5hYmxlZCIsICJjb25zb2xlIiwgIndhcm4iLCAidXBkYXRlSW5kZXgiLCAiZ2V0RGF0YXNldCIsICJjaG9vc2VJZCIsICJ4aWQiLCAieEF4aXNJRCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ5aWQiLCAieUF4aXNJRCIsICJyaWQiLCAickF4aXNJRCIsICJpbmRleEF4aXMiLCAiaWlkIiwgImlBeGlzSUQiLCAidmlkIiwgInZBeGlzSUQiLCAiZ2V0U2NhbGVGb3JJZCIsICJyU2NhbGUiLCAiZGF0YXNldHMiLCAiZ2V0RGF0YXNldE1ldGEiLCAic2NhbGVJRCIsICJfZ2V0T3RoZXJTY2FsZSIsICJyZXNldCIsICJfZGVzdHJveSIsICJ1bmxpc3RlbkFycmF5RXZlbnRzIiwgIl9kYXRhQ2hlY2siLCAiaXNFeHRlbnNpYmxlIiwgImxpc3RlbkFycmF5RXZlbnRzIiwgImJ1aWxkT3JVcGRhdGVFbGVtZW50cyIsICJyZXNldE5ld0VsZW1lbnRzIiwgInN0YWNrQ2hhbmdlZCIsICJvbGRTdGFja2VkIiwgIl9yZXN5bmNFbGVtZW50cyIsICJzY29wZUtleXMiLCAiZGF0YXNldFNjb3BlS2V5cyIsICJzY29wZXMiLCAiZ2V0T3B0aW9uU2NvcGVzIiwgImNyZWF0ZVJlc29sdmVyIiwgImdldENvbnRleHQiLCAicGFyc2luZyIsICJwYXJzZSIsICJjb3VudCIsICJzb3J0ZWQiLCAiX3NvcnRlZCIsICJwcmV2IiwgInBhcnNlQXJyYXlEYXRhIiwgInBhcnNlT2JqZWN0RGF0YSIsICJwYXJzZVByaW1pdGl2ZURhdGEiLCAiaXNOb3RJbk9yZGVyQ29tcGFyZWRUb1ByZXYiLCAibGFiZWxzIiwgImdldExhYmVscyIsICJzaW5nbGVTY2FsZSIsICJ4QXhpc0tleSIsICJ5QXhpc0tleSIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImdldFBhcnNlZCIsICJnZXREYXRhRWxlbWVudCIsICJ1cGRhdGVSYW5nZUZyb21QYXJzZWQiLCAicmFuZ2UiLCAicGFyc2VkVmFsdWUiLCAiTmFOIiwgImdldE1pbk1heCIsICJvdGhlclNjYWxlIiwgIm90aGVyTWluIiwgIm90aGVyTWF4IiwgIl9za2lwIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJnZXRNYXhPdmVyZmxvdyIsICJnZXRMYWJlbEFuZFZhbHVlIiwgImxhYmVsIiwgImdldExhYmVsRm9yVmFsdWUiLCAiX2NsaXAiLCAiY2xpcCIsICJlbGVtZW50cyIsICJhcmVhIiwgImNoYXJ0QXJlYSIsICJkcmF3QWN0aXZlRWxlbWVudHNPblRvcCIsICJnZXRTdHlsZSIsICJyZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zIiwgInJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMiLCAiY29udGV4dCIsICJfcmVzb2x2ZUVsZW1lbnRPcHRpb25zIiwgImVsZW1lbnRUeXBlIiwgImNhY2hlIiwgImNhY2hlS2V5IiwgInNoYXJpbmciLCAiZGVmaW5lZCIsICJkYXRhc2V0RWxlbWVudFNjb3BlS2V5cyIsICJwcmVmaXhlcyIsICJuYW1lcyIsICJyZXNvbHZlTmFtZWRPcHRpb25zIiwgImZyZWV6ZSIsICJfcmVzb2x2ZUFuaW1hdGlvbnMiLCAidHJhbnNpdGlvbiIsICJkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzIiwgIl9jYWNoZWFibGUiLCAiZ2V0U2hhcmVkT3B0aW9ucyIsICJpbmNsdWRlT3B0aW9ucyIsICJzaGFyZWRPcHRpb25zIiwgIl9hbmltYXRpb25zRGlzYWJsZWQiLCAiX2dldFNoYXJlZE9wdGlvbnMiLCAiZmlyc3RPcHRzIiwgInByZXZpb3VzbHlTaGFyZWRPcHRpb25zIiwgInVwZGF0ZVNoYXJlZE9wdGlvbnMiLCAidXBkYXRlRWxlbWVudCIsICJfc2V0U3R5bGUiLCAicmVtb3ZlSG92ZXJTdHlsZSIsICJzZXRIb3ZlclN0eWxlIiwgIl9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSIsICJfc2V0RGF0YXNldEhvdmVyU3R5bGUiLCAiYXJnMSIsICJhcmcyIiwgIm51bU1ldGEiLCAibnVtRGF0YSIsICJfaW5zZXJ0RWxlbWVudHMiLCAiX3JlbW92ZUVsZW1lbnRzIiwgIm1vdmUiLCAiYXJyIiwgInVwZGF0ZUVsZW1lbnRzIiwgInJlbW92ZWQiLCAic3BsaWNlIiwgIl9zeW5jIiwgImFyZ3MiLCAiX2RhdGFDaGFuZ2VzIiwgIl9vbkRhdGFQdXNoIiwgImFyZ3VtZW50cyIsICJfb25EYXRhUG9wIiwgIl9vbkRhdGFTaGlmdCIsICJfb25EYXRhU3BsaWNlIiwgIm5ld0NvdW50IiwgIl9vbkRhdGFVbnNoaWZ0IiwgImdldEFsbFNjYWxlVmFsdWVzIiwgIl9jYWNoZSIsICIkYmFyIiwgInZpc2libGVNZXRhcyIsICJjb25jYXQiLCAiX2FycmF5VW5pcXVlIiwgInNvcnQiLCAiYSIsICJjb21wdXRlTWluU2FtcGxlU2l6ZSIsICJfbGVuZ3RoIiwgImN1cnIiLCAidXBkYXRlTWluQW5kUHJldiIsICJhYnMiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJ0aWNrcyIsICJnZXRQaXhlbEZvclRpY2siLCAiY29tcHV0ZUZpdENhdGVnb3J5VHJhaXRzIiwgInJ1bGVyIiwgInN0YWNrQ291bnQiLCAidGhpY2tuZXNzIiwgImJhclRoaWNrbmVzcyIsICJyYXRpbyIsICJpc051bGxPclVuZGVmIiwgImNhdGVnb3J5UGVyY2VudGFnZSIsICJiYXJQZXJjZW50YWdlIiwgImNodW5rIiwgInBpeGVscyIsICJjb21wdXRlRmxleENhdGVnb3J5VHJhaXRzIiwgIm5leHQiLCAicGVyY2VudCIsICJwYXJzZUZsb2F0QmFyIiwgImVudHJ5IiwgInN0YXJ0VmFsdWUiLCAiZW5kVmFsdWUiLCAiYmFyU3RhcnQiLCAiYmFyRW5kIiwgIl9jdXN0b20iLCAicGFyc2VWYWx1ZSIsICJwYXJzZUFycmF5T3JQcmltaXRpdmUiLCAiaXNGbG9hdEJhciIsICJjdXN0b20iLCAiYmFyU2lnbiIsICJhY3R1YWxCYXNlIiwgImlzSG9yaXpvbnRhbCIsICJib3JkZXJQcm9wcyIsICJob3Jpem9udGFsIiwgImJhc2UiLCAic2V0Qm9yZGVyU2tpcHBlZCIsICJlZGdlIiwgImJvcmRlclNraXBwZWQiLCAiZW5hYmxlQm9yZGVyUmFkaXVzIiwgInBhcnNlRWRnZSIsICJzd2FwIiwgInN0YXJ0RW5kIiwgIm9yaWciLCAidjEiLCAidjIiLCAidiIsICJzZXRJbmZsYXRlQW1vdW50IiwgImluZmxhdGVBbW91bnQiLCAiQmFyQ29udHJvbGxlciIsICJpQXhpc0tleSIsICJ2QXhpc0tleSIsICJvYmoiLCAiYmFycyIsICJnZXRCYXNlUGl4ZWwiLCAiX2dldFJ1bGVyIiwgInZwaXhlbHMiLCAiaGVhZCIsICJfY2FsY3VsYXRlQmFyVmFsdWVQaXhlbHMiLCAiaXBpeGVscyIsICJfY2FsY3VsYXRlQmFySW5kZXhQaXhlbHMiLCAiY2VudGVyIiwgImhlaWdodCIsICJ3aWR0aCIsICJfZ2V0U3RhY2tzIiwgImxhc3QiLCAiZ3JvdXBlZCIsICJza2lwTnVsbCIsICJ2YWwiLCAiaXNOYU4iLCAiaW5kZXhPZiIsICJfZ2V0U3RhY2tDb3VudCIsICJfZ2V0U3RhY2tJbmRleCIsICJuYW1lIiwgIl9zdGFydFBpeGVsIiwgIl9lbmRQaXhlbCIsICJiYXNlVmFsdWUiLCAibWluQmFyTGVuZ3RoIiwgImZsb2F0aW5nIiwgImdldERhdGFWaXNpYmlsaXR5IiwgInN0YXJ0UGl4ZWwiLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImVuZFBpeGVsIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAiaGFsZkdyaWQiLCAiZ2V0TGluZVdpZHRoRm9yVmFsdWUiLCAibWF4QmFyVGhpY2tuZXNzIiwgIkluZmluaXR5IiwgInN0YWNrSW5kZXgiLCAicmVjdHMiLCAibnVtYmVycyIsICJvdmVycmlkZXMiLCAiX2luZGV4XyIsICJvZmZzZXQiLCAiZ3JpZCIsICJfdmFsdWVfIiwgImJlZ2luQXRaZXJvIiwgImdldFJhdGlvQW5kT2Zmc2V0IiwgInJvdGF0aW9uIiwgImNpcmN1bWZlcmVuY2UiLCAiY3V0b3V0IiwgInJhdGlvWCIsICJyYXRpb1kiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgIlRBVSIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgInN0YXJ0WCIsICJNYXRoIiwgImNvcyIsICJzdGFydFkiLCAic2luIiwgImVuZFgiLCAiZW5kWSIsICJjYWxjTWF4IiwgImFuZ2xlIiwgImEiLCAiYiIsICJfYW5nbGVCZXR3ZWVuIiwgIm1heCIsICJjYWxjTWluIiwgIm1pbiIsICJtYXhYIiwgIm1heFkiLCAiSEFMRl9QSSIsICJtaW5YIiwgIlBJIiwgIm1pblkiLCAiRG91Z2hudXRDb250cm9sbGVyIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgImNvbnN0cnVjdG9yIiwgImNoYXJ0IiwgImRhdGFzZXRJbmRleCIsICJlbmFibGVPcHRpb25TaGFyaW5nIiwgImlubmVyUmFkaXVzIiwgInVuZGVmaW5lZCIsICJvdXRlclJhZGl1cyIsICJsaW5rU2NhbGVzIiwgInBhcnNlIiwgInN0YXJ0IiwgImNvdW50IiwgImRhdGEiLCAiZ2V0RGF0YXNldCIsICJtZXRhIiwgIl9jYWNoZWRNZXRhIiwgIl9wYXJzaW5nIiwgIl9wYXJzZWQiLCAiZ2V0dGVyIiwgImkiLCAiaXNPYmplY3QiLCAia2V5IiwgInJlc29sdmVPYmplY3RLZXkiLCAiaWxlbiIsICJfZ2V0Um90YXRpb24iLCAidG9SYWRpYW5zIiwgIm9wdGlvbnMiLCAiX2dldENpcmN1bWZlcmVuY2UiLCAiX2dldFJvdGF0aW9uRXh0ZW50cyIsICJkYXRhc2V0cyIsICJsZW5ndGgiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJnZXREYXRhc2V0TWV0YSIsICJ0eXBlIiwgIl90eXBlIiwgImNvbnRyb2xsZXIiLCAidXBkYXRlIiwgIm1vZGUiLCAiY2hhcnRBcmVhIiwgImFyY3MiLCAic3BhY2luZyIsICJnZXRNYXhCb3JkZXJXaWR0aCIsICJnZXRNYXhPZmZzZXQiLCAibWF4U2l6ZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAidG9QZXJjZW50YWdlIiwgImNoYXJ0V2VpZ2h0IiwgIl9nZXRSaW5nV2VpZ2h0IiwgImluZGV4IiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJtYXhSYWRpdXMiLCAidG9EaW1lbnNpb24iLCAicmFkaXVzIiwgInJhZGl1c0xlbmd0aCIsICJfZ2V0VmlzaWJsZURhdGFzZXRXZWlnaHRUb3RhbCIsICJ0b3RhbCIsICJjYWxjdWxhdGVUb3RhbCIsICJfZ2V0UmluZ1dlaWdodE9mZnNldCIsICJ1cGRhdGVFbGVtZW50cyIsICJfY2lyY3VtZmVyZW5jZSIsICJyZXNldCIsICJvcHRzIiwgImFuaW1hdGlvbiIsICJhbmltYXRlUm90YXRlIiwgImdldERhdGFWaXNpYmlsaXR5IiwgImhpZGRlbiIsICJjYWxjdWxhdGVDaXJjdW1mZXJlbmNlIiwgImFuaW1hdGlvbk9wdHMiLCAiY2VudGVyWCIsICJsZWZ0IiwgInJpZ2h0IiwgImNlbnRlclkiLCAidG9wIiwgImJvdHRvbSIsICJhbmltYXRlU2NhbGUiLCAic2hhcmVkT3B0aW9ucyIsICJpbmNsdWRlT3B0aW9ucyIsICJfZ2V0U2hhcmVkT3B0aW9ucyIsICJhcmMiLCAicHJvcGVydGllcyIsICJ4IiwgInkiLCAicmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyIsICJhY3RpdmUiLCAidXBkYXRlRWxlbWVudCIsICJtZXRhRGF0YSIsICJ2YWx1ZSIsICJpc05hTiIsICJhYnMiLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJsYWJlbHMiLCAiZm9ybWF0TnVtYmVyIiwgImxvY2FsZSIsICJsYWJlbCIsICJib3JkZXJBbGlnbiIsICJib3JkZXJXaWR0aCIsICJob3ZlckJvcmRlcldpZHRoIiwgIm9mZnNldCIsICJob3Zlck9mZnNldCIsICJyaW5nV2VpZ2h0T2Zmc2V0IiwgInZhbHVlT3JEZWZhdWx0IiwgIndlaWdodCIsICJpZCIsICJkZWZhdWx0cyIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgImFuaW1hdGlvbnMiLCAibnVtYmVycyIsICJpbmRleEF4aXMiLCAiZGVzY3JpcHRvcnMiLCAiX3NjcmlwdGFibGUiLCAibmFtZSIsICJfaW5kZXhhYmxlIiwgInN0YXJ0c1dpdGgiLCAib3ZlcnJpZGVzIiwgImFzcGVjdFJhdGlvIiwgInBsdWdpbnMiLCAibGVnZW5kIiwgImdlbmVyYXRlTGFiZWxzIiwgInBvaW50U3R5bGUiLCAiY29sb3IiLCAibWFwIiwgInN0eWxlIiwgImdldFN0eWxlIiwgInRleHQiLCAiZmlsbFN0eWxlIiwgImJhY2tncm91bmRDb2xvciIsICJzdHJva2VTdHlsZSIsICJib3JkZXJDb2xvciIsICJmb250Q29sb3IiLCAibGluZVdpZHRoIiwgIm9uQ2xpY2siLCAiZSIsICJsZWdlbmRJdGVtIiwgInRvZ2dsZURhdGFWaXNpYmlsaXR5IiwgIlBpZUNvbnRyb2xsZXIiLCAiRG91Z2hudXRDb250cm9sbGVyIiwgImlkIiwgImRlZmF1bHRzIiwgImN1dG91dCIsICJyb3RhdGlvbiIsICJjaXJjdW1mZXJlbmNlIiwgInJhZGl1cyIsICJhYnN0cmFjdCIsICJFcnJvciIsICJEYXRlQWRhcHRlckJhc2UiLCAiY29uc3RydWN0b3IiLCAib3B0aW9ucyIsICJvdmVycmlkZSIsICJtZW1iZXJzIiwgIk9iamVjdCIsICJhc3NpZ24iLCAicHJvdG90eXBlIiwgImluaXQiLCAiZm9ybWF0cyIsICJwYXJzZSIsICJmb3JtYXQiLCAiYWRkIiwgImRpZmYiLCAic3RhcnRPZiIsICJlbmRPZiIsICJfZGF0ZSIsICJiaW5hcnlTZWFyY2giLCAibWV0YXNldCIsICJheGlzIiwgInZhbHVlIiwgImludGVyc2VjdCIsICJjb250cm9sbGVyIiwgImRhdGEiLCAiX3NvcnRlZCIsICJpU2NhbGUiLCAiX2NhY2hlZE1ldGEiLCAibGVuZ3RoIiwgImxvb2t1cE1ldGhvZCIsICJfcmV2ZXJzZVBpeGVscyIsICJfcmxvb2t1cEJ5S2V5IiwgIl9sb29rdXBCeUtleSIsICJfc2hhcmVkT3B0aW9ucyIsICJlbCIsICJyYW5nZSIsICJnZXRSYW5nZSIsICJzdGFydCIsICJlbmQiLCAibG8iLCAiaGkiLCAiZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zIiwgImNoYXJ0IiwgInBvc2l0aW9uIiwgImhhbmRsZXIiLCAibWV0YXNldHMiLCAiZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcyIsICJpIiwgImlsZW4iLCAiaW5kZXgiLCAiaiIsICJlbGVtZW50IiwgInNraXAiLCAiZ2V0RGlzdGFuY2VNZXRyaWNGb3JBeGlzIiwgInVzZVgiLCAiaW5kZXhPZiIsICJ1c2VZIiwgInB0MSIsICJwdDIiLCAiZGVsdGFYIiwgIk1hdGgiLCAiYWJzIiwgIngiLCAiZGVsdGFZIiwgInkiLCAic3FydCIsICJwb3ciLCAiZ2V0SW50ZXJzZWN0SXRlbXMiLCAidXNlRmluYWxQb3NpdGlvbiIsICJpbmNsdWRlSW52aXNpYmxlIiwgIml0ZW1zIiwgImlzUG9pbnRJbkFyZWEiLCAiZXZhbHVhdGlvbkZ1bmMiLCAiZGF0YXNldEluZGV4IiwgIl9pc1BvaW50SW5BcmVhIiwgImNoYXJ0QXJlYSIsICJpblJhbmdlIiwgInB1c2giLCAiZ2V0TmVhcmVzdFJhZGlhbEl0ZW1zIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAiZ2V0UHJvcHMiLCAiYW5nbGUiLCAiZ2V0QW5nbGVGcm9tUG9pbnQiLCAiX2FuZ2xlQmV0d2VlbiIsICJnZXROZWFyZXN0Q2FydGVzaWFuSXRlbXMiLCAiZGlzdGFuY2VNZXRyaWMiLCAibWluRGlzdGFuY2UiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgImNlbnRlciIsICJnZXRDZW50ZXJQb2ludCIsICJwb2ludEluQXJlYSIsICJkaXN0YW5jZSIsICJnZXROZWFyZXN0SXRlbXMiLCAiZ2V0QXhpc0l0ZW1zIiwgInJhbmdlTWV0aG9kIiwgImludGVyc2VjdHNJdGVtIiwgIm1vZGVzIiwgImUiLCAiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsICJlbGVtZW50cyIsICJmb3JFYWNoIiwgIm1ldGEiLCAiZGF0YXNldCIsICJnZXREYXRhc2V0TWV0YSIsICJwb2ludCIsICJuZWFyZXN0IiwgIlNUQVRJQ19QT1NJVElPTlMiLCAiZmlsdGVyQnlQb3NpdGlvbiIsICJhcnJheSIsICJmaWx0ZXIiLCAidiIsICJwb3MiLCAiZmlsdGVyRHluYW1pY1Bvc2l0aW9uQnlBeGlzIiwgImJveCIsICJzb3J0QnlXZWlnaHQiLCAicmV2ZXJzZSIsICJzb3J0IiwgImEiLCAiYiIsICJ2MCIsICJ2MSIsICJ3ZWlnaHQiLCAid3JhcEJveGVzIiwgImJveGVzIiwgImxheW91dEJveGVzIiwgInN0YWNrIiwgInN0YWNrV2VpZ2h0IiwgImhvcml6b250YWwiLCAiaXNIb3Jpem9udGFsIiwgImJ1aWxkU3RhY2tzIiwgImxheW91dHMiLCAic3RhY2tzIiwgIndyYXAiLCAiaW5jbHVkZXMiLCAiX3N0YWNrIiwgImNvdW50IiwgInBsYWNlZCIsICJzaXplIiwgInNldExheW91dERpbXMiLCAicGFyYW1zIiwgInZCb3hNYXhXaWR0aCIsICJoQm94TWF4SGVpZ2h0IiwgImxheW91dCIsICJmdWxsU2l6ZSIsICJmYWN0b3IiLCAid2lkdGgiLCAiYXZhaWxhYmxlV2lkdGgiLCAiaGVpZ2h0IiwgImF2YWlsYWJsZUhlaWdodCIsICJidWlsZExheW91dEJveGVzIiwgImxlZnQiLCAicmlnaHQiLCAidG9wIiwgImJvdHRvbSIsICJjZW50ZXJIb3Jpem9udGFsIiwgImNlbnRlclZlcnRpY2FsIiwgImxlZnRBbmRUb3AiLCAiY29uY2F0IiwgInJpZ2h0QW5kQm90dG9tIiwgInZlcnRpY2FsIiwgImdldENvbWJpbmVkTWF4IiwgIm1heFBhZGRpbmciLCAibWF4IiwgInVwZGF0ZU1heFBhZGRpbmciLCAiYm94UGFkZGluZyIsICJ1cGRhdGVEaW1zIiwgImlzT2JqZWN0IiwgImdldFBhZGRpbmciLCAibmV3V2lkdGgiLCAib3V0ZXJXaWR0aCIsICJuZXdIZWlnaHQiLCAib3V0ZXJIZWlnaHQiLCAid2lkdGhDaGFuZ2VkIiwgInciLCAiaGVpZ2h0Q2hhbmdlZCIsICJoIiwgInNhbWUiLCAib3RoZXIiLCAiaGFuZGxlTWF4UGFkZGluZyIsICJ1cGRhdGVQb3MiLCAiY2hhbmdlIiwgImdldE1hcmdpbnMiLCAibWFyZ2luRm9yUG9zaXRpb25zIiwgInBvc2l0aW9ucyIsICJtYXJnaW4iLCAiZml0Qm94ZXMiLCAicmVmaXRCb3hlcyIsICJyZWZpdCIsICJjaGFuZ2VkIiwgInVwZGF0ZSIsICJzZXRCb3hEaW1zIiwgInBsYWNlQm94ZXMiLCAidXNlclBhZGRpbmciLCAicGFkZGluZyIsICJkZWZpbmVkIiwgImFkZEJveCIsICJpdGVtIiwgIl9sYXllcnMiLCAieiIsICJkcmF3IiwgInJlbW92ZUJveCIsICJsYXlvdXRJdGVtIiwgInNwbGljZSIsICJjb25maWd1cmUiLCAibWluUGFkZGluZyIsICJ0b1BhZGRpbmciLCAidmVydGljYWxCb3hlcyIsICJob3Jpem9udGFsQm94ZXMiLCAiZWFjaCIsICJiZWZvcmVMYXlvdXQiLCAidmlzaWJsZVZlcnRpY2FsQm94Q291bnQiLCAicmVkdWNlIiwgInRvdGFsIiwgImRpc3BsYXkiLCAiZnJlZXplIiwgIkJhc2VQbGF0Zm9ybSIsICJhY3F1aXJlQ29udGV4dCIsICJjYW52YXMiLCAiYXNwZWN0UmF0aW8iLCAicmVsZWFzZUNvbnRleHQiLCAiY29udGV4dCIsICJhZGRFdmVudExpc3RlbmVyIiwgInR5cGUiLCAibGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJnZXREZXZpY2VQaXhlbFJhdGlvIiwgImdldE1heGltdW1TaXplIiwgImZsb29yIiwgImlzQXR0YWNoZWQiLCAidXBkYXRlQ29uZmlnIiwgImNvbmZpZyIsICJCYXNpY1BsYXRmb3JtIiwgImdldENvbnRleHQiLCAiYW5pbWF0aW9uIiwgIkVYUEFORE9fS0VZIiwgIkVWRU5UX1RZUEVTIiwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwgInRvdWNoZW5kIiwgInBvaW50ZXJlbnRlciIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmxlYXZlIiwgInBvaW50ZXJvdXQiLCAiaXNOdWxsT3JFbXB0eSIsICJpbml0Q2FudmFzIiwgInN0eWxlIiwgInJlbmRlckhlaWdodCIsICJnZXRBdHRyaWJ1dGUiLCAicmVuZGVyV2lkdGgiLCAiaW5pdGlhbCIsICJib3hTaXppbmciLCAiZGlzcGxheVdpZHRoIiwgInJlYWRVc2VkU2l6ZSIsICJ1bmRlZmluZWQiLCAiZGlzcGxheUhlaWdodCIsICJldmVudExpc3RlbmVyT3B0aW9ucyIsICJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwgInBhc3NpdmUiLCAiYWRkTGlzdGVuZXIiLCAibm9kZSIsICJyZW1vdmVMaXN0ZW5lciIsICJmcm9tTmF0aXZlRXZlbnQiLCAiZXZlbnQiLCAibmF0aXZlIiwgIm5vZGVMaXN0Q29udGFpbnMiLCAibm9kZUxpc3QiLCAiY29udGFpbnMiLCAiY3JlYXRlQXR0YWNoT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAiTXV0YXRpb25PYnNlcnZlciIsICJlbnRyaWVzIiwgInRyaWdnZXIiLCAiZW50cnkiLCAiYWRkZWROb2RlcyIsICJyZW1vdmVkTm9kZXMiLCAib2JzZXJ2ZSIsICJkb2N1bWVudCIsICJjaGlsZExpc3QiLCAic3VidHJlZSIsICJjcmVhdGVEZXRhY2hPYnNlcnZlciIsICJkcnBMaXN0ZW5pbmdDaGFydHMiLCAiTWFwIiwgIm9sZERldmljZVBpeGVsUmF0aW8iLCAib25XaW5kb3dSZXNpemUiLCAiZHByIiwgIndpbmRvdyIsICJkZXZpY2VQaXhlbFJhdGlvIiwgInJlc2l6ZSIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJsaXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyIsICJzZXQiLCAidW5saXN0ZW5EZXZpY2VQaXhlbFJhdGlvQ2hhbmdlcyIsICJkZWxldGUiLCAiY3JlYXRlUmVzaXplT2JzZXJ2ZXIiLCAiY29udGFpbmVyIiwgIl9nZXRQYXJlbnROb2RlIiwgInRocm90dGxlZCIsICJjbGllbnRXaWR0aCIsICJSZXNpemVPYnNlcnZlciIsICJjb250ZW50UmVjdCIsICJyZWxlYXNlT2JzZXJ2ZXIiLCAiZGlzY29ubmVjdCIsICJjcmVhdGVQcm94eUFuZExpc3RlbiIsICJwcm94eSIsICJjdHgiLCAiRG9tUGxhdGZvcm0iLCAicHJvcCIsICJpc051bGxPclVuZGVmIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAia2V5cyIsICJrZXkiLCAicHJveGllcyIsICIkcHJveGllcyIsICJoYW5kbGVycyIsICJhdHRhY2giLCAiZGV0YWNoIiwgImlzQ29ubmVjdGVkIiwgIl9kZXRlY3RQbGF0Zm9ybSIsICJfaXNEb21TdXBwb3J0ZWQiLCAiT2Zmc2NyZWVuQ2FudmFzIiwgIkVsZW1lbnQiLCAiYWN0aXZlIiwgIiRhbmltYXRpb25zIiwgInRvb2x0aXBQb3NpdGlvbiIsICJoYXNWYWx1ZSIsICJpc051bWJlciIsICJwcm9wcyIsICJmaW5hbCIsICJhbmltcyIsICJyZXQiLCAiX3RvIiwgImRlZmF1bHRzIiwgImRlZmF1bHRSb3V0ZXMiLCAiYXV0b1NraXAiLCAic2NhbGUiLCAidGlja3MiLCAidGlja09wdHMiLCAiZGV0ZXJtaW5lZE1heFRpY2tzIiwgImRldGVybWluZU1heFRpY2tzIiwgInRpY2tzTGltaXQiLCAibWluIiwgIm1heFRpY2tzTGltaXQiLCAibWFqb3JJbmRpY2VzIiwgIm1ham9yIiwgImVuYWJsZWQiLCAiZ2V0TWFqb3JJbmRpY2VzIiwgIm51bU1ham9ySW5kaWNlcyIsICJmaXJzdCIsICJsYXN0IiwgIm5ld1RpY2tzIiwgInNraXBNYWpvcnMiLCAic3BhY2luZyIsICJjYWxjdWxhdGVTcGFjaW5nIiwgImF2Z01ham9yU3BhY2luZyIsICJyb3VuZCIsICJvZmZzZXQiLCAidGlja0xlbmd0aCIsICJfdGlja1NpemUiLCAibWF4U2NhbGUiLCAiX2xlbmd0aCIsICJtYXhDaGFydCIsICJfbWF4TGVuZ3RoIiwgImV2ZW5NYWpvclNwYWNpbmciLCAiZ2V0RXZlblNwYWNpbmciLCAiZmFjdG9ycyIsICJfZmFjdG9yaXplIiwgInJlc3VsdCIsICJuZXh0IiwgImNlaWwiLCAibWFqb3JTdGFydCIsICJtYWpvckVuZCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJhcnIiLCAibGVuIiwgInJldmVyc2VBbGlnbiIsICJhbGlnbiIsICJvZmZzZXRGcm9tRWRnZSIsICJlZGdlIiwgImdldFRpY2tzTGltaXQiLCAidGlja3NMZW5ndGgiLCAic2FtcGxlIiwgIm51bUl0ZW1zIiwgImluY3JlbWVudCIsICJnZXRQaXhlbEZvckdyaWRMaW5lIiwgIm9mZnNldEdyaWRMaW5lcyIsICJ2YWxpZEluZGV4IiwgIl9zdGFydFBpeGVsIiwgIl9lbmRQaXhlbCIsICJlcHNpbG9uIiwgImxpbmVWYWx1ZSIsICJnZXRQaXhlbEZvclRpY2siLCAiZ2FyYmFnZUNvbGxlY3QiLCAiY2FjaGVzIiwgImNhY2hlIiwgImdjIiwgImdjTGVuIiwgImdldFRpY2tNYXJrTGVuZ3RoIiwgImRyYXdUaWNrcyIsICJnZXRUaXRsZUhlaWdodCIsICJmYWxsYmFjayIsICJmb250IiwgInRvRm9udCIsICJsaW5lcyIsICJpc0FycmF5IiwgInRleHQiLCAibGluZUhlaWdodCIsICJjcmVhdGVTY2FsZUNvbnRleHQiLCAicGFyZW50IiwgImNyZWF0ZUNvbnRleHQiLCAiY3JlYXRlVGlja0NvbnRleHQiLCAidGljayIsICJ0aXRsZUFsaWduIiwgIl90b0xlZnRSaWdodENlbnRlciIsICJ0aXRsZUFyZ3MiLCAic2NhbGVzIiwgInJvdGF0aW9uIiwgIm1heFdpZHRoIiwgInRpdGxlWCIsICJ0aXRsZVkiLCAiX2FsaWduU3RhcnRFbmQiLCAicG9zaXRpb25BeGlzSUQiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJIQUxGX1BJIiwgIlNjYWxlIiwgImNmZyIsICJpZCIsICJfbWFyZ2lucyIsICJtYXhIZWlnaHQiLCAicGFkZGluZ1RvcCIsICJwYWRkaW5nQm90dG9tIiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIsICJsYWJlbFJvdGF0aW9uIiwgIl9yYW5nZSIsICJfZ3JpZExpbmVJdGVtcyIsICJfbGFiZWxJdGVtcyIsICJfbGFiZWxTaXplcyIsICJfbG9uZ2VzdFRleHRDYWNoZSIsICJfdXNlck1heCIsICJfdXNlck1pbiIsICJfc3VnZ2VzdGVkTWF4IiwgIl9zdWdnZXN0ZWRNaW4iLCAiX3RpY2tzTGVuZ3RoIiwgIl9ib3JkZXJWYWx1ZSIsICJfY2FjaGUiLCAiX2RhdGFMaW1pdHNDYWNoZWQiLCAiJGNvbnRleHQiLCAic2V0Q29udGV4dCIsICJzdWdnZXN0ZWRNaW4iLCAic3VnZ2VzdGVkTWF4IiwgInJhdyIsICJnZXRVc2VyQm91bmRzIiwgImZpbml0ZU9yRGVmYXVsdCIsICJORUdBVElWRV9JTkZJTklUWSIsICJtaW5EZWZpbmVkIiwgImlzRmluaXRlIiwgIm1heERlZmluZWQiLCAiZ2V0TWluTWF4IiwgImNhblN0YWNrIiwgIm1ldGFzIiwgImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwgImdldFRpY2tzIiwgImdldExhYmVscyIsICJsYWJlbHMiLCAieExhYmVscyIsICJ5TGFiZWxzIiwgImdldExhYmVsSXRlbXMiLCAiX2NvbXB1dGVMYWJlbEl0ZW1zIiwgImJlZm9yZVVwZGF0ZSIsICJjYWxsIiwgIm1hcmdpbnMiLCAiYmVnaW5BdFplcm8iLCAiZ3JhY2UiLCAic2FtcGxlU2l6ZSIsICJiZWZvcmVTZXREaW1lbnNpb25zIiwgInNldERpbWVuc2lvbnMiLCAiYWZ0ZXJTZXREaW1lbnNpb25zIiwgImJlZm9yZURhdGFMaW1pdHMiLCAiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsICJhZnRlckRhdGFMaW1pdHMiLCAiX2FkZEdyYWNlIiwgImJlZm9yZUJ1aWxkVGlja3MiLCAiYnVpbGRUaWNrcyIsICJhZnRlckJ1aWxkVGlja3MiLCAic2FtcGxpbmdFbmFibGVkIiwgIl9jb252ZXJ0VGlja3NUb0xhYmVscyIsICJiZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgImNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAiYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgInNvdXJjZSIsICJhZnRlckF1dG9Ta2lwIiwgImJlZm9yZUZpdCIsICJmaXQiLCAiYWZ0ZXJGaXQiLCAiYWZ0ZXJVcGRhdGUiLCAicmV2ZXJzZVBpeGVscyIsICJzdGFydFBpeGVsIiwgImVuZFBpeGVsIiwgIl9hbGlnblRvUGl4ZWxzIiwgImFsaWduVG9QaXhlbHMiLCAiX2NhbGxIb29rcyIsICJuYW1lIiwgIm5vdGlmeVBsdWdpbnMiLCAiYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uIiwgImdlbmVyYXRlVGlja0xhYmVscyIsICJsYWJlbCIsICJjYWxsYmFjayIsICJhZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbiIsICJudW1UaWNrcyIsICJtaW5Sb3RhdGlvbiIsICJtYXhSb3RhdGlvbiIsICJ0aWNrV2lkdGgiLCAibWF4TGFiZWxEaWFnb25hbCIsICJfaXNWaXNpYmxlIiwgImxhYmVsU2l6ZXMiLCAiX2dldExhYmVsU2l6ZXMiLCAibWF4TGFiZWxXaWR0aCIsICJ3aWRlc3QiLCAibWF4TGFiZWxIZWlnaHQiLCAiaGlnaGVzdCIsICJfbGltaXRWYWx1ZSIsICJncmlkIiwgInRpdGxlIiwgInRvRGVncmVlcyIsICJhc2luIiwgIm1pblNpemUiLCAidGl0bGVPcHRzIiwgImdyaWRPcHRzIiwgInRpdGxlSGVpZ2h0IiwgInRpY2tQYWRkaW5nIiwgImFuZ2xlUmFkaWFucyIsICJ0b1JhZGlhbnMiLCAiY29zIiwgInNpbiIsICJsYWJlbEhlaWdodCIsICJtaXJyb3IiLCAibGFiZWxXaWR0aCIsICJfY2FsY3VsYXRlUGFkZGluZyIsICJfaGFuZGxlTWFyZ2lucyIsICJpc1JvdGF0ZWQiLCAibGFiZWxzQmVsb3dUaWNrcyIsICJvZmZzZXRMZWZ0IiwgIm9mZnNldFJpZ2h0IiwgImlzRnVsbFNpemUiLCAiX2NvbXB1dGVMYWJlbFNpemVzIiwgIndpZHRocyIsICJoZWlnaHRzIiwgIndpZGVzdExhYmVsU2l6ZSIsICJoaWdoZXN0TGFiZWxTaXplIiwgImpsZW4iLCAidGlja0ZvbnQiLCAiZm9udFN0cmluZyIsICJuZXN0ZWRMYWJlbCIsICJfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyIsICJzdHJpbmciLCAiX21lYXN1cmVUZXh0IiwgInZhbHVlQXQiLCAiaWR4IiwgImdldExhYmVsRm9yVmFsdWUiLCAiTmFOIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAicGl4ZWwiLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImRlY2ltYWwiLCAiX2ludDE2UmFuZ2UiLCAiX2FsaWduUGl4ZWwiLCAiZ2V0RGVjaW1hbEZvclBpeGVsIiwgImdldEJhc2VQaXhlbCIsICJnZXRCYXNlVmFsdWUiLCAib3B0aW9uVGlja3MiLCAicm90IiwgImF1dG9Ta2lwUGFkZGluZyIsICJfY29tcHV0ZUdyaWRMaW5lSXRlbXMiLCAiYm9yZGVyIiwgInRsIiwgImJvcmRlck9wdHMiLCAiYXhpc1dpZHRoIiwgImF4aXNIYWxmV2lkdGgiLCAiYWxpZ25Cb3JkZXJWYWx1ZSIsICJib3JkZXJWYWx1ZSIsICJhbGlnbmVkTGluZVZhbHVlIiwgInR4MSIsICJ0eTEiLCAidHgyIiwgInR5MiIsICJ4MSIsICJ5MSIsICJ4MiIsICJ5MiIsICJsaW1pdCIsICJzdGVwIiwgIm9wdHNBdEluZGV4IiwgIm9wdHNBdEluZGV4Qm9yZGVyIiwgImxpbmVXaWR0aCIsICJsaW5lQ29sb3IiLCAiY29sb3IiLCAiYm9yZGVyRGFzaCIsICJkYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiZGFzaE9mZnNldCIsICJ0aWNrQ29sb3IiLCAidGlja0JvcmRlckRhc2giLCAidGlja0JvcmRlckRhc2hPZmZzZXQiLCAiY3Jvc3NBbGlnbiIsICJ0aWNrQW5kUGFkZGluZyIsICJoVGlja0FuZFBhZGRpbmciLCAidGV4dEFsaWduIiwgImxpbmVDb3VudCIsICJ0ZXh0T2Zmc2V0IiwgInRleHRCYXNlbGluZSIsICJfZ2V0WEF4aXNMYWJlbEFsaWdubWVudCIsICJfZ2V0WUF4aXNMYWJlbEFsaWdubWVudCIsICJsYWJlbE9mZnNldCIsICJoYWxmQ291bnQiLCAic3Ryb2tlQ29sb3IiLCAidGV4dFN0cm9rZUNvbG9yIiwgInN0cm9rZVdpZHRoIiwgInRleHRTdHJva2VXaWR0aCIsICJ0aWNrVGV4dEFsaWduIiwgInNob3dMYWJlbEJhY2tkcm9wIiwgImJhY2tkcm9wIiwgImxhYmVsUGFkZGluZyIsICJiYWNrZHJvcFBhZGRpbmciLCAiYmFja2Ryb3BDb2xvciIsICJ0cmFuc2xhdGlvbiIsICJfY29tcHV0ZUxhYmVsQXJlYSIsICJkcmF3QmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAic2F2ZSIsICJmaWxsU3R5bGUiLCAiZmlsbFJlY3QiLCAicmVzdG9yZSIsICJnZXRMaW5lV2lkdGhGb3JWYWx1ZSIsICJmaW5kSW5kZXgiLCAidCIsICJvcHRzIiwgImRyYXdHcmlkIiwgImRyYXdMaW5lIiwgInAxIiwgInAyIiwgInN0cm9rZVN0eWxlIiwgInNldExpbmVEYXNoIiwgImxpbmVEYXNoT2Zmc2V0IiwgImJlZ2luUGF0aCIsICJtb3ZlVG8iLCAibGluZVRvIiwgInN0cm9rZSIsICJkcmF3T25DaGFydEFyZWEiLCAiZHJhd0JvcmRlciIsICJsYXN0TGluZVdpZHRoIiwgImRyYXdMYWJlbHMiLCAiYXJlYSIsICJjbGlwQXJlYSIsICJyZW5kZXJUZXh0T3B0aW9ucyIsICJyZW5kZXJUZXh0IiwgInVuY2xpcEFyZWEiLCAiZHJhd1RpdGxlIiwgInR6IiwgImd6IiwgImJ6IiwgImF4aXNJRCIsICJfbWF4RGlnaXRzIiwgImZvbnRTaXplIiwgIlR5cGVkUmVnaXN0cnkiLCAic2NvcGUiLCAiY3JlYXRlIiwgImlzRm9yVHlwZSIsICJpc1Byb3RvdHlwZU9mIiwgInJlZ2lzdGVyIiwgInByb3RvIiwgImdldFByb3RvdHlwZU9mIiwgInBhcmVudFNjb3BlIiwgImlzSUNoYXJ0Q29tcG9uZW50IiwgInJlZ2lzdGVyRGVmYXVsdHMiLCAib3ZlcnJpZGVzIiwgImdldCIsICJ1bnJlZ2lzdGVyIiwgIml0ZW1EZWZhdWx0cyIsICJtZXJnZSIsICJyb3V0ZURlZmF1bHRzIiwgImRlc2NyaXB0b3JzIiwgImRlc2NyaWJlIiwgInJvdXRlcyIsICJwcm9wZXJ0eSIsICJwcm9wZXJ0eVBhcnRzIiwgInNwbGl0IiwgInNvdXJjZU5hbWUiLCAicG9wIiwgInNvdXJjZVNjb3BlIiwgImpvaW4iLCAicGFydHMiLCAidGFyZ2V0TmFtZSIsICJ0YXJnZXRTY29wZSIsICJyb3V0ZSIsICJSZWdpc3RyeSIsICJjb250cm9sbGVycyIsICJEYXRhc2V0Q29udHJvbGxlciIsICJwbHVnaW5zIiwgIl90eXBlZFJlZ2lzdHJpZXMiLCAiYXJncyIsICJfZWFjaCIsICJyZW1vdmUiLCAiYWRkQ29udHJvbGxlcnMiLCAiYWRkRWxlbWVudHMiLCAiYWRkUGx1Z2lucyIsICJhZGRTY2FsZXMiLCAiZ2V0Q29udHJvbGxlciIsICJfZ2V0IiwgImdldEVsZW1lbnQiLCAiZ2V0UGx1Z2luIiwgImdldFNjYWxlIiwgInJlbW92ZUNvbnRyb2xsZXJzIiwgInJlbW92ZUVsZW1lbnRzIiwgInJlbW92ZVBsdWdpbnMiLCAicmVtb3ZlU2NhbGVzIiwgIm1ldGhvZCIsICJ0eXBlZFJlZ2lzdHJ5IiwgImFyZyIsICJyZWciLCAiX2dldFJlZ2lzdHJ5Rm9yVHlwZSIsICJfZXhlYyIsICJpdGVtUmVnIiwgInJlZ2lzdHJ5IiwgImNvbXBvbmVudCIsICJjYW1lbE1ldGhvZCIsICJfY2FwaXRhbGl6ZSIsICJQbHVnaW5TZXJ2aWNlIiwgIl9pbml0IiwgIm5vdGlmeSIsICJob29rIiwgIl9jcmVhdGVEZXNjcmlwdG9ycyIsICJfbm90aWZ5IiwgIl9kZXNjcmlwdG9ycyIsICJkZXNjcmlwdG9yIiwgInBsdWdpbiIsICJjYWxsQ2FsbGJhY2siLCAiY2FuY2VsYWJsZSIsICJpbnZhbGlkYXRlIiwgIl9vbGRDYWNoZSIsICJfbm90aWZ5U3RhdGVDaGFuZ2VzIiwgImFsbCIsICJhbGxQbHVnaW5zIiwgImNyZWF0ZURlc2NyaXB0b3JzIiwgInByZXZpb3VzRGVzY3JpcHRvcnMiLCAic29tZSIsICJsb2NhbElkcyIsICJsb2NhbCIsICJnZXRPcHRzIiwgInBsdWdpbk9wdHMiLCAicGx1Z2luU2NvcGVLZXlzIiwgInNjb3BlcyIsICJnZXRPcHRpb25TY29wZXMiLCAiY3JlYXRlUmVzb2x2ZXIiLCAic2NyaXB0YWJsZSIsICJpbmRleGFibGUiLCAiYWxsS2V5cyIsICJnZXRJbmRleEF4aXMiLCAiZGF0YXNldERlZmF1bHRzIiwgImRhdGFzZXRzIiwgImRhdGFzZXRPcHRpb25zIiwgImluZGV4QXhpcyIsICJnZXRBeGlzRnJvbURlZmF1bHRTY2FsZUlEIiwgImdldERlZmF1bHRTY2FsZUlERnJvbUF4aXMiLCAiaWRNYXRjaGVzQXhpcyIsICJheGlzRnJvbVBvc2l0aW9uIiwgImRldGVybWluZUF4aXMiLCAic2NhbGVPcHRpb25zIiwgInRvTG93ZXJDYXNlIiwgImdldEF4aXNGcm9tRGF0YXNldCIsICJyZXRyaWV2ZUF4aXNGcm9tRGF0YXNldHMiLCAiYm91bmREcyIsICJkIiwgInhBeGlzSUQiLCAieUF4aXNJRCIsICJtZXJnZVNjYWxlQ29uZmlnIiwgImNoYXJ0RGVmYXVsdHMiLCAiY29uZmlnU2NhbGVzIiwgImNoYXJ0SW5kZXhBeGlzIiwgInNjYWxlQ29uZiIsICJjb25zb2xlIiwgImVycm9yIiwgIl9wcm94eSIsICJ3YXJuIiwgImRlZmF1bHRJZCIsICJkZWZhdWx0U2NhbGVPcHRpb25zIiwgIm1lcmdlSWYiLCAiZGVmYXVsdElEIiwgImluaXRPcHRpb25zIiwgImluaXREYXRhIiwgImluaXRDb25maWciLCAia2V5Q2FjaGUiLCAia2V5c0NhY2hlZCIsICJTZXQiLCAiY2FjaGVkS2V5cyIsICJjYWNoZUtleSIsICJnZW5lcmF0ZSIsICJhZGRJZkZvdW5kIiwgIm9iaiIsICJyZXNvbHZlT2JqZWN0S2V5IiwgIkNvbmZpZyIsICJfY29uZmlnIiwgIl9zY29wZUNhY2hlIiwgIl9yZXNvbHZlckNhY2hlIiwgInBsYXRmb3JtIiwgImNsZWFyQ2FjaGUiLCAiY2xlYXIiLCAiZGF0YXNldFNjb3BlS2V5cyIsICJkYXRhc2V0VHlwZSIsICJkYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzIiwgInRyYW5zaXRpb24iLCAiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCAiZWxlbWVudFR5cGUiLCAiYWRkaXRpb25hbE9wdGlvblNjb3BlcyIsICJfY2FjaGVkU2NvcGVzIiwgIm1haW5TY29wZSIsICJyZXNldENhY2hlIiwgImtleUxpc3RzIiwgImNhY2hlZCIsICJBcnJheSIsICJmcm9tIiwgImhhcyIsICJjaGFydE9wdGlvblNjb3BlcyIsICJyZXNvbHZlTmFtZWRPcHRpb25zIiwgIm5hbWVzIiwgInByZWZpeGVzIiwgIiRzaGFyZWQiLCAicmVzb2x2ZXIiLCAic3ViUHJlZml4ZXMiLCAiZ2V0UmVzb2x2ZXIiLCAibmVlZENvbnRleHQiLCAiaXNGdW5jdGlvbiIsICJzdWJSZXNvbHZlciIsICJfYXR0YWNoQ29udGV4dCIsICJkZXNjcmlwdG9yRGVmYXVsdHMiLCAicmVzb2x2ZXJDYWNoZSIsICJfY3JlYXRlUmVzb2x2ZXIiLCAicCIsICJoYXNGdW5jdGlvbiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFjYyIsICJpc1NjcmlwdGFibGUiLCAiaXNJbmRleGFibGUiLCAiS05PV05fUE9TSVRJT05TIiwgInBvc2l0aW9uSXNIb3Jpem9udGFsIiwgImNvbXBhcmUyTGV2ZWwiLCAibDEiLCAibDIiLCAib25BbmltYXRpb25zQ29tcGxldGUiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJvbkNvbXBsZXRlIiwgIm9uQW5pbWF0aW9uUHJvZ3Jlc3MiLCAib25Qcm9ncmVzcyIsICJnZXRDYW52YXMiLCAiZ2V0RWxlbWVudEJ5SWQiLCAiaW5zdGFuY2VzIiwgImdldENoYXJ0IiwgInZhbHVlcyIsICJjIiwgIm1vdmVOdW1lcmljS2V5cyIsICJtb3ZlIiwgImludEtleSIsICJkZXRlcm1pbmVMYXN0RXZlbnQiLCAibGFzdEV2ZW50IiwgImluQ2hhcnRBcmVhIiwgImlzQ2xpY2siLCAiZ2V0RGF0YXNldEFyZWEiLCAieFNjYWxlIiwgInlTY2FsZSIsICJDaGFydCIsICJpbnZhbGlkYXRlUGx1Z2lucyIsICJ1c2VyQ29uZmlnIiwgImluaXRpYWxDYW52YXMiLCAiZXhpc3RpbmdDaGFydCIsICJ1aWQiLCAiX29wdGlvbnMiLCAiX2FzcGVjdFJhdGlvIiwgIl9tZXRhc2V0cyIsICJfc3RhY2tzIiwgIl9hY3RpdmUiLCAiX2xhc3RFdmVudCIsICJfbGlzdGVuZXJzIiwgIl9yZXNwb25zaXZlTGlzdGVuZXJzIiwgIl9zb3J0ZWRNZXRhc2V0cyIsICJfcGx1Z2lucyIsICJfaGlkZGVuSW5kaWNlcyIsICJhdHRhY2hlZCIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9kb1Jlc2l6ZSIsICJkZWJvdW5jZSIsICJtb2RlIiwgInJlc2l6ZURlbGF5IiwgIl9kYXRhQ2hhbmdlcyIsICJhbmltYXRvciIsICJsaXN0ZW4iLCAiX2luaXRpYWxpemUiLCAibWFpbnRhaW5Bc3BlY3RSYXRpbyIsICJyZXNwb25zaXZlIiwgInJldGluYVNjYWxlIiwgImJpbmRFdmVudHMiLCAiY2xlYXJDYW52YXMiLCAic3RvcCIsICJydW5uaW5nIiwgIl9yZXNpemUiLCAiX3Jlc2l6ZUJlZm9yZURyYXciLCAibmV3U2l6ZSIsICJuZXdSYXRpbyIsICJvblJlc2l6ZSIsICJyZW5kZXIiLCAiZW5zdXJlU2NhbGVzSGF2ZUlEcyIsICJzY2FsZXNPcHRpb25zIiwgImF4aXNPcHRpb25zIiwgImJ1aWxkT3JVcGRhdGVTY2FsZXMiLCAic2NhbGVPcHRzIiwgInVwZGF0ZWQiLCAibWFwIiwgImlzUmFkaWFsIiwgImRwb3NpdGlvbiIsICJkdHlwZSIsICJzY2FsZVR5cGUiLCAic2NhbGVDbGFzcyIsICJoYXNVcGRhdGVkIiwgIl91cGRhdGVNZXRhc2V0cyIsICJudW1EYXRhIiwgIm51bU1ldGEiLCAiX2Rlc3Ryb3lEYXRhc2V0TWV0YSIsICJzbGljZSIsICJfcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMiLCAiX2RhdGFzZXQiLCAiYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzIiwgIm5ld0NvbnRyb2xsZXJzIiwgIm9yZGVyIiwgInZpc2libGUiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJ1cGRhdGVJbmRleCIsICJsaW5rU2NhbGVzIiwgIkNvbnRyb2xsZXJDbGFzcyIsICJkYXRhc2V0RWxlbWVudFR5cGUiLCAiZGF0YUVsZW1lbnRUeXBlIiwgIl9yZXNldEVsZW1lbnRzIiwgInJlc2V0IiwgImFuaW1zRGlzYWJsZWQiLCAiX3VwZGF0ZVNjYWxlcyIsICJfY2hlY2tFdmVudEJpbmRpbmdzIiwgIl91cGRhdGVIaWRkZW5JbmRpY2VzIiwgImJ1aWxkT3JVcGRhdGVFbGVtZW50cyIsICJnZXRNYXhPdmVyZmxvdyIsICJfbWluUGFkZGluZyIsICJhdXRvUGFkZGluZyIsICJfdXBkYXRlTGF5b3V0IiwgIl91cGRhdGVEYXRhc2V0cyIsICJfZXZlbnRIYW5kbGVyIiwgIl91cGRhdGVIb3ZlclN0eWxlcyIsICJleGlzdGluZ0V2ZW50cyIsICJuZXdFdmVudHMiLCAiZXZlbnRzIiwgInNldHNFcXVhbCIsICJ1bmJpbmRFdmVudHMiLCAiY2hhbmdlcyIsICJfZ2V0VW5pZm9ybURhdGFDaGFuZ2VzIiwgImRhdGFzZXRDb3VudCIsICJtYWtlU2V0IiwgImNoYW5nZVNldCIsICJub0FyZWEiLCAiX2lkeCIsICJfdXBkYXRlRGF0YXNldCIsICJfdXBkYXRlIiwgImxheWVycyIsICJfZHJhd0RhdGFzZXRzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAiZmlsdGVyVmlzaWJsZSIsICJfZHJhd0RhdGFzZXQiLCAiY2xpcCIsICJfY2xpcCIsICJ1c2VDbGlwIiwgImRpc2FibGVkIiwgImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCAiSW50ZXJhY3Rpb24iLCAiaGlkZGVuIiwgIl9wYXJzZWQiLCAiZ2V0VmlzaWJsZURhdGFzZXRDb3VudCIsICJzZXREYXRhc2V0VmlzaWJpbGl0eSIsICJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJfdXBkYXRlVmlzaWJpbGl0eSIsICJkYXRhSW5kZXgiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgImhpZGUiLCAic2hvdyIsICJfZGVzdHJveSIsICJfc3RvcCIsICJkZXN0cm95IiwgInRvQmFzZTY0SW1hZ2UiLCAidG9EYXRhVVJMIiwgImJpbmRVc2VyRXZlbnRzIiwgImJpbmRSZXNwb25zaXZlRXZlbnRzIiwgImxpc3RlbmVycyIsICJfYWRkIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJfcmVtb3ZlIiwgImRldGFjaGVkIiwgInVwZGF0ZUhvdmVyU3R5bGUiLCAicHJlZml4IiwgImdldEFjdGl2ZUVsZW1lbnRzIiwgInNldEFjdGl2ZUVsZW1lbnRzIiwgImFjdGl2ZUVsZW1lbnRzIiwgImxhc3RBY3RpdmUiLCAiX2VsZW1lbnRzRXF1YWwiLCAiaXNQbHVnaW5FbmFibGVkIiwgInBsdWdpbklkIiwgInJlcGxheSIsICJob3Zlck9wdGlvbnMiLCAiaG92ZXIiLCAiZGVhY3RpdmF0ZWQiLCAiYWN0aXZhdGVkIiwgImV2ZW50RmlsdGVyIiwgIl9oYW5kbGVFdmVudCIsICJfZ2V0QWN0aXZlRWxlbWVudHMiLCAiX2lzQ2xpY2tFdmVudCIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAidmVyc2lvbiIsICJjbGlwQXJjIiwgInBpeGVsTWFyZ2luIiwgIm91dGVyUmFkaXVzIiwgImlubmVyUmFkaXVzIiwgImFuZ2xlTWFyZ2luIiwgImFyYyIsICJjbG9zZVBhdGgiLCAidG9SYWRpdXNDb3JuZXJzIiwgIl9yZWFkVmFsdWVUb1Byb3BzIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImFuZ2xlRGVsdGEiLCAibyIsICJib3JkZXJSYWRpdXMiLCAiaGFsZlRoaWNrbmVzcyIsICJpbm5lckxpbWl0IiwgImNvbXB1dGVPdXRlckxpbWl0IiwgInZhbCIsICJvdXRlckFyY0xpbWl0IiwgIm91dGVyU3RhcnQiLCAib3V0ZXJFbmQiLCAiaW5uZXJTdGFydCIsICJpbm5lckVuZCIsICJyVGhldGFUb1hZIiwgInIiLCAidGhldGEiLCAicGF0aEFyYyIsICJjaXJjdWxhciIsICJpbm5lclIiLCAic3BhY2luZ09mZnNldCIsICJhbHBoYSIsICJub1NwYWNpbmdJbm5lclJhZGl1cyIsICJub1NwYWNpbmdPdXRlclJhZGl1cyIsICJhdk5vZ1NwYWNpbmdSYWRpdXMiLCAiYWRqdXN0ZWRBbmdsZSIsICJiZXRhIiwgIlBJIiwgImFuZ2xlT2Zmc2V0IiwgIm91dGVyU3RhcnRBZGp1c3RlZFJhZGl1cyIsICJvdXRlckVuZEFkanVzdGVkUmFkaXVzIiwgIm91dGVyU3RhcnRBZGp1c3RlZEFuZ2xlIiwgIm91dGVyRW5kQWRqdXN0ZWRBbmdsZSIsICJpbm5lclN0YXJ0QWRqdXN0ZWRSYWRpdXMiLCAiaW5uZXJFbmRBZGp1c3RlZFJhZGl1cyIsICJpbm5lclN0YXJ0QWRqdXN0ZWRBbmdsZSIsICJpbm5lckVuZEFkanVzdGVkQW5nbGUiLCAib3V0ZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInBDZW50ZXIiLCAicDQiLCAiaW5uZXJNaWRBZGp1c3RlZEFuZ2xlIiwgInA4IiwgIm91dGVyU3RhcnRYIiwgIm91dGVyU3RhcnRZIiwgIm91dGVyRW5kWCIsICJvdXRlckVuZFkiLCAiZHJhd0FyYyIsICJmdWxsQ2lyY2xlcyIsICJjaXJjdW1mZXJlbmNlIiwgImZpbGwiLCAiaXNOYU4iLCAiVEFVIiwgImJvcmRlcldpZHRoIiwgImJvcmRlckpvaW5TdHlsZSIsICJpbm5lciIsICJib3JkZXJBbGlnbiIsICJsaW5lSm9pbiIsICJBcmNFbGVtZW50IiwgImNoYXJ0WCIsICJjaGFydFkiLCAickFkanVzdCIsICJfY2lyY3VtZmVyZW5jZSIsICJiZXR3ZWVuQW5nbGVzIiwgIndpdGhpblJhZGl1cyIsICJfaXNCZXR3ZWVuIiwgImhhbGZBbmdsZSIsICJoYWxmUmFkaXVzIiwgInRyYW5zbGF0ZSIsICJmaXgiLCAicmFkaXVzT2Zmc2V0IiwgImJvcmRlckNvbG9yIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiZ2V0QmFyQm91bmRzIiwgImJhciIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgIngiLCAieSIsICJiYXNlIiwgIndpZHRoIiwgImhlaWdodCIsICJnZXRQcm9wcyIsICJsZWZ0IiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iLCAiaGFsZiIsICJob3Jpem9udGFsIiwgIk1hdGgiLCAibWluIiwgIm1heCIsICJza2lwT3JMaW1pdCIsICJza2lwIiwgInZhbHVlIiwgIl9saW1pdFZhbHVlIiwgInBhcnNlQm9yZGVyV2lkdGgiLCAibWF4VyIsICJtYXhIIiwgIm9wdGlvbnMiLCAiYm9yZGVyV2lkdGgiLCAiYm9yZGVyU2tpcHBlZCIsICJvIiwgInRvVFJCTCIsICJ0IiwgInIiLCAiYiIsICJsIiwgInBhcnNlQm9yZGVyUmFkaXVzIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJtYXhSIiwgImVuYWJsZUJvcmRlciIsICJpc09iamVjdCIsICJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAiYm91bmRpbmdSZWN0cyIsICJib3VuZHMiLCAiYm9yZGVyIiwgInJhZGl1cyIsICJvdXRlciIsICJ3IiwgImgiLCAiaW5uZXIiLCAiaW5SYW5nZSIsICJza2lwWCIsICJza2lwWSIsICJza2lwQm90aCIsICJfaXNCZXR3ZWVuIiwgImhhc1JhZGl1cyIsICJhZGROb3JtYWxSZWN0UGF0aCIsICJjdHgiLCAicmVjdCIsICJpbmZsYXRlUmVjdCIsICJhbW91bnQiLCAicmVmUmVjdCIsICJCYXJFbGVtZW50IiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY2ZnIiwgInVuZGVmaW5lZCIsICJpbmZsYXRlQW1vdW50IiwgIk9iamVjdCIsICJhc3NpZ24iLCAiZHJhdyIsICJib3JkZXJDb2xvciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYWRkUmVjdFBhdGgiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInNhdmUiLCAiYmVnaW5QYXRoIiwgImNsaXAiLCAiZmlsbFN0eWxlIiwgImZpbGwiLCAicmVzdG9yZSIsICJtb3VzZVgiLCAibW91c2VZIiwgImluWFJhbmdlIiwgImluWVJhbmdlIiwgImdldENlbnRlclBvaW50IiwgImdldFJhbmdlIiwgImF4aXMiLCAiaWQiLCAiZGVmYXVsdHMiLCAicG9pbnRTdHlsZSIsICJkZWZhdWx0Um91dGVzIiwgImdldEJveFNpemUiLCAibGFiZWxPcHRzIiwgImZvbnRTaXplIiwgImJveEhlaWdodCIsICJib3hXaWR0aCIsICJ1c2VQb2ludFN0eWxlIiwgIk1hdGgiLCAibWluIiwgInBvaW50U3R5bGVXaWR0aCIsICJpdGVtSGVpZ2h0IiwgIm1heCIsICJpdGVtc0VxdWFsIiwgImEiLCAiYiIsICJkYXRhc2V0SW5kZXgiLCAiaW5kZXgiLCAiTGVnZW5kIiwgIkVsZW1lbnQiLCAiY29uc3RydWN0b3IiLCAiY29uZmlnIiwgIl9hZGRlZCIsICJsZWdlbmRIaXRCb3hlcyIsICJfaG92ZXJlZEl0ZW0iLCAiZG91Z2hudXRNb2RlIiwgImNoYXJ0IiwgIm9wdGlvbnMiLCAiY3R4IiwgImxlZ2VuZEl0ZW1zIiwgInVuZGVmaW5lZCIsICJjb2x1bW5TaXplcyIsICJsaW5lV2lkdGhzIiwgIm1heEhlaWdodCIsICJtYXhXaWR0aCIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl9tYXJnaW5zIiwgInBvc2l0aW9uIiwgIndlaWdodCIsICJmdWxsU2l6ZSIsICJ1cGRhdGUiLCAibWFyZ2lucyIsICJzZXREaW1lbnNpb25zIiwgImJ1aWxkTGFiZWxzIiwgImZpdCIsICJpc0hvcml6b250YWwiLCAibGFiZWxzIiwgImNhbGwiLCAiZ2VuZXJhdGVMYWJlbHMiLCAiZmlsdGVyIiwgIml0ZW0iLCAiZGF0YSIsICJzb3J0IiwgInJldmVyc2UiLCAiZGlzcGxheSIsICJsYWJlbEZvbnQiLCAidG9Gb250IiwgImZvbnQiLCAic2l6ZSIsICJ0aXRsZUhlaWdodCIsICJfY29tcHV0ZVRpdGxlSGVpZ2h0IiwgInN0cmluZyIsICJfZml0Um93cyIsICJfZml0Q29scyIsICJwYWRkaW5nIiwgImhpdGJveGVzIiwgImxpbmVIZWlnaHQiLCAidG90YWxIZWlnaHQiLCAidGV4dEFsaWduIiwgInRleHRCYXNlbGluZSIsICJyb3ciLCAiZm9yRWFjaCIsICJsZWdlbmRJdGVtIiwgImkiLCAiaXRlbVdpZHRoIiwgIm1lYXN1cmVUZXh0IiwgInRleHQiLCAibGVuZ3RoIiwgIl9pdGVtSGVpZ2h0IiwgImhlaWdodExpbWl0IiwgInRvdGFsV2lkdGgiLCAiY3VycmVudENvbFdpZHRoIiwgImN1cnJlbnRDb2xIZWlnaHQiLCAiY29sIiwgImNhbGN1bGF0ZUl0ZW1TaXplIiwgInB1c2giLCAiYWRqdXN0SGl0Qm94ZXMiLCAiYWxpZ24iLCAicnRsIiwgInJ0bEhlbHBlciIsICJnZXRSdGxBZGFwdGVyIiwgIl9hbGlnblN0YXJ0RW5kIiwgImhpdGJveCIsICJsZWZ0Rm9yTHRyIiwgIngiLCAiZHJhdyIsICJjbGlwQXJlYSIsICJfZHJhdyIsICJ1bmNsaXBBcmVhIiwgIm9wdHMiLCAiZGVmYXVsdENvbG9yIiwgImRlZmF1bHRzIiwgImNvbG9yIiwgImhhbGZGb250U2l6ZSIsICJjdXJzb3IiLCAiZHJhd1RpdGxlIiwgImxpbmVXaWR0aCIsICJkcmF3TGVnZW5kQm94IiwgInkiLCAiaXNOYU4iLCAic2F2ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJmaWxsU3R5bGUiLCAibGluZUNhcCIsICJsaW5lRGFzaE9mZnNldCIsICJsaW5lSm9pbiIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJsaW5lRGFzaCIsICJkcmF3T3B0aW9ucyIsICJyYWRpdXMiLCAiU1FSVDIiLCAicG9pbnRTdHlsZSIsICJyb3RhdGlvbiIsICJib3JkZXJXaWR0aCIsICJjZW50ZXJYIiwgInhQbHVzIiwgImNlbnRlclkiLCAiZHJhd1BvaW50TGVnZW5kIiwgInlCb3hUb3AiLCAieEJveExlZnQiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAiYmVnaW5QYXRoIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAic29tZSIsICJ2IiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJ3IiwgImgiLCAicmVjdCIsICJmaWxsIiwgInN0cm9rZSIsICJyZXN0b3JlIiwgImZpbGxUZXh0IiwgInJlbmRlclRleHQiLCAic3RyaWtldGhyb3VnaCIsICJoaWRkZW4iLCAibGluZSIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAidGV4dERpcmVjdGlvbiIsICJmb250Q29sb3IiLCAidGV4dFdpZHRoIiwgInNldFdpZHRoIiwgInJlYWxYIiwgIl90ZXh0WCIsICJmb250TGluZUhlaWdodCIsICJjYWxjdWxhdGVMZWdlbmRJdGVtSGVpZ2h0IiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInRpdGxlT3B0cyIsICJ0aXRsZSIsICJ0aXRsZUZvbnQiLCAidGl0bGVQYWRkaW5nIiwgInRvUGFkZGluZyIsICJ0b3BQYWRkaW5nUGx1c0hhbGZGb250U2l6ZSIsICJyZWR1Y2UiLCAiYWNjIiwgIl90b0xlZnRSaWdodENlbnRlciIsICJfZ2V0TGVnZW5kSXRlbUF0IiwgImhpdEJveCIsICJsaCIsICJfaXNCZXR3ZWVuIiwgImhhbmRsZUV2ZW50IiwgImUiLCAiaXNMaXN0ZW5lZCIsICJ0eXBlIiwgImhvdmVyZWRJdGVtIiwgInByZXZpb3VzIiwgInNhbWVJdGVtIiwgIm9uTGVhdmUiLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgImNhbGN1bGF0ZUl0ZW1XaWR0aCIsICJjYWxjdWxhdGVJdGVtSGVpZ2h0IiwgImxlZ2VuZEl0ZW1UZXh0IiwgImxhYmVsSGVpZ2h0IiwgImlkIiwgIl9lbGVtZW50IiwgInN0YXJ0IiwgIl9hcmdzIiwgImxlZ2VuZCIsICJsYXlvdXRzIiwgImNvbmZpZ3VyZSIsICJhZGRCb3giLCAic3RvcCIsICJyZW1vdmVCb3giLCAiYmVmb3JlVXBkYXRlIiwgImFmdGVyVXBkYXRlIiwgImFmdGVyRXZlbnQiLCAiYXJncyIsICJyZXBsYXkiLCAiZXZlbnQiLCAiY2kiLCAiaXNEYXRhc2V0VmlzaWJsZSIsICJoaWRlIiwgInNob3ciLCAiZGF0YXNldHMiLCAidXNlQm9yZGVyUmFkaXVzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAibWFwIiwgIm1ldGEiLCAic3R5bGUiLCAiY29udHJvbGxlciIsICJnZXRTdHlsZSIsICJsYWJlbCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAidmlzaWJsZSIsICJib3JkZXJDYXBTdHlsZSIsICJib3JkZXJEYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiYm9yZGVySm9pblN0eWxlIiwgImJvcmRlckNvbG9yIiwgImRlc2NyaXB0b3JzIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAic3RhcnRzV2l0aCIsICJpbmNsdWRlcyIsICJUaXRsZSIsICJfcGFkZGluZyIsICJsaW5lQ291bnQiLCAiaXNBcnJheSIsICJ0ZXh0U2l6ZSIsICJwb3MiLCAiX2RyYXdBcmdzIiwgIm9mZnNldCIsICJ0aXRsZVgiLCAidGl0bGVZIiwgIlBJIiwgImZvbnRPcHRzIiwgInRyYW5zbGF0aW9uIiwgImNyZWF0ZVRpdGxlIiwgInRpdGxlQmxvY2siLCAiZGVmYXVsdFJvdXRlcyIsICJfaW5kZXhhYmxlIiwgIldlYWtNYXAiLCAic2V0IiwgImdldCIsICJkZWxldGUiLCAicG9zaXRpb25lcnMiLCAiYXZlcmFnZSIsICJpdGVtcyIsICJsZW4iLCAiY291bnQiLCAiZWwiLCAiZWxlbWVudCIsICJoYXNWYWx1ZSIsICJ0b29sdGlwUG9zaXRpb24iLCAibmVhcmVzdCIsICJldmVudFBvc2l0aW9uIiwgIm1pbkRpc3RhbmNlIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJuZWFyZXN0RWxlbWVudCIsICJjZW50ZXIiLCAiZ2V0Q2VudGVyUG9pbnQiLCAiZCIsICJkaXN0YW5jZUJldHdlZW5Qb2ludHMiLCAidHAiLCAicHVzaE9yQ29uY2F0IiwgImJhc2UiLCAidG9QdXNoIiwgIkFycmF5IiwgInByb3RvdHlwZSIsICJhcHBseSIsICJzcGxpdE5ld2xpbmVzIiwgInN0ciIsICJTdHJpbmciLCAiaW5kZXhPZiIsICJzcGxpdCIsICJjcmVhdGVUb29sdGlwSXRlbSIsICJnZXREYXRhc2V0TWV0YSIsICJ2YWx1ZSIsICJnZXRMYWJlbEFuZFZhbHVlIiwgInBhcnNlZCIsICJnZXRQYXJzZWQiLCAicmF3IiwgImZvcm1hdHRlZFZhbHVlIiwgImRhdGFzZXQiLCAiZ2V0RGF0YXNldCIsICJkYXRhSW5kZXgiLCAiZ2V0VG9vbHRpcFNpemUiLCAidG9vbHRpcCIsICJib2R5IiwgImZvb3RlciIsICJib2R5Rm9udCIsICJmb290ZXJGb250IiwgInRpdGxlTGluZUNvdW50IiwgImZvb3RlckxpbmVDb3VudCIsICJib2R5TGluZUl0ZW1Db3VudCIsICJjb21iaW5lZEJvZHlMZW5ndGgiLCAiYm9keUl0ZW0iLCAiYmVmb3JlIiwgImxpbmVzIiwgImFmdGVyIiwgImJlZm9yZUJvZHkiLCAiYWZ0ZXJCb2R5IiwgInRpdGxlU3BhY2luZyIsICJ0aXRsZU1hcmdpbkJvdHRvbSIsICJib2R5TGluZUhlaWdodCIsICJkaXNwbGF5Q29sb3JzIiwgImJvZHlTcGFjaW5nIiwgImZvb3Rlck1hcmdpblRvcCIsICJmb290ZXJTcGFjaW5nIiwgIndpZHRoUGFkZGluZyIsICJtYXhMaW5lV2lkdGgiLCAiZWFjaCIsICJjb25jYXQiLCAiYm94UGFkZGluZyIsICJkZXRlcm1pbmVZQWxpZ24iLCAiZG9lc05vdEZpdFdpdGhBbGlnbiIsICJ4QWxpZ24iLCAiY2FyZXQiLCAiY2FyZXRTaXplIiwgImNhcmV0UGFkZGluZyIsICJkZXRlcm1pbmVYQWxpZ24iLCAieUFsaWduIiwgImNoYXJ0V2lkdGgiLCAiY2hhcnRBcmVhIiwgImRldGVybWluZUFsaWdubWVudCIsICJhbGlnblgiLCAiYWxpZ25ZIiwgInBhZGRpbmdBbmRTaXplIiwgImdldEJhY2tncm91bmRQb2ludCIsICJhbGlnbm1lbnQiLCAiY29ybmVyUmFkaXVzIiwgInRvcExlZnQiLCAidG9wUmlnaHQiLCAiYm90dG9tTGVmdCIsICJib3R0b21SaWdodCIsICJfbGltaXRWYWx1ZSIsICJnZXRBbGlnbmVkWCIsICJnZXRCZWZvcmVBZnRlckJvZHlMaW5lcyIsICJjYWxsYmFjayIsICJjcmVhdGVUb29sdGlwQ29udGV4dCIsICJwYXJlbnQiLCAidG9vbHRpcEl0ZW1zIiwgImNyZWF0ZUNvbnRleHQiLCAib3ZlcnJpZGVDYWxsYmFja3MiLCAiY2FsbGJhY2tzIiwgImNvbnRleHQiLCAib3ZlcnJpZGUiLCAiZGVmYXVsdENhbGxiYWNrcyIsICJiZWZvcmVUaXRsZSIsICJub29wIiwgImxhYmVsQ291bnQiLCAibW9kZSIsICJhZnRlclRpdGxlIiwgImJlZm9yZUxhYmVsIiwgInRvb2x0aXBJdGVtIiwgImlzTnVsbE9yVW5kZWYiLCAibGFiZWxDb2xvciIsICJsYWJlbFRleHRDb2xvciIsICJib2R5Q29sb3IiLCAibGFiZWxQb2ludFN0eWxlIiwgImFmdGVyTGFiZWwiLCAiYmVmb3JlRm9vdGVyIiwgImFmdGVyRm9vdGVyIiwgImludm9rZUNhbGxiYWNrV2l0aEZhbGxiYWNrIiwgImFyZyIsICJyZXN1bHQiLCAiVG9vbHRpcCIsICJvcGFjaXR5IiwgIl9hY3RpdmUiLCAiX2V2ZW50UG9zaXRpb24iLCAiX3NpemUiLCAiX2NhY2hlZEFuaW1hdGlvbnMiLCAiX3Rvb2x0aXBJdGVtcyIsICIkYW5pbWF0aW9ucyIsICIkY29udGV4dCIsICJkYXRhUG9pbnRzIiwgImNhcmV0WCIsICJjYXJldFkiLCAibGFiZWxDb2xvcnMiLCAibGFiZWxQb2ludFN0eWxlcyIsICJsYWJlbFRleHRDb2xvcnMiLCAiaW5pdGlhbGl6ZSIsICJfcmVzb2x2ZUFuaW1hdGlvbnMiLCAiY2FjaGVkIiwgInNldENvbnRleHQiLCAiZ2V0Q29udGV4dCIsICJlbmFibGVkIiwgImFuaW1hdGlvbiIsICJhbmltYXRpb25zIiwgIkFuaW1hdGlvbnMiLCAiX2NhY2hlYWJsZSIsICJmcmVlemUiLCAiZ2V0VGl0bGUiLCAiZ2V0QmVmb3JlQm9keSIsICJnZXRCb2R5IiwgImJvZHlJdGVtcyIsICJzY29wZWQiLCAiZ2V0QWZ0ZXJCb2R5IiwgImdldEZvb3RlciIsICJfY3JlYXRlSXRlbXMiLCAiYWN0aXZlIiwgImFycmF5IiwgIml0ZW1Tb3J0IiwgImNoYW5nZWQiLCAicHJvcGVydGllcyIsICJwb3NpdGlvbkFuZFNpemUiLCAiYXNzaWduIiwgImJhY2tncm91bmRQb2ludCIsICJleHRlcm5hbCIsICJkcmF3Q2FyZXQiLCAidG9vbHRpcFBvaW50IiwgImNhcmV0UG9zaXRpb24iLCAiZ2V0Q2FyZXRQb3NpdGlvbiIsICJsaW5lVG8iLCAieDEiLCAieTEiLCAieDIiLCAieTIiLCAieDMiLCAieTMiLCAicHRYIiwgInB0WSIsICJwdCIsICJ0aXRsZUFsaWduIiwgInRpdGxlQ29sb3IiLCAiX2RyYXdDb2xvckJveCIsICJjb2xvclgiLCAicnRsQ29sb3JYIiwgInlPZmZTZXQiLCAiY29sb3JZIiwgIm11bHRpS2V5QmFja2dyb3VuZCIsICJkcmF3UG9pbnQiLCAiaXNPYmplY3QiLCAib3V0ZXJYIiwgImlubmVyWCIsICJmaWxsUmVjdCIsICJzdHJva2VSZWN0IiwgImRyYXdCb2R5IiwgImJvZHlBbGlnbiIsICJ4TGluZVBhZGRpbmciLCAiZmlsbExpbmVPZlRleHQiLCAiYm9keUFsaWduRm9yQ2FsY3VsYXRpb24iLCAidGV4dENvbG9yIiwgImoiLCAiaWxlbiIsICJqbGVuIiwgImRyYXdGb290ZXIiLCAiZm9vdGVyQWxpZ24iLCAiZm9vdGVyQ29sb3IiLCAiZHJhd0JhY2tncm91bmQiLCAidG9vbHRpcFNpemUiLCAibW92ZVRvIiwgInF1YWRyYXRpY0N1cnZlVG8iLCAiY2xvc2VQYXRoIiwgIl91cGRhdGVBbmltYXRpb25UYXJnZXQiLCAiYW5pbXMiLCAiYW5pbVgiLCAiYW5pbVkiLCAicG9pbnQiLCAiX3RvIiwgIl93aWxsUmVuZGVyIiwgImFicyIsICJoYXNUb29sdGlwQ29udGVudCIsICJnbG9iYWxBbHBoYSIsICJnZXRBY3RpdmVFbGVtZW50cyIsICJzZXRBY3RpdmVFbGVtZW50cyIsICJhY3RpdmVFbGVtZW50cyIsICJsYXN0QWN0aXZlIiwgIkVycm9yIiwgIl9lbGVtZW50c0VxdWFsIiwgInBvc2l0aW9uQ2hhbmdlZCIsICJfcG9zaXRpb25DaGFuZ2VkIiwgIl9pZ25vcmVSZXBsYXlFdmVudHMiLCAiaW5DaGFydEFyZWEiLCAiX2dldEFjdGl2ZUVsZW1lbnRzIiwgImdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUiLCAiYWZ0ZXJJbml0IiwgInJlc2V0IiwgImFmdGVyRHJhdyIsICJub3RpZnlQbHVnaW5zIiwgImNhbmNlbGFibGUiLCAidXNlRmluYWxQb3NpdGlvbiIsICJkdXJhdGlvbiIsICJlYXNpbmciLCAibnVtYmVycyIsICJfZmFsbGJhY2siLCAiYWRkaXRpb25hbE9wdGlvblNjb3BlcyIsICJhZGRJZlN0cmluZyIsICJsYWJlbHMiLCAicmF3IiwgImluZGV4IiwgImFkZGVkTGFiZWxzIiwgInB1c2giLCAidW5zaGlmdCIsICJsYWJlbCIsICJpc05hTiIsICJmaW5kT3JBZGRMYWJlbCIsICJmaXJzdCIsICJpbmRleE9mIiwgImxhc3QiLCAibGFzdEluZGV4T2YiLCAidmFsaWRJbmRleCIsICJtYXgiLCAiX2xpbWl0VmFsdWUiLCAiTWF0aCIsICJyb3VuZCIsICJfZ2V0TGFiZWxGb3JWYWx1ZSIsICJ2YWx1ZSIsICJnZXRMYWJlbHMiLCAibGVuZ3RoIiwgIkNhdGVnb3J5U2NhbGUiLCAiU2NhbGUiLCAiY29uc3RydWN0b3IiLCAiY2ZnIiwgIl9zdGFydFZhbHVlIiwgInVuZGVmaW5lZCIsICJfdmFsdWVSYW5nZSIsICJfYWRkZWRMYWJlbHMiLCAiaW5pdCIsICJzY2FsZU9wdGlvbnMiLCAiYWRkZWQiLCAic3BsaWNlIiwgInBhcnNlIiwgImlzTnVsbE9yVW5kZWYiLCAiaXNGaW5pdGUiLCAidmFsdWVPckRlZmF1bHQiLCAiZGV0ZXJtaW5lRGF0YUxpbWl0cyIsICJtaW5EZWZpbmVkIiwgIm1heERlZmluZWQiLCAiZ2V0VXNlckJvdW5kcyIsICJtaW4iLCAiZ2V0TWluTWF4IiwgIm9wdGlvbnMiLCAiYm91bmRzIiwgImJ1aWxkVGlja3MiLCAib2Zmc2V0IiwgInRpY2tzIiwgInNsaWNlIiwgImdldExhYmVsRm9yVmFsdWUiLCAiY2FsbCIsICJjb25maWd1cmUiLCAiaXNIb3Jpem9udGFsIiwgIl9yZXZlcnNlUGl4ZWxzIiwgImdldFBpeGVsRm9yVmFsdWUiLCAiTmFOIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJnZXRQaXhlbEZvclRpY2siLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJwaXhlbCIsICJnZXREZWNpbWFsRm9yUGl4ZWwiLCAiZ2V0QmFzZVBpeGVsIiwgImJvdHRvbSIsICJpZCIsICJkZWZhdWx0cyIsICJjYWxsYmFjayIsICJnZW5lcmF0ZVRpY2tzIiwgImdlbmVyYXRpb25PcHRpb25zIiwgImRhdGFSYW5nZSIsICJNSU5fU1BBQ0lORyIsICJzdGVwIiwgInByZWNpc2lvbiIsICJjb3VudCIsICJtYXhUaWNrcyIsICJtYXhEaWdpdHMiLCAiaW5jbHVkZUJvdW5kcyIsICJ1bml0IiwgIm1heFNwYWNlcyIsICJybWluIiwgInJtYXgiLCAiY291bnREZWZpbmVkIiwgIm1pblNwYWNpbmciLCAic3BhY2luZyIsICJuaWNlTnVtIiwgImZhY3RvciIsICJuaWNlTWluIiwgIm5pY2VNYXgiLCAibnVtU3BhY2VzIiwgImNlaWwiLCAiZmxvb3IiLCAicG93IiwgImFsbW9zdFdob2xlIiwgImFsbW9zdEVxdWFscyIsICJkZWNpbWFsUGxhY2VzIiwgIl9kZWNpbWFsUGxhY2VzIiwgImoiLCAicmVsYXRpdmVMYWJlbFNpemUiLCAidGlja1ZhbHVlIiwgImhvcml6b250YWwiLCAibWluUm90YXRpb24iLCAicmFkIiwgInRvUmFkaWFucyIsICJyYXRpbyIsICJzaW4iLCAiY29zIiwgIkxpbmVhclNjYWxlQmFzZSIsICJzdGFydCIsICJlbmQiLCAiX2VuZFZhbHVlIiwgIk51bWJlciIsICJoYW5kbGVUaWNrUmFuZ2VPcHRpb25zIiwgImJlZ2luQXRaZXJvIiwgInNldE1pbiIsICJ2IiwgInNldE1heCIsICJtaW5TaWduIiwgInNpZ24iLCAibWF4U2lnbiIsICJhYnMiLCAiZ2V0VGlja0xpbWl0IiwgInRpY2tPcHRzIiwgIm1heFRpY2tzTGltaXQiLCAic3RlcFNpemUiLCAiY29uc29sZSIsICJ3YXJuIiwgImNvbXB1dGVUaWNrTGltaXQiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAib3B0cyIsICJudW1lcmljR2VuZXJhdG9yT3B0aW9ucyIsICJfbWF4RGlnaXRzIiwgIl9yYW5nZSIsICJfc2V0TWluQW5kTWF4QnlLZXkiLCAicmV2ZXJzZSIsICJmb3JtYXROdW1iZXIiLCAiY2hhcnQiLCAibG9jYWxlIiwgImZvcm1hdCIsICJMaW5lYXJTY2FsZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAidGlja0ZvbnQiLCAiX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMiLCAibGluZUhlaWdodCIsICJUaWNrcyIsICJmb3JtYXR0ZXJzIiwgIm51bWVyaWMiLCAibG9nMTBGbG9vciIsICJsb2cxMCIsICJjaGFuZ2VFeHBvbmVudCIsICJtIiwgImlzTWFqb3IiLCAidGlja1ZhbCIsICJyZW1haW4iLCAic3RlcHMiLCAicmFuZ2VFeHAiLCAicmFuZ2VTdGVwIiwgInN0YXJ0RXhwIiwgInJhbmdlIiwgImZpbml0ZU9yRGVmYXVsdCIsICJtaW5FeHAiLCAiZXhwIiwgImJhc2UiLCAic2lnbmlmaWNhbmQiLCAibWFqb3IiLCAibGFzdFRpY2siLCAiTG9nYXJpdGhtaWNTY2FsZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiX3plcm8iLCAiX3N1Z2dlc3RlZE1pbiIsICJfdXNlck1pbiIsICJfdXNlck1heCIsICJkZWNpbWFsIiwgImxvZ2FyaXRobWljIiwgImVuYWJsZWQiLCAiZ2V0VGlja0JhY2tkcm9wSGVpZ2h0IiwgImRpc3BsYXkiLCAicGFkZGluZyIsICJ0b1BhZGRpbmciLCAiYmFja2Ryb3BQYWRkaW5nIiwgImZvbnQiLCAic2l6ZSIsICJtZWFzdXJlTGFiZWxTaXplIiwgImN0eCIsICJpc0FycmF5IiwgInciLCAiX2xvbmdlc3RUZXh0IiwgInN0cmluZyIsICJoIiwgImRldGVybWluZUxpbWl0cyIsICJhbmdsZSIsICJwb3MiLCAiZml0V2l0aFBvaW50TGFiZWxzIiwgInNjYWxlIiwgIm9yaWciLCAibCIsICJsZWZ0IiwgIl9wYWRkaW5nIiwgInIiLCAicmlnaHQiLCAidCIsICJ0b3AiLCAiYiIsICJsaW1pdHMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJsYWJlbFNpemVzIiwgInZhbHVlQ291bnQiLCAiX3BvaW50TGFiZWxzIiwgInBvaW50TGFiZWxPcHRzIiwgInBvaW50TGFiZWxzIiwgImFkZGl0aW9uYWxBbmdsZSIsICJjZW50ZXJQb2ludExhYmVscyIsICJQSSIsICJpIiwgInNldENvbnRleHQiLCAiZ2V0UG9pbnRMYWJlbENvbnRleHQiLCAicG9pbnRQb3NpdGlvbiIsICJnZXRQb2ludFBvc2l0aW9uIiwgImRyYXdpbmdBcmVhIiwgInBsRm9udCIsICJ0b0ZvbnQiLCAidGV4dFNpemUiLCAiYW5nbGVSYWRpYW5zIiwgIl9ub3JtYWxpemVBbmdsZSIsICJnZXRJbmRleEFuZ2xlIiwgInRvRGVncmVlcyIsICJoTGltaXRzIiwgIngiLCAidkxpbWl0cyIsICJ5IiwgInVwZGF0ZUxpbWl0cyIsICJzZXRDZW50ZXJQb2ludCIsICJfcG9pbnRMYWJlbEl0ZW1zIiwgImJ1aWxkUG9pbnRMYWJlbEl0ZW1zIiwgImNyZWF0ZVBvaW50TGFiZWxJdGVtIiwgIml0ZW1PcHRzIiwgIm91dGVyRGlzdGFuY2UiLCAiZXh0cmEiLCAicG9pbnRMYWJlbFBvc2l0aW9uIiwgIkhBTEZfUEkiLCAieUZvckFuZ2xlIiwgInRleHRBbGlnbiIsICJnZXRUZXh0QWxpZ25Gb3JBbmdsZSIsICJsZWZ0Rm9yVGV4dEFsaWduIiwgInZpc2libGUiLCAiaXNOb3RPdmVybGFwcGVkIiwgIml0ZW0iLCAiYXJlYSIsICJhcGV4ZXNJbkFyZWEiLCAiX2lzUG9pbnRJbkFyZWEiLCAiaXRlbXMiLCAiYWxpZ24iLCAiZHJhd1BvaW50TGFiZWxCb3giLCAiYmFja2Ryb3BDb2xvciIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJmaWxsU3R5bGUiLCAiYmFja2Ryb3BMZWZ0IiwgImJhY2tkcm9wVG9wIiwgImJhY2tkcm9wV2lkdGgiLCAiYmFja2Ryb3BIZWlnaHQiLCAidmFsdWVzIiwgInNvbWUiLCAiYmVnaW5QYXRoIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJyYWRpdXMiLCAiZmlsbCIsICJmaWxsUmVjdCIsICJkcmF3UG9pbnRMYWJlbHMiLCAibGFiZWxDb3VudCIsICJvcHRzQXRJbmRleCIsICJyZW5kZXJUZXh0IiwgImNvbG9yIiwgInRleHRCYXNlbGluZSIsICJwYXRoUmFkaXVzTGluZSIsICJjaXJjdWxhciIsICJhcmMiLCAieENlbnRlciIsICJ5Q2VudGVyIiwgIlRBVSIsICJtb3ZlVG8iLCAibGluZVRvIiwgImRyYXdSYWRpdXNMaW5lIiwgImdyaWRMaW5lT3B0cyIsICJib3JkZXJPcHRzIiwgImxpbmVXaWR0aCIsICJzYXZlIiwgInN0cm9rZVN0eWxlIiwgInNldExpbmVEYXNoIiwgImRhc2giLCAibGluZURhc2hPZmZzZXQiLCAiZGFzaE9mZnNldCIsICJjbG9zZVBhdGgiLCAic3Ryb2tlIiwgInJlc3RvcmUiLCAiY3JlYXRlUG9pbnRMYWJlbENvbnRleHQiLCAicGFyZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidHlwZSIsICJSYWRpYWxMaW5lYXJTY2FsZSIsICJzZXREaW1lbnNpb25zIiwgIm1heFdpZHRoIiwgIm1heEhlaWdodCIsICJnZW5lcmF0ZVRpY2tMYWJlbHMiLCAibWFwIiwgImNhbGxDYWxsYmFjayIsICJmaWx0ZXIiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiZml0IiwgImxlZnRNb3ZlbWVudCIsICJyaWdodE1vdmVtZW50IiwgInRvcE1vdmVtZW50IiwgImJvdHRvbU1vdmVtZW50IiwgImFuZ2xlTXVsdGlwbGllciIsICJzdGFydEFuZ2xlIiwgImdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlIiwgInNjYWxpbmdGYWN0b3IiLCAiZ2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIiLCAiZGlzdGFuY2UiLCAic2NhbGVkRGlzdGFuY2UiLCAicG9pbnRMYWJlbCIsICJnZXRDb250ZXh0IiwgImRpc3RhbmNlRnJvbUNlbnRlciIsICJnZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUiLCAiZ2V0QmFzZVBvc2l0aW9uIiwgImdldEJhc2VWYWx1ZSIsICJnZXRQb2ludExhYmVsUG9zaXRpb24iLCAiZHJhd0JhY2tncm91bmQiLCAiYmFja2dyb3VuZENvbG9yIiwgImdyaWQiLCAiZHJhd0dyaWQiLCAiYW5nbGVMaW5lcyIsICJib3JkZXIiLCAicG9zaXRpb24iLCAiZm9yRWFjaCIsICJ0aWNrIiwgImNvbnRleHQiLCAib3B0c0F0SW5kZXhCb3JkZXIiLCAiYm9yZGVyRGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImRyYXdCb3JkZXIiLCAiZHJhd0xhYmVscyIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgInNob3dMYWJlbEJhY2tkcm9wIiwgIm1lYXN1cmVUZXh0IiwgImRyYXdUaXRsZSIsICJhbmltYXRlIiwgImRlZmF1bHRSb3V0ZXMiLCAiZGVzY3JpcHRvcnMiLCAiX2ZhbGxiYWNrIiwgIklOVEVSVkFMUyIsICJtaWxsaXNlY29uZCIsICJjb21tb24iLCAic2Vjb25kIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJ3ZWVrIiwgIm1vbnRoIiwgInF1YXJ0ZXIiLCAieWVhciIsICJVTklUUyIsICJrZXlzIiwgInNvcnRlciIsICJhIiwgImlucHV0IiwgImFkYXB0ZXIiLCAiX2FkYXB0ZXIiLCAicGFyc2VyIiwgImlzb1dlZWtkYXkiLCAiX3BhcnNlT3B0cyIsICJpc051bWJlciIsICJzdGFydE9mIiwgImRldGVybWluZVVuaXRGb3JBdXRvVGlja3MiLCAibWluVW5pdCIsICJjYXBhY2l0eSIsICJpbGVuIiwgImludGVydmFsIiwgIk1BWF9TQUZFX0lOVEVHRVIiLCAiZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmciLCAibnVtVGlja3MiLCAiZGlmZiIsICJkZXRlcm1pbmVNYWpvclVuaXQiLCAiYWRkVGljayIsICJ0aW1lIiwgInRpbWVzdGFtcHMiLCAibG8iLCAiaGkiLCAiX2xvb2t1cCIsICJ0aW1lc3RhbXAiLCAic2V0TWFqb3JUaWNrcyIsICJtYWpvclVuaXQiLCAiYWRkIiwgInRpY2tzRnJvbVRpbWVzdGFtcHMiLCAiVGltZVNjYWxlIiwgInByb3BzIiwgIl9jYWNoZSIsICJkYXRhIiwgImFsbCIsICJfdW5pdCIsICJfbWFqb3JVbml0IiwgIl9vZmZzZXRzIiwgIl9ub3JtYWxpemVkIiwgInNjYWxlT3B0cyIsICJhZGFwdGVycyIsICJfZGF0ZSIsICJkYXRlIiwgIm1lcmdlSWYiLCAiZGlzcGxheUZvcm1hdHMiLCAiZm9ybWF0cyIsICJub3JtYWxpemVkIiwgImJlZm9yZUxheW91dCIsICJfYXBwbHlCb3VuZHMiLCAiX2dldExhYmVsQm91bmRzIiwgInNvdXJjZSIsICJEYXRlIiwgIm5vdyIsICJlbmRPZiIsICJhcnIiLCAiZ2V0TGFiZWxUaW1lc3RhbXBzIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgInRpbWVPcHRzIiwgIl9nZW5lcmF0ZSIsICJfZmlsdGVyQmV0d2VlbiIsICJhdXRvU2tpcCIsICJfZ2V0TGFiZWxDYXBhY2l0eSIsICJpbml0T2Zmc2V0cyIsICJhZnRlckF1dG9Ta2lwIiwgIm9mZnNldEFmdGVyQXV0b3NraXAiLCAiZ2V0RGVjaW1hbEZvclZhbHVlIiwgImxpbWl0IiwgIm1pbm9yIiwgIndlZWtkYXkiLCAiaGFzV2Vla2RheSIsICJFcnJvciIsICJnZXREYXRhVGltZXN0YW1wcyIsICJzb3J0IiwgInRvb2x0aXBGb3JtYXQiLCAiZGF0ZXRpbWUiLCAiZm10IiwgIl90aWNrRm9ybWF0RnVuY3Rpb24iLCAiZm9ybWF0dGVyIiwgIm1pbm9yRm9ybWF0IiwgIm1ham9yRm9ybWF0IiwgIm9mZnNldHMiLCAiX2dldExhYmVsU2l6ZSIsICJ0aWNrc09wdHMiLCAidGlja0xhYmVsV2lkdGgiLCAibWF4Um90YXRpb24iLCAiY29zUm90YXRpb24iLCAic2luUm90YXRpb24iLCAidGlja0ZvbnRTaXplIiwgImV4YW1wbGVUaW1lIiwgImV4YW1wbGVMYWJlbCIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJjb250cm9sbGVyIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJjb25jYXQiLCAibm9ybWFsaXplIiwgIl9hcnJheVVuaXF1ZSIsICJpbnRlcnBvbGF0ZSIsICJ0YWJsZSIsICJ2YWwiLCAicHJldlNvdXJjZSIsICJuZXh0U291cmNlIiwgInByZXZUYXJnZXQiLCAibmV4dFRhcmdldCIsICJfbG9va3VwQnlLZXkiLCAic3BhbiIsICJUaW1lU2VyaWVzU2NhbGUiLCAiX3RhYmxlIiwgIl9taW5Qb3MiLCAiX3RhYmxlUmFuZ2UiLCAiX2dldFRpbWVzdGFtcHNGb3JUYWJsZSIsICJidWlsZExvb2t1cFRhYmxlIiwgInByZXYiLCAiY3VyciIsICJuZXh0IiwgImFwcCIsICJoIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgInBhcnNlIiwgImltcG9ydF9vYnNpZGlhbiIsICJyYW5rIiwgImVhc2UiLCAicGFyc2UiLCAic2libGluZ3MiXQp9Cg==