canvas-editor-pdf
Version:
pdf exporter to canvas-editor
9,688 lines • 388 kB
JavaScript
(function(){"use strict";try{if(typeof document!="undefined"){var e=document.createElement("style");e.id="canvas-editor-pdf-style",e.appendChild(document.createTextNode("")),document.head.appendChild(e)}}catch(d){console.error("vite-plugin-css-injected-by-js",d)}})();
import jsPDF, { GState } from "jspdf";
var MaxHeightRatio = /* @__PURE__ */ ((MaxHeightRatio2) => {
MaxHeightRatio2["HALF"] = "half";
MaxHeightRatio2["ONE_THIRD"] = "one-third";
MaxHeightRatio2["QUARTER"] = "quarter";
return MaxHeightRatio2;
})(MaxHeightRatio || {});
var NumberType = /* @__PURE__ */ ((NumberType2) => {
NumberType2["ARABIC"] = "arabic";
NumberType2["CHINESE"] = "chinese";
return NumberType2;
})(NumberType || {});
var ImageDisplay = /* @__PURE__ */ ((ImageDisplay2) => {
ImageDisplay2["INLINE"] = "inline";
ImageDisplay2["BLOCK"] = "block";
ImageDisplay2["SURROUND"] = "surround";
ImageDisplay2["FLOAT_TOP"] = "float-top";
ImageDisplay2["FLOAT_BOTTOM"] = "float-bottom";
return ImageDisplay2;
})(ImageDisplay || {});
const ZERO = "\u200B";
const NBSP = " ";
const PUNCTUATION_LIST = [
"\xB7",
"\u3001",
":",
"\uFF1A",
",",
"\uFF0C",
".",
"\u3002",
";",
"\uFF1B",
"?",
"\uFF1F",
"!",
"\uFF01"
];
const maxHeightRadioMapping = {
[MaxHeightRatio.HALF]: 1 / 2,
[MaxHeightRatio.ONE_THIRD]: 1 / 3,
[MaxHeightRatio.QUARTER]: 1 / 4
};
const LETTER_CLASS = {
ENGLISH: "A-Za-z",
SPANISH: "A-Za-z\xC1\xC9\xCD\xD3\xDA\xE1\xE9\xED\xF3\xFA\xD1\xF1\xDC\xFC",
FRENCH: "A-Za-z\xC0\xC2\xC7\xE0\xE2\xE7\xC9\xE9\xC8\xE8\xCA\xEA\xCB\xEB\xCE\xEE\xCF\xEF\xD4\xF4\xD9\xF9\xDB\xFB\u0178\xFF",
GERMAN: "A-Za-z\xC4\xE4\xD6\xF6\xDC\xFC\xDF",
RUSSIAN: "\u0410-\u042F\u0430-\u044F\u0401\u0451",
PORTUGUESE: "A-Za-z\xC1\xC9\xCD\xD3\xDA\xE1\xE9\xED\xF3\xFA\xC3\xD5\xE3\xF5\xC7\xE7",
ITALIAN: "A-Za-z\xC0\xE0\xC8\xE8\xC9\xE9\xCC\xEC\xCD\xED\xCE\xEE\xD3\xF3\xD2\xF2\xD9\xF9",
DUTCH: "A-Za-z\xC0\xE0\xC1\xE1\xC2\xE2\xC4\xE4\xC8\xE8\xC9\xE9\xCA\xEA\xCB\xEB\xCC\xEC\xCD\xED\xCE\xEE\xCF\xEF\xD3\xF3\xD2\xF2\xD4\xF4\xD6\xF6\xD9\xF9\xDB\xFB\xDC\xFC",
SWEDISH: "A-Za-z\xC5\xE5\xC4\xE4\xD6\xF6",
GREEK: "\u0391\u03B1\u0392\u03B2\u0393\u03B3\u0394\u03B4\u0395\u03B5\u0396\u03B6\u0397\u03B7\u0398\u03B8\u0399\u03B9\u039A\u03BA\u039B\u03BB\u039C\u03BC\u039D\u03BD\u039E\u03BE\u039F\u03BF\u03A0\u03C0\u03A1\u03C1\u03A3\u03C3\u03C2\u03A4\u03C4\u03A5\u03C5\u03A6\u03C6\u03A7\u03C7\u03A8\u03C8\u03A9\u03C9"
};
const METRICS_BASIS_TEXT = "\u65E5";
var RowFlex = /* @__PURE__ */ ((RowFlex2) => {
RowFlex2["LEFT"] = "left";
RowFlex2["CENTER"] = "center";
RowFlex2["RIGHT"] = "right";
RowFlex2["ALIGNMENT"] = "alignment";
RowFlex2["JUSTIFY"] = "justify";
return RowFlex2;
})(RowFlex || {});
const SURROGATE_PAIR_REG = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
const EMOJI_REG = /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
const UNICODE_SYMBOL_REG = new RegExp(
`${EMOJI_REG.source}|${SURROGATE_PAIR_REG.source}`,
"g"
);
const PUNCTUATION_REG = /[、,。?!;:……「」“”‘’*()【】〔〕〖〗〘〙〚〛《》———﹝﹞–—\\/·.,!?;:`~<>()[\]{}'"|]/;
const START_LINE_BREAK_REG = new RegExp(`^[${ZERO}
]`);
function deepClone(obj) {
if (!obj || typeof obj !== "object") {
return obj;
}
let newObj = {};
if (Array.isArray(obj)) {
newObj = obj.map((item) => deepClone(item));
} else {
Object.keys(obj).forEach((key) => {
return newObj[key] = deepClone(obj[key]);
});
}
return newObj;
}
function getUUID() {
function S4() {
return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1);
}
return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4();
}
function splitText(text) {
const data2 = [];
if (Intl.Segmenter) {
const segmenter = new Intl.Segmenter();
const segments = segmenter.segment(text);
for (const { segment } of segments) {
data2.push(segment);
}
} else {
const symbolMap = /* @__PURE__ */ new Map();
for (const match of text.matchAll(UNICODE_SYMBOL_REG)) {
symbolMap.set(match.index, match[0]);
}
let t = 0;
while (t < text.length) {
const symbol = symbolMap.get(t);
if (symbol) {
data2.push(symbol);
t += symbol.length;
} else {
data2.push(text[t]);
t++;
}
}
}
return data2;
}
function isObject(type) {
return Object.prototype.toString.call(type) === "[object Object]";
}
function isArray(type) {
return Array.isArray(type);
}
function mergeObject(source, target) {
if (isObject(source) && isObject(target)) {
const objectTarget = target;
for (const [key, val] of Object.entries(source)) {
if (!objectTarget[key]) {
objectTarget[key] = val;
} else {
objectTarget[key] = mergeObject(val, objectTarget[key]);
}
}
} else if (isArray(source) && isArray(target)) {
target.push(...source);
}
return target;
}
function convertNumberToChinese(num) {
const chineseNum = [
"\u96F6",
"\u4E00",
"\u4E8C",
"\u4E09",
"\u56DB",
"\u4E94",
"\u516D",
"\u4E03",
"\u516B",
"\u4E5D"
];
const chineseUnit = [
"",
"\u5341",
"\u767E",
"\u5343",
"\u4E07",
"\u5341",
"\u767E",
"\u5343",
"\u4EBF",
"\u5341",
"\u767E",
"\u5343",
"\u4E07",
"\u5341",
"\u767E",
"\u5343",
"\u4EBF"
];
if (!num || isNaN(num))
return "\u96F6";
const numStr = num.toString().split("");
let result = "";
for (let i = 0; i < numStr.length; i++) {
const desIndex = numStr.length - 1 - i;
result = `${chineseUnit[i]}${result}`;
result = `${chineseNum[Number(numStr[desIndex])]}${result}`;
}
result = result.replace(/零(千|百|十)/g, "\u96F6").replace(/十零/g, "\u5341");
result = result.replace(/零+/g, "\u96F6");
result = result.replace(/零亿/g, "\u4EBF").replace(/零万/g, "\u4E07");
result = result.replace(/亿万/g, "\u4EBF");
result = result.replace(/零+$/, "");
result = result.replace(/^一十/g, "\u5341");
return result;
}
function pickObject(object, pickKeys) {
const newObject = {};
for (const key in object) {
if (pickKeys.includes(key)) {
newObject[key] = object[key];
}
}
return newObject;
}
function convertStringToBase64(input) {
const encoder = new TextEncoder();
const data2 = encoder.encode(input);
const charArray = Array.from(data2, (byte) => String.fromCharCode(byte));
const base64 = window.btoa(charArray.join(""));
return base64;
}
function isArrayEqual(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
return !arr1.some((item) => !arr2.includes(item));
}
function isRectIntersect(rect1, rect2) {
const rect1Left = rect1.x;
const rect1Right = rect1.x + rect1.width;
const rect1Top = rect1.y;
const rect1Bottom = rect1.y + rect1.height;
const rect2Left = rect2.x;
const rect2Right = rect2.x + rect2.width;
const rect2Top = rect2.y;
const rect2Bottom = rect2.y + rect2.height;
if (rect1Left > rect2Right || rect1Right < rect2Left || rect1Top > rect2Bottom || rect1Bottom < rect2Top) {
return false;
}
return true;
}
var ControlType = /* @__PURE__ */ ((ControlType2) => {
ControlType2["TEXT"] = "text";
ControlType2["SELECT"] = "select";
ControlType2["CHECKBOX"] = "checkbox";
ControlType2["RADIO"] = "radio";
ControlType2["DATE"] = "date";
return ControlType2;
})(ControlType || {});
var ControlComponent = /* @__PURE__ */ ((ControlComponent2) => {
ControlComponent2["PREFIX"] = "prefix";
ControlComponent2["POSTFIX"] = "postfix";
ControlComponent2["PLACEHOLDER"] = "placeholder";
ControlComponent2["VALUE"] = "value";
ControlComponent2["CHECKBOX"] = "checkbox";
ControlComponent2["RADIO"] = "radio";
return ControlComponent2;
})(ControlComponent || {});
var ControlIndentation = /* @__PURE__ */ ((ControlIndentation2) => {
ControlIndentation2["ROW_START"] = "rowStart";
ControlIndentation2["VALUE_START"] = "valueStart";
return ControlIndentation2;
})(ControlIndentation || {});
var EditorComponent = /* @__PURE__ */ ((EditorComponent2) => {
EditorComponent2["COMPONENT"] = "component";
EditorComponent2["MENU"] = "menu";
EditorComponent2["MAIN"] = "main";
EditorComponent2["FOOTER"] = "footer";
EditorComponent2["CONTEXTMENU"] = "contextmenu";
EditorComponent2["POPUP"] = "popup";
EditorComponent2["CATALOG"] = "catalog";
EditorComponent2["COMMENT"] = "comment";
return EditorComponent2;
})(EditorComponent || {});
var EditorMode = /* @__PURE__ */ ((EditorMode2) => {
EditorMode2["EDIT"] = "edit";
EditorMode2["CLEAN"] = "clean";
EditorMode2["READONLY"] = "readonly";
EditorMode2["FORM"] = "form";
EditorMode2["PRINT"] = "print";
EditorMode2["DESIGN"] = "design";
return EditorMode2;
})(EditorMode || {});
var EditorZone = /* @__PURE__ */ ((EditorZone2) => {
EditorZone2["HEADER"] = "header";
EditorZone2["MAIN"] = "main";
EditorZone2["FOOTER"] = "footer";
return EditorZone2;
})(EditorZone || {});
var PageMode = /* @__PURE__ */ ((PageMode2) => {
PageMode2["PAGING"] = "paging";
PageMode2["CONTINUITY"] = "continuity";
return PageMode2;
})(PageMode || {});
var PaperDirection = /* @__PURE__ */ ((PaperDirection2) => {
PaperDirection2["VERTICAL"] = "vertical";
PaperDirection2["HORIZONTAL"] = "horizontal";
return PaperDirection2;
})(PaperDirection || {});
var WordBreak = /* @__PURE__ */ ((WordBreak2) => {
WordBreak2["BREAK_ALL"] = "break-all";
WordBreak2["BREAK_WORD"] = "break-word";
return WordBreak2;
})(WordBreak || {});
var RenderMode = /* @__PURE__ */ ((RenderMode2) => {
RenderMode2["SPEED"] = "speed";
RenderMode2["COMPATIBILITY"] = "compatibility";
return RenderMode2;
})(RenderMode || {});
const EDITOR_COMPONENT = "editor-component";
const EDITOR_PREFIX = "ce";
const defaultModeRuleOption = {
print: {
imagePreviewerDisabled: false
},
readonly: {
imagePreviewerDisabled: false
},
form: {
controlDeletableDisabled: false
}
};
class ImageParticle {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
this.imageCache = /* @__PURE__ */ new Map();
this.floatImageContainer = null;
this.floatImage = null;
}
createFloatImage(element) {
const { scale } = this.options;
let floatImageContainer = this.floatImageContainer;
let floatImage = this.floatImage;
if (!floatImageContainer) {
floatImageContainer = document.createElement("div");
floatImageContainer.classList.add(`${EDITOR_PREFIX}-float-image`);
this.floatImageContainer = floatImageContainer;
}
if (!floatImage) {
floatImage = document.createElement("img");
floatImageContainer.append(floatImage);
this.floatImage = floatImage;
}
floatImageContainer.style.display = "none";
floatImage.style.width = `${element.width * scale}px`;
floatImage.style.height = `${element.height * scale}px`;
const height = this.draw.getHeight();
const pageGap = this.draw.getPageGap();
const preY = this.draw.getPageNo() * (height + pageGap);
const imgFloatPosition = element.imgFloatPosition;
floatImageContainer.style.left = `${imgFloatPosition.x}px`;
floatImageContainer.style.top = `${preY + imgFloatPosition.y}px`;
floatImage.src = element.value;
}
dragFloatImage(movementX, movementY) {
if (!this.floatImageContainer)
return;
this.floatImageContainer.style.display = "block";
const x = parseFloat(this.floatImageContainer.style.left) + movementX;
const y = parseFloat(this.floatImageContainer.style.top) + movementY;
this.floatImageContainer.style.left = `${x}px`;
this.floatImageContainer.style.top = `${y}px`;
}
destroyFloatImage() {
if (this.floatImageContainer) {
this.floatImageContainer.style.display = "none";
}
}
addImageObserver(promise) {
this.draw.getImageObserver().add(promise);
}
getFallbackImage(width, height) {
const tileSize = 8;
const x = (width - Math.ceil(width / tileSize) * tileSize) / 2;
const y = (height - Math.ceil(height / tileSize) * tileSize) / 2;
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">
<rect width="${width}" height="${height}" fill="url(#mosaic)" />
<defs>
<pattern id="mosaic" x="${x}" y="${y}" width="${tileSize * 2}" height="${tileSize * 2}" patternUnits="userSpaceOnUse">
<rect width="${tileSize}" height="${tileSize}" fill="#cccccc" />
<rect width="${tileSize}" height="${tileSize}" fill="#cccccc" transform="translate(${tileSize}, ${tileSize})" />
</pattern>
</defs>
</svg>`;
const fallbackImage = new Image();
fallbackImage.src = `data:image/svg+xml;base64,${convertStringToBase64(
svg
)}`;
return fallbackImage;
}
render(ctx2d, element, x, y) {
if (element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
this.draw.render({
isCompute: false,
isSetCursor: false,
isSubmitHistory: false
});
} else {
const { scale } = this.options;
const width = element.width * scale;
const height = element.height * scale;
ctx2d.drawImage(element.value, x, y, width, height);
}
}
}
function svgString2Image(svgString, width, height, format, callback) {
return new Promise((resolve) => {
format = format ? format : "png";
const svgData = svgString;
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
canvas.width = width;
canvas.height = height;
const image = new Image();
image.onload = function() {
if (context) {
context.clearRect(0, 0, width, height);
context.drawImage(image, 0, 0, width, height);
const pngData = canvas.toDataURL("image/" + format);
resolve(pngData);
callback(pngData);
}
};
image.src = svgData;
});
}
const ordR = "R".charCodeAt(0);
function HERSHEY(i) {
if (data[i] == null) {
compile(i);
}
return data[i];
}
function compile(i) {
const entry = raw[i];
if (entry == null) {
return;
}
const bound = entry.substring(3, 5);
const xmin = 1 * bound.charCodeAt(0) - ordR;
const xmax = 1 * bound.charCodeAt(1) - ordR;
const content = entry.substring(5);
const polylines = [[]];
let ymin = Infinity;
let ymax = -Infinity;
let zmin = Infinity;
let zmax = -Infinity;
let j = 0;
while (j < content.length) {
const digit = content.substring(j, j + 2);
if (digit == " R") {
polylines.push([]);
} else {
const x = digit.charCodeAt(0) - ordR - xmin;
const y = digit.charCodeAt(1) - ordR;
ymin = Math.min(y, ymin);
ymax = Math.max(y, ymax);
zmin = Math.min(x, zmin);
zmax = Math.max(x, zmax);
polylines[polylines.length - 1].push([x, y]);
}
j += 2;
}
data[i] = {
w: xmax - xmin,
xmin: zmin,
xmax: zmax,
ymin,
ymax,
polylines
};
}
const data = {};
const raw = {
1: " 9MWRMNV RRMVV RPSTS",
2: " 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV",
3: " 11MXVNTMRMPNOPOSPURVTVVU",
4: " 12MWOMOV ROMRMTNUPUSTURVOV",
5: " 12MWOMOV ROMUM ROQSQ ROVUV",
6: " 9MVOMOV ROMUM ROQSQ",
7: " 15MXVNTMRMPNOPOSPURVTVVUVR RSRVR",
8: " 9MWOMOV RUMUV ROQUQ",
9: " 3PTRMRV",
10: " 7NUSMSTRVPVOTOS",
11: " 9MWOMOV RUMOS RQQUV",
12: " 6MVOMOV ROVUV",
13: " 12LXNMNV RNMRV RVMRV RVMVV",
14: " 9MWOMOV ROMUV RUMUV",
15: " 14MXRMPNOPOSPURVSVUUVSVPUNSMRM",
16: " 10MWOMOV ROMSMUNUQSROR",
17: " 17MXRMPNOPOSPURVSVUUVSVPUNSMRM RSTVW",
18: " 13MWOMOV ROMSMUNUQSROR RRRUV",
19: " 13MWUNSMQMONOOPPTRUSUUSVQVOU",
20: " 6MWRMRV RNMVM",
21: " 9MXOMOSPURVSVUUVSVM",
22: " 6MWNMRV RVMRV",
23: " 12LXNMPV RRMPV RRMTV RVMTV",
24: " 6MWOMUV RUMOV",
25: " 7MWNMRQRV RVMRQ",
26: " 9MWUMOV ROMUM ROVUV",
27: " 9MWRMNV RRMVV RPSTS",
28: " 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV",
29: " 6MVOMOV ROMUM",
30: " 9MWRMNV RRMVV RNVVV",
31: " 12MWOMOV ROMUM ROQSQ ROVUV",
32: " 9MWUMOV ROMUM ROVUV",
33: " 9MWOMOV RUMUV ROQUQ",
34: " 20MXRMPNOPOSPURVSVUUVSVPUNSMRM RQQTR RTQQR",
35: " 3PTRMRV",
36: " 9MWOMOV RUMOS RQQUV",
37: " 6MWRMNV RRMVV",
38: " 12LXNMNV RNMRV RVMRV RVMVV",
39: " 9MWOMOV ROMUV RUMUV",
40: " 12MWOMUM RPQTR RTQPR ROVUV",
41: " 14MXRMPNOPOSPURVSVUUVSVPUNSMRM",
42: " 9MWOMOV RUMUV ROMUM",
43: " 10MWOMOV ROMSMUNUQSROR",
44: " 10MWOMRQOV ROMUM ROVUV",
45: " 6MWRMRV RNMVM",
46: " 15MWNONNOMPMQNRPRV RVOVNUMTMSNRP",
47: " 13LXRMRV RPONPNSPTTTVSVPTOPO",
48: " 6MWOMUV RUMOV",
49: " 12LXRMRV RNOOPOSQTSTUSUPVO",
50: " 13MXOVQVOROPPNRMSMUNVPVRTVVV",
200: " 12MWRMPNOPOSPURVTUUSUPTNRM",
201: " 4MWPORMRV",
202: " 9MWONQMSMUNUPTROVUV",
203: " 15MWONQMSMUNUPSQ RRQSQURUUSVQVOU",
204: " 7MWSMSV RSMNSVS",
205: " 14MWPMOQQPRPTQUSTURVQVOU RPMTM",
206: " 14MWTMRMPNOPOSPURVTUUSTQRPPQOS",
207: " 6MWUMQV ROMUM",
208: " 19MWQMONOPQQSQUPUNSMQM RQQOROUQVSVUUURSQ",
209: " 14MWUPTRRSPROPPNRMTNUPUSTURVPV",
210: " 6PURURVSVSURU",
211: " 7PUSVRVRUSUSWRY",
212: " 12PURPRQSQSPRP RRURVSVSURU",
213: " 13PURPRQSQSPRP RSVRVRUSUSWRY",
214: " 12PURMRR RSMSR RRURVSVSURU",
215: " 17NWPNRMSMUNUPRQRRSRSQUP RRURVSVSURU",
216: " 3PTRMRQ",
217: " 6NVPMPQ RTMTQ",
218: " 10NVQMPNPPQQSQTPTNSMQM",
219: " 16MWUNSMQMONOPQQTRUSUUSVQVOU RRLRW",
220: " 3MWVLNW",
221: " 7OVTLRNQPQSRUTW",
222: " 7NUPLRNSPSSRUPW",
223: " 3PTRLRW",
224: " 3LXNRVR",
225: " 6LXRNRV RNRVR",
226: " 6LXNPVP RNTVT",
227: " 6MWOOUU RUOOU",
228: " 9MWRORU ROPUT RUPOT",
229: " 6PURQRRSRSQRQ",
230: " 7PUSMRORQSQSPRP",
231: " 7PUSNRNRMSMSORQ",
232: " 7LXSOVRSU RNRVR",
233: " 12MXRLPW RULSW ROPVP ROSVS",
234: " 21LXVRURTSSURVOVNUNSORRQSPSNRMPMONOPQSSUUVVV",
235: " 20LXNNOQOSNV RVNUQUSVV RNNQOSOVN RNVQUSUVV",
501: " 9I[RFJ[ RRFZ[ RMTWT",
502: " 24G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
503: " 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV",
504: " 16G\\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[",
505: " 12H[LFL[ RLFYF RLPTP RL[Y[",
506: " 9HZLFL[ RLFYF RLPTP",
507: " 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS",
508: " 9G]KFK[ RYFY[ RKPYP",
509: " 3NVRFR[",
510: " 11JZVFVVUYTZR[P[NZMYLVLT",
511: " 9G\\KFK[ RYFKT RPOY[",
512: " 6HYLFL[ RL[X[",
513: " 12F^JFJ[ RJFR[ RZFR[ RZFZ[",
514: " 9G]KFK[ RKFY[ RYFY[",
515: " 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
516: " 14G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
517: " 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY]",
518: " 17G\\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[",
519: " 21H\\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
520: " 6JZRFR[ RKFYF",
521: " 11G]KFKULXNZQ[S[VZXXYUYF",
522: " 6I[JFR[ RZFR[",
523: " 12F^HFM[ RRFM[ RRFW[ R\\FW[",
524: " 6H\\KFY[ RYFK[",
525: " 7I[JFRPR[ RZFRP",
526: " 9H\\YFK[ RKFYF RK[Y[",
527: " 9I[RFJ[ RRFZ[ RMTWT",
528: " 24G\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[",
529: " 6HYLFL[ RLFXF",
530: " 9I[RFJ[ RRFZ[ RJ[Z[",
531: " 12H[LFL[ RLFYF RLPTP RL[Y[",
532: " 9H\\YFK[ RKFYF RK[Y[",
533: " 9G]KFK[ RYFY[ RKPYP",
534: " 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP",
535: " 3NVRFR[",
536: " 9G\\KFK[ RYFKT RPOY[",
537: " 6I[RFJ[ RRFZ[",
538: " 12F^JFJ[ RJFR[ RZFR[ RZFZ[",
539: " 9G]KFK[ RKFY[ RYFY[",
540: " 9I[KFYF ROPUP RK[Y[",
541: " 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF",
542: " 9G]KFK[ RYFY[ RKFYF",
543: " 14G\\KFK[ RKFTFWGXHYJYMXOWPTQKQ",
544: " 10I[KFRPK[ RKFYF RK[Y[",
545: " 6JZRFR[ RKFYF",
546: " 19I[KKKILGMFOFPGQIRMR[ RYKYIXGWFUFTGSIRM",
547: " 21H\\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK",
548: " 6H\\KFY[ RK[YF",
549: " 18G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L",
550: " 17H\\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[",
551: " 20G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[",
552: " 41F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP RSPTPWQXRYTYWXYWZU[R[PZOX",
553: " 24H\\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV",
554: " 35G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\\U",
555: " 28H\\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV",
556: " 28H\\RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV RQPZP",
557: " 29G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT",
558: " 38F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX RMRVOXN[L]J^H^G]F\\FZHXLVRUWUZV[W[YZZY\\V",
559: " 25IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV",
560: " 25JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\\SZWX",
561: " 39F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX R^I^G]F\\FZGXIVLTNROPO RROSQSXTZU[V[XZYY[V",
562: " 29I\\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X",
563: " 45@aEMCLBJBICGEFFFHGIIIKHPGTE[ RGTJLLHMGOFPFRGSISKRPQTO[ RQTTLVHWGYFZF\\G]I]K\\PZWZZ[[\\[^Z_YaV",
564: " 32E]JMHLGJGIHGJFKFMGNINKMPLTJ[ RLTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V",
565: " 29H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\\V",
566: " 31F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\\G]H^J^M]O\\PZQWQUPTO",
567: " 32H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X",
568: " 38F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\\H]J]M\\O[PYQVQSPTQUSUXVZX[ZZ[Y]V",
569: " 28H\\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT",
570: " 25H[RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV",
571: " 33E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF RXMWQVWVZW[X[ZZ[Y]V",
572: " 32F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q",
573: " 25C_HMFLEJEIFGHFIFKGLILLK[ RUFK[ RUFS[ RaF_G\\JYNVTS[",
574: " 36F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU R]I]G\\FZFXGVITLPUNXLZJ[H[GZGX",
575: " 38F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM R[FYMVWT]RbPfNgMfMdNaP^S[VY[V",
576: " 40H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV",
583: " 9I[JFR[ RZFR[ RJFZF",
601: " 18I\\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
602: " 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
603: " 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX",
604: " 18I\\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
605: " 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX",
606: " 9MYWFUFSGRJR[ ROMVM",
607: " 23I\\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
608: " 11I\\MFM[ RMQPNRMUMWNXQX[",
609: " 9NVQFRGSFREQF RRMR[",
610: " 12MWRFSGTFSERF RSMS^RaPbNb",
611: " 9IZMFM[ RWMMW RQSX[",
612: " 3NVRFR[",
613: " 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\\N]Q][",
614: " 11I\\MMM[ RMQPNRMUMWNXQX[",
615: " 18I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM",
616: " 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX",
617: " 18I\\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX",
618: " 9KXOMO[ ROSPPRNTMWM",
619: " 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX",
620: " 9MYRFRWSZU[W[ ROMVM",
621: " 11I\\MMMWNZP[S[UZXW RXMX[",
622: " 6JZLMR[ RXMR[",
623: " 12G]JMN[ RRMN[ RRMV[ RZMV[",
624: " 6J[MMX[ RXMM[",
625: " 10JZLMR[ RXMR[P_NaLbKb",
626: " 9J[XMM[ RMMXM RM[X[",
627: " 24H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[",
628: " 31I\\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV",
629: " 17I\\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob",
630: " 24I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI",
631: " 19JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX",
632: " 23JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP`",
633: " 19H\\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb",
634: " 27G\\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT",
635: " 9LWRMPTOXOZP[R[TYUW",
636: " 19I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ",
637: " 9JZKFMFOGPHX[ RRML[",
638: " 21H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\\W",
639: " 14I[LMOMNSMXL[ RYMXPWRUURXOZL[",
640: " 29JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\\S^T_TaRbPb",
641: " 18J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM",
642: " 13G]PML[ RUMVSWXX[ RIPKNNM[M",
643: " 19I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb",
644: " 18I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM",
645: " 8H\\SMP[ RJPLNOMZM",
646: " 16H\\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM",
647: " 21G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb",
648: " 14I[KMMMOOU`WbYb RZMYOWRM]K`Jb",
649: " 20F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M",
650: " 23F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM",
651: " 22L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\\V",
652: " 23M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V",
653: " 14MXTTTSSRQROSNTMVMXNZP[S[VYXV",
654: " 24L\\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF RVRUWUZV[W[YZZY\\V",
655: " 17NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV",
656: " 24OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV",
657: " 28L[UUTSRRPRNSMTLVLXMZO[Q[SZTY RVRTYPdOfMgLfLdMaP^S\\U[XY[V",
658: " 29M\\MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUUXUZV[W[YZZY\\V",
659: " 16PWSMSNTNTMSM RPVRRPXPZQ[R[TZUYWV",
660: " 20PWSMSNTNTMSM RPVRRLdKfIgHfHdIaL^O\\Q[TYWV",
661: " 33M[MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUTVQV RQVSWTZU[V[XZYY[V",
662: " 18OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV",
663: " 33E^EVGSIRJSJTIXH[ RIXJVLSNRPRQSQTPXO[ RPXQVSSURWRXSXUWXWZX[Y[[Z\\Y^V",
664: " 23J\\JVLSNROSOTNXM[ RNXOVQSSRURVSVUUXUZV[W[YZZY\\V",
665: " 23LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV",
666: " 24KZKVMSNQMUGg RMUNSPRRRTSUUUWTYSZQ[ RMZO[R[UZWYZV",
667: " 27L[UUTSRRPRNSMTLVLXMZO[Q[SZ RVRUUSZPaOdOfPgRfScS\\U[XY[V",
668: " 15MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV",
669: " 16NYNVPSQQQSSVTXTZR[ RNZP[T[VZWYYV",
670: " 16OXOVQSSO RVFPXPZQ[S[UZVYXV RPNWN",
671: " 19L[LVNRLXLZM[O[QZSXUU RVRTXTZU[V[XZYY[V",
672: " 17L[LVNRMWMZN[O[RZTXUUUR RURVVWWYW[V",
673: " 25I^LRJTIWIYJ[L[NZPX RRRPXPZQ[S[UZWXXUXR RXRYVZW\\W^V",
674: " 20JZJVLSNRPRQSQZR[U[XYZV RWSVRTRSSOZN[L[KZ",
675: " 23L[LVNRLXLZM[O[QZSXUU RVRPdOfMgLfLdMaP^S\\U[XY[V",
676: " 23LZLVNSPRRRTTTVSXQZN[P\\Q^QaPdOfMgLfLdMaP^S\\WYZV",
677: " 22J\\K[NZQXSVUSWOXKXIWGUFSGRHQJPOPTQXRZT[V[XZYY",
683: " 26I[WUWRVOUNSMQMONMPLSLVMYNZP[R[TZVXWUXPXKWHVGTFRFPGNI",
684: " 16JZWNUMRMPNNPMSMVNYOZQ[T[VZ RMTUT",
685: " 23J[TFRGPJOLNOMTMXNZO[Q[SZUWVUWRXMXIWGVFTF RNPWP",
686: " 21H\\VFNb RQMNNLPKSKVLXNZQ[S[VZXXYUYRXPVNSMQM",
687: " 16I[XOWNTMQMNNMOLQLSMUOWSZT\\T^S_Q_",
700: " 18H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF",
701: " 5H\\NJPISFS[",
702: " 15H\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[",
703: " 16H\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW",
704: " 7H\\UFKTZT RUFU[",
705: " 18H\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW",
706: " 24H\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT",
707: " 6H\\YFO[ RKFYF",
708: " 30H\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF",
709: " 24H\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX",
710: " 6MWRYQZR[SZRY",
711: " 9MWSZR[QZRYSZS\\R^Q_",
712: " 12MWRMQNROSNRM RRYQZR[SZRY",
713: " 15MWRMQNROSNRM RSZR[QZRYSZS\\R^Q_",
714: " 9MWRFRT RRYQZR[SZRY",
715: " 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY",
716: " 3NVRFRM",
717: " 6JZNFNM RVFVM",
718: " 14KYQFOGNINKOMQNSNUMVKVIUGSFQF",
719: " 27H\\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX",
720: " 3G][BIb",
721: " 11KYVBTDRGPKOPOTPYR]T`Vb",
722: " 11KYNBPDRGTKUPUTTYR]P`Nb",
723: " 3NVRBRb",
724: " 3E_IR[R",
725: " 6E_RIR[ RIR[R",
726: " 6E_IO[O RIU[U",
727: " 6G]KKYY RYKKY",
728: " 9JZRLRX RMOWU RWOMU",
729: " 6MWRQQRRSSRRQ",
730: " 8MWSFRGQIQKRLSKRJ",
731: " 8MWRHQGRFSGSIRKQL",
732: " 9E_UMXP[RXTUW RIR[R",
733: " 12H]SBLb RYBRb RLOZO RKUYU",
734: " 35E_\\O\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\Z\\Y",
735: " 28G]IIJKKOKUJYI[ R[IZKYOYUZY[[ RIIKJOKUKYJ[I RI[KZOYUYYZ[[",
737: " 6KYOBO[ RUBU[",
738: " 6F^RBR[ RI[[[",
739: " 4F^[BI[[[",
740: " 18E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\\Z[Y",
741: " 33F^RHNLKPJSJUKWMXOXQWRU RRHVLYPZSZUYWWXUXSWRU RRUQYP\\ RRUSYT\\ RP\\T\\",
742: " 26F^RNQKPINHMHKIJKJOKRLTNWR\\ RRNSKTIVHWHYIZKZOYRXTVWR\\",
743: " 20F^RGPJLOIR RRGTJXO[R RIRLUPZR] R[RXUTZR]",
744: " 48F^RTTWVXXXZW[U[SZQXPVPSQ RSQUOVMVKUISHQHOINKNMOOQQ RQQNPLPJQISIUJWLXNXPWRT RRTQYP\\ RRTSYT\\ RP\\T\\",
745: " 55F^RRR[Q\\ RRVQ\\ RRIQHOHNINKONRR RRISHUHVIVKUNRR RRRNOLNJNIOIQJR RRRVOXNZN[O[QZR RRRNULVJVIUISJR RRRVUXVZV[U[SZR",
746: " 55F^ISJSLTMVMXLZ RISIRJQLQMRNTNWMYLZ RRGPIOLOOQUQXPZR\\ RRGTIULUOSUSXTZR\\ R[S[RZQXQWRVTVWWYXZ R[SZSXTWVWXXZ RKVYV",
750: " 18PSSRRSQSPRPQQPRPSQSSRUQV RQQQRRRRQQQ",
751: " 16PTQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ",
752: " 9NVPOTU RTOPU RNRVR",
753: " 28MWRKQMOPMR RRKSMUPWR RRMOQ RRMUQ RROPQ RROTQ RQQSQ RMRWR",
754: " 26MWMRMQNOONQMSMUNVOWQWR RPNTN ROOUO RNPVP RNQVQ RMRWR",
755: " 14LRLFLRRRLF RLIPQ RLLOR RLOMQ",
756: " 10MWRKQMOPMR RRKSMUPWR",
757: " 11MWWRWQVOUNSMQMONNOMQMR",
758: " 13G]]R]P\\MZJWHTGPGMHJJHMGPGR",
759: " 11MWMRMSNUOVQWSWUVVUWSWR",
760: " 7LXLPNRQSSSVRXP",
761: " 6RURUTTURTPRO",
762: " 7RVRRUPVNVLUKTK",
763: " 7NRRROPNNNLOKPK",
764: " 21MWWHVGTFQFOGNHMJMLNNOOUSVTWVWXVZU[S\\P\\N[MZ",
765: " 21G]IWHVGTGQHOINKMMMONPOTUUVWWYW[V\\U]S]P\\N[M",
766: " 31G]RRTUUVWWYW[V\\U]S]Q\\O[NYMWMUNTOPUOVMWKWIVHUGSGQHOINKMMMONPORR",
767: " 22H\\KFK[ RHF[FQP[Z RZV[Y\\[ RZVZY RWYZY RWYZZ\\[",
768: " 30KYUARBPCNELHKLKRLUNWQXSXVWXUYR RKPLMNKQJSJVKXMYPYVXZV]T_R`Oa",
796: " 3>f>RfR",
797: " 3D`D``D",
798: " 3RRR>Rf",
799: " 3D`DD``",
800: " 3D`DR`R",
801: " 3F^FY^K",
802: " 3KYK^YF",
803: " 3RRRDR`",
804: " 3KYKFY^",
805: " 3F^FK^Y",
806: " 3KYKRYR",
807: " 3MWMWWM",
808: " 3RRRKRY",
809: " 3MWMMWW",
810: " 8GRRGPGMHJJHMGPGR",
811: " 8GRGRGTHWJZM\\P]R]",
812: " 8R]R]T]W\\ZZ\\W]T]R",
813: " 8R]]R]P\\MZJWHTGRG",
814: " 9D`DOGQKSPTTTYS]Q`O",
815: " 9PUUDSGQKPPPTQYS]U`",
816: " 9OTODQGSKTPTTSYQ]O`",
817: " 9D`DUGSKQPPTPYQ]S`U",
818: " 5KYRJYNKVRZ",
819: " 5JZJRNKVYZR",
820: " 5KYKVKNYVYN",
821: " 5JZLXJPZTXL",
822: " 23JZJ]L]O\\Q[TXUVVSVOULTJSIQIPJOLNONSOVPXS[U\\X]Z]",
823: " 23I]]Z]X\\U[SXPVOSNONLOJPIQISJTLUOVSVVUXT[Q\\O]L]J",
824: " 23JZZGXGUHSIPLONNQNUOXPZQ[S[TZUXVUVQUNTLQIOHLGJG",
825: " 23G[GJGLHOIQLTNUQVUVXUZT[S[QZPXOUNQNNOLPISHUGXGZ",
826: " 21E[EPFRHTJUMVQVUUXSZP[NZLWLSMQNNPLSKVKYL\\M^",
827: " 19EYETHVKWPWSVVTXQYNYLXKVKSLPNNQMTMYN\\P_",
828: " 26OUQOOQOSQUSUUSUQSOQO RQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ",
829: " 11RWRMSMUNVOWQWSVUUVSWRW",
830: " 9D`DRJR RORUR RZR`R",
831: " 5D`DUDO`O`U",
832: " 6JZRDJR RRDZR",
833: " 9D`DR`R RJYZY RP`T`",
834: " 9D`DR`R RDRRb R`RRb",
840: " 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
841: " 6LXLLLXXXXLLL",
842: " 5KYRJKVYVRJ",
843: " 6LXRHLRR\\XRRH",
844: " 12JZRIPOJOOSMYRUWYUSZOTORI",
845: " 6KYRKRY RKRYR",
846: " 6MWMMWW RWMMW",
847: " 9MWRLRX RMOWU RWOMU",
850: " 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS",
851: " 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU",
852: " 17MWRLMUWURL RROOT RROUT RRRQT RRRST",
853: " 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ",
854: " 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP",
855: " 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS",
856: " 22LXRLNWXPLPVWRL RRRRL RRRLP RRRNW RRRVW RRRXP",
857: " 11RYRKRY RRKYNRQ RSMVNSO",
860: " 13MWRLRX ROOUO RMUOWQXSXUWWU",
861: " 11LXRLRX RLQMOWOXQ RPWTW",
862: " 14KYMNWX RWNMX ROLLOKQ RULXOYQ",
863: " 18I[NII[ RVI[[ RMM[[ RWMI[ RNIVI RMMWM",
864: " 21I[RGRV RMJWP RWJMP RIVL\\ R[VX\\ RIV[V RL\\X\\",
865: " 11G[MJSV RKPSL RG\\[\\[RG\\",
866: " 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL",
867: " 32KYYPXNVLSKQKNLLNKQKSLVNXQYSYVXXVYT RYPWNUMSMQNPOOQOSPUQVSWUWWVYT",
868: " 10KYRJKVYVRJ RRZYNKNRZ",
869: " 34G]PIPGQFSFTGTI RGZHXJVKTLPLKMJOIUIWJXKXPYTZV\\X]Z RGZ]Z RQZP[Q\\S\\T[SZ",
870: " 64JZRMRS RRSQ\\ RRSS\\ RQ\\S\\ RRMQJPHNG RQJNG RRMSJTHVG RSJVG RRMNKLKJM RPLLLJM RRMVKXKZM RTLXLZM RRMPNOOOR RRMPOOR RRMTNUOUR RRMTOUR",
871: " 94JZRIRK RRNRP RRSRU RRYQ\\ RRYS\\ RQ\\S\\ RRGQIPJ RRGSITJ RPJRITJ RRKPNNOMN RRKTNVOWN RNOPORNTOVO RRPPSNTLTKRKSLT RRPTSVTXTYRYSXT RNTPTRSTTVT RRUPXOYMZLZKYJWJYLZ RRUTXUYWZXZYYZWZYXZ RMZOZRYUZWZ",
872: " 40JZRYQ\\ RRYS\\ RQ\\S\\ RRYUZXZZXZUYTWTYRZOYMWLUMVJUHSGQGOHNJOMMLKMJOKRMTKTJUJXLZOZRY",
873: " 32JZRYQ\\ RRYS\\ RQ\\S\\ RRYVXVVXUXRZQZLYIXHVHTGPGNHLHKIJLJQLRLUNVNXRY",
874: " 15I[IPKR RLKNP RRGRO RXKVP R[PYR",
899: " 6QSRQQRRSSRRQ",
900: " 10PTQPPQPSQTSTTSTQSPQP",
901: " 14NVQNOONQNSOUQVSVUUVSVQUOSNQN",
902: " 18MWQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM",
903: " 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
904: " 22G]PGMHJJHMGPGTHWJZM\\P]T]W\\ZZ\\W]T]P\\MZJWHTGPG",
905: " 34AcPALBJCGEEGCJBLAPATBXCZE]G_JaLbPcTcXbZa]__]aZbXcTcPbLaJ_G]EZCXBTAPA",
906: " 34<hP<K=G?DAAD?G=K<P<T=Y?]A`DcGeKgPhThYg]e`cc`e]gYhThPgKeGcD`A]?Y=T<P<",
907: " 50){O)I*E+@-;073370;-@+E*I)O)U*[+_-d0i3m7q;t@wEyIzO{U{[z_ydwitmqqmtiwdy_z[{U{OzIyEw@t;q7m3i0d-_+[*U)O)",
908: " 34>fRAPCMDJDGCEA>H@JAMAZB]D_G`M`PaRc RRATCWDZD]C_AfHdJcMcZb]`_]`W`TaRc",
909: " 33AcRAPCMDJDGCEABGAKAPBTDXG\\L`Rc RRATCWDZD]C_AbGcKcPbT`X]\\X`Rc RBHbH",
997: " 3MWMXWX",
998: " 3JZJZZZ",
999: " 3JZJ]Z]",
1001: " 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX",
1002: " 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX",
1003: " 24KYVLWKWOVLTKQKOLNMMPMSNVOWQXTXVWWU RQKOMNPNSOVQX",
1004: " 26JZNKNX ROKOX RLKSKVLWMXPXSWVVWSXLX RSKULVMWPWSVVUWSX",
1005: " 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX",
1006: " 20JXNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXQX",
1007: " 36K[VLWKWOVLTKQKOLNMMPMSNVOWQXTXVW RQKOMNPNSOVQX RTXUWVU RVSVX RWSWX RTSYS",
1008: " 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX",
1009: " 12NWRKRX RSKSX RPKUK RPXUX",
1010: " 19LXSKSURWQX RTKTUSWQXPXNWMUNTOUNV RQKVK",
1011: " 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX",
1012: " 14KXOKOX RPKPX RMKRK RMXWXWTVX",
1013: " 30I\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX",
1014: " 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX",
1015: " 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK",
1016: " 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX",
1017: " 47KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RPWPUQTSTTUUZV[W[XZ RTUUXVZW[",
1018: " 37JZNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX RSRTSUWVXWXXW RSRUSVWWX",
1019: " 32KZVMWKWOVMULSKQKOLNMNOOPQQTRVSWT RNNOOQPTQVRWSWVVWTXRXPWOVNTNXOV",
1020: " 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX",
1021: " 20J[NKNUOWQXTXVWWUWK ROKOUPWQX RLKQK RUKYK",
1022: " 15KYMKRX RNKRU RWKRX RKKPK RTKYK",
1023: " 24I[LKOX RMKOT RRKOX RRKUX RSKUT RXKUX RJKOK RVKZK",
1024: " 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX",
1025: " 20LYNKRRRX ROKSR RWKSRSX RLKQK RTKYK RPXUX",
1026: " 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX",
1027: " 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX",
1028: " 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX",
1029: " 14KXOKOX RPKPX RMKWKWOVK RMXRX",
1030: " 15KYRKLX RRMWX RRKXX RMWVW RLXXX",
1031: " 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX",
1032: " 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX",
1033: " 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX",
1034: " 44KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RQOQT RTOTT RQQTQ RQRTR",
1035: " 12NWRKRX RSKSX RPKUK RPXUX",
1036: " 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX",
1037: " 15KYRKMX RRNVX RRKWX RKXPX RTXYX",
1038: " 30I\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX",
1039: " 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX",
1040: " 36JZMJLM RXJWM RPPOS RUPTS RMVLY RXVWY RMKWK RMLWL RPQTQ RPRTR RMWWW RMXWX",
1041: " 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK",
1042: " 21J[NKNX ROKOX RVKVX RWKWX RLKYK RLXQX RTXYX",
1043: " 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX",
1044: " 20K[MKRQ RNKSQMX RMKWKXOVK RNWWW RMXWXXTVX",
1045: " 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX",
1046: " 33KZMONLOKPKQLRORX RXOWLVKUKTLSOSX RMONMOLPLQMRO RXOWMVLULTMSO RPXUX",
1047: " 40KZRKRX RSKSX RQNNOMQMRNTQUTUWTXRXQWOTNQN RQNOONQNROTQU RTUVTWRWQVOTN RPKUK RPXUX",
1048: " 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX",
1049: " 33J[RKRX RSKSX RLPMONOOSQU RTUVSWOXOYP RMONROTQUTUVTWRXO RPKUK RPXUX",
1050: " 35KZMVNXQXMRMONMOLQKTKVLWMXOXRTXWXXV ROUNRNOOMQK RTKVMWOWRVU RNWPW RUWWW",
1051: " 18KYTKKX RSMTX RTKUX RNTTT RIXNX RRXWX",
1052: " 34JYPKLX RQKMX RNKUKWLWNVPSQ RUKVLVNUPSQ ROQRQTRUSUUTWQXJX RRQTSTUSWQX",
1053: " 25KXVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUU RRKPMOONRNVPX",
1054: " 26JYPKLX RQKMX RNKTKVLWNWQVTUVTWQXJX RTKULVNVQUTTVSWQX",
1055: " 22JYPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXTXUUSX",
1056: " 20JXPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXOX",
1057: " 33KYVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUVVS RRKPMOONRNVPX RRXTVUS RSSXS",
1058: " 27J[PKLX RQKMX RXKTX RYKUX RNKSK RVK[K ROQVQ RJXOX RRXWX",
1059: " 12NWTKPX RUKQX RRKWK RNXSX",
1060: " 19LXUKRUQWPX RVKSURWPXOXMWLUMTNUMV RSKXK",
1061: " 27JZPKLX RQKMX RYKOR RRPTX RSPUX RNKSK RVK[K RJXOX RRXWX",
1062: " 14KXQKMX RRKNX ROKTK RKXUXVUTX",
1063: " 30I\\OKKX ROMPX RPKQV RYKPX RYKUX RZKVX RMKPK RYK\\K RIXMX RSXXX",
1064: " 21JZPKLX RPKTX RQKTU RXKTX RNKQK RVKZK RJXNX",
1065: " 32KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK",
1066: " 24JYPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RJXOX",
1067: " 46KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK ROWOVPUQURVRZS[T[UZ RRVSZT[",
1068: " 35JZPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RSRTWUXVXWW RSRTSUWVX RJXOX",
1069: " 28KZWLXLYKXNWLUKRKPLOMOOPPUSVT RONPOURVSVVUWSXPXNWMULXMWNW",
1070: " 16KZTKPX RUKQX RPKNNOKZKYNYK RNXSX",
1071: " 20J[PKMUMWOXSXUWVUYK RQKNUNWOX RNKSK RWK[K",
1072: " 15KYOKPX RPKQV RYKPX RMKRK RVK[K",
1073: " 24I[NKMX ROKNV RTKMX RTKSX RUKTV RZKSX RLKQK RXK\\K",
1074: " 21KZPKTX RQKUX RYKLX RNKSK RVK[K RJXOX RRXWX",
1075: " 20LYPKRQPX RQKSQ RYKSQQX RNKSK RVK[K RNXSX",
1076: " 16LYXKLX RYKMX RQKONPKYK RLXUXVUTX",
1101: " 32LZQOPPPQOQOPQOTOVQVWWXXX RTOUQUWWX RURRSPTOUOWPXSXTWUU RRSPUPWQX",
1102: " 29JYNKNX ROKOX RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLKOK",
1103: " 24LXVQUQURVRVQUPSOQOOPNRNUOWQXSXUWVV RQOPPOROUPWQX",
1104: " 32L[VKVX RWKWX RVRUPSOQOOPNRNUOWQXSXUWVU RQOPPOROUPWQX RTKWK RVXYX",
1105: " 26LXOSVSVRUPSOQOOPNRNUOWQXSXUWVV RUSUQSO RQOPPOROUPWQX",
1106: " 20LWTKULUMVMVLTKRKPMPX RRKQMQX RNOSO RNXSX",
1107: " 42LYQOOQOSQUSUUSUQSOQO RQOPQPSQU RSUTSTQSO RTPUOVO RPTOUOXPYTYVZ ROWPXTXVYV[T\\P\\N[NYPX",
1108: " 28J[NKNX ROKOX RORPPROTOVPWRWX RTOUPVRVX RLKOK RLXQX RTXYX",
1109: " 18NWRKRLSLSKRK RRORX RSOSX RPOSO RPXUX",
1110: " 23NWSKSLTLTKSK RSOSZR\\ RTOTZR\\P\\O[OZPZP[O[ RQOTO",
1111: " 27JZNKNX ROKOX RWOOU RRSVX RSSWX RLKOK RTOYO RLXQX RTXYX",
1112: " 12NWRKRX RSKSX RPKSK RPXUX",
1113: " 44F_JOJX RKOKX RKRLPNOPORPSRSX RPOQPRRRX RSRTPVOXOZP[R[X RXOYPZRZX RHOKO RHXMX RPXUX RXX]X",
1114: " 28J[NONX ROOOX RORPPROTOVPWRWX RTOUPVRVX RLOOO RLXQX RTXYX",
1115: " 28LYQOOPNRNUOWQXTXVWWUWRVPTOQO RQOPPOROUPWQX RTXUWVUVRUPTO",
1116: " 32JYNON\\ ROOO\\ RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLOOO RL\\Q\\",
1117: " 29KYUOU\\ RVOV\\ RURTPROPONPMRMUNWPXRXTWUU RPOOPNRNUOWPX RS\\X\\",
1118: " 22KXOOOX RPOPX RPRQPSOUOVPVQUQUPVP RMOPO RMXRX",
1119: " 26LYTOUPUQVQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWOVPVPWQX",
1120: " 14LWPKPVRXTXUWUV RQKQVRX RNOTO",
1121: " 28J[NONUOWQXSXUWVU ROOOUPWQX RVOVX RWOWX RLOOO RTOWO RVXYX",
1122: " 15KYNORX ROORV RVORX RLOQO RTOXO",
1123: " 24I[LOOX RMOOU RROOX RROUX RSOUU RXOUX RJOOO RVOZO",
1124: " 21KYNOUX ROOVX RVONX RLOQO RTOXO RLXPX RSXXX",
1125: " 23KYNORX ROORV RVORXP[N\\M\\L[LZMZM[L[ RLOQO RTOXO",
1126: " 16LXUONX RVOOX ROONQNOVO RNXVXVVUX",
1127: " 32K[QOOPNQMSMUNWPXQXSWUUWRXO RQOOQNSNUOWPX RQOSOUPWWXX RSOTPVWXXYX",
1128: " 40KXRKPMOOMUK\\ RQLPNNTL\\ RRKTKVLVNUPRQ RTKULUNTPRQ RRQTRUTUVTWRXQXOWNT RRQSRTTTVRX",
1129: " 19KYLQNOPORPSSSXR\\ RLQNPPPRQSS RWOVRSXQ\\",
1130: " 39KYSOQOOPNQMSMUNWPXRXTWUVVTVRUPRNQLQKRJTJUKVM RQOOQNSNVPX RRXTVUTUQSO RQLRKTKVM",
1131: " 27LXVPTOQOOPOQPRRS RQOPPPQRS RRSOTNUNWPXSXUW RRSPTOUOWPX",
1132: " 28LWRKQLQMSNVNVMSNPOOPNRNTOVPWRXSYS[R\\P\\O[ RSNQOPPOROTPVRX",
1133: " 26IYJRKPLONOOPOQMX RMONPNQLX ROQPPROTOVPVRS\\ RTOUPURR\\",
1134: " 35IYJSKQLPNPOQOVPX RMPNQNUOWPXQXSWTVUTVQVNULTKRKQLQNRPURWS RQXSVTTUQUNTK",
1135: " 13NWROPVPWQXSXUWVU RSOQVQWRX",
1136: " 26KYOOLX RPOMX RUOVPWPVOTORQOR RORPSRWTXVWWU RORQSSWTX",
1137: " 15LXLKNKPLWX RNKOLVX RRPMX RRPNX",
1138: " 26KZOOK\\ RPOL\\ RNUNWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX",
1139: " 19JYNOMX ROONUMX RVRVOWOVRTUQWNXMX RLOOO",
1140: " 36MXRKQLQMSNVN RTNQOPPPRRSUS RTNROQPQRRS RSSPTOUOWQXSYTZT[S\\Q\\ RSSQTPUPWQX",
1141: " 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO",
1142: " 20IZPPMX RPPNX RTPSX RTPTX RKQMOXO RKQMPXP",
1143: " 29JXSOQOOPNQMSJ\\ RQOOQNSK\\ RSOUPVRVTUVTWRXPXNWMU RSOUQUTTVRX",
1144: " 28K[YOQOOPNQMSMUNWPXRXTWUVVTVRUPYP RQOOQNSNVPX RRXTVUTUQSO",
1145: " 14KZSPQX RSPRX RMQOOXO RMQOPXP",
1146: " 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP",
1147: " 35KZOPNQMSMUNWPXRXUWWUXRXPWOUOTPSRRUO\\ RMUNVPWRWUVWTXR RXQWPUPSR RRUQXP\\",
1148: " 17KXMONOPPS[T\\ RNOOPR[T\\U\\ RVOTRNYL\\",
1149: " 28I[TKQ\\ RUKP\\ RJRKPLONOOPOVPWSWUVWT RMONPNTOWPXSXUWWTXRYO",
1150: " 36JZNPPPPONPMQLSLUMWNXPXQWRUSR RLUNWPWRU RRRRWSXUXWVXTXRWPVOVPWP RRUSWUWWV",
1151: " 32KZVOTVTWUXWXXWYU RWOUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX",
1152: " 32JXOKMR RPKNRNVPX RNROPQOSOUPVRVTUVTWRXPXNWMUMR RSOUQUTTVRX RMKPK",
1153: " 22KXUPUQVQUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX",
1154: " 35KZWKTVTWUXWXXWYU RXKUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RUKXK",
1155: " 23KWNURTTSURUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX",
1156: " 23MXWKXLXKVKTLSNPYO[N\\ RVKULTNQYP[N\\L\\L[M\\ RPOVO",
1157: " 34KYVOTVSYR[ RWOUVTYR[P\\M\\L[M[N\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX",
1158: " 29KZPKLX RQKMX ROQPPROTOVPVRUUUWVX RTOUPURTUTWUXWXXWYU RNKQK",
1159: " 26MWSKSLTLTKSK RNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU",
1160: " 26MWTKTLULUKTK RORPPQOSOTPTRRYQ[O\\M\\M[N\\ RROSPSRQYP[O\\",
1161: " 32KXPKLX RQKMX RVPUQVQVPUOTORQPROR RORPSQWRXTXUWVU RORQSRWSX RNKQK",
1162: " 16NVSKPVPWQXSXTWUU RTKQVQWRX RQKTK",
1163: " 46F^GRHPIOKOLPLQJX RJOKPKQIX RLQMPOOQOSPSQQX RQORPRQPX RSQTPVOXOZPZRYUYWZX RXOYPYRXUXWYX[X\\W]U",
1164: " 33J[KRLPMOOOPPPQNX RNOOPOQMX RPQQPSOUOWPWRVUVWWX RUOVPVRUUUWVXXXYWZU",
1165: " 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO",
1166: " 35JYKRLPMOOOPPPQM\\ RNOOPOQL\\ RPQROTOVPWRWTVVUWSXQXOVOT RTOVQVTUVSX RJ\\O\\",
1167: " 28KYVOR\\ RWOS\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RP\\U\\",
1168: " 22LXMRNPOOQORPRQPX RPOQPQQOX RRQSPUOVOWPWQVQWP",
1169: " 24LYVPVQWQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWNVOVOW",
1170: " 16NWSKPVPWQXSXTWUU RTKQVQWRX RPOUO",
1171: " 33IZJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX",
1172: " 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP",
1173: " 37H\\IRJPKOMONPNRMUMWNX RLOMPMRLULWNXOXQWRV RTORVRWTX RUOSVSWTXUXWWYUZRZOYOZP",
1174: " 38JZMRNPPOROSPSR RQORPRRQUPWNXMXLWLVMVLW RXPWQXQXPWOVOTPSRRURWSX RQUQWRXTXVWWU",
1175: " 35IYJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVSYR[ RWOUVTYR[P\\M\\L[M[N\\",
1176: " 27KYWOWPVQNVMWMX RNQOOROUQ ROPRPUQVQ RNVOVRWUW ROVRXUXVV",
1177: " 39H[RKSLSMTMTLRKOKMLLNLX ROKNLMNMX RXKYLYMZMZLXKVKTMTX RVKUMUX RJOWO RJXOX RRXWX",
1178: " 29J[UKVLWLWKQKOLNNNX RQKPLONOX RVOVX RWOWX RLOWO RLXQX RTXYX",
1179: " 27J[WKQKOLNNNX RQKPLONOX RUKVLVX RWKWX RLOVO RLXQX RTXYX",
1180: " 48F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX RYKZL[L[KUKSLRNRX RUKTLSNSX RZOZX R[O[X RHO[O RHXMX RPXUX RXX]X",
1181: " 46F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX R[KUKSLRNRX RUKTLSNSX RYKZLZX R[K[X RHOZO RHXMX RPXUX RXX]X",
1182: " 12NWRORX RSOSX RPOSO RPXUX",
1184: " 21LXVPTOROPPOQNSNUOWQXSXUW RROPQOSOVQX ROSSS",
1185: " 35LYSKQLPMOONRNUOWPXRXTWUVVTWQWNVLUKSK RSKQMPOOSOVPX RRXTVUTVPVMUK ROQVQ",
1186: " 34KZTKQ\\ RUKP\\ RQONPMRMUNWQXTXWWXUXRWPTOQO RQOOPNRNUOWQX RTXVWWUWRVPTO",
1187: " 22LXUPVRVQUPSOQOOPNRNTOVRX RQOOQOTPVRXSYS[R\\P\\",
1191: " 45I[VKWLXLVKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RZK[L[KYKWLVNSYR[Q\\ RYKXLWNTYS[Q\\O\\O[P\\ RLOYO",
1192: " 38IZVKWLXLXKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RVOTVTWUXWXXWYU RWOUVUWVX RLOWO",
1193: " 38IZVKWL RXKSKQLPMOOLYK[J\\ RSKQMPOMYL[J\\H\\H[I\\ RWKTVTWUXWXXWYU RXKUVUWVX RLOVO",
1194: " 63F^SKTLTM RULSKPKNLMMLOIYH[G\\ RPKNMMOJYI[G\\E\\E[F\\ RZK[L\\L\\KWKUL RTMSOPYO[N\\ RWKUMTOQYP[N\\L\\L[M\\ RZOXVXWYX[X\\W]U R[OYVYWZX RIO[O",
1195: " 63F^SKTLTM RULSKPKNLMMLOIYH[G\\ RPKNMMOJYI[G\\E\\E[F\\ RZK[L R\\KWKUL RTMSOPYO[N\\ RWKUMTOQYP[N\\L\\L[M\\ R[KXVXWYX[X\\W]U R\\KYVYWZX RIOZO",
1196: " 20MWNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU",
1200: " 28LYQKOLNONTOWQXTXVWWTWOVLTKQK RQKPLOOOTPWQX RTXUWVTVOULTK",
1201: " 10LYPNSKSX RRLRX ROXVX",
1202: " 35LYOMONNNNMOLQKTKVLWNVPTQQROSNUNX RTKULVNUPTQ RNWOVPVSWVWWV RPVSXVXWVWU",
1203: " 39LYOMONNNNMOLQKTKVLWNVPTQ RTKULVNUPTQ RRQTQVRWTWUVWTXQXOWNVNUOUOV RTQURVTVUUWTX",
1204: " 13LYSMSX RTKTX RTKMTXT RQXVX",
1205: " 33LYOKNQ ROKVK ROLSLVK RNQOPQOTOVPWRWUVWTXQXOWNVNUOUOV RTOUPVRVUUWTX",
1206: " 36LYVMVNWNWMVLTKRKPLOMNPNUOWQXTXVWWUWSVQTPQPNR RRKPMOPOUPWQX RTXUWVUVSUQTP",
1207: " 22LYNKNO RVMRTPX RWKTQQX RNMPKRKUM RNMPLRLUMVM",
1208: " 51LYQKOLNNOPQQTQVPWNVLTKQK RQKPLONPPQQ RTQUPVNULTK RQQORNTNUOWQXTXVWWUWTVRTQ RQQPROTOUPWQX RTXUWVUVTURTQ",
1209: " 36LYOVOUNUNVOWQXSXUWVVWSWNVLTKQKOLNNNPORQSTSWQ RSXUVVSVNULTK RQKPLONOPPRQS",
1210: " 6NVRVQWRXSWRV",
1211: " 8NVSWRXQWRVSWSYQ[",
1212: " 12NVROQPRQSPRO RRVQWRXSWRV",
1213: " 14NVROQPRQSPRO RSWRXQWRVSWSYQ[",
1214: " 15NVRKQLRSSLRK RRLRO RRVQWRXSWRV",
1215: " 29LYNNONOONONNOLQKTKVLWNWOVQSRRSRTST RTKVMVPUQSR RRWRXSXSWRW",
1216: " 6OVRKRP RSKRP",
1217: " 12LXOKOP RPKOP RUKUP RVKUP",
1218: " 10MWQKPLPNQOSOTNTLSKQK",
1219: " 9MWRJRP ROKUO RUKOO",
1220: " 3KZXHM\\",
1221: " 16MWUHSJQMPPPTQWSZU\\ RSJRLQPQTRXSZ",
1222: " 16MWOHQJSMTPTTSWQZO\\ RQJRLSPSTRXQZ",
1223: " 12MWPHP\\ RQHQ\\ RPHUH RP\\U\\",
1224: " 12MWSHS\\ RTHT\\ ROHTH RO\\T\\",
1225: " 38LWSHQIPJPLRNSP RQIPL RSNRQ RPJQLSNSPRQPRRSSTSVQXPZ RRSSV RPXQ[ RSTRVPXPZQ[S\\",
1226: " 38MXQHSITJTLRNQP RSITL RQNRQ RTJSLQNQPRQTRRSQTQVSXTZ RRSQV RTXS[ RQTRVTXTZS[Q\\",
1227: " 4MWTHPRT\\",
1228: " 4MWPHTRP\\",
1229: " 3OURHR\\",
1230: " 6MWPHP\\ RTHT\\",
1231: " 3I[LRXR",
1232: " 6I[RLRX RLRXR",
1233: " 9JZRMRX RMRWR RMXWX",
1234: " 9JZRMRX RMMWM RMRWR",
1235: " 6JZMMWW RWMMW",
1236: " 6NVRQQRRSSRRQ",
1237: " 15I[RLQMRNSMRL RLRXR RRVQWRXSWRV",
1238: " 6I[LPXP RLTXT",
1239: " 9I[WLMX RLPXP RLTXT",
1240: " 9I[LNXN RLRXR RLVXV",
1241: " 4JZWLMRWX",
1242: " 4JZMLWRMX",
1243: " 10JZWKMOWS RMTWT RMXWX",
1244: " 10JZMKWOMS RMTWT RMXWX",
1245: " 21H[YUWUUTTSRPQOONNNLOKQKRLTNUOUQTRSTPUOWNYN",
1246: " 16JZLTLRMPOPUSWSXR RLRMQOQUTWTXRXP",
1247: " 8JZMSRPWS RMSRQWS",
1248: " 7NVSKPO RSKTLPO",
1249: " 7NVQKTO RQKPLTO",
1250: " 14LXNKOMQNSNUMVK RNKONQOSOUNVK",
1251: " 8NVSLRMQLRKSLSNQP",
1252: " 8NVSKQMQORPSORNQO",
1253: " 8NVQLRMSLRKQLQNSP",
1254: " 8NVQKSMSORPQORNSO",
1256: " 11JZWMQMONNOMQMSNUOVQWWW",
1257: " 11JZMMMSNUOVQWSWUVVUWSWM",
1258: " 11JZMMSMUNVOWQWSVUUVSWMW",
1259: " 11JZMWMQNOONQMSMUNVOWQWW",
1260: " 14JZWMQMONNOMQMSNUOVQWWW RMRUR",
1261: " 13I[TOUPXRUTTU RUPWRUT RLRWR",
1262: " 13MWRMRX ROPPORLTOUP RPORMTO",
1263: " 13I[POOPLROTPU ROPMROT RMRXR",
1264: " 13MWRLRW ROTPURXTUUT RPURWTU",
1265: " 37KYVSUPSOQOOPNQMSMUNWPXRXTWUVVTWQWNVLTKQKPLQLRK RQOOQNSNVPX RRXTVUTVQVNULTK",
1266: " 15JZLKRX RMKRV RXKRX RLKXK RNLWL",
1267: " 10G[IOLORW RKORX R[FRX",
1268: " 26I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\L\\K[KZLZL[",
1269: " 40I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\L\\K[KZLZL[ RQNOONQNSOUQVSVUUVSVQUOSNQN",
1270: " 26H\\ZRYTWUVUTTSSQPPONNMNKOJQJRKTMUNUPTQSSPTOVNWNYOZQZR",
1271: " 26JZXKLX ROKPLPNOOMOLNLLMKOKSLVLXK RUTTUTWUXWXXWXUWTUT",
1272: " 41J[YPXPXQYQYPXOWOVPUTTVSWQXOXMWLVLTMSORRPSNSLRKPKOLONPQUWWXXXYW ROXMVMTOR RONPPVWWX",
1273: " 29J[UPSOQOPQPRQTSTUS RUOUSVTXTYRYQXNVLSKRKOLMNLQLRMUOWRXSXVW",
1274: " 34KZQHQ\\ RTHT\\ RWLVLVMWMWLUKPKNLNNOPVSWT RNNOOVRWTWVVWTXQXOWNVNUOUOVNV",
1275: " 12KYRKN\\ RVKR\\ RNQWQ RMVVV",
1276: " 40LXTLSLSMTMTLSKQKPLPNQPTRUS RPNQOTQUSUUSW RQPOROTPVSXTY ROTPUSWTYT[S\\Q\\P[PZQZQ[P[",
1277: " 29LXRKQLRMSLRK RRMRQ RRQQSRVSSRQ RRVR\\ RPOONNOOPPOTOUNVOUPTO",
1278: " 42LXRMSLRKQLRMRQQRSURV RRQSRQURVRZQ[R\\S[RZ RPOONNOOPPOTOUNVOUPTO RPXOWNXOYPXTXUWVXUYTX",
1279: " 12LYVKVX RNKVK RQQVQ RNXVX",
1281: " 24H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRQQRRSSRRQ",
1282: " 33LYQKPLPMQN RTKULUMTN RRNPOOQORPTRUSUUTVRVQUOSNRN RRURY RSUSY ROWVW",
1283: " 23LYRKPLONOOPQRRSRUQVOVNULSKRK RRRRX RSRSX ROUVU",
1284: " 24H\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRKRY RKRYR",
1285: " 25JYRRPQOQMRLTLUMWOXPXRWSUSTRR RWMRR RRMWMWR RRMVNWR",
1286: " 25JZLLMKOKQLRNRPQRPSNT ROKPLQNQQPS RVKUX RWKTX RNTXT",
1287: " 27JYNKNU ROKNR RNROPQOSOUPVQVTTVTXUYVYWX RSOUQUTTV RLKOK",
1288: " 27LYONRKRQ RVNSKSQ RRQPROTOUPWRXSXUWVUVTURSQ RRTRUSUSTRT",
1289: " 27JZRKRY RMKMPNRPSTSVRWPWK RLMMKNM RQMRKSM RVMWKXM ROVUV",
1290: " 27JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXVXVUUX",
1291: " 20LYWKTKQLONNQNSOVQXTYWY RWKTLRNQQQSRVTXWY",
1292: " 23JZRRPQOQMRLTLUMWOXPXRWSUSTRR RSLQQ RWMRR RXQSS",
1293: " 12KYPMTW RTMPW RMPWT RWPMT",
1294: " 34J[OUMULVLXMYOYPXPVNTMRMONMOLQKTKVLWMXOXRWTUVUXVYXYYXYVXUVU RNMPLULWM",
1295: " 34J[OOMOLNLLMKOKPLPNNPMRMUNWOXQYTYVXWWXUXRWPUNULVKXKYLYNXOVO RNWPXUXWW",
1401: " 21F^KHK\\ RLHL\\ RXHX\\ RYHY\\ RHH\\H RH\\O\\ RU\\\\\\",
1402: " 20H]KHRQJ\\ RJHQQ RJHYHZMXH RK[X[ RJ\\Y\\ZWX\\",
1403: " 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
1404: " 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
1405: " 12KYOBOb RPBPb ROBVB RObVb",
1406: " 12KYTBTb RUBUb RNBUB RNbUb",
1407: " 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\P^Q`RaTb",
1408: " 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\T^S`RaPb",
1409: " 24KYU@RCPFOIOLPOSVTYT\\S_Ra RRCQEPHPKQNTUUXU[T^RaOd",
1410: " 24KYO@RCTFUIULTOQVPYP\\Q_Ra RRCSETHTKSNPUOXO[P^RaUd",
1411: " 13AXCRGRR` RGSRa RFSRb RX:Rb",
1412: " 32F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia",
2001: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2002: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2003: " 32G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
2004: " 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[",
2005: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2006: " 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[",
2007: " 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\\S",
2008: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2009: " 12MXRFR[ RSFS[ ROFVF RO[V[",
2010: " 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF",
2011: " 27F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
2012: " 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[",
2013: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2014: " 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
2015: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2016: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2017: " 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\\W^X_Y_Z^",
2018: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X",
2019: " 34H\\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX",
2020: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2021: " 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\\F",
2022: " 15H\\KFR[ RLFRX RYFR[ RIFOF RUF[F",
2023: " 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F",
2024: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2025: " 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\\F RO[V[",
2026: " 16H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
2027: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2028: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2029: " 14I[NFN[ ROFO[ RKFZFZLYF RK[R[",
2030: " 15H\\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[",
2031: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2032: " 16H\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[",
2033: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2034: " 56G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ",
2035: " 12MXRFR[ RSFS[ ROFVF RO[V[",
2036: " 27F\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[",
2037: " 15H\\RFK[ RRFY[ RRIX[ RI[O[ RU[[[",
2038: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2039: " 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\F RI[O[",
2040: " 36G]KEJJ RZEYJ RONNS RVNUS RKWJ\\ RZWY\\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ",
2041: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2042: " 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
2043: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2044: " 20H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[",
2045: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2046: " 33I\\KKKILGMFOFPGQIRMR[ RKIMGOGQI RZKZIYGXFVFUGTISMS[ RZIXGVGTI RO[V[",
2047: " 48H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[",
2048: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2049: " 41G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\\M ROFVF RO[V[",
2050: " 43G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ",
2051: " 18H\\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[",
2052: " 41F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[",
2053: " 34H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[",
2054: " 30F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[",
2055: " 22F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[",
2056: " 20F\\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[",
2057: " 42H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\\T",
2058: " 27E_NFH[ ROFI[ R[FU[ R\\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[",
2059: " 12LYUFO[ RVFP[ RRFYF RL[S[",
2060: " 21I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F",
2061: " 27F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[",
2062: " 14H\\QFK[ RRFL[ RNFUF RH[W[YUV[",
2063: " 30E`NFH[ RNFO[ ROFPY R\\FO[ R\\FV[ R]FW[ RKFOF R\\F`F RE[K[ RS[Z[",
2064: " 21F_OFI[ ROFVX ROIV[ R\\FV[ RLFOF RYF_F RF[L[",
2065: " 42G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF",
2066: " 27F]OFI[ RPFJ[ RLFXF[G\\I\\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[",
2067: " 61G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^",
2068: " 42F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[",
2069: " 35G^ZH[H\\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY",
2070: " 16H]UFO[ RVFP[ ROFLLNF]F\\L\\F RL[S[",
2071: " 25F_NFKQJUJXKZN[R[UZWXXU\\F ROFLQKUKXLZN[ RKFRF RYF_F",
2072: " 15H\\NFO[ ROFPY R\\FO[ RLFRF RXF^F",
2073: " 24E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F",
2074: " 21G]NFU[ ROFV[ R\\FH[ RLFRF RXF^F RF[L[ RR[X[",
2075: " 20H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[",
2076: " 16G][FH[ R\\FI[ ROFLLNF\\F RH[V[XUU[",
2077: " 46H\\KILKXWYYY[ RLLXX RKIKKLMXYY[ RPPLTKVKXLZK[ RKVMZ RLTLVMXMZK[ RSSXN RVIVLWNYNYLWKVI RVIWLYN",
2101: " 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[",
2102: " 33G\\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF",
2103: " 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
2104: " 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[",
2105: " 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
2106: " 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[",
2107: " 60I\\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\\U\\X]Y^ RLYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[",
2108: " 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[",
2109: " 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[",
2110: " 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM",
2111: " 27G\\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[",
2112: " 12MXRFR[ RSFS[ ROFSF RO[V[",
2113: " 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\\N]P][ RDMHM RD[K[ RO[V[ RZ[a[",
2114: " 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[",
2115: " 36H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2116: " 36G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
2117: " 33H\\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b",
2118: " 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[",
2119: " 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY",
2120: " 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM",
2121: " 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[",
2122: " 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM",
2123: " 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M",
2124: " 21H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
2125: " 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
2126: " 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[",
2127: " 40G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[",
2128: " 57G\\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[",
2129: " 28H\\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY",
2130: " 44I\\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH",
2131: " 32I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[",
2132: " 31I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[",
2133: " 32G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb",
2134: " 44F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF",
2135: " 15LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[",
2136: " 29H\\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW",
2137: " 23H\\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[",
2138: " 28F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\\W RYMVXVZW[",
2139: " 24H\\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM",
2140: " 45IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\\S^T_TaRbPb RSTPUNVMXMZO\\S^",
2141: " 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
2142: " 22G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N",
2143: " 31H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb",
2144: " 35H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N",
2145: " 16H\\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN",
2146: " 31H\\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO",
2147: " 37G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb",
2148: " 23I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb",
2149: " 34F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M",
2150: " 44F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW",
2151: " 39H]XMVTUXUZV[Y[[Y\\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
2152: " 36H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF",
2153: " 25I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ",
2154: " 42H]ZFVTUXUZV[Y[[Y\\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F",
2155: " 26I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ",
2156: " 35KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM",
2157: " 43H\\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ",
2158: " 31H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W RMFQF",
2159: " 26LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW",
2160: " 32LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb",
2161: " 34H\\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF",
2162: " 18MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF",
2163: " 52AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\\N]O]Q[W[Z\\[ RZM\\O\\QZWZZ[[^[`YaW",
2164: " 37F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\W",
2165: " 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN",
2166: " 42G\\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb",
2167: " 33H\\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb",
2168: " 26IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN",
2169: " 28J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY",
2170: " 18KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM",
2171: " 37F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\\W RYMWTVXVZW[",
2172: " 26H\\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO",
2173: " 41C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\\V]R]M\\M]O RUMSVSYU[",
2174: " 42H\\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[",
2175: " 41G\\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb",
2176: " 31H\\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW",
2177: " 43G^VGUHVIWHWGUFRFOGMILLL[ RRFPGNIMLM[ R\\G[H\\I]H]G\\FZFXGWIW[ RZFYGXIX[ RIM[M RI[P[ RT[[[",
2178: " 33G]WGVHWIXHWGUFRFOGMILLL[ RRFPGNIMLM[ RWMW[ RXMX[ RIMXM RI[P[ RT[[[",
2179: " 35G]VGUHVIWHWGUF RXFRFOGMILLL[ RRFPGNIMLM[ RWHW[ RXFX[ RIMWM RI[P[ RT[[[",
2180: " 54BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R]G\\H]I^H]G[FXFUGSIRLR[ RXFVGTISLS[ R]M][ R^M^[ RDM^M RD[K[ RO[V[ RZ[a[",
2181: " 56BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R\\G[H\\I]H]G[F R^FXFUGSIRLR[ RXFVGTISLS[ R]H][ R^F^[ RDM]M RD[K[ RO[V[ RZ[a[",
2182: " 12MXRMR[ RSMS[ ROMSM RO[V[",
2184: " 25IZWNUMRMONMPLSLVMYNZQ[T[VZ RRMPNNPMSMVNYOZQ[ RMTUT",
2185: " 43I\\TFQGOJNLMOLTLXMZO[Q[TZVWWUXRYMYIXGVFTF RTFRGPJOLNOMTMXNZO[ RQ[SZUWVUWRXMXIWGVF RNPWP",
2186: " 42G]UFOb RVFNb RQMMNKPJSJVKXMZP[S[WZYXZUZRYPWNTMQM RQMNNLPKSKVLXNZP[ RS[VZXXYUYRXPVNTM",
2187: " 27I[TMVNXPXOWNTMQMNNMOLQLSMUOWSZ RQMONNOMQMSNUSZT\\T^S_Q_",
2190: " 45G]LMKNJPJRKUOYP[ RJRKTOXP[P]O`MbLbKaJ_J\\KXMTOQRNTMVMYNZPZTYXWZU[T[SZSXTWUXTY RVMXNYPYTXXWZ",
2191: " 69E_YGXHYIZHYGWFTFQGOINKMNLRJ[I_Ha RTFRGPIOKNNLWK[J^I`HaFbDbCaC`D_E`Da R_G^H_I`H`G_F]F[GZHYJXMU[T_Sa R]F[HZJYNWWV[U^T`SaQbObNaN`O_P`Oa RIM^M",
2192: " 52F^[GZH[I\\H[GXFUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea RYMWTVXVZW[Z[\\Y]W RZMXTWXWZX[ RJMZM",
2193: " 54F^YGXHYIZHZGXF R\\FUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea R[FWTVXVZW[Z[\\Y]W R\\FXTWXWZX[ RJMYM",
2194: " 86@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R`G_H`IaH`G]FZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R^M\\T[X[Z\\[_[aYbW R_M]T\\X\\Z][ RDM_M",
2195: " 88@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R^G]H^I_H_G]F RaFZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R`F\\T[X[Z\\[_[aYbW RaF]T\\X\\Z][ RDM^M",
2196: " 20LYMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW",
2200: " 40H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF",
2201: " 11H\\NJPISFS[ RRGR[ RN[W[",
2202: " 45H\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV",
2203: " 47H\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
2204: " 13H\\THT[ RUFU[ RUFJUZU RQ[X[",
2205: " 39H\\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF",
2206: " 48H\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN",
2207: " 31H\\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[",
2208: " 63H\\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO",
2209: " 48H\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[",
2210: " 6MWRYQZR[SZRY",
2211: " 8MWR[QZRYSZS\\R^Q_",
2212: " 12MWRMQNROSNRM RRYQZR[SZRY",
2213: " 14MWRMQNROSNRM RR[QZRYSZS\\R^Q_",
2214: " 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY",
2215: " 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY",
2216: " 6NVRFQM RSFQM",
2217: " 12JZNFMM ROFMM RVFUM RWFUM",
2218: " 14KYQFOGNINKOMQNSNUMVKVIUGSFQF",
2219: " 9JZRFRR RMIWO RWIMO",
2220: " 3G][BIb",
2221: " 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\T`",
2222: " 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\P`",
2223: " 12KYOBOb RPBPb ROBVB RObVb",
2224: " 12KYTBTb RUBUb RNBUB RNbUb",
2225: " 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\P^Q`RaTb",
2226: " 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\T^S`RaPb",
2227: " 4KYUBNRUb",
2228: " 4KYOBVROb",
2229: " 3NVRBRb",
2230: " 6KYOBOb RUBUb",
2231: " 3E_IR[R",
2232: " 6E_RIR[ RIR[R",
2233: " 9F^RJR[ RJRZR RJ[Z[",
2234: " 9F^RJR[ RJJZJ RJRZR",
2235: " 6G]KKYY RYKKY",
2236: " 6MWRQQRRSSRRQ",
2237: " 15E_RIQJRKSJRI RIR[R RRYQZR[SZRY",
2238: " 6E_IO[O RIU[U",
2239: " 9E_YIK[ RIO[O RIU[U",
2240: " 9E_IM[M RIR[R RIW[W",
2241: " 4F^ZIJRZ[",
2242: " 4F^JIZRJ[",
2243: " 10F^ZFJMZT RJVZV RJ[Z[",
2244: " 10F^JFZMJT RJVZV RJ[Z[",
2245: " 21F_[WYWWVUTRPQOONMNKOJQJSKUMVOVQURTUPWNYM[M",
2246: " 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O",
2247: " 8G]JTROZT RJTRPZT",
2248: " 7LXTFOL RTFUGOL",
2249: " 7LXPFUL RPFOGUL",
2250: " 18H\\KFLHNJQKSKVJXHYF RKFLINKQLSLVKXIYF",
2251: " 8MWRHQGRFSGSIRKQL",
2252: " 8MWSFRGQIQKRLSKRJ",
2253: " 8MWRHSGRFQGQIRKSL",
2254: " 8MWQFRGSISKRLQKRJ",
2255: " 10E[HMLMRY RKMR[ R[BR[",
2256: " 13F^ZJSJOKMLKNJQJSKVMXOYSZZZ",
2257: " 13F^JJJQKULWNYQZSZVYXWYUZQZJ",
2258: " 13F^JJQJUKWLYNZQZSYVWXUYQZJZ",
2259: " 13F^JZJSKOLMNKQJSJVKXMYOZSZZ",
2260: " 16F^ZJSJOKMLKNJQJSKVMXOYSZZZ RJRVR",
2261: " 11E_XP[RXT RUMZRUW RIRZR",
2262: " 11JZPLRITL RMORJWO RRJR[",
2263: " 11E_LPIRLT ROMJROW RJR[R",
2264: " 11JZPXR[TX RMURZWU RRIRZ",
2265: " 44I\\XRWOVNTMRMONMQLTLWMYNZP[R[UZWXXUYPYKXHWGUFRFPGOHOIPIPH RRMPNNQMTMXNZ RR[TZVXWUXPXKWHUF",
2266: " 15H\\JFR[ RKFRY RZFR[ RJFZF RKGYG",
2267: " 10AbDMIMRY RHNR[ Rb:R[",
2268: " 32F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia",
2269: " 50F^[CZD[E\\D\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia RQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK",
2270: " 26F_\\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\\Q\\S",
2271: " 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT",
2272: " 49F_[NZO[P\\O\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\Z\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[",
2273: " 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\\T]Q]O\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV",
2274: " 42H\\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX",
2275: " 12H]SFLb RYFRb RLQZQ RKWYW",
2276: " 46JZUITJUKVJVIUGSFQFOGNINKOMQOVR ROMTPVRWTWVVXTZ RPNNPMRMTNVPXU[ RNVSYU[V]V_UaSbQbOaN_N^O]P^O_",
2277: " 30JZRFQHRJSHRF RRFRb RRQQTRbSTRQ RLMNNPMNLLM RLMXM RTMVNXMVLTM",
2278: " 56JZRFQHRJSHRF RRFRT RRPQRSVRXQVSRRP RRTRb RR^Q`RbS`R^ RLMNNPMNLLM RLMXM RTMVNXMVLTM RL[N\\P[NZL[ RL[X[ RT[V\\X[VZT[",
2279: " 12I\\XFX[ RKFXF RPPXP RK[X[",
2281: " 38E`QFNGKIILHOHRIUKXNZQ[T[WZZX\\U]R]O\\LZIWGTFQF RROQPQQRRSRTQTPSORO RRPRQSQSPRP",
2282: " 45J[PFNGOIQJ RPFOGOI RUFWGVITJ RUFVGVI RQJOKNLMNMQNSOTQUTUVTWSXQXNWLVKTJQJ RRUR[ RSUS[ RNXWX",
2283: " 27I\\RFOGMILLLMMPORRSSSVRXPYMYLXIVGSFRF RRSR[ RSSS[ RNWWW",
2284: " 28D`PFMGJIHLGOGSHVJYM[P\\T\\W[ZY\\V]S]O\\LZIWGTFPF RRFR\\ RGQ]Q",
2285: " 31G`PMMNKPJSJTKWMYPZQZTYVWWTWSVPTNQMPM R]GWG[HUN R]G]M\\IVO R\\HVN",
2286: " 28F\\IIJGLFOFQGRIRLQOPQNSKU ROFPGQIQMPPNS RVFT[ RWFS[ RKUYU",
2287: " 30I\\MFMU RNFMQ RMQNOONQMTMWNXPXRWTUV RTMVNWPWRTXTZU[W[YY RKFNF",
2288: " 44I\\RNOOMQLTLUMXOZR[S[VZXXYUYTXQVOSNRN RRHNJRFRN RSHWJSFSN RRSQTQURVSVTUTTSSRS RRTRUSUSTRT",
2289: " 37G^QHRFR[ RTHSFS[ RJHKFKMLPNRQSRS RMHLFLNMQ R[HZFZMYPWRTSSS RXHYFYNXQ RNWWW",
2290: " 31G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[Y[YVX[",
2291: " 24H[YGUGQHNJLMKPKSLVNYQ[U\\Y\\ RYGVHSJQMPPPSQVSYV[Y\\",
2292: " 27F_OQMQKRJSIUIWJYKZM[O[QZRYSWSURSQROQ RSHPQ RZJRR R\\QST",
2293: " 12H\\OKUY RUKOY RKOYU RYOKU",
2294: " 48F^NVLUKUIVHXHYI[K\\L\\N[OYOXNVKRJOJMKJMHPGTGWHYJZMZOYRVVUXUYV[X\\Y\\[[\\Y\\X[VYUXUVV RJMKKMIPHTHWIYKZM",
2295: " 48F^NMLNKNIMHKHJIHKGLGNHOJOKNMKQJTJVKYM[P\\T\\W[YYZVZTYQVMUKUJVHXGYG[H\\J\\K[MYNXNVM RJVKXMZP[T[WZYXZV",
2301: " 40F_JMILIJJHLGNGPHQIRKSP RIJKHMHOIPJQLRPR[ R[M\\L\\J[HYGWGUHTISKRP R\\JZHXHVIUJTLSPS[",
2302: " 51F^IGJKKMMOPPTPWOYMZK[G RIGJJKLMNPOTOWNYLZJ[G RPONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO RPPNQMSMVNY RVYWVWSVQTP",
2303: " 30F^MJMV RNKNU RVKVU RWJWV RIGKIMJPKTKWJYI[G RIYKWMVPUTUWVYW[Y",
2304: " 48F^[ILIJJILINJPLQNQPPQNQLPJ[J RIMJOKPMQ RQMPKOJMI RIXXXZW[U[SZQXPVPTQSSSUTWIW R[TZRYQWP RSTTVUWWX",
2305: " 48F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX RMSKPJNJKKILH RSGVHXJYLYOXRVU",
2306: " 48G_HKKHMKMV RJILLLV RMKPHRKRU ROIQLQU RRKUHWKW[ RTIVLV[ RWKZH[J\\M\\P[SZUXWUYP[ RYIZJ[M[PZSYUWWTYP[",
2307: " 41F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S RITOTMRLOLMMJOHQG RSGUHWJXMXOWRUT[T RKXYX RKYYY",
2308: " 30F_GLJIMLMX RIJLMLX RMLPISLSX ROJRMRX RSLVIYLYW[Y RUJXMXXZZ]W",
2309: " 33G]ZIJY RZIWJQJ RXKUKQJ RZIYLYR RXKXNYR RQRJR RPSMSJR RQRQY RPSPVQY",
2310: " 33F^HOJKOU RJMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ RWHVIUKUMWQXTXWWYUZ",
2311: " 36F^IOLLPN RKMOORLUN RQMTOWLYN RVMXO[L RIULRPT RKSOURRUT RQSTUWRYT RVSXU[R",
2312: " 48F^JHNJPLQOQRPUNWJY RJHMIOJQLRO RRRQUOWMXJY RZHWIUJSLRO RRRSUUWWXZY RZHVJTLSOSRTUVWZY RIP[P RIQ[Q",
2317: " 12NVQQQSSSSQQQ RQQSS RSQQS",
2318: " 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY",
2319: " 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT",
2320: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2321: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2322: " 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT",
2323: " 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV",
2324: " 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV",
2325: " 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU",
2326: " 18E_HIHL R\\I\\L RHI\\I RHJ\\J RHK\\K RHL\\L",
2327: " 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ",
2328: " 49JZMLWX RMLONQOTOVNWMWKUKUMTO RONTO RQOWM RVKVN RULWL RWXUVSUPUNVMWMYOYOWPU RUVPU RSUMW RNVNY RMXOX",
2329: " 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLWY",
2330: " 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\U[WZYWZTZPYMXKVITH",
2331: "103EfNSOUQVSVUUVSVQUOSNQNOONPMSMVNYP[S\\V\\Y[[Y\\W]T]P\\MZJXIUHRHOIMJKLIOHSHXI]KaMcPeTfYf]e`cba RKLJNIRIXJ\\L`NbQdUeYe]d_cba RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU RaLaNcNcLaL RbLbN RaMcM RaVaXcXcVaV RbVbX RaWcW",
2332: " 30D`H@Hd RM@Md RW@Wd R\\@\\d RMMWK RMNWL RMOWM RMWWU RMXWV RMYWW",
2367: " 12NVQQQSSSSQQQ RQQSS RSQQS",
2368: " 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY",
2369: " 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT",
2370: " 32H\\PMMNLOKQKSLUMVPWTWWVXUYSYQXOWNTMPM RMNLPLSMUNVPW RWVXTXQWOVNTM",
2371: " 36H\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR",
2372: " 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT",
2373: " 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV",
2374: " 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV",
2375: " 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU",
2376: " 18E_HIHL R\\I\\L RHI\\I RHJ\\J RHK\\K RHL\\L",
2377: " 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ",
2378: " 36JZQCVMRTRU RULQS RTITKPRRUUY RW\\UYSXQXOYN[N]O_Ra RW\\UZSYOYO]P_Ra RSXPZN]",
2379: " 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLSY",
2380: " 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\R\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\U[WZYWZTZPYMXKVITH",
2381: " 89IjNQOOQNSNUOVQVSUUSVQVOUNTMQMNNKPISHWH[I^K`NaRaW`[_]]`ZcVfQiMk RWHZI]K_N`R`W_[^]\\`YcTgQi RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU ReLeNgNgLeL RfLfN ReMgM ReVeXgXgVeV RfVfX ReWgW",
2382: " 85D`H>Hf RI>If RM>Mf RQBSBSDQDQAR?T>W>Y?[A\\D\\I[LYNWOUOSNRLQNOQNROSQVRXSVUUWUYV[X\\[\\`[cYeWfTfReQcQ`S`SbQb RRBRD RQCSC RY?ZA[D[IZLYN RRLRNPQNRPSRVRX RYVZX[[[`ZcYe RR`Rb RQaSa",
2401: " 21AcHBHb RIBIb R[B[b R\\B\\b RDB`B RDbMb RWb`b",
2402: " 23BaGBQPFb RFBPP REBPQ REB\\B^I[B RGa\\a RFb\\b^[[b",
2403: " 28I[X+U1R8P=OANFMNMVN^OcPgRlUsXy RU1S6Q<P@OFNNNVO^PdQhSnUs",
2404: " 28I[L+O1R8T=UAVFWNWVV^UcTgRlOsLy RO1Q6S<T@UFVNVVU^TdShQnOs",
2405: " 14I[M+MRMy RN+NRNy RM+X+ RMyXy",
2406: " 14I[V+VRVy RW+WRWy RL+W+ RLyWy",
2407: " 48I[V+S-Q/P1O4O8P<TDUGUJTMRP RS-Q0P4P8Q;UCVGVJUMRPNRRTUWVZV]UaQiPlPpQtSw RRTTWUZU]T`PhOlOpPsQuSwVy",
2408: " 48I[N+Q-S/T1U4U8T<PDOGOJPMRP RQ-S0T4T8S;OCNGNJOMRPVRRTOWNZN]OaSiTlTpStQw RRTPWOZO]P`ThUlUpTsSuQwNy",
2409: " 32I[V.S1Q4O8N=NCOIPMSXT\\UbUgTlSoQs RS1Q5P8O=OBPHQLTWU[VaVgUlSpQsNv",
2410: " 32I[N.Q1S4U8V=VCUITMQXP\\ObOgPlQoSs RQ1S5T8U=UBTHSLPWO[NaNgOlQpSsVv",
2411: ' 147Z:RARRo R@RQo R?RRr RZ"VJRr',
2412: " 57Ca].\\.[/[0\\1]1^0^.],[+Y+W,U.T0S3R:QJQjPsOv R\\/\\0]0]/\\/ RR:Rj RU.T1S:SZRjQqPtOvMxKyIyGxFvFtGsHsItIuHvGv RGtGuHuHtGt",
2501: " 20H\\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV",
2502: " 44H\\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ",
2503: " 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV",
2504: " 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ",
2505: " 27I\\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[",
2506: " 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ",
2507: " 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR",
2508: " 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ",
2509: " 8NWRFR[S[ RRFSFS[",
2510: " 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV",
2511: " 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[",
2512: " 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[",
2513: " 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[",
2514: " 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[",
2515: " 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG",
2516: " 27H\\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP",
2517: " 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY]",
2518: " 34H\\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[",
2519: " 43H\\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX",
2520: " 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG",
2521: " 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF",
2522: " 14H\\JFR[ RJFKFRX RZFYFRX RZFR[",
2523: " 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\\FWX R]FW[",
2524: " 16H\\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[",
2525: " 17I\\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[",
2526: " 20H\\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[",
2551: " 38E\\XFVHTKQPOSLWIZG[E[DZDXEWFXEY RXFWJUTT[ RXFU[ RT[TYSVRTPRNQLQKRKTLWOZR[V[XZ",
2552: " 70F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFXFZG[I[KZMXNTORO RXFYGZIZKYMXN RTOWPXQYSYVXYWZU[S[RZRXSU RTOVPWQXSXVWYU[",
2553: " 41H]KHJJJLKNNOQOUNWMYKZIZGYFWFTGQJOMMQLULXMZP[R[UZWXXVXTWRURSSRU RWFUGRJPMNQMUMXNZP[",
2554: " 43F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWJWLXNZP[S[UZWXYTZOZLYIWGUFPFMGKIJKJMKNMNNMOK",
2555: " 49I\\WIVJVLWMYMZKZIYGWFTFRGQHPJPLQNSO RTFRHQJQMSO RSOQONPLRKTKWLYMZO[R[UZWXXVXTWRURSSRU RQOOPMRLTLXMZ",
2556: " 46G\\WHVJTORUQWOZM[ RQLPNNOLOKMKKLINGQF[FXGWHVKTSSVRXPZM[K[IZHYHXIWJXIY RSFWGXG ROSPRRQVQXPZMXT",
2557: " 53G]JIIKIMJOLPOPROTNWKXHXGWFVFTGRIQKPNPQQSSTUTWSYQZO RWFUGSIRKQNQRST RZOYSWWUYSZO[L[JZIXIWJVKWJX RYSWVUXRZO[",
2558: " 55F^LLKKKILGOFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RJTKSMRVOXN[L]J^H^G]F\\FZGXJWLURTVTYV[W[YZ[X R\\FZHXLVRUVUYV[",
2559: " 33IYWHUKSPQUPWNZL[ RYLWNTOQOONNLNJOHQGUFYFWHVJTPRVQXOZL[J[IZIXJWKXJY",
2560: " 34IZYFWHUKSPPYN] RYMWOTPQPOONMNKOIQGUFYFWIVKSTQXPZN]M^K_J^J\\KZMXOWRVVU",
2561: " 59F^LLKKKIMGPFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RZGWKUMSNPO R]G\\H]I^H^G]F\\FZGWLVMTNPO RPOSPTRUYV[ RPORPSRTYV[W[YZ[X",
2562: " 40I[MILKLMMOOPRPUOWNZK[H[GZFYFWGVHTKPUOWMZK[ RVHTLRSQVPXNZK[I[HZHXIWKWMXPZR[U[WZYX",
2563: " 49D`RFNOKUIXGZE[C[BZBXCWDXCY RRFPMOQNVNZP[ RRFQJPOOVOZP[ R[FWORXP[ R[FYMXQWVWZY[Z[\\Z^X R[FZJYOXVXZY[",
2564: " 38G^RFQJOPMULWJZH[F[EZEXFWGXFY RRFRKSVT[ RRFSKTVT[ R`G_H`IaHaG`F^F\\GZJYLWQUWT[",
2565: " 34H]SFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGWGUHSJQNPSPV RQGOJMNLRLVMYO[",
2566: " 53F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFVFYGZH[J[MZOYPVQTQRP RVFXGYHZJZMYOXPVQ",
2567: " 43H]UJULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[XZZX RWFXGYIYMXPVSSVOYK[",
2568: " 65F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFWFZG[I[KZMYNVORO RWFYGZIZKYMXNVO RROUPVRWYX[ RROTPURVYX[Y[[Z]X",
2569: " 36H\\NIMKMMNOPPSPVOXN[K\\H\\G[FZFXGWHVJUMSTRWPZN[ RVJUNTUSXQZN[K[IZHXHWIVJWIX",
2570: " 38I[YHXJVOTUSWQZO[ RSLRNPONOMMMKNIPGSF\\FZGYHXKVSUVTXRZO[M[KZJYJXKWLXKY RUFYGZG",
2571: " 39G]HJJGLFMFOHOKNNKVKYL[ RMFNHNKKSJVJYL[N[PZSWUTVR RZFVRUVUYW[X[ZZ\\X R[FWRVVVYW[",
2572: " 36G\\HJJGLFMFOHOKNOLVLYM[ RMFNHNKLRKVKYM[N[QZTWVTXPYMZIZGYFXFWGVIVLWNYP[Q]Q",
2573: " 41F]ILHLGKGIHGJFNFMHLLKUJ[ RLLLUK[ RVFTHRLOUMYK[ RVFUHTLSUR[ RTLTUS[ R`F^G\\IZLWUUYS[",
2574: " 52H\\PKOLMLLKLIMGOFQFSGTITLSPQUOXMZJ[H[GZGXHWIXHY RQFRGSISLRPPUNXLZJ[ R]G\\H]I^H^G]F[FYGWIULSPRURXSZT[U[WZYX",
2575: " 42G]JJLGNFOFQGQIOOORPT ROFPGPINONRPTRTUSWQYNZL R\\FZLWTUX R]F[LYQWUUXSZP[L[JZIXIWJVKWJX",
2576: " 44G\\ZHYJWOVRUTSWQYOZL[ RSLRNPONOMMMKNIPGSF]F[GZHYKXOVUTXQZL[H[GZGXHWJWLXOZQ[T[WZYX RVFZG[G",
2601: " 36H\\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2602: " 36H\\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX",
2603: " 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX",
2604: " 36H\\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2605: " 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX",
2606: " 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN",
2607: " 48H\\XMWMW\\V_U`SaQaO`N_L_ RXMX\\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2608: " 25H\\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[",
2609: " 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[",
2610: " 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb",
2611: " 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[",
2612: " 8NWRFR[S[ RRFSFS[",
2613: " 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\\O]Q][^[",
2614: " 25H\\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[",
2615: " 36I\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN",
2616: " 36H\\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX",
2617: " 36H\\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX",
2618: " 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM",
2619: " 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX",
2620: " 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN",
2621: " 25H\\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[",
2622: " 14JZLMR[ RLMMMRY RXMWMRY RXMR[",
2623: " 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[",
2624: " 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[",
2625: " 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb",
2626: " 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[",
2651: " 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRTXTZV[XZYY[V RWRUXUZV[",
2652: " 23LZLVNSPO RSFMXMZO[P[RZTXUUURVVWWXWZV RTFNXNZO[",
2653: " 22LXTSSTTTTSSRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[",
2654: " 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RZFTXTZV[XZYY[V R[FUXUZV[",
2655: " 23LXOYQXRWSUSSRRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[",
2656: " 27OXRRUOWLXIXGWFUGTIKdKfLgNfOcPZQ[S[UZVYXV RTISNRRO[M`Kd",
2657: " 38K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V",
2658: " 30L[LVNSPO RSFL[ RTFM[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2659: " 19NVSLRMSNTMSL RQROXOZQ[SZTYVV RRRPXPZQ[",
2660: " 24NVSLRMSNTMSL RQRKd RRRO[M`KdJfHgGfGdHaJ_M]Q[TYVV",
2661: " 31LZLVNSPO RSFL[ RTFM[ RURUSVSURTRRTOU ROURVSZT[ ROUQVRZT[U[XYZV",
2662: " 17NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[",
2663: " 45E^EVGSIRKSKUI[ RIRJSJUH[ RKUMSORPRRSRUP[ RPRQSQUO[ RRUTSVRWRYSYUXXXZY[ RWRXSXUWXWZY[[Z\\Y^V",
2664: " 32I[IVKSMROSOUM[ RMRNSNUL[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2665: " 29KYRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXVXXWYV RPRNTMVMYO[",
2666: " 30L[LVNSPO RQLHg RRLIg ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V",
2667: " 35K[UUTSRRPRNSMTLVLXMZO[Q[SZ RPRNTMVMYO[ RVRPdPfQgSfTcT[V[YY[V RWRT[R`Pd",
2668: " 24LZLVNSPRRSRUP[ RPRQSQUO[ RRUTSVRWRVU RVRVUWWXWZV",
2669: " 22NZNVPSQQQSTUUWUYTZR[ RQSSUTWTYR[ RNZP[U[XYZV",
2670: " 20NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[ RPNVN",
2671: " 27K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRTXTZV[XZYY[V RWRUXUZV[",
2672: " 23KZNRMTLWLZN[O[RZTXUUUR RORNTMWMZN[ RURVVWWXWZV",
2673: " 36H]LRJTIWIZK[L[NZPX RMRKTJWJZK[ RRRPXPZR[S[UZWXXUXR RSRQXQZR[ RXRYVZW[W]V",
2674: " 42JZJVLSNRPRQSQUPXOZM[L[KZKYLYKZ RWSVTWTWSVRURSSRUQXQZR[U[XYZV RQSRU RSSQU RPXQZ RQXOZ",
2675: " 32K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V",
2676: " 38LYLVNSPRRRTSTVSXPZN[ RRRSSSVRXPZ RN[P\\Q^QaPdNfLgKfKdLaO^R\\VYYV RN[O\\P^PaOdNf",
2700: " 42H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH",
2701: " 12H\\NJPISFS[ RNJNKPJRHR[S[",
2702: " 34H\\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[",
2703: " 48H\\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX",
2704: " 18H\\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV",
2705: " 53H\\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX",
2706: " 62H\\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT",
2707: " 12H\\KFYFO[ RKFKGXG RXFN[O[",
2708: " 68H\\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX",
2709: " 62H\\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY",
2710: " 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2711: " 24MXTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
2712: " 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2713: " 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
2714: " 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2715: " 58I\\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
2716: " 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ",
2717: " 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL",
2718: " 71F_\\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\\[ R\\M\\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\\Z\\[",
2719: " 51I\\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ",
2720: " 8G^[BIbJb R[B\\BJb",
2721: " 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb",
2722: " 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob",
2723: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
2724: " 8F_JQ[Q[R RJQJR[R",
2725: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
2726: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
2727: " 11NWSFRGRM RSGRM RSFTGRM",
2728: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
2729: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
2750: " 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF",
2751: " 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL",
2752: " 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW",
2753: " 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[",
2754: " 10H]XGR[ RYFS[ RYFJUZU",
2755: " 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[",
2756: " 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP",
2757: " 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F",
2758: " 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ",
2759: " 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[",
2760: " 6MXPYOZP[QZPY",
2761: " 8MXP[OZPYQZQ[P]N_",
2762: " 11MXSMRNSOTNSM RPYOZP[QZ",
2763: " 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_",
2764: " 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY",
2765: " 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY",
2766: " 8MXVFTHSJSKTLUKTJ",
2767: " 8MXUHTGUFVGVHUJSL",
2768: " 55E_\\N[O\\P]O]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX RK[IZHXHVITJSPP ROLPQQTSWUYWZYZZY",
2769: " 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW",
2770: " 3G]_BEb",
2771: " 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb",
2772: " 20JYSBTDUGVLVPUUSYQ\\N_Jb RSBTEUJUOTTSWQ[N_",
2773: " 9J[TFTR ROIYO RYIOO",
2774: " 3E_IR[R",
2775: " 6E_RIR[ RIR[R",
2776: " 6E_IO[O RIU[U",
2777: " 6NWUFSM RVFSM",
2778: " 12I[PFNM RQFNM RYFWM RZFWM",
2779: " 14KZSFQGPIPKQMSNUNWMXKXIWGUFSF",
2801: " 18H\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[",
2802: " 31G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2803: " 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[",
2804: " 14I[NFN[ ROFO[ RKFZFZLYF RK[R[",
2805: " 31F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\\F RG[\\[ RG[Gb RH[Gb R[[\\b R\\[\\b",
2806: " 22G\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[",
2807: " 71CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\\Z][ RWPXQYSZX[Z\\[^[_Z`X RO[V[",
2808: " 45H\\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[",
2809: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[",
2810: " 37F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RXHLY RH[O[ RU[\\[ RN@N?M?M@NBPCTCVBW@",
2811: " 43F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\\X RH[O[",
2812: " 25E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\\F RU[\\[",
2813: " 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][",
2814: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RLPXP RH[O[ RU[\\[",
2815: " 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF",
2816: " 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\F RH[O[ RU[\\[",
2817: " 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[",
2818: " 32G\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[",
2819: " 16I\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[",
2820: " 24H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\\F",
2821: " 48F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\\R\\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[",
2822: " 21H\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[",
2823: " 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\F RH[\\[ R[[\\b R\\[\\b",
2824: " 28F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[",
2825: " 30BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[",
2826: " 36BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab",
2827: " 31F`PFP[ RQFQ[ RIFHLHFTF RQPXP[Q\\R]T]W\\Y[ZX[M[ RXPZQ[R\\T\\W[YZZX[",
2828: " 41CaHFH[ RIFI[ REFLF RIPPPSQTRUTUWTYSZP[E[ RPPRQSRTTTWSYRZP[ R[F[[ R\\F\\[ RXF_F RX[_[",
2829: " 29H]MFM[ RNFN[ RJFQF RNPUPXQYRZTZWYYXZU[J[ RUPWQXRYTYWXYWZU[",
2830: " 39H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP",
2831: " 59CbHFH[ RIFI[ REFLF RE[L[ RVFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF RVFTGRIQKPOPRQVRXTZV[ RX[ZZ\\X]V^R^O]K\\IZGXF RIPOP",
2832: " 45G]WFW[ RXFX[ R[FOFLGKHJJJLKNLOOPWP ROFMGLHKJKLLNMOOP RRPPQORLYKZJZIY RPQOSMZL[J[IYIX RT[[[",
2901: " 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[",
2902: " 48H\\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2903: " 37H\\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[",
2904: " 14HZMMM[ RNMN[ RJMXMXRWM RJ[Q[",
2905: " 22F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[",
2906: " 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[",
2907: " 59E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\\M]N\\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\\[]Z^X RO[V[",
2908: " 42I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[",
2909: " 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ",
2910: " 37G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG",
2911: " 38H\\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[",
2912: " 22G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[",
2913: " 30G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\\M RI[O[ RU[\\[",
2914: " 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[",
2915: " 36H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM",
2916: " 21G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[",
2917: " 36G\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb",
2918: " 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[",
2919: " 16I\\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[",
2920: " 22I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM",
2921: " 52H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb",
2922: " 21H\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[",
2923: " 23G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[",
2924: " 28G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[",
2925: " 30CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[",
2926: " 32CbHMH[ RIMI[ RRMR[ RSMS[ R\\M\\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[",
2927: " 27H]QMQ[ RRMR[ RLMKRKMUM RRTVTYUZWZXYZV[N[ RVTXUYWYXXZV[",
2928: " 37E_JMJ[ RKMK[ RGMNM RKTOTRUSWSXRZO[G[ ROTQURWRXQZO[ RYMY[ RZMZ[ RVM]M RV[][",
2929: " 25J[OMO[ RPMP[ RLMSM RPTTTWUXWXXWZT[L[ RTTVUWWWXVZT[",
2930: " 34I\\MOLMLQMONNPMSMVNXPYSYUXXVZS[P[NZLXLWMVNWMX RSMUNWPXSXUWXUZS[ RRTXT",
2931: " 51DaIMI[ RJMJ[ RFMMM RF[M[ RVMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM RVMTNRPQSQURXTZV[ RX[ZZ\\X]U]S\\PZNXM RJTPT",
2932: " 40G\\VMV[ RWMW[ RZMOMLNKPKQLSOTVT ROMMNLPLQMSOT RTTQUPVNZM[ RTTRUQVOZN[L[KZJX RS[Z[",
3001: " 36H\\RFKZ RQIW[ RRIX[ RRFY[ RMUVU RI[O[ RT[[[ RKZJ[ RKZM[ RWZU[ RWYV[ RXYZ[",
3002: " 78G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUP RXHYJYLXN RUFWGXIXMWOUP RNPUPXQYRZTZWYYXZU[I[ RXRYTYWXY RUPWQXSXXWZU[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3003: " 37G\\XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXXYV RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[",
3004: " 62G]LFL[ RMGMZ RNFN[ RIFSFVGXIYKZNZSYVXXVZS[I[ RWIXKYNYSXVWX RSFUGWJXNXSWWUZS[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3005: " 83G\\LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Y[YU RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[ RT[YZ RV[YY RW[YX RX[YU",
3006: " 70G[LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Q[ RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[",
3007: " 60G^XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXZY[YS RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[ RXTXY RWSWYVZ RTS\\S RUSWT RVSWU RZSYU R[SYT",
3008: " 81F^KFK[ RLGLZ RMFM[ RWFW[ RXGXZ RYFY[ RHFPF RTF\\F RMPWP RH[P[ RT[\\[ RIFKG RJFKH RNFMH ROFMG RUFWG RVFWH RZFYH R[FYG RKZI[ RKYJ[ RMYN[ RMZO[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3009: " 39LXQFQ[ RRGRZ RSFS[ RNFVF RN[V[ ROFQG RPFQH RTFSH RUFSG RQZO[ RQYP[ RSYT[ RSZU[",
3010: " 45JYSFSWRZQ[ RTGTWSZ RUFUWTZQ[O[MZLXLVMUNUOVOWNXMX RMVMWNWNVMV RPFXF RQFSG RRFSH RVFUH RWFUG",
3011: " 69F\\KFK[ RLGLZ RMFM[ RXGMR RPPW[ RQPX[ RQNY[ RHFPF RUF[F RH[P[ RT[[[ RIFKG RJFKH RNFMH ROFMG RWFXG RZFXG RKZI[ RKYJ[ RMYN[ RMZO[ RWYU[ RWYZ[",
3012: " 52I[NFN[ ROGOZ RPFP[ RKFSF RK[Z[ZU RLFNG RMFNH RQFPH RRFPG RNZL[ RNYM[ RPYQ[ RPZR[ RU[ZZ RW[ZY RX[ZX RY[ZU",
3013: " 63E_JFJZ RJFQ[ RKFQX RLFRX RXFQ[ RXFX[ RYGYZ RZFZ[ RGFLF RXF]F RG[M[ RU[][ RHFJG R[FZH R\\FZG RJZH[ RJZL[ RXZV[ RXYW[ RZY[[ RZZ\\[",
3014: " 39F^KFKZ RKFY[ RLFXX RMFYX RYGY[ RHFMF RVF\\F RH[N[ RIFKG RWFYG R[FYG RKZI[ RKZM[",
3015: " 54G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF",
3016: " 59G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZMYOXPUQNQ RXHYJYMXO RUFWGXIXNWPUQ RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3017: " 77G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF RNXOVQURUTVUXV^W`Y`Z^Z\\ RV\\W^X_Y_ RUXW]X^Y^Z]",
3018: " 80G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUPNP RXHYJYLXN RUFWGXIXMWOUP RRPTQUSWYX[Z[[Y[W RWWXYYZZZ RTQURXXYYZY[X RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[",
3019: " 44H\\XIYFYLXIVGSFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[Q[NZLXKUK[LX",
3020: " 57H\\JFJL RQFQ[ RRGRZ RSFS[ RZFZL RJFZF RN[V[ RKFJL RLFJI RMFJH ROFJG RUFZG RWFZH RXFZI RYFZL RQZO[ RQYP[ RSYT[ RSZU[",
3021: " 45F^KFKULXNZQ[S[VZXXYUYG RLGLVMX RMFMVNYOZQ[ RHFPF RVF\\F RIFKG RJFKH RNFMH ROFMG RWFYG R[FYG",
3022: " 34H\\KFR[ RLFRXR[ RMFSX RYGR[ RIFPF RUF[F RJFLH RNFMH ROFMG RWFYG RZFYG",
3023: " 55F^JFN[ RKFNVN[ RLFOV RRFOVN[ RRFV[ RSFVVV[ RTFWV RZGWVV[ RGFOF RRFTF RWF]F RHFKG RIFKH RMFLH RNFLG RXFZG R\\FZG",
3024: " 54H\\KFW[ RLFX[ RMFY[ RXGLZ RIFPF RUF[F RI[O[ RT[[[ RJFMH RNFMH ROFMG RVFXG RZFXG RLZJ[ RLZN[ RWZU[ RWYV[ RWYZ[",
3025: " 48G]JFQQQ[ RKFRQRZ RLFSQS[ RYGSQ RHFOF RVF\\F RN[V[ RIFKG RNFLG RWFYG R[FYG RQZO[ RQYP[ RSYT[ RSZU[",
3026: " 41H\\YFKFKL RWFK[ RXFL[ RYFM[ RK[Y[YU RLFKL RMFKI RNFKH RPFKG RT[YZ RV[YY RW[YX RX[YU",
3051: " 38H\\UFIZ RSJT[ RTHUZ RUFUHVYV[ RLUTU RF[L[ RQ[X[ RIZG[ RIZK[ RTZR[ RTYS[ RVYW[",
3052: " 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVP RYGZIZKYNXO RWFXGYIYKXNVP RNPVPXQYSYUXXVZR[F[ RWQXSXUWXUZ RVPWRWUVXTZR[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3053: " 41H]ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RQHOJNLMOLSLWMY RTFRGPJOLNOMSMXNZP[",
3054: " 63F]OFI[ RPFJ[ RQFK[ RLFUFXGYHZKZOYSWWUYSZO[F[ RWGXHYKYOXSVWTY RUFWHXKXOWSUWRZO[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3055: " 80F]OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[U[WV RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[ RP[UZ RR[UY RUYWV",
3056: " 70F\\OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[N[ RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[",
3057: " 65H^ZH[H\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RQHOJNLMOLSLWMY RVXWWXT RTFRGPJOLNOMSMXNZP[ RR[TZVWWT RTT\\T RUTWU RVTWW RZTXV R[TXU",
3058: " 81E_NFH[ ROFI[ RPFJ[ RZFT[ R[FU[ R\\FV[ RKFSF RWF_F RLPXP RE[M[ RQ[Y[ RLFOG RMFNH RQFOH RRFOG RXF[G RYFZH R]F[H R^F[G RIZF[ RIYG[ RJYK[ RIZL[ RUZR[ RUYS[ RVYW[ RUZX[",
3059: " 39KYTFN[ RUFO[ RVFP[ RQFYF RK[S[ RRFUG RSFTH RWFUH RXFUG ROZL[ ROYM[ RPYQ[ ROZR[",
3060: " 47I\\WFRWQYO[ RXFTSSVRX RYFUSSXQZO[M[KZJXJVKULUMVMWLXKX RKVKWLWLVKV RTF\\F RUFXG RVFWH RZFXH R[FXG",
3061: " 72F]OFI[ RPFJ[ RQFK[ R\\GMR RQOU[ RROV[ RSNWZ RLFTF RYF_F RF[N[ RR[Y[ RMFPG RNFOH RRFPH RSFPG RZF\\G R^F\\G RJZG[ RJYH[ RKYL[ RJZM[ RUZS[ RUYT[ RVYX[",
3062: " 49H\\QFK[ RRFL[ RSFM[ RNFVF RH[W[YU ROFRG RPFQH RTFRH RUFRG RLZI[ RLYJ[ RMYN[ RLZO[ RR[WZ RT[XX RV[YU",
3063: " 68D`MFGZ RMGNYN[ RNFOY ROFPX R[FPXN[ R[FU[ R\\FV[ R]FW[ RJFOF R[F`F RD[J[ RR[Z[ RKFMG RLFMH R^F\\H R_F\\G RGZE[ RGZI[ RVZS[ RVYT[ RWYX[ RVZY[",
3064: " 43F_OFIZ ROFV[ RPFVX RQFWX R\\GWXV[ RLFQF RYF_F RF[L[ RMFPG RNFPH RZF\\G R^F\\G RIZG[ RIZK[",
3065: " 56G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF",
3066: " 60F]OFI[ RPFJ[ RQFK[ RLFXF[G\\I\\K[NYPUQMQ RZG[I[KZNXP RXFYGZIZKYNWPUQ RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3067: " 78G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF RLXMVOUPURVSXT]U^V^W] RT^U_V_ RSXS_T`V`W]W\\",
3068: " 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVPNP RYGZIZKYNXO RWFXGYIYKXNVP RRPTQURWXXYYYZX RWYXZYZ RURVZW[Y[ZXZW RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[",
3069: " 44G^ZH[H\\F[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJUI[JYKY",
3070: " 54G]TFN[ RUFO[ RVFP[ RMFKL R]F\\L RMF]F RK[S[ RNFKL RPFLI RRFMG RYF\\G RZF\\H R[F\\I R\\F\\L ROZL[ ROYM[ RPYQ[ ROZR[",
3071: " 48F_NFKQJUJXKZN[R[UZWXXU\\G ROFLQKUKYLZ RPFMQLULYN[ RKFSF RYF_F RLFOG RMFNH RQFOH RRFOG RZF\\G R^F\\G",
3072: " 35H\\NFNHOYO[ ROGPX RPFQW R[GO[ RLFSF RXF^F RMFNH RQFPH RRFOG RYF[G R]F[G",
3073: " 57E_MFMHKYK[ RNGLX ROFMW RUFMWK[ RUFUHSYS[ RVGTX RWFUW R]GUWS[ RJFRF RUFWF RZF`F RKFNG RLFMH RPFNI RQFNG R[F]G R_F]G",
3074: " 54G]NFT[ ROFU[ RPFV[ R[GIZ RLFSF RXF^F RF[L[ RQ[X[ RMFOH RQFPH RRFPG RYF[G R]F[G RIZG[ RIZK[ RTZR[ RTYS[ RUYW[",
3075: " 51G]MFQPN[ RNFRPO[ ROFSPP[ R\\GSP RKFRF RYF_F RK[S[ RLFNG RPFOH RQFNG RZF\\G R^F\\G ROZL[ ROYM[ RPYQ[ ROZR[",
3076: " 35G]ZFH[ R[FI[ R\\FJ[ R\\FNFLL RH[V[XU ROFLL RPFMI RRFNG RR[VZ RT[WX RU[XU",
3101: " 54I]NPNOOOOQMQMONNPMTMVNWOXQXXYZZ[ RVOWQWXXZ RTMUNVPVXWZZ[[[ RVRUSPTMULWLXMZP[S[UZVX RNUMWMXNZ RUSQTOUNWNXOZP[",
3102: " 47G\\LFL[MZOZ RMGMY RIFNFNZ RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RJFLG RKFLH",
3103: " 34H[WQWPVPVRXRXPVNTMQMNNLPKSKULXNZQ[S[VZXX RMPLRLVMX RQMONNOMRMVNYOZQ[",
3104: " 52H]VFV[[[ RWGWZ RSFXFX[ RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RTFVG RUFVH RXYY[ RXZZ[",
3105: " 41H[MSXSXQWOVNSMQMNNLPKSKULXNZQ[S[VZXX RWRWQVO RMPLRLVMX RVSVPUNSM RQMONNOMRMVNYOZQ[",
3106: " 40KYWHWGVGVIXIXGWFTFRGQHPKP[ RRHQKQZ RTFSGRIR[ RMMVM RM[U[ RPZN[ RPYO[ RRYS[ RRZT[",
3107: " 89I\\XNYOZNYMXMVNUO RQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM ROONQNSOU RUUVSVQUO RQMPNOPOTPVQW RSWTVUTUPTNSM RNUMVLXLYM[N\\Q]U]X^Y_ RN[Q\\U\\X] RLYMZP[U[X\\Y^Y_XaUbObLaK_K^L\\O[ RObMaL_L^M\\O[",
3108: " 65G^LFL[ RMGMZ RIFNFN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\[ RJFLG RKFLH RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3109: " 43LXQFQHSHSFQF RRFRH RQGSG RQMQ[ RRNRZ RNMSMS[ RN[V[ ROMQN RPMQO RQZO[ RQYP[ RSYT[ RSZU[",
3110: " 41KXRFRHTHTFRF RSFSH RRGTG RRMR^QaPb RSNS]R` ROMTMT]S`RaPbMbLaL_N_NaMaM` RPMRN RQMRO",
3111: " 61G]LFL[ RMGMZ RIFNFN[ RWNNW RRSY[ RRTX[ RQTW[ RTM[M RI[Q[ RT[[[ RJFLG RKFLH RUMWN RZMWN RLZJ[ RLYK[ RNYO[ RNZP[ RWYU[ RVYZ[",
3112: " 31LXQFQ[ RRGRZ RNFSFS[ RN[V[ ROFQG RPFQH RQZO[ RQYP[ RSYT[ RSZU[",
3113: " 99AcFMF[ RGNGZ RCMHMH[ RHQIOJNLMOMQNROSRS[ RQORRRZ ROMPNQQQ[ RSQTOUNWMZM\\N]O^R^[ R\\O]R]Z RZM[N\\Q\\[ RC[K[ RN[V[ RY[a[ RDMFN REMFO RFZD[ RFYE[ RHYI[ RHZJ[ RQZO[ RQYP[ RSYT[ RSZU[ R\\ZZ[ R\\Y[[ R^Y_[ R^Z`[",
3114: " 65G^LML[ RMNMZ RIMNMN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\[ RJMLN RKMLO RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[",
3115: " 46H\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RMPLRLVMX RWXXVXRWP RQMONNOMRMVNYOZQ[ RS[UZVYWVWRVOUNSM",
3116: " 60G\\LMLb RMNMa RIMNMNb RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RIbQb RJMLN RKMLO RLaJb RL`Kb RN`Ob RNaPb",
3117: " 55H\\VNVb RWOWa RUNWNXMXb RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RSb[b RVaTb RV`Ub RX`Yb RXaZb",
3118: " 43IZNMN[ RONOZ RKMPMP[ RWOWNVNVPXPXNWMUMSNQPPS RK[S[ RLMNN RMMNO RNZL[ RNYM[ RPYQ[ RPZR[",
3119: " 43J[WOXMXQWOVNTMPMNNMOMQNSPTUUWVXY RNNMQ RNRPSUTWU RXVWZ RMONQPRUSWTXVXYWZU[Q[OZNYMWM[NY",
3120: " 22KZPHPVQYRZT[V[XZYX RQHQWRY RPHRFRWSZT[ RMMVM",
3121: " 43G^LMLVMYNZP[S[UZVYWW RMNMWNY RIMNMNWOZP[ RWMW[\\[ RXNXZ RTMYMY[ RJMLN RKMLO RYYZ[ RYZ[[",
3122: " 31I[LMR[ RMMRY RNMSY RXNSYR[ RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN",
3123: " 45F^JMN[ RKMNX RLMOX RRMOXN[ RRMV[ RSMVX RRMTMWX RZNWXV[ RGMOM RWM]M RHMKN RNMLN RXMZN R\\MZN",
3124: " 48H\\LMV[ RMMW[ RNMX[ RWNMZ RJMQM RTMZM RJ[P[ RS[Z[ RKMMN RPMNN RUMWN RYMWN RMZK[ RMZO[ RVZT[ RWZY[",
3125: " 40H[LMR[ RMMRY RNMSY RXNSYP_NaLbJbIaI_K_KaJaJ` RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN",
3126: " 41I[VML[ RWMM[ RXMN[ RXMLMLQ RL[X[XW RMMLQ RNMLP ROMLO RQMLN RS[XZ RU[XY RV[XX RW[XW",
3151: " 50G]WMUTUXVZW[Y[[Y\\W RXMVTVZ RWMYMWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RNNLQKTKWLY RPMNOMQLTLWMZN[",
3152: " 52I\\PFNMMSMWNYOZQ[S[VZXWYTYRXOWNUMSMQNPOOQNT RQFOMNQNWOZ RVYWWXTXQWO RMFRFPMNT RS[UYVWWTWQVNUM RNFQG ROFPH",
3153: " 34I[WQWPVPVRXRXPWNUMRMONMQLTLVMYNZP[R[UZWW ROONQMTMWNY RRMPOOQNTNWOZP[",
3154: " 58G]YFVQUUUXVZW[Y[[Y\\W RZFWQVUVZ RVF[FWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RWFZG RXFYH",
3155: " 33I[MVQUTTWRXPWNUMRMONMQLTLVMYNZP[R[UZWX ROONQMTMWNY RRMPOOQNTNWOZP[",
3156: " 45JZZHZGYGYI[I[GZFXFVGTISKRNQRO[N^M`Kb RTJSMRRP[O^ RXFVHUJTMSRQZP]O_MaKbIbHaH_J_JaIaI` RNMYM",
3157: " 57H]XMT[S^QaOb RYMU[S_ RXMZMV[T_RaObLbJaI`I^K^K`J`J_ RVTVQUNSMQMNNLQKTKVLYMZO[Q[SZTYUWVT RNOMQLTLWMY RQMOONQMTMWNZO[",
3158: " 41G]OFI[K[ RPFJ[ RLFQFK[ RMTOPQNSMUMWNXPXSVX RWNWRVVVZ RWPUUUXVZW[Y[[Y\\W RMFPG RNFOH",
3159: " 35KXSFSHUHUFSF RTFTH RSGUG RLQMOOMQMRNSPSSQX RRNRRQVQZ RRPPUPXQZR[T[VYWW",
3160: " 45KXUFUHWHWFUF RVFVH RUGWG RMQNOPMRMSNTPTSRZQ]P_NaLbJbIaI_K_KaJaJ` RSNSSQZP]O_ RSPRTP[O^N`Lb",
3161: " 49G]OFI[K[ RPFJ[ RLFQFK[ RYOYNXNXPZPZNYMWMUNQROS RMSOSQTRUTYUZWZ RQUSYTZ ROSPTRZS[U[WZYW RMFPG RNFOH",
3162: " 26LXTFQQPUPXQZR[T[VYWW RUFRQQUQZ RQFVFRTQX RRFUG RSFTH",
3163: " 61@cAQBODMFMGNHPHSF[ RGNGSE[ RGPFTD[F[ RHSJPLNNMPMRNSPSSQ[ RRNRSP[ RRPQTO[Q[ RSSUPWNYM[M]N^P^S\\X R]N]R\\V\\Z R]P[U[X\\Z][_[aYbW",
3164: " 42F^GQHOJMLMMNNPNSL[ RMNMSK[ RMPLTJ[L[ RNSPPRNTMVMXNYPYSWX RXNXRWVWZ RXPVUVXWZX[Z[\\Y]W",
3165: " 46H\\QMNNLQKTKVLYMZP[S[VZXWYTYRXOWNTMQM RNOMQLTLWMY RVYWWXTXQWO RQMOONQMTMWNZP[ RS[UYVWWTWQVNTM",
3166: " 66G]HQIOKMMMNNOPOSNWKb RNNNSMWJb RNPMTIb ROTPQQORNTMVMXNYOZRZTYWWZT[R[PZOWOT RXOYQYTXWWY RVMWNXQXTWWVYT[ RFbNb RJaGb RJ`Hb RK`Lb RJaMb",
3167: " 57G\\WMQb RXMRb RWMYMSb RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RNbVb RRaOb RR`Pb RS`Tb RRaUb",
3168: " 30I[JQKOMMOMPNQPQTO[ RPNPTN[ RPPOTM[O[ RYOYNXNXPZPZNYMWMUNSPQT",
3169: " 47J[XPXOWOWQYQYOXNUMRMONNONQOSQTTUVVWX RONNQ RORQSTTVU RWVVZ RNOOQQRTSVTWVWXVZS[P[MZLYLWNWNYMYMX",
3170: " 23KYTFQQPUPXQZR[T[VYWW RUFRQQUQZ RTFVFRTQX RNMXM",
3171: " 42F^GQHOJMLMMNNPNSLX RMNMRLVLZ RMPKUKXLZN[P[RZTXVU RXMVUVXWZX[Z[\\Y]W RYMWUWZ RXMZMXTWX",
3172: " 29H\\IQJOLMNMONPPPSNX RONORNVNZ ROPMUMXNZP[R[TZVXXUYQYMXMXNYP",
3173: " 48CaDQEOGMIMJNKPKSIX RJNJRIVIZ RJPHUHXIZK[M[OZQXRU RTMRURXSZU[W[YZ[X]U^Q^M]M]N^P RUMSUSZ RTMVMTTSX",
3174: " 51G]JQLNNMPMRNSPSR RPMQNQRPVOXMZK[I[HZHXJXJZIZIY RRORRQVQY RZOZNYNYP[P[NZMXMVNTPSRRVRZS[ RPVPXQZS[U[WZYW",
3175: " 49G]HQIOKMMMNNOPOSMX RNNNRMVMZ RNPLULXMZO[Q[SZUXWT RYMU[T^RaPb RZMV[T_ RYM[MW[U_SaPbMbKaJ`J^L^L`K`K_",
3176: " 39H\\YMXOVQNWLYK[ RXOOOMPLR RVORNONNO RVORMOMMOLR RLYUYWXXV RNYRZUZVY RNYR[U[WYXV",
3200: " 50H\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RNHMJLNLSMWNY RVYWWXSXNWJVH RQFOGNIMNMSNXOZQ[ RS[UZVXWSWNVIUGSF",
3201: " 28H\\QHQ[ RRHRZ RSFS[ RSFPINJ RM[W[ RQZO[ RQYP[ RSYT[ RSZU[",
3202: " 62H\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RWHXJXLWN RTFVGWJWLVNTPPR RKYLXNXSYWYYX RNXSZWZXY RNXS[W[XZYXYV",
3203: " 76H\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXIXLWNTO RVGWIWLVN RSFUGVIVLUNSO RQOTOVPXRYTYWXYWZT[P[MZLYKWKVLUMUNVNWMXLX RWRXTXWWY RSOUPVQWTWWVZT[ RLVLWMWMVLV",
3204: " 28H\\SIS[ RTHTZ RUFU[ RUFJUZU RP[X[ RSZQ[ RSYR[ RUYV[ RUZW[",
3205: " 55H\\MFKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMUNVNWMXLX RWPXRXVWX RSMUNVOWRWVVYUZS[ RLVLWMWMVLV RMFWF RMGUG RMHQHUGWF",
3206: " 69H\\VIVJWJWIVI RWHVHUIUJVKWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNQNOONPMR RNIMKLOLUMXNY RWXXVXSWQ RRFPGOHNJMNMUNXOZQ[ RS[UZVYWVWSVPUOSN",
3207: " 43H\\KFKL RYFYIXLTQSSRWR[ RSRRTQWQ[ RXLSQQTPWP[R[ RKJLHNFPFUIWIXHYF RMHNGPGRH RKJLINHPHUI",
3208: " 79H\\PFMGLILLMNPOTOWNXLXIWGTFPF RNGMIMLNN RVNWLWIVG RPFOGNINLONPO RTOUNVLVIUGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RMQLSLWMY RWYXWXSWQ RPONPMSMWNZP[ RT[VZWWWSVPTO",
3209: " 69H\\MWMXNXNWMW RWOVQURSSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNVOWOXNYMY RMPLNLKMI RVHWIXLXRWVVX RQSORNQMNMKNHOGQF RSFUGVIWLWSVWUYTZR[",
3210: " 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3211: " 24MXTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
3212: " 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3213: " 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\S^Q_ RRYRZSZSYRY RS[T\\ RTZS^",
3214: " 34MXRFQGQIRQ RRFRTST RRFSFST RSFTGTISQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3215: " 52I\\MKMJNJNLLLLJMHNGPFTFWGXHYJYLXNWOSQ RWHXIXMWN RTFVGWIWMVOUP RRQRTSTSQRQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY",
3216: " 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ",
3217: " 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL",
3218: " 74E_[O[NZNZP\\P\\N[MZMYNXPVUTXRZP[L[JZIXIUJSPORMSKSIRGPFNGMIMLNOPRTWWZY[[[\\Y\\X RKZJXJUKSLR RRMSI RSKRG RNGMK RNNPQTVWYYZ RN[LZKXKULSPO RMINMQQUVXYZZ[Z\\Y",
3219: " 56H\\PBP_ RTBT_ RXKXJWJWLYLYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWKUMUMWLWLV",
3220: " 8G^[BIbJb R[B\\BJb",
3221: " 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\ RSDRFQIPOPUQ[R^S`",
3222: " 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\ RQDRFSITOTUS[R^Q`",
3223: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
3224: " 8F_JQ[Q[R RJQJR[R",
3225: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3226: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3227: " 11NWSFRGRM RSGRM RSFTGRM",
3228: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
3229: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
3250: " 58H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RQHOJNLMOLSLWMY RTYVWWUXRYNYJXH RTFRGPJOLNOMSMXNZO[ RQ[SZUWVUWRXNXIWGVF",
3251: " 20H]TJO[Q[ RWFUJP[ RWFQ[ RWFTIQKOL RTJRKOL",
3252: " 52H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMWOMUKWI[ RXGYIYKXMVOSQ RVFWGXIXKWMUOMU RJYKXMXRYWYXX RMXRZWZ RMXR[U[WZXXXW",
3253: " 64H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMXNVOSP RXGYIYKXMWN RVFWGXIXKWMUOSP RQPSPVQWRXTXWWYUZR[O[LZKYJWJULULWKWKV RVRWTWWVY RSPUQVSVWUYTZR[",
3254: " 15H]WJR[T[ RZFXJS[ RZFT[ RZFJUZU",
3255: " 49H]QFLP RQF[F RQGYG RPHUHYG[F RLPMOPNSNVOWPXRXUWXUZQ[N[LZKYJWJULULWKWKV RVPWRWUVXTZ RSNUOVQVUUXSZQ[",
3256: " 61H]YJYIXIXKZKZIYGWFTFQGOIMLLOKSKVLYMZO[R[UZWXXVXSWQVPTOQOOPNQMS RPINLMOLSLWMY RVXWVWSVQ RTFRGPJOLNOMSMXNZO[ RR[TZUYVVVRUPTO",
3257: " 39H]NFLL R[FZIXLTQRTQWP[ RRSPWO[ RXLRRPUOWN[P[ RMIPFRFWI ROGRGWI RMIOHRHWIYIZH[F",
3258: "104H]SFPGOHNJNMOOQPTPWOYNZLZIYGWFSF RUFPG RPHOJONPO ROORP RSPWO RXNYLYIXG RYGUF RSFQHPJPNQP RTPVOWNXLXHWF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RRPMQ RNQLSKUKXLZ RKZP[VZ RVYWWWTVR RVQSP RQPOQMSLULXMZN[ RR[TZUYVWVSUQTP",
3259: " 61H]XNWPVQTRQROQNPMNMKNIPGSFVFXGYHZKZNYRXUVXTZQ[N[LZKXKVMVMXLXLW ROPNNNKOI RXHYJYNXRWUUX RQRPQOOOKPHQGSF RVFWGXIXNWRVUUWSZQ[",
3260: " 16MXPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3261: " 22MXQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\P^",
3262: " 32MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3263: " 38MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\P^",
3264: " 34MXVFUFTGRT RVGUGRT RVGVHRT RVFWGWHRT RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3265: " 59H]OKOJPJPLNLNJOHPGSFWFZG[I[KZMYNWOSPQQQSSTTT RUFZG RYGZIZKYMXNVO RWFXGYIYKXMWNSPRQRSST RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY",
3266: " 22MXWFUGTHSJSLTMUMVLVKUJTJ RUGTITJ RTKTLULUKTK",
3267: " 22MXVIUITHTGUFVFWGWIVKULSM RUGUHVHVGUG RVIVJUL",
3268: " 72E_\\O\\N[N[P]P]N\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQURWTZV[X[YYYX RL[HZ RIZHXHVITJSLR RPPQSTYVZ RK[JZIXIVJTKSMRRO ROLPOQRSVUYWZXZYY",
3269: " 52H]TBL_ RYBQ_ RZKZJYJYL[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJULULWKWKV",
3270: " 8G^_BEbFb R_B`BFb",
3271: " 32JZZBXCUERHPKNOMSMXN\\O_Qb RSHQKOONTN\\ RZBWDTGRJQLPOOSN\\ RNTO]P`Qb",
3272: " 32JZSBUEVHWLWQVUTYR\\O_LaJb RVHVPUUSYQ\\ RSBTDUGVP RVHUQTUSXRZP]M`Jb",
3273: " 39J[TFSGUQTR RTFTR RTFUGSQTR ROIPIXOYO ROIYO ROIOJYNYO RYIXIPOOO RYIOO RYIYJONOO",
3274: " 8F_JQ[Q[R RJQJR[R",
3275: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3276: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3277: " 11MWUFTGRM RUGRM RUFVGRM",
3278: " 22H\\PFOGMM RPGMM RPFQGMM RZFYGWM RZGWM RZF[GWM",
3279: " 30KZSFQGPIPKQMSNUNWMXKXIWGUFSF RSFPIQMUNXKWGSF RUFQGPKSNWMXIUF",
3301: " 62F^IHJIIJHIIGKFMFOGPHQKQOPRNTLUIV ROHPKPPOR RMFNGOJOPNSLU RLVOY RKVOZ RIVN[UV R\\G[H\\H\\G[FYFWGVHUJUYW[[W RWHVJVXXZ RYFXGWJWWYY",
3302: "101E_GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KRP RYM[O\\R\\U[XYZV[S[PZJWIWHX RXNYN[P RVNYO[Q\\S RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY",
3303: " 79F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G",
3304: " 79E_HLHKIIKGNFRFUGWHYJ[M\\Q\\U[XYZV[S[PZJWIWHX RKHMGRGUHWIYK[N RTZRZLWKW RHKJIMHRHUIWJYL[O\\R RZYXZUZRYNWKVIVHXHZI[JZIY RPHMKLMLONSNU RMNMONQNR RMKMMOQOSNUMVKVJUJT",
3305: " 95F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G RUNYK RYKZL\\L RXLYMZM RWMXNZN\\L",
3306: " 94F^MNKMJKJIKGNFQFTGXI RKHMGRGUH RJKKIMHRHXIZI[H[GZFYF RSHRIQKQMROVSWVWYV\\U]S^ RTPWSXVXYW[ RQMSOVQXSYVYYX[V]S^O^L]K\\JZJWLTLRKQ RL\\K[KWLU RO^M]L[LWMTMRLQJQIRIS RUPYL RYLZM\\M RXMYNZN RWNXOZO\\M",
3307: " 99E_UJTHSGQFNFKGIJHNHRIUJWLYNZQ[T[WZYY[W\\T\\Q[NYL RKHJJIMIRJUKW RZW[U[QZNYM RNFLGKIJMJRKVLXNZ RWZYXZUZQYOWM RUFRHPJOLOMPOSQTSTU RPLPMTQTR RPJPKQMTOUQUSTURVQVOUNS RTOYLZJ R\\FZJ RYG]I R\\F[GYGZHZJ[I]I\\H\\F",
3308: " 92F_RFPGNIMKMMNOPQQSQU RNLNMQQQR RNINKOMQORQRSQUPVNWLWJVIUHSHQIPJQIR RRFTHVHXG RQGSH RPGQHSIUIXG RRPYK RYK[N\\Q\\T[WYYVZR[ RXLZN[Q[UZW RVMWMYOZRZVYXXYVZ RVZTZRYPYNZM\\N^P_R_T^ RSZQZ RR[PZNZ",
3309: " 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\J\\H[GYG RJXKYJZIYIWJVLVNWPYR\\T^ RNXOYQ\\R] RLVMWNYP\\Q]S^V^X]Y\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP",
3310: " 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\J\\H[GYG RJXKYJZIYIWJVLVNWPYR\\T^ RNXOYQ\\R] RLVMWNYP\\Q]S^V^X]Y\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP",
3311: " 81E_[KZIXGUFRFOGMILKLNMQPWPYN[ RMNMOPUPV RNHMJMMNOPSQVQXPZN[L[JZ RHVJZ RGYKW RHVHXGYIYJZJXKWIWHV RNONMOKQJTJVKXMYM RUKWM RRJTKULVN RYMPQ RUOYXZY[Y RTPXXZZ RSPWYY[\\X",
3312: " 73G^ZSYTVTUSUQVOXLYJYH RVQVPYLYK RWTVSVRWPYNZLZJYHXGUFPFMGLHKJKLLNNQOSOTNV RLKLLOQOR RLHLJMLOOPQPSOUMWJY RMWOWRYUZXZZY RNXOXSZTZ RJYLXMXQZT[V[YZZY[W",
3313: "128BbEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFKFMGOIPLPROUNWLYI[HZGZ RNIOLORNUMW RJZIYHY RKFMHNKNRMVLXKYJXIXF[ RNGPFRFTGVIWLWRVUUWSYQ[PZOZ RUIVLVRUV RRZQYPY RRFTHUKUSTWSYRXQXN[ RUHVGXFZF\\G]H^J_K R\\H]J RZF[G\\J]K_K R_K\\M[NZQZT[X][`X R\\N[P[T\\W^Z R_K]M\\O\\S]W_Y",
3314: " 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGRISLSRRUQWOYL[KZIZG[ RQIRKRRQUPWOX RMZKYIY RNFPHQKQRPVNYLXJXG[ RRHSGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KYMXNWQWTXXZ[]X RYNXPXTYW[Z R\\KZMYOYSZW\\Y",
3315: " 72D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\P\\S[VZXXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\P RSZQZKWJW RYYWZTZQYMWJVHVGXGZH[IZHY",
3316: "100E`HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSU RSWS\\R^P_M_L^L\\M[N\\M] RQHRJR\\Q^ ROFPGQJQU RQWQ\\P^O_ RSJXF RXFZI[K\\O\\R[UYXV[ RWGZK[N[O RVHXJZM[P[SZVYX RWYUVSU RQUOVMX RWZUWSVPV RV[TXSW RQWOWMX",
3317: " 88D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\P\\S[VZX RXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\P RSZQZKWJW RXZTZQYMWJVHVGXGZH[IZHY RTXVVXV\\Z]Z RWWXW[Z RUWVWZ[\\[^Y",
3318: " 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRVQXOZM[K[IZ RPHQJQVPX RNFOGPJPVOYM[ RGVIZ RFYJW RGVGXFYHYIZIXJWHWGV RRISGUFWFYGZH[J\\K RYHZJ RWFXGYJZK\\K R\\KRP RTOXYZ[]X RUOYX[Z RVNZX[Y\\Y",
3319: " 83E`\\H[G\\F]G]I\\KZKVISHOHKIIK RYJVHSGOGLH R]I\\JZJVGSFOFLGJIIKHNHRIUJWLYNZQ[U[XZZY\\W]T]Q\\OZNWNUOSRQSOS RLXNYQZUZYY RIUKWMXPYUYYX[W\\V]T RXOWOSSRS R]Q[OYOWPUSSTQTOSNQNOOMQL",
3320: " 81F_LNJMIKIIJGMFRFUGYJ[J\\I RJHLGRGUHXJ RIKJILHRHUIYK[K\\I\\G[FZG[H RUIRLQNQPSTSV RRORPSRSS RRLRNTRTTSVRWPWOVOT RJYKZJ[IZIXJVLVOWSYVZYZ[Y RLWMWSZUZ RIXJWKWMXQZT[W[ZZ\\X",
3321: " 45G]JHKHLILWJX RKGMHMXPZ RIILFNHNWPYRY RJXKXMYO[RYVV RTHUHVIVYX[[X RUGWHWYYZ RSIVFYHXIXXYYZY",
3322: "100D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYG[J\\K RYHZJ RWFXGYJZK\\K RZKXKWLWNXP[R\\T RXO[Q RWMXN[P\\R\\V[XYZW[S[PZJWIWHX RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY",
3323: "143BcEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFLFNGOHPJPNOQMTKV RNHOJOONR RLFMGNJNOMSKV RNGPFSFUG RWFTGSISMTPVSWUWWVY RTMTNWSWT RWFUGTITLUNWQXTXVWXUZS[O[MZKXIWGWFX RNZKWJW RQ[OZLWJVGVFXFZG[HZGY RWFZF\\G^J_K R\\H]J RZF[G\\J]K_K R]K[KZLZN[P^R_T R[O^Q RZM[N^P_R_W^Y]Z[[X[UZ RYZXZVY R^Y\\ZZZXYWX",
3324: " 86F^KHMHOIPJQMQO RQQQUPXM[KZI[ RNZLYKY ROYNYLXI[ RMGPHQIRLRUSWUYWZ RIINFPGRISLSO RSQSTTWUXWYYY RQURXTZV[[X RSLTIWFYG[F RVGXHYH RUHVHXI[F RKSMOQO RSOWOYM RMPWP RKSMQQQ RSQWQYM",
3325: " 74E_HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSORRQTQUSWTW RQHRJRPQSPUSX ROFPGQJQPPTOVRYUV RSJ[F RYGYZX] RZGZXY[ R[F[VZZY\\W^T_P_M^K\\JZKYLZK[",
3326: " 74F^NIOGQFTFVGWHXJXMWOVPTQ RQQOPNN RVHWIWNVO RTFUGVIVNUPTQ RMUNSORQQTQWRYTZVZZY\\W^T_P_N^KZJY RXTYVYZX\\ RTQWSXUX[W]V^T_ RO^N]LZKY RR_P^O]MZLYIYHZH\\I]J]",
3401: " 46J[TMQNOONPMSMVNYO[UX RNVOYPZ RQNOPNSNUOXQZ RRNSOUPUYW[ZX RSNVPVXXZ RTMUNWOXO RWPXO RWPWXXYYY",
3402: " 50J[LHMINK RTFQGOINKNXMY RPIOKOXRZ RTFRGQHPKPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3403: " 27KXRNTPVOTMRNOPNRNWOYQ[UY RSNUO RPPOROWPYQZ RQOPQPVQXSZ",
3404: " 47J[QFNINKOLSNVPWRWUVXTZ ROJOKSMVOWP ROHOIPJUMWOXRXUWXTZQ[ RRNNPNXMY ROPOXRZ RPOPXRYSZ RMYNYPZQ[",
3405: " 27KXPUVQSMOPNRNWOYQ[UY RUQRN RPPOROWPYQZ RTRROQOPQPVQXSZ",
3406: " 49LYXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKQMRNTOVOVP RNPPP RRPVP RPPPTQ` RSOPOQNQ[ RRPRTQ`",
3407: " 53J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV[V]U_ RSNVPVZ RTMUNWOXO RWPXO RWPW\\V^U_S`P`N_M^M]N]N^",
3408: " 50J[LHMINK RTFQGOINKNXMY RPIOKOYPZ RTFRGQHPKPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\T^Q` RUNVOWR RTNVQWTWWV[T^",
3409: " 39MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQYS[VX RPNRORXTZ RNPQMRNTO RSPTO RSPSXTYUY",
3410: " 45MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQ[P^O_M` RPNROR[Q] RNPQMRNTO RSPTO RSPS[R]P_M` RS[T]U^",
3411: " 63KYNHOIPK RUFSGQIPKPMOONP RPPPXOY RRIQKQM RQOPOQMQXSZ RUFSHRKRO RRPRXSYTY ROYQZR[UX RRLVIWJWLUNSO RUJVKVLUN RROWOWP RNPPP RRPWP",
3412: " 29MWOHPIQK RWFTGRIQKQXPY RSIRKRYTZ RWFUGTHSKSXTYUY RPYRZS[VX",
3413: " 74E_GOHOIPIXHYJ[ RHNJPJXIYJZKYJX RFPIMKOKXLYJ[ RNNPOQQQXPYR[ RPNQORQRXQYRZSYRX RKPNNPMRNSPSXTYR[ RVNWOYPYY[[^X RWNZPZX\\Z RSPVNXMYN[O\\O R[P\\O R[P[X\\Y]Y",
3414: " 49I[KOLOMPMXLYN[ RLNNPNXMYNZOYNX RJPMMOOOXPYN[ RRNSOUPUYW[ZX RSNVPVXXZ ROPRNTMUNWOXO RWPXO RWPWXXYYY",
3415: " 41J[NPNXMY ROPOXRZ RQOPPPXRYSZ RMYNYPZQ[TZ RNPQOVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3416: " 57J[OJMLMNNQNXLZ RNYO` RNMNNOQO[ RNKNLONPQPXQXSYTZ RPYO` RSZQY RTZR[PY RNYLZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3417: " 43J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV` RSNVPV[ RTMUNWOXO RWPXO RWPWXV`",
3418: " 32KYNOOOPPPXOY RONQPQYSZ RMPPMRORXSYTY ROYQZR[UX RTNUPWOVMRO RUNVO",
3419: " 42LWXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKRP RPPPTQ` RQOPOQNQ[ RRPRTQ` RNPPP",
3420: " 37LXSIRLQNPONP RSISOVOVP RNPQP RSPVP RQPQXPY RROQORMRXTZ RSPSXTYUY RPYRZS[VX",
3421: " 47I[KOLOMPMXLY RLNNPNXPZ RJPMMOOOXQYRZ RLYMYOZP[RZUX RVMTOUPUYW[ZX RVPWOVNUOVPVXXZ RVMXOWPWXXYYY",
3422: " 47J[OKMMMONRNXMY RNNNOOROXRZ RNLNMOOPRPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ",
3423: " 72F_KKIMIOJRJXIYK[ RJNJOKRKXJYKZLYKX RJLJMKOLRLXMYK[ RONQORQRXQY RQNROSQSXVZ RLPONQMSNTPTXVYWZ RQYRYTZU[XZ RTPZM[O\\R\\T[XZYXZ RYNZO[Q RXNZP[S[UZXXZ",
3424: " 44KZOOPOQPQXPXNYM[M]N_P`S`V_V^U^U_ RPNRPRXUZ RNPQMSOSXUYVZ RXYT[SZQYOYM[ RUNVPXOWMSO RVNWO",
3425: " 47J[OKMMMONRNXMY RNNNOOROYQZ RNLNMOOPRPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\T^Q` RUNVOWR RTNVQWTWWV[T^",
3426: " 43KYNPSMUNVPVRUTQV RSNUO RRNTOUQURTTSU RSUUWVYV]U_S`Q`O_N]N[OYQXWV RRVTWUY RQVTXUZU]T_S`",
3427: " 61JZRMPNMPMRNU RNPNROT RPNOOORPT RPNROTOVNWMWKVJTJ RQNSN RRMTNVN RNUVRWUWWVYR[ RUSVUVXUY RTSUUUXTZ RTZRYOYL[ RSZQZ RR[PZNZL[",
3428: " 78J[VFUGSGQFOFNHNMMOLP RTHRHPGOG RVFUHTIRIPHOHNI RNKPP RNPNTO` ROONOONO[ RPPPTO` RLPNP RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\V^",
3429: " 62J[PIOLNNMOKP RPIPXQYO[ ROONOONOXNYOZPYOX RKPNPNXMYO[ RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\V^",
3501: " 60G]LINGPFRFSGZW[X]X RQGRHYXZZ[YYX RNGPGQHXXYZZ[[[]X RLMMLOKPKQL RPLPM RMLOLPN RG[IYKXNXPY RJYNYOZ RG[JZMZN[PY RRJLX RNSVS",
3502: "110F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RRIQJPLPU RQKQS RRIRRQTPU RRIXFZG[I[KYMUO RXGZIZK RVGXHYIYLWN RWNZP[R[X RYPZRZW RWNXOYQYX RJ[MYPXTXWY RLZOYTYVZ RJ[NZSZU[WYYX[X RUOUX RURYR RUUYU",
3503: " 69E]NGLHJJILHOHSIVJXMZP[S[VZXYZW[U RJKINISKWNYQZTZWY RNGLIKKJNJRKUNXQYTYWXYW[U RPJPV RQJQT RRIRSQUPV RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RWIWX",
3504: " 72G^IFWFYGZIZX RKGWGYIYW RIFJGLHWHXIXX ROKNLMNMOKOJPJRKQMQMV RNMNT RKPNP ROKOSNUMV RI[LYOXSXVY RKZNYSYUZ RI[MZRZT[VYXXZX RRHRX RRMTNVNXM RRSTRVRXS",
3505: " 94G]IHKFMFOGQF RLGNG RIHKGMHOHQF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RQMRJSHTGVFXF[G RTHVGXGZH RRJSIUHWHYI[G RQURRSPTOVOXP RTPVPWQ RRRSQUQVRXP RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RQMQX",
3506: " 91F]JHLFOFQGSF RMGPG RJHLGNHQHSF RPKOLNNNOLOKPKRLQNQNV ROMOT RLPOP RPKPSOUNV RSJSYRZQZMXKXIYG[ RTJTX RTPXP RPZOZMYJY RUIUOXO RXQUQUWTYP[N[LZJZG[ RSJUIXFZG\\G]F RWGYH[H RVHXIZI\\H]F RXIXW",
3507: " 87E^NGLHJJILHOHRIUJWLYNZQ[U[XZZX[V[SZQYPWOUO RJKINISJV RNGLIKKJNJSKVLXNZ RYXZWZSYQ RU[WZXYYWYSXQWPUO RPJPW RQJQU RRIRTQVPW RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RYHUOU[ RUSYS RUVYV",
3508: "112F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZOYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOWNYLZM[P[TZXX[ RXMYNZPZUYX RWNXNYPYUX[ RUOUY RURYR RUUYU",
3509: " 67I\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZSZOXMXKYI[ RWKWW RRZQZOYLY RYHXJXVWXUZS[P[NZKZI[",
3510: " 65H\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZ RWKWW RYHXJXVWXUZR[O[LZJXJVKULUMVLWKW RJVMV",
3511: "115F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOXLYM[N RWMYN[N R[NYQWSUU RWSYTZX[Z\\Z RYVZZ RWSXTYZZ[[[\\Z RUOUY",
3512: " 85G]IHKFNFPGRF RLGOG RIHKGMHPHRF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RSIRJQLQU RRKRS RSISRRTQU RSIUGWFYF[G RXGYGZH RUGWGYI[G RWGWX",
3513: "107D`LJKKJMJOHOGPGRHQJQJU RKLKS RHPKP RLJLRKTJU RE[GYIXKXMYNYOX RHYKYMZ RE[GZJZL[M[NZOX RLJPFTJTWUYVY RPGSJSXRYSZTYSX RPPSP RNHOHRKROOO ROQRQRXQYS[VYWX RTJXF\\J\\W]Y^Y RXG[J[X]Z RXP[P RVHWHZKZOWO RWQZQZY\\[^Y ROHOX RWHWX",
3514: " 84E^GIIGKFMFOGQJVUXXYY RMGOIPKVWYZ RIGKGMHOKTVVYWZY[ RVHXIZI\\H]F RWGYH[H RVHXFZG\\G]F RKOIOHPHRIQKQ RIPKP RG[IYKXNXPY RJYMYOZ RG[JZMZN[PY RKGKX RYIY[ RRLSMUNWNYM RKTMSQSST",
3515: " 79E_NFLGJIIKHNHRIUJWLYNZQ[S[VZXYZW[U\\R\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS",
3516: " 70H^KFLGMIMOKOJPJRKQMQMYJ[MZMbO` RMHNJN` RKPNP RKFMGNHOJO` ROKRIVFZJZX RVGYJYX RTHUHXKXY RRXUXXY RSYUYWZ RRZTZV[XYZX RRIR_ RRMTNVNXM RRSTRVRXS",
3517: " 99E_NFLGJIIKHNHRIUJWLYNZP[T[VZXYZW[U\\R\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS RP[QZRZT[X`Za[a RT\\V_XaYa RRZS[VaXbZb[a",
3518: "108F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXRXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRIUGWFYGZIZLYNXOTQRR RWGXGYIYMXN RUGWHXJXMWOTQ RTQVRWSZX[Y\\Y RWTYX[Z RTQVSXYZ[\\Y",
3519: " 94G^UITHRGOF RVHTG RWGSFOFLGKHJJKLLMONWNYOZPZRYU RKKLLOMXMZN[O[QZS RKHKJLKOLYL[M\\O\\QYUU[ RIOJPLQUQVRVSUU RJQLRTRUS RIOIPJRLSSSUTUU RI[LYPXSXVY RKZNYRYUZ RI[MZRZU[ RWGUISL RRNPQ ROSMUKVJVJUKV",
3520: " 71E]JJILHOHSIVKYMZP[S[VZXYZW[U RISJVLXNYQZTZWY RJJIMIQJTLWNXQYTYWXYW[U RHIIGKFOFUGYG[F RPGTHXH RHIIHKGNGTIWIYH[F RSIRJPKPV RQKQT RRJRSQUPV RWIWX",
3521: " 89F^HHJFLFOGQF RKGNG RHHJGMHOHQF RKJJLIOISJVKXMZP[S[VZXYZ[\\Y RJSKVNYQZTZ RKJJNJQKTLVNXQYUYXX RUIQJPLPV RQKQT RRJRSQUPV RUIWHYFZG\\HZIZW[Y\\Y RYIZHYGXHYIYX[Z RWHXIXX RUIUY RUNXN RURXR",
3522: " 72G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXXZX RRJUIWHYFZG\\HZIZX RYIZHYGXHYIYW RWHXIXX RRJRX RRMTNVNXM RRSTRVRXS",
3523: " 95E`HFIGJIJOHOGPGRHQJQJXHY RJHKJKX RHPKP RLYNYPZ RHFJGKHLJLXOXQY RHYKYNZO[QYTXVYW[YY\\X ROHRFTHTXWXYY RRGSHSX ROHQHRIRXQY RWYXZ RWHZF\\H\\X RZG[H[X RWHYHZIZXYY ROHOX RWHWX RONRN RORRR RWNZN RWRZR",
3524: " 65G]HIJGLFNFOGWYXZZZ RMGNHVYWZ RJGLGMHUZV[X[ZZ\\X RWFYG[G\\F RWGXHZH RVHWIYI[H\\F RH[IYKXMXNY RJYLYMZ RH[IZKZM[ RWFSO RQRM[ RLPPP RSPXP",
3525: " 86G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXX RRJUIWHYFZG\\HZIZ^Y`WbUaQ`L` RYIZHYGXHYIYY RWHXIXXZ[ RXaV`S` RY`V_P_L` RRJRX RRMTNVNXM RRSTRVRXS",
3526: " 57H\\XGWIROOSMWJ[ RVKNV RZFWJUNRRMXLZ RJHLFOGUGZF RKGOHSHWG RJHNIRIVHXG RLZNYRXVXZY RMZQYUYYZ RJ[OZUZX[ZY RMPQP RTPXP",
3601: " 53J[PRNTMVMXNZP[RYUX RMVNXOYQZ RNTNVOXQYRY RNPPPSOUNVMXOWPWXXYYY RONNOQO RTOWOVNVYWZ RMOOMPNROUPUYW[YY RMORT",
3602: " 44I[LHMJMXKY RNJMHNGNXQZ RLHOFOXQYRZ RKYMYOZP[RZUYWY ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY",
3603: " 35JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMUNWOXO RSNTOVO RPORNTPVPXO",
3604: " 41IZRMPNMOMXKY RNONXQZ RRMOOOXQYRZ RKYMYOZP[RZUYWY RMHPFQIWOWY RPINHOGPIVOVX RMHUPUY",
3605: " 32JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMWQURPU RSNVQ RPORNUR",
3606: " 41JWNHNXLYMYOZP[ ROHOYQZ RPHPXRYSYQZP[ RNHQGSFTGVHWH RRGSHUH RPHQGSIUIWH RKMNM RPMTM",
3607: " 56I[MOMXKYLYNZO[PZRYUX RNPNYPZ ROOOXQYRY RMOOORNTMUNWOYOWPW\\V_TaRbQaO`M` RSNVPV\\ RSaQ`P` RRNSOUPUZV]V_ RTaS`Q_O_M`",
3608: " 47I[LHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPROTNUMVNXOYOWPWYU[T] RTNVOVYU[ RROSOUPUYT]T`UbVbT`",
3609: " 35MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[UY RRPSORNQORPRYSZ RRMSNUOSPSXTYUY",
3610: " 39MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[T] RRPSORNQORPRYS[ RRMSNUOSPSYT]T`RbPbPaRb",
3611: " 50IZLHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPRNTMVPSROU RSNUP RRNTQ RSRTSVXWYXY RSSTTUYVZ RRSSTTYV[XY",
3612: " 22MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[",
3613: " 67E_GOHOIPIXGYHYJZK[ RINJOJYLZ RGOIMKOKXMYK[ RKPNOPNQMSOSXUYS[ RPNRORYTZ RNOOOQPQXPYRZS[ RSPVOXNYMZN\\O]O[P[X\\Y]Y RXNZOZY[Z RVOWOYPYY[[]Y",
3614: " 45I[KOLOMPMXKYLYNZO[ RMNNONYPZ RKOMMOOOXQYO[ ROPROTNUMVNXOYOWPWXXYYY RTNVOVYWZ RROSOUPUYW[YY",
3615: " 40I[MOMXKY RNPNXQZ ROOOXQYRZ RKYMYOZP[RZUYWY RMOOORNTMUNWOYOWPWY RSNVPVX RRNSOUPUY",
3616: " 54I[LMMOMXKYMYMb RMNNONaO`N^ RNYOYQZ RLMNNOOOXQYRZ ROZP[RZUYWY ROZO^P`Mb ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY",
3617: " 44I[MOMXKY RNPNYPZ ROOOXQYRY RKYLYNZO[PZRYUX RMOOORNTMUNWOYOWPWb RSNVPVaU`V^ RRNSOUPU^T`Wb",
3618: " 38JXLOMONPNXLYMYOZP[ RMNOOOYQZ RLONMPOPXRYSYQZP[ RPOTMUNWOXO RSNTOVO RRNTPVPXO",
3619: " 59JZMOMSOTUTWUWY RNONS RVUVY RPNOOOSQT RSTUUUYTZ RMOPNRMTNVNWM RQNSN RPNROTOVN RWYTZR[PZNZL[ RSZQZ RTZRYOYL[ RWMVOTROWL[",
3620: " 28MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[ RNMQM RSMVM",
3621: " 47I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPWXXYYY RTNVOVYWZ RUMSOUPUYW[YY",
3622: " 36I[LMMOMXP[RYUXWX RMNNONXQZ RLMNNOOOWPXRY RUMVNXOYOWPWX RTNVOVW RUMSOUPUX",
3623: " 57E_HMIOIXL[NYQX RINJOJXMZ RHMJNKOKWLXNY RQMOOQPQXT[VYYX[X RPNRORXUZ RQMRNTOSPSWTXVY RYMZN\\O]O[P[X RXNZOZW RYMWOYPYX",
3624: " 59H[KOLONPOQSYTZV[XY RMNOOTYVZ RKOMMONPOTWUXWYXY RRSUMVNXNYM RUNVOWO RTOVPXOYM RQUN[MZKZJ[ RNZMYLY ROYMXKYJ[ RMTPT RSTVT",
3625: " 60I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPW\\V_TaRbQaO`M` RTNVOV\\ RSaQ`P` RUMSOUPUZV]V_ RTaS`Q_O_M`",
3626: " 38I[XML[ RLONPQPTOXM RMNOOSO RLONMPNTNXM RL[PYSXVXXY RQYUYWZ RL[PZTZV[XY RNTVT",
3700: " 42H\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJYLYNZO[QZVYXY",
3701: " 27H\\OHPIQKQXOY RQIPHQGRIRYTZ ROHRFSHSXUYVY ROYPYRZS[TZVY",
3702: " 48H\\LHNHPGQFSGVHXH RPHRG RLHNIPIRHSG RVHVP RWIWO RXHXPQPNQLSKVK[ RK[OYSXVXZY RNZQYVYYZ RK[PZUZX[ZY",
3703: " 57H\\LHMHOGPFRGVHXH ROHQG RLHNIPIRG RVHVO RWIWN RXHXOVOSPQQ RQPSQVRXRXY RWSWX RVRVY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3704: " 41H\\UFKPKUTU RVUZU[V[TZU RLPLT RMNMU RTGTXRY RUJVHUGUYWZ RUFWHVJVXXYYY RRYSYUZV[WZYY",
3705: " 53H\\LFLO RLFXF RMGVG RLHUHWGXF RVLUMSNOOLO RSNTNVOVY RUMWNWX RVLWMYNZNXOXY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3706: " 59H\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHRGTFUGWHXH RSGUH RRGTIVIXH RNPOPSOUNVM RSOTOVPVY RUNWPWX RVMWNYOZOXPXY RJYLYNZO[QZVYXY",
3707: " 38H\\KHMFPGUGZF RLGOHTHWG RKHOIRIVHZF RZFYHWKSOQRPUPXQ[ RRQQTQWRZ RUMSPRSRVSYQ[",
3708: " 71H\\LILO RMJMN RNINO RLINISHUGVF RSHTHVIVO RUGWHWN RVFWGYHZHXIXO RLONOVRXR RXOVONRLR RLRLXJY RMSMXPZ RNRNXPYQZ RVRVY RWSWX RXRXY RJYLYNZO[QZVYXY",
3709: " 60H\\LHLQJR RMIMROS RNHNQPRQR RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJRKRMSNTOSQRUQVQ RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY",
3710: " 11LXRXPZR[TZRX RRYQZSZRY",
3711: " 14LXR^R\\PZRXSZS\\R^P_ RRYQZR[RY",
3712: " 22LXRMPORPTORM RRNQOSORN RRXPZR[TZRX RRYQZSZRY",
3713: " 25LXRMPORPTORM RRNQOSORN RR^R\\PZRXSZS\\R^P_ RRYQZR[RY",
3714: " 30LXRFQGOHQIRT RRISHRGQHRIRT RRFSGUHSIRT RRXPZR[TZRX RRYQZSZRY",
3715: " 51I[LJMHNGQFSFVGWHXJXLWNUPSQ RMJNH RVHWIWMVN RLJNKNIOGQF RSFUGVIVMUOSQ RRQRTSQQQRT RRXPZR[TZRX RRYQZSZRY",
3716: " 14LXTFRGQIQKRMTKRIRG RRJRLSKRJ",
3717: " 14LXRLRJPHRFSHSJRLPM RRGQHRIRG",
3718: " 62E_YNZO[O\\N RXOYP[P RXPYQZQ[P\\N RYNST RRUL[HVNP ROOSKOFJLPRTXVZX[Z[[Z\\X RLZIV RRKOG RKLPQTWVYXZ[Z RMZIU RRLNG RKKQQUWVXXY[Y\\X",
3719: " 60H\\PBP_ RTBT_ RTFVGWIWKYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RXJWH RLLMNOOUQWRXT RMYLW RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWMVMXNZP[",
3720: " 8G^[BIbJb R[B\\BJb",
3721: " 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\ RSDRFQIPOPUQ[R^S`",
3722: " 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\ RQDRFSITOTUS[R^Q`",
3723: " 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO",
3724: " 8F_JQ[Q[R RJQJR[R",
3725: " 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R",
3726: " 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V",
3727: " 11NWSFRGRM RSGRM RSFTGRM",
3728: " 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM",
3729: " 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF",
3801: " 52E_NHLIJKIMHPHSIUKV RJLIOISJU RNHLJKLJOJRKVKXJZH[ RVHXHXYVY RYHYY RZGZZ RHFKGQHVHZG\\F RJPXP RH[KZQYVYZZ\\[",
3802: " 65E_LGLZ RMGMZ RPFNGNZP[ RHJJHLGPFUFXGZIZKYM RXHYIYKXM RUFWGXIXKWL RQUOTNRNPONPMSLVLYM[O\\Q\\T[WYYWZT[P[LZJYHW RZO[Q[UZW RVLYNZQZUYXWZ",
3803: " 60E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS",
3804: " 46E_KGKZ RLGLZ RNFMGMZN[ RHKIIKGNFSFVGXHZJ[L\\O\\R[UZWXYVZS[N[KZIXHV RZK[N[SZV RVGXIYKZNZSYVXXVZ",
3805: " 86E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\[ R[HZMZT[Y RZKYJ RZMXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS RJPKONOUQXQZP RPPRQURWRYQ RMORRUSWSYRZP RZMYLXLWMXNYM",
3806: " 69E_JHJZ RMGKHKY ROFMGLILYNY RHJJHLGOFSFVGXHYI\\F R\\F[HZLZO[S\\U RZIYK RVGXIYLZO RLPMOOOTPWPYO RQPTQVQXP RNOTRVRXQYOYLXKWKVLWMXL RH[JZNYSYYZ\\[",
3807: " 90E_\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[T[VZXYYXZV[Y\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RXXYVYR RVZWYXVXQ RKSLRMSLTKTJS RJPKNMMOMRNUPWQ RKOMNONROTP RJPLOOOUQYQZP",
3808: " 50E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\F RLPMNOLRKVKYL[N\\Q\\T[UYV RZN[P[SZU RVKXLYMZOZSYVYXZZ\\[ RH[LZPZU[",
3809: " 23E_QIQY RRJRX RSISY RHFLHPITIXH\\F RH[KZOYUYYZ\\[",
3810: " 42E_TIVIVXUZS[ RWIWXVY RXHXY RHFLHPITIXH\\F RIOHQHUIXKZN[S[VZXYZW\\T RIUJXKY RHSJUKXLZN[",
3811: " 70E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\F RLPMNOLRKUKXLYMYOXPSRQSPTPUQVRUQT RWLXMXOWP RUKWMWOVPSR RSRVRYSZUZWYX RWSYUYW RSRVSXUYXZZ[[\\[ RH[LZPZU[",
3812: " 45E_JGJZ RKHKY RNHLHLYNY R\\KZNYPXSXUYW[X RZOYRYUZW R\\K[MZQZT[X\\[ RHFJGNHSHYG\\F RH[JZNYSYYZ\\[",
3813: " 68E_QIQY RRJRX RSISY RNYLWJVIUHRHMIJKHMGPFTFWGYH[J\\M\\R[UZVXWVY RJUIRIMJJ RLWKUJRJLKIMG RZJ[M[RZU RWGYIZLZRYUXW RHFLHPITIXH\\F RH[KZOYUYYZ\\[",
3814: " 48E_JHJZH[ RLHKIKZ ROFMGLILZ RHJJHLGOFSFVGXHZJ[L\\O\\S[UYV RZK[N[RZU RVGXIYKZNZRYVYXZZ[[\\[ RH[LZPZU[",
3815: " 54E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG",
3816: " 51E_JIJZ RMHKJKY RQFOGMILKLYNY RHKJINGQFTFWGYH[J\\M\\O[RYTVURUOTMRLO RZJ[L[PZR RWGYIZLZPYSVU RH[JZNYSYYZ\\[",
3817: " 74E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG RJSKUNVTW[W\\X\\Z[[[Z\\Y RPWRW RKUNWQXSXTW",
3818: " 69E_JIJZH[ RKIKZ RLHLZ RHKJILHNGQFUFYG[I\\K\\N[PZQ RYHZI[K[NZP RUFWGYIZKZOYQ RXRUSRSPRPPROUOXPZR\\U\\W[XZX RXQYR[V[WZT RTOVPXRYTZX[Z\\[ RH[LZPZU[",
3819: " 94E_TFZG\\F[H[JYHWGTFPFMGJJIMIOJRLTOURUTTUSVQVP R[GZH[J RJPKRLSOTRTTS RKIJKJNKPMRPSRSTRVPWOXO RLQMQNPPNRMUMWNYPZRZUYXWZ RPMRLULXMZO[R[UZW RIWJYIZ RNPNOOMPLRKUKXL[O\\R\\T[WYYWZT[P[MZKYIWIYH[JZP[",
3820: " 66E_QHMHKIJJILHOHSIVJXKYMZP[S[VZXYZW[U\\R\\N[KYIWH RUHTITKULVKUJ RISJVLXNYQZTZWY RJJINIQJTLWNXQYTYWXYW[T\\R RHFKI RKHLG RIGJGKFMGQHWHZG\\F",
3821: " 51E_LHJJILHOHRIUJWLYNZQ[U[XZZY RKJJLIOISJV RKILJLKKMJPJSKVLXNZ RVHXHXXWZU[ RYHYXXY RZGZY\\[ RHFKGQHVHZG\\F",
3822: " 31E_HFR[ RIGJHQWRY RJGKHRWSX R\\FR[ RWNUS RYLUQTTTV RHFJGOHUHZG\\F",
3823: " 67E_LHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\R\\O[LZJXH RJLIOIRJUKW RJJKKKLJOJRKVLXNZ RYWZU[R[OZL RVZXXYVZRZOYLYKZJ RQIQ[ RRJRZ RSIS[ RHFLHPITIXH\\F",
3824: " 41E_HFXYYZ RIGKHZZ RLH\\[ R\\FSP RQRJZ RPSMULW RQRMTLUKWKY RHFLHPITIXH\\F RH[JZNYSYYZ\\[",
3825: " 47E_XHXZ RYHYY RZGZY RKHIJHMHPISKUMVPWSWVVXU RLUOVUV RHPIRKTNUTUVV RHFLHPITIXH\\F RHWJYLZP[T[XZ\\X",
3826: " 73E_HFIGKHNHSFVFYGZIZKYM RXGYIYKXM RVFWGXIXL RXNTOROPNPLRKTKXL RTKVLWMVNTO RYM[O\\R\\T[WYYWZT[P[MZKYIWHTHRIOJNLMNMPNPPOQNPOO RXMZO[Q[UZW RXNYOZQZUYXWZ",
3901: " 42J[PQMTMXP[TY RNTNXPZ ROROWRZ RRSMNNMONNO RONSNUMWOWXXY RUNVOVXUYVZWYVX RSNUPUXTYV[XY",
3902: " 31IZNHLFMJMXP[UYWX RNHNXPZ RNHPFOJOWRZ ROOTMWPWX RTNVPVX RRNUQUY",
3903: " 23KWNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMVOTPRN RSNUO",
3904: " 32JZRMMPMXP[RZUYWY RNPNXPZ ROOOWRZ RPIPFQIWPWY RPIVPVX RPIMIPJUPUY",
3905: " 25KXNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMWQPU RSNVQ RRNUR",
3906: " 32KWOIOXNYP[ RPIPXOYPZQYPX RQHQXRYP[ ROIUFWHUISG RTGVH RLMOM RQMUM",
3907: " 41J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW]V_U`SaQaO`MaObQa RTNVPV]U_ RPaNa RRNUQU^T`Sa",
3908: " 42I[NHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROORNTMWPWYT]T`UbVbT` RTNVPVYU[ RRNUQUZT]",
3909: " 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQXPYR[ RRPSORNQORPRXQYRZSYRX RRMTOSPSXTYR[",
3910: " 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQYT] RRPSORNQORPRYS[ RRMTOSPSZT]T`RbPaPbRb",
3911: " 51IZNHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROPRNTMVPSROU RSNUP RRNTQ RRSSTTYV[XY RSSTUUYVZ RSRTSVXWYXY",
3912: " 21MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[",
3913: " 66E_GOHOIPIXHYJ[ RINJOJXIYJZKYJX RGOIMKOKXLYJ[ RKONNPMSOSXTYR[ RPNRORXQYRZSYRX RNNQPQXPYR[ RSOVNXM[O[X\\YZ[ RXNZOZXYYZZ[YZX RVNYPYXXYZ[",
3914: " 44I[KOLOMPMXLYN[ RMNNONXMYNZOYNX RKOMMOOOXPYN[ ROORNTMWOWXXYV[ RTNVOVXUYVZWYVX RRNUPUXTYV[",
3915: " 28JZMPMXP[UYWX RNPNXPZ ROOOWRZ RMPOOTMWPWX RTNVPVX RRNUQUY",
3916: " 47IZLMMOMXKYMYM_LbN` RNON` RLMNNOOOXQYRZ RNYOYQZ ROZP[UYWX ROZO_PbN` ROORNTMWPWX RTNVPVX RRNUQUY",
3917: " 31J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW_XbV` RTNVPV` RRNUQU_TbV`",
3918: " 31KXMONOOPOXNYP[ RONPOPXOYPZQYPX RMOOMQOQXRYP[ RQOUMWOUPSN RTNVO",
3919: " 41JZMPMSOUURWTWX RNPNSOT ROOOSPT RUSVTVX RTSUTUY RMPSMVNTOQN RRNUN RWXQ[MYOXSZ ROYQZ",
3920: " 27MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ RNMQM RSMVM",
3921: " 40I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPWXXYYY RVPWOVNUOVPVYWZ RVMTOUPUYW[YY",
3922: " 36I[LMMOMXQ[SYWW RMNNONXQZ RLMNNOOOWRYSY RVMXOWPWW RVPWOVNUOVPVW RVMTOUPUX",
3923: " 59E_HMIOIXM[OYQX RINJOJXMZ RHMJNKOKWNYOY RRMPOQPQXU[WY[W RRPSORNQORPRXUZ RRMTOSPSWVYWY RZM\\O[P[W RZP[OZNYOZPZW RZMXOYPYX",
3924: " 39I[LONPUZV[XY RMNOOUYWZ RLONMONVXXY RXMVMVOXOXMVOSS RQUNYL[N[NYLYL[ RNTQT RSTVT",
3925: " 49I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPW]V_U`SaQaO`MaObQa RVPWOVNUOVPV^U_ RPaNa RVMTOUPU^T`Sa",
3926: " 43L[RNOPOORNTMWOWSRU RTNVOVS RRNUPUSTT RRUWWW]V_U`SaQaO`MaObQa RVWV^U_ RPaNa RTVUWU^T`Sa"
};
const SYMB = {
"\\frac": { glyph: 0, arity: 2, flags: {} },
"\\binom": { glyph: 0, arity: 2, flags: {} },
"\\sqrt": {
glyph: 2267,
arity: 1,
flags: { opt: true, xfl: true, yfl: true }
},
"^": { glyph: 0, arity: 1, flags: {} },
_: { glyph: 0, arity: 1, flags: {} },
"(": { glyph: 2221, arity: 0, flags: { yfl: true } },
")": { glyph: 2222, arity: 0, flags: { yfl: true } },
"[": { glyph: 2223, arity: 0, flags: { yfl: true } },
"]": { glyph: 2224, arity: 0, flags: { yfl: true } },
"\\langle": { glyph: 2227, arity: 0, flags: { yfl: true } },
"\\rangle": { glyph: 2228, arity: 0, flags: { yfl: true } },
"|": { glyph: 2229, arity: 0, flags: { yfl: true } },
"\\|": { glyph: 2230, arity: 0, flags: { yfl: true } },
"\\{": { glyph: 2225, arity: 0, flags: { yfl: true } },
"\\}": { glyph: 2226, arity: 0, flags: { yfl: true } },
"\\#": { glyph: 2275, arity: 0, flags: {} },
"\\$": { glyph: 2274, arity: 0, flags: {} },
"\\&": { glyph: 2273, arity: 0, flags: {} },
"\\%": { glyph: 2271, arity: 0, flags: {} },
"\\begin": { glyph: 0, arity: 1, flags: {} },
"\\end": { glyph: 0, arity: 1, flags: {} },
"\\left": { glyph: 0, arity: 1, flags: {} },
"\\right": { glyph: 0, arity: 1, flags: {} },
"\\middle": { glyph: 0, arity: 1, flags: {} },
"\\cdot": { glyph: 2236, arity: 0, flags: {} },
"\\pm": { glyph: 2233, arity: 0, flags: {} },
"\\mp": { glyph: 2234, arity: 0, flags: {} },
"\\times": { glyph: 2235, arity: 0, flags: {} },
"\\div": { glyph: 2237, arity: 0, flags: {} },
"\\leqq": { glyph: 2243, arity: 0, flags: {} },
"\\geqq": { glyph: 2244, arity: 0, flags: {} },
"\\leq": { glyph: 2243, arity: 0, flags: {} },
"\\geq": { glyph: 2244, arity: 0, flags: {} },
"\\propto": { glyph: 2245, arity: 0, flags: {} },
"\\sim": { glyph: 2246, arity: 0, flags: {} },
"\\equiv": { glyph: 2240, arity: 0, flags: {} },
"\\dagger": { glyph: 2277, arity: 0, flags: {} },
"\\ddagger": { glyph: 2278, arity: 0, flags: {} },
"\\ell": { glyph: 662, arity: 0, flags: {} },
"\\vec": {
glyph: 2261,
arity: 1,
flags: { hat: true, xfl: true, yfl: true }
},
"\\overrightarrow": {
glyph: 2261,
arity: 1,
flags: { hat: true, xfl: true, yfl: true }
},
"\\overleftarrow": {
glyph: 2263,
arity: 1,
flags: { hat: true, xfl: true, yfl: true }
},
"\\bar": { glyph: 2231, arity: 1, flags: { hat: true, xfl: true } },
"\\overline": { glyph: 2231, arity: 1, flags: { hat: true, xfl: true } },
"\\widehat": {
glyph: 2247,
arity: 1,
flags: { hat: true, xfl: true, yfl: true }
},
"\\hat": { glyph: 2247, arity: 1, flags: { hat: true } },
"\\acute": { glyph: 2248, arity: 1, flags: { hat: true } },
"\\grave": { glyph: 2249, arity: 1, flags: { hat: true } },
"\\breve": { glyph: 2250, arity: 1, flags: { hat: true } },
"\\tilde": { glyph: 2246, arity: 1, flags: { hat: true } },
"\\underline": { glyph: 2231, arity: 1, flags: { mat: true, xfl: true } },
"\\not": { glyph: 2220, arity: 1, flags: {} },
"\\neq": { glyph: 2239, arity: 1, flags: {} },
"\\ne": { glyph: 2239, arity: 1, flags: {} },
"\\exists": { glyph: 2279, arity: 0, flags: {} },
"\\in": { glyph: 2260, arity: 0, flags: {} },
"\\subset": { glyph: 2256, arity: 0, flags: {} },
"\\supset": { glyph: 2258, arity: 0, flags: {} },
"\\cup": { glyph: 2257, arity: 0, flags: {} },
"\\cap": { glyph: 2259, arity: 0, flags: {} },
"\\infty": { glyph: 2270, arity: 0, flags: {} },
"\\partial": { glyph: 2265, arity: 0, flags: {} },
"\\nabla": { glyph: 2266, arity: 0, flags: {} },
"\\aleph": { glyph: 2077, arity: 0, flags: {} },
"\\wp": { glyph: 2190, arity: 0, flags: {} },
"\\therefore": { glyph: 740, arity: 0, flags: {} },
"\\mid": { glyph: 2229, arity: 0, flags: {} },
"\\sum": { glyph: 2402, arity: 0, flags: { big: true } },
"\\prod": { glyph: 2401, arity: 0, flags: { big: true } },
"\\bigoplus": { glyph: 2284, arity: 0, flags: { big: true } },
"\\bigodot": { glyph: 2281, arity: 0, flags: { big: true } },
"\\int": { glyph: 2412, arity: 0, flags: { yfl: true } },
"\\oint": { glyph: 2269, arity: 0, flags: { yfl: true } },
"\\oplus": { glyph: 1284, arity: 0, flags: {} },
"\\odot": { glyph: 1281, arity: 0, flags: {} },
"\\perp": { glyph: 738, arity: 0, flags: {} },
"\\angle": { glyph: 739, arity: 0, flags: {} },
"\\triangle": { glyph: 842, arity: 0, flags: {} },
"\\Box": { glyph: 841, arity: 0, flags: {} },
"\\rightarrow": { glyph: 2261, arity: 0, flags: {} },
"\\to": { glyph: 2261, arity: 0, flags: {} },
"\\leftarrow": { glyph: 2263, arity: 0, flags: {} },
"\\gets": { glyph: 2263, arity: 0, flags: {} },
"\\circ": { glyph: 902, arity: 0, flags: {} },
"\\bigcirc": { glyph: 904, arity: 0, flags: {} },
"\\bullet": { glyph: 828, arity: 0, flags: {} },
"\\star": { glyph: 856, arity: 0, flags: {} },
"\\diamond": { glyph: 743, arity: 0, flags: {} },
"\\ast": { glyph: 728, arity: 0, flags: {} },
"\\log": { glyph: 0, arity: 0, flags: { txt: true } },
"\\ln": { glyph: 0, arity: 0, flags: { txt: true } },
"\\exp": { glyph: 0, arity: 0, flags: { txt: true } },
"\\mod": { glyph: 0, arity: 0, flags: { txt: true } },
"\\lim": { glyph: 0, arity: 0, flags: { txt: true, big: true } },
"\\sin": { glyph: 0, arity: 0, flags: { txt: true } },
"\\cos": { glyph: 0, arity: 0, flags: { txt: true } },
"\\tan": { glyph: 0, arity: 0, flags: { txt: true } },
"\\csc": { glyph: 0, arity: 0, flags: { txt: true } },
"\\sec": { glyph: 0, arity: 0, flags: { txt: true } },
"\\cot": { glyph: 0, arity: 0, flags: { txt: true } },
"\\sinh": { glyph: 0, arity: 0, flags: { txt: true } },
"\\cosh": { glyph: 0, arity: 0, flags: { txt: true } },
"\\tanh": { glyph: 0, arity: 0, flags: { txt: true } },
"\\csch": { glyph: 0, arity: 0, flags: { txt: true } },
"\\sech": { glyph: 0, arity: 0, flags: { txt: true } },
"\\coth": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arcsin": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arccos": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arctan": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arccsc": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arcsec": { glyph: 0, arity: 0, flags: { txt: true } },
"\\arccot": { glyph: 0, arity: 0, flags: { txt: true } },
"\\text": { glyph: 0, arity: 1, flags: {} },
"\\mathnormal": { glyph: 0, arity: 1, flags: {} },
"\\mathrm": { glyph: 0, arity: 1, flags: {} },
"\\mathit": { glyph: 0, arity: 1, flags: {} },
"\\mathbf": { glyph: 0, arity: 1, flags: {} },
"\\mathsf": { glyph: 0, arity: 1, flags: {} },
"\\mathtt": { glyph: 0, arity: 1, flags: {} },
"\\mathfrak": { glyph: 0, arity: 1, flags: {} },
"\\mathcal": { glyph: 0, arity: 1, flags: {} },
"\\mathbb": { glyph: 0, arity: 1, flags: {} },
"\\mathscr": { glyph: 0, arity: 1, flags: {} },
"\\rm": { glyph: 0, arity: 1, flags: {} },
"\\it": { glyph: 0, arity: 1, flags: {} },
"\\bf": { glyph: 0, arity: 1, flags: {} },
"\\sf": { glyph: 0, arity: 1, flags: {} },
"\\tt": { glyph: 0, arity: 1, flags: {} },
"\\frak": { glyph: 0, arity: 1, flags: {} },
"\\cal": { glyph: 0, arity: 1, flags: {} },
"\\bb": { glyph: 0, arity: 1, flags: {} },
"\\scr": { glyph: 0, arity: 1, flags: {} },
"\\quad": { glyph: 0, arity: 0, flags: {} },
"\\,": { glyph: 0, arity: 0, flags: {} },
"\\.": { glyph: 0, arity: 0, flags: {} },
"\\;": { glyph: 0, arity: 0, flags: {} },
"\\!": { glyph: 0, arity: 0, flags: {} },
"\\alpha": { glyph: 2127, flags: {} },
"\\beta": { glyph: 2128, flags: {} },
"\\gamma": { glyph: 2129, flags: {} },
"\\delta": { glyph: 2130, flags: {} },
"\\varepsilon": { glyph: 2131, flags: {} },
"\\zeta": { glyph: 2132, flags: {} },
"\\eta": { glyph: 2133, flags: {} },
"\\vartheta": { glyph: 2134, flags: {} },
"\\iota": { glyph: 2135, flags: {} },
"\\kappa": { glyph: 2136, flags: {} },
"\\lambda": { glyph: 2137, flags: {} },
"\\mu": { glyph: 2138, flags: {} },
"\\nu": { glyph: 2139, flags: {} },
"\\xi": { glyph: 2140, flags: {} },
"\\omicron": { glyph: 2141, flags: {} },
"\\pi": { glyph: 2142, flags: {} },
"\\rho": { glyph: 2143, flags: {} },
"\\sigma": { glyph: 2144, flags: {} },
"\\tau": { glyph: 2145, flags: {} },
"\\upsilon": { glyph: 2146, flags: {} },
"\\varphi": { glyph: 2147, flags: {} },
"\\chi": { glyph: 2148, flags: {} },
"\\psi": { glyph: 2149, flags: {} },
"\\omega": { glyph: 2150, flags: {} },
"\\epsilon": { glyph: 2184, flags: {} },
"\\theta": { glyph: 2185, flags: {} },
"\\phi": { glyph: 2186, flags: {} },
"\\varsigma": { glyph: 2187, flags: {} },
"\\Alpha": { glyph: 2027, flags: {} },
"\\Beta": { glyph: 2028, flags: {} },
"\\Gamma": { glyph: 2029, flags: {} },
"\\Delta": { glyph: 2030, flags: {} },
"\\Epsilon": { glyph: 2031, flags: {} },
"\\Zeta": { glyph: 2032, flags: {} },
"\\Eta": { glyph: 2033, flags: {} },
"\\Theta": { glyph: 2034, flags: {} },
"\\Iota": { glyph: 2035, flags: {} },
"\\Kappa": { glyph: 2036, flags: {} },
"\\Lambda": { glyph: 2037, flags: {} },
"\\Mu": { glyph: 2038, flags: {} },
"\\Nu": { glyph: 2039, flags: {} },
"\\Xi": { glyph: 2040, flags: {} },
"\\Omicron": { glyph: 2041, flags: {} },
"\\Pi": { glyph: 2042, flags: {} },
"\\Rho": { glyph: 2043, flags: {} },
"\\Sigma": { glyph: 2044, flags: {} },
"\\Tau": { glyph: 2045, flags: {} },
"\\Upsilon": { glyph: 2046, flags: {} },
"\\Phi": { glyph: 2047, flags: {} },
"\\Chi": { glyph: 2048, flags: {} },
"\\Psi": { glyph: 2049, flags: {} },
"\\Omega": { glyph: 2050, flags: {} }
};
function asciiMap(x, mode = "math") {
const c = x.charCodeAt(0);
if (65 <= c && c <= 90) {
const d = c - 65;
if (mode == "text" || mode == "rm") {
return d + 2001;
} else if (mode == "tt") {
return d + 501;
} else if (mode == "bf" || mode == "bb") {
return d + 3001;
} else if (mode == "sf") {
return d + 2501;
} else if (mode == "frak") {
return d + 3301;
} else if (mode == "scr" || mode == "cal") {
return d + 2551;
} else {
return d + 2051;
}
}
if (97 <= c && c <= 122) {
const d = c - 97;
if (mode == "text" || mode == "rm") {
return d + 2101;
} else if (mode == "tt") {
return d + 601;
} else if (mode == "bf" || mode == "bb") {
return d + 3101;
} else if (mode == "sf") {
return d + 2601;
} else if (mode == "frak") {
return d + 3401;
} else if (mode == "scr" || mode == "cal") {
return d + 2651;
} else {
return d + 2151;
}
}
if (48 <= c && c <= 57) {
const d = c - 48;
if (mode == "it") {
return d + 2750;
} else if (mode == "bf") {
return d + 3200;
} else if (mode == "tt") {
return d + 700;
} else {
return d + 2200;
}
}
return {
".": 2210,
",": 2211,
":": 2212,
";": 2213,
"!": 2214,
"?": 2215,
"'": 2216,
'"': 2217,
"*": 2219,
"/": 2220,
"-": 2231,
"+": 2232,
"=": 2238,
"<": 2241,
">": 2242,
"~": 2246,
"@": 2273,
"\\": 804
}[x];
}
const CONFIG = {
SUB_SUP_SCALE: 0.5,
SQRT_MAG_SCALE: 0.5,
FRAC_SCALE: 0.85,
LINE_SPACING: 0.5,
FRAC_SPACING: 0.4
};
function tokenize(str) {
str = str.replace(/\n/g, " ");
let i = 0;
const tokens = [];
let curr = "";
while (i < str.length) {
if (str[i] == " ") {
if (curr.length) {
tokens.push(curr);
curr = "";
}
} else if (str[i] == "\\") {
if (curr.length == 1 && curr[0] == "\\") {
curr += str[i];
tokens.push(curr);
curr = "";
} else {
if (curr.length) {
tokens.push(curr);
}
curr = str[i];
}
} else if (/[A-Za-z0-9\.]/.test(str[i])) {
curr += str[i];
} else {
if (curr.length && curr != "\\") {
tokens.push(curr);
curr = "";
}
curr += str[i];
tokens.push(curr);
curr = "";
}
i++;
}
if (curr.length)
tokens.push(curr);
return tokens;
}
function parseAtom(x) {
return {
type: SYMB[x] ? "symb" : "char",
mode: "math",
text: x,
chld: [],
bbox: null
};
}
function parse(tokens) {
let i = 0;
let expr = {
type: "node",
text: "",
mode: "math",
chld: [],
bbox: null
};
function takeOpt() {
if (tokens[i] != "[") {
return null;
}
let lvl = 0;
let j = i;
while (j < tokens.length) {
if (tokens[j] == "[") {
lvl++;
} else if (tokens[j] == "]") {
lvl--;
if (!lvl) {
break;
}
}
j++;
}
const ret = parse(tokens.slice(i + 1, j));
i = j;
return ret;
}
function takeN(n) {
let j = i;
let j0 = j;
let lvl = 0;
let cnt = 0;
const ret = [];
while (j < tokens.length) {
if (tokens[j] == "{") {
if (!lvl) {
j0 = j;
}
lvl++;
} else if (tokens[j] == "}") {
lvl--;
if (!lvl) {
ret.push(parse(tokens.slice(j0 + 1, j)));
cnt++;
if (cnt == n) {
break;
}
}
} else {
if (lvl == 0) {
ret.push(parseAtom(tokens[j]));
cnt++;
if (cnt == n) {
break;
}
}
}
j++;
}
i = j;
return ret;
}
for (i = 0; i < tokens.length; i++) {
const s = SYMB[tokens[i]];
const e = {
type: "",
text: tokens[i],
mode: "math",
chld: [],
bbox: null
};
if (s) {
if (s.arity) {
i++;
e.type = "func";
let opt = null;
if (s.flags.opt) {
opt = takeOpt();
if (opt)
i++;
}
const chld = takeN(s.arity);
e.chld = chld;
if (opt) {
e.chld.push(opt);
}
} else {
e.type = "symb";
}
} else {
if (tokens[i] == "{") {
e.type = "node";
e.text = "";
e.chld = takeN(1);
} else {
e.type = "char";
}
}
expr.chld.push(e);
}
if (expr.chld.length == 1) {
expr = expr.chld[0];
}
return expr;
}
function environments(exprs) {
let i = 0;
while (i < exprs.length) {
if (exprs[i].text == "\\begin") {
let j;
for (j = i; j < exprs.length; j++) {
if (exprs[j].text == "\\end") {
break;
}
}
const es = exprs.splice(i + 1, j - (i + 1));
environments(es);
exprs[i].text = exprs[i].chld[0].text;
exprs[i].chld = es;
exprs.splice(i + 1, 1);
}
i++;
}
}
function transform(expr, sclx, scly, x, y, notFirst) {
if (scly == null) {
scly = sclx;
}
if (!expr.bbox)
return;
if (notFirst) {
expr.bbox.x *= sclx;
expr.bbox.y *= scly;
}
expr.bbox.w *= sclx;
expr.bbox.h *= scly;
for (let i = 0; i < expr.chld.length; i++) {
transform(expr.chld[i], sclx, scly, 0, 0, true);
}
expr.bbox.x += x;
expr.bbox.y += y;
}
function computeBbox(exprs) {
let xmin = Infinity;
let xmax = -Infinity;
let ymin = Infinity;
let ymax = -Infinity;
for (let i = 0; i < exprs.length; i++) {
if (!exprs[i].bbox) {
continue;
}
xmin = Math.min(xmin, exprs[i].bbox.x);
ymin = Math.min(ymin, exprs[i].bbox.y);
xmax = Math.max(xmax, exprs[i].bbox.x + exprs[i].bbox.w);
ymax = Math.max(ymax, exprs[i].bbox.y + exprs[i].bbox.h);
}
return { x: xmin, y: ymin, w: xmax - xmin, h: ymax - ymin };
}
function group(exprs) {
if (!exprs.length) {
return null;
}
const bbox = computeBbox(exprs);
for (let i = 0; i < exprs.length; i++) {
if (!exprs[i].bbox) {
continue;
}
exprs[i].bbox.x -= bbox.x;
exprs[i].bbox.y -= bbox.y;
}
const expr = {
type: "node",
text: "",
mode: "math",
chld: exprs,
bbox
};
return expr;
}
function align(exprs, alignment = "center") {
for (let i = 0; i < exprs.length; i++) {
if (exprs[i].text == "^" || exprs[i].text == "'") {
let h = 0;
let j = i;
while (j > 0 && (exprs[j].text == "^" || exprs[j].text == "_" || exprs[j].text == "'")) {
j--;
}
h = exprs[j].bbox.y;
if (exprs[i].text == "'") {
exprs[i].bbox.y = h;
} else {
transform(exprs[i], CONFIG.SUB_SUP_SCALE, null, 0, 0);
if (SYMB[exprs[j].text] && SYMB[exprs[j].text].flags.big) {
exprs[i].bbox.y = h - exprs[i].bbox.h;
} else if (exprs[j].text == "\\int") {
exprs[i].bbox.y = h;
} else {
exprs[i].bbox.y = h - exprs[i].bbox.h / 2;
}
}
} else if (exprs[i].text == "_") {
let h = 1;
let j = i;
while (j > 0 && (exprs[j].text == "^" || exprs[j].text == "_" || exprs[j].text == "'")) {
j--;
}
h = exprs[j].bbox.y + exprs[j].bbox.h;
transform(exprs[i], CONFIG.SUB_SUP_SCALE, null, 0, 0);
if (SYMB[exprs[j].text] && SYMB[exprs[j].text].flags.big) {
exprs[i].bbox.y = h;
} else if (exprs[j].text == "\\int") {
exprs[i].bbox.y = h - exprs[i].bbox.h;
} else {
exprs[i].bbox.y = h - exprs[i].bbox.h / 2;
}
}
}
function searchHigh(i, l, r, dir, lvl0) {
let j = i;
let lvl = lvl0;
let ymin = Infinity;
let ymax = -Infinity;
while (dir > 0 ? j < exprs.length : j >= 0) {
if (exprs[j].text == l) {
lvl++;
} else if (exprs[j].text == r) {
lvl--;
if (lvl == 0) {
break;
}
} else if (exprs[j].text == "^" || exprs[j].text == "_")
;
else if (exprs[j].bbox) {
ymin = Math.min(ymin, exprs[j].bbox.y);
ymax = Math.max(ymax, exprs[j].bbox.y + exprs[j].bbox.h);
}
j += dir;
}
return [ymin, ymax];
}
for (let i = 0; i < exprs.length; i++) {
if (exprs[i].text == "\\left") {
const [ymin, ymax] = searchHigh(i, "\\left", "\\right", 1, 0);
if (ymin != Infinity && ymax != -Infinity) {
exprs[i].bbox.y = ymin;
transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);
}
} else if (exprs[i].text == "\\right") {
const [ymin, ymax] = searchHigh(i, "\\right", "\\left", -1, 0);
if (ymin != Infinity && ymax != -Infinity) {
exprs[i].bbox.y = ymin;
transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);
}
} else if (exprs[i].text == "\\middle") {
const [lmin, lmax] = searchHigh(i, "\\right", "\\left", -1, 1);
const [rmin, rmax] = searchHigh(i, "\\left", "\\right", 1, 1);
const ymin = Math.min(lmin, rmin);
const ymax = Math.max(lmax, rmax);
if (ymin != Infinity && ymax != -Infinity) {
exprs[i].bbox.y = ymin;
transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);
}
}
}
if (!exprs.some((x) => x.text == "&" || x.text == "\\\\")) {
return;
}
const rows = [];
let row = [];
let cell = [];
for (let i = 0; i < exprs.length; i++) {
if (exprs[i].text == "&") {
row.push(cell);
cell = [];
} else if (exprs[i].text == "\\\\") {
if (cell.length) {
row.push(cell);
cell = [];
}
rows.push(row);
row = [];
} else {
cell.push(exprs[i]);
}
}
if (cell.length) {
row.push(cell);
}
if (row.length) {
rows.push(row);
}
const colws = [];
const erows = [];
for (let i = 0; i < rows.length; i++) {
const erow = [];
for (let j = 0; j < rows[i].length; j++) {
const e = group(rows[i][j]);
if (e) {
colws[j] = colws[j] || 0;
colws[j] = Math.max(e.bbox.w + 1, colws[j]);
}
erow[j] = e;
}
erows.push(erow);
}
const ybds = [];
for (let i = 0; i < erows.length; i++) {
let ymin = Infinity;
let ymax = -Infinity;
for (let j = 0; j < erows[i].length; j++) {
if (!erows[i][j]) {
continue;
}
ymin = Math.min(ymin, erows[i][j].bbox.y);
ymax = Math.max(ymax, erows[i][j].bbox.y + erows[i][j].bbox.h);
}
ybds.push([ymin, ymax]);
}
for (let i = 0; i < ybds.length; i++) {
if (ybds[i][0] == Infinity || ybds[i][1] == Infinity) {
ybds[i][0] = i == 0 ? 0 : ybds[i - 1][1];
ybds[i][1] = ybds[i][0] + 2;
}
}
for (let i = 1; i < erows.length; i++) {
const shft = ybds[i - 1][1] - ybds[i][0] + CONFIG.LINE_SPACING;
for (let j = 0; j < erows[i].length; j++) {
if (erows[i][j]) {
erows[i][j].bbox.y += shft;
}
}
ybds[i][0] += shft;
ybds[i][1] += shft;
}
exprs.splice(0, exprs.length);
for (let i = 0; i < erows.length; i++) {
let dx = 0;
for (let j = 0; j < erows[i].length; j++) {
const e = erows[i][j];
if (!e) {
dx += colws[j];
continue;
}
e.bbox.x += dx;
dx += colws[j] - e.bbox.w;
if (alignment == "center") {
e.bbox.x += (colws[j] - e.bbox.w) / 2;
} else if (alignment == "left")
;
else if (alignment == "right") {
e.bbox.x += colws[j] - e.bbox.w;
} else if (alignment == "equation") {
if (j != erows[i].length - 1) {
e.bbox.x += colws[j] - e.bbox.w;
}
}
exprs.push(e);
}
}
}
function plan(expr, mode = "math") {
var _a, _b, _c;
const tmd = (_a = {
"\\text": "text",
"\\mathnormal": "math",
"\\mathrm": "rm",
"\\mathit": "it",
"\\mathbf": "bf",
"\\mathsf": "sf",
"\\mathtt": "tt",
"\\mathfrak": "frak",
"\\mathcal": "cal",
"\\mathbb": "bb",
"\\mathscr": "scr",
"\\rm": "rm",
"\\it": "it",
"\\bf": "bf",
"\\sf": "tt",
"\\tt": "tt",
"\\frak": "frak",
"\\cal": "cal",
"\\bb": "bb",
"\\scr": "scr"
}[expr.text]) != null ? _a : mode;
if (!expr.chld.length) {
if (SYMB[expr.text]) {
if (SYMB[expr.text].flags.big) {
if (expr.text == "\\lim") {
expr.bbox = { x: 0, y: 0, w: 3.5, h: 2 };
} else {
expr.bbox = { x: 0, y: -0.5, w: 3, h: 3 };
}
} else if (SYMB[expr.text].flags.txt) {
let w = 0;
for (let i = 1; i < expr.text.length; i++) {
w += HERSHEY(asciiMap(expr.text[i], "text")).w;
}
w /= 16;
expr.bbox = { x: 0, y: 0, w, h: 2 };
} else if (SYMB[expr.text].glyph) {
let w = HERSHEY(SYMB[expr.text].glyph).w;
w /= 16;
if (expr.text == "\\int" || expr.text == "\\oint") {
expr.bbox = { x: 0, y: -1.5, w, h: 5 };
} else {
expr.bbox = { x: 0, y: 0, w, h: 2 };
}
} else {
expr.bbox = { x: 0, y: 0, w: 1, h: 2 };
}
} else {
let w = 0;
for (let i = 0; i < expr.text.length; i++) {
if (!HERSHEY(asciiMap(expr.text[i], tmd))) {
continue;
}
if (tmd == "tt") {
w += 16;
} else {
w += HERSHEY(asciiMap(expr.text[i], tmd)).w;
}
}
w /= 16;
expr.bbox = { x: 0, y: 0, w, h: 2 };
}
expr.mode = tmd;
return;
}
if (expr.text == "\\frac") {
const a = expr.chld[0];
const b = expr.chld[1];
const s = CONFIG.FRAC_SCALE;
plan(a);
plan(b);
a.bbox.x = 0;
a.bbox.y = 0;
b.bbox.x = 0;
b.bbox.y = 0;
const mw = Math.max(a.bbox.w, b.bbox.w) * s;
transform(a, s, null, (mw - a.bbox.w * s) / 2, 0);
transform(
b,
s,
null,
(mw - b.bbox.w * s) / 2,
a.bbox.h + CONFIG.FRAC_SPACING
);
expr.bbox = {
x: 0,
y: -a.bbox.h + 1 - CONFIG.FRAC_SPACING / 2,
w: mw,
h: a.bbox.h + b.bbox.h + CONFIG.FRAC_SPACING
};
} else if (expr.text == "\\binom") {
const a = expr.chld[0];
const b = expr.chld[1];
plan(a);
plan(b);
a.bbox.x = 0;
a.bbox.y = 0;
b.bbox.x = 0;
b.bbox.y = 0;
const mw = Math.max(a.bbox.w, b.bbox.w);
transform(a, 1, null, (mw - a.bbox.w) / 2 + 1, 0);
transform(b, 1, null, (mw - b.bbox.w) / 2 + 1, a.bbox.h);
expr.bbox = { x: 0, y: -a.bbox.h + 1, w: mw + 2, h: a.bbox.h + b.bbox.h };
} else if (expr.text == "\\sqrt") {
const e = expr.chld[0];
plan(e);
const f = expr.chld[1];
let pl = 0;
if (f) {
plan(f);
pl = Math.max(f.bbox.w * CONFIG.SQRT_MAG_SCALE - 0.5, 0);
transform(f, CONFIG.SQRT_MAG_SCALE, null, 0, 0.5);
}
transform(e, 1, null, 1 + pl, 0.5);
expr.bbox = {
x: 0,
y: 2 - e.bbox.h - 0.5,
w: e.bbox.w + 1 + pl,
h: e.bbox.h + 0.5
};
} else if (SYMB[expr.text] && SYMB[expr.text].flags.hat) {
const e = expr.chld[0];
plan(e);
const y0 = e.bbox.y - 0.5;
e.bbox.y = 0.5;
expr.bbox = { x: 0, y: y0, w: e.bbox.w, h: e.bbox.h + 0.5 };
} else if (SYMB[expr.text] && SYMB[expr.text].flags.mat) {
const e = expr.chld[0];
plan(e);
expr.bbox = { x: 0, y: 0, w: e.bbox.w, h: e.bbox.h + 0.5 };
} else {
let dx = 0;
let dy = 0;
let mh = 1;
for (let i = 0; i < expr.chld.length; i++) {
const c = expr.chld[i];
const spac = (_b = {
"\\quad": 2,
"\\,": 2 * 3 / 18,
"\\:": 2 * 4 / 18,
"\\;": 2 * 5 / 18,
"\\!": 2 * -3 / 18
}[c.text]) != null ? _b : null;
if (c.text == "\\\\") {
dy += mh;
dx = 0;
mh = 1;
continue;
} else if (c.text == "&") {
continue;
} else if (spac != null) {
dx += spac;
continue;
} else {
plan(c, tmd);
transform(c, 1, null, dx, dy);
if (c.text == "^" || c.text == "_" || c.text == "'") {
let j = i;
while (j > 0 && (expr.chld[j].text == "^" || expr.chld[j].text == "_" || expr.chld[j].text == "'")) {
j--;
}
const wasBig = SYMB[expr.chld[j].text] && SYMB[expr.chld[j].text].flags.big;
if (c.text == "'") {
let k = j + 1;
let nth = 0;
while (k < i) {
if (expr.chld[k].text == "'") {
nth++;
}
k++;
}
c.bbox.x = expr.chld[j].bbox.x + expr.chld[j].bbox.w + c.bbox.w * nth;
dx = Math.max(dx, c.bbox.x + c.bbox.w);
} else {
if (wasBig) {
const ex = expr.chld[j].bbox.x + (expr.chld[j].bbox.w - c.bbox.w * CONFIG.SUB_SUP_SCALE) / 2;
c.bbox.x = ex;
dx = Math.max(
dx,
expr.chld[j].bbox.x + expr.chld[j].bbox.w + (c.bbox.w * CONFIG.SUB_SUP_SCALE - expr.chld[j].bbox.w) / 2
);
} else {
c.bbox.x = expr.chld[j].bbox.x + expr.chld[j].bbox.w;
dx = Math.max(dx, c.bbox.x + c.bbox.w * CONFIG.SUB_SUP_SCALE);
}
}
} else {
dx += c.bbox.w;
}
if (mode == "text") {
dx += 1;
}
mh = Math.max(c.bbox.y + c.bbox.h - dy, mh);
}
}
dy += mh;
const m2s = {
bmatrix: ["[", "]"],
pmatrix: ["(", ")"],
Bmatrix: ["\\{", "\\}"],
cases: ["\\{"]
};
const alt = (_c = {
bmatrix: "center",
pmatrix: "center",
Bmatrix: "center",
cases: "left",
matrix: "center",
aligned: "equation"
}[expr.text]) != null ? _c : "left";
const hasLp = !!m2s[expr.text];
const hasRp = !!m2s[expr.text] && m2s[expr.text].length > 1;
align(expr.chld, alt);
const bb = computeBbox(expr.chld);
if (expr.text == "\\text") {
bb.x -= 1;
bb.w += 2;
}
for (let i = 0; i < expr.chld.length; i++) {
transform(expr.chld[i], 1, null, -bb.x + (hasLp ? 1.5 : 0), -bb.y);
}
expr.bbox = {
x: 0,
y: 0,
w: bb.w + 1.5 * Number(hasLp) + 1.5 * Number(hasRp),
h: bb.h
};
if (hasLp) {
expr.chld.unshift({
type: "symb",
text: m2s[expr.text][0],
mode: expr.mode,
chld: [],
bbox: { x: 0, y: 0, w: 1, h: bb.h }
});
}
if (hasRp) {
expr.chld.push({
type: "symb",
text: m2s[expr.text][1],
mode: expr.mode,
chld: [],
bbox: { x: bb.w + 2, y: 0, w: 1, h: bb.h }
});
}
if (hasLp || hasRp || expr.text == "matrix") {
expr.type = "node";
expr.text = "";
expr.bbox.y -= (expr.bbox.h - 2) / 2;
}
}
}
function flatten(expr) {
function flat(expr2, dx, dy) {
const ff = [];
if (expr2.bbox) {
dx += expr2.bbox.x;
dy += expr2.bbox.y;
if (expr2.text == "\\frac") {
const h = expr2.chld[1].bbox.y - (expr2.chld[0].bbox.y + expr2.chld[0].bbox.h);
const e = {
type: "symb",
mode: expr2.mode,
text: "\\bar",
bbox: {
x: dx,
y: dy + (expr2.chld[1].bbox.y - h / 2) - h / 2,
w: expr2.bbox.w,
h
},
chld: []
};
ff.push(e);
} else if (expr2.text == "\\sqrt") {
const h = expr2.chld[0].bbox.y;
const xx = Math.max(
0,
expr2.chld[0].bbox.x - expr2.chld[0].bbox.h / 2
);
const e = {
type: "symb",
mode: expr2.mode,
text: "\\sqrt",
bbox: {
x: dx + xx,
y: dy + h / 2,
w: expr2.chld[0].bbox.x - xx,
h: expr2.bbox.h - h / 2
},
chld: []
};
ff.push(e);
ff.push({
type: "symb",
text: "\\bar",
mode: expr2.mode,
bbox: {
x: dx + expr2.chld[0].bbox.x,
y: dy,
w: expr2.bbox.w - expr2.chld[0].bbox.x,
h
},
chld: []
});
} else if (expr2.text == "\\binom") {
const w = Math.min(expr2.chld[0].bbox.x, expr2.chld[1].bbox.x);
const e = {
type: "symb",
mode: expr2.mode,
text: "(",
bbox: {
x: dx,
y: dy,
w,
h: expr2.bbox.h
},
chld: []
};
ff.push(e);
ff.push({
type: "symb",
text: ")",
mode: expr2.mode,
bbox: {
x: dx + expr2.bbox.w - w,
y: dy,
w,
h: expr2.bbox.h
},
chld: []
});
} else if (SYMB[expr2.text] && SYMB[expr2.text].flags.hat) {
const h = expr2.chld[0].bbox.y;
const e = {
type: "symb",
mode: expr2.mode,
text: expr2.text,
bbox: {
x: dx,
y: dy,
w: expr2.bbox.w,
h
},
chld: []
};
ff.push(e);
} else if (SYMB[expr2.text] && SYMB[expr2.text].flags.mat) {
const h = expr2.chld[0].bbox.h;
const e = {
type: "symb",
text: expr2.text,
mode: expr2.mode,
bbox: {
x: dx,
y: dy + h,
w: expr2.bbox.w,
h: expr2.bbox.h - h
},
chld: []
};
ff.push(e);
} else if (expr2.type != "node" && expr2.text != "^" && expr2.text != "_") {
const e = {
type: expr2.type == "func" ? "symb" : expr2.type,
text: expr2.text,
mode: expr2.mode,
bbox: {
x: dx,
y: dy,
w: expr2.bbox.w,
h: expr2.bbox.h
},
chld: []
};
ff.push(e);
}
}
for (let i = 0; i < expr2.chld.length; i++) {
const f2 = flat(expr2.chld[i], dx, dy);
ff.push(...f2);
}
return ff;
}
const f = flat(expr, -expr.bbox.x, -expr.bbox.y);
expr.type = "node";
expr.text = "";
expr.chld = f;
}
function render(expr) {
const o = [];
for (let i = 0; i < expr.chld.length; i++) {
const e = expr.chld[i];
let s = e.bbox.h / 2;
let isSmallHat = false;
if (SYMB[e.text] && SYMB[e.text].flags.hat && !SYMB[e.text].flags.xfl && !SYMB[e.text].flags.yfl) {
s *= 4;
isSmallHat = true;
}
if (SYMB[e.text] && SYMB[e.text].glyph) {
const d = HERSHEY(SYMB[e.text].glyph);
for (let j = 0; j < d.polylines.length; j++) {
const l = [];
for (let k = 0; k < d.polylines[j].length; k++) {
let x = d.polylines[j][k][0];
let y = d.polylines[j][k][1];
if (SYMB[e.text].flags.xfl) {
x = (x - d.xmin) / Math.max(d.xmax - d.xmin, 1) * e.bbox.w;
x += e.bbox.x;
} else if (d.w / 16 * s > e.bbox.w) {
x = x / Math.max(d.w, 1) * e.bbox.w;
x += e.bbox.x;
} else {
x = x / 16 * s;
const p = (e.bbox.w - d.w / 16 * s) / 2;
x += e.bbox.x + p;
}
if (SYMB[e.text].flags.yfl) {
y = (y - d.ymin) / Math.max(d.ymax - d.ymin, 1) * e.bbox.h;
y += e.bbox.y;
} else {
y = y / 16 * s;
if (isSmallHat) {
const p = (d.ymax + d.ymin) / 2;
y -= p / 16 * s;
}
y += e.bbox.y + e.bbox.h / 2;
}
l.push([x, y]);
}
o.push(l);
}
} else if (SYMB[e.text] && SYMB[e.text].flags.txt || e.type == "char") {
let x0 = e.bbox.x;
const isVerb = !!(SYMB[e.text] && SYMB[e.text].flags.txt);
for (let n = Number(isVerb); n < e.text.length; n++) {
const d = HERSHEY(asciiMap(e.text[n], isVerb ? "text" : e.mode));
if (!d) {
console.warn("unmapped character: " + e.text[n]);
continue;
}
for (let j = 0; j < d.polylines.length; j++) {
const l = [];
for (let k = 0; k < d.polylines[j].length; k++) {
let x = d.polylines[j][k][0];
let y = d.polylines[j][k][1];
x /= 16;
y /= 16;
x *= s;
y *= s;
if (e.mode == "tt") {
if (d.w > 16) {
x *= 16 / d.w;
} else {
x += (16 - d.w) / 2 / 16;
}
}
x += x0;
y += e.bbox.y + e.bbox.h / 2;
l.push([x, y]);
}
o.push(l);
}
if (e.mode == "tt") {
x0 += s;
} else {
x0 += d.w / 16 * s;
}
}
}
}
return o;
}
function nf(x) {
return Math.round(x * 100) / 100;
}
class LaTexUtils {
constructor(latex) {
this._latex = latex;
this._tokens = tokenize(latex);
this._tree = parse(this._tokens);
environments(this._tree.chld);
plan(this._tree);
flatten(this._tree);
this._polylines = render(this._tree);
}
resolveScale(opt) {
var _a, _b, _c, _d;
if (opt == void 0) {
return [16, 16, 16, 16];
}
let sclx = (_a = opt.SCALE_X) != null ? _a : 16;
let scly = (_b = opt.SCALE_Y) != null ? _b : 16;
if (opt.MIN_CHAR_H != void 0) {
let mh = 0;
for (let i = 0; i < this._tree.chld.length; i++) {
const c = this._tree.chld[i];
if (c.type == "char" || SYMB[c.text] && (SYMB[c.text].flags.txt || !Object.keys(SYMB[c.text].flags).length)) {
mh = Math.min(c.bbox.h, mh);
}
}
const s = Math.max(1, opt.MIN_CHAR_H / mh);
sclx *= s;
scly *= s;
}
if (opt.MAX_W != void 0) {
const s0 = sclx;
sclx = Math.min(sclx, opt.MAX_W / this._tree.bbox.w);
scly *= sclx / s0;
}
if (opt.MAX_H != void 0) {
const s0 = scly;
scly = Math.min(scly, opt.MAX_H / this._tree.bbox.h);
sclx *= scly / s0;
}
const px = (_c = opt.MARGIN_X) != null ? _c : sclx;
const py = (_d = opt.MARGIN_Y) != null ? _d : scly;
return [px, py, sclx, scly];
}
polylines(opt) {
if (!opt)
opt = {};
const polylines = [];
const [px, py, sclx, scly] = this.resolveScale(opt);
for (let i = 0; i < this._polylines.length; i++) {
polylines.push([]);
for (let j = 0; j < this._polylines[i].length; j++) {
const [x, y] = this._polylines[i][j];
polylines[polylines.length - 1].push([px + x * sclx, py + y * scly]);
}
}
return polylines;
}
pathd(opt) {
if (!opt)
opt = {};
let d = "";
const [px, py, sclx, scly] = this.resolveScale(opt);
for (let i = 0; i < this._polylines.length; i++) {
for (let j = 0; j < this._polylines[i].length; j++) {
const [x, y] = this._polylines[i][j];
d += !j ? "M" : "L";
d += `${nf(px + x * sclx)} ${nf(py + y * scly)}`;
}
}
return d;
}
svg(opt) {
var _a, _b;
if (!opt)
opt = {};
const [px, py, sclx, scly] = this.resolveScale(opt);
const w = nf(this._tree.bbox.w * sclx + px * 2);
const h = nf(this._tree.bbox.h * scly + py * 2);
let o = `<svg
xmlns="http://www.w3.org/2000/svg"
width="${w}" height="${h}"
fill="none" stroke="${(_a = opt.FG_COLOR) != null ? _a : "black"}" stroke-width="${(_b = opt.STROKE_W) != null ? _b : 1}"
stroke-linecap="round" stroke-linejoin="round"
>`;
if (opt.BG_COLOR) {
o += `<rect x="${0}" y="${0}" width="${w}" height="${h}" fill="${opt.BG_COLOR}" stroke="none"></rect>`;
}
o += `<path d="`;
for (let i = 0; i < this._polylines.length; i++) {
o += "M";
for (let j = 0; j < this._polylines[i].length; j++) {
const [x, y] = this._polylines[i][j];
o += nf(px + x * sclx) + " " + nf(py + y * scly) + " ";
}
}
o += `"/>`;
o += `</svg>`;
return {
svg: `data:image/svg+xml;base64,${window.btoa(o)}`,
width: Math.ceil(w),
height: Math.ceil(h)
};
}
pdf(opt) {
var _a;
if (!opt)
opt = {};
const [px, py, sclx, scly] = this.resolveScale(opt);
const width = nf(this._tree.bbox.w * sclx + px * 2);
const height = nf(this._tree.bbox.h * scly + py * 2);
let head = `%PDF-1.1
%%\xA5\xB1\xEB
1 0 obj
<< /Type /Catalog
/Pages 2 0 R
>>endobj
2 0 obj
<< /Type /Pages
/Kids [3 0 R]
/Count 1
/MediaBox [0 0 ${width} ${height}]
>>
endobj
3 0 obj
<< /Type /Page
/Parent 2 0 R
/Resources
<< /Font
<< /F1
<< /Type /Font
/Subtype /Type1
/BaseFont /Times-Roman
>>
>>
>>
/Contents [`;
let pdf = "";
let count = 4;
for (let i = 0; i < this._polylines.length; i++) {
pdf += `${count} 0 obj
<< /Length 0 >>
stream
1 j 1 J ${(_a = opt.STROKE_W) != null ? _a : 1} w
`;
for (let j = 0; j < this._polylines[i].length; j++) {
const [x, y] = this._polylines[i][j];
pdf += `${nf(px + x * sclx)} ${nf(height - (py + y * scly))} ${j ? "l" : "m"} `;
}
pdf += "\nS\nendstream\nendobj\n";
head += `${count} 0 R `;
count++;
}
head += "]\n>>\nendobj\n";
pdf += "\ntrailer\n<< /Root 1 0 R \n /Size 0\n >>startxref\n\n%%EOF\n";
return head + pdf;
}
boxes(opt) {
if (!opt)
opt = {};
const [px, py, sclx, scly] = this.resolveScale(opt);
const bs = [];
for (let i = 0; i < this._tree.chld.length; i++) {
const { x, y, w, h } = this._tree.chld[i].bbox;
bs.push({ x: px + x * sclx, y: py + y * scly, w: w * sclx, h: h * scly });
}
return bs;
}
box(opt) {
if (!opt)
opt = {};
const [px, py, sclx, scly] = this.resolveScale(opt);
return {
x: px + this._tree.bbox.x * sclx,
y: py + this._tree.bbox.y * scly,
w: this._tree.bbox.w * sclx,
h: this._tree.bbox.h * scly
};
}
}
class LaTexParticle extends ImageParticle {
static convertLaTextToSVG(laTex) {
return new LaTexUtils(laTex).svg({
SCALE_X: 10,
SCALE_Y: 10,
MARGIN_X: 0,
MARGIN_Y: 0
});
}
async render(ctx2d, element, x, y) {
const { scale } = this.options;
const width = element.width * scale;
const height = element.height * scale;
ctx2d.drawImage(element.laTexSVG, x, y, width, height);
}
}
var ElementType = /* @__PURE__ */ ((ElementType2) => {
ElementType2["TEXT"] = "text";
ElementType2["IMAGE"] = "image";
ElementType2["TABLE"] = "table";
ElementType2["HYPERLINK"] = "hyperlink";
ElementType2["SUPERSCRIPT"] = "superscript";
ElementType2["SUBSCRIPT"] = "subscript";
ElementType2["SEPARATOR"] = "separator";
ElementType2["PAGE_BREAK"] = "pageBreak";
ElementType2["CONTROL"] = "control";
ElementType2["CHECKBOX"] = "checkbox";
ElementType2["RADIO"] = "radio";
ElementType2["LATEX"] = "latex";
ElementType2["TAB"] = "tab";
ElementType2["DATE"] = "date";
ElementType2["BLOCK"] = "block";
ElementType2["TITLE"] = "title";
ElementType2["LIST"] = "list";
return ElementType2;
})(ElementType || {});
const EDITOR_ROW_ATTR = ["rowFlex", "rowMargin"];
const EDITOR_ELEMENT_ZIP_ATTR = [
"type",
"font",
"size",
"bold",
"color",
"italic",
"highlight",
"underline",
"strikeout",
"rowFlex",
"rowMargin",
"dashArray",
"trList",
"borderType",
"width",
"height",
"url",
"colgroup",
"valueList",
"control",
"checkbox",
"radio",
"dateFormat",
"block",
"level",
"title",
"listType",
"listStyle",
"listWrap",
"groupIds",
"conceptId",
"imgDisplay",
"imgFloatPosition",
"textDecoration",
"extension",
"externalId"
];
const TABLE_TD_ZIP_ATTR = [
"conceptId",
"extension",
"externalId",
"verticalAlign",
"backgroundColor",
"borderTypes",
"slashTypes"
];
const TABLE_CONTEXT_ATTR = [
"tdId",
"trId",
"tableId"
];
const TITLE_CONTEXT_ATTR = [
"level",
"titleId",
"title"
];
const LIST_CONTEXT_ATTR = [
"listId",
"listType",
"listStyle"
];
const CONTROL_STYLE_ATTR = [
"font",
"size",
"bold",
"highlight",
"italic",
"strikeout"
];
const EDITOR_ELEMENT_CONTEXT_ATTR = [
...TABLE_CONTEXT_ATTR,
...TITLE_CONTEXT_ATTR,
...LIST_CONTEXT_ATTR
];
const TEXTLIKE_ELEMENT_TYPE = [
ElementType.TEXT,
ElementType.HYPERLINK,
ElementType.SUBSCRIPT,
ElementType.SUPERSCRIPT,
ElementType.CONTROL,
ElementType.DATE
];
[
ElementType.IMAGE,
ElementType.LATEX
];
const BLOCK_ELEMENT_TYPE = [
ElementType.BLOCK,
ElementType.PAGE_BREAK,
ElementType.SEPARATOR,
ElementType.TABLE
];
[
ElementType.TITLE,
ElementType.LIST
];
var ListType = /* @__PURE__ */ ((ListType2) => {
ListType2["UL"] = "ul";
ListType2["OL"] = "ol";
return ListType2;
})(ListType || {});
var UlStyle = /* @__PURE__ */ ((UlStyle2) => {
UlStyle2["DISC"] = "disc";
UlStyle2["CIRCLE"] = "circle";
UlStyle2["SQUARE"] = "square";
UlStyle2["CHECKBOX"] = "checkbox";
return UlStyle2;
})(UlStyle || {});
var ListStyle = /* @__PURE__ */ ((ListStyle2) => {
ListStyle2["DISC"] = "disc";
ListStyle2["CIRCLE"] = "circle";
ListStyle2["SQUARE"] = "square";
ListStyle2["DECIMAL"] = "decimal";
ListStyle2["CHECKBOX"] = "checkbox";
return ListStyle2;
})(ListStyle || {});
const ulStyleMapping = {
[UlStyle.DISC]: "\u2022",
[UlStyle.CIRCLE]: "\u25E6",
[UlStyle.SQUARE]: "\u25AB\uFE0E",
[UlStyle.CHECKBOX]: "\u2611\uFE0F"
};
({
[ListType.OL]: "ol",
[ListType.UL]: "ul"
});
({
[ListStyle.DISC]: "disc",
[ListStyle.CIRCLE]: "circle",
[ListStyle.SQUARE]: "square",
[ListStyle.DECIMAL]: "decimal",
[ListStyle.CHECKBOX]: "checkbox"
});
var TitleLevel = /* @__PURE__ */ ((TitleLevel2) => {
TitleLevel2["FIRST"] = "first";
TitleLevel2["SECOND"] = "second";
TitleLevel2["THIRD"] = "third";
TitleLevel2["FOURTH"] = "fourth";
TitleLevel2["FIFTH"] = "fifth";
TitleLevel2["SIXTH"] = "sixth";
return TitleLevel2;
})(TitleLevel || {});
const defaultTitleOption = {
defaultFirstSize: 26,
defaultSecondSize: 24,
defaultThirdSize: 22,
defaultFourthSize: 20,
defaultFifthSize: 18,
defaultSixthSize: 16
};
const titleSizeMapping = {
[TitleLevel.FIRST]: "defaultFirstSize",
[TitleLevel.SECOND]: "defaultSecondSize",
[TitleLevel.THIRD]: "defaultThirdSize",
[TitleLevel.FOURTH]: "defaultFourthSize",
[TitleLevel.FIFTH]: "defaultFifthSize",
[TitleLevel.SIXTH]: "defaultSixthSize"
};
({
[TitleLevel.FIRST]: 1,
[TitleLevel.SECOND]: 2,
[TitleLevel.THIRD]: 3,
[TitleLevel.FOURTH]: 4,
[TitleLevel.FIFTH]: 5,
[TitleLevel.SIXTH]: 6
});
({
H1: TitleLevel.FIRST,
H2: TitleLevel.SECOND,
H3: TitleLevel.THIRD,
H4: TitleLevel.FOURTH,
H5: TitleLevel.FIFTH,
H6: TitleLevel.SIXTH
});
var TableBorder = /* @__PURE__ */ ((TableBorder2) => {
TableBorder2["ALL"] = "all";
TableBorder2["EMPTY"] = "empty";
TableBorder2["EXTERNAL"] = "external";
TableBorder2["INTERNAL"] = "internal";
TableBorder2["DASH"] = "dash";
return TableBorder2;
})(TableBorder || {});
var TdBorder = /* @__PURE__ */ ((TdBorder2) => {
TdBorder2["TOP"] = "top";
TdBorder2["RIGHT"] = "right";
TdBorder2["BOTTOM"] = "bottom";
TdBorder2["LEFT"] = "left";
return TdBorder2;
})(TdBorder || {});
var TdSlash = /* @__PURE__ */ ((TdSlash2) => {
TdSlash2["FORWARD"] = "forward";
TdSlash2["BACK"] = "back";
return TdSlash2;
})(TdSlash || {});
function unzipElementList(elementList) {
const result = [];
for (let v = 0; v < elementList.length; v++) {
const valueItem = elementList[v];
const textList = splitText(valueItem.value);
for (let d = 0; d < textList.length; d++) {
result.push({ ...valueItem, value: textList[d] });
}
}
return result;
}
async function formatElementList(elementList, options) {
const {
isHandleFirstElement = true,
isForceCompensation = false,
editorOptions
} = options;
const startElement = elementList[0];
if (isForceCompensation || isHandleFirstElement && (startElement == null ? void 0 : startElement.type) !== ElementType.LIST && ((startElement == null ? void 0 : startElement.type) && startElement.type !== ElementType.TEXT || !START_LINE_BREAK_REG.test(startElement == null ? void 0 : startElement.value))) {
elementList.unshift({
value: ZERO
});
}
let i = 0;
while (i < elementList.length) {
let el = elementList[i];
if (el.type === ElementType.TITLE) {
elementList.splice(i, 1);
const valueList = el.valueList || [];
formatElementList(valueList, {
...options,
isHandleFirstElement: false,
isForceCompensation: false
});
if (valueList.length) {
const titleId = getUUID();
const titleOptions = editorOptions.title;
for (let v = 0; v < valueList.length; v++) {
const value = valueList[v];
value.title = el.title;
if (el.level) {
value.titleId = titleId;
value.level = el.level;
}
if (isTextLikeElement(value)) {
if (!value.size) {
value.size = titleOptions[titleSizeMapping[value.level]];
}
if (value.bold === void 0) {
value.bold = true;
}
}
elementList.splice(i, 0, value);
i++;
}
}
i--;
} else if (el.type === ElementType.LIST) {
elementList.splice(i, 1);
const valueList = el.valueList || [];
formatElementList(valueList, {
...options,
isHandleFirstElement: true,
isForceCompensation: false
});
if (valueList.length) {
const listId = getUUID();
for (let v = 0; v < valueList.length; v++) {
const value = valueList[v];
value.listId = listId;
value.listType = el.listType;
value.listStyle = el.listStyle;
elementList.splice(i, 0, value);
i++;
}
}
i--;
} else if (el.type === ElementType.TABLE) {
const tableId = getUUID();
el.id = tableId;
if (el.trList) {
const { defaultTrMinHeight } = editorOptions.table;
for (let t = 0; t < el.trList.length; t++) {
const tr = el.trList[t];
const trId = getUUID();
tr.id = trId;
if (!tr.minHeight || tr.minHeight < defaultTrMinHeight) {
tr.minHeight = defaultTrMinHeight;
}
if (tr.height < tr.minHeight) {
tr.height = tr.minHeight;
}
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const tdId = getUUID();
td.id = tdId;
formatElementList(td.value, {
...options,
isHandleFirstElement: true,
isForceCompensation: true
});
for (let v = 0; v < td.value.length; v++) {
const value = td.value[v];
value.tdId = tdId;
value.trId = trId;
value.tableId = tableId;
}
}
}
}
} else if (el.type === ElementType.HYPERLINK) {
elementList.splice(i, 1);
const valueList = unzipElementList(el.valueList || []);
if (valueList.length) {
const hyperlinkId = getUUID();
for (let v = 0; v < valueList.length; v++) {
const value = valueList[v];
value.type = el.type;
value.url = el.url;
value.hyperlinkId = hyperlinkId;
elementList.splice(i, 0, value);
i++;
}
}
i--;
} else if (el.type === ElementType.DATE) {
elementList.splice(i, 1);
const valueList = unzipElementList(el.valueList || []);
if (valueList.length) {
const dateId = getUUID();
for (let v = 0; v < valueList.length; v++) {
const value = valueList[v];
value.type = el.type;
value.dateFormat = el.dateFormat;
value.dateId = dateId;
elementList.splice(i, 0, value);
i++;
}
}
i--;
} else if (el.type === ElementType.CONTROL) {
if (!el.control) {
i++;
continue;
}
const { prefix, postfix, value, placeholder, code, type, valueSets } = el.control;
const {
editorOptions: {
control: controlOption,
checkbox: checkboxOption,
radio: radioOption
}
} = options;
const controlId = getUUID();
elementList.splice(i, 1);
const controlContext = pickObject(el, [
...EDITOR_ELEMENT_CONTEXT_ATTR,
...EDITOR_ROW_ATTR
]);
const controlDefaultStyle = pickObject(
el.control,
CONTROL_STYLE_ATTR
);
const thePrePostfixArg = {
...controlDefaultStyle,
color: editorOptions.control.bracketColor
};
const prefixStrList = splitText(prefix || controlOption.prefix);
for (let p = 0; p < prefixStrList.length; p++) {
const value2 = prefixStrList[p];
elementList.splice(i, 0, {
...controlContext,
...thePrePostfixArg,
controlId,
value: value2,
type: el.type,
control: el.control,
controlComponent: ControlComponent.PREFIX
});
i++;
}
if (value && value.length || type === ControlType.CHECKBOX || type === ControlType.RADIO || type === ControlType.SELECT && code && (!value || !value.length)) {
let valueList = value || [];
if (type === ControlType.CHECKBOX) {
const codeList = code ? code.split(",") : [];
if (Array.isArray(valueSets) && valueSets.length) {
const valueStyleList = valueList.reduce(
(pre, cur) => pre.concat(
cur.value.split("").map((v) => ({ ...cur, value: v }))
),
[]
);
let valueStyleIndex = 0;
for (let v = 0; v < valueSets.length; v++) {
const valueSet = valueSets[v];
elementList.splice(i, 0, {
...controlContext,
...controlDefaultStyle,
controlId,
value: "",
type: el.type,
control: el.control,
controlComponent: ControlComponent.CHECKBOX,
checkbox: {
code: valueSet.code,
value: codeList.includes(valueSet.code)
}
});
i++;
const valueStrList = splitText(valueSet.value);
for (let e = 0; e < valueStrList.length; e++) {
const value2 = valueStrList[e];
const isLastLetter = e === valueStrList.length - 1;
elementList.splice(i, 0, {
...controlContext,
...controlDefaultStyle,
...valueStyleList[valueStyleIndex],
controlId,
value: value2 === "\n" ? ZERO : value2,
letterSpacing: isLastLetter ? checkboxOption.gap : 0,
control: el.control,
controlComponent: ControlComponent.VALUE
});
valueStyleIndex++;
i++;
}
}
}
} else if (type === ControlType.RADIO) {
if (Array.isArray(valueSets) && valueSets.length) {
const valueStyleList = valueList.reduce(
(pre, cur) => pre.concat(
cur.value.split("").map((v) => ({ ...cur, value: v }))
),
[]
);
let valueStyleIndex = 0;
for (let v = 0; v < valueSets.length; v++) {
const valueSet = valueSets[v];
elementList.splice(i, 0, {
...controlContext,
...controlDefaultStyle,
controlId,
value: "",
type: el.type,
control: el.control,
controlComponent: ControlComponent.RADIO,
radio: {
code: valueSet.code,
value: code === valueSet.code
}
});
i++;
const valueStrList = splitText(valueSet.value);
for (let e = 0; e < valueStrList.length; e++) {
const value2 = valueStrList[e];
const isLastLetter = e === valueStrList.length - 1;
elementList.splice(i, 0, {
...controlContext,
...controlDefaultStyle,
...valueStyleList[valueStyleIndex],
controlId,
value: value2 === "\n" ? ZERO : value2,
letterSpacing: isLastLetter ? radioOption.gap : 0,
control: el.control,
controlComponent: ControlComponent.VALUE
});
valueStyleIndex++;
i++;
}
}
}
} else {
if (!value || !value.length) {
if (Array.isArray(valueSets) && valueSets.length) {
const valueSet = valueSets.find((v) => v.code === code);
if (valueSet) {
valueList = [
{
value: valueSet.value
}
];
}
}
}
formatElementList(valueList, {
...options,
isHandleFirstElement: false,
isForceCompensation: false
});
for (let v = 0; v < valueList.length; v++) {
const element = valueList[v];
const value2 = element.value;
elementList.splice(i, 0, {
...controlContext,
...controlDefaultStyle,
...element,
controlId,
value: value2 === "\n" ? ZERO : value2,
type: element.type || ElementType.TEXT,
control: el.control,
controlComponent: ControlComponent.VALUE
});
i++;
}
}
} else if (placeholder) {
const thePlaceholderArgs = {
...controlDefaultStyle,
color: editorOptions.control.placeholderColor
};
const placeholderStrList = splitText(placeholder);
for (let p = 0; p < placeholderStrList.length; p++) {
const value2 = placeholderStrList[p];
elementList.splice(i, 0, {
...controlContext,
...thePlaceholderArgs,
controlId,
value: value2 === "\n" ? ZERO : value2,
type: el.type,
control: el.control,
controlComponent: ControlComponent.PLACEHOLDER
});
i++;
}
}
const postfixStrList = splitText(postfix || controlOption.postfix);
for (let p = 0; p < postfixStrList.length; p++) {
const value2 = postfixStrList[p];
elementList.splice(i, 0, {
...controlContext,
...thePrePostfixArg,
controlId,
value: value2,
type: el.type,
control: el.control,
controlComponent: ControlComponent.POSTFIX
});
i++;
}
i--;
} else if ((!el.type || TEXTLIKE_ELEMENT_TYPE.includes(el.type)) && el.value.length > 1) {
elementList.splice(i, 1);
const valueList = splitText(el.value);
for (let v = 0; v < valueList.length; v++) {
elementList.splice(i + v, 0, { ...el, value: valueList[v] });
}
el = elementList[i];
}
if (el.value === "\n" || el.value == "\r\n") {
el.value = ZERO;
}
if (el.type === ElementType.IMAGE || el.type === ElementType.BLOCK) {
el.id = getUUID();
}
if (el.type === ElementType.LATEX) {
const { svg, width, height } = LaTexParticle.convertLaTextToSVG(el.value);
el.width = el.width || width;
el.height = el.height || height;
el.laTexSVG = svg;
el.id = getUUID();
await svgString2Image(el.laTexSVG, width, height, "png", (pngData) => {
el.laTexSVG = pngData;
});
}
i++;
}
}
function isSameElementExceptValue(source, target) {
const sourceKeys = Object.keys(source);
const targetKeys = Object.keys(target);
if (sourceKeys.length !== targetKeys.length)
return false;
for (let s = 0; s < sourceKeys.length; s++) {
const key = sourceKeys[s];
if (key === "value")
continue;
if (key === "groupIds" && Array.isArray(source[key]) && Array.isArray(target[key]) && isArrayEqual(source[key], target[key])) {
continue;
}
if (source[key] !== target[key]) {
return false;
}
}
return true;
}
function pickElementAttr(payload, option = {}) {
const { extraPickAttrs } = option;
const zipAttrs = EDITOR_ELEMENT_ZIP_ATTR;
if (extraPickAttrs) {
zipAttrs.push(...extraPickAttrs);
}
const element = {
value: payload.value === ZERO ? `
` : payload.value
};
zipAttrs.forEach((attr) => {
const value = payload[attr];
if (value !== void 0) {
element[attr] = value;
}
});
return element;
}
function zipElementList(payload, options = {}) {
const { extraPickAttrs } = options;
const elementList = deepClone(payload);
const zipElementListData = [];
let e = 0;
while (e < elementList.length) {
let element = elementList[e];
if (e === 0 && element.value === ZERO && !element.listId && (!element.type || element.type === ElementType.TEXT)) {
e++;
continue;
}
if (element.titleId && element.level) {
const titleId = element.titleId;
if (titleId) {
const level = element.level;
const titleElement = {
type: ElementType.TITLE,
title: element.title,
value: "",
level
};
const valueList = [];
while (e < elementList.length) {
const titleE = elementList[e];
if (titleId !== titleE.titleId) {
e--;
break;
}
delete titleE.level;
delete titleE.title;
valueList.push(titleE);
e++;
}
titleElement.valueList = zipElementList(valueList, options);
element = titleElement;
}
} else if (element.listId && element.listType) {
const listId = element.listId;
if (listId) {
const listType = element.listType;
const listStyle = element.listStyle;
const listElement = {
type: ElementType.LIST,
value: "",
listId,
listType,
listStyle
};
const valueList = [];
while (e < elementList.length) {
const listE = elementList[e];
if (listId !== listE.listId) {
e--;
break;
}
delete listE.listType;
delete listE.listStyle;
valueList.push(listE);
e++;
}
listElement.valueList = zipElementList(valueList, options);
element = listElement;
}
} else if (element.type === ElementType.TABLE) {
if (element.pagingId) {
let tableIndex = e + 1;
let combineCount = 0;
while (tableIndex < elementList.length) {
const nextElement = elementList[tableIndex];
if (nextElement.pagingId === element.pagingId) {
element.height += nextElement.height;
element.trList.push(...nextElement.trList);
tableIndex++;
combineCount++;
} else {
break;
}
}
e += combineCount;
}
if (element.trList) {
for (let t = 0; t < element.trList.length; t++) {
const tr = element.trList[t];
delete tr.id;
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const zipTd = {
colspan: td.colspan,
rowspan: td.rowspan,
value: zipElementList(td.value, options)
};
TABLE_TD_ZIP_ATTR.forEach((attr) => {
const value = td[attr];
if (value !== void 0) {
zipTd[attr] = value;
}
});
tr.tdList[d] = zipTd;
}
}
}
} else if (element.type === ElementType.HYPERLINK) {
const hyperlinkId = element.hyperlinkId;
if (hyperlinkId) {
const hyperlinkElement = {
type: ElementType.HYPERLINK,
value: "",
url: element.url
};
const valueList = [];
while (e < elementList.length) {
const hyperlinkE = elementList[e];
if (hyperlinkId !== hyperlinkE.hyperlinkId) {
e--;
break;
}
delete hyperlinkE.type;
delete hyperlinkE.url;
valueList.push(hyperlinkE);
e++;
}
hyperlinkElement.valueList = zipElementList(valueList, options);
element = hyperlinkElement;
}
} else if (element.type === ElementType.DATE) {
const dateId = element.dateId;
if (dateId) {
const dateElement = {
type: ElementType.DATE,
value: "",
dateFormat: element.dateFormat
};
const valueList = [];
while (e < elementList.length) {
const dateE = elementList[e];
if (dateId !== dateE.dateId) {
e--;
break;
}
delete dateE.type;
delete dateE.dateFormat;
valueList.push(dateE);
e++;
}
dateElement.valueList = zipElementList(valueList, options);
element = dateElement;
}
} else if (element.controlId) {
const controlId = element.controlId;
if (controlId) {
const controlDefaultStyle = pickObject(element, CONTROL_STYLE_ATTR);
const control = {
...element.control,
...controlDefaultStyle
};
const controlElement = {
...pickObject(element, EDITOR_ROW_ATTR),
type: ElementType.CONTROL,
value: "",
control,
controlId
};
const valueList = [];
while (e < elementList.length) {
const controlE = elementList[e];
if (controlId !== controlE.controlId) {
e--;
break;
}
if (controlE.controlComponent === ControlComponent.VALUE) {
delete controlE.control;
delete controlE.controlId;
valueList.push(controlE);
}
e++;
}
controlElement.control.value = zipElementList(valueList, options);
element = pickElementAttr(controlElement, { extraPickAttrs });
}
}
const pickElement = pickElementAttr(element, { extraPickAttrs });
if (!element.type || element.type === ElementType.TEXT || element.type === ElementType.SUBSCRIPT || element.type === ElementType.SUPERSCRIPT) {
while (e < elementList.length) {
const nextElement = elementList[e + 1];
e++;
if (nextElement && isSameElementExceptValue(
pickElement,
pickElementAttr(nextElement, { extraPickAttrs })
)) {
const nextValue = nextElement.value === ZERO ? "\n" : nextElement.value;
pickElement.value += nextValue;
} else {
break;
}
}
} else {
e++;
}
zipElementListData.push(pickElement);
}
return zipElementListData;
}
function isTextLikeElement(element) {
return !element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type);
}
function getIsBlockElement(element) {
return !!(element == null ? void 0 : element.type) && (BLOCK_ELEMENT_TYPE.includes(element.type) || element.imgDisplay === ImageDisplay.INLINE);
}
function pickSurroundElementList(elementList) {
const surroundElementList = [];
for (let e = 0; e < elementList.length; e++) {
const element = elementList[e];
if (element.imgDisplay === ImageDisplay.SURROUND) {
surroundElementList.push(element);
}
}
return surroundElementList;
}
function deleteSurroundElementList(elementList, pageNo) {
var _a;
for (let s = elementList.length - 1; s >= 0; s--) {
const surroundElement = elementList[s];
if (((_a = surroundElement.imgFloatPosition) == null ? void 0 : _a.pageNo) === pageNo) {
elementList.splice(s, 1);
}
}
}
var VerticalAlign = /* @__PURE__ */ ((VerticalAlign2) => {
VerticalAlign2["TOP"] = "top";
VerticalAlign2["MIDDLE"] = "middle";
VerticalAlign2["BOTTOM"] = "bottom";
return VerticalAlign2;
})(VerticalAlign || {});
class Position {
constructor(draw) {
this.positionList = [];
this.floatPositionList = [];
this.cursorPosition = null;
this.positionContext = {
isTable: false,
isControl: false
};
this.draw = draw;
this.options = draw.getOptions();
}
getFloatPositionList() {
return this.floatPositionList;
}
getTablePositionList(sourceElementList) {
const { index, trIndex, tdIndex } = this.positionContext;
return sourceElementList[index].trList[trIndex].tdList[tdIndex].positionList || [];
}
getPositionList() {
return this.positionContext.isTable ? this.getTablePositionList(this.draw.getOriginalElementList()) : this.getOriginalPositionList();
}
getMainPositionList() {
return this.positionContext.isTable ? this.getTablePositionList(this.draw.getOriginalMainElementList()) : this.positionList;
}
getOriginalPositionList() {
return this.positionList;
}
getOriginalMainPositionList() {
return this.positionList;
}
setPositionList(payload) {
this.positionList = payload;
}
setFloatPositionList(payload) {
this.floatPositionList = payload;
}
computePageRowPosition(payload) {
const {
positionList,
rowList,
pageNo,
startX,
startY,
startRowIndex,
startIndex,
innerWidth,
zone: zone2
} = payload;
const {
scale,
table: { tdPadding }
} = this.options;
let x = startX;
let y = startY;
let index = startIndex;
for (let i = 0; i < rowList.length; i++) {
const curRow = rowList[i];
if (!curRow.isSurround) {
const curRowWidth = curRow.width + (curRow.offsetX || 0);
if (curRow.rowFlex === RowFlex.CENTER) {
x += (innerWidth - curRowWidth) / 2;
} else if (curRow.rowFlex === RowFlex.RIGHT) {
x += innerWidth - curRowWidth;
}
}
x += curRow.offsetX || 0;
const tablePreX = x;
const tablePreY = y;
for (let j = 0; j < curRow.elementList.length; j++) {
const element = curRow.elementList[j];
const metrics = element.metrics;
const offsetY = element.imgDisplay !== ImageDisplay.INLINE && element.type === ElementType.IMAGE || element.type === ElementType.LATEX ? curRow.ascent - metrics.height : curRow.ascent;
if (element.left) {
x += element.left;
}
const positionItem = {
pageNo,
index,
value: element.value,
rowIndex: startRowIndex + i,
rowNo: i,
metrics,
left: element.left || 0,
ascent: offsetY,
lineHeight: curRow.height,
isFirstLetter: j === 0,
isLastLetter: j === curRow.elementList.length - 1,
coordinate: {
leftTop: [x, y],
leftBottom: [x, y + curRow.height],
rightTop: [x + metrics.width, y],
rightBottom: [x + metrics.width, y + curRow.height]
}
};
if (element.imgDisplay === ImageDisplay.SURROUND || element.imgDisplay === ImageDisplay.FLOAT_TOP || element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
const prePosition = positionList[positionList.length - 1];
if (prePosition) {
positionItem.metrics = prePosition.metrics;
positionItem.coordinate = prePosition.coordinate;
}
if (!element.imgFloatPosition) {
element.imgFloatPosition = {
x,
y,
pageNo
};
}
this.floatPositionList.push({
pageNo,
element,
position: positionItem,
isTable: payload.isTable,
index: payload.index,
tdIndex: payload.tdIndex,
trIndex: payload.trIndex,
tdValueIndex: index,
zone: zone2
});
}
positionList.push(positionItem);
index++;
x += metrics.width;
if (element.type === ElementType.TABLE) {
const tdPaddingWidth = tdPadding[1] + tdPadding[3];
const tdPaddingHeight = tdPadding[0] + tdPadding[2];
for (let t = 0; t < element.trList.length; t++) {
const tr = element.trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
td.positionList = [];
const rowList2 = td.rowList;
const drawRowResult = this.computePageRowPosition({
positionList: td.positionList,
rowList: rowList2,
pageNo,
startRowIndex: 0,
startIndex: 0,
startX: (td.x + tdPadding[3]) * scale + tablePreX,
startY: (td.y + tdPadding[0]) * scale + tablePreY,
innerWidth: (td.width - tdPaddingWidth) * scale,
isTable: true,
index: index - 1,
tdIndex: d,
trIndex: t,
zone: zone2
});
if (td.verticalAlign === VerticalAlign.MIDDLE || td.verticalAlign === VerticalAlign.BOTTOM) {
const rowsHeight = rowList2.reduce(
(pre, cur) => pre + cur.height,
0
);
const blankHeight = (td.height - tdPaddingHeight) * scale - rowsHeight;
const offsetHeight = td.verticalAlign === VerticalAlign.MIDDLE ? blankHeight / 2 : blankHeight;
if (Math.floor(offsetHeight) > 0) {
td.positionList.forEach((tdPosition) => {
const {
coordinate: { leftTop, leftBottom, rightBottom, rightTop }
} = tdPosition;
leftTop[1] += offsetHeight;
leftBottom[1] += offsetHeight;
rightBottom[1] += offsetHeight;
rightTop[1] += offsetHeight;
});
}
}
x = drawRowResult.x;
y = drawRowResult.y;
}
}
x = tablePreX;
y = tablePreY;
}
}
x = startX;
y += curRow.height;
}
return { x, y, index };
}
computePositionList() {
var _a;
this.positionList = [];
const innerWidth = this.draw.getInnerWidth();
const pageRowList = this.draw.getPageRowList();
const margins = this.draw.getMargins();
const startX = margins[3];
const header = this.draw.getHeader();
const extraHeight = header.getExtraHeight();
const startY = margins[0] + extraHeight;
let startRowIndex = 0;
for (let i = 0; i < pageRowList.length; i++) {
const rowList = pageRowList[i];
const startIndex = (_a = rowList[0]) == null ? void 0 : _a.startIndex;
this.computePageRowPosition({
positionList: this.positionList,
rowList,
pageNo: i,
startRowIndex,
startIndex,
startX,
startY,
innerWidth
});
startRowIndex += rowList.length;
}
}
computeRowPosition(payload) {
const { row, innerWidth } = payload;
const positionList = [];
this.computePageRowPosition({
positionList,
innerWidth,
rowList: [deepClone(row)],
pageNo: 0,
startX: 0,
startY: 0,
startIndex: 0,
startRowIndex: 0
});
return positionList;
}
setCursorPosition(position) {
this.cursorPosition = position;
}
getCursorPosition() {
return this.cursorPosition;
}
getPositionContext() {
return this.positionContext;
}
setPositionContext(payload) {
this.positionContext = payload;
}
getPositionByXY(payload) {
var _a, _b, _c, _d, _e;
const { x, y, isTable } = payload;
let { elementList, positionList } = payload;
if (!elementList) {
elementList = this.draw.getOriginalElementList();
}
if (!positionList) {
positionList = this.getOriginalPositionList();
}
const curPageNo = (_a = payload.pageNo) != null ? _a : this.draw.getPageNo();
const positionNo = curPageNo;
if (!isTable) {
const floatTopPosition = this.getFloatPositionByXY({
...payload,
imgDisplays: [ImageDisplay.FLOAT_TOP, ImageDisplay.SURROUND]
});
if (floatTopPosition)
return floatTopPosition;
}
for (let j = 0; j < positionList.length; j++) {
const {
index,
pageNo,
left,
isFirstLetter,
coordinate: { leftTop, rightTop, leftBottom }
} = positionList[j];
if (positionNo !== pageNo)
continue;
if (pageNo > positionNo)
break;
if (leftTop[0] - left <= x && rightTop[0] >= x && leftTop[1] <= y && leftBottom[1] >= y) {
let curPositionIndex2 = j;
const element = elementList[j];
if (element.type === ElementType.TABLE) {
for (let t = 0; t < element.trList.length; t++) {
const tr = element.trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const tablePosition = this.getPositionByXY({
x,
y,
td,
pageNo: curPageNo,
tablePosition: positionList[j],
isTable: true,
elementList: td.value,
positionList: td.positionList
});
if (~tablePosition.index) {
const { index: tdValueIndex, hitLineStartIndex: hitLineStartIndex3 } = tablePosition;
const tdValueElement = td.value[tdValueIndex];
return {
index,
isCheckbox: tablePosition.isCheckbox || tdValueElement.type === ElementType.CHECKBOX || tdValueElement.controlComponent === ControlComponent.CHECKBOX,
isRadio: tdValueElement.type === ElementType.RADIO || tdValueElement.controlComponent === ControlComponent.RADIO,
isControl: !!tdValueElement.controlId,
isImage: tablePosition.isImage,
isDirectHit: tablePosition.isDirectHit,
isTable: true,
tdIndex: d,
trIndex: t,
tdValueIndex,
tdId: td.id,
trId: tr.id,
tableId: element.id,
hitLineStartIndex: hitLineStartIndex3
};
}
}
}
}
if (element.type === ElementType.IMAGE || element.type === ElementType.LATEX) {
return {
index: curPositionIndex2,
isDirectHit: true,
isImage: true
};
}
if (element.type === ElementType.CHECKBOX || element.controlComponent === ControlComponent.CHECKBOX) {
return {
index: curPositionIndex2,
isDirectHit: true,
isCheckbox: true
};
}
if (element.type === ElementType.RADIO || element.controlComponent === ControlComponent.RADIO) {
return {
index: curPositionIndex2,
isDirectHit: true,
isRadio: true
};
}
let hitLineStartIndex2;
if (elementList[index].value !== ZERO) {
const valueWidth = rightTop[0] - leftTop[0];
if (x < leftTop[0] + valueWidth / 2) {
curPositionIndex2 = j - 1;
if (isFirstLetter) {
hitLineStartIndex2 = j;
}
}
}
return {
isDirectHit: true,
hitLineStartIndex: hitLineStartIndex2,
index: curPositionIndex2,
isControl: !!element.controlId
};
}
}
if (!isTable) {
const floatBottomPosition = this.getFloatPositionByXY({
...payload,
imgDisplays: [ImageDisplay.FLOAT_BOTTOM]
});
if (floatBottomPosition)
return floatBottomPosition;
}
let isLastArea = false;
let curPositionIndex = -1;
let hitLineStartIndex;
if (isTable) {
const { scale } = this.options;
const { td, tablePosition } = payload;
if (td && tablePosition) {
const { leftTop } = tablePosition.coordinate;
const tdX = td.x * scale + leftTop[0];
const tdY = td.y * scale + leftTop[1];
const tdWidth = td.width * scale;
const tdHeight = td.height * scale;
if (!(tdX < x && x < tdX + tdWidth && tdY < y && y < tdY + tdHeight)) {
return {
index: curPositionIndex
};
}
}
}
const lastLetterList = positionList.filter(
(p) => p.isLastLetter && p.pageNo === positionNo
);
for (let j = 0; j < lastLetterList.length; j++) {
const {
index,
rowNo,
coordinate: { leftTop, leftBottom }
} = lastLetterList[j];
if (y > leftTop[1] && y <= leftBottom[1]) {
const headIndex = positionList.findIndex(
(p) => p.pageNo === positionNo && p.rowNo === rowNo
);
const headElement = elementList[headIndex];
const headPosition = positionList[headIndex];
const headStartX = headElement.listStyle === ListStyle.CHECKBOX ? this.options.margins[3] : headPosition.coordinate.leftTop[0];
if (x < headStartX) {
if (~headIndex) {
if (headPosition.value === ZERO) {
curPositionIndex = headIndex;
} else {
curPositionIndex = headIndex - 1;
hitLineStartIndex = headIndex;
}
} else {
curPositionIndex = index;
}
} else {
if (headElement.listStyle === ListStyle.CHECKBOX && x < leftTop[0]) {
return {
index: headIndex,
isDirectHit: true,
isCheckbox: true
};
}
curPositionIndex = index;
}
isLastArea = true;
break;
}
}
if (!isLastArea) {
const header = this.draw.getHeader();
const headerHeight = header.getHeight();
const headerBottomY = header.getHeaderTop() + headerHeight;
const footer = this.draw.getFooter();
const pageHeight = this.draw.getHeight();
const footerTopY = pageHeight - (footer.getFooterBottom() + footer.getHeight());
if (y < headerBottomY) {
return {
index: -1,
zone: EditorZone.HEADER
};
}
if (y > footerTopY) {
return {
index: -1,
zone: EditorZone.FOOTER
};
}
const margins = this.draw.getMargins();
if (y <= margins[1]) {
for (let p = 0; p < positionList.length; p++) {
const position = positionList[p];
if (position.pageNo !== positionNo || position.rowNo !== 0)
continue;
const { leftTop, rightTop } = position.coordinate;
if (x <= margins[3] || x >= leftTop[0] && x <= rightTop[0] || ((_b = positionList[p + 1]) == null ? void 0 : _b.rowNo) !== 0) {
return {
index: position.index
};
}
}
} else {
const lastLetter = lastLetterList[lastLetterList.length - 1];
if (lastLetter) {
const lastRowNo = lastLetter.rowNo;
for (let p = 0; p < positionList.length; p++) {
const position = positionList[p];
if (position.pageNo !== positionNo || position.rowNo !== lastRowNo) {
continue;
}
const { leftTop, rightTop } = position.coordinate;
if (x <= margins[3] || x >= leftTop[0] && x <= rightTop[0] || ((_c = positionList[p + 1]) == null ? void 0 : _c.rowNo) !== lastRowNo) {
return {
index: position.index
};
}
}
}
}
return {
index: ((_d = lastLetterList[lastLetterList.length - 1]) == null ? void 0 : _d.index) || positionList.length - 1
};
}
return {
hitLineStartIndex,
index: curPositionIndex,
isControl: !!((_e = elementList[curPositionIndex]) == null ? void 0 : _e.controlId)
};
}
getFloatPositionByXY(payload) {
var _a;
const { x, y } = payload;
const currentPageNo = (_a = payload.pageNo) != null ? _a : this.draw.getPageNo();
for (let f = 0; f < this.floatPositionList.length; f++) {
const {
position,
element,
isTable,
index,
trIndex,
tdIndex,
tdValueIndex,
pageNo
} = this.floatPositionList[f];
if (currentPageNo === pageNo && element.type === ElementType.IMAGE && element.imgDisplay && payload.imgDisplays.includes(element.imgDisplay)) {
const imgFloatPosition = element.imgFloatPosition;
if (x >= imgFloatPosition.x && x <= imgFloatPosition.x + element.width && y >= imgFloatPosition.y && y <= imgFloatPosition.y + element.height) {
if (isTable) {
return {
index,
isDirectHit: true,
isImage: true,
isTable,
trIndex,
tdIndex,
tdValueIndex,
tdId: element.tdId,
trId: element.trId,
tableId: element.tableId
};
}
return {
index: position.index,
isDirectHit: true,
isImage: true
};
}
}
}
}
adjustPositionContext(payload) {
const positionResult = this.getPositionByXY(payload);
if (!~positionResult.index)
return null;
const {
index,
isCheckbox,
isRadio,
isControl,
isImage,
isDirectHit,
isTable,
trIndex,
tdIndex,
tdId,
trId,
tableId
} = positionResult;
this.setPositionContext({
isTable: isTable || false,
isCheckbox: isCheckbox || false,
isRadio: isRadio || false,
isControl: isControl || false,
isImage: isImage || false,
isDirectHit: isDirectHit || false,
index,
trIndex,
tdIndex,
tdId,
trId,
tableId
});
return positionResult;
}
setSurroundPosition(payload) {
var _a;
const {
pageNo,
row,
rowElement,
rowElementRect,
surroundElementList,
availableWidth
} = payload;
let x = rowElementRect.x;
let rowIncreaseWidth = 0;
if (surroundElementList.length && !getIsBlockElement(rowElement) && !((_a = rowElement.control) == null ? void 0 : _a.minWidth)) {
for (let s = 0; s < surroundElementList.length; s++) {
const surroundElement = surroundElementList[s];
const floatPosition = surroundElement.imgFloatPosition;
if (floatPosition.pageNo !== pageNo)
continue;
const surroundRect = {
...floatPosition,
width: surroundElement.width,
height: surroundElement.height
};
if (isRectIntersect(rowElementRect, surroundRect)) {
row.isSurround = true;
const translateX = surroundRect.width + surroundRect.x - rowElementRect.x;
rowElement.left = translateX;
row.width += translateX;
rowIncreaseWidth += translateX;
x = surroundRect.x + surroundRect.width;
console.log("availableWidth");
console.log(availableWidth);
console.log(row);
console.log(rowElement);
if (row.width + rowElement.metrics.width > availableWidth) {
rowElement.left = 0;
row.width -= rowIncreaseWidth;
break;
}
}
}
}
return { x, rowIncreaseWidth };
}
}
var BackgroundSize = /* @__PURE__ */ ((BackgroundSize2) => {
BackgroundSize2["CONTAIN"] = "contain";
BackgroundSize2["COVER"] = "cover";
return BackgroundSize2;
})(BackgroundSize || {});
var BackgroundRepeat = /* @__PURE__ */ ((BackgroundRepeat2) => {
BackgroundRepeat2["REPEAT"] = "repeat";
BackgroundRepeat2["NO_REPEAT"] = "no-repeat";
BackgroundRepeat2["REPEAT_X"] = "repeat-x";
BackgroundRepeat2["REPEAT_Y"] = "repeat-y";
return BackgroundRepeat2;
})(BackgroundRepeat || {});
class Background {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
_renderBackgroundColor(ctx2d, color, width, height) {
ctx2d.save();
ctx2d.fillStyle = color;
ctx2d.fillRect(0, 0, width, height);
ctx2d.restore();
}
_drawImage(ctx2d, width, height) {
const { background, scale } = this.options;
if (background.size === BackgroundSize.CONTAIN) {
const imageWidth = width * scale;
const imageHeight = height * scale;
if (!background.repeat || background.repeat === BackgroundRepeat.NO_REPEAT) {
ctx2d.drawImage(background.image, 0, 0, imageWidth, imageHeight);
} else {
let startX = 0;
let startY = 0;
const repeatXCount = background.repeat === BackgroundRepeat.REPEAT || background.repeat === BackgroundRepeat.REPEAT_X ? Math.ceil(width * scale / imageWidth) : 1;
const repeatYCount = background.repeat === BackgroundRepeat.REPEAT || background.repeat === BackgroundRepeat.REPEAT_Y ? Math.ceil(height * scale / imageHeight) : 1;
for (let x = 0; x < repeatXCount; x++) {
for (let y = 0; y < repeatYCount; y++) {
ctx2d.drawImage(background.image, startX, startY, imageWidth, imageHeight);
startY += imageHeight;
}
startY = 0;
startX += imageWidth;
}
}
} else {
ctx2d.drawImage(background.image, 0, 0, width * scale, height * scale);
}
}
_renderBackgroundImage(ctx2d, width, height) {
this._drawImage(ctx2d, width, height);
}
render(ctx2d, pageNo) {
const {
background: { image, color, applyPageNumbers }
} = this.options;
if (image && (!(applyPageNumbers == null ? void 0 : applyPageNumbers.length) || applyPageNumbers.includes(pageNo))) {
const { width, height } = this.options;
this._renderBackgroundImage(ctx2d, width, height);
} else {
const width = this.draw.getCanvasWidth(pageNo);
const height = this.draw.getCanvasHeight(pageNo);
this._renderBackgroundColor(ctx2d, color, width, height);
}
}
}
class AbstractRichText {
constructor() {
this.fillRect = this.clearFillInfo();
}
clearFillInfo() {
this.fillColor = void 0;
this.fillDecorationStyle = void 0;
this.fillRect = {
x: 0,
y: 0,
width: 0,
height: 0
};
return this.fillRect;
}
recordFillInfo(ctx2d, x, y, width, height, color, decorationStyle) {
const isFirstRecord = !this.fillRect.width;
if (!isFirstRecord && (this.fillColor !== color || this.fillDecorationStyle !== decorationStyle)) {
this.render(ctx2d);
this.clearFillInfo();
this.recordFillInfo(ctx2d, x, y, width, height, color, decorationStyle);
return;
}
if (isFirstRecord) {
this.fillRect.x = x;
this.fillRect.y = y;
}
if (height && this.fillRect.height < height) {
this.fillRect.height = height;
}
this.fillRect.width += width;
this.fillColor = color;
this.fillDecorationStyle = decorationStyle;
}
}
class Highlight extends AbstractRichText {
constructor(draw) {
super();
this.draw = draw;
this.options = draw.getOptions();
}
render(ctx2d) {
if (!this.fillRect.width)
return;
const { highlightAlpha } = this.options;
const { x, y, width, height } = this.fillRect;
ctx2d.save();
this.draw.getPdf().setGState(new GState({
opacity: highlightAlpha
}));
ctx2d.globalAlpha = highlightAlpha;
ctx2d.fillStyle = this.fillColor;
ctx2d.fillRect(x, y, width, height);
this.draw.getPdf().setGState(new GState({
opacity: 1
}));
ctx2d.restore();
this.clearFillInfo();
}
}
class Margin {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
render(ctx2d, pageNo) {
const { marginIndicatorColor, pageMode } = this.options;
const width = this.draw.getWidth();
const height = pageMode === PageMode.CONTINUITY ? this.draw.getCanvasHeight(pageNo) : this.draw.getHeight();
const margins = this.draw.getMargins();
const marginIndicatorSize = this.draw.getMarginIndicatorSize();
ctx2d.save();
ctx2d.translate(0.5, 0.5);
ctx2d.strokeStyle = marginIndicatorColor;
ctx2d.beginPath();
const leftTopPoint = [margins[3], margins[0]];
const rightTopPoint = [width - margins[1], margins[0]];
const leftBottomPoint = [margins[3], height - margins[2]];
const rightBottomPoint = [
width - margins[1],
height - margins[2]
];
ctx2d.moveTo(leftTopPoint[0] - marginIndicatorSize, leftTopPoint[1]);
ctx2d.lineTo(...leftTopPoint);
ctx2d.lineTo(leftTopPoint[0], leftTopPoint[1] - marginIndicatorSize);
ctx2d.moveTo(rightTopPoint[0] + marginIndicatorSize, rightTopPoint[1]);
ctx2d.lineTo(...rightTopPoint);
ctx2d.lineTo(rightTopPoint[0], rightTopPoint[1] - marginIndicatorSize);
ctx2d.moveTo(leftBottomPoint[0] - marginIndicatorSize, leftBottomPoint[1]);
ctx2d.lineTo(...leftBottomPoint);
ctx2d.lineTo(leftBottomPoint[0], leftBottomPoint[1] + marginIndicatorSize);
ctx2d.moveTo(rightBottomPoint[0] + marginIndicatorSize, rightBottomPoint[1]);
ctx2d.lineTo(...rightBottomPoint);
ctx2d.lineTo(rightBottomPoint[0], rightBottomPoint[1] + marginIndicatorSize);
ctx2d.stroke();
ctx2d.restore();
}
}
class Strikeout extends AbstractRichText {
constructor(draw) {
super();
this.options = draw.getOptions();
}
render(ctx2d) {
if (!this.fillRect.width)
return;
const { scale, strikeoutColor } = this.options;
const { x, y, width } = this.fillRect;
ctx2d.save();
ctx2d.lineWidth = scale;
ctx2d.strokeStyle = strikeoutColor;
const adjustY = y + 0.5;
ctx2d.beginPath();
ctx2d.moveTo(x, adjustY);
ctx2d.lineTo(x + width, adjustY);
ctx2d.stroke();
ctx2d.restore();
this.clearFillInfo();
}
}
var TextDecorationStyle = /* @__PURE__ */ ((TextDecorationStyle2) => {
TextDecorationStyle2["SOLID"] = "solid";
TextDecorationStyle2["DOUBLE"] = "double";
TextDecorationStyle2["DASHED"] = "dashed";
TextDecorationStyle2["DOTTED"] = "dotted";
TextDecorationStyle2["WAVY"] = "wavy";
return TextDecorationStyle2;
})(TextDecorationStyle || {});
var DashType = /* @__PURE__ */ ((DashType2) => {
DashType2["SOLID"] = "solid";
DashType2["DASHED"] = "dashed";
DashType2["DOTTED"] = "dotted";
return DashType2;
})(DashType || {});
class Underline extends AbstractRichText {
constructor(draw) {
super();
this.options = draw.getOptions();
}
_drawLine(ctx2d, startX, startY, width, dashType) {
const endX = startX + width;
ctx2d.beginPath();
switch (dashType) {
case DashType.DASHED:
break;
case DashType.DOTTED:
break;
}
ctx2d.moveTo(startX, startY);
ctx2d.lineTo(endX, startY);
ctx2d.stroke();
}
_drawDouble(ctx2d, startX, startY, width) {
const SPACING = 3;
const endX = startX + width;
const endY = startY + SPACING * this.options.scale;
ctx2d.beginPath();
ctx2d.moveTo(startX, startY);
ctx2d.lineTo(endX, startY);
ctx2d.stroke();
ctx2d.beginPath();
ctx2d.moveTo(startX, endY);
ctx2d.lineTo(endX, endY);
ctx2d.stroke();
}
_drawWave(ctx2d, startX, startY, width) {
const { scale } = this.options;
const AMPLITUDE = 1.2 * scale;
const FREQUENCY = 1 / scale;
const adjustY = startY + 2 * AMPLITUDE;
ctx2d.beginPath();
for (let x = 0; x < width; x++) {
const y = AMPLITUDE * Math.sin(FREQUENCY * x);
ctx2d.lineTo(startX + x, adjustY + y);
}
ctx2d.stroke();
}
render(ctx2d) {
if (!this.fillRect.width)
return;
const { underlineColor, scale } = this.options;
const { x, y, width } = this.fillRect;
ctx2d.save();
ctx2d.strokeStyle = this.fillColor || underlineColor;
ctx2d.lineWidth = scale;
const adjustY = Math.floor(y + 2 * ctx2d.lineWidth) + 0.5;
switch (this.fillDecorationStyle) {
case TextDecorationStyle.WAVY:
this._drawWave(ctx2d, x, adjustY, width);
break;
case TextDecorationStyle.DOUBLE:
this._drawDouble(ctx2d, x, adjustY, width);
break;
case TextDecorationStyle.DASHED:
this._drawLine(ctx2d, x, adjustY, width, DashType.DASHED);
break;
case TextDecorationStyle.DOTTED:
this._drawLine(ctx2d, x, adjustY, width, DashType.DOTTED);
break;
default:
this._drawLine(ctx2d, x, adjustY, width);
break;
}
ctx2d.restore();
this.clearFillInfo();
}
}
class TextParticle {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
this.ctx2d = draw.getCtx2d();
this.curX = -1;
this.curY = -1;
this.text = "";
this.bold = false;
this.italic = false;
this.curStyle = "";
this.cacheMeasureText = /* @__PURE__ */ new Map();
}
measureBasisWord(ctx2d, font) {
ctx2d.save();
ctx2d.font = font;
const textMetrics = this.measureText(ctx2d, {
value: METRICS_BASIS_TEXT
});
ctx2d.restore();
return textMetrics;
}
measureWord(ctx2d, elementList, curIndex) {
const LETTER_REG = this.draw.getLetterReg();
let width = 0;
let endElement = elementList[curIndex];
let i = curIndex;
while (i < elementList.length) {
const element = elementList[i];
if (element.type && element.type !== ElementType.TEXT || !LETTER_REG.test(element.value)) {
endElement = element;
break;
}
width += this.measureText(ctx2d, element).width;
i++;
}
return {
width,
endElement
};
}
measurePunctuationWidth(ctx2d, element) {
if (!element || !PUNCTUATION_LIST.includes(element.value))
return 0;
return this.measureText(ctx2d, element).width;
}
measureText(ctx2d, element) {
const font = this.draw.getFont(element);
const value = element.value === `
` ? "" : element.value;
if (element.width) {
const textMetrics2 = this.draw.measureText(font, element.value);
return {
width: element.width,
actualBoundingBoxAscent: textMetrics2.actualBoundingBoxAscent,
actualBoundingBoxDescent: textMetrics2.actualBoundingBoxDescent,
actualBoundingBoxLeft: textMetrics2.actualBoundingBoxLeft,
actualBoundingBoxRight: textMetrics2.actualBoundingBoxRight,
fontBoundingBoxAscent: textMetrics2.fontBoundingBoxAscent,
fontBoundingBoxDescent: textMetrics2.fontBoundingBoxDescent
};
}
const id = `${element.value}${ctx2d.font}`;
const cacheTextMetrics = this.cacheMeasureText.get(id);
if (cacheTextMetrics) {
return cacheTextMetrics;
}
const textMetrics = this.draw.measureText(font, value);
this.cacheMeasureText.set(id, textMetrics);
return textMetrics;
}
complete() {
this._render();
this.text = "";
}
record(ctx2d, element, x, y) {
this.ctx2d = ctx2d;
if (this.options.renderMode === RenderMode.COMPATIBILITY) {
this._setCurXY(x, y);
this.text = element.value;
this.curStyle = element.style;
this.curColor = element.color;
this.bold = element.bold;
this.italic = element.italic;
this.complete();
return;
}
if (!this.text) {
this._setCurXY(x, y);
}
if (this.curStyle && element.style !== this.curStyle || element.color !== this.curColor) {
this.complete();
this._setCurXY(x, y);
}
this.text += element.value;
this.curStyle = element.style.toLocaleLowerCase();
this.curColor = element.color;
this.bold = element.bold;
this.italic = element.italic;
}
_setCurXY(x, y) {
this.curX = x;
this.curY = y;
}
_render() {
if (!this.text || !~this.curX || !~this.curX)
return;
this.ctx2d.save();
this.ctx2d.font = this.curStyle.toLowerCase();
const fontWeight = this.bold ? "bold" : "normal";
const fontItalic = this.italic ? "italic" : "";
this.draw.getPdf().setFont(this.curStyle.split("px ")[1], fontItalic, fontWeight);
this.draw.getPdf().setCharSpace(0.1);
this.ctx2d.save();
this.ctx2d.fillStyle = this.curColor || this.options.defaultColor;
this.ctx2d.fillText(this.text, this.curX, this.curY);
this.ctx2d.restore();
}
}
const FORMAT_PLACEHOLDER = {
PAGE_NO: "{pageNo}",
PAGE_COUNT: "{pageCount}"
};
const defaultPageNumberOption = {
bottom: 60,
size: 12,
font: "Microsoft YaHei",
color: "#000000",
rowFlex: RowFlex.CENTER,
format: FORMAT_PLACEHOLDER.PAGE_NO,
numberType: NumberType.ARABIC,
disabled: false,
startPageNo: 1,
fromPageNo: 0,
maxPageNo: null
};
class PageNumber {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
static formatNumberPlaceholder(text, pageNo, replaceReg, numberType) {
const pageNoText = numberType === NumberType.CHINESE ? convertNumberToChinese(pageNo) : `${pageNo}`;
return text.replace(replaceReg, pageNoText);
}
render(ctx2d, pageNo) {
const {
scale,
pageMode,
pageNumber: {
size,
font,
color,
rowFlex,
numberType,
format,
startPageNo,
fromPageNo
}
} = this.options;
if (pageNo < fromPageNo)
return;
let text = format;
const pageNoReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_NO);
if (pageNoReg.test(text)) {
const realPageNo = pageNo + startPageNo - fromPageNo;
const pageNoText = numberType === NumberType.CHINESE ? convertNumberToChinese(realPageNo) : `${realPageNo}`;
text = text.replace(pageNoReg, pageNoText);
}
const pageCountReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_COUNT);
if (pageCountReg.test(text)) {
const pageCount = this.draw.getPageCount() - fromPageNo;
const pageCountText = numberType === NumberType.CHINESE ? convertNumberToChinese(pageCount) : `${pageCount}`;
text = text.replace(pageCountReg, pageCountText);
}
const width = this.draw.getWidth();
const height = pageMode === PageMode.CONTINUITY ? this.draw.getCanvasHeight(pageNo) : this.draw.getHeight();
const pageNumberBottom = this.draw.getPageNumberBottom();
const y = height - pageNumberBottom;
ctx2d.save();
ctx2d.fillStyle = color;
let newFont = font;
if (newFont.includes("Microsoft YaHei")) {
newFont = newFont.replace("Microsoft YaHei", "Yahei");
}
ctx2d.font = `${size * scale}px ${newFont}`;
let x = 0;
const margins = this.draw.getMargins();
const { width: textWidth } = this.draw.getFakeCtx().measureText(text);
if (rowFlex === RowFlex.CENTER) {
x = (width - textWidth) / 2;
} else if (rowFlex === RowFlex.RIGHT) {
x = width - textWidth - margins[1];
} else {
x = margins[3];
}
ctx2d.fillText(text, x, y);
ctx2d.restore();
}
}
class TableParticle {
constructor(draw) {
this.options = draw.getOptions();
}
getTrListGroupByCol(payload) {
var _a;
const trList = deepClone(payload);
for (let t = 0; t < payload.length; t++) {
const tr = trList[t];
for (let d = tr.tdList.length - 1; d >= 0; d--) {
const td = tr.tdList[d];
const { rowspan, rowIndex, colIndex } = td;
const curRowIndex = rowIndex + rowspan - 1;
if (curRowIndex !== d) {
const changeTd = tr.tdList.splice(d, 1)[0];
(_a = trList[curRowIndex]) == null ? void 0 : _a.tdList.splice(colIndex, 0, changeTd);
}
}
}
return trList;
}
_drawOuterBorder(payload) {
const {
ctx2d,
startX,
startY,
width,
height,
isDrawFullBorder,
borderExternalWidth
} = payload;
const { scale } = this.options;
const lineWidth = ctx2d.lineWidth;
if (borderExternalWidth) {
ctx2d.lineWidth = borderExternalWidth * scale;
}
ctx2d.beginPath();
const x = Math.round(startX);
const y = Math.round(startY);
ctx2d.translate(0.5, 0.5);
if (isDrawFullBorder) {
ctx2d.rect(x, y, width, height);
} else {
ctx2d.moveTo(x, y + height);
ctx2d.lineTo(x, y);
ctx2d.lineTo(x + width, y);
}
ctx2d.stroke();
if (borderExternalWidth) {
ctx2d.lineWidth = lineWidth;
}
ctx2d.translate(-0.5, -0.5);
}
_drawSlash(ctx2d, td, startX, startY) {
var _a, _b;
const { scale } = this.options;
ctx2d.save();
const width = td.width * scale;
const height = td.height * scale;
const x = Math.round(td.x * scale + startX);
const y = Math.round(td.y * scale + startY);
if ((_a = td.slashTypes) == null ? void 0 : _a.includes(TdSlash.FORWARD)) {
ctx2d.moveTo(x + width, y);
ctx2d.lineTo(x, y + height);
}
if ((_b = td.slashTypes) == null ? void 0 : _b.includes(TdSlash.BACK)) {
ctx2d.moveTo(x, y);
ctx2d.lineTo(x + width, y + height);
}
ctx2d.stroke();
ctx2d.restore();
}
_drawBorder(ctx2d, element, startX, startY) {
var _a, _b, _c, _d, _e, _f;
const {
colgroup,
trList,
borderType,
borderColor,
borderWidth = 1,
borderExternalWidth
} = element;
if (!colgroup || !trList)
return;
const {
scale,
table: { defaultBorderColor }
} = this.options;
const tableWidth = element.width * scale;
const tableHeight = element.height * scale;
const isEmptyBorderType = borderType === TableBorder.EMPTY;
const isExternalBorderType = borderType === TableBorder.EXTERNAL;
const isInternalBorderType = borderType === TableBorder.INTERNAL;
ctx2d.save();
if (borderType === TableBorder.DASH)
;
ctx2d.lineWidth = borderWidth * scale;
ctx2d.strokeStyle = borderColor || defaultBorderColor;
if (!isEmptyBorderType && !isInternalBorderType) {
this._drawOuterBorder({
ctx2d,
startX,
startY,
width: tableWidth,
height: tableHeight,
borderExternalWidth,
isDrawFullBorder: isExternalBorderType
});
}
for (let t = 0; t < trList.length; t++) {
const tr = trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
if ((_a = td.slashTypes) == null ? void 0 : _a.length) {
this._drawSlash(ctx2d, td, startX, startY);
}
if (!((_b = td.borderTypes) == null ? void 0 : _b.length) && (isEmptyBorderType || isExternalBorderType)) {
continue;
}
const width = td.width * scale;
const height = td.height * scale;
const x = Math.round(td.x * scale + startX + width);
const y = Math.round(td.y * scale + startY);
ctx2d.translate(0.5, 0.5);
ctx2d.beginPath();
if ((_c = td.borderTypes) == null ? void 0 : _c.includes(TdBorder.TOP)) {
ctx2d.moveTo(x - width, y);
ctx2d.lineTo(x, y);
ctx2d.stroke();
}
if ((_d = td.borderTypes) == null ? void 0 : _d.includes(TdBorder.RIGHT)) {
ctx2d.moveTo(x, y);
ctx2d.lineTo(x, y + height);
ctx2d.stroke();
}
if ((_e = td.borderTypes) == null ? void 0 : _e.includes(TdBorder.BOTTOM)) {
ctx2d.moveTo(x, y + height);
ctx2d.lineTo(x - width, y + height);
ctx2d.stroke();
}
if ((_f = td.borderTypes) == null ? void 0 : _f.includes(TdBorder.LEFT)) {
ctx2d.moveTo(x - width, y);
ctx2d.lineTo(x - width, y + height);
ctx2d.stroke();
}
if (!isEmptyBorderType && !isExternalBorderType) {
if (!isInternalBorderType || td.colIndex + td.colspan < colgroup.length) {
ctx2d.moveTo(x, y);
ctx2d.lineTo(x, y + height);
if (borderExternalWidth && borderExternalWidth !== borderWidth && td.colIndex + td.colspan === colgroup.length) {
const lineWidth = ctx2d.lineWidth;
ctx2d.lineWidth = borderExternalWidth * scale;
ctx2d.stroke();
ctx2d.beginPath();
ctx2d.lineWidth = lineWidth;
}
}
if (!isInternalBorderType || td.rowIndex + td.rowspan < trList.length) {
const isSetExternalBottomBorder = borderExternalWidth && borderExternalWidth !== borderWidth && td.rowIndex + td.rowspan === trList.length;
if (isSetExternalBottomBorder) {
ctx2d.stroke();
ctx2d.beginPath();
}
ctx2d.moveTo(x, y + height);
ctx2d.lineTo(x - width, y + height);
if (isSetExternalBottomBorder) {
const lineWidth = ctx2d.lineWidth;
ctx2d.lineWidth = borderExternalWidth * scale;
ctx2d.stroke();
ctx2d.beginPath();
ctx2d.lineWidth = lineWidth;
}
}
ctx2d.stroke();
}
ctx2d.translate(-0.5, -0.5);
}
}
ctx2d.restore();
}
_drawBackgroundColor(ctx2d, element, startX, startY) {
const { trList } = element;
if (!trList)
return;
const { scale } = this.options;
for (let t = 0; t < trList.length; t++) {
const tr = trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
if (!td.backgroundColor)
continue;
ctx2d.save();
const width = td.width * scale;
const height = td.height * scale;
const x = Math.round(td.x * scale + startX);
const y = Math.round(td.y * scale + startY);
ctx2d.fillStyle = td.backgroundColor;
ctx2d.fillRect(x, y, width, height);
ctx2d.restore();
}
}
}
getTableWidth(element) {
return element.colgroup.reduce((pre, cur) => pre + cur.width, 0);
}
getTableHeight(element) {
const trList = element.trList;
if (!(trList == null ? void 0 : trList.length))
return 0;
return this.getTdListByColIndex(trList, 0).reduce(
(pre, cur) => pre + cur.height,
0
);
}
getRowCountByColIndex(trList, colIndex) {
return this.getTdListByColIndex(trList, colIndex).reduce(
(pre, cur) => pre + cur.rowspan,
0
);
}
getTdListByColIndex(trList, colIndex) {
const data2 = [];
for (let r = 0; r < trList.length; r++) {
const tdList = trList[r].tdList;
for (let d = 0; d < tdList.length; d++) {
const td = tdList[d];
const min = td.colIndex;
const max = min + td.colspan - 1;
if (colIndex >= min && colIndex <= max) {
data2.push(td);
}
}
}
return data2;
}
computeRowColInfo(element) {
const { colgroup, trList } = element;
if (!colgroup || !trList)
return;
let preX = 0;
for (let t = 0; t < trList.length; t++) {
const tr = trList[t];
const isLastTr = trList.length - 1 === t;
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
let colIndex = 0;
if (trList.length > 1 && t !== 0) {
const preTd = tr.tdList[d - 1];
const start = preTd ? preTd.colIndex + preTd.colspan : d;
for (let c = start; c < colgroup.length; c++) {
const rowCount = this.getRowCountByColIndex(trList.slice(0, t), c);
if (rowCount === t) {
colIndex = c;
let preColWidth = 0;
for (let preC = 0; preC < c; preC++) {
preColWidth += colgroup[preC].width;
}
preX = preColWidth;
break;
}
}
} else {
const preTd = tr.tdList[d - 1];
if (preTd) {
colIndex = preTd.colIndex + preTd.colspan;
}
}
let width = 0;
for (let col = 0; col < td.colspan; col++) {
width += colgroup[col + colIndex].width;
}
let height = 0;
for (let row = 0; row < td.rowspan; row++) {
const curTr = trList[row + t] || trList[t];
height += curTr.height;
}
const isLastRowTd = tr.tdList.length - 1 === d;
let isLastColTd = isLastTr;
if (!isLastColTd) {
if (td.rowspan > 1) {
const nextTrLength = trList.length - 1 - t;
isLastColTd = td.rowspan - 1 === nextTrLength;
}
}
const isLastTd = isLastTr && isLastRowTd;
td.isLastRowTd = isLastRowTd;
td.isLastColTd = isLastColTd;
td.isLastTd = isLastTd;
td.x = preX;
let preY = 0;
for (let preR = 0; preR < t; preR++) {
const preTdList = trList[preR].tdList;
for (let preD = 0; preD < preTdList.length; preD++) {
const td2 = preTdList[preD];
if (colIndex >= td2.colIndex && colIndex < td2.colIndex + td2.colspan) {
preY += td2.height;
break;
}
}
}
td.y = preY;
td.width = width;
td.height = height;
td.rowIndex = t;
td.colIndex = colIndex;
td.trIndex = t;
td.tdIndex = d;
preX += width;
if (isLastRowTd && !isLastTd) {
preX = 0;
}
}
}
}
render(ctx2d, element, startX, startY) {
this._drawBackgroundColor(ctx2d, element, startX, startY);
this._drawBorder(ctx2d, element, startX, startY);
}
}
class HyperlinkParticle {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
const { hyperlinkPopupContainer, hyperlinkDom } = this._createHyperlinkPopupDom();
this.hyperlinkDom = hyperlinkDom;
this.hyperlinkPopupContainer = hyperlinkPopupContainer;
}
_createHyperlinkPopupDom() {
const hyperlinkPopupContainer = document.createElement("div");
hyperlinkPopupContainer.classList.add(`${EDITOR_PREFIX}-hyperlink-popup`);
const hyperlinkDom = document.createElement("a");
hyperlinkDom.target = "_blank";
hyperlinkDom.rel = "noopener";
hyperlinkPopupContainer.append(hyperlinkDom);
return { hyperlinkPopupContainer, hyperlinkDom };
}
drawHyperlinkPopup(element, position) {
const {
coordinate: {
leftTop: [left, top]
},
lineHeight
} = position;
const height = this.draw.getHeight();
const pageGap = this.draw.getPageGap();
const preY = this.draw.getPageNo() * (height + pageGap);
this.hyperlinkPopupContainer.style.display = "block";
this.hyperlinkPopupContainer.style.left = `${left}px`;
this.hyperlinkPopupContainer.style.top = `${top + preY + lineHeight}px`;
const url = element.url || "#";
this.hyperlinkDom.href = url;
this.hyperlinkDom.title = url;
this.hyperlinkDom.innerText = url;
}
clearHyperlinkPopup() {
this.hyperlinkPopupContainer.style.display = "none";
}
openHyperlink(element) {
const newTab = window.open(element.url, "_blank");
if (newTab) {
newTab.opener = null;
}
}
render(ctx2d, element, x, y) {
ctx2d.save();
ctx2d.font = element.style.toLowerCase();
if (!element.color) {
element.color = this.options.defaultHyperlinkColor;
}
ctx2d.fillStyle = element.color;
if (element.underline === void 0) {
element.underline = true;
}
ctx2d.fillText(element.value, x, y);
ctx2d.restore();
}
}
class Header {
constructor(draw, data2) {
this.draw = draw;
this.position = draw.getPosition();
this.options = draw.getOptions();
this.elementList = data2 || [];
this.rowList = [];
this.positionList = [];
}
getRowList() {
return this.rowList;
}
setElementList(elementList) {
this.elementList = elementList;
}
getElementList() {
return this.elementList;
}
getPositionList() {
return this.positionList;
}
compute() {
this.recovery();
this._computeRowList();
this._computePositionList();
}
recovery() {
this.rowList = [];
this.positionList = [];
}
_computeRowList() {
const innerWidth = this.draw.getInnerWidth();
const margins = this.draw.getMargins();
const surroundElementList = pickSurroundElementList(this.elementList);
this.rowList = this.draw.computeRowList({
startX: margins[3],
startY: this.getHeaderTop(),
innerWidth,
elementList: this.elementList,
surroundElementList
});
}
_computePositionList() {
const headerTop = this.getHeaderTop();
const innerWidth = this.draw.getInnerWidth();
const margins = this.draw.getMargins();
const startX = margins[3];
const startY = headerTop;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX,
startY,
innerWidth,
zone: EditorZone.HEADER
});
}
getHeaderTop() {
const {
header: { top, disabled },
scale
} = this.options;
if (disabled)
return 0;
return Math.floor(top * scale);
}
getMaxHeight() {
const {
header: { maxHeightRadio }
} = this.options;
const height = this.draw.getHeight();
return Math.floor(height * maxHeightRadioMapping[maxHeightRadio]);
}
getHeight() {
const maxHeight = this.getMaxHeight();
const rowHeight = this.getRowHeight();
return rowHeight > maxHeight ? maxHeight : rowHeight;
}
getRowHeight() {
return this.rowList.reduce((pre, cur) => pre + cur.height, 0);
}
getExtraHeight() {
const margins = this.draw.getMargins();
const headerHeight = this.getHeight();
const headerTop = this.getHeaderTop();
const extraHeight = headerTop + headerHeight - margins[0];
return extraHeight <= 0 ? 0 : extraHeight;
}
render(ctx2d, pageNo) {
ctx2d.globalAlpha = 1;
const innerWidth = this.draw.getInnerWidth();
const maxHeight = this.getMaxHeight();
const rowList = [];
let curRowHeight = 0;
for (let r = 0; r < this.rowList.length; r++) {
const row = this.rowList[r];
if (curRowHeight + row.height > maxHeight) {
break;
}
rowList.push(row);
curRowHeight += row.height;
}
this.draw.drawRow(ctx2d, {
elementList: this.elementList,
positionList: this.draw.getHeader().getPositionList(),
rowList,
pageNo,
startIndex: 0,
innerWidth,
zone: EditorZone.HEADER
});
}
}
class SuperscriptParticle {
getOffsetY(element) {
return -element.metrics.height / 2;
}
render(ctx2d, element, x, y) {
ctx2d.save();
ctx2d.font = element.style;
if (element.color) {
ctx2d.fillStyle = element.color;
}
ctx2d.fillText(element.value, x, y + this.getOffsetY(element));
ctx2d.restore();
}
}
class SubscriptParticle {
getOffsetY(element) {
return element.metrics.height / 2;
}
render(ctx2d, element, x, y) {
ctx2d.save();
ctx2d.font = element.style;
if (element.color) {
ctx2d.fillStyle = element.color;
}
ctx2d.fillText(element.value, x, y + this.getOffsetY(element));
ctx2d.restore();
}
}
class SeparatorParticle {
constructor(draw) {
this.options = draw.getOptions();
}
render(ctx2d, element, x, y) {
var _a;
ctx2d.save();
const {
scale,
separator: { lineWidth, strokeStyle }
} = this.options;
ctx2d.lineWidth = lineWidth * scale;
ctx2d.strokeStyle = element.color || strokeStyle;
if ((_a = element.dashArray) == null ? void 0 : _a.length)
;
const offsetY = Math.round(y);
ctx2d.translate(0, ctx2d.lineWidth / 2);
ctx2d.beginPath();
ctx2d.moveTo(x, offsetY);
ctx2d.lineTo(x + element.width * scale, offsetY);
ctx2d.stroke();
ctx2d.restore();
}
}
var WatermarkType = /* @__PURE__ */ ((WatermarkType2) => {
WatermarkType2["TEXT"] = "text";
WatermarkType2["IMAGE"] = "image";
return WatermarkType2;
})(WatermarkType || {});
class Watermark {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
this.imageCache = /* @__PURE__ */ new Map();
}
renderText(ctx2d, pageNo) {
const {
watermark: { data: data2, opacity, font, size, color, repeat, gap, numberType },
scale
} = this.options;
const width = this.draw.getWidth();
const height = this.draw.getHeight();
ctx2d.save();
this.draw.getPdf().setGState(new GState({
opacity
}));
ctx2d.globalAlpha = opacity;
ctx2d.font = `${size * scale}px ${font}`;
let text = data2;
const pageNoReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_NO);
if (pageNoReg.test(text)) {
text = PageNumber.formatNumberPlaceholder(
text,
pageNo + 1,
pageNoReg,
numberType
);
}
const pageCountReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_COUNT);
if (pageCountReg.test(text)) {
text = PageNumber.formatNumberPlaceholder(
text,
this.draw.getPageCount(),
pageCountReg,
numberType
);
}
const measureText = this.draw.getFakeCtx().measureText(data2);
if (repeat) {
const dpr = this.draw.getPagePixelRatio();
const temporaryCanvas = document.createElement("canvas");
const temporaryCtx = temporaryCanvas.getContext("2d");
const textWidth = measureText.width;
const textHeight = measureText.actualBoundingBoxAscent + measureText.actualBoundingBoxDescent;
const diagonalLength = Math.sqrt(
Math.pow(textWidth, 2) + Math.pow(textHeight, 2)
);
const patternWidth = diagonalLength + 2 * gap[0] * scale;
const patternHeight = diagonalLength + 2 * gap[1] * scale;
temporaryCanvas.width = patternWidth;
temporaryCanvas.height = patternHeight;
temporaryCanvas.style.width = `${patternWidth * dpr}px`;
temporaryCanvas.style.height = `${patternHeight * dpr}px`;
temporaryCtx.translate(patternWidth / 2, patternHeight / 2);
temporaryCtx.rotate(-45 * Math.PI / 180);
temporaryCtx.translate(-patternWidth / 2, -patternHeight / 2);
temporaryCtx.font = `${size * scale}px ${font}`;
temporaryCtx.fillStyle = color;
temporaryCtx.fillText(
data2,
(patternWidth - textWidth) / 2,
(patternHeight - textHeight) / 2 + measureText.actualBoundingBoxAscent
);
ctx2d.createPattern();
ctx2d.fillRect(0, 0, width, height);
} else {
const x = width / 2.8;
const y = height;
ctx2d.globalAlpha = opacity;
ctx2d.font = `${size * scale}px ${font}`;
ctx2d.fillStyle = color;
ctx2d.translate(x, y);
ctx2d.rotate(-45 * Math.PI / 180);
ctx2d.fillText(
data2,
-measureText.width / 2,
measureText.actualBoundingBoxAscent - size * 2
);
}
this.draw.getPdf().setGState(new GState({
opacity: 1
}));
ctx2d.restore();
}
renderImage(ctx2d) {
const {
watermark: { width, height, data: data2, opacity, repeat, gap },
scale
} = this.options;
if (!this.imageCache.has(data2))
;
const docWidth = this.draw.getWidth();
const docHeight = this.draw.getHeight();
const imageWidth = width * scale;
const imageHeight = height * scale;
ctx2d.save();
ctx2d.globalAlpha = opacity;
if (repeat) {
const dpr = this.draw.getPagePixelRatio();
const temporaryCanvas = document.createElement("canvas");
const temporaryCtx = temporaryCanvas.getContext("2d");
const diagonalLength = Math.sqrt(
Math.pow(imageWidth, 2) + Math.pow(imageHeight, 2)
);
const patternWidth = diagonalLength + 2 * gap[0] * scale;
const patternHeight = diagonalLength + 2 * gap[1] * scale;
temporaryCanvas.width = patternWidth;
temporaryCanvas.height = patternHeight;
temporaryCanvas.style.width = `${patternWidth * dpr}px`;
temporaryCanvas.style.height = `${patternHeight * dpr}px`;
temporaryCtx.translate(patternWidth / 2, patternHeight / 2);
temporaryCtx.rotate(-45 * Math.PI / 180);
temporaryCtx.translate(-patternWidth / 2, -patternHeight / 2);
temporaryCtx.drawImage(
this.imageCache.get(data2),
(patternWidth - imageWidth) / 2,
(patternHeight - imageHeight) / 2,
imageWidth,
imageHeight
);
ctx2d.createPattern();
ctx2d.fillRect(0, 0, docWidth, docHeight);
} else {
this.draw.getPdf().addImage(
data2,
"PNG",
docWidth * 45 / 100,
docHeight * 35 / 100,
imageWidth,
imageHeight,
void 0,
"FAST",
45
);
}
ctx2d.restore();
}
render(ctx2d, pageNo) {
if (this.options.watermark.type === WatermarkType.IMAGE) {
this.renderImage(ctx2d);
} else {
this.renderText(ctx2d, pageNo);
}
}
}
class CheckboxParticle {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
setSelect(element) {
const { checkbox } = element;
if (checkbox) {
checkbox.value = !checkbox.value;
} else {
element.checkbox = {
value: true
};
}
this.draw.render({
isCompute: false,
isSetCursor: false
});
}
render(payload) {
const { ctx2d, x, index, row } = payload;
let { y } = payload;
const {
checkbox: { gap, lineWidth, fillStyle, strokeStyle, verticalAlign },
scale
} = this.options;
const { metrics, checkbox } = row.elementList[index];
if (verticalAlign === VerticalAlign.TOP || verticalAlign === VerticalAlign.MIDDLE) {
let nextIndex = index + 1;
let nextElement = null;
while (nextIndex < row.elementList.length) {
nextElement = row.elementList[nextIndex];
if (nextElement.value !== ZERO && nextElement.value !== NBSP)
break;
nextIndex++;
}
if (nextElement) {
const {
metrics: { boundingBoxAscent, boundingBoxDescent }
} = nextElement;
const textHeight = boundingBoxAscent + boundingBoxDescent;
if (textHeight > metrics.height) {
if (verticalAlign === VerticalAlign.TOP) {
y -= boundingBoxAscent - metrics.height;
} else if (verticalAlign === VerticalAlign.MIDDLE) {
y -= (textHeight - metrics.height) / 2;
}
}
}
}
const left = Math.round(x + gap * scale);
const top = Math.round(y - metrics.height + lineWidth);
const width = metrics.width - gap * 2 * scale;
const height = metrics.height;
ctx2d.save();
ctx2d.beginPath();
ctx2d.translate(0.5, 0.5);
if (checkbox == null ? void 0 : checkbox.value) {
ctx2d.lineWidth = lineWidth;
ctx2d.strokeStyle = fillStyle;
ctx2d.rect(left, top, width, height);
ctx2d.stroke();
ctx2d.beginPath();
ctx2d.fillStyle = fillStyle;
ctx2d.fillRect(left, top, width, height);
ctx2d.beginPath();
ctx2d.strokeStyle = strokeStyle;
ctx2d.lineWidth = lineWidth * 2 * scale;
ctx2d.moveTo(left + 2 * scale, top + height / 2);
ctx2d.lineTo(left + width / 2, top + height - 3 * scale);
ctx2d.lineTo(left + width - 2 * scale, top + 3 * scale);
ctx2d.stroke();
} else {
ctx2d.lineWidth = lineWidth;
ctx2d.rect(left, top, width, height);
ctx2d.stroke();
}
ctx2d.closePath();
ctx2d.restore();
}
}
class RadioParticle {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
setSelect(element) {
const { radio } = element;
if (radio) {
radio.value = !radio.value;
} else {
element.radio = {
value: true
};
}
this.draw.render({
isCompute: false,
isSetCursor: false
});
}
render(payload) {
const { ctx2d, x, index, row } = payload;
let { y } = payload;
const {
radio: { gap, lineWidth, fillStyle, strokeStyle, verticalAlign },
scale
} = this.options;
const { metrics, radio } = row.elementList[index];
if (verticalAlign === VerticalAlign.TOP || verticalAlign === VerticalAlign.MIDDLE) {
let nextIndex = index + 1;
let nextElement = null;
while (nextIndex < row.elementList.length) {
nextElement = row.elementList[nextIndex];
if (nextElement.value !== ZERO && nextElement.value !== NBSP)
break;
nextIndex++;
}
if (nextElement) {
const {
metrics: { boundingBoxAscent, boundingBoxDescent }
} = nextElement;
const textHeight = boundingBoxAscent + boundingBoxDescent;
if (textHeight > metrics.height) {
if (verticalAlign === VerticalAlign.TOP) {
y -= boundingBoxAscent - metrics.height;
} else if (verticalAlign === VerticalAlign.MIDDLE) {
y -= (textHeight - metrics.height) / 2;
}
}
}
}
const left = Math.round(x + gap * scale);
const top = Math.round(y - metrics.height + lineWidth);
const width = metrics.width - gap * 2 * scale;
const height = metrics.height;
ctx2d.save();
ctx2d.beginPath();
ctx2d.translate(0.5, 0.5);
ctx2d.strokeStyle = (radio == null ? void 0 : radio.value) ? fillStyle : strokeStyle;
ctx2d.lineWidth = lineWidth;
ctx2d.arc(left + width / 2, top + height / 2, width / 2, 0, Math.PI * 2, true);
ctx2d.stroke();
if (radio == null ? void 0 : radio.value) {
ctx2d.beginPath();
ctx2d.fillStyle = fillStyle;
ctx2d.arc(left + width / 2, top + height / 2, width / 3, 0, Math.PI * 2, true);
ctx2d.fill();
}
ctx2d.closePath();
ctx2d.restore();
}
}
class DatePicker {
constructor(draw, options = {}) {
this.draw = draw;
this.options = options;
this.lang = this._getLang();
this.now = new Date();
this.dom = this._createDom();
this.renderOptions = null;
this.isDatePicker = true;
this.pickDate = null;
this._bindEvent();
}
_createDom() {
const datePickerContainer = document.createElement("div");
datePickerContainer.classList.add(`${EDITOR_PREFIX}-date-container`);
datePickerContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP);
const dateWrap = document.createElement("div");
dateWrap.classList.add(`${EDITOR_PREFIX}-date-wrap`);
const datePickerTitle = document.createElement("div");
datePickerTitle.classList.add(`${EDITOR_PREFIX}-date-title`);
const preYearTitle = document.createElement("span");
preYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-year`);
preYearTitle.innerText = `<<`;
const preMonthTitle = document.createElement("span");
preMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-month`);
preMonthTitle.innerText = `<`;
const nowTitle = document.createElement("span");
nowTitle.classList.add(`${EDITOR_PREFIX}-date-title__now`);
const nextMonthTitle = document.createElement("span");
nextMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-month`);
nextMonthTitle.innerText = `>`;
const nextYearTitle = document.createElement("span");
nextYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-year`);
nextYearTitle.innerText = `>>`;
datePickerTitle.append(preYearTitle);
datePickerTitle.append(preMonthTitle);
datePickerTitle.append(nowTitle);
datePickerTitle.append(nextMonthTitle);
datePickerTitle.append(nextYearTitle);
const datePickerWeek = document.createElement("div");
datePickerWeek.classList.add(`${EDITOR_PREFIX}-date-week`);
const {
weeks: { sun, mon, tue, wed, thu, fri, sat }
} = this.lang;
const weekList = [sun, mon, tue, wed, thu, fri, sat];
weekList.forEach((week) => {
const weekDom = document.createElement("span");
weekDom.innerText = `${week}`;
datePickerWeek.append(weekDom);
});
const datePickerDay = document.createElement("div");
datePickerDay.classList.add(`${EDITOR_PREFIX}-date-day`);
dateWrap.append(datePickerTitle);
dateWrap.append(datePickerWeek);
dateWrap.append(datePickerDay);
const timeWrap = document.createElement("ul");
timeWrap.classList.add(`${EDITOR_PREFIX}-time-wrap`);
let hourTime;
let minuteTime;
let secondTime;
const timeList = [this.lang.hour, this.lang.minute, this.lang.second];
timeList.forEach((t, i) => {
const li = document.createElement("li");
const timeText = document.createElement("span");
timeText.innerText = t;
li.append(timeText);
const ol = document.createElement("ol");
const isHour = i === 0;
const isMinute = i === 1;
const endIndex = isHour ? 24 : 60;
for (let i2 = 0; i2 < endIndex; i2++) {
const time = document.createElement("li");
time.innerText = `${String(i2).padStart(2, "0")}`;
time.setAttribute("data-id", `${i2}`);
ol.append(time);
}
if (isHour) {
hourTime = ol;
} else if (isMinute) {
minuteTime = ol;
} else {
secondTime = ol;
}
li.append(ol);
timeWrap.append(li);
});
const datePickerMenu = document.createElement("div");
datePickerMenu.classList.add(`${EDITOR_PREFIX}-date-menu`);
const timeMenu = document.createElement("button");
timeMenu.classList.add(`${EDITOR_PREFIX}-date-menu__time`);
timeMenu.innerText = this.lang.timeSelect;
const nowMenu = document.createElement("button");
nowMenu.classList.add(`${EDITOR_PREFIX}-date-menu__now`);
nowMenu.innerText = this.lang.now;
const submitMenu = document.createElement("button");
submitMenu.classList.add(`${EDITOR_PREFIX}-date-menu__submit`);
submitMenu.innerText = this.lang.confirm;
datePickerMenu.append(timeMenu);
datePickerMenu.append(nowMenu);
datePickerMenu.append(submitMenu);
datePickerContainer.append(dateWrap);
datePickerContainer.append(timeWrap);
datePickerContainer.append(datePickerMenu);
return {
container: datePickerContainer,
dateWrap,
datePickerWeek,
timeWrap,
title: {
preYear: preYearTitle,
preMonth: preMonthTitle,
now: nowTitle,
nextMonth: nextMonthTitle,
nextYear: nextYearTitle
},
day: datePickerDay,
time: {
hour: hourTime,
minute: minuteTime,
second: secondTime
},
menu: {
time: timeMenu,
now: nowMenu,
submit: submitMenu
}
};
}
_bindEvent() {
this.dom.title.preYear.onclick = () => {
this._preYear();
};
this.dom.title.preMonth.onclick = () => {
this._preMonth();
};
this.dom.title.nextMonth.onclick = () => {
this._nextMonth();
};
this.dom.title.nextYear.onclick = () => {
this._nextYear();
};
this.dom.menu.time.onclick = () => {
this.isDatePicker = !this.isDatePicker;
this._toggleDateTimePicker();
};
this.dom.menu.now.onclick = () => {
this._now();
this._submit();
};
this.dom.menu.submit.onclick = () => {
this.dispose();
this._submit();
};
this.dom.time.hour.onclick = (evt) => {
if (!this.pickDate)
return;
const li = evt.target;
const id = li.dataset.id;
if (!id)
return;
this.pickDate.setHours(Number(id));
this._setTimePick(false);
};
this.dom.time.minute.onclick = (evt) => {
if (!this.pickDate)
return;
const li = evt.target;
const id = li.dataset.id;
if (!id)
return;
this.pickDate.setMinutes(Number(id));
this._setTimePick(false);
};
this.dom.time.second.onclick = (evt) => {
if (!this.pickDate)
return;
const li = evt.target;
const id = li.dataset.id;
if (!id)
return;
this.pickDate.setSeconds(Number(id));
this._setTimePick(false);
};
}
_setPosition() {
if (!this.renderOptions)
return;
const {
position: {
coordinate: {
leftTop: [left, top]
},
lineHeight,
pageNo
}
} = this.renderOptions;
const height = this.draw.getHeight();
const pageGap = this.draw.getPageGap();
const currentPageNo = pageNo != null ? pageNo : this.draw.getPageNo();
const preY = currentPageNo * (height + pageGap);
this.dom.container.style.left = `${left}px`;
this.dom.container.style.top = `${top + preY + lineHeight}px`;
}
isInvalidDate(value) {
return value.toDateString() === "Invalid Date";
}
_setValue() {
var _a;
const value = (_a = this.renderOptions) == null ? void 0 : _a.value;
if (value) {
const setDate = new Date(value);
this.now = this.isInvalidDate(setDate) ? new Date() : setDate;
} else {
this.now = new Date();
}
this.pickDate = new Date(this.now);
}
_getLang() {
const i18n = this.draw.getI18n();
const t = i18n.t.bind(i18n);
return {
now: t("datePicker.now"),
confirm: t("datePicker.confirm"),
return: t("datePicker.return"),
timeSelect: t("datePicker.timeSelect"),
weeks: {
sun: t("datePicker.weeks.sun"),
mon: t("datePicker.weeks.mon"),
tue: t("datePicker.weeks.tue"),
wed: t("datePicker.weeks.wed"),
thu: t("datePicker.weeks.thu"),
fri: t("datePicker.weeks.fri"),
sat: t("datePicker.weeks.sat")
},
year: t("datePicker.year"),
month: t("datePicker.month"),
hour: t("datePicker.hour"),
minute: t("datePicker.minute"),
second: t("datePicker.second")
};
}
_setLangChange() {
this.dom.menu.time.innerText = this.lang.timeSelect;
this.dom.menu.now.innerText = this.lang.now;
this.dom.menu.submit.innerText = this.lang.confirm;
const {
weeks: { sun, mon, tue, wed, thu, fri, sat }
} = this.lang;
const weekList = [sun, mon, tue, wed, thu, fri, sat];
this.dom.datePickerWeek.childNodes.forEach((child, i) => {
const childElement = child;
childElement.innerText = weekList[i];
});
const hourTitle = this.dom.time.hour.previousElementSibling;
hourTitle.innerText = this.lang.hour;
const minuteTitle = this.dom.time.minute.previousElementSibling;
minuteTitle.innerText = this.lang.minute;
const secondTitle = this.dom.time.second.previousElementSibling;
secondTitle.innerText = this.lang.second;
}
_update() {
const localDate = new Date();
const localYear = localDate.getFullYear();
const localMonth = localDate.getMonth() + 1;
const localDay = localDate.getDate();
let pickYear = null;
let pickMonth = null;
let pickDay = null;
if (this.pickDate) {
pickYear = this.pickDate.getFullYear();
pickMonth = this.pickDate.getMonth() + 1;
pickDay = this.pickDate.getDate();
}
const year = this.now.getFullYear();
const month = this.now.getMonth() + 1;
this.dom.title.now.innerText = `${year}${this.lang.year} ${String(
month
).padStart(2, "0")}${this.lang.month}`;
const curDate = new Date(year, month, 0);
const curDay = curDate.getDate();
let curWeek = new Date(year, month - 1, 1).getDay();
if (curWeek === 0) {
curWeek = 7;
}
const preDay = new Date(year, month - 1, 0).getDate();
this.dom.day.innerHTML = "";
const preStartDay = preDay - curWeek + 1;
for (let i = preStartDay; i <= preDay; i++) {
const dayDom = document.createElement("div");
dayDom.classList.add("disable");
dayDom.innerText = `${i}`;
dayDom.onclick = () => {
const newMonth = month - 2;
this.now = new Date(year, newMonth, i);
this._setDatePick(year, newMonth, i);
};
this.dom.day.append(dayDom);
}
for (let i = 1; i <= curDay; i++) {
const dayDom = document.createElement("div");
if (localYear === year && localMonth === month && localDay === i) {
dayDom.classList.add("active");
}
if (this.pickDate && pickYear === year && pickMonth === month && pickDay === i) {
dayDom.classList.add("select");
}
dayDom.innerText = `${i}`;
dayDom.onclick = (evt) => {
const newMonth = month - 1;
this.now = new Date(year, newMonth, i);
this._setDatePick(year, newMonth, i);
evt.stopPropagation();
};
this.dom.day.append(dayDom);
}
const nextEndDay = 6 * 7 - curWeek - curDay;
for (let i = 1; i <= nextEndDay; i++) {
const dayDom = document.createElement("div");
dayDom.classList.add("disable");
dayDom.innerText = `${i}`;
dayDom.onclick = () => {
this.now = new Date(year, month, i);
this._setDatePick(year, month, i);
};
this.dom.day.append(dayDom);
}
}
_toggleDateTimePicker() {
if (this.isDatePicker) {
this.dom.dateWrap.classList.add("active");
this.dom.timeWrap.classList.remove("active");
this.dom.menu.time.innerText = this.lang.timeSelect;
} else {
this.dom.dateWrap.classList.remove("active");
this.dom.timeWrap.classList.add("active");
this.dom.menu.time.innerText = this.lang.return;
this._setTimePick();
}
}
_setDatePick(year, month, day) {
var _a, _b, _c;
this.now = new Date(year, month, day);
(_a = this.pickDate) == null ? void 0 : _a.setFullYear(year);
(_b = this.pickDate) == null ? void 0 : _b.setMonth(month);
(_c = this.pickDate) == null ? void 0 : _c.setDate(day);
this._update();
}
_setTimePick(isIntoView = true) {
var _a, _b, _c;
const hour = ((_a = this.pickDate) == null ? void 0 : _a.getHours()) || 0;
const minute = ((_b = this.pickDate) == null ? void 0 : _b.getMinutes()) || 0;
const second = ((_c = this.pickDate) == null ? void 0 : _c.getSeconds()) || 0;
const {
hour: hourDom,
minute: minuteDom,
second: secondDom
} = this.dom.time;
const timeDomList = [hourDom, minuteDom, secondDom];
timeDomList.forEach((timeDom) => {
timeDom.querySelectorAll("li").forEach((li) => li.classList.remove("active"));
});
const pickList = [
[hourDom, hour],
[minuteDom, minute],
[secondDom, second]
];
pickList.forEach(([dom, time]) => {
const pickDom = dom.querySelector(`[data-id='${time}']`);
pickDom.classList.add("active");
if (isIntoView) {
this._scrollIntoView(dom, pickDom);
}
});
}
_scrollIntoView(container, selected) {
if (!selected) {
container.scrollTop = 0;
return;
}
const offsetParents = [];
let pointer = selected.offsetParent;
while (pointer && container !== pointer && container.contains(pointer)) {
offsetParents.push(pointer);
pointer = pointer.offsetParent;
}
const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);
const bottom = top + selected.offsetHeight;
const viewRectTop = container.scrollTop;
const viewRectBottom = viewRectTop + container.clientHeight;
if (top < viewRectTop) {
container.scrollTop = top;
} else if (bottom > viewRectBottom) {
container.scrollTop = bottom - container.clientHeight;
}
}
_preMonth() {
this.now.setMonth(this.now.getMonth() - 1);
this._update();
}
_nextMonth() {
this.now.setMonth(this.now.getMonth() + 1);
this._update();
}
_preYear() {
this.now.setFullYear(this.now.getFullYear() - 1);
this._update();
}
_nextYear() {
this.now.setFullYear(this.now.getFullYear() + 1);
this._update();
}
_now() {
this.pickDate = new Date();
this.dispose();
}
_toggleVisible(isVisible) {
if (isVisible) {
this.dom.container.classList.add("active");
} else {
this.dom.container.classList.remove("active");
}
}
_submit() {
var _a;
if (this.options.onSubmit && this.pickDate) {
const format = (_a = this.renderOptions) == null ? void 0 : _a.dateFormat;
const pickDateString = this.formatDate(this.pickDate, format);
this.options.onSubmit(pickDateString);
}
}
formatDate(date, format = "yyyy-MM-dd hh:mm:ss") {
let dateString = format;
const dateOption = {
"y+": date.getFullYear().toString(),
"M+": (date.getMonth() + 1).toString(),
"d+": date.getDate().toString(),
"h+": date.getHours().toString(),
"m+": date.getMinutes().toString(),
"s+": date.getSeconds().toString()
};
for (const k in dateOption) {
const reg = new RegExp("(" + k + ")").exec(format);
const key = k;
if (reg) {
dateString = dateString.replace(
reg[1],
reg[1].length === 1 ? dateOption[key] : dateOption[key].padStart(reg[1].length, "0")
);
}
}
return dateString;
}
render(option) {
this.renderOptions = option;
this.lang = this._getLang();
this._setLangChange();
this._setValue();
this._update();
this._setPosition();
this.isDatePicker = true;
this._toggleDateTimePicker();
this._toggleVisible(true);
}
dispose() {
this._toggleVisible(false);
}
destroy() {
this.dom.container.remove();
}
}
class DateParticle {
constructor(draw) {
this.datePicker = new DatePicker(draw, {});
}
clearDatePicker() {
this.datePicker.dispose();
}
renderDatePicker(element, position) {
console.log(element, position);
}
}
var BlockType = /* @__PURE__ */ ((BlockType2) => {
BlockType2["IFRAME"] = "iframe";
BlockType2["VIDEO"] = "video";
return BlockType2;
})(BlockType || {});
const _IFrameBlock = class {
constructor(element) {
this.element = element;
}
_defineIframeProperties(iframeWindow) {
Object.defineProperties(iframeWindow, {
parent: {
get: () => null
},
__POWERED_BY_CANVAS_EDITOR__: {
get: () => true
}
});
}
render(blockItemContainer) {
var _a, _b;
const block = this.element.block;
const iframe = document.createElement("iframe");
iframe.setAttribute("data-id", this.element.id);
iframe.sandbox.add(..._IFrameBlock.sandbox);
iframe.style.border = "none";
iframe.style.width = "100%";
iframe.style.height = "100%";
if ((_a = block.iframeBlock) == null ? void 0 : _a.src) {
iframe.src = block.iframeBlock.src;
} else if ((_b = block.iframeBlock) == null ? void 0 : _b.srcdoc) {
iframe.srcdoc = block.iframeBlock.srcdoc;
}
blockItemContainer.append(iframe);
this._defineIframeProperties(iframe.contentWindow);
}
};
let IFrameBlock = _IFrameBlock;
IFrameBlock.sandbox = ["allow-scripts", "allow-same-origin"];
class VideoBlock {
constructor(element) {
this.element = element;
}
render(blockItemContainer) {
var _a;
const block = this.element.block;
const video = document.createElement("video");
video.style.width = "100%";
video.style.height = "100%";
video.style.objectFit = "contain";
video.src = ((_a = block.videoBlock) == null ? void 0 : _a.src) || "";
video.controls = true;
video.crossOrigin = "anonymous";
blockItemContainer.append(video);
}
}
class BaseBlock {
constructor(blockParticle, element) {
this.draw = blockParticle.getDraw();
this.blockContainer = blockParticle.getBlockContainer();
this.element = element;
this.block = null;
this.blockItem = this._createBlockItem();
this.blockContainer.append(this.blockItem);
}
getBlockElement() {
return this.element;
}
_createBlockItem() {
const blockItem = document.createElement("div");
blockItem.classList.add(`${EDITOR_PREFIX}-block-item`);
return blockItem;
}
render() {
const block = this.element.block;
if (block.type === BlockType.IFRAME) {
this.block = new IFrameBlock(this.element);
this.block.render(this.blockItem);
} else if (block.type === BlockType.VIDEO) {
this.block = new VideoBlock(this.element);
this.block.render(this.blockItem);
}
}
setClientRects(pageNo, x, y) {
const height = this.draw.getHeight();
const pageGap = this.draw.getPageGap();
const preY = pageNo * (height + pageGap);
const { metrics } = this.element;
this.blockItem.style.width = `${metrics.width}px`;
this.blockItem.style.height = `${metrics.height}px`;
this.blockItem.style.left = `${x}px`;
this.blockItem.style.top = `${preY + y}px`;
}
remove() {
this.blockItem.remove();
}
}
class BlockParticle {
constructor(draw) {
this.draw = draw;
this.blockMap = /* @__PURE__ */ new Map();
this.blockContainer = this._createBlockContainer();
}
_createBlockContainer() {
const blockContainer = document.createElement("div");
blockContainer.classList.add(`${EDITOR_PREFIX}-block-container`);
return blockContainer;
}
getDraw() {
return this.draw;
}
getBlockContainer() {
return this.blockContainer;
}
render(pageNo, element, x, y) {
const id = element.id;
const cacheBlock = this.blockMap.get(id);
if (cacheBlock) {
cacheBlock.setClientRects(pageNo, x, y);
} else {
const newBlock = new BaseBlock(this, element);
newBlock.render();
newBlock.setClientRects(pageNo, x, y);
this.blockMap.set(id, newBlock);
}
}
clear() {
if (!this.blockMap.size)
return;
const elementList = this.draw.getElementList();
const blockElementIds = [];
for (let e = 0; e < elementList.length; e++) {
const element = elementList[e];
if (element.type === ElementType.BLOCK) {
blockElementIds.push(element.id);
}
}
this.blockMap.forEach((block) => {
const id = block.getBlockElement().id;
if (!blockElementIds.includes(id)) {
block.remove();
this.blockMap.delete(id);
}
});
}
}
const contextmenu$1 = {
global: {
cut: "\u526A\u5207",
copy: "\u590D\u5236",
paste: "\u7C98\u8D34",
selectAll: "\u5168\u9009",
print: "\u6253\u5370"
},
control: {
"delete": "\u5220\u9664\u63A7\u4EF6"
},
hyperlink: {
"delete": "\u5220\u9664\u94FE\u63A5",
cancel: "\u53D6\u6D88\u94FE\u63A5",
edit: "\u7F16\u8F91\u94FE\u63A5"
},
image: {
change: "\u66F4\u6539\u56FE\u7247",
saveAs: "\u53E6\u5B58\u4E3A\u56FE\u7247",
textWrap: "\u6587\u5B57\u73AF\u7ED5",
textWrapType: {
embed: "\u5D4C\u5165\u578B",
upDown: "\u4E0A\u4E0B\u578B\u73AF\u7ED5",
surround: "\u56DB\u5468\u578B\u73AF\u7ED5",
floatTop: "\u6D6E\u4E8E\u6587\u5B57\u4E0A\u65B9",
floatBottom: "\u886C\u4E8E\u6587\u5B57\u4E0B\u65B9"
}
},
table: {
insertRowCol: "\u63D2\u5165\u884C\u5217",
insertTopRow: "\u4E0A\u65B9\u63D2\u51651\u884C",
insertBottomRow: "\u4E0B\u65B9\u63D2\u51651\u884C",
insertLeftCol: "\u5DE6\u4FA7\u63D2\u51651\u5217",
insertRightCol: "\u53F3\u4FA7\u63D2\u51651\u5217",
deleteRowCol: "\u5220\u9664\u884C\u5217",
deleteRow: "\u5220\u96641\u884C",
deleteCol: "\u5220\u96641\u5217",
deleteTable: "\u5220\u9664\u6574\u4E2A\u8868\u683C",
mergeCell: "\u5408\u5E76\u5355\u5143\u683C",
mergeCancelCell: "\u53D6\u6D88\u5408\u5E76",
verticalAlign: "\u5782\u76F4\u5BF9\u9F50",
verticalAlignTop: "\u9876\u7AEF\u5BF9\u9F50",
verticalAlignMiddle: "\u5782\u76F4\u5C45\u4E2D",
verticalAlignBottom: "\u5E95\u7AEF\u5BF9\u9F50",
border: "\u8868\u683C\u8FB9\u6846",
borderAll: "\u6240\u6709\u6846\u7EBF",
borderEmpty: "\u65E0\u6846\u7EBF",
borderExternal: "\u5916\u4FA7\u6846\u7EBF",
borderTd: "\u5355\u5143\u683C\u8FB9\u6846",
borderTdTop: "\u4E0A\u8FB9\u6846",
borderTdRight: "\u53F3\u8FB9\u6846",
borderTdBottom: "\u4E0B\u8FB9\u6846",
borderTdLeft: "\u5DE6\u8FB9\u6846",
borderTdForward: "\u6B63\u659C\u7EBF",
borderTdBack: "\u53CD\u659C\u7EBF"
}
};
const datePicker$1 = {
now: "\u6B64\u523B",
confirm: "\u786E\u5B9A",
"return": "\u8FD4\u56DE\u65E5\u671F",
timeSelect: "\u65F6\u95F4\u9009\u62E9",
weeks: {
sun: "\u65E5",
mon: "\u4E00",
tue: "\u4E8C",
wed: "\u4E09",
thu: "\u56DB",
fri: "\u4E94",
sat: "\u516D"
},
year: "\u5E74",
month: "\u6708",
hour: "\u65F6",
minute: "\u5206",
second: "\u79D2"
};
const frame$1 = {
header: "\u9875\u7709",
footer: "\u9875\u811A"
};
const pageBreak$1 = {
displayName: "\u5206\u9875\u7B26"
};
const zone$1 = {
headerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u7709",
footerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u811A"
};
var zhCN = {
contextmenu: contextmenu$1,
datePicker: datePicker$1,
frame: frame$1,
pageBreak: pageBreak$1,
zone: zone$1
};
const contextmenu = {
global: {
cut: "Cut",
copy: "Copy",
paste: "Paste",
selectAll: "Select all",
print: "Print"
},
control: {
"delete": "Delete control"
},
hyperlink: {
"delete": "Delete hyperlink",
cancel: "Cancel hyperlink",
edit: "Edit hyperlink"
},
image: {
change: "Change image",
saveAs: "Save as image",
textWrap: "Text wrap",
textWrapType: {
embed: "Embed",
upDown: "Up down",
surround: "Surround",
floatTop: "Float above text",
floatBottom: "Float below text"
}
},
table: {
insertRowCol: "Insert row col",
insertTopRow: "Insert top 1 row",
insertBottomRow: "Insert bottom 1 row",
insertLeftCol: "Insert left 1 col",
insertRightCol: "Insert right 1 col",
deleteRowCol: "Delete row col",
deleteRow: "Delete 1 row",
deleteCol: "Delete 1 col",
deleteTable: "Delete table",
mergeCell: "Merge cell",
mergeCancelCell: "Cancel merge cell",
verticalAlign: "Vertical align",
verticalAlignTop: "Top",
verticalAlignMiddle: "Middle",
verticalAlignBottom: "Bottom",
border: "Table border",
borderAll: "All",
borderEmpty: "Empty",
borderExternal: "External",
borderTd: "Table cell border",
borderTdTop: "Top",
borderTdRight: "Right",
borderTdBottom: "Bottom",
borderTdLeft: "Left",
borderTdForward: "Forward",
borderTdBack: "Back"
}
};
const datePicker = {
now: "Now",
confirm: "Confirm",
"return": "Return",
timeSelect: "Time select",
weeks: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
year: " ",
month: " ",
hour: "Hour",
minute: "Minute",
second: "Second"
};
const frame = {
header: "Header",
footer: "Footer"
};
const pageBreak = {
displayName: "Page Break"
};
const zone = {
headerTip: "Double click to edit header",
footerTip: "Double click to edit footer"
};
var en = {
contextmenu,
datePicker,
frame,
pageBreak,
zone
};
class I18n {
constructor() {
this.langMap = /* @__PURE__ */ new Map([
["zhCN", zhCN],
["en", en]
]);
this.currentLocale = "zhCN";
}
registerLangMap(locale, lang) {
const sourceLang = this.langMap.get(locale);
this.langMap.set(locale, mergeObject(sourceLang || zhCN, lang));
}
getLocale() {
return this.currentLocale;
}
setLocale(locale) {
this.currentLocale = locale;
}
getLang() {
return this.langMap.get(this.currentLocale) || zhCN;
}
t(path) {
const keyList = path.split(".");
let value = "";
let item = this.getLang();
for (let k = 0; k < keyList.length; k++) {
const key = keyList[k];
const currentValue = Reflect.get(item, key);
if (currentValue) {
value = item = currentValue;
} else {
return "";
}
}
return value;
}
}
class ImageObserver {
constructor() {
this.promiseList = [];
}
add(payload) {
this.promiseList.push(payload);
}
clearAll() {
this.promiseList = [];
}
allSettled() {
return Promise.allSettled(this.promiseList);
}
}
class Footer {
constructor(draw, data2) {
this.draw = draw;
this.position = draw.getPosition();
this.options = draw.getOptions();
this.elementList = data2 || [];
this.rowList = [];
this.positionList = [];
}
getRowList() {
return this.rowList;
}
setElementList(elementList) {
this.elementList = elementList;
}
getElementList() {
return this.elementList;
}
getPositionList() {
return this.positionList;
}
compute() {
this.recovery();
this._computeRowList();
this._computePositionList();
}
recovery() {
this.rowList = [];
this.positionList = [];
}
_computeRowList() {
const innerWidth = this.draw.getInnerWidth();
this.rowList = this.draw.computeRowList({
innerWidth,
elementList: this.elementList
});
}
_computePositionList() {
const footerBottom = this.getFooterBottom();
const innerWidth = this.draw.getInnerWidth();
const margins = this.draw.getMargins();
const startX = margins[3];
const pageHeight = this.draw.getHeight();
const footerHeight = this.getHeight();
const startY = pageHeight - footerBottom - footerHeight;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX,
startY,
innerWidth,
zone: EditorZone.FOOTER
});
}
getFooterBottom() {
const {
footer: { bottom, disabled },
scale
} = this.options;
if (disabled)
return 0;
return Math.floor(bottom * scale);
}
getMaxHeight() {
const {
footer: { maxHeightRadio }
} = this.options;
const height = this.draw.getHeight();
return Math.floor(height * maxHeightRadioMapping[maxHeightRadio]);
}
getHeight() {
const maxHeight = this.getMaxHeight();
const rowHeight = this.getRowHeight();
return rowHeight > maxHeight ? maxHeight : rowHeight;
}
getRowHeight() {
return this.rowList.reduce((pre, cur) => pre + cur.height, 0);
}
getExtraHeight() {
const margins = this.draw.getMargins();
const footerHeight = this.getHeight();
const footerBottom = this.getFooterBottom();
const extraHeight = footerBottom + footerHeight - margins[2];
return extraHeight <= 0 ? 0 : extraHeight;
}
render(ctx2d, pageNo) {
ctx2d.globalAlpha = 1;
const innerWidth = this.draw.getInnerWidth();
const maxHeight = this.getMaxHeight();
const rowList = [];
let curRowHeight = 0;
for (let r = 0; r < this.rowList.length; r++) {
const row = this.rowList[r];
if (curRowHeight + row.height > maxHeight) {
break;
}
rowList.push(row);
curRowHeight += row.height;
}
this.draw.drawRow(ctx2d, {
elementList: this.elementList,
positionList: this.positionList,
rowList,
pageNo,
startIndex: 0,
innerWidth,
zone: EditorZone.FOOTER
});
}
}
var KeyMap = /* @__PURE__ */ ((KeyMap2) => {
KeyMap2["Delete"] = "Delete";
KeyMap2["Backspace"] = "Backspace";
KeyMap2["Enter"] = "Enter";
KeyMap2["Left"] = "ArrowLeft";
KeyMap2["Right"] = "ArrowRight";
KeyMap2["Up"] = "ArrowUp";
KeyMap2["Down"] = "ArrowDown";
KeyMap2["ESC"] = "Escape";
KeyMap2["TAB"] = "Tab";
KeyMap2["META"] = "Meta";
KeyMap2["LEFT_BRACKET"] = "[";
KeyMap2["RIGHT_BRACKET"] = "]";
KeyMap2["COMMA"] = ",";
KeyMap2["PERIOD"] = ".";
KeyMap2["LEFT_ANGLE_BRACKET"] = "<";
KeyMap2["RIGHT_ANGLE_BRACKET"] = ">";
KeyMap2["EQUAL"] = "=";
KeyMap2["MINUS"] = "-";
KeyMap2["PLUS"] = "+";
KeyMap2["A"] = "a";
KeyMap2["B"] = "b";
KeyMap2["C"] = "c";
KeyMap2["D"] = "d";
KeyMap2["E"] = "e";
KeyMap2["F"] = "f";
KeyMap2["G"] = "g";
KeyMap2["H"] = "h";
KeyMap2["I"] = "i";
KeyMap2["J"] = "j";
KeyMap2["K"] = "k";
KeyMap2["L"] = "l";
KeyMap2["M"] = "m";
KeyMap2["N"] = "n";
KeyMap2["O"] = "o";
KeyMap2["P"] = "p";
KeyMap2["Q"] = "q";
KeyMap2["R"] = "r";
KeyMap2["S"] = "s";
KeyMap2["T"] = "t";
KeyMap2["U"] = "u";
KeyMap2["V"] = "v";
KeyMap2["W"] = "w";
KeyMap2["X"] = "x";
KeyMap2["Y"] = "y";
KeyMap2["Z"] = "z";
KeyMap2["A_UPPERCASE"] = "A";
KeyMap2["B_UPPERCASE"] = "B";
KeyMap2["C_UPPERCASE"] = "C";
KeyMap2["D_UPPERCASE"] = "D";
KeyMap2["E_UPPERCASE"] = "E";
KeyMap2["F_UPPERCASE"] = "F";
KeyMap2["G_UPPERCASE"] = "G";
KeyMap2["H_UPPERCASE"] = "H";
KeyMap2["I_UPPERCASE"] = "I";
KeyMap2["J_UPPERCASE"] = "J";
KeyMap2["K_UPPERCASE"] = "K";
KeyMap2["L_UPPERCASE"] = "L";
KeyMap2["M_UPPERCASE"] = "M";
KeyMap2["N_UPPERCASE"] = "N";
KeyMap2["O_UPPERCASE"] = "O";
KeyMap2["P_UPPERCASE"] = "P";
KeyMap2["Q_UPPERCASE"] = "Q";
KeyMap2["R_UPPERCASE"] = "R";
KeyMap2["S_UPPERCASE"] = "S";
KeyMap2["T_UPPERCASE"] = "T";
KeyMap2["U_UPPERCASE"] = "U";
KeyMap2["V_UPPERCASE"] = "V";
KeyMap2["W_UPPERCASE"] = "W";
KeyMap2["X_UPPERCASE"] = "X";
KeyMap2["Y_UPPERCASE"] = "Y";
KeyMap2["Z_UPPERCASE"] = "Z";
KeyMap2["ZERO"] = "0";
KeyMap2["ONE"] = "1";
KeyMap2["TWO"] = "2";
KeyMap2["THREE"] = "3";
KeyMap2["FOUR"] = "4";
KeyMap2["FIVE"] = "5";
KeyMap2["SIX"] = "6";
KeyMap2["SEVEN"] = "7";
KeyMap2["EIGHT"] = "8";
KeyMap2["NINE"] = "9";
return KeyMap2;
})(KeyMap || {});
class ListParticle {
constructor(draw) {
this.UN_COUNT_STYLE_WIDTH = 20;
this.MEASURE_BASE_TEXT = "0";
this.LIST_GAP = 10;
this.draw = draw;
this.options = draw.getOptions();
}
computeListStyle(elementList) {
const listStyleMap = /* @__PURE__ */ new Map();
let start = 0;
if (!elementList[start])
return listStyleMap;
let curListId = elementList[start].listId;
let curElementList = [];
const elementLength = elementList.length;
while (start < elementLength) {
const curElement = elementList[start];
if (curListId && curListId === curElement.listId) {
curElementList.push(curElement);
} else {
if (curElement.listId && curElement.listId !== curListId) {
if (curElementList.length) {
const width = this.getListStyleWidth(curElementList);
listStyleMap.set(curListId, width);
}
curListId = curElement.listId;
curElementList = curListId ? [curElement] : [];
}
}
start++;
}
if (curElementList.length) {
const width = this.getListStyleWidth(curElementList);
listStyleMap.set(curListId, width);
}
return listStyleMap;
}
getListStyleWidth(listElementList) {
const { scale, checkbox } = this.options;
const startElement = listElementList[0];
if (startElement.listStyle && startElement.listStyle !== ListStyle.DECIMAL) {
if (startElement.listStyle === ListStyle.CHECKBOX) {
return (checkbox.width + this.LIST_GAP) * scale;
}
return this.UN_COUNT_STYLE_WIDTH * scale;
}
const count = listElementList.reduce((pre, cur) => {
if (cur.value === ZERO) {
pre += 1;
}
return pre;
}, 0);
if (!count)
return 0;
const text = `${this.MEASURE_BASE_TEXT.repeat(String(count).length)}${KeyMap.PERIOD}`;
const textMetrics = this.draw.getFakeCtx().measureText(text);
return Math.ceil((textMetrics.width + this.LIST_GAP) * scale);
}
drawListStyle(ctx2d, row, position) {
var _a;
const { elementList, offsetX, listIndex, ascent } = row;
const startElement = elementList[0];
if (startElement.value !== ZERO || startElement.listWrap)
return;
let tabWidth = 0;
const { defaultTabWidth, scale, defaultFont, defaultSize } = this.options;
for (let i = 1; i < elementList.length; i++) {
const element = elementList[i];
if ((element == null ? void 0 : element.type) !== ElementType.TAB)
break;
tabWidth += defaultTabWidth * scale;
}
const {
coordinate: {
leftTop: [startX, startY]
}
} = position;
const x = startX - offsetX + tabWidth;
const y = startY + ascent;
if (startElement.listStyle === ListStyle.CHECKBOX) {
const { width, height, gap } = this.options.checkbox;
const checkboxRowElement = {
...startElement,
checkbox: {
value: !!((_a = startElement.checkbox) == null ? void 0 : _a.value)
},
metrics: {
...startElement.metrics,
width: (width + gap * 2) * scale,
height: height * scale
}
};
this.draw.getCheckboxParticle().render({
ctx2d,
x: x - gap * scale,
y,
index: 0,
row: {
...row,
elementList: [checkboxRowElement, ...row.elementList]
}
});
} else {
let text = "";
if (startElement.listType === ListType.UL) {
text = ulStyleMapping[startElement.listStyle] || ulStyleMapping[UlStyle.DISC];
} else {
text = `${listIndex + 1}${KeyMap.PERIOD}`;
}
if (!text)
return;
ctx2d.save();
ctx2d.font = `${defaultSize * scale}px ${defaultFont}`;
ctx2d.fillText(text, x, y);
ctx2d.restore();
}
}
}
const _LineBreakParticle = class {
constructor(draw) {
this.options = draw.getOptions();
}
render(ctx2d, element, x, y) {
const {
scale,
lineBreak: { color, lineWidth }
} = this.options;
ctx2d.save();
ctx2d.beginPath();
const top = y - _LineBreakParticle.HEIGHT * scale / 2;
const left = x + element.metrics.width;
ctx2d.translate(left, top);
ctx2d.scale(scale, scale);
ctx2d.strokeStyle = color;
ctx2d.lineWidth = lineWidth;
ctx2d.lineCap = "round";
ctx2d.lineJoin = "round";
ctx2d.beginPath();
ctx2d.moveTo(8, 0);
ctx2d.lineTo(12, 0);
ctx2d.lineTo(12, 6);
ctx2d.lineTo(3, 6);
ctx2d.moveTo(3, 6);
ctx2d.lineTo(6, 3);
ctx2d.moveTo(3, 6);
ctx2d.lineTo(6, 9);
ctx2d.stroke();
ctx2d.closePath();
ctx2d.restore();
}
};
let LineBreakParticle = _LineBreakParticle;
LineBreakParticle.WIDTH = 12;
LineBreakParticle.HEIGHT = 9;
LineBreakParticle.GAP = 3;
class Placeholder {
constructor(draw) {
this.draw = draw;
this.position = draw.getPosition();
this.options = draw.getOptions();
this.elementList = [];
this.rowList = [];
this.positionList = [];
}
_recovery() {
this.elementList = [];
this.rowList = [];
this.positionList = [];
}
_compute() {
this._computeRowList();
this._computePositionList();
}
_computeRowList() {
const innerWidth = this.draw.getInnerWidth();
this.rowList = this.draw.computeRowList({
innerWidth,
elementList: this.elementList
});
}
_computePositionList() {
const { lineBreak, scale } = this.options;
const headerExtraHeight = this.draw.getHeader().getExtraHeight();
const innerWidth = this.draw.getInnerWidth();
const margins = this.draw.getMargins();
let startX = margins[3];
if (!lineBreak.disabled) {
startX += (LineBreakParticle.WIDTH + LineBreakParticle.GAP) * scale;
}
const startY = margins[0] + headerExtraHeight;
this.position.computePageRowPosition({
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startRowIndex: 0,
startIndex: 0,
startX,
startY,
innerWidth
});
}
render(ctx2d) {
const {
placeholder: { data: data2, font, size, color, opacity }
} = this.options;
if (!data2)
return;
this._recovery();
this.elementList = [
{
value: data2,
font,
size,
color
}
];
formatElementList(this.elementList, {
editorOptions: this.options,
isForceCompensation: true
});
this._compute();
const innerWidth = this.draw.getInnerWidth();
ctx2d.save();
ctx2d.globalAlpha = opacity;
this.draw.drawRow(ctx2d, {
elementList: this.elementList,
positionList: this.positionList,
rowList: this.rowList,
pageNo: 0,
startIndex: 0,
innerWidth,
isDrawLineBreak: false
});
ctx2d.restore();
}
}
class Group {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
this.fillRectMap = /* @__PURE__ */ new Map();
}
setGroup() {
this.draw.render({
isSetCursor: false,
isCompute: false
});
return null;
}
getElementListByGroupId(elementList, groupId) {
var _a, _b;
const groupElementList = [];
for (let e = 0; e < elementList.length; e++) {
const element = elementList[e];
if (element.type === ElementType.TABLE) {
const trList = element.trList;
for (let r = 0; r < trList.length; r++) {
const tr = trList[r];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const tdGroupElementList = this.getElementListByGroupId(
td.value,
groupId
);
if (tdGroupElementList.length) {
groupElementList.push(...tdGroupElementList);
return groupElementList;
}
}
}
}
if ((_a = element == null ? void 0 : element.groupIds) == null ? void 0 : _a.includes(groupId)) {
groupElementList.push(element);
const nextElement = elementList[e + 1];
if (!((_b = nextElement == null ? void 0 : nextElement.groupIds) == null ? void 0 : _b.includes(groupId)))
break;
}
}
return groupElementList;
}
deleteGroup(groupId) {
const elementList = this.draw.getOriginalMainElementList();
const groupElementList = this.getElementListByGroupId(elementList, groupId);
if (!groupElementList.length)
return;
for (let e = 0; e < groupElementList.length; e++) {
const element = groupElementList[e];
const groupIds = element.groupIds;
const groupIndex = groupIds.findIndex((id) => id === groupId);
groupIds.splice(groupIndex, 1);
if (!groupIds.length) {
delete element.groupIds;
}
}
this.draw.render({
isSetCursor: false,
isCompute: false
});
}
getContextByGroupId(elementList, groupId) {
var _a, _b;
for (let e = 0; e < elementList.length; e++) {
const element = elementList[e];
if (element.type === ElementType.TABLE) {
const trList = element.trList;
for (let r = 0; r < trList.length; r++) {
const tr = trList[r];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const range = this.getContextByGroupId(td.value, groupId);
if (range) {
return {
...range,
isTable: true,
index: e,
trIndex: r,
tdIndex: d,
tdId: td.id,
trId: tr.id,
tableId: element.tableId
};
}
}
}
}
const nextElement = elementList[e + 1];
if (((_a = element.groupIds) == null ? void 0 : _a.includes(groupId)) && !((_b = nextElement == null ? void 0 : nextElement.groupIds) == null ? void 0 : _b.includes(groupId))) {
return {
isTable: false,
startIndex: e,
endIndex: e
};
}
}
return null;
}
clearFillInfo() {
this.fillRectMap.clear();
}
recordFillInfo(element, x, y, width, height) {
const groupIds = element.groupIds;
if (!groupIds)
return;
for (const groupId of groupIds) {
const fillRect = this.fillRectMap.get(groupId);
if (!fillRect) {
this.fillRectMap.set(groupId, {
x,
y,
width,
height
});
} else {
fillRect.width += width;
}
}
}
render(ctx2d) {
if (!this.fillRectMap.size)
return;
const {
group: { backgroundColor, opacity, activeOpacity, activeBackgroundColor }
} = this.options;
const elementList = this.draw.getElementList();
const elementsWithGroupIds = elementList.filter((element) => {
return element.groupIds;
});
const anchorGroupIds = elementsWithGroupIds.reduce((accum, element) => {
var _a;
(_a = element.groupIds) == null ? void 0 : _a.forEach((groupId) => accum.push(groupId));
return accum;
}, []);
ctx2d.save();
this.draw.getPdf().setGState(new GState({
opacity
}));
this.fillRectMap.forEach((fillRect, groupId) => {
const { x, y, width, height } = fillRect;
if (anchorGroupIds == null ? void 0 : anchorGroupIds.includes(groupId)) {
ctx2d.globalAlpha = activeOpacity;
ctx2d.fillStyle = activeBackgroundColor;
} else {
ctx2d.globalAlpha = opacity;
ctx2d.fillStyle = backgroundColor;
}
ctx2d.fillRect(x, y, width, height);
});
this.draw.getPdf().setGState(new GState({
opacity: 1
}));
ctx2d.restore();
this.clearFillInfo();
}
}
var LineNumberType = /* @__PURE__ */ ((LineNumberType2) => {
LineNumberType2["PAGE"] = "page";
LineNumberType2["CONTINUITY"] = "continuity";
return LineNumberType2;
})(LineNumberType || {});
class LineNumber {
constructor(draw) {
this.draw = draw;
this.options = draw.getOptions();
}
render(ctx2d, pageNo) {
const {
scale,
lineNumber: { color, size, font, right, type }
} = this.options;
const textParticle = this.draw.getTextParticle();
const margins = this.draw.getMargins();
const positionList = this.draw.getPosition().getOriginalMainPositionList();
const pageRowList = this.draw.getPageRowList();
const rowList = pageRowList[pageNo];
ctx2d.save();
ctx2d.fillStyle = color;
ctx2d.font = `${size * scale}px ${font}`;
for (let i = 0; i < rowList.length; i++) {
const row = rowList[i];
const {
coordinate: { leftBottom }
} = positionList[row.startIndex];
const seq = type === LineNumberType.PAGE ? i + 1 : row.rowIndex + 1;
const textMetrics = textParticle.measureText(ctx2d, {
value: `${seq}`
});
const x = margins[3] - (textMetrics.width + right) * scale;
const y = leftBottom[1] - textMetrics.actualBoundingBoxAscent * scale;
ctx2d.fillText(`${seq}`, x, y);
}
ctx2d.restore();
}
}
class PageBorder {
constructor(draw) {
this.draw = draw;
this.header = draw.getHeader();
this.footer = draw.getFooter();
this.options = draw.getOptions();
}
render(ctx2d) {
const {
scale,
pageBorder: { color, lineWidth, padding }
} = this.options;
ctx2d.save();
ctx2d.translate(0.5, 0.5);
ctx2d.strokeStyle = color;
ctx2d.lineWidth = lineWidth * scale;
const margins = this.draw.getMargins();
const x = margins[3] - padding[3] * scale;
const y = margins[0] + this.header.getExtraHeight() - padding[0] * scale;
const width = this.draw.getInnerWidth() + (padding[1] + padding[3]) * scale;
const height = this.draw.getHeight() - y - this.footer.getExtraHeight() - margins[2] + padding[2] * scale;
ctx2d.rect(x, y, width, height);
ctx2d.stroke();
ctx2d.restore();
}
}
const defaultBackground = {
color: "#FFFFFF",
image: "",
size: BackgroundSize.COVER,
repeat: BackgroundRepeat.NO_REPEAT,
applyPageNumbers: []
};
const defaultCheckboxOption = {
width: 14,
height: 14,
gap: 5,
lineWidth: 1,
fillStyle: "#5175f4",
strokeStyle: "#ffffff",
verticalAlign: VerticalAlign.BOTTOM
};
const defaultControlOption = {
placeholderColor: "#9c9b9b",
bracketColor: "#000000",
prefix: "{",
postfix: "}",
borderWidth: 1,
borderColor: "#000000",
activeBackgroundColor: ""
};
const defaultCursorOption = {
width: 1,
color: "#000000",
dragWidth: 2,
dragColor: "#0000FF"
};
const defaultFooterOption = {
bottom: 30,
maxHeightRadio: MaxHeightRatio.HALF,
disabled: false
};
const defaultGroupOption = {
opacity: 0.1,
backgroundColor: "#E99D00",
activeOpacity: 0.5,
activeBackgroundColor: "#E99D00",
disabled: false
};
const defaultHeaderOption = {
top: 30,
maxHeightRadio: MaxHeightRatio.HALF,
disabled: false
};
const defaultLineBreak = {
disabled: true,
color: "#CCCCCC",
lineWidth: 1.5
};
const defaultPageBreakOption = {
font: "Microsoft YaHei",
fontSize: 12,
lineDash: [3, 1]
};
const defaultPlaceholderOption = {
data: "",
color: "#DCDFE6",
opacity: 1,
size: 16,
font: "Microsoft YaHei"
};
const defaultRadioOption = {
width: 14,
height: 14,
gap: 5,
lineWidth: 1,
fillStyle: "#5175f4",
strokeStyle: "#000000",
verticalAlign: VerticalAlign.BOTTOM
};
const defaultSeparatorOption = {
lineWidth: 1,
strokeStyle: "#000000"
};
const defaultTableOption = {
tdPadding: [0, 5, 5, 5],
defaultTrMinHeight: 42,
defaultColMinWidth: 40,
defaultBorderColor: "#000000"
};
const defaultWatermarkOption = {
data: "",
type: WatermarkType.TEXT,
width: 0,
height: 0,
color: "#AEB5C0",
opacity: 0.3,
size: 200,
font: "Microsoft YaHei",
repeat: false,
gap: [10, 10],
numberType: NumberType.ARABIC
};
const defaultZoneOption = {
tipDisabled: true
};
const defaultLineNumberOption = {
size: 12,
font: "Microsoft YaHei",
color: "#000000",
disabled: true,
right: 20,
type: LineNumberType.CONTINUITY
};
const defaultPageBorderOption = {
color: "#000000",
lineWidth: 1,
padding: [0, 5, 0, 5],
disabled: true
};
const defaultBadgeOption = {
top: 0,
left: 5
};
function mergeOption(options = {}) {
var _a, _b, _c;
const tableOptions = {
...defaultTableOption,
...options.table
};
const headerOptions = {
...defaultHeaderOption,
...options.header
};
const footerOptions = {
...defaultFooterOption,
...options.footer
};
const pageNumberOptions = {
...defaultPageNumberOption,
...options.pageNumber
};
const waterMarkOptions = {
...defaultWatermarkOption,
...options.watermark
};
const controlOptions = {
...defaultControlOption,
...options.control
};
const checkboxOptions = {
...defaultCheckboxOption,
...options.checkbox
};
const radioOptions = {
...defaultRadioOption,
...options.radio
};
const cursorOptions = {
...defaultCursorOption,
...options.cursor
};
const titleOptions = {
...defaultTitleOption,
...options.title
};
const placeholderOptions = {
...defaultPlaceholderOption,
...options.placeholder
};
const groupOptions = {
...defaultGroupOption,
...options.group
};
const pageBreakOptions = {
...defaultPageBreakOption,
...options.pageBreak
};
const zoneOptions = {
...defaultZoneOption,
...options.zone
};
const backgroundOptions = {
...defaultBackground,
...options.background
};
const lineBreakOptions = {
...defaultLineBreak,
...options.lineBreak
};
const separatorOptions = {
...defaultSeparatorOption,
...options.separator
};
const lineNumberOptions = {
...defaultLineNumberOption,
...options.lineNumber
};
const pageBorderOptions = {
...defaultPageBorderOption,
...options.pageBorder
};
const badgeOptions = {
...defaultBadgeOption,
...options.badge
};
const modeRuleOption = {
print: {
...defaultModeRuleOption.print,
...(_a = options.modeRule) == null ? void 0 : _a.print
},
readonly: {
...defaultModeRuleOption.readonly,
...(_b = options.modeRule) == null ? void 0 : _b.readonly
},
form: {
...defaultModeRuleOption.form,
...(_c = options.modeRule) == null ? void 0 : _c.form
}
};
return {
mode: EditorMode.EDIT,
locale: "zhCN",
defaultType: "TEXT",
defaultColor: "#000000",
defaultFont: "Microsoft YaHei",
defaultSize: 16,
minSize: 5,
maxSize: 72,
defaultRowMargin: 1,
defaultBasicRowMarginHeight: 8,
defaultTabWidth: 32,
width: 794,
height: 1123,
scale: 1,
pageGap: 20,
underlineColor: "#000000",
strikeoutColor: "#FF0000",
rangeAlpha: 0.6,
rangeColor: "#AECBFA",
rangeMinWidth: 5,
searchMatchAlpha: 0.6,
searchMatchColor: "#FFFF00",
searchNavigateMatchColor: "#AAD280",
highlightAlpha: 0.6,
highlightMarginHeight: 8,
resizerColor: "#4182D9",
resizerSize: 5,
marginIndicatorSize: 35,
marginIndicatorColor: "#BABABA",
margins: [100, 120, 100, 120],
pageMode: PageMode.PAGING,
renderMode: RenderMode.SPEED,
defaultHyperlinkColor: "#0000FF",
paperDirection: PaperDirection.VERTICAL,
inactiveAlpha: 0.6,
historyMaxRecordCount: 100,
wordBreak: WordBreak.BREAK_WORD,
printPixelRatio: 3,
maskMargin: [0, 0, 0, 0],
letterClass: [LETTER_CLASS.ENGLISH],
contextMenuDisableKeys: [],
shortcutDisableKeys: [],
scrollContainerSelector: "",
pageOuterSelectionDisable: false,
...options,
table: tableOptions,
header: headerOptions,
footer: footerOptions,
pageNumber: pageNumberOptions,
watermark: waterMarkOptions,
control: controlOptions,
checkbox: checkboxOptions,
radio: radioOptions,
cursor: cursorOptions,
title: titleOptions,
placeholder: placeholderOptions,
group: groupOptions,
pageBreak: pageBreakOptions,
zone: zoneOptions,
background: backgroundOptions,
lineBreak: lineBreakOptions,
separator: separatorOptions,
lineNumber: lineNumberOptions,
pageBorder: pageBorderOptions,
badge: badgeOptions,
modeRule: modeRuleOption
};
}
class DrawPdf {
constructor(options, data2, pdfOptions = {}) {
this.fakeCanvas = document.createElement("canvas");
this.fakeCtx = this.fakeCanvas.getContext("2d");
this.pageList = [];
this.ctxList = [];
this.ctxListInfos = [];
this.pageNo = 0;
this.pagePixelRatio = null;
this.mode = options.mode;
this.options = mergeOption(options);
let headerElementList = [];
let mainElementList = [];
let footerElementList = [];
data2 = deepClone(data2);
if (Array.isArray(data2)) {
mainElementList = data2;
} else {
headerElementList = data2.header || [];
mainElementList = data2.main;
footerElementList = data2.footer || [];
}
const pageComponentData = [
headerElementList,
mainElementList,
footerElementList
];
pageComponentData.forEach((elementList) => {
formatElementList(elementList, {
editorOptions: this.getOptions(),
isForceCompensation: true
});
});
pageComponentData.forEach((datas) => {
if (datas) {
datas = this.filterAssistElement(
datas
);
}
});
this.elementList = data2.main;
this._formatContainer();
this.pdf = new jsPDF({
orientation: "p",
unit: "px",
format: [this.getWidth(), this.getHeight()],
hotfixes: ["px_scaling"],
compress: true
});
this.pdf.setDocumentProperties({
author: "canvas-editor"
});
if (pdfOptions.loadDefaultFonts) {
this.defaultFontsLoadedPromise = this._addDefaultFont();
} else {
this.defaultFontsLoadedPromise = Promise.resolve(false);
}
this._createPage(0);
this.i18n = new I18n();
this.position = new Position(this);
this.margin = new Margin(this);
this.background = new Background(this);
this.group = new Group(this);
this.underline = new Underline(this);
this.strikeout = new Strikeout(this);
this.highlight = new Highlight(this);
this.imageParticle = new ImageParticle(this);
this.laTexParticle = new LaTexParticle(this);
this.textParticle = new TextParticle(this);
this.tableParticle = new TableParticle(this);
this.pageNumber = new PageNumber(this);
this.lineNumber = new LineNumber(this);
this.waterMark = new Watermark(this);
this.placeholder = new Placeholder(this);
this.header = new Header(this, data2.header);
this.footer = new Footer(this, data2.footer);
this.hyperlinkParticle = new HyperlinkParticle(this);
this.dateParticle = new DateParticle(this);
this.separatorParticle = new SeparatorParticle(this);
this.superscriptParticle = new SuperscriptParticle();
this.subscriptParticle = new SubscriptParticle();
this.checkboxParticle = new CheckboxParticle(this);
this.radioParticle = new RadioParticle(this);
this.blockParticle = new BlockParticle(this);
this.listParticle = new ListParticle(this);
this.lineBreakParticle = new LineBreakParticle(this);
this.pageBorder = new PageBorder(this);
this.imageObserver = new ImageObserver();
const { letterClass } = options;
this.LETTER_REG = new RegExp(`[${letterClass.join("")}]`);
this.WORD_LIKE_REG = new RegExp(
`${letterClass.map((letter) => `[^${letter}][${letter}]`).join("|")}`
);
this.rowList = [];
this.pageRowList = [];
this.printModeData = null;
}
getCtx2d() {
return this.pdf.context2d;
}
getFakeCtx() {
return this.fakeCtx;
}
measureText(font, text) {
this.fakeCtx.save();
this.fakeCtx.font = font;
const textMetrics = this.fakeCtx.measureText(text);
this.fakeCtx.restore();
return textMetrics;
}
async downloadFont(url, fileName, id, type) {
const response = await fetch(url);
const blob = await response.blob();
return new Promise((onSuccess, onError) => {
try {
const $this = this;
const reader = new FileReader();
reader.onload = function() {
const base64 = this.result;
$this.pdf.addFileToVFS(fileName, base64.split("base64,")[1]);
$this.pdf.addFont(fileName, id, type);
onSuccess(this.result);
};
reader.readAsDataURL(blob);
} catch (e) {
onError(e);
}
});
}
async _addDefaultFont() {
await Promise.all([
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/msyh.ttf",
"msyh.ttf",
"microsoft yahei",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/msyh-bold.ttf",
"msyh.ttf",
"microsoft yahei",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Arial.ttf",
"Arial.ttf",
"arial",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Arial_Bold.ttf",
"Arial_Bold.ttf",
"arial",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Arial_Italic.ttf",
"Arial_Italic.ttf",
"arial",
"italic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Arial_Bold_Italic.ttf",
"Arial_Bold_Italic.ttf",
"arial",
"bolditalic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/calibri-regular.ttf",
"calibri-regular.ttf",
"calibri",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/calibri-bold.ttf",
"calibri-bold.ttf",
"calibri",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/calibri-italic.ttf",
"calibri-italic.ttf",
"calibri",
"italic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/calibri-bold-italic.ttf",
"calibri-bold-italic.ttf",
"calibri",
"bolditalic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Cambria.ttf",
"Cambria.ttf",
"cambria",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/cambriab.ttf",
"cambriab.ttf",
"cambria",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/cambriai.ttf",
"cambriai.ttf",
"cambria",
"italic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/cambriaz.ttf",
"cambriaz.ttf",
"cambria",
"bolditalic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Verdana.ttf",
"Verdana.ttf",
"verdana",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Verdana_Bold.ttf",
"Verdana_Bold.ttf",
"verdana",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Verdana_Italic.ttf",
"Verdana_Italic.ttf",
"verdana",
"italic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Verdana_Bold_Italic.ttf",
"Verdana_Bold_Italic.ttf",
"verdana",
"bolditalic"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/Inkfree.ttf",
"Inkfree.ttf",
"ink free",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/segoe-ui.ttf",
"segoe-ui.ttf",
"segoe ui",
"normal"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/segoe-ui-bold.ttf",
"segoe-ui-bold.ttf",
"segoe ui",
"bold"
),
this.downloadFont(
"https://cdn.jsdelivr.net/npm/canvas-editor-pdf@0.2.7/dist/font/segoeuii.ttf",
"segoeuii.ttf",
"segoe ui",
"italic"
)
]);
return true;
}
loadDefaultFonts() {
return this.defaultFontsLoadedPromise = this._addDefaultFont();
}
async addFont(url, fileName, id, type) {
await this.downloadFont(url, fileName, id, type);
return true;
}
getFont(el) {
const { defaultSize, defaultFont } = this.options;
const font = el.font || defaultFont;
const size = el.actualSize || el.size || defaultSize;
return `${el.italic ? "italic " : ""}${el.bold ? "bold " : ""}${size}px ${font}`;
}
getLetterReg() {
return this.LETTER_REG;
}
getMode() {
return this.mode;
}
filterAssistElement(elementList) {
return elementList.filter((element) => {
if (element.type === ElementType.TABLE) {
const trList = element.trList;
for (let r = 0; r < trList.length; r++) {
const tr = trList[r];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
td.value = this.filterAssistElement(td.value);
}
}
}
if (!element.controlId)
return true;
if (element.controlComponent === ControlComponent.PREFIX || element.controlComponent === ControlComponent.POSTFIX || element.controlComponent === ControlComponent.PLACEHOLDER) {
element.value = "";
return true;
}
return true;
});
}
setMode(payload) {
if (payload === EditorMode.PRINT) {
this.printModeData = {
header: this.header.getElementList(),
main: this.elementList,
footer: this.footer.getElementList()
};
const clonePrintModeData = deepClone(this.printModeData);
const editorDataKeys = ["header", "main", "footer"];
editorDataKeys.forEach((key) => {
clonePrintModeData[key] = this.filterAssistElement(
clonePrintModeData[key]
);
});
}
this.clearSideEffect();
this.mode = payload;
this.options.mode = payload;
}
getOriginalWidth() {
const { paperDirection, width, height } = this.options;
return paperDirection === PaperDirection.VERTICAL ? width : height;
}
getOriginalHeight() {
const { paperDirection, width, height } = this.options;
return paperDirection === PaperDirection.VERTICAL ? height : width;
}
getWidth() {
return Math.floor(this.getOriginalWidth() * this.options.scale);
}
getHeight() {
return Math.floor(this.getOriginalHeight() * this.options.scale);
}
getMainHeight() {
const pageHeight = this.getHeight();
return pageHeight - this.getMainOuterHeight();
}
getMainOuterHeight() {
const margins = this.getMargins();
const headerExtraHeight = this.header.getExtraHeight();
const footerExtraHeight = this.footer.getExtraHeight();
return margins[0] + margins[2] + headerExtraHeight + footerExtraHeight;
}
getCanvasWidth(pageNo = -1) {
const page = this.ctxListInfos[pageNo];
return page.width;
}
getCanvasHeight(pageNo = -1) {
const page = this.ctxListInfos[pageNo];
return page.height;
}
getInnerWidth() {
const width = this.getWidth();
const margins = this.getMargins();
return width - margins[1] - margins[3];
}
getOriginalInnerWidth() {
const width = this.getOriginalWidth();
const margins = this.getOriginalMargins();
return width - margins[1] - margins[3];
}
getContextInnerWidth() {
const positionContext = this.position.getPositionContext();
if (positionContext.isTable) {
const { index, trIndex, tdIndex } = positionContext;
const elementList = this.getOriginalElementList();
const td = elementList[index].trList[trIndex].tdList[tdIndex];
const tdPadding = this.getTdPadding();
return td.width - tdPadding[1] - tdPadding[3];
}
return this.getOriginalInnerWidth();
}
getMargins() {
return this.getOriginalMargins().map((m) => m * this.options.scale);
}
getOriginalMargins() {
const { margins, paperDirection } = this.options;
return paperDirection === PaperDirection.VERTICAL ? margins : [margins[1], margins[2], margins[3], margins[0]];
}
getPageGap() {
return this.options.pageGap * this.options.scale;
}
getOriginalPageGap() {
return this.options.pageGap;
}
getPageNumberBottom() {
const {
pageNumber: { bottom },
scale
} = this.options;
return bottom * scale;
}
getMarginIndicatorSize() {
return this.options.marginIndicatorSize * this.options.scale;
}
getDefaultBasicRowMarginHeight() {
return this.options.defaultBasicRowMarginHeight * this.options.scale;
}
getTdPadding() {
const {
table: { tdPadding },
scale
} = this.options;
return tdPadding.map((m) => m * scale);
}
getPageNo() {
return this.pageNo;
}
setPageNo(payload) {
this.pageNo = payload;
}
getPage(pageNo = -1) {
return this.pageList[~pageNo ? pageNo : this.pageNo];
}
getPageList() {
return this.pageList;
}
getPageCount() {
return this.pageList.length;
}
getTableRowList(sourceElementList) {
const positionContext = this.position.getPositionContext();
const { index, trIndex, tdIndex } = positionContext;
return sourceElementList[index].trList[trIndex].tdList[tdIndex].rowList;
}
getOriginalRowList() {
return this.rowList;
}
getRowList() {
const positionContext = this.position.getPositionContext();
return positionContext.isTable ? this.getTableRowList(this.getOriginalElementList()) : this.getOriginalRowList();
}
getPageRowList() {
return this.pageRowList;
}
getPdf() {
return this.pdf;
}
getCtx() {
return this.ctxList[this.pageNo];
}
getOptions() {
return this.options;
}
getGroup() {
return this.group;
}
getPosition() {
return this.position;
}
getLineBreakParticle() {
return this.lineBreakParticle;
}
getTextParticle() {
return this.textParticle;
}
getHeaderElementList() {
return this.header.getElementList();
}
getTableElementList(sourceElementList) {
var _a;
const positionContext = this.position.getPositionContext();
const { index, trIndex, tdIndex } = positionContext;
return ((_a = sourceElementList[index].trList) == null ? void 0 : _a[trIndex].tdList[tdIndex].value) || [];
}
getElementList() {
const positionContext = this.position.getPositionContext();
const elementList = this.getOriginalElementList();
return positionContext.isTable ? this.getTableElementList(elementList) : elementList;
}
getMainElementList() {
const positionContext = this.position.getPositionContext();
return positionContext.isTable ? this.getTableElementList(this.elementList) : this.elementList;
}
getOriginalElementList() {
return this.elementList;
}
getOriginalMainElementList() {
return this.elementList;
}
getFooterElementList() {
return this.footer.getElementList();
}
getTd() {
const positionContext = this.position.getPositionContext();
const { index, trIndex, tdIndex, isTable } = positionContext;
if (isTable) {
const elementList = this.getOriginalElementList();
return elementList[index].trList[trIndex].tdList[tdIndex];
}
return null;
}
spliceElementList(elementList, start, deleteCount, ...items) {
var _a;
if (deleteCount > 0) {
const endIndex = start + deleteCount;
const endElement = elementList[endIndex];
const endElementListId = endElement == null ? void 0 : endElement.listId;
if (endElementListId && ((_a = elementList[start - 1]) == null ? void 0 : _a.listId) !== endElementListId) {
let startIndex = endIndex;
while (startIndex < elementList.length) {
const curElement = elementList[startIndex];
if (curElement.listId !== endElementListId || curElement.value === ZERO) {
break;
}
delete curElement.listId;
delete curElement.listType;
delete curElement.listStyle;
startIndex++;
}
}
}
for (let i = 0; i < items.length; i++) {
elementList.splice(start + i, 0, items[i]);
}
}
getImageParticle() {
return this.imageParticle;
}
getTableParticle() {
return this.tableParticle;
}
getHeader() {
return this.header;
}
getFooter() {
return this.footer;
}
getHyperlinkParticle() {
return this.hyperlinkParticle;
}
getDateParticle() {
return this.dateParticle;
}
getListParticle() {
return this.listParticle;
}
getCheckboxParticle() {
return this.checkboxParticle;
}
getRadioParticle() {
return this.radioParticle;
}
getImageObserver() {
return this.imageObserver;
}
getI18n() {
return this.i18n;
}
getRowCount() {
return this.getRowList().length;
}
async getDataURL(payload = {}) {
const { pixelRatio, mode } = payload;
if (pixelRatio) {
this.setPagePixelRatio(pixelRatio);
}
this.mode;
this.render({
isLazy: false,
isCompute: false,
isSetCursor: false,
isSubmitHistory: false
});
await this.imageObserver.allSettled();
const dataUrlList = this.pageList.map((c) => c.toDataURL());
if (pixelRatio) {
this.setPagePixelRatio(null);
}
return dataUrlList;
}
async setValue(payload) {
const { header, main, footer } = deepClone(payload);
if (!header && !main && !footer)
return;
const pageComponentData = [header, main, footer];
for (let i = 0; i < pageComponentData.length; i++) {
const data2 = pageComponentData[i];
if (!data2)
return;
await formatElementList(data2, {
editorOptions: this.options,
isForceCompensation: true
});
}
pageComponentData.forEach((datas) => {
if (datas) {
datas = this.filterAssistElement(
datas
);
}
});
this.setEditorData({
header,
main,
footer
});
}
setPageScale(payload) {
const dpr = this.getPagePixelRatio();
this.options.scale = payload;
const width = this.getWidth();
const height = this.getHeight();
this.pageList.forEach((p, i) => {
p.width = width * dpr;
p.height = height * dpr;
p.style.width = `${width}px`;
p.style.height = `${height}px`;
p.style.marginBottom = `${this.getPageGap()}px`;
this._initPageContext(this.ctxList[i]);
});
const cursorPosition = this.position.getCursorPosition();
this.render({
isSubmitHistory: false,
isSetCursor: !!cursorPosition,
curIndex: cursorPosition == null ? void 0 : cursorPosition.index
});
}
getPagePixelRatio() {
return this.pagePixelRatio || window.devicePixelRatio;
}
setPagePixelRatio(payload) {
if (!this.pagePixelRatio && payload === window.devicePixelRatio || payload === this.pagePixelRatio) {
return;
}
this.pagePixelRatio = payload;
this.setPageDevicePixel();
}
setPageDevicePixel() {
const dpr = this.getPagePixelRatio();
const width = this.getWidth();
const height = this.getHeight();
this.pageList.forEach((p, i) => {
p.width = width * dpr;
p.height = height * dpr;
this._initPageContext(this.ctxList[i]);
});
this.render({
isSubmitHistory: false,
isSetCursor: false
});
}
setPaperSize(width, height) {
this.options.width = width;
this.options.height = height;
const dpr = this.getPagePixelRatio();
const realWidth = this.getWidth();
const realHeight = this.getHeight();
this.pageList.forEach((p, i) => {
p.width = realWidth * dpr;
p.height = realHeight * dpr;
p.style.width = `${realWidth}px`;
p.style.height = `${realHeight}px`;
this._initPageContext(this.ctxList[i]);
});
this.render({
isSubmitHistory: false,
isSetCursor: false
});
}
setPaperDirection(payload) {
const dpr = this.getPagePixelRatio();
this.options.paperDirection = payload;
const width = this.getWidth();
const height = this.getHeight();
this.pageList.forEach((p, i) => {
p.width = width * dpr;
p.height = height * dpr;
p.style.width = `${width}px`;
p.style.height = `${height}px`;
this._initPageContext(this.ctxList[i]);
});
this.render({
isSubmitHistory: false,
isSetCursor: false
});
}
setPaperMargin(payload) {
this.options.margins = payload;
this.render({
isSubmitHistory: false,
isSetCursor: false
});
}
getValue(options = {}) {
const { pageNo, extraPickAttrs } = options;
let mainElementList = this.elementList;
if (Number.isInteger(pageNo) && pageNo >= 0 && pageNo < this.pageRowList.length) {
mainElementList = this.pageRowList[pageNo].flatMap(
(row) => row.elementList
);
}
const data2 = {
header: zipElementList(this.getHeaderElementList(), {
extraPickAttrs
}),
main: zipElementList(mainElementList, {
extraPickAttrs
}),
footer: zipElementList(this.getFooterElementList(), {
extraPickAttrs
})
};
const version = "0.0.94";
return {
version,
data: data2,
options: deepClone(this.options)
};
}
setEditorData(payload) {
const { header, main, footer } = payload;
if (header) {
this.header.setElementList(header);
}
if (main) {
this.elementList = main;
}
if (footer) {
this.footer.setElementList(footer);
}
}
_formatContainer() {
}
_createPage(pageNo) {
const width = this.getWidth();
const height = this.getHeight();
const dpr = 1;
const orientation = this.getOptions().paperDirection === PaperDirection.VERTICAL ? "p" : "l";
this.ctxListInfos.push({
width,
height,
background: "#ffffff",
marginBottom: `${this.getPageGap()}px`,
index: String(pageNo)
});
this.pageList.push({
width,
height,
background: "#ffffff",
marginBottom: `${this.getPageGap()}px`,
index: String(pageNo)
});
const newPagePdf = this.pdf.addPage([width, height], orientation);
newPagePdf.context2d.scale(dpr, dpr);
}
_initPageContext(ctx) {
const dpr = this.getPagePixelRatio();
ctx.scale(dpr, dpr);
ctx.letterSpacing = "0px";
ctx.wordSpacing = "0px";
ctx.direction = "ltr";
}
getElementFont(el, scale = 1) {
const { defaultSize, defaultFont } = this.options;
const font = el.font || defaultFont;
const size = el.actualSize || el.size || defaultSize;
return `${el.italic ? "italic " : ""}${el.bold ? "bold " : ""}${size * scale}px ${font}`;
}
getElementSize(el) {
return el.actualSize || el.size || this.options.defaultSize;
}
getElementRowMargin(el) {
var _a;
const { defaultBasicRowMarginHeight, defaultRowMargin, scale } = this.options;
return defaultBasicRowMarginHeight * ((_a = el.rowMargin) != null ? _a : defaultRowMargin) * scale;
}
forceUpdate(options) {
const { isSubmitHistory = false } = options || {};
this.render({
isSubmitHistory,
isSetCursor: false
});
}
updateOptions(payload) {
const newOption = mergeOption(payload);
Object.entries(newOption).forEach(([key, value]) => {
Reflect.set(this.options, key, value);
});
}
computeRowList(payload) {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
const {
innerWidth,
elementList,
isPagingMode = false,
isFromTable = false,
startX = 0,
startY = 0,
pageHeight = 0,
mainOuterHeight = 0,
surroundElementList = []
} = payload;
const {
defaultSize,
defaultRowMargin,
scale,
table: { tdPadding },
defaultTabWidth
} = this.options;
const defaultBasicRowMarginHeight = this.getDefaultBasicRowMarginHeight();
const listStyleMap = this.listParticle.computeListStyle(elementList);
const rowList = [];
if (elementList.length) {
rowList.push({
width: 0,
height: 0,
ascent: 0,
elementList: [],
startIndex: 0,
rowIndex: 0,
rowFlex: ((_a = elementList == null ? void 0 : elementList[0]) == null ? void 0 : _a.rowFlex) || ((_b = elementList == null ? void 0 : elementList[1]) == null ? void 0 : _b.rowFlex)
});
}
let x = startX;
let y = startY;
let pageNo = 0;
let listId;
let listIndex = 0;
let controlRealWidth = 0;
for (let i = 0; i < elementList.length; i++) {
const curRow = rowList[rowList.length - 1];
const element = elementList[i];
const rowMargin = defaultBasicRowMarginHeight * ((_c = element.rowMargin) != null ? _c : defaultRowMargin);
const metrics = {
width: 0,
height: 0,
boundingBoxAscent: 0,
boundingBoxDescent: 0
};
const offsetX = curRow.offsetX || element.listId && listStyleMap.get(element.listId) || 0;
const availableWidth = innerWidth - offsetX;
x += curRow.elementList.length === 1 ? offsetX : 0;
if (element.type === ElementType.IMAGE || element.type === ElementType.LATEX) {
if (element.imgDisplay === ImageDisplay.SURROUND || element.imgDisplay === ImageDisplay.FLOAT_TOP || element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
metrics.width = 0;
metrics.height = 0;
metrics.boundingBoxDescent = 0;
} else {
const elementWidth = element.width * scale;
const elementHeight = element.height * scale;
if (elementWidth > availableWidth) {
const adaptiveHeight = elementHeight * availableWidth / elementWidth;
element.width = availableWidth / scale;
element.height = adaptiveHeight / scale;
metrics.width = availableWidth;
metrics.height = adaptiveHeight;
metrics.boundingBoxDescent = adaptiveHeight;
} else {
metrics.width = elementWidth;
metrics.height = elementHeight;
metrics.boundingBoxDescent = elementHeight;
}
}
metrics.boundingBoxAscent = 0;
} else if (element.type === ElementType.TABLE) {
const tdPaddingWidth = tdPadding[1] + tdPadding[3];
const tdPaddingHeight = tdPadding[0] + tdPadding[2];
if (element.pagingId) {
let tableIndex = i + 1;
let combineCount = 0;
while (tableIndex < elementList.length) {
const nextElement2 = elementList[tableIndex];
if (nextElement2.pagingId === element.pagingId) {
const nexTrList = nextElement2.trList.filter(
(tr) => !tr.pagingRepeat
);
element.trList.push(...nexTrList);
element.height += nextElement2.height;
tableIndex++;
combineCount++;
} else {
break;
}
}
if (combineCount) {
elementList.splice(i + 1, combineCount);
}
}
element.pagingIndex = (_d = element.pagingIndex) != null ? _d : 0;
this.tableParticle.computeRowColInfo(element);
const trList = element.trList;
for (let t = 0; t < trList.length; t++) {
const tr = trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const rowList2 = this.computeRowList({
innerWidth: (td.width - tdPaddingWidth) * scale,
elementList: td.value,
isFromTable: true,
isPagingMode
});
const rowHeight = rowList2.reduce((pre, cur) => pre + cur.height, 0);
td.rowList = rowList2;
const curTdHeight = rowHeight / scale + tdPaddingHeight;
if (td.height < curTdHeight) {
const extraHeight = curTdHeight - td.height;
const changeTr = trList[t + td.rowspan - 1];
changeTr.height += extraHeight;
changeTr.tdList.forEach((changeTd) => {
changeTd.height += extraHeight;
});
}
let curTdMinHeight = 0;
let curTdRealHeight = 0;
let i2 = 0;
while (i2 < td.rowspan) {
const curTr = trList[i2 + t] || trList[t];
curTdMinHeight += curTr.minHeight;
curTdRealHeight += curTr.height;
i2++;
}
td.realMinHeight = curTdMinHeight;
td.realHeight = curTdRealHeight;
td.mainHeight = curTdHeight;
}
}
const reduceTrList = this.tableParticle.getTrListGroupByCol(trList);
for (let t = 0; t < reduceTrList.length; t++) {
const tr = reduceTrList[t];
let reduceHeight = -1;
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
const curTdRealHeight = td.realHeight;
const curTdHeight = td.mainHeight;
const curTdMinHeight = td.realMinHeight;
const curReduceHeight = curTdHeight < curTdMinHeight ? curTdRealHeight - curTdMinHeight : curTdRealHeight - curTdHeight;
if (!~reduceHeight || curReduceHeight < reduceHeight) {
reduceHeight = curReduceHeight;
}
}
if (reduceHeight > 0) {
const changeTr = trList[t];
changeTr.height -= reduceHeight;
changeTr.tdList.forEach((changeTd) => {
changeTd.height -= reduceHeight;
});
}
}
this.tableParticle.computeRowColInfo(element);
const tableHeight = this.tableParticle.getTableHeight(element);
const tableWidth = this.tableParticle.getTableWidth(element);
element.width = tableWidth;
element.height = tableHeight;
const elementWidth = tableWidth * scale;
const elementHeight = tableHeight * scale;
metrics.width = elementWidth;
metrics.height = elementHeight;
metrics.boundingBoxDescent = elementHeight;
metrics.boundingBoxAscent = -rowMargin;
if (isPagingMode) {
const height2 = this.getHeight();
const marginHeight = this.getMainOuterHeight();
let curPagePreHeight = marginHeight;
for (let r = 0; r < rowList.length; r++) {
const row = rowList[r];
if (row.height + curPagePreHeight > height2 || ((_e = rowList[r - 1]) == null ? void 0 : _e.isPageBreak)) {
curPagePreHeight = marginHeight + row.height;
} else {
curPagePreHeight += row.height;
}
}
const rowMarginHeight = rowMargin * 2 * scale;
if (curPagePreHeight + element.trList[0].height + rowMarginHeight > height2 || element.pagingIndex !== 0 && element.trList[0].pagingRepeat) {
curPagePreHeight = marginHeight;
}
if (curPagePreHeight + rowMarginHeight + elementHeight > height2) {
const trList2 = element.trList;
let deleteStart = 0;
let deleteCount = 0;
let preTrHeight = 0;
if (trList2.length > 1) {
for (let r = 0; r < trList2.length; r++) {
const tr = trList2[r];
const trHeight = tr.height * scale;
if (curPagePreHeight + rowMarginHeight + preTrHeight + trHeight > height2) {
const rowColCount = tr.tdList.reduce(
(pre, cur) => pre + cur.colspan,
0
);
if (((_f = element.colgroup) == null ? void 0 : _f.length) !== rowColCount) {
deleteCount = 0;
}
break;
} else {
deleteStart = r + 1;
deleteCount = trList2.length - deleteStart;
preTrHeight += trHeight;
}
}
}
if (deleteCount) {
const cloneTrList = trList2.splice(deleteStart, deleteCount);
const cloneTrHeight = cloneTrList.reduce(
(pre, cur) => pre + cur.height,
0
);
const pagingId = element.pagingId || getUUID();
element.pagingId = pagingId;
element.height -= cloneTrHeight;
metrics.height -= cloneTrHeight;
metrics.boundingBoxDescent -= cloneTrHeight;
const cloneElement = deepClone(element);
cloneElement.pagingId = pagingId;
cloneElement.pagingIndex = element.pagingIndex + 1;
const repeatTrList = trList2.filter((tr) => tr.pagingRepeat);
if (repeatTrList.length) {
const cloneRepeatTrList = deepClone(repeatTrList);
cloneRepeatTrList.forEach((tr) => tr.id = getUUID());
cloneTrList.unshift(...cloneRepeatTrList);
}
cloneElement.trList = cloneTrList;
cloneElement.id = getUUID();
this.spliceElementList(elementList, i + 1, 0, cloneElement);
}
}
if (element.pagingId) {
const positionContext = this.position.getPositionContext();
if (positionContext.isTable) {
let newPositionContextIndex = -1;
let newPositionContextTrIndex = -1;
let tableIndex = i;
while (tableIndex < elementList.length) {
const curElement = elementList[tableIndex];
if (curElement.pagingId !== element.pagingId)
break;
const trIndex = curElement.trList.findIndex(
(r) => r.id === positionContext.trId
);
if (~trIndex) {
newPositionContextIndex = tableIndex;
newPositionContextTrIndex = trIndex;
break;
}
tableIndex++;
}
if (~newPositionContextIndex) {
positionContext.index = newPositionContextIndex;
positionContext.trIndex = newPositionContextTrIndex;
this.position.setPositionContext(positionContext);
}
}
}
}
} else if (element.type === ElementType.SEPARATOR) {
const {
separator: { lineWidth }
} = this.options;
element.width = availableWidth / scale;
metrics.width = availableWidth;
metrics.height = lineWidth * scale;
metrics.boundingBoxAscent = -rowMargin;
metrics.boundingBoxDescent = -rowMargin + metrics.height;
} else if (element.type === ElementType.PAGE_BREAK) {
element.width = availableWidth / scale;
metrics.width = availableWidth;
metrics.height = defaultSize;
} else if (element.type === ElementType.RADIO || element.controlComponent === ControlComponent.RADIO) {
const { width, height: height2, gap } = this.options.radio;
const elementWidth = width + gap * 2;
element.width = elementWidth;
metrics.width = elementWidth * scale;
metrics.height = height2 * scale;
} else if (element.type === ElementType.CHECKBOX || element.controlComponent === ControlComponent.CHECKBOX) {
const { width, height: height2, gap } = this.options.checkbox;
const elementWidth = width + gap * 2;
element.width = elementWidth;
metrics.width = elementWidth * scale;
metrics.height = height2 * scale;
} else if (element.type === ElementType.TAB) {
metrics.width = defaultTabWidth * scale;
metrics.height = defaultSize * scale;
metrics.boundingBoxDescent = 0;
metrics.boundingBoxAscent = metrics.height;
} else if (element.type === ElementType.BLOCK) {
if (!element.width) {
metrics.width = availableWidth;
} else {
const elementWidth = element.width * scale;
metrics.width = Math.min(elementWidth, availableWidth);
}
metrics.height = element.height * scale;
metrics.boundingBoxDescent = metrics.height;
metrics.boundingBoxAscent = 0;
} else {
const size = element.size || defaultSize;
if (element.type === ElementType.SUPERSCRIPT || element.type === ElementType.SUBSCRIPT) {
element.actualSize = Math.ceil(size * 0.6);
}
metrics.height = (element.actualSize || size) * scale;
this.getCtx2d().font = this.getElementFont(element);
const fontMetrics = this.textParticle.measureText(this.getCtx2d(), element);
metrics.width = fontMetrics.width * scale;
if (element.letterSpacing) {
metrics.width += element.letterSpacing * scale;
}
metrics.boundingBoxAscent = (element.value === ZERO ? element.size || defaultSize : fontMetrics.actualBoundingBoxAscent) * scale;
metrics.boundingBoxDescent = fontMetrics.actualBoundingBoxDescent * scale;
if (element.type === ElementType.SUPERSCRIPT) {
metrics.boundingBoxAscent += metrics.height / 2;
} else if (element.type === ElementType.SUBSCRIPT) {
metrics.boundingBoxDescent += metrics.height / 2;
}
}
const ascent = element.imgDisplay !== ImageDisplay.INLINE && element.type === ElementType.IMAGE || element.type === ElementType.LATEX ? metrics.height + rowMargin : metrics.boundingBoxAscent + rowMargin;
const height = rowMargin + metrics.boundingBoxAscent + metrics.boundingBoxDescent + rowMargin;
const rowElement = Object.assign(element, {
metrics,
left: 0,
style: this.getElementFont(element, scale)
});
if ((_g = rowElement.control) == null ? void 0 : _g.minWidth) {
if (rowElement.controlComponent) {
controlRealWidth += metrics.width;
}
if (rowElement.controlComponent === ControlComponent.POSTFIX) {
const extraWidth = rowElement.control.minWidth - controlRealWidth;
if (extraWidth > 0) {
const rowRemainingWidth = availableWidth - curRow.width - metrics.width;
const left = Math.min(rowRemainingWidth, extraWidth) * scale;
rowElement.left = left;
curRow.width += left;
}
controlRealWidth = 0;
}
}
const preElement = elementList[i - 1];
let nextElement = elementList[i + 1];
let curRowWidth = curRow.width + metrics.width;
if (this.options.wordBreak === WordBreak.BREAK_WORD) {
if ((!(preElement == null ? void 0 : preElement.type) || (preElement == null ? void 0 : preElement.type) === ElementType.TEXT) && (!element.type || element.type === ElementType.TEXT)) {
const word = `${(preElement == null ? void 0 : preElement.value) || ""}${element.value}`;
if (this.WORD_LIKE_REG.test(word)) {
const { width, endElement } = this.textParticle.measureWord(
this.getCtx2d(),
elementList,
i
);
const wordWidth = width * scale;
if (wordWidth <= availableWidth) {
curRowWidth += wordWidth;
nextElement = endElement;
}
}
const punctuationWidth = this.textParticle.measurePunctuationWidth(
this.getCtx2d(),
nextElement
);
curRowWidth += punctuationWidth * scale;
}
}
if (element.listId) {
if (element.listId !== listId) {
listIndex = 0;
} else if (element.value === ZERO && !element.listWrap) {
listIndex++;
}
}
listId = element.listId;
const surroundPosition = this.position.setSurroundPosition({
pageNo,
rowElement,
row: curRow,
rowElementRect: {
x,
y,
height,
width: metrics.width
},
availableWidth,
surroundElementList
});
x = surroundPosition.x;
curRowWidth += surroundPosition.rowIncreaseWidth;
x += metrics.width;
const isForceBreak = element.type === ElementType.SEPARATOR || element.type === ElementType.TABLE || (preElement == null ? void 0 : preElement.type) === ElementType.TABLE || (preElement == null ? void 0 : preElement.type) === ElementType.BLOCK || element.type === ElementType.BLOCK || (preElement == null ? void 0 : preElement.imgDisplay) === ImageDisplay.INLINE || element.imgDisplay === ImageDisplay.INLINE || (preElement == null ? void 0 : preElement.listId) !== element.listId || i !== 0 && element.value === ZERO;
const isWidthNotEnough = curRowWidth > availableWidth;
const isWrap = isForceBreak || isWidthNotEnough;
if (isWrap) {
const row = {
width: metrics.width,
height,
startIndex: i,
elementList: [rowElement],
ascent,
rowIndex: curRow.rowIndex + 1,
rowFlex: ((_h = elementList[i]) == null ? void 0 : _h.rowFlex) || ((_i = elementList[i + 1]) == null ? void 0 : _i.rowFlex),
isPageBreak: element.type === ElementType.PAGE_BREAK
};
if (rowElement.controlComponent !== ControlComponent.PREFIX && ((_j = rowElement.control) == null ? void 0 : _j.indentation) === ControlIndentation.VALUE_START) {
const preStartIndex = curRow.elementList.findIndex(
(el) => el.controlId === rowElement.controlId && el.controlComponent !== ControlComponent.PREFIX
);
if (~preStartIndex) {
const preRowPositionList = this.position.computeRowPosition({
row: curRow,
innerWidth: this.getInnerWidth()
});
const valueStartPosition = preRowPositionList[preStartIndex];
if (valueStartPosition) {
row.offsetX = valueStartPosition.coordinate.leftTop[0];
}
}
}
if (element.listId) {
row.isList = true;
row.offsetX = listStyleMap.get(element.listId);
row.listIndex = listIndex;
}
rowList.push(row);
} else {
curRow.width += metrics.width;
if (i === 0 && getIsBlockElement(elementList[1])) {
curRow.height = defaultBasicRowMarginHeight;
curRow.ascent = defaultBasicRowMarginHeight;
} else if (curRow.height < height) {
curRow.height = height;
curRow.ascent = ascent;
}
curRow.elementList.push(rowElement);
}
if (isWrap || i === elementList.length - 1) {
curRow.isWidthNotEnough = isWidthNotEnough && !isForceBreak;
if (!curRow.isSurround && ((preElement == null ? void 0 : preElement.rowFlex) === RowFlex.JUSTIFY || (preElement == null ? void 0 : preElement.rowFlex) === RowFlex.ALIGNMENT && isWidthNotEnough)) {
const rowElementList = ((_k = curRow.elementList[0]) == null ? void 0 : _k.value) === ZERO ? curRow.elementList.slice(1) : curRow.elementList;
const gap = (availableWidth - curRow.width) / (rowElementList.length - 1);
for (let e = 0; e < rowElementList.length - 1; e++) {
const el = rowElementList[e];
el.metrics.width += gap;
}
curRow.width = availableWidth;
}
}
if (isWrap) {
x = startX;
y += curRow.height;
if (isPagingMode && !isFromTable && pageHeight && (y - startY + mainOuterHeight + height > pageHeight || element.type === ElementType.PAGE_BREAK)) {
y = startY;
deleteSurroundElementList(surroundElementList, pageNo);
pageNo += 1;
}
rowElement.left = 0;
const nextRow = rowList[rowList.length - 1];
const surroundPosition2 = this.position.setSurroundPosition({
pageNo,
rowElement,
row: nextRow,
rowElementRect: {
x,
y,
height,
width: metrics.width
},
availableWidth,
surroundElementList
});
x = surroundPosition2.x;
x += metrics.width;
}
}
return rowList;
}
_computePageList() {
var _a;
const pageRowList = [[]];
const {
pageMode,
pageNumber: { maxPageNo }
} = this.options;
const height = this.getHeight();
const marginHeight = this.getMainOuterHeight();
let pageHeight = marginHeight;
let pageNo = 0;
if (pageMode === PageMode.CONTINUITY) {
pageRowList[0] = this.rowList;
pageHeight += this.rowList.reduce((pre, cur) => pre + cur.height, 0);
const dpr = this.getPagePixelRatio();
const pageDom = this.pageList[0];
const pageDomHeight = Number(pageDom.style.height.replace("px", ""));
if (pageHeight > pageDomHeight) {
pageDom.style.height = `${pageHeight}px`;
pageDom.height = pageHeight * dpr;
} else {
const reduceHeight = pageHeight < height ? height : pageHeight;
pageDom.style.height = `${reduceHeight}px`;
pageDom.height = reduceHeight * dpr;
}
this._initPageContext(this.ctxList[0]);
} else {
for (let i = 0; i < this.rowList.length; i++) {
const row = this.rowList[i];
if (row.height + pageHeight > height || ((_a = this.rowList[i - 1]) == null ? void 0 : _a.isPageBreak)) {
if (Number.isInteger(maxPageNo) && pageNo >= maxPageNo) {
this.elementList = this.elementList.slice(0, row.startIndex);
break;
}
pageHeight = marginHeight + row.height;
pageRowList.push([row]);
pageNo++;
} else {
pageHeight += row.height;
pageRowList[pageNo].push(row);
}
}
}
return pageRowList;
}
_drawHighlight(ctx2d, payload) {
const {
control: { activeBackgroundColor }
} = this.options;
const { rowList, positionList } = payload;
for (let i = 0; i < rowList.length; i++) {
const curRow = rowList[i];
for (let j = 0; j < curRow.elementList.length; j++) {
const element = curRow.elementList[j];
if (element.highlight) {
const {
coordinate: {
leftTop: [x, y]
}
} = positionList[curRow.startIndex + j];
const offsetX = element.left || 0;
this.highlight.recordFillInfo(
ctx2d,
x - offsetX,
y,
element.metrics.width + offsetX,
curRow.height,
element.highlight || activeBackgroundColor
);
this.highlight.render(ctx2d);
}
}
}
}
drawRow(ctx2d, payload) {
var _a, _b, _c;
this._drawHighlight(ctx2d, payload);
const {
scale,
table: { tdPadding },
group: group2,
lineBreak
} = this.options;
const {
rowList,
pageNo,
positionList,
zone: zone2,
isDrawLineBreak = !lineBreak.disabled
} = payload;
const isPrintMode = this.mode === EditorMode.PRINT;
for (let i = 0; i < rowList.length; i++) {
const curRow = rowList[i];
for (let j = 0; j < curRow.elementList.length; j++) {
const element = curRow.elementList[j];
const metrics = element.metrics;
const {
ascent: offsetY,
coordinate: {
leftTop: [x, y]
}
} = positionList[curRow.startIndex + j];
const preElement = curRow.elementList[j - 1];
if (element.type === ElementType.IMAGE) {
this.textParticle.complete();
if (element.imgDisplay !== ImageDisplay.SURROUND && element.imgDisplay !== ImageDisplay.FLOAT_TOP && element.imgDisplay !== ImageDisplay.FLOAT_BOTTOM) {
this.imageParticle.render(this.getCtx2d(), element, x, y + offsetY);
}
} else if (element.type === ElementType.LATEX) {
this.textParticle.complete();
this.laTexParticle.render(this.getCtx2d(), element, x, y + offsetY);
} else if (element.type === ElementType.TABLE) {
this.tableParticle.render(this.getCtx2d(), element, x, y);
} else if (element.type === ElementType.HYPERLINK) {
this.textParticle.complete();
this.hyperlinkParticle.render(this.getCtx2d(), element, x, y + offsetY);
} else if (element.type === ElementType.DATE) {
const nextElement = curRow.elementList[j + 1];
if (!preElement || preElement.dateId !== element.dateId) {
this.textParticle.complete();
}
this.textParticle.record(this.getCtx2d(), element, x, y + offsetY);
if (!nextElement || nextElement.dateId !== element.dateId) {
this.textParticle.complete();
}
} else if (element.type === ElementType.SUPERSCRIPT) {
this.textParticle.complete();
this.superscriptParticle.render(this.getCtx2d(), element, x, y + offsetY);
} else if (element.type === ElementType.SUBSCRIPT) {
this.underline.render(this.getCtx2d());
this.textParticle.complete();
this.subscriptParticle.render(this.getCtx2d(), element, x, y + offsetY);
} else if (element.type === ElementType.SEPARATOR) {
this.separatorParticle.render(this.getCtx2d(), element, x, y);
} else if (element.type === ElementType.PAGE_BREAK)
;
else if (element.type === ElementType.CHECKBOX || element.controlComponent === ControlComponent.CHECKBOX) {
this.textParticle.complete();
this.checkboxParticle.render({
ctx2d: this.getCtx2d(),
x,
y: y + offsetY,
index: j,
row: curRow
});
} else if (element.type === ElementType.RADIO || element.controlComponent === ControlComponent.RADIO) {
this.textParticle.complete();
this.radioParticle.render({
ctx2d: this.getCtx2d(),
x,
y: y + offsetY,
index: j,
row: curRow
});
} else if (element.type === ElementType.TAB) {
this.textParticle.complete();
} else if (element.rowFlex === RowFlex.ALIGNMENT || element.rowFlex === RowFlex.JUSTIFY) {
this.textParticle.record(this.getCtx2d(), element, x, y + offsetY);
this.textParticle.complete();
} else if (element.type === ElementType.BLOCK) {
this.textParticle.complete();
this.blockParticle.render(pageNo, element, x, y);
} else {
if (element.left) {
this.textParticle.complete();
}
this.textParticle.record(this.getCtx2d(), element, x, y + offsetY);
if (element.width || element.letterSpacing || PUNCTUATION_REG.test(element.value)) {
this.textParticle.complete();
}
}
if (isDrawLineBreak && !isPrintMode && this.mode !== EditorMode.CLEAN && !curRow.isWidthNotEnough && j === curRow.elementList.length - 1) {
this.lineBreakParticle.render(this.getCtx2d(), element, x, y + curRow.height / 2);
}
if (element.underline || ((_a = element.control) == null ? void 0 : _a.underline)) {
if ((preElement == null ? void 0 : preElement.type) === ElementType.SUBSCRIPT && element.type !== ElementType.SUBSCRIPT) {
this.underline.render(this.getCtx2d());
}
const rowMargin = this.getElementRowMargin(element);
const offsetX = element.left || 0;
let offsetY2 = 0;
if (element.type === ElementType.SUBSCRIPT) {
offsetY2 = this.subscriptParticle.getOffsetY(element);
}
const color = element.controlComponent === ControlComponent.PLACEHOLDER ? void 0 : element.color;
this.underline.recordFillInfo(
this.getCtx2d(),
x - offsetX,
y + curRow.height - rowMargin + offsetY2,
metrics.width + offsetX,
0,
color,
(_b = element.textDecoration) == null ? void 0 : _b.style
);
} else if ((preElement == null ? void 0 : preElement.underline) || ((_c = preElement == null ? void 0 : preElement.control) == null ? void 0 : _c.underline)) {
this.underline.render(this.getCtx2d());
}
if (element.strikeout) {
if (!element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {
if (preElement && (preElement.type === ElementType.SUBSCRIPT && element.type !== ElementType.SUBSCRIPT || preElement.type === ElementType.SUPERSCRIPT && element.type !== ElementType.SUPERSCRIPT || this.getElementSize(preElement) !== this.getElementSize(element))) {
this.strikeout.render(this.getCtx2d());
}
const standardMetrics = this.textParticle.measureBasisWord(
this.getCtx2d(),
this.getElementFont(element)
);
let adjustY = y + offsetY + standardMetrics.actualBoundingBoxDescent * scale - metrics.height / 2;
if (element.type === ElementType.SUBSCRIPT) {
adjustY += this.subscriptParticle.getOffsetY(element);
} else if (element.type === ElementType.SUPERSCRIPT) {
adjustY += this.superscriptParticle.getOffsetY(element);
}
this.strikeout.recordFillInfo(this.getCtx2d(), x, adjustY, metrics.width);
}
} else if (preElement == null ? void 0 : preElement.strikeout) {
this.strikeout.render(this.getCtx2d());
}
if (!group2.disabled && element.groupIds) {
this.group.recordFillInfo(element, x, y, metrics.width, curRow.height);
}
if (element.type === ElementType.TABLE) {
const tdPaddingWidth = tdPadding[1] + tdPadding[3];
for (let t = 0; t < element.trList.length; t++) {
const tr = element.trList[t];
for (let d = 0; d < tr.tdList.length; d++) {
const td = tr.tdList[d];
this.drawRow(ctx2d, {
elementList: td.value,
positionList: td.positionList,
rowList: td.rowList,
pageNo,
startIndex: 0,
innerWidth: (td.width - tdPaddingWidth) * scale,
zone: zone2,
isDrawLineBreak
});
}
}
}
}
if (curRow.isList) {
this.listParticle.drawListStyle(
ctx2d,
curRow,
positionList[curRow.startIndex]
);
}
this.textParticle.complete();
this.underline.render(this.getCtx2d());
this.strikeout.render(this.getCtx2d());
this.group.render(this.getCtx2d());
}
}
_drawFloat(ctx2d, payload) {
const { scale } = this.options;
const floatPositionList = this.position.getFloatPositionList();
const { imgDisplays, pageNo } = payload;
for (let e = 0; e < floatPositionList.length; e++) {
const floatPosition = floatPositionList[e];
const element = floatPosition.element;
if ((pageNo === floatPosition.pageNo || floatPosition.zone === EditorZone.HEADER || floatPosition.zone == EditorZone.FOOTER) && element.imgDisplay && imgDisplays.includes(element.imgDisplay) && element.type === ElementType.IMAGE) {
const imgFloatPosition = element.imgFloatPosition;
this.imageParticle.render(
ctx2d,
element,
imgFloatPosition.x * scale,
imgFloatPosition.y * scale
);
}
}
}
_clearPage(pageNo) {
const ctx = this.getCtx2d();
const pageDom = this.getPageList()[pageNo];
if (pageDom) {
ctx.clearRect(
0,
0,
Math.max(pageDom.width, this.getWidth()),
Math.max(pageDom.height, this.getHeight())
);
}
this.blockParticle.clear();
}
_drawPage(payload) {
var _a, _b;
const { elementList, positionList, rowList, pageNo } = payload;
const {
pageMode,
header,
footer,
pageNumber,
lineNumber,
pageBorder
} = this.options;
const innerWidth = this.getInnerWidth();
const ctx2d = this.getCtx2d();
this.getPdf().setPage(pageNo + 1);
this._clearPage(pageNo);
this.background.render(ctx2d, pageNo);
if (this.mode !== EditorMode.PRINT) {
this.margin.render(ctx2d, pageNo);
}
this._drawFloat(ctx2d, {
pageNo,
imgDisplays: [ImageDisplay.FLOAT_BOTTOM]
});
const index = (_a = rowList[0]) == null ? void 0 : _a.startIndex;
this.drawRow(ctx2d, {
elementList,
positionList,
rowList,
pageNo,
startIndex: index,
innerWidth,
zone: EditorZone.MAIN
});
if (this.getOptions().pageMode === PageMode.PAGING) {
if (!header.disabled) {
this.header.render(ctx2d, pageNo);
}
if (!pageNumber.disabled) {
this.pageNumber.render(ctx2d, pageNo);
}
if (!footer.disabled) {
this.footer.render(ctx2d, pageNo);
}
}
this._drawFloat(ctx2d, {
pageNo,
imgDisplays: [ImageDisplay.FLOAT_TOP, ImageDisplay.SURROUND]
});
if (pageMode !== PageMode.CONTINUITY && this.options.watermark.data) {
this.waterMark.render(ctx2d, pageNo);
}
if (this.elementList.length <= 1 && !((_b = this.elementList[0]) == null ? void 0 : _b.listId)) {
this.placeholder.render(ctx2d);
}
if (!lineNumber.disabled) {
this.lineNumber.render(ctx2d, pageNo);
}
if (!pageBorder.disabled) {
this.pageBorder.render(ctx2d);
}
}
_immediateRender() {
const positionList = this.getPosition().getOriginalMainPositionList();
const elementList = this.getOriginalMainElementList();
for (let i = 0; i < this.pageRowList.length; i++) {
this._drawPage({
elementList,
positionList,
rowList: this.pageRowList[i],
pageNo: i
});
}
}
render(payload) {
const { header, footer } = this.options;
const {
isCompute = true
} = payload || {};
const innerWidth = this.getInnerWidth();
const isPagingMode = this.getOptions().pageMode === PageMode.PAGING;
if (isCompute) {
this.position.setFloatPositionList([]);
if (isPagingMode) {
if (!header.disabled) {
this.header.compute();
}
if (!footer.disabled) {
this.footer.compute();
}
}
const margins = this.getMargins();
const pageHeight = this.getHeight();
const extraHeight = this.header.getExtraHeight();
const mainOuterHeight = this.getMainOuterHeight();
const startX = margins[3];
const startY = margins[0] + extraHeight;
const surroundElementList = pickSurroundElementList(this.elementList);
this.rowList = this.computeRowList({
startX,
startY,
pageHeight,
mainOuterHeight,
isPagingMode,
innerWidth,
surroundElementList,
elementList: this.elementList
});
this.pageRowList = this._computePageList();
this.position.computePositionList();
}
for (let i = 0; i < this.pageRowList.length; i++) {
if (!this.pageList[i]) {
this._createPage(i);
}
}
const curPageCount = this.pageRowList.length;
const prePageCount = this.pageList.length;
if (prePageCount > curPageCount) {
const deleteCount = prePageCount - curPageCount;
this.ctxList.splice(curPageCount, deleteCount);
this.pageList.splice(curPageCount, deleteCount).forEach((page, index) => {
if (page.remove) {
page.remove();
}
this.getPdf().deletePage(index + 1);
});
}
if (this.getPdf().getNumberOfPages() > this.getPageList().length) {
const deleteCount = this.getPdf().getNumberOfPages() - this.getPageList().length;
for (let i = 1; i <= deleteCount; i++) {
this.getPdf().deletePage(i);
}
}
if (this.getPdf().getNumberOfPages() < this.getPageList().length) {
const addCount = this.getPageList().length - this.getPdf().getNumberOfPages();
for (let i = 1; i <= addCount; i++) {
this.getPdf().addPage();
}
}
this._immediateRender();
if (this.getPdf().getNumberOfPages() > this.getPageList().length) {
const deleteCount = this.getPdf().getNumberOfPages() - this.getPageList().length;
for (let i = 1; i <= deleteCount; i++) {
this.getPdf().deletePage(i);
}
}
}
destroy() {
}
clearSideEffect() {
this.getHyperlinkParticle().clearHyperlinkPopup();
this.getDateParticle().clearDatePicker();
}
}
export { DrawPdf, svgString2Image };
//# sourceMappingURL=canvas-editor-pdf.es.js.map